[
  {
    "path": ".editorconfig",
    "content": "# Remove the line below if you want to inherit .editorconfig settings from higher directories\nroot = true\n\n# All files\n[*]\ncharset = utf-8\nend_of_line = crlf\ninsert_final_newline = false\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\n\n# Markdown files\n[*.{md}]\nindent_size = 2\n\n# Visual Studio Solution Files\n[*.sln]\nindent_style = tab\n\n# Visual Studio XML Project Files\n[*.{csproj,vbproj,vcxproj.filters,proj,projitems,shproj}]\nindent_size = 2\n\n# XML Configuration Files\n[*.{xml,config,props,targets,nuspec,resx,ruleset,vsixmanifest,vsct}]\nindent_size = 2\n\n# C# files\n[*.cs]\n\n#### Core EditorConfig Options ####\n\n# Indentation and spacing\nindent_size = 4\nindent_style = space\ntab_width = 4\n\n# New line preferences\nend_of_line = crlf\ninsert_final_newline = false\n\n#### .NET Coding Conventions ####\n\n# Organize usings\ndotnet_separate_import_directive_groups = false\ndotnet_sort_system_directives_first = false\nfile_header_template = unset\n\n# this. and Me. preferences\ndotnet_style_qualification_for_event = false:suggestion\ndotnet_style_qualification_for_field = false:suggestion\ndotnet_style_qualification_for_method = false:suggestion\ndotnet_style_qualification_for_property = false:suggestion\n\n# Language keywords vs BCL types preferences\ndotnet_style_predefined_type_for_locals_parameters_members = true:suggestion\ndotnet_style_predefined_type_for_member_access = true\n\n# Parentheses preferences\ndotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity\ndotnet_style_parentheses_in_other_operators = never_if_unnecessary\ndotnet_style_parentheses_in_relational_binary_operators = always_for_clarity\n\n# Modifier preferences\ndotnet_style_require_accessibility_modifiers = for_non_interface_members\n\n# Expression-level preferences\ndotnet_style_coalesce_expression = true\ndotnet_style_collection_initializer = true\ndotnet_style_explicit_tuple_names = true\ndotnet_style_namespace_match_folder = true\ndotnet_style_null_propagation = true\ndotnet_style_object_initializer = true\ndotnet_style_operator_placement_when_wrapping = beginning_of_line\ndotnet_style_prefer_auto_properties = true:suggestion\ndotnet_style_prefer_compound_assignment = true\ndotnet_style_prefer_conditional_expression_over_assignment = true\ndotnet_style_prefer_conditional_expression_over_return = true\ndotnet_style_prefer_inferred_anonymous_type_member_names = true\ndotnet_style_prefer_inferred_tuple_names = true\ndotnet_style_prefer_is_null_check_over_reference_equality_method = true\ndotnet_style_prefer_simplified_boolean_expressions = true\ndotnet_style_prefer_simplified_interpolation = true\n\n# Field preferences\ndotnet_style_readonly_field = true\n\n# Parameter preferences\ndotnet_code_quality_unused_parameters = all\n\n# Suppression preferences\ndotnet_remove_unnecessary_suppression_exclusions = 0\n\n# New line preferences\ndotnet_style_allow_multiple_blank_lines_experimental = false:suggestion\ndotnet_style_allow_statement_immediately_after_block_experimental = false:warning\n\n#### C# Coding Conventions ####\n\n# var preferences\ncsharp_style_var_elsewhere = true:suggestion\ncsharp_style_var_for_built_in_types = true:suggestion\ncsharp_style_var_when_type_is_apparent = true:suggestion\n\n# Expression-bodied members\ncsharp_style_expression_bodied_accessors = when_on_single_line:suggestion\ncsharp_style_expression_bodied_constructors = true\ncsharp_style_expression_bodied_indexers = true\ncsharp_style_expression_bodied_lambdas = when_on_single_line:suggestion\ncsharp_style_expression_bodied_local_functions = false\ncsharp_style_expression_bodied_methods = true\ncsharp_style_expression_bodied_operators = true\ncsharp_style_expression_bodied_properties = true\n\n# Pattern matching preferences\ncsharp_style_pattern_matching_over_as_with_null_check = true\ncsharp_style_pattern_matching_over_is_with_cast_check = true\ncsharp_style_prefer_not_pattern = true\ncsharp_style_prefer_pattern_matching = true:suggestion\ncsharp_style_prefer_switch_expression = true\n\n# Null-checking preferences\ncsharp_style_conditional_delegate_call = true\n\n# Modifier preferences\ncsharp_prefer_static_local_function = true\ncsharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async\n\n# Code-block preferences\ncsharp_prefer_braces = false:suggestion\ncsharp_prefer_simple_using_statement = true\ncsharp_style_namespace_declarations = file_scoped:suggestion\n\n# Expression-level preferences\ncsharp_prefer_simple_default_expression = true\ncsharp_style_deconstructed_variable_declaration = true\ncsharp_style_implicit_object_creation_when_type_is_apparent = true\ncsharp_style_inlined_variable_declaration = true\ncsharp_style_pattern_local_over_anonymous_function = true\ncsharp_style_prefer_index_operator = true:silent\ncsharp_style_prefer_null_check_over_type_check = true\ncsharp_style_prefer_range_operator = true:silent\ncsharp_style_throw_expression = true\ncsharp_style_unused_value_assignment_preference = discard_variable\ncsharp_style_unused_value_expression_statement_preference = discard_variable\n\n# 'using' directive preferences\ncsharp_using_directive_placement = outside_namespace:warning\n\n# New line preferences\ncsharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true\ncsharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:warning\ncsharp_style_allow_embedded_statements_on_same_line_experimental = false:warning\n\n#### C# Formatting Rules ####\n\n# New line preferences\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_else = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_before_members_in_anonymous_types = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_open_brace = all\ncsharp_new_line_between_query_expression_clauses = true\n\n# Indentation preferences\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents = true\ncsharp_indent_case_contents_when_block = false\ncsharp_indent_labels = one_less_than_current\ncsharp_indent_switch_labels = true\n\n# Space preferences\ncsharp_space_after_cast = false\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_after_comma = true\ncsharp_space_after_dot = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_around_declaration_statements = false\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_before_comma = false\ncsharp_space_before_dot = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = false\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = false\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_parentheses = false\ncsharp_space_between_square_brackets = false\n\n# Wrapping preferences\ncsharp_preserve_single_line_blocks = true\ncsharp_preserve_single_line_statements = true\n\n#### Naming styles ####\n\n# Naming rules\n\ndotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion\ndotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface\ndotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i\n\ndotnet_naming_rule.types_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.types_should_be_pascal_case.symbols = types\ndotnet_naming_rule.types_should_be_pascal_case.style = pascal_case\n\ndotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members\ndotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case\n\n# Symbol specifications\n\ndotnet_naming_symbols.interface.applicable_kinds = interface\ndotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.interface.required_modifiers = \n\ndotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum\ndotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.types.required_modifiers = \n\ndotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method\ndotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected\ndotnet_naming_symbols.non_field_members.required_modifiers = \n\n# Naming styles\n\ndotnet_naming_style.pascal_case.required_prefix = \ndotnet_naming_style.pascal_case.required_suffix = \ndotnet_naming_style.pascal_case.word_separator = \ndotnet_naming_style.pascal_case.capitalization = pascal_case\n\ndotnet_naming_style.begins_with_i.required_prefix = I\ndotnet_naming_style.begins_with_i.required_suffix = \ndotnet_naming_style.begins_with_i.word_separator = \ndotnet_naming_style.begins_with_i.capitalization = pascal_case\n"
  },
  {
    "path": ".gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [NickeManarin]\npatreon: nicke\nopen_collective: # Replace with a single Open Collective username\nko_fi: nickemanarin\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: NickeManarin\notechie: # Replace with a single Otechie username\ncustom: [\"https://www.screentogif.com/donate\", \"https://flattr.com/@NickeManarin/domain/screentogif.com\", \"https://www.buymeacoffee.com/NickeManarin\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "content": "---\nname: Bug Report\nabout: Create a report to help us improve\ntitle: \"[Bug] Title\"\nlabels: \"\\U0001F537 Bug \\U0001F41B, ⬜ Pending\"\nassignees: NickeManarin\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. Windows 10]\n - Version [e.g. 2.35.2]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.md",
    "content": "---\nname: Feature Request\nabout: Suggest an idea for this project\ntitle: \"[Feature Request] Title\"\nlabels: \"\\U0001F537Enhancement, ⬜ Pending\"\nassignees: NickeManarin\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/workflows/discord-releases.yml",
    "content": "# This is a basic workflow to help you get started with Actions\nname: Discord • Releases\n\n# Controls when the action will run. \non: \n  # Triggers the workflow on new release.\n  release:\n    types: [published]\n      \n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n  \n# A workflow run is made up of one or more jobs that can run sequentially or in parallel\njobs:\n  # This workflow contains a single job called \"released\"\n  released:\n    # The type of runner that the job will run on\n    runs-on: ubuntu-latest\n    name: Sends release details to Discord/News channel\n    \n    # Steps represent a sequence of tasks that will be executed as part of the job\n    steps:\n      - name: Sending release notes\n      \n        # Checks-out a repository, to send the release notes\n        uses: nhevia/discord-styled-releases@main\n        \n        # Gets the ID and Token from the project secrets\n        with:\n          webhook_id: ${{ secrets.DISCORD_WEBHOOK_ID }}\n          webhook_token: ${{ secrets.DISCORD_WEBHOOK_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "################################################################################\n# This .gitignore file was automatically created by Microsoft(R) Visual Studio.\n################################################################################\n\n/GifRecorder.v12.suo\n/.vs\n/GifRecorder\n/GifRecorder.v12-Notebook-Nicke.suo\n/GifRecorder.suo\n/GifRecorder.sdf\n/GifRecorder.sln.DotSettings\nScreenToGif/Util/Secret.cs\n/ScreenToGif/Util/Secret.cs\n\n/ScreenToGif.UWP\n/packages\nobj\nbin\n/log.txt\n*.user\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language, using english when possible\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at nicke@outlook.com.br. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "## Rules to follow for this project:\n\n* Every feature should be packed into the main executable, unless it's optional like FFmpeg and Gifski.\n* To be accepted, any big feature or change should be discussed first with the maintainer of the project.\n* PRs should be directed to the dev branch.\n"
  },
  {
    "path": "Directory.Build.props",
    "content": "<Project>\n  <PropertyGroup>\n    <Version>2.43.0</Version>\n    <FileVersion>2.43.0</FileVersion>\n    <AssemblyVersion>2.43.0</AssemblyVersion>\n    <Company>Nicke Manarin</Company>\n    <Authors>Nicke Manarin</Authors>\n    <Copyright>Copyright© Nicke Manarin 2026</Copyright>\n    <PackageProjectUrl>https://www.screentogif.com</PackageProjectUrl>\n    <PackageReadmeFile>Readme.md</PackageReadmeFile>\n    <RepositoryUrl>https://github.com/nickemanarin/screentogif</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageTags>gif; recorder; editor; screen-recorder; gif-editor</PackageTags>\n    <PackageLicenseExpression>MS-PL</PackageLicenseExpression>\n    <Description>Screen, webcam and sketchboard recorder, with integrated editor!</Description>\n    <CETCompat>false</CETCompat>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "Directory.Packages.props",
    "content": "<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"coverlet.collector\" Version=\"3.1.2\" />\n    <PackageVersion Include=\"KGySoft.CoreLibraries\" Version=\"10.5.0\" />\n    <PackageVersion Include=\"KGySoft.Drawing\" Version=\"10.0.1\" />\n    <PackageVersion Include=\"KGySoft.Drawing.Core\" Version=\"10.0.1\" />\n    <PackageVersion Include=\"KGySoft.Drawing.Wpf\" Version=\"10.0.1\" />\n    <PackageVersion Include=\"Microsoft.CSharp\" Version=\"4.7.0\" />\n    <PackageVersion Include=\"Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers\" Version=\"0.4.421302\" />\n    <PackageVersion Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.1.0\" />\n    <PackageVersion Include=\"Microsoft.Windows.Compatibility\" Version=\"8.0.0\" />\n    <PackageVersion Include=\"SharpCompress\" Version=\"0.40.0\" />\n    <PackageVersion Include=\"SharpDX.Direct3D11\" Version=\"4.2.0\" />\n    <PackageVersion Include=\"System.Drawing.Common\" Version=\"8.0.0\" />\n    <PackageVersion Include=\"System.Management\" Version=\"9.0.5\" />\n    <PackageVersion Include=\"xunit\" Version=\"2.4.1\" />\n    <PackageVersion Include=\"xunit.runner.visualstudio\" Version=\"2.4.3\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "GifRecorder.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 18\nVisualStudioVersion = 18.5.11605.296\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Files\", \"Files\", \"{0039724A-6303-4D73-B5B2-7063DF16C573}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tCODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md\n\t\tCONTRIBUTING.md = CONTRIBUTING.md\n\t\tDirectory.Build.props = Directory.Build.props\n\t\tDirectory.Packages.props = Directory.Packages.props\n\t\tLICENSE.txt = LICENSE.txt\n\t\tLOCALIZATION.md = LOCALIZATION.md\n\t\tREADME.md = README.md\n\tEndProjectSection\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ScreenToGif\", \"ScreenToGif\\ScreenToGif.csproj\", \"{9A332077-74BA-4C6A-8381-6D98C31A490A}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Other\", \"Other\", \"{13F2A1B9-496A-446E-8B06-776ACAE5CEA4}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Translator\", \"Other\\Translator\\Translator.csproj\", \"{8B516DFB-0981-48A2-8A06-35F085C13980}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ScreenToGif.Domain\", \"ScreenToGif.Model\\ScreenToGif.Domain.csproj\", \"{EEE831AD-1447-474D-9875-94E56A854E71}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ScreenToGif.Native\", \"ScreenToGif.Native\\ScreenToGif.Native.csproj\", \"{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ScreenToGif.Test\", \"ScreenToGif.Test\\ScreenToGif.Test.csproj\", \"{9D64714B-20BC-4A18-B89F-FA432E710EB4}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ScreenToGif.Util\", \"ScreenToGif.Util\\ScreenToGif.Util.csproj\", \"{B39A6DFB-F44E-403D-9451-3CEAD3423135}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ScreenToGif.ViewModel\", \"ScreenToGif.ViewModel\\ScreenToGif.ViewModel.csproj\", \"{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug (Store)|Any CPU = Debug (Store)|Any CPU\n\t\tDebug (Store)|ARM64 = Debug (Store)|ARM64\n\t\tDebug (Store)|x64 = Debug (Store)|x64\n\t\tDebug (Store)|x86 = Debug (Store)|x86\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM64 = Debug|ARM64\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM64 = Release|ARM64\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|x64.Build.0 = Debug|x64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Debug|x86.Build.0 = Debug|x86\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|x64.ActiveCfg = Release|x64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|x64.Build.0 = Release|x64\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|x86.ActiveCfg = Release|x86\n\t\t{9A332077-74BA-4C6A-8381-6D98C31A490A}.Release|x86.Build.0 = Release|x86\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Release|x64.ActiveCfg = Release|x64\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980}.Release|x86.ActiveCfg = Release|x86\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|x64.Build.0 = Debug|x64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Debug|x86.Build.0 = Debug|x86\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|x64.ActiveCfg = Release|x64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|x64.Build.0 = Release|x64\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|x86.ActiveCfg = Release|x86\n\t\t{EEE831AD-1447-474D-9875-94E56A854E71}.Release|x86.Build.0 = Release|x86\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|x64.Build.0 = Debug|x64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Debug|x86.Build.0 = Debug|x86\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|x64.ActiveCfg = Release|x64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|x64.Build.0 = Release|x64\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|x86.ActiveCfg = Release|x86\n\t\t{66D60F4A-C0B4-4077-8DE6-0431F6AD5E87}.Release|x86.Build.0 = Release|x86\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|x64.Build.0 = Debug|x64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Debug|x86.Build.0 = Debug|x86\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|x64.ActiveCfg = Release|x64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|x64.Build.0 = Release|x64\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|x86.ActiveCfg = Release|x86\n\t\t{9D64714B-20BC-4A18-B89F-FA432E710EB4}.Release|x86.Build.0 = Release|x86\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|x64.Build.0 = Debug|x64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Debug|x86.Build.0 = Debug|x86\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|x64.ActiveCfg = Release|x64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|x64.Build.0 = Release|x64\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|x86.ActiveCfg = Release|x86\n\t\t{B39A6DFB-F44E-403D-9451-3CEAD3423135}.Release|x86.Build.0 = Release|x86\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|Any CPU.ActiveCfg = Debug (Store)|Any CPU\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|Any CPU.Build.0 = Debug (Store)|Any CPU\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|ARM64.ActiveCfg = Debug (Store)|ARM64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|ARM64.Build.0 = Debug (Store)|ARM64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|x64.ActiveCfg = Debug (Store)|x64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|x64.Build.0 = Debug (Store)|x64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|x86.ActiveCfg = Debug (Store)|x86\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug (Store)|x86.Build.0 = Debug (Store)|x86\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|ARM64.ActiveCfg = Debug|ARM64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|ARM64.Build.0 = Debug|ARM64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|x64.Build.0 = Debug|x64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Debug|x86.Build.0 = Debug|x86\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|ARM64.ActiveCfg = Release|ARM64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|ARM64.Build.0 = Release|ARM64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|x64.ActiveCfg = Release|x64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|x64.Build.0 = Release|x64\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|x86.ActiveCfg = Release|x86\n\t\t{97AAAA14-2793-49B7-96C5-6C6E83C55EB7}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{8B516DFB-0981-48A2-8A06-35F085C13980} = {13F2A1B9-496A-446E-8B06-776ACAE5CEA4}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {E505E312-14B9-49C0-AC18-B3B2FB6C1661}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "Microsoft Public License (Ms-PL)\n\nThis license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\n\n1. Definitions\n\nThe terms \"reproduce,\" \"reproduction,\" \"derivative works,\" and \"distribution\" have the same meaning here as under U.S. copyright law.\n\nA \"contribution\" is the original software, or any additions or changes to the software.\n\nA \"contributor\" is any person that distributes its contribution under this license.\n\n\"Licensed patents\" are a contributor's patent claims that read directly on its contribution.\n\n2. Grant of Rights\n\n(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\n\n(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\n\n3. Conditions and Limitations\n\n(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\n\n(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\n\n(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\n\n(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\n\n(E) The software is licensed \"as-is.\" You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\n"
  },
  {
    "path": "LOCALIZATION.md",
    "content": "# Localization\nScreenToGif's base language is [English](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.en.xaml).<br/>\n\nThe typical workflow for translation work comprises three key stages: translating, testing, and submission. To contribute to the translation of ScreenToGif, it is advisable to first review the guidelines provided in the wiki:\n\n- [Translating the App](https://github.com/NickeManarin/ScreenToGif/wiki/Localization)\n- [Translating the Installer](https://github.com/NickeManarin/ScreenToGif/wiki/Localization-%28Installer%29)\n- [Translating the Website](https://github.com/NickeManarin/ScreenToGif/wiki/Localization-%28Website%29)\n\nAs this project always are moving forward, new strings get added from time to time which means they need to be added to the language files and be translated.  Anyone can still contribute to the languages. \n\n---\n## Language Status\n\n| Language | Maintainer | Status |\n| -------- | ---------- | ----------- | \n| [![](https://img.shields.io/badge/ar-maintained-orange.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.ar.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/cs-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.cs.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/da-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.da.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/de-maintained-green.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.de.xaml) | [panther2](https://github.com/panther2)          | Updated | \n| [![](https://img.shields.io/badge/en-maintained-brightgreen.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.en.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Base language | \n| [![](https://img.shields.io/badge/es--AR-maintained-brightgreen.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.es-AR.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Updated | \n| [![](https://img.shields.io/badge/es-maintained-green.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.es.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Updated | \n| [![](https://img.shields.io/badge/fr-maintained-green.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.fr.xaml) | [Tr4ncer](https://github.com/Tr4ncer)          | Updated | \n| [![](https://img.shields.io/badge/it-maintained-green.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.it.xaml) | [mlocati](https://github.com/mlocati)          | Updated | \n| [![](https://img.shields.io/badge/ja-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.ja.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/ko-maintained-orange.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.ko.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/nl-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.nl.xaml) | [Stephan-P](https://github.com/Stephan-P)          | Updated | \n| [![](https://img.shields.io/badge/pl-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.pl.xaml) | [spietras](https://github.com/spietras)          | Updated | \n| [![](https://img.shields.io/badge/pt--PT-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.pt-PT.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/pt-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.pt.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Updated | \n| [![](https://img.shields.io/badge/ru-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.ru.xaml) | [om2804](https://github.com/om2804)          | Updated | \n| [![](https://img.shields.io/badge/sv-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.sv.xaml) | [anixsson](https://github.com/anixsson)          | Updated | \n| [![](https://img.shields.io/badge/tr-maintained-orange.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.tr.xaml) | [mollamehmetoglu](https://github.com/mollamehmetoglu)          | Need help | \n| [![](https://img.shields.io/badge/uk-maintained-orange.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.uk.xaml) | [NickeManarin](https://github.com/NickeManarin)          | Need help | \n| [![](https://img.shields.io/badge/zh--Hant-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.zh--Hant.xaml) | [spietras](https://github.com/spietras)          | Updated | \n| [![](https://img.shields.io/badge/zh-maintained-yellow.svg)](https://github.com/NickeManarin/ScreenToGif/blob/master/ScreenToGif/Resources/Localization/StringResources.zh.xaml) | [spietras](https://github.com/spietras)          | Updated | \n"
  },
  {
    "path": "Other/Translator/App.xaml",
    "content": "<Application x:Class=\"Translator.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"TranslatorWindow.xaml\" Startup=\"App_Startup\"\n             DispatcherUnhandledException=\"App_OnDispatcherUnhandledException\">\n    <Application.Resources>\n        <ResourceDictionary>\n\n            <ResourceDictionary.MergedDictionaries>\n                <ResourceDictionary Source=\"/Themes/IconSet.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Colors.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Buttons.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/DataGridStyle.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/ComboBox.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n\n            <!--Converter-->\n            <BooleanToVisibilityConverter x:Key=\"Bool2VisibilityConverter\" />\n\n            <Style x:Key=\"FocusVisualStyle\">\n                <Setter Property=\"Control.Template\">\n                    <Setter.Value>\n                        <ControlTemplate>\n                            <Rectangle Margin=\"1\" SnapsToDevicePixels=\"true\" Stroke=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style TargetType=\"{x:Type TextBox}\">\n                <Setter Property=\"Background\" Value=\"White\"/>\n                <Setter Property=\"BorderBrush\" Value=\"#FFABAdB3\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"Padding\" Value=\"1\"/>\n                <Setter Property=\"MinHeight\" Value=\"23\"/>\n                <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n                <Setter Property=\"AllowDrop\" Value=\"true\"/>\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type TextBox}\">\n                            <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Padding=\"{TemplateBinding Padding}\">\n                                <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"false\" HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"/>\n                            </Border>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"false\">\n                                    <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.56\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                                    <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"#FF7EB4EA\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsKeyboardFocused\" Value=\"true\">\n                                    <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"#FF569DE5\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n                <Style.Triggers>\n                    <MultiTrigger>\n                        <MultiTrigger.Conditions>\n                            <Condition Property=\"IsInactiveSelectionHighlightEnabled\" Value=\"true\"/>\n                            <Condition Property=\"IsSelectionActive\" Value=\"false\"/>\n                        </MultiTrigger.Conditions>\n                        <Setter Property=\"SelectionBrush\" Value=\"{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}\"/>\n                    </MultiTrigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--TextBox for DataGridCells Style-->\n            <Style TargetType=\"{x:Type TextBox}\" x:Key=\"TextBoxCell\">\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\n                <Setter Property=\"BorderBrush\" Value=\"#606060\" />\n                <Setter Property=\"Background\" Value=\"Transparent\" />\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\n                <Setter Property=\"Foreground\" Value=\"{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor,\n                                                             AncestorType={x:Type Control}, AncestorLevel=2}}\" />\n                <Setter Property=\"MinWidth\" Value=\"{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,\n                                                            AncestorType={x:Type Border}, AncestorLevel=1}}\" />\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type TextBox}\">\n                            <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                    Background=\"{TemplateBinding Background}\" HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\"\n                                    SnapsToDevicePixels=\"True\">\n                                <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\"\n                                              VerticalScrollBarVisibility=\"Hidden\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                              VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" />\n                            </Border>\n                            <ControlTemplate.Triggers>\n                                <MultiDataTrigger>\n                                    <MultiDataTrigger.Conditions>\n                                        <Condition Binding=\"{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor,\n                                                             AncestorType={x:Type DataGridCell}, AncestorLevel=1}}\" Value=\"True\" />\n                                        <Condition Binding=\"{Binding IsReadOnly, RelativeSource={RelativeSource Mode=FindAncestor,\n                                                             AncestorType={x:Type DataGridCell}, AncestorLevel=1}}\" Value=\"False\" />\n                                        <Condition Binding=\"{Binding IsKeyboardFocused, RelativeSource={RelativeSource Mode=Self}}\" Value=\"True\" />\n                                    </MultiDataTrigger.Conditions>\n\n                                    <Setter Property=\"Foreground\" Value=\"Black\" />\n                                    <Setter Property=\"Background\" Value=\"White\" />\n                                </MultiDataTrigger>\n\n                                <MultiDataTrigger>\n                                    <MultiDataTrigger.Conditions>\n                                        <Condition Binding=\"{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor,\n                                                             AncestorType={x:Type DataGridCell}, AncestorLevel=1}}\" Value=\"True\" />\n                                        <Condition Binding=\"{Binding IsReadOnly, RelativeSource={RelativeSource Mode=FindAncestor,\n                                                             AncestorType={x:Type DataGridCell}, AncestorLevel=1}}\" Value=\"False\" />\n                                        <Condition Binding=\"{Binding IsKeyboardFocused, RelativeSource={RelativeSource Mode=Self}}\" Value=\"False\" />\n                                    </MultiDataTrigger.Conditions>\n\n                                    <Setter Property=\"Foreground\" Value=\"White\" />\n                                </MultiDataTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"Selector.IsSelected\" Value=\"True\" />\n                                        <Condition Property=\"IsReadOnly\" Value=\"True\" />\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Foreground\" Value=\"#E0E0E0\" />\n                                </MultiTrigger>\n\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.7\" />\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--CheckBox Style-->\n            <Style TargetType=\"{x:Type CheckBox}\">\n                <Setter Property=\"Background\" Value=\"White\"/>\n                <Setter Property=\"BorderBrush\" Value=\"#FFABABAB\"/>\n                <Setter Property=\"Foreground\" Value=\"#FF444444\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <!--Default Values-->\n                <Setter Property=\"FocusVisualStyle\">\n                    <Setter.Value>\n                        <Style>\n                            <Setter Property=\"Control.Template\">\n                                <Setter.Value>\n                                    <ControlTemplate>\n                                        <Rectangle Margin=\"2\" SnapsToDevicePixels=\"true\" Stroke=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                                    </ControlTemplate>\n                                </Setter.Value>\n                            </Setter>\n                        </Style>\n                    </Setter.Value>\n                </Setter>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type CheckBox}\">\n                            <Grid x:Name=\"templateRoot\" Background=\"Transparent\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border x:Name=\"checkBoxBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                        Background=\"{TemplateBinding Background}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                        Margin=\"1\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" CornerRadius=\"2\">\n                                    <Grid x:Name=\"markGrid\">\n                                        <!--<Path x:Name=\"optionMark\" Data=\"F1 M 9.97498,1.22334L 4.6983,9.09834L 4.52164,9.09834L 0,5.19331L 1.27664,3.52165L 4.255,6.08833L 8.33331,1.52588e-005L 9.97498,1.22334 Z \" Fill=\"#FF858585\" Margin=\"1\" Opacity=\"0\" Stretch=\"None\"/>-->\n                                        <!--<Path x:Name=\"optionMark\" Data=\"F1 M 0,58            L 2,56           L 6,60            L 13,51     L 15,53           L 6,64          Z\" Fill=\"#FF858585\" Margin=\"1\" Opacity=\"0\" Stretch=\"None\"/>-->\n                                        <Path x:Name=\"optionMark\"     Data=\"F1 M 9.97498,.8 L 4.6983,9.09834  L 1,5.19331 L 1.27664,3.52165 L 4.255,6.08833 L 9.33331,1.288e-005 Z\" Fill=\"#FF858585\" Margin=\"1\" Opacity=\"0\" Stretch=\"None\"/>\n                                        <Rectangle x:Name=\"indeterminateMark\" Fill=\"#FF858585\" Margin=\"2\" Opacity=\"0\"/>\n                                    </Grid>\n                                </Border>\n\n                                <ContentPresenter x:Name=\"contentPresenter\" Grid.Column=\"1\" Focusable=\"False\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                                  Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"HasContent\" Value=\"true\">\n                                    <Setter Property=\"FocusVisualStyle\">\n                                        <Setter.Value>\n                                            <Style>\n                                                <Setter Property=\"Control.Template\">\n                                                    <Setter.Value>\n                                                        <ControlTemplate>\n                                                            <Rectangle Margin=\"14,0,0,0\" SnapsToDevicePixels=\"true\" Stroke=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                                                        </ControlTemplate>\n                                                    </Setter.Value>\n                                                </Setter>\n                                            </Style>\n                                        </Setter.Value>\n                                    </Setter>\n                                    <Setter Property=\"Padding\" Value=\"4,-1,0,0\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                                    <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFD5E1F2\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"#FFA3BDE3\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF212121\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"#FF212121\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsEnabled\" Value=\"false\">\n                                    <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFE6E6E6\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"#FFBCBCBC\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF707070\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"#FF707070\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsPressed\" Value=\"true\">\n                                    <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFA3BDE3\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"#FFA3BDE3\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF212121\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"#FF212121\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsChecked\" Value=\"true\">\n                                    <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"1\"/>\n                                    <Setter Property=\"Opacity\" TargetName=\"indeterminateMark\" Value=\"0\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsChecked\" Value=\"{x:Null}\">\n                                    <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"0\"/>\n                                    <Setter Property=\"Opacity\" TargetName=\"indeterminateMark\" Value=\"1\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--RadioButton Style-->\n            <Style TargetType=\"{x:Type RadioButton}\">\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource FocusVisualStyle}\"/>\n                <Setter Property=\"Background\" Value=\"White\"/>\n                <Setter Property=\"BorderBrush\" Value=\"#FFACACAC\"/>\n                <Setter Property=\"Foreground\" Value=\"#FF444444\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"Padding\" Value=\"2,0,0,0\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type RadioButton}\">\n                            <Grid x:Name=\"templateRoot\" Background=\"Transparent\" SnapsToDevicePixels=\"True\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border x:Name=\"radioButtonBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                        Background=\"{TemplateBinding Background}\" CornerRadius=\"100\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                        Margin=\"1,1,2,1\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                                    <Grid x:Name=\"markGrid\" Margin=\"2\">\n                                        <Ellipse x:Name=\"optionMark\" Fill=\"#FF777777\" MinWidth=\"6\" MinHeight=\"6\" Opacity=\"0\"/>\n                                    </Grid>\n                                </Border>\n\n                                <ContentPresenter x:Name=\"contentPresenter\" Grid.Column=\"1\" Focusable=\"False\" \n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                                  RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                            </Grid>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                                    <Setter Property=\"Background\" TargetName=\"radioButtonBorder\" Value=\"#FFD5E1F2\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"radioButtonBorder\" Value=\"#FFA7C0E4\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF444444\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"true\">\n                                    <Setter Property=\"Background\" TargetName=\"radioButtonBorder\" Value=\"#FFA7C0E4\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"radioButtonBorder\" Value=\"#FFA7C0E4\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF444444\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsChecked\" Value=\"true\">\n                                    <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"1\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsChecked\" Value=\"{x:Null}\">\n                                    <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"0.56\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"false\">\n                                    <Setter Property=\"Background\" TargetName=\"radioButtonBorder\" Value=\"#FFE6E6E6\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"radioButtonBorder\" Value=\"#FFBCBCBC\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF707070\"/>\n                                    <Setter Property=\"Foreground\" Value=\"#FFB1B1B1\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Tooltip Style-->\n            <Style TargetType=\"{x:Type ToolTip}\">\n                <Setter Property=\"Foreground\" Value=\"#FF5D5D5D\"/>\n                <Setter Property=\"MinWidth\" Value=\"20\"/>\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToolTip}\">\n                            <Grid>\n                                <Rectangle StrokeThickness=\"2\" Margin=\"15,0,0,0\" HorizontalAlignment=\"Left\">\n                                    <Rectangle.Stroke>\n                                        <LinearGradientBrush EndPoint=\"0.5,1\" StartPoint=\"0.5,0\">\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"0\"/>\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"1\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.2\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.8\"/>\n                                        </LinearGradientBrush>\n                                    </Rectangle.Stroke>\n                                </Rectangle>\n\n                                <Rectangle StrokeThickness=\"2\" Margin=\"0,0,15,0\" HorizontalAlignment=\"Right\" >\n                                    <Rectangle.Stroke>\n                                        <LinearGradientBrush EndPoint=\"0.5,1\" StartPoint=\"0.5,0\">\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"0\"/>\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"1\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.2\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.8\"/>\n                                        </LinearGradientBrush>\n                                    </Rectangle.Stroke>\n                                </Rectangle>\n\n                                <Border BorderBrush=\"#FFBEBEBE\" BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Large}\" Margin=\"5\" Background=\"White\" Padding=\"5\">\n                                    <!--<TextBlock Text=\"{TemplateBinding Content}\" Foreground=\"#FF5D5D5D\" Padding=\"5\" TextWrapping=\"WrapWithOverflow\" \n                                                   Width=\"Auto\" HorizontalAlignment=\"Center\" MinWidth=\"40\" TextAlignment=\"Center\" />-->\n                                    <ContentPresenter Content=\"{TemplateBinding Content}\" Width=\"Auto\" HorizontalAlignment=\"Center\"/>\n                                </Border>\n                            </Grid>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Context Menu-->\n            <Style TargetType=\"{x:Type ContextMenu}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\n                <Setter Property=\"Grid.IsSharedSizeScope\" Value=\"true\" />\n                <Setter Property=\"Placement\" Value=\"Bottom\"/>\n                <Setter Property=\"HorizontalOffset\" Value=\"-5\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ContextMenu}\">\n                            <Grid>\n                                <Rectangle StrokeThickness=\"2\" Margin=\"15,0,0,0\" HorizontalAlignment=\"Left\">\n                                    <Rectangle.Stroke>\n                                        <LinearGradientBrush EndPoint=\"0.5,1\" StartPoint=\"0.5,0\">\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"0\"/>\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"1\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.2\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.8\"/>\n                                        </LinearGradientBrush>\n                                    </Rectangle.Stroke>\n                                </Rectangle>\n\n                                <Rectangle StrokeThickness=\"2\" Margin=\"0,0,15,0\" HorizontalAlignment=\"Right\" >\n                                    <Rectangle.Stroke>\n                                        <LinearGradientBrush EndPoint=\"0.5,1\" StartPoint=\"0.5,0\">\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"0\"/>\n                                            <GradientStop Color=\"#00BEBEBE\" Offset=\"1\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.2\"/>\n                                            <GradientStop Color=\"#FFB1B1B1\" Offset=\"0.8\"/>\n                                        </LinearGradientBrush>\n                                    </Rectangle.Stroke>\n                                </Rectangle>\n\n                                <Border x:Name=\"Border\" BorderBrush=\"#FFBEBEBE\" BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Large}\" Margin=\"5,5,5,5\" Background=\"White\">\n                                    <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                                </Border>\n                            </Grid>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!-- Separator-->\n            <Style TargetType=\"{x:Type Separator}\">\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Separator}\">\n                            <Rectangle Height=\"{TemplateBinding Height}\" Fill=\"#FFE0E3E6\"/>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Label Separator-->\n            <Style x:Key=\"LabelSeparator\" TargetType=\"{x:Type Label}\">\n                <Setter Property=\"Height\" Value=\"Auto\" />\n                <Setter Property=\"Padding\" Value=\"3,1\"/>\n                <Setter Property=\"Background\" Value=\"#FFE0E3E6\"/>\n                <Setter Property=\"Foreground\" Value=\"#FF000000\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Label}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Label Padding=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" \n                                       ContentStringFormat=\"{TemplateBinding ContentStringFormat}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                       ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\" Content=\"{TemplateBinding Content}\"/>\n\n                                <Rectangle Grid.Column=\"1\" Height=\"1\" Fill=\"{TemplateBinding Background}\" VerticalAlignment=\"Center\" Margin=\"5,0,0,0\"/>\n                            </Grid>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--TabItem Style-->\n            <Style TargetType=\"{x:Type TabItem}\">\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type TabItem}\">\n                            <Grid Name=\"Panel\" Background=\"Transparent\">\n                                <Border Name=\"ContentBorder\" BorderBrush=\"#FFD4D4D4\" BorderThickness=\"0\">\n                                    <ContentPresenter x:Name=\"ContentSite\" ContentStringFormat=\"{TemplateBinding ContentStringFormat}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" \n                                                      ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\" Content=\"{TemplateBinding Content}\"\n                                                      VerticalAlignment=\"Center\" Effect=\"{x:Null}\" HorizontalAlignment=\"Center\" ContentSource=\"Header\" Margin=\"10,2\"/>\n                                </Border>\n                            </Grid>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsSelected\" Value=\"True\">\n                                    <Setter TargetName=\"Panel\" Property=\"Background\" Value=\"#FFFAFAFA\" />\n                                    <Setter Property=\"Foreground\" Value=\"#FF2B579A\" />\n                                    <Setter TargetName=\"ContentBorder\" Property=\"BorderThickness\" Value=\"1,1,1,0\" />\n                                </Trigger>\n\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\" SourceName=\"Panel\">\n                                    <Setter Property=\"Foreground\" Value=\"#FF2B579A\" />\n                                    <Setter Property=\"Background\" Value=\"#FFFAFAFA\" />\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n\n                <!--Default Values-->\n                <Setter Property=\"FontFamily\" Value=\"{DynamicResource FontFamilyLight}\"/>\n                <!--<Setter Property=\"Background\" Value=\"#7FFFFFFF\"/>-->\n            </Style>\n\n            <!--ScrollBar Styles-->\n            <Style x:Key=\"ScrollBarButton\" TargetType=\"{x:Type RepeatButton}\">\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"true\"/>\n                <Setter Property=\"Focusable\" Value=\"false\"/>\n                <Setter Property=\"IsTabStop\" Value=\"false\"/>\n                <Setter Property=\"FocusVisualStyle\">\n                    <Setter.Value>\n                        <Style>\n                            <Setter Property=\"Control.Template\">\n                                <Setter.Value>\n                                    <ControlTemplate>\n                                        <Rectangle Margin=\"2\" SnapsToDevicePixels=\"true\" Stroke=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                                    </ControlTemplate>\n                                </Setter.Value>\n                            </Setter>\n                        </Style>\n                    </Setter.Value>\n                </Setter>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\n                            <Grid x:Name=\"Root\" Margin=\"0\">\n                                <Border x:Name=\"BackgroundBorder\" Background=\"White\" BorderBrush=\"#FFAAAAAA\" BorderThickness=\"1\"/>\n                                <Path x:Name=\"Arrow\" Stretch=\"None\" Data=\"{Binding Content, RelativeSource={RelativeSource TemplatedParent}}\" Fill=\"#FF777777\" HorizontalAlignment=\"Center\"  VerticalAlignment=\"Center\" SnapsToDevicePixels=\"True\"/>\n                            </Grid>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"Background\" Value=\"White\"/>\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"BorderBrush\" Value=\"#FF777777\"/>\n                                    <Setter TargetName=\"Arrow\" Property=\"Fill\" Value=\"#FF777777\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"Background\" Value=\"#FFF2F2F2\"/>\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"BorderBrush\" Value=\"#FF777777\"/>\n                                    <Setter TargetName=\"Arrow\" Property=\"Fill\" Value=\"#FF777777\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ScrollBarThumbVertical\" TargetType=\"{x:Type Thumb}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"IsTabStop\" Value=\"false\"/>\n                <Setter Property=\"Focusable\" Value=\"false\"/>\n                <Setter Property=\"Background\" Value=\"White\"/>\n                <Setter Property=\"BorderBrush\" Value=\"#FFAAAAAA\"/>\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                            <Grid Background=\"Transparent\">\n                                <Border Background=\"{TemplateBinding Background}\" Margin=\"{TemplateBinding Padding}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" />\n                            </Grid>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"#FFF2F2F2\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"#FFAAAAAA\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsDragging\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"#FFF2F2F2\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"#FF777777\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"RepeatButtonTransparent\" TargetType=\"{x:Type RepeatButton}\">\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"true\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"Focusable\" Value=\"false\"/>\n                <Setter Property=\"IsTabStop\" Value=\"false\"/>\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\n                            <Rectangle Fill=\"{TemplateBinding Background}\" Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\"/>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style TargetType=\"{x:Type ScrollBar}\">\n                <Setter Property=\"Stylus.IsPressAndHoldEnabled\" Value=\"false\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"false\"/>\n                <Setter Property=\"Background\" Value=\"#FFEFEFEF\"/>\n                <Setter Property=\"BorderBrush\" Value=\"#F0F0F0\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1,0\"/>\n                <Setter Property=\"Width\" Value=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\"/>\n                <Setter Property=\"MinWidth\" Value=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ScrollBar}\">\n                            <Grid x:Name=\"Bg\" SnapsToDevicePixels=\"true\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition MaxHeight=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}\"/>\n                                    <RowDefinition Height=\"0.00001*\"/>\n                                    <RowDefinition MaxHeight=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}\"/>\n                                </Grid.RowDefinitions>\n                                <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Grid.Row=\"1\"/>\n                                <RepeatButton Grid.Row=\"0\" x:Name=\"PART_LineUpButton\" Command=\"{x:Static ScrollBar.LineUpCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBarButton}\" Content=\"M 0,4 C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4 z\" />\n                                <Track x:Name=\"PART_Track\" IsDirectionReversed=\"true\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Grid.Row=\"1\">\n                                    <Track.DecreaseRepeatButton>\n                                        <RepeatButton Command=\"{x:Static ScrollBar.PageUpCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\"/>\n                                    </Track.DecreaseRepeatButton>\n                                    <Track.IncreaseRepeatButton>\n                                        <RepeatButton Command=\"{x:Static ScrollBar.PageDownCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\"/>\n                                    </Track.IncreaseRepeatButton>\n                                    <Track.Thumb>\n                                        <Thumb Style=\"{StaticResource ScrollBarThumbVertical}\"/>\n                                    </Track.Thumb>\n                                </Track>\n                                <RepeatButton x:Name=\"PART_LineDownButton\" Command=\"{x:Static ScrollBar.LineDownCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Grid.Row=\"2\" Style=\"{StaticResource ScrollBarButton}\" Content=\"M 0,2.5 C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5 z\" />\n                            </Grid>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"false\">\n                                    <Setter Property=\"Background\" TargetName=\"Bg\" Value=\"#FFF2F2F2\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n\n                <Style.Triggers>\n                    <Trigger Property=\"Orientation\" Value=\"Horizontal\">\n                        <Setter Property=\"Width\" Value=\"Auto\"/>\n                        <Setter Property=\"MinWidth\" Value=\"0\"/>\n                        <Setter Property=\"Height\" Value=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}\"/>\n                        <Setter Property=\"MinHeight\" Value=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}\"/>\n                        <Setter Property=\"BorderThickness\" Value=\"0,1\"/>\n                        <Setter Property=\"Template\">\n                            <Setter.Value>\n                                <ControlTemplate TargetType=\"{x:Type ScrollBar}\">\n                                    <Grid x:Name=\"Bg\" SnapsToDevicePixels=\"true\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition MaxWidth=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}\"/>\n                                            <ColumnDefinition Width=\"0.00001*\"/>\n                                            <ColumnDefinition MaxWidth=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}\"/>\n                                        </Grid.ColumnDefinitions>\n                                        <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Grid.Column=\"1\"/>\n                                        <RepeatButton Grid.Column=\"0\" x:Name=\"PART_LineLeftButton\" Command=\"{x:Static ScrollBar.LineLeftCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBarButton}\" Content=\"M 3.18,7 C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7 z\" />\n                                        <Track x:Name=\"PART_Track\" Grid.Column=\"1\" IsEnabled=\"{TemplateBinding IsMouseOver}\">\n                                            <Track.DecreaseRepeatButton>\n                                                <RepeatButton Command=\"{x:Static ScrollBar.PageLeftCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\"/>\n                                            </Track.DecreaseRepeatButton>\n                                            <Track.IncreaseRepeatButton>\n                                                <RepeatButton Command=\"{x:Static ScrollBar.PageRightCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\"/>\n                                            </Track.IncreaseRepeatButton>\n                                            <Track.Thumb>\n                                                <Thumb Style=\"{StaticResource ScrollBarThumbVertical}\"/>\n                                            </Track.Thumb>\n                                        </Track>\n                                        <RepeatButton x:Name=\"PART_LineRightButton\" Grid.Column=\"2\" Command=\"{x:Static ScrollBar.LineRightCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBarButton}\" Content=\"M 1.81,7 C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7 z\" />\n                                    </Grid>\n                                    <ControlTemplate.Triggers>\n                                        <Trigger Property=\"IsEnabled\" Value=\"false\">\n                                            <Setter Property=\"Background\" TargetName=\"Bg\" Value=\"#FFF2F2F2\"/>\n                                        </Trigger>\n                                    </ControlTemplate.Triggers>\n                                </ControlTemplate>\n                            </Setter.Value>\n                        </Setter>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--Scroll Viewer Style-->\n            <Style TargetType=\"{x:Type ScrollViewer}\">\n                <Setter Property=\"Template\" >\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ScrollViewer}\">\n                            <Grid x:Name=\"Grid\" Background=\"{TemplateBinding Background}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"*\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Rectangle x:Name=\"Corner\" Grid.Column=\"1\" Fill=\"{DynamicResource {x:Static SystemColors.ControlBrushKey}}\" Grid.Row=\"1\"/>\n                                <ScrollContentPresenter x:Name=\"PART_ScrollContentPresenter\" CanContentScroll=\"{TemplateBinding CanContentScroll}\" CanHorizontallyScroll=\"False\" CanVerticallyScroll=\"False\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" Content=\"{TemplateBinding Content}\" Grid.Column=\"0\" Margin=\"{TemplateBinding Padding}\" Grid.Row=\"0\"/>\n                                <ScrollBar x:Name=\"PART_VerticalScrollBar\" AutomationProperties.AutomationId=\"VerticalScrollBar\" Cursor=\"Arrow\" Grid.Column=\"1\" Maximum=\"{TemplateBinding ScrollableHeight}\" Minimum=\"0\" Grid.Row=\"0\" Visibility=\"{TemplateBinding ComputedVerticalScrollBarVisibility}\" Value=\"{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\" ViewportSize=\"{TemplateBinding ViewportHeight}\"/>\n                                <ScrollBar x:Name=\"PART_HorizontalScrollBar\" AutomationProperties.AutomationId=\"HorizontalScrollBar\" Cursor=\"Arrow\" Grid.Column=\"0\" Maximum=\"{TemplateBinding ScrollableWidth}\" Minimum=\"0\" Orientation=\"Horizontal\" Grid.Row=\"1\" Visibility=\"{TemplateBinding ComputedHorizontalScrollBarVisibility}\" Value=\"{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\" ViewportSize=\"{TemplateBinding ViewportWidth}\"/>\n                            </Grid>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n                <Style.Triggers>\n                    <Trigger Property=\"IsEnabled\" Value=\"false\">\n                        <Setter Property=\"Foreground\" Value=\"White\"/>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <Style x:Key=\"ViewBoxStyle\" TargetType=\"{x:Type Viewbox}\">\n                <Style.Triggers>\n                    <Trigger Property=\"IsEnabled\" Value=\"False\">\n                        <Setter Property=\"Opacity\" Value=\".6\"/>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--Expander Style-->\n            <SolidColorBrush x:Key=\"Expander.MouseOver.Circle.Fill\" Color=\"#FFF3F9FF\"/>\n            <SolidColorBrush x:Key=\"Expander.Pressed.Circle.Fill\" Color=\"#FFD9ECFF\"/>\n            <SolidColorBrush x:Key=\"Expander.Disabled.Arrow.Stroke\" Color=\"#FF707070\"/>\n            <SolidColorBrush x:Key=\"Expander.Static.Arrow.Stroke\" Color=\"#FF333333\"/>\n\n            <Style x:Key=\"ExpanderHeaderFocusVisual\">\n                <Setter Property=\"Control.Template\">\n                    <Setter.Value>\n                        <ControlTemplate>\n                            <Border>\n                                <Rectangle Margin=\"0\" SnapsToDevicePixels=\"true\" Stroke=\"Black\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                            </Border>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderRightHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Padding\" Value=\"0\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"*\"/>\n                                        <RowDefinition Height=\"19\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <Label Grid.Row=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\"\n                                       HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                                    <Rectangle Grid.Row=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"#FFE0E3E6\" \n                                           Height=\"Auto\" HorizontalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Row=\"2\" x:Name=\"ArrowPath\" Data=\"M 1,1  L 4.5,4.5  L 1,8\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"false\" \n                                      Stroke=\"{StaticResource Expander.Static.Arrow.Stroke}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 4.5,1  L 1,4.5  L 4.5,8\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.MouseOver.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.Pressed.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{StaticResource Expander.Disabled.Arrow.Stroke}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderLeftHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Padding\" Value=\"0\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"*\"/>\n                                        <RowDefinition Height=\"19\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <Label Grid.Row=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\"\n                                       HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                                    <Rectangle Grid.Row=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"#FFE0E3E6\" \n                                           Height=\"Auto\" HorizontalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Row=\"2\" x:Name=\"ArrowPath\" Data=\"M 4.5,1  L 1,4.5  L 4.5,8\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"false\" \n                                      Stroke=\"{StaticResource Expander.Static.Arrow.Stroke}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 1,1  L 4.5,4.5  L 1,8\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.MouseOver.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.Pressed.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{StaticResource Expander.Disabled.Arrow.Stroke}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderUpHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Height\" Value=\"27\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition Width=\"19\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Label Grid.Column=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"3\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalContentAlignment=\"Center\"/>\n\n                                    <Rectangle Grid.Column=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"#FFE0E3E6\" \n                                               Height=\"Auto\" VerticalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Column=\"2\" x:Name=\"ArrowPath\" Data=\"M 1,4.5 L 4.5,1 L 8,4.5\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"false\" \n                                          Stroke=\"{StaticResource Expander.Static.Arrow.Stroke}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 1,1.5 L 4.5,5 L 8,1.5\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.MouseOver.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.Pressed.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{StaticResource Expander.Disabled.Arrow.Stroke}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderDownHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Height\" Value=\"27\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition Width=\"19\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Label Grid.Column=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"3\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalContentAlignment=\"Center\"/>\n\n                                    <Rectangle Grid.Column=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"#FFE0E3E6\" \n                                               Height=\"Auto\" VerticalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Column=\"2\" x:Name=\"ArrowPath\" Data=\"M 1,1.5 L 4.5,5 L 8,1.5\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"False\" \n                                          Stroke=\"{StaticResource Expander.Static.Arrow.Stroke}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 1,4.5 L 4.5,1 L 8,4.5\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.MouseOver.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"#FFB3B5B8\"/>\n                                    <Setter Property=\"Background\" Value=\"{StaticResource Expander.Pressed.Circle.Fill}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"Black\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{StaticResource Expander.Disabled.Arrow.Stroke}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style TargetType=\"{x:Type Expander}\">\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n                <Setter Property=\"BorderThickness\" Value=\"0\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Expander}\">\n                            <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"true\">\n                                <DockPanel>\n                                    <ToggleButton x:Name=\"HeaderSite\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" ContentTemplateSelector=\"{TemplateBinding HeaderTemplateSelector}\" \n                                                  Content=\"{TemplateBinding Header}\" DockPanel.Dock=\"Top\" Foreground=\"{TemplateBinding Foreground}\" FontWeight=\"{TemplateBinding FontWeight}\" \n                                                  FocusVisualStyle=\"{StaticResource ExpanderHeaderFocusVisual}\" FontStyle=\"{TemplateBinding FontStyle}\" FontStretch=\"{TemplateBinding FontStretch}\" \n                                                  FontSize=\"{TemplateBinding FontSize}\" FontFamily=\"{TemplateBinding FontFamily}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                                  IsChecked=\"{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Margin=\"0\"\n                                                  Padding=\"{TemplateBinding Padding}\" Style=\"{StaticResource ExpanderDownHeaderStyle}\" \n                                                  VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                                    <ContentPresenter x:Name=\"ExpandSite\" DockPanel.Dock=\"Bottom\" Focusable=\"False\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                                      Margin=\"{TemplateBinding Padding}\" Visibility=\"Collapsed\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                                </DockPanel>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsExpanded\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"ExpandSite\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"ExpandDirection\" Value=\"Right\">\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"ExpandSite\" Value=\"Right\"/>\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"HeaderSite\" Value=\"Left\"/>\n                                    <Setter Property=\"Style\" TargetName=\"HeaderSite\" Value=\"{StaticResource ExpanderRightHeaderStyle}\"/>\n                                </Trigger>\n                                <Trigger Property=\"ExpandDirection\" Value=\"Up\">\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"ExpandSite\" Value=\"Top\"/>\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"HeaderSite\" Value=\"Bottom\"/>\n                                    <Setter Property=\"Style\" TargetName=\"HeaderSite\" Value=\"{StaticResource ExpanderUpHeaderStyle}\"/>\n                                </Trigger>\n                                <Trigger Property=\"ExpandDirection\" Value=\"Left\">\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"ExpandSite\" Value=\"Left\"/>\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"HeaderSite\" Value=\"Right\"/>\n                                    <Setter Property=\"Style\" TargetName=\"HeaderSite\" Value=\"{StaticResource ExpanderLeftHeaderStyle}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Other/Translator/App.xaml.cs",
    "content": "using System;\nusing System.Reflection;\nusing System.Windows;\nusing System.Windows.Threading;\nusing Translator.Util;\n\nnamespace Translator;\n\npublic partial class App : Application\n{\n    private void App_Startup(object sender, StartupEventArgs e)\n    {\n        //Unhandled Exceptions.\n        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;\n    }\n\n    private void App_OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)\n    {\n        LogWriter.Log(e.Exception, \"On Dispatcher Unhandled Exception - Unknown\");\n\n        try\n        {\n            ExceptionDialog.Ok(e.Exception, \"ScreenToGif - Translator\", \"Unhandled exception\", e.Exception.Message);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while displaying the error.\");\n            //Ignored.\n        }\n\n        e.Handled = true;\n    }\n\n    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)\n    {\n        if (e.ExceptionObject is not Exception exception)\n            return;\n\n        LogWriter.Log(exception, \"Current Domain Unhandled Exception - Unknown\");\n\n        try\n        {\n            ExceptionDialog.Ok(exception, \"ScreenToGif - Translator\", \"Unhandled exception\", exception.Message);\n        }\n        catch (Exception)\n        {\n            //Ignored.\n        }\n    }\n\n    public static string Version => ToStringShort(Assembly.GetEntryAssembly()?.GetName().Version) ?? \"0.0\";\n\n    internal static string ToStringShort(Version version)\n    {\n        if (version == null)\n            return null;\n\n        var result = $\"{version.Major}.{version.Minor}\";\n\n        if (version.Build > 0)\n            result += $\".{version.Build}\";\n\n        if (version.Revision > 0)\n            result += $\".{version.Revision}\";\n\n        return result;\n    }\n}"
  },
  {
    "path": "Other/Translator/Controls/ExtendedTextBox.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace Translator.Controls;\n\npublic class ExtendedTextBox : TextBox\n{\n    static ExtendedTextBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedTextBox), new FrameworkPropertyMetadata(typeof(ExtendedTextBox)));\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        SelectAll();\n    }\n}"
  },
  {
    "path": "Other/Translator/Controls/ImageButton.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace Translator.Controls;\n\n/// <summary>\n/// Button with a image inside.\n/// </summary>\npublic class ImageButton : Button\n{\n    #region Variables\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\"Text\", typeof(string), typeof(ImageButton), new FrameworkPropertyMetadata(\"Button\"));\n\n    public static readonly DependencyProperty MaxSizeProperty = DependencyProperty.Register(\"MaxSize\", typeof(double), typeof(ImageButton), new FrameworkPropertyMetadata(26.0));\n\n    public static readonly DependencyProperty KeyGestureProperty = DependencyProperty.Register(\"KeyGesture\", typeof(string), typeof(ImageButton), new FrameworkPropertyMetadata(\"\"));\n\n    /// <summary> \n    /// DependencyProperty for <see cref=\"TextWrapping\" /> property.\n    /// </summary>\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(\"TextWrapping\", typeof(TextWrapping), typeof(ImageButton), \n        new FrameworkPropertyMetadata(TextWrapping.NoWrap, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The text of the button.\n    /// </summary>\n    [Description(\"The text of the button.\"), Category(\"Common\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\"), Category(\"Common\")]\n    public double MaxSize\n    {\n        get => (double)GetValue(MaxSizeProperty);\n        set => SetCurrentValue(MaxSizeProperty, value);\n    }\n\n    /// <summary>\n    /// The KeyGesture of the button.\n    /// </summary>\n    [Description(\"The KeyGesture of the button.\"), Category(\"Common\")]\n    public string KeyGesture\n    {\n        get => (string)GetValue(KeyGestureProperty);\n        set => SetCurrentValue(KeyGestureProperty, value);\n    }\n\n    /// <summary>\n    /// The TextWrapping property controls whether or not text wraps \n    /// when it reaches the flow edge of its containing block box. \n    /// </summary>\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    #endregion\n\n    static ImageButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageButton), new FrameworkPropertyMetadata(typeof(ImageButton)));\n    }\n}"
  },
  {
    "path": "Other/Translator/Controls/ImageMenuItem.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace Translator.Controls;\n\n/// <summary>\n/// MenuItem with an image to the left.\n/// </summary>\npublic class ImageMenuItem : MenuItem\n{\n    #region Variables\n\n    public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(\"Image\", typeof(UIElement), typeof(ImageMenuItem), new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty MaxSizeProperty = DependencyProperty.Register(\"MaxSize\", typeof(double), typeof(ImageMenuItem), new FrameworkPropertyMetadata(15.0));\n\n    public static readonly DependencyProperty HasImageProperty = DependencyProperty.Register(\"HasImage\", typeof(bool), typeof(ImageMenuItem), new FrameworkPropertyMetadata(false));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The Image of the button.\n    /// </summary>\n    [Description(\"The Image of the button.\")]\n    public UIElement Image\n    {\n        get { return (UIElement)GetValue(ImageProperty); }\n        set\n        {\n            SetCurrentValue(ImageProperty, value);\n\n            //Has Image.\n            SetCurrentValue(HasImageProperty, value != null);\n        }\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public double MaxSize\n    {\n        get { return (double)GetValue(MaxSizeProperty); }\n        set { SetCurrentValue(MaxSizeProperty, value); }\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public bool HasImage\n    {\n        get { return (bool)GetValue(HasImageProperty); }\n        set { SetCurrentValue(HasImageProperty, value); }\n    }\n\n    #endregion\n\n    static ImageMenuItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ImageMenuItem), new FrameworkPropertyMetadata(typeof(ImageMenuItem)));\n    }\n}\n"
  },
  {
    "path": "Other/Translator/Controls/StatusBand.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media.Animation;\n\nnamespace Translator.Controls;\n\npublic class StatusBand : Control\n{\n    #region Variables\n\n    public enum StatusTypes\n    {\n        Info,\n        Warning,\n        Error\n    }\n\n    private Grid _warningGrid;\n    private Button _supressButton;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty TypeProperty = DependencyProperty.Register(\"Type\", typeof(StatusTypes), typeof(StatusBand),\n        new FrameworkPropertyMetadata(StatusTypes.Warning, OnTypePropertyChanged));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\"Text\", typeof(string), typeof(StatusBand),\n        new FrameworkPropertyMetadata(\"\", OnTextPropertyChanged));\n\n    public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(\"Image\", typeof(UIElement), typeof(StatusBand),\n        new FrameworkPropertyMetadata(null, OnImagePropertyChanged));\n\n    public static readonly DependencyProperty StartingProperty = DependencyProperty.Register(\"Starting\", typeof(bool), typeof(StatusBand), \n        new PropertyMetadata(default(bool)));\n\n    #endregion\n\n    #region Properties\n\n    [Bindable(true), Category(\"Common\")]\n    public StatusTypes Type\n    {\n        get => (StatusTypes)GetValue(TypeProperty);\n        set => SetValue(TypeProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public UIElement Image\n    {\n        get => (UIElement)GetValue(ImageProperty);\n        set => SetValue(ImageProperty, value);\n    }\n\n    /// <summary>\n    /// True if started to display the message.\n    /// </summary>\n    [Bindable(true), Category(\"Common\")]\n    public bool Starting\n    {\n        get => (bool)GetValue(StartingProperty);\n        set => SetValue(StartingProperty, value);\n    }\n\n    #endregion\n\n    #region Property Changed\n\n    private static void OnTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not StatusBand band)\n            return;\n\n        band.Type = (StatusTypes)e.NewValue;\n        band.Image = (Canvas)band.FindResource(band.Type == StatusTypes.Info ? \"Vector.Info\" : band.Type == StatusTypes.Warning ? \"Vector.Warning\" : \"Vector.Error\");\n    }\n\n    private static void OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not StatusBand band)\n            return;\n\n        band.Text = (string)e.NewValue;\n    }\n\n    private static void OnImagePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not StatusBand band)\n            return;\n\n        band.Image = (UIElement)e.NewValue;\n    }\n\n    #endregion\n\n    static StatusBand()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(StatusBand), new FrameworkPropertyMetadata(typeof(StatusBand)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        _warningGrid = GetTemplateChild(\"WarningGrid\") as Grid;\n        _supressButton = GetTemplateChild(\"SuppressButton\") as ImageButton;\n\n        if (_supressButton != null)\n        {\n            _supressButton.Click += SupressButton_Click;\n        }\n\n        base.OnApplyTemplate();\n    }\n\n    #region Methods\n\n    public void Show(StatusTypes type, string text, UIElement image = null)\n    {\n        //Collapsed-by-default elements do not apply templates.\n        //http://stackoverflow.com/a/2115873/1735672\n        //So it's necessary to do this here.\n        ApplyTemplate();\n\n        Starting = true;\n        Type = type;\n        Text = text;\n        Image = image;\n\n        if (_warningGrid?.FindResource(\"ShowWarningStoryboard\") is Storyboard show)\n            BeginStoryboard(show);\n    }\n\n    public void Info(string text, UIElement image = null)\n    {\n        Show(StatusTypes.Info, text, image ?? (Canvas)FindResource(\"Vector.Info\"));\n    }\n\n    public void Warning(string text, UIElement image = null)\n    {\n        Show(StatusTypes.Warning, text, image ?? (Canvas)FindResource(\"Vector.Warning\"));\n    }\n\n    public void Error(string text, UIElement image = null)\n    {\n        Show(StatusTypes.Error, text, image ?? (Canvas)FindResource(\"Vector.Error\"));\n    }\n\n    public void Hide()\n    {\n        Starting = false;\n\n        if (_warningGrid?.Visibility == Visibility.Collapsed)\n            return;\n\n        if (_warningGrid?.FindResource(\"HideWarningStoryboard\") is Storyboard show)\n            BeginStoryboard(show);\n    }\n\n    #endregion\n\n    private void SupressButton_Click(object sender, RoutedEventArgs e)\n    {\n        Hide();\n    }\n}"
  },
  {
    "path": "Other/Translator/Converters/MultiLineTitle.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace Translator.Converters;\n\npublic class MultiLineTitle : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var text = value as string;\n\n        return string.IsNullOrEmpty(text) ? value : text.Replace(@\"\\n\", Environment.NewLine);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "Other/Translator/Converters/NullToInvertedBool.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace Translator.Converters;\n\npublic class NullToInvertedBool : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value == null;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "Other/Translator/Dialog.xaml",
    "content": "﻿<Window x:Class=\"Translator.Dialog\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:n=\"clr-namespace:Translator.Controls\"\n        Title=\"Dialog\" Height=\"230\" Width=\"500\" MinHeight=\"230\" MinWidth=\"400\" SizeToContent=\"Height\" Topmost=\"True\" WindowStartupLocation=\"CenterScreen\" Icon=\"Logo.ico\">\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"48\"/>\n            <RowDefinition Height=\"*\" MinHeight=\"100\"/>\n            <RowDefinition Height=\"40\" />\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"#FFF9F9FF\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Viewbox x:Name=\"IconViewbox\" Margin=\"5\" Child=\"{StaticResource Vector.Error}\"/>\n            \n            <Label x:Name=\"InstructionLabel\" Content=\"Instruction\" Margin=\"5\" Grid.Column=\"1\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"#FF003399\"/>\n        </Grid>\n\n        <ScrollViewer Grid.Row=\"1\" VerticalScrollBarVisibility=\"Auto\">\n            <TextBlock x:Name=\"ObservationTextBlock\" Margin=\"25,5,10,5\" Text=\"Example text.\" FontSize=\"14\" TextWrapping=\"WrapWithOverflow\"/>\n        </ScrollViewer>\n        \n        <StackPanel Grid.Row=\"2\" Background=\"WhiteSmoke\" Height=\"40\" Orientation=\"Horizontal\" FlowDirection=\"RightToLeft\">\n            <n:ImageButton x:Name=\"CancelButton\" Text=\"Cancel\" Content=\"{StaticResource Vector.Cancel}\" MaxSize=\"20\" MinWidth=\"90\" FlowDirection=\"LeftToRight\" Margin=\"5\" Click=\"FalseActionButton_Click\"/>\n            <n:ImageButton x:Name=\"OkButton\" Text=\"Ok\" Content=\"{StaticResource Vector.Ok}\" MaxSize=\"20\" MinWidth=\"90\" FlowDirection=\"LeftToRight\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n\n            <n:ImageButton x:Name=\"NoButton\" Text=\"No\" Content=\"{StaticResource Vector.No}\" MaxSize=\"20\" MinWidth=\"90\" FlowDirection=\"LeftToRight\" Margin=\"5\" Click=\"FalseActionButton_Click\"/>\n            <n:ImageButton x:Name=\"YesButton\" Text=\"Yes\" Content=\"{StaticResource Vector.Ok}\" MaxSize=\"20\" MinWidth=\"90\" FlowDirection=\"LeftToRight\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n        </StackPanel>\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Other/Translator/Dialog.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace Translator;\n\n/// <summary>\n/// Interaction logic for Dialog.xaml\n/// </summary>\npublic partial class Dialog : Window\n{\n    /// <summary>\n    /// Default constructor.\n    /// </summary>\n    public Dialog()\n    {\n        InitializeComponent();\n    }\n\n    #region Methods\n\n    private Canvas GetIcon(Icons icon)\n    {\n        switch (icon)\n        {\n            case Icons.Error:\n                return (Canvas)FindResource(\"Vector.Error\");\n            case Icons.Info:\n                return (Canvas)FindResource(\"Vector.Info\");\n            case Icons.Success:\n                return (Canvas)FindResource(\"Vector.Success\");\n            case Icons.Warning:\n                return (Canvas)FindResource(\"Vector.Warning\");\n            case Icons.Question:\n                return (Canvas)FindResource(\"Vector.Question\");\n\n            default:\n                return (Canvas)FindResource(\"Vector.Info\");\n        }\n    }\n\n    private void PrepareOk(string title, string instruction, string observation, Icons icon)\n    {\n        CancelButton.Visibility = Visibility.Collapsed;\n        YesButton.Visibility = Visibility.Collapsed;\n        NoButton.Visibility = Visibility.Collapsed;\n\n        OkButton.Focus();\n\n        IconViewbox.Child = GetIcon(icon);\n\n        InstructionLabel.Content = instruction;\n        ObservationTextBlock.Text = observation;\n        Title = title;\n    }\n\n    private void PrepareOkCancel(string title, string instruction, string observation, Icons icon)\n    {\n        YesButton.Visibility = Visibility.Collapsed;\n        NoButton.Visibility = Visibility.Collapsed;\n\n        CancelButton.Focus();\n\n        IconViewbox.Child = GetIcon(icon);\n\n        InstructionLabel.Content = instruction;\n        ObservationTextBlock.Text = observation;\n        Title = title;\n    }\n\n    private void PrepareAsk(string title, string instruction, string observation, Icons icon)\n    {\n        CancelButton.Visibility = Visibility.Collapsed;\n        OkButton.Visibility = Visibility.Collapsed;\n\n        NoButton.Focus();\n\n        IconViewbox.Child = GetIcon(icon);\n\n        InstructionLabel.Content = instruction;\n        ObservationTextBlock.Text = observation;\n        Title = title;\n    }\n\n    /// <summary>\n    /// Shows a Ok dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Ok</returns>\n    public static bool Ok(string title, string instruction, string observation, Icons icon = Icons.Error)\n    {\n        var dialog = new Dialog();\n        dialog.PrepareOk(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    /// <summary>\n    /// Shows a Ok/Cancel dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Ok</returns>\n    public static bool OkCancel(string title, string instruction, string observation, Icons icon = Icons.Error)\n    {\n        var dialog = new Dialog();\n        dialog.PrepareOkCancel(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    /// <summary>\n    /// Shows a Yes/No dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Yes</returns>\n    public static bool Ask(string title, string instruction, string observation, Icons icon = Icons.Question)\n    {\n        var dialog = new Dialog();\n        dialog.PrepareAsk(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    #endregion\n\n    #region Events\n\n    private void FalseActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n\n    private void TrueActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = true;\n    }\n\n    #endregion\n        \n    /// <summary>\n    /// Dialog Icons.\n    /// </summary>\n    public enum Icons\n    {\n        /// <summary>\n        /// Information. Blue.\n        /// </summary>\n        Info,\n\n        /// <summary>\n        /// Warning, yellow.\n        /// </summary>\n        Warning,\n\n        /// <summary>\n        /// Error, red.\n        /// </summary>\n        Error,\n\n        /// <summary>\n        /// Success, green.\n        /// </summary>\n        Success,\n\n        /// <summary>\n        /// A question mark, blue.\n        /// </summary>\n        Question,\n    }\n}"
  },
  {
    "path": "Other/Translator/ExceptionDialog.xaml",
    "content": "﻿<Window x:Class=\"Translator.ExceptionDialog\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:c=\"clr-namespace:Translator.Controls\"\n        Title=\"ScreenToGif - Error\" WindowStartupLocation=\"CenterScreen\" Topmost=\"True\" SnapsToDevicePixels=\"True\"\n        Height=\"300\" Width=\"560\" MinHeight=\"250\" MinWidth=\"560\" SizeToContent=\"Height\"\n        Background=\"{DynamicResource Panel.Background}\" Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"110\"/>\n            </Grid.ColumnDefinitions>\n\n            <Viewbox x:Name=\"IconViewbox\" Margin=\"6\" Child=\"{StaticResource Vector.Error.Round}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeTextBlock\" Text=\"\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"#FF003399\" Padding=\"0\"\n                       ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <c:ImageButton Grid.Column=\"2\" x:Name=\"DetailsButton\" Text=\"Show details\" Content=\"{StaticResource Vector.Table}\" MaxSize=\"20\" \n                           Margin=\"3\" Padding=\"2\" Style=\"{StaticResource Style.Button.Horizontal}\" TextWrapping=\"NoWrap\"\n                           Click=\"DetailsButton_Click\" FontSize=\"14\" FontFamily=\"{DynamicResource FontFamilyLight}\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" x:Name=\"HeaderTextBlock\" Text=\"Oh no, the app crashed :(\" Foreground=\"#E0000060\" FontSize=\"22\" Margin=\"10\" HorizontalAlignment=\"Center\"/>\n\n            <TextBlock Grid.Row=\"1\" x:Name=\"DetailsTextBlock\" FontSize=\"16\" Margin=\"6,6,6,15\" TextWrapping=\"Wrap\" Foreground=\"#E0000000\" ScrollViewer.CanContentScroll=\"True\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <c:ImageButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"Ok\" Content=\"{StaticResource Vector.Ok}\" MaxSize=\"18\" \n                           Margin=\"5\" Padding=\"5,0\" MinWidth=\"90\" IsDefault=\"True\" Click=\"OkButton_Click\"/>\n        </Grid>\n    </Grid>\n</Window>"
  },
  {
    "path": "Other/Translator/ExceptionDialog.xaml.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Documents;\nusing Translator.Util;\n\nnamespace Translator;\n\npublic partial class ExceptionDialog : Window\n{\n    #region Properties\n\n    public bool BugWithHotFix4055002 { get; set; }\n        \n    public Exception Exception { get; set; }\n\n    #endregion\n\n    public ExceptionDialog(Exception exception)\n    {\n        InitializeComponent();\n\n        Exception = exception;\n    }\n\n    #region Eventos\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (Exception == null)\n            DetailsButton.IsEnabled = false;\n    }\n\n    private void DetailsButton_Click(object sender, RoutedEventArgs e)\n    {\n        var errorViewer = new ExceptionViewer(Exception);\n        errorViewer.ShowDialog();\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    #endregion\n\n    #region Métodos\n\n    private void PrepareOk(string title, string instruction, string observation)\n    {\n        TypeTextBlock.Text = instruction;\n        DetailsTextBlock.Inlines.Add(new Run(\"\\t\" + observation));\n        Title = title ?? \"ScreenToGif - Error\";\n\n        if (BugWithHotFix4055002)\n        {\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new Run(\"\\tThis was likely caused by a bug with an update for .Net Framework 4.7.1 (KB4055002, released in January 2018). This bug happens on machines with Windows 7 SP1 or Windows Server 2008 R2.\"));\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new Run(\"\\t\"));\n\n            var hyper = new Hyperlink(new Run(\"Click here to open a page with some details on how to fix this issue.\") {ToolTip = \"https://github.com/dotnet/announcements/issues/53\" });\n            hyper.Click += HyperOnClick;\n            DetailsTextBlock.Inlines.Add(hyper);\n        }\n\n        OkButton.Focus();\n    }\n\n    private void HyperOnClick(object sender, RoutedEventArgs routedEventArgs)\n    {\n        try\n        {\n            Process.Start(\"https://github.com/dotnet/announcements/issues/53\");\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to open link\");\n        }\n    }\n\n    #endregion\n\n    #region Static Methods\n\n    public static bool Ok(Exception exception, string title, string instruction, string observation = \"\", bool bugWith4055002 = false)\n    {\n        var dialog = new ExceptionDialog(exception) { BugWithHotFix4055002 = bugWith4055002 };\n        dialog.PrepareOk(title, instruction, observation);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "Other/Translator/ExceptionViewer.xaml",
    "content": "﻿<Window x:Class=\"Translator.ExceptionViewer\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:n=\"clr-namespace:Translator.Controls\"\n        Title=\"Exception Viewer\" WindowStartupLocation=\"CenterScreen\" \n        UseLayoutRounding=\"True\" Topmost=\"True\" SnapsToDevicePixels=\"True\"\n        MinWidth=\"640\" MinHeight=\"490\" Width=\"640\" Height=\"490\" Background=\"{DynamicResource Panel.Background}\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"1*\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"1*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Viewbox Grid.Column=\"0\" Margin=\"4\" Child=\"{StaticResource Vector.Error}\"/>\n\n            <Label Grid.Column=\"1\" x:Name=\"TypeLabel\" Content=\"Exception Type\" Margin=\"5\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"16\" Foreground=\"{DynamicResource Element.Foreground.Header}\">\n                <Label.ToolTip>\n                    <ToolTip Content=\"Exception Type\" Placement=\"Top\" HorizontalOffset=\"-5\"/>\n                </Label.ToolTip>\n            </Label>\n\n            <n:ImageButton Grid.Column=\"2\" x:Name=\"InnerButton\" Text=\"Open Inner Exception\" Content=\"{StaticResource Vector.Synchronize}\" MaxSize=\"20\" \n                           Margin=\"3\" Padding=\"2\" Style=\"{StaticResource Style.Button.Horizontal}\" IsEnabled=\"False\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyLight}\" \n                           Click=\"InnerButton_Click\"/>\n        </Grid>\n\n        <TextBox x:Name=\"MessageTextBox\" Margin=\"3\" Grid.Row=\"1\" TextWrapping=\"Wrap\" MinHeight=\"50\" FontSize=\"14\" ScrollViewer.CanContentScroll=\"True\" \n                 VerticalScrollBarVisibility=\"Auto\" FontFamily=\"{DynamicResource FontFamilyBold}\" IsReadOnly=\"True\" MaxHeight=\"150\">\n            <TextBox.ToolTip>\n                <ToolTip Content=\"Message\" Placement=\"Left\" HorizontalOffset=\"-5\" VerticalOffset=\"-5\"/>\n            </TextBox.ToolTip>\n        </TextBox>\n\n        <TextBox x:Name=\"StackTextBox\" Margin=\"3\" Grid.Row=\"2\" TextWrapping=\"Wrap\" MinHeight=\"23\" ScrollViewer.CanContentScroll=\"True\" VerticalScrollBarVisibility=\"Auto\" IsReadOnly=\"True\">\n            <TextBox.ToolTip>\n                <ToolTip Content=\"Stack\" Placement=\"Left\" HorizontalOffset=\"-5\" VerticalOffset=\"-5\"/>\n            </TextBox.ToolTip>\n        </TextBox>\n\n        <TextBox x:Name=\"SourceTextBox\" Margin=\"3\" Grid.Row=\"3\" TextWrapping=\"Wrap\" MinHeight=\"23\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyBold}\" IsReadOnly=\"True\">\n            <TextBox.ToolTip>\n                <ToolTip Content=\"Source\" Placement=\"Left\" HorizontalOffset=\"-5\" VerticalOffset=\"-5\"/>\n            </TextBox.ToolTip>\n        </TextBox>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ImageButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"Ok\" Content=\"{StaticResource Vector.Ok}\" MaxSize=\"20\" Padding=\"4,0\" Margin=\"5\" MinWidth=\"90\" IsDefault=\"True\" Click=\"DoneButton_Click\"/>\n        </Grid>\n    </Grid>\n</Window>"
  },
  {
    "path": "Other/Translator/ExceptionViewer.xaml.cs",
    "content": "using System;\nusing System.Windows;\n\nnamespace Translator;\n\npublic partial class ExceptionViewer\n{\n    #region Variables\n\n    private readonly Exception _exception;\n\n    #endregion\n\n    /// <summary>\n    /// Default constructor.\n    /// </summary>\n    /// <param name=\"ex\">The Exception to show.</param>\n    public ExceptionViewer(Exception ex)\n    {\n        InitializeComponent();\n\n        _exception = ex;\n\n        #region Shows Information\n\n        TypeLabel.Content = ex.GetType().Name;\n        MessageTextBox.Text = ex.Message;\n        StackTextBox.Text = ex.StackTrace;\n        SourceTextBox.Text = ex.Source;\n\n        if (ex.TargetSite != null)\n            SourceTextBox.Text += \".\" + ex.TargetSite.Name;\n\n        //If there's additional details.\n        if (!string.IsNullOrEmpty(ex.HelpLink))\n            StackTextBox.Text += Environment.NewLine + Environment.NewLine + ex.HelpLink;\n\n        if (ex.InnerException != null)\n            InnerButton.IsEnabled = true;\n\n        #endregion\n    }\n\n    private void InnerButton_Click(object sender, RoutedEventArgs e)\n    {\n        var errorViewer = new ExceptionViewer(_exception.InnerException);\n        errorViewer.ShowDialog();\n\n        GC.Collect(1);\n    }\n\n    private void DoneButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "Other/Translator/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ScreenToGif Translator\")]\n[assembly: AssemblyDescription(\"The translator tool for ScreenToGif\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Nicke Manarin\")]\n[assembly: AssemblyProduct(\"ScreenToGif Translator\")]\n[assembly: AssemblyCopyright(\"Copyright © Nicke Manarin 2019\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n                                     //(used if a resource is not found in the page, \n                                     // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n                                              //(used if a resource is not found in the page, \n                                              // app, or any theme specific resource dictionaries)\n)]\n\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.3.0.0\")]\n[assembly: AssemblyFileVersion(\"1.3.0.0\")]\n"
  },
  {
    "path": "Other/Translator/Themes/Buttons.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xmlns:n=\"clr-namespace:Translator.Controls\">\n\n    <!--<c:MultiLineTitle x:Key=\"MultiLineTitleConverter\"/>-->\n\n    <!--Image Button Style -->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Vertical.Border\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" \n                            Background=\"{TemplateBinding Background}\">\n                        <StackPanel Orientation=\"Vertical\" SnapsToDevicePixels=\"True\"  HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n\n                            <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                     Margin=\"2,0,2,0\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\"\n                                     Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                     MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                                <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                                  HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                            </Viewbox>\n\n                            <TextBlock x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\" Padding=\"2\"/>\n                        </StackPanel>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFABABAB\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FFA3BDE3\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FF2A8DD4\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"#FFB1B1B1\" />-->\n                <Setter Property=\"Background\" Value=\"#FFFDFDFD\" />\n                <!--<Setter Property=\"BorderBrush\" Value=\"#FFE1E1E1\" />-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Special Image Button Style -->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal.Special\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" \n                            Background=\"{TemplateBinding Background}\">\n                        <StackPanel Orientation=\"Horizontal\" SnapsToDevicePixels=\"True\"  HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n\n                            <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                     Margin=\"2,0,2,0\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\"\n                                     Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                     MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                                <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                              HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                            </Viewbox>\n\n                            <TextBlock x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\" Padding=\"2\"/>\n                        </StackPanel>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"#FFFFF8EB\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFFBDBA6\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFF9E7C3\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FFEEB860\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFEEB860\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FFFFB437\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"#FFB1B1B1\" />-->\n                <Setter Property=\"Background\" Value=\"#FFFDFDFD\" />\n                <!--<Setter Property=\"BorderBrush\" Value=\"#FFE1E1E1\" />-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Horizontal Button Style-->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <StackPanel Orientation=\"Horizontal\" MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" Background=\"{TemplateBinding Background}\">\n                        \n                        <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                 Margin=\"2\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\"\n                                 Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                 MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                              HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                        </Viewbox>\n\n                        <Grid Margin=\"{TemplateBinding Padding}\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"2,0,2,0\" Foreground=\"{TemplateBinding Foreground}\"\n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                            <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\"\n                                       Foreground=\"#FF5D5D5D\" FontSize=\"10\" HorizontalAlignment=\"Right\" Margin=\"0,-10,2,0\" Padding=\"0\" Height=\"13\"/>\n                        </Grid>\n                    </StackPanel>\n                    \n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"TextBlockInternal\" Property=\"Foreground\" Value=\"Black\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n\n        <Setter Property=\"FocusVisualStyle\">\n            <Setter.Value>\n                <Style>\n                    <Setter Property=\"Control.Template\">\n                        <Setter.Value>\n                            <ControlTemplate>\n                                <Rectangle Margin=\"-2\" SnapsToDevicePixels=\"true\" Stroke=\"DarkSlateGray\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n                </Style>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"Gray\"/>-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal.Fade\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <StackPanel Orientation=\"Horizontal\" MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" Background=\"{TemplateBinding Background}\">\n\n                        <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                 Margin=\"2\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\"\n                                 Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                 MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                              HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                        </Viewbox>\n\n                        <Grid Margin=\"{TemplateBinding Padding}\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"2,0,2,0\" Foreground=\"{TemplateBinding Foreground}\"\n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                            <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\"\n                                       Foreground=\"#FF5D5D5D\" FontSize=\"10\" HorizontalAlignment=\"Right\" Margin=\"0,-10,2,0\" Padding=\"0\" Height=\"13\"/>\n                        </Grid>\n                    </StackPanel>\n\n                    <ControlTemplate.Triggers>\n                        <DataTrigger Binding=\"{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\">\n                            <DataTrigger.EnterActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" To=\"1\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </DataTrigger.EnterActions>\n                            <DataTrigger.ExitActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </DataTrigger.ExitActions>\n\n                            <Setter TargetName=\"TextBlockInternal\" Property=\"Foreground\" Value=\"Black\"/>\n                            <Setter Property=\"Background\" Value=\"#FFD5E1F2\"/>\n                        </DataTrigger>\n                        \n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n\n        <Setter Property=\"FocusVisualStyle\">\n            <Setter.Value>\n                <Style>\n                    <Setter Property=\"Control.Template\">\n                        <Setter.Value>\n                            <ControlTemplate>\n                                <Rectangle Margin=\"-2\" SnapsToDevicePixels=\"true\" Stroke=\"DarkSlateGray\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n                </Style>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"Gray\"/>-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Vertical Button Style -->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Vertical\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Grid MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition/>\n                        </Grid.RowDefinitions>\n\n                        <Viewbox x:Name=\"ViewBoxInternal\" Grid.Row=\"0\" VerticalAlignment=\"Stretch\" HorizontalAlignment=\"Stretch\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                 Stretch=\"Uniform\" StretchDirection=\"Both\" Margin=\"5\" Effect=\"{x:Null}\"\n                                 MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                              HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                        </Viewbox>\n\n                        <TextBlock x:Name=\"TextBlockInternal\" Grid.Row=\"1\" Margin=\"2,0\"\n                                   HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\" Text=\"{TemplateBinding Text, Converter={StaticResource MultiLineTitleConverter}}\" \n                                   TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\" TextAlignment=\"Center\"/>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"MinWidth\" Value=\"50\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Background\" Value=\"Gray\"/>-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--NoText + Border Button Style -->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Focusable\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Grid MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" Width=\"Auto\" SnapsToDevicePixels=\"True\">\n                        <Viewbox x:Name=\"ViewBoxInternal\" Grid.Row=\"0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                 Margin=\"{TemplateBinding Padding}\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\"\n                                 Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                 MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                              HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                        </Viewbox>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Setter Property=\"FocusVisualStyle\">\n            <Setter.Value>\n                <Style>\n                    <Setter Property=\"Control.Template\">\n                        <Setter.Value>\n                            <ControlTemplate>\n                                <Rectangle Margin=\"0\" SnapsToDevicePixels=\"True\" Stroke=\"DarkSlateGray\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n                </Style>\n            </Setter.Value>\n        </Setter>\n        \n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Background\" Value=\"Gray\"/>-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--NoText + Border Image Button Style -->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText.Border\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\">\n                        <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                 Margin=\"2,0,2,0\" Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                 Stretch=\"Uniform\" StretchDirection=\"Both\" MaxHeight=\"{TemplateBinding MaxSize}\" Effect=\"{x:Null}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\"/>\n                        </Viewbox>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFABABAB\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FFA3BDE3\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FF2A8DD4\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"#FFB1B1B1\" />-->\n                <Setter Property=\"Background\" Value=\"#FFFDFDFD\" />\n                <!--<Setter Property=\"BorderBrush\" Value=\"#FFE1E1E1\" />-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--NoText + Fade-->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText.Fade\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Grid MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" Width=\"Auto\" SnapsToDevicePixels=\"True\">\n                        <Viewbox x:Name=\"ViewBoxInternal\" Grid.Row=\"0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                 Margin=\"{TemplateBinding Padding}\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\"\n                                 Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                 MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" \n                                              HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                        </Viewbox>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <DataTrigger Binding=\"{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\">\n                            <DataTrigger.EnterActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" To=\"1\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </DataTrigger.EnterActions>\n                            <DataTrigger.ExitActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </DataTrigger.ExitActions>\n                        </DataTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Opacity\" Value=\".3\"/>\n\n        <Style.Triggers>\n            <!--<Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\" />\n            </Trigger>-->\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Background\" Value=\"Gray\"/>-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "Other/Translator/Themes/Colors.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <SolidColorBrush x:Key=\"Panel.Background\" Color=\"#FFFFFFFF\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level2\" Color=\"#FFFAFAFA\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level3\" Color=\"WhiteSmoke\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level4\" Color=\"#FFF9F9FF\"/>\n    \n    <SolidColorBrush x:Key=\"Button.Background\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Button.Background.Hover\" Color=\"#FFD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Button.Background.Pressed\" Color=\"#FFA3BDE3\"/>\n\n    <SolidColorBrush x:Key=\"Element.Foreground.Header\" Color=\"#FF003399\"/>\n    \n    <SolidColorBrush x:Key=\"Button.Border\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Button.Border.Hover\" Color=\"#FFA3BDE3\"/>\n    <SolidColorBrush x:Key=\"Button.Border.Pressed\" Color=\"#FF2A8DD4\"/>\n\n    <SolidColorBrush x:Key=\"Item.MouseOver.Background\" Color=\"#1F26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.MouseOver.Border\" Color=\"#a826A0Da\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Background\" Color=\"#3326A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Border\" Color=\"#4C26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Background\" Color=\"#3D26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Border\" Color=\"#FF26A0DA\"/>\n</ResourceDictionary>"
  },
  {
    "path": "Other/Translator/Themes/ComboBox.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!--ComboBox Style-->\n    <Style x:Key=\"ComboBoxToggleButton\" TargetType=\"{x:Type ToggleButton}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"Focusable\" Value=\"False\"/>\n        <Setter Property=\"ClickMode\" Value=\"Press\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                    <Border x:Name=\"templateRoot\" BorderBrush=\"#FFABADB3\" BorderThickness=\"1\" Background=\"White\" SnapsToDevicePixels=\"true\">\n                        <Border x:Name=\"splitBorder\" BorderBrush=\"Transparent\" BorderThickness=\"1\" HorizontalAlignment=\"Right\" Margin=\"0\" SnapsToDevicePixels=\"true\" Width=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\">\n                            <Path x:Name=\"arrow\" Data=\"F1 M 0,0 L 2.667,2.66665 L 5.3334,0 L 5.3334,-1.78168 L 2.6667,0.88501 L0,-1.78168 L0,0 Z\" Fill=\"#FF606060\" HorizontalAlignment=\"Center\" Margin=\"0\" VerticalAlignment=\"Center\"/>\n                        </Border>\n                    </Border>\n                    \n                    <ControlTemplate.Triggers>\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"true\"/>\n                                <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"false\"/>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"false\"/>\n                                <Condition Binding=\"{Binding IsEnabled, RelativeSource={RelativeSource Self}}\" Value=\"true\"/>\n                            </MultiDataTrigger.Conditions>\n                            \n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFFFFFFF\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FFABADB3\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\" Value=\"Transparent\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"Transparent\"/>\n                        </MultiDataTrigger>\n                        \n                        <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                            <Setter Property=\"Fill\" TargetName=\"arrow\" Value=\"#FF000000\"/>\n                        </Trigger>\n                        \n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"true\"/>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"false\"/>\n                            </MultiDataTrigger.Conditions>\n                            \n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFECF4FC\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FF7EB4EA\"/>\n                        </MultiDataTrigger>\n                        \n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"true\"/>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"true\"/>\n                            </MultiDataTrigger.Conditions>\n                            \n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFFFFFFF\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FF7EB4EA\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\" Value=\"#FFEBF4FC\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"#FF7EB4EA\"/>\n                        </MultiDataTrigger>\n                        \n                        <Trigger Property=\"IsPressed\" Value=\"true\">\n                            <Setter Property=\"Fill\" TargetName=\"arrow\" Value=\"#FF000000\"/>\n                        </Trigger>\n                        \n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"true\"/>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"false\"/>\n                            </MultiDataTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\">\n                                <Setter.Value>\n                                    <LinearGradientBrush EndPoint=\"0,1\" StartPoint=\"0,0\">\n                                        <GradientStop Color=\"#FFDAECFC\" Offset=\"0.0\"/>\n                                        <GradientStop Color=\"#FFC4E0FC\" Offset=\"1.0\"/>\n                                    </LinearGradientBrush>\n                                </Setter.Value>\n                            </Setter>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FF569DE5\"/>\n                        </MultiDataTrigger>\n\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"true\"/>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"true\"/>\n                            </MultiDataTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFFFFFFF\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FF569DE5\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\">\n                                <Setter.Value>\n                                    <LinearGradientBrush EndPoint=\"0,1\" StartPoint=\"0,0\">\n                                        <GradientStop Color=\"#FFDAEBFC\" Offset=\"0.0\"/>\n                                        <GradientStop Color=\"#FFC4E0FC\" Offset=\"1.0\"/>\n                                    </LinearGradientBrush>\n                                </Setter.Value>\n                            </Setter>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"#FF569DE5\"/>\n                        </MultiDataTrigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"false\">\n                            <Setter Property=\"Fill\" TargetName=\"arrow\" Value=\"#FFBFBFBF\"/>\n                        </Trigger>\n\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEnabled, RelativeSource={RelativeSource Self}}\" Value=\"false\"/>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"false\"/>\n                            </MultiDataTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFF0F0F0\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FFD9D9D9\"/>\n                        </MultiDataTrigger>\n\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEnabled, RelativeSource={RelativeSource Self}}\" Value=\"false\"/>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"true\"/>\n                            </MultiDataTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFFFFFFF\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"#FFBFBFBF\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\" Value=\"Transparent\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"Transparent\"/>\n                        </MultiDataTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <ControlTemplate x:Key=\"ComboBoxTemplate\" TargetType=\"{x:Type ComboBox}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"true\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"#FFABADB3\" BorderThickness=\"1\" Background=\"White\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                            <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"2\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                          IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{StaticResource ComboBoxToggleButton}\"/>\n\n            <ContentPresenter Grid.Column=\"0\" IsHitTestVisible=\"False\" Margin=\"{TemplateBinding Padding}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\n                              Content=\"{TemplateBinding SelectionBoxItem}\" ContentTemplate=\"{TemplateBinding SelectionBoxItemTemplate}\" \n                              ContentTemplateSelector=\"{TemplateBinding ItemTemplateSelector}\" ContentStringFormat=\"{TemplateBinding SelectionBoxItemStringFormat}\"\n                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n        </Grid>\n        \n        <ControlTemplate.Triggers>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter TargetName=\"DropDownBorder\" Property=\"Height\" Value=\"95\"/>\n            </Trigger>\n            \n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <Style x:Key=\"ComboBoxEditableTextBox\" TargetType=\"{x:Type TextBox}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n        <Setter Property=\"AllowDrop\" Value=\"True\"/>\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type TextBox}\">\n                    <ScrollViewer x:Name=\"PART_ContentHost\" Background=\"Transparent\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"/>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <ControlTemplate x:Key=\"ComboBoxEditableTemplate\" TargetType=\"{x:Type ComboBox}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"true\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"#FFABADB3\" BorderThickness=\"1\" Background=\"White\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                        <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"2\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                          IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{StaticResource ComboBoxToggleButton}\"/>\n\n                <TextBox Grid.Column=\"0\" x:Name=\"PART_EditableTextBox\" Margin=\"{TemplateBinding Padding}\"\n                         IsReadOnly=\"{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{StaticResource ComboBoxEditableTextBox}\" \n                         HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n        </Grid>\n        \n        <ControlTemplate.Triggers>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" TargetName=\"PART_EditableTextBox\" Value=\"0.56\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocusWithin\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter TargetName=\"DropDownBorder\" Property=\"Height\" Value=\"95\"/>\n            </Trigger>\n            \n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"true\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n                \n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <Style TargetType=\"{x:Type ComboBox}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource FocusVisualStyle}\"/>\n        <Setter Property=\"Height\" Value=\"25\"/>\n        <Setter Property=\"Background\" Value=\"#FFF0F0F0\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFACACAC\"/>\n        <Setter Property=\"Foreground\" Value=\"Black\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"Padding\" Value=\"5,3\"/>\n        <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"True\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"Template\" Value=\"{StaticResource ComboBoxTemplate}\"/>\n        \n        <Style.Triggers>\n            <Trigger Property=\"IsEditable\" Value=\"True\">\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"Padding\" Value=\"2\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"Template\" Value=\"{StaticResource ComboBoxEditableTemplate}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n    \n    <!--ComboBoxButton Style-->\n    <Style x:Key=\"DropDownToggleButton\" TargetType=\"{x:Type ToggleButton}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"true\"/>\n        <Setter Property=\"IsTabStop\" Value=\"false\"/>\n        <Setter Property=\"Focusable\" Value=\"false\"/>\n        <Setter Property=\"ClickMode\" Value=\"Press\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                    <Grid x:Name=\"templateRoot\" MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" \n                          Background=\"{TemplateBinding Background}\" />\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFD5E1F2\" />\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"true\">\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFA3BDE3\" />\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "Other/Translator/Themes/DataGridStyle.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:t=\"clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero\">\n\n    <Color x:Key=\"BackgroundColor\">#FF002FA7</Color>\n    <Color x:Key=\"StandardColor\">#FF002FA7</Color>\n    <Color x:Key=\"HoverColor\">#FF007CBC</Color>\n    <Color x:Key=\"PressedColor\">#FF5700FF</Color>\n    <Color x:Key=\"DialogBackgroundColor\">#FF002Fa7</Color>\n    <Color x:Key=\"ScollBarBackgroundStart\">Transparent</Color>\n    <Color x:Key=\"ScollBarBackgroundEnd\">Transparent</Color>\n    <SolidColorBrush x:Key=\"StandardBrush\" Color=\"{StaticResource StandardColor}\" />\n    <SolidColorBrush x:Key=\"HoverBrush\" Color=\"{StaticResource HoverColor}\" />\n    <SolidColorBrush x:Key=\"BackgroundBrush\" Color=\"{StaticResource BackgroundColor}\" />\n\n    <LinearGradientBrush x:Key=\"ScollBarBackgroundBrush\" StartPoint=\"0,0\" EndPoint=\"1,0\">\n        <LinearGradientBrush.GradientStops>\n            <GradientStop Offset=\"0\" Color=\"{StaticResource ScollBarBackgroundStart}\" />\n            <GradientStop Offset=\"1\" Color=\"{StaticResource ScollBarBackgroundEnd}\" />\n        </LinearGradientBrush.GradientStops>\n    </LinearGradientBrush>\n\n    <Style TargetType=\"{x:Type DataGridRowHeader}\" x:Shared=\"False\">\n        <Setter Property=\"Foreground\" Value=\"RoyalBlue\" />\n        <Setter Property=\"Background\" Value=\"LightBlue\" />\n        <Setter Property=\"FontWeight\" Value=\"Bold\" />\n        <Setter Property=\"FontSize\" Value=\"15\" />\n        <Setter Property=\"Width\" Value=\"20\" />\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#73BCD4\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#44A5C5\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".7\" />\n            </Trigger>\n            <Trigger Property=\"IsRowSelected\" Value=\"True\">\n                <Setter Property=\"Content\">\n                    <Setter.Value>\n                        <ContentControl IsTabStop=\"False\" Height=\"15\" Width=\"15\" \n                                        Content=\"{DynamicResource Vector.Arrow.Blue.Right}\"/>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridRow}\">\n        <Style.Triggers>\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"DarkSlateBlue\"/>\n            </Trigger>\n\n            <Trigger Property=\"ItemsControl.AlternationIndex\" Value=\"0\">\n                <Setter Property=\"Background\" Value=\"White\"/>\n            </Trigger>\n\n            <Trigger Property=\"ItemsControl.AlternationIndex\" Value=\"1\">\n                <Setter Property=\"Background\" Value=\"PowderBlue\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGrid}\">\n        <Setter Property=\"Background\" Value=\"White\" />\n        <Setter Property=\"AlternationCount\" Value=\"2\" />\n\n        <Setter Property=\"HorizontalGridLinesBrush\" Value=\"#F0007CAA\"/>\n        <Setter Property=\"VerticalGridLinesBrush\" Value=\"#F0007CAA\"/>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridCell}\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" \n                            BorderThickness=\"{TemplateBinding BorderThickness}\" \n                            Background=\"{TemplateBinding Background}\"\n                            HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" \n                            SnapsToDevicePixels=\"True\">\n                        <ContentPresenter VerticalAlignment=\"Stretch\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </Trigger>\n            <!--<Trigger Property=\"IsKeyboardFocusWithin\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}\"/>\n            </Trigger>-->\n            <!--<MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"true\"/>\n                    <Condition Property=\"Selector.IsSelectionActive\" Value=\"false\"/>\n                </MultiTrigger.Conditions>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}\"/>\n            </MultiTrigger>-->\n            <Trigger Property=\"IsEnabled\" Value=\"false\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Alinhamento das Células-->\n    <Style x:Key=\"CellCentralizado\" TargetType=\"{x:Type DataGridCell}\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" \n                            BorderThickness=\"{TemplateBinding BorderThickness}\" \n                            Background=\"{TemplateBinding Background}\"\n                            HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n                            SnapsToDevicePixels=\"True\">\n                        <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" \n                                          SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Setter Property=\"IsTabStop\" Value=\"False\" />\n\n        <Style.Triggers>\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n    \n    <Style x:Key=\"CellCentralizadoBorda\" TargetType=\"{x:Type DataGridCell}\" BasedOn=\"{StaticResource CellCentralizado}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"True\"/>\n                    <Condition Property=\"IsFocused\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"GreenYellow\" />\n                <Setter Property=\"BorderThickness\" Value=\"2\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style x:Key=\"CellDireita\" TargetType=\"{x:Type DataGridCell}\">\n        <Setter Property=\"IsTabStop\" Value=\"False\" />\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" \n                            BorderThickness=\"{TemplateBinding BorderThickness}\" \n                            Background=\"{TemplateBinding Background}\"\n                            HorizontalAlignment=\"Stretch\"\n                            SnapsToDevicePixels=\"True\">\n\n                        <ContentPresenter HorizontalAlignment=\"Right\" TextBlock.TextAlignment=\"Right\" VerticalAlignment=\"Center\" \n                                          SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                    <Condition Property=\"IsEditing\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n                <Setter Property=\"Background\" Value=\"White\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <!--<Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}\"/>-->\n                <!--<Setter Property=\"BorderBrush\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>-->\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                    <Condition Property=\"IsEditing\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                    <Condition Property=\"IsEditing\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n                <Setter Property=\"Background\" Value=\"White\"/>\n            </MultiTrigger>\n\n        </Style.Triggers>\n    </Style>\n    \n    <Style x:Key=\"CellDireitaBorda\" TargetType=\"{x:Type DataGridCell}\" BasedOn=\"{StaticResource CellDireita}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"True\"/>\n                    <Condition Property=\"IsFocused\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"GreenYellow\" />\n                <Setter Property=\"BorderThickness\" Value=\"2\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style x:Key=\"CellEsquerda\" TargetType=\"{x:Type DataGridCell}\">\n        <Setter Property=\"IsTabStop\" Value=\"False\" />\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" \n                            BorderThickness=\"{TemplateBinding BorderThickness}\" \n                            Background=\"{TemplateBinding Background}\"\n                            HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n                            SnapsToDevicePixels=\"True\">\n                        <ContentPresenter HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" \n                                          SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n    \n    <Style x:Key=\"CellEsquerdaBorda\" TargetType=\"{x:Type DataGridCell}\" BasedOn=\"{StaticResource CellEsquerda}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"True\"/>\n                    <Condition Property=\"IsFocused\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"GreenYellow\" />\n                <Setter Property=\"BorderThickness\" Value=\"2\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style x:Key=\"ColumnHeaderGripperStyle\" TargetType=\"{x:Type Thumb}\">\n        <Setter Property=\"Width\" Value=\"8\" />\n        <Setter Property=\"Background\" Value=\"Transparent\" />\n        <Setter Property=\"Cursor\" Value=\"SizeWE\" />\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                    <Border Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" />\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridColumnHeader}\">\n        <Setter Property=\"Height\" Value=\"24\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FF336584\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0,0,1,1\"/>\n        <Setter Property=\"Foreground\" Value=\"White\" />\n        <Setter Property=\"Background\" Value=\"#FF397093\" />\n        <Setter Property=\"Padding\" Value=\"2,0,0,0\" />\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridColumnHeader}\">\n                    <Grid>\n                        <t:DataGridHeaderBorder BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                                Background=\"{TemplateBinding Background}\" IsClickable=\"{TemplateBinding CanUserSort}\" \n                                                IsPressed=\"{TemplateBinding IsPressed}\" IsHovered=\"{TemplateBinding IsMouseOver}\" \n                                                Padding=\"{TemplateBinding Padding}\" SortDirection=\"{TemplateBinding SortDirection}\" \n                                                SeparatorBrush=\"{TemplateBinding SeparatorBrush}\" SeparatorVisibility=\"{TemplateBinding SeparatorVisibility}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\" />\n                                    <ColumnDefinition Width=\"*\" />\n                                </Grid.ColumnDefinitions>\n\n                                <ContentPresenter Grid.Column=\"0\" x:Name=\"Presenter\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" />\n\n                                <Path Grid.Column=\"1\" x:Name=\"SortArrow\" Width=\"8\" Height=\"6\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\n                                      Margin=\"2,0,5,0\" Stretch=\"Fill\" Fill=\"White\" RenderTransformOrigin=\"0.5,0.4\"\n                                      Visibility=\"Collapsed\" Data=\"M0,0 L1,0 0.5,1 z\" />\n                            </Grid>\n                        </t:DataGridHeaderBorder>\n\n                        <Thumb x:Name=\"PART_LeftHeaderGripper\" HorizontalAlignment=\"Left\" \n                               Style=\"{StaticResource ColumnHeaderGripperStyle}\" />\n                        <Thumb x:Name=\"PART_RightHeaderGripper\" HorizontalAlignment=\"Right\" \n                               Style=\"{StaticResource ColumnHeaderGripperStyle}\" />\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"SortDirection\" Value=\"Ascending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\" />\n                            <Setter TargetName=\"SortArrow\" Property=\"RenderTransform\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"180\" />\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n                        <Trigger Property=\"SortDirection\" Value=\"Descending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\" />\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"Black\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                <Setter Property=\"Background\" Value=\"#FF70A6C8\"/>\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FF89B6D1\"/>\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".7\" />\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridColumnHeader}\" x:Key=\"CentralizedColumnHeader\">\n        <Setter Property=\"Height\" Value=\"24\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FF336584\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0,0,1,1\"/>\n        <Setter Property=\"Foreground\" Value=\"White\" />\n        <Setter Property=\"Background\" Value=\"#FF397093\" />\n        <Setter Property=\"Padding\" Value=\"2,0,2,0\" />\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridColumnHeader}\">\n                    <Grid>\n                        <t:DataGridHeaderBorder BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                                Background=\"{TemplateBinding Background}\" IsClickable=\"{TemplateBinding CanUserSort}\" \n                                                IsPressed=\"{TemplateBinding IsPressed}\" IsHovered=\"{TemplateBinding IsMouseOver}\" \n                                                Padding=\"{TemplateBinding Padding}\" SortDirection=\"{TemplateBinding SortDirection}\" \n                                                SeparatorBrush=\"{TemplateBinding SeparatorBrush}\" SeparatorVisibility=\"{TemplateBinding SeparatorVisibility}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\" />\n                                    <ColumnDefinition Width=\"Auto\" />\n                                    <ColumnDefinition Width=\"*\" />\n                                </Grid.ColumnDefinitions>\n\n                                <ContentPresenter Grid.Column=\"1\" x:Name=\"Presenter\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" />\n\n                                <Path Grid.Column=\"2\" x:Name=\"SortArrow\" Width=\"8\" Height=\"6\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\n                                      Margin=\"2,0,5,0\" Stretch=\"Fill\" Fill=\"White\" RenderTransformOrigin=\"0.5,0.4\"\n                                      Visibility=\"Collapsed\" Data=\"M0,0 L1,0 0.5,1 z\" />\n                            </Grid>\n                        </t:DataGridHeaderBorder>\n\n                        <Thumb x:Name=\"PART_LeftHeaderGripper\" HorizontalAlignment=\"Left\" \n                               Style=\"{StaticResource ColumnHeaderGripperStyle}\" />\n                        <Thumb x:Name=\"PART_RightHeaderGripper\" HorizontalAlignment=\"Right\" \n                               Style=\"{StaticResource ColumnHeaderGripperStyle}\" />\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"SortDirection\" Value=\"Ascending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\" />\n                            <Setter TargetName=\"SortArrow\" Property=\"RenderTransform\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"180\" />\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n                        <Trigger Property=\"SortDirection\" Value=\"Descending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\" />\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"Black\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                <Setter Property=\"Background\" Value=\"#FF70A6C8\"/>\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FF89B6D1\"/>\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".7\" />\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridColumnHeader}\" x:Key=\"RightColumnHeader\">\n        <Setter Property=\"Height\" Value=\"24\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FF336584\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0,0,1,1\"/>\n        <Setter Property=\"Foreground\" Value=\"White\" />\n        <Setter Property=\"Background\" Value=\"#FF397093\" />\n        <Setter Property=\"Padding\" Value=\"0,0,4,0\" />\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridColumnHeader}\">\n                    <Grid>\n                        <t:DataGridHeaderBorder BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                                Background=\"{TemplateBinding Background}\" IsClickable=\"{TemplateBinding CanUserSort}\" \n                                                IsPressed=\"{TemplateBinding IsPressed}\" IsHovered=\"{TemplateBinding IsMouseOver}\" \n                                                Padding=\"{TemplateBinding Padding}\" SortDirection=\"{TemplateBinding SortDirection}\" \n                                                SeparatorBrush=\"{TemplateBinding SeparatorBrush}\" SeparatorVisibility=\"{TemplateBinding SeparatorVisibility}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\" />\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <ContentPresenter Grid.Column=\"1\" x:Name=\"Presenter\"\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                                <Path Grid.Column=\"2\" x:Name=\"SortArrow\" Width=\"8\" Height=\"6\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"\n                                      Margin=\"2,0\" Stretch=\"Fill\" Fill=\"White\" RenderTransformOrigin=\"0.5,0.4\"\n                                      Visibility=\"Collapsed\" Data=\"M0,0 L1,0 0.5,1 z\"/>\n                            </Grid>\n                        </t:DataGridHeaderBorder>\n\n                        <Thumb x:Name=\"PART_LeftHeaderGripper\" HorizontalAlignment=\"Left\" \n                               Style=\"{StaticResource ColumnHeaderGripperStyle}\" />\n                        <Thumb x:Name=\"PART_RightHeaderGripper\" HorizontalAlignment=\"Right\" \n                               Style=\"{StaticResource ColumnHeaderGripperStyle}\" />\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"SortDirection\" Value=\"Ascending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\" />\n                            <Setter TargetName=\"SortArrow\" Property=\"RenderTransform\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"180\" />\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n                        <Trigger Property=\"SortDirection\" Value=\"Descending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\" />\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"Black\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                <Setter Property=\"Background\" Value=\"#FF70A6C8\"/>\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FF89B6D1\"/>\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".7\" />\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "Other/Translator/Themes/Generic.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xmlns:n=\"clr-namespace:Translator.Controls\"\n                    xmlns:c=\"clr-namespace:Translator.Converters\">\n\n    <!--Converter-->\n    <BooleanToVisibilityConverter x:Key=\"Bool2VisibilityConverterGeneric\" />\n    <c:MultiLineTitle x:Key=\"MultiLineTitleConverter\"/>\n\n    <!--Image Button Style -->\n    <Style TargetType=\"{x:Type n:ImageButton}\" BasedOn=\"{StaticResource {x:Type Button}}\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\">\n                        <StackPanel Orientation=\"Horizontal\" SnapsToDevicePixels=\"True\"  HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n\n                            <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                     Margin=\"2,0,2,0\" Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" \n                                     Stretch=\"Uniform\" StretchDirection=\"Both\" MaxHeight=\"{TemplateBinding MaxSize}\" Effect=\"{x:Null}\">\n                                <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\"/>\n                            </Viewbox>\n\n                            <Grid Margin=\"{TemplateBinding Padding}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\"\n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"2,0,2,0\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                           TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                                <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\"\n                                           Foreground=\"#FF5D5D5D\" FontSize=\"10\" HorizontalAlignment=\"Right\" Margin=\"0,-2,1,0\" Padding=\"0\" Height=\"12\"/>\n                            </Grid>\n                        </StackPanel>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <!--Default Values-->\n        <Setter Property=\"Background\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFABABAB\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FFA3BDE3\" />\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\" />\n                <Setter Property=\"BorderBrush\" Value=\"#FF2A8DD4\" />\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"#FFB1B1B1\" />-->\n                <Setter Property=\"Background\" Value=\"#FFFDFDFD\" />\n                <!--<Setter Property=\"BorderBrush\" Value=\"#FFE1E1E1\" />-->\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Extended TextBox-->\n    <Style TargetType=\"{x:Type n:ExtendedTextBox}\">\n        <Setter Property=\"Background\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFABAdB3\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Padding\" Value=\"1\"/>\n        <Setter Property=\"MinHeight\" Value=\"23\"/>\n        <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"AllowDrop\" Value=\"true\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedTextBox}\">\n                    <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Padding=\"{TemplateBinding Padding}\">\n                        <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"false\" HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"/>\n                    </Border>\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsEnabled\" Value=\"false\">\n                            <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.56\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"#FF7EB4EA\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"true\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"#FF569DE5\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsInactiveSelectionHighlightEnabled\" Value=\"true\"/>\n                    <Condition Property=\"IsSelectionActive\" Value=\"false\"/>\n                </MultiTrigger.Conditions>\n                <Setter Property=\"SelectionBrush\" Value=\"{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n\n    <!-- Image Menu Item-->\n    <Style TargetType=\"{x:Type n:ImageMenuItem}\">\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}}\"/>\n        <Setter Property=\"Foreground\" Value=\"#FF5E5E5E\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource FontFamilyNormal}\"/>\n        <Setter Property=\"FontSize\" Value=\"13\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ImageMenuItem}\">\n                    <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_38\">\n                        <Grid x:Name=\"Grid\" Uid=\"Grid_49\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition x:Name=\"FirstColumn\" MinWidth=\"30\" SharedSizeGroup=\"MenuItemIconColumnGroup\" Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition SharedSizeGroup=\"MenuItemIGTColumnGroup\" Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"10\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Grid x:Name=\"CheckSquare\" Grid.Column=\"0\" Background=\"Transparent\" Margin=\"0,0,3,0\">\n                                <Viewbox x:Name=\"CheckViewBox\" Visibility=\"Collapsed\" MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\" Stretch=\"Uniform\">\n                                    <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" Margin=\"4,0,6,0\" Uid=\"Path_12\" Visibility=\"Hidden\" VerticalAlignment=\"Center\"/>\n                                </Viewbox>\n                                <Viewbox x:Name=\"ImageViewBox\" Visibility=\"Visible\" VerticalAlignment=\"Center\" MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\" Stretch=\"Uniform\">\n                                    <ContentPresenter Content=\"{TemplateBinding Image}\" VerticalAlignment=\"Center\"/>\n                                </Viewbox>\n                            </Grid>\n\n                            <ContentPresenter x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" Grid.Column=\"1\" ContentSource=\"Header\" Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_33\"/>\n                            <TextBlock x:Name=\"InputGestureText\" Grid.Column=\"2\" DockPanel.Dock=\"Right\" Margin=\"5,2,0,2\" Text=\"{TemplateBinding InputGestureText}\" Uid=\"TextBlock_10\" Foreground=\"#FF5C5D5C\" FontSize=\"12\" FontWeight=\"Bold\"/>\n                        </Grid>\n                    </Border>\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsChecked\" Value=\"True\">\n                            <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                            <Setter Property=\"Background\" TargetName=\"CheckSquare\" Value=\"#FFD5E1F2\"/>\n                        </Trigger>\n                        <Trigger Property=\"HasImage\" Value=\"True\">\n                            <Setter Property=\"Visibility\" TargetName=\"ImageViewBox\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"HasImage\" Value=\"False\">\n                            <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <!--<Trigger Property=\"Image\" Value=\"{x:Null}\">\n                            <Setter Property=\"Visibility\" TargetName=\"ImageViewBox\" Value=\"Collapsed\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Visible\"/>\n                        </Trigger>-->\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n        <Style.Triggers>\n            <Trigger Property=\"Role\" Value=\"TopLevelHeader\">\n                <Setter Property=\"Margin\" Value=\"0,1\"/>\n                <Setter Property=\"Padding\" Value=\"6,3\"/>\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:ImageMenuItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_39\">\n                                <DockPanel x:Name=\"DockPanel\" Uid=\"DockPanel_4\">\n                                    <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" Margin=\"4,0,6,0\" Uid=\"Path_13\" Visibility=\"Collapsed\" VerticalAlignment=\"Center\"/>\n                                    <ContentPresenter x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" ContentSource=\"Header\" Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_35\"/>\n                                </DockPanel>\n                            </Border>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n            <Trigger Property=\"Role\" Value=\"TopLevelItem\">\n                <Setter Property=\"Margin\" Value=\"0,1\"/>\n                <Setter Property=\"Padding\" Value=\"6,3\"/>\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:ImageMenuItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_41\">\n                                <DockPanel x:Name=\"DockPanel\" Uid=\"DockPanel_5\">\n                                    <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" Margin=\"4,0,6,0\" Uid=\"Path_14\" Visibility=\"Collapsed\" VerticalAlignment=\"Center\"/>\n                                    <ContentPresenter x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" ContentSource=\"Header\" Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_37\"/>\n                                </DockPanel>\n                            </Border>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n            <Trigger Property=\"Role\" Value=\"SubmenuHeader\">\n                <Setter Property=\"DockPanel.Dock\" Value=\"Top\"/>\n                <Setter Property=\"Padding\" Value=\"0,2\"/>\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:ImageMenuItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_42\">\n                                <Grid x:Name=\"Grid\" Uid=\"Grid_50\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition MinWidth=\"17\" SharedSizeGroup=\"MenuItemIconColumnGroup\" Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition MinWidth=\"5\" SharedSizeGroup=\"MenuItemIGTColumnGroup\" Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"14\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Grid x:Name=\"CheckSquare\" Grid.Column=\"0\" Background=\"Transparent\" Margin=\"0,0,3,0\">\n                                        <Viewbox x:Name=\"CheckViewBox\" Visibility=\"Collapsed\" MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\" Stretch=\"Uniform\">\n                                            <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" Margin=\"4,0,6,0\" Uid=\"Path_12\" Visibility=\"Hidden\" VerticalAlignment=\"Center\"/>\n                                        </Viewbox>\n                                        <Viewbox x:Name=\"ImageViewBox\" Visibility=\"Visible\"  VerticalAlignment=\"Center\" MaxHeight=\"{TemplateBinding MaxSize}\" MaxWidth=\"{TemplateBinding MaxSize}\" Stretch=\"Uniform\">\n                                            <ContentPresenter Content=\"{TemplateBinding Image}\" VerticalAlignment=\"Center\"/>\n                                        </Viewbox>\n                                    </Grid>\n\n                                    <ContentPresenter x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" Grid.Column=\"1\" ContentSource=\"Header\" Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_39\"/>\n                                    <TextBlock x:Name=\"InputGestureText\" Grid.Column=\"2\" DockPanel.Dock=\"Right\" Margin=\"5,2,0,2\" Text=\"{TemplateBinding InputGestureText}\" Uid=\"TextBlock_10\" Foreground=\"#FF5C5D5C\" FontSize=\"12\" FontWeight=\"Bold\"/>\n                                    <Path x:Name=\"Path\" Grid.Column=\"3\" DockPanel.Dock=\"Right\" Data=\"M0,0L4,3.5 0,7z\" Fill=\"{TemplateBinding Foreground}\" Margin=\"4,0,6,0\" Uid=\"Path_16\" VerticalAlignment=\"Center\"/>\n\n                                    <Popup Name=\"Popup\" Grid.Column=\"3\" Placement=\"Right\" IsOpen=\"{TemplateBinding IsSubmenuOpen}\" AllowsTransparency=\"True\" Focusable=\"False\" PopupAnimation=\"Fade\" VerticalOffset=\"-2\">\n                                        <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"White\" BorderBrush=\"#FFBEBEBE\" BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"2\">\n                                            <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\" />\n                                        </Border>\n                                    </Popup>\n                                </Grid>\n                            </Border>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                                    <Setter Property=\"Background\" TargetName=\"CheckSquare\" Value=\"#FFD5E1F2\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasImage\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"ImageViewBox\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasImage\" Value=\"False\">\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Visible\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n            <Trigger Property=\"Role\" Value=\"SubmenuItem\">\n                <Setter Property=\"DockPanel.Dock\" Value=\"Top\"/>\n                <Setter Property=\"Padding\" Value=\"0,2\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsHighlighted\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n                <Setter Property=\"Background\" Value=\"#FFD5E1F2\"/>\n                <!--<Setter Property=\"BorderBrush\" Value=\"#FFA3BDE3\"/>-->\n                <Setter Property=\"BorderBrush\" Value=\"#FFD5E1F2\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"#FFA3BDE3\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <!--<Setter Property=\"Foreground\" Value=\"{DynamicResource ListItemDisabledForegroundBrush}\"/>-->\n                <Setter Property=\"Opacity\" Value=\".65\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Status Band-->\n    <Style TargetType=\"{x:Type n:StatusBand}\">\n        <Setter Property=\"Visibility\" Value=\"Collapsed\"/>\n        <Setter Property=\"Image\" Value=\"{DynamicResource Vector.Info}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:StatusBand}\">\n                    <Grid x:Name=\"WarningGrid\" Height=\"Auto\" MinHeight=\"30\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"30\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"30\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid.Resources>\n                            <Storyboard x:Key=\"HideWarningStoryboard\">\n                                <DoubleAnimation Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=WarningGrid,Path=Opacity}\" To=\"0\" Duration=\"0:0:0.5\">\n                                    <DoubleAnimation.EasingFunction>\n                                        <PowerEase Power=\"8\" />\n                                    </DoubleAnimation.EasingFunction>\n                                </DoubleAnimation>\n\n                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(Grid.Visibility)\" Duration=\"0:0:0.5\" >\n                                    <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:0.2\"/>\n                                </ObjectAnimationUsingKeyFrames>\n                            </Storyboard>\n\n                            <!--Storyboard.TargetName=\"WarningGrid\" -->\n                            <Storyboard x:Key=\"ShowWarningStoryboard\">\n                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(Grid.Visibility)\" Duration=\"0:0:0\" >\n                                    <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n                                </ObjectAnimationUsingKeyFrames>\n\n                                <DoubleAnimation Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:0.5\">\n                                    <DoubleAnimation.EasingFunction>\n                                        <PowerEase Power=\"8\" />\n                                    </DoubleAnimation.EasingFunction>\n                                </DoubleAnimation>\n                            </Storyboard>\n                        </Grid.Resources>\n\n                        <Viewbox Grid.Column=\"0\" x:Name=\"WarningViewBox\" Margin=\"3,3,3,3\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                 Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\">\n                            <ContentPresenter Content=\"{TemplateBinding Image}\" Height=\"Auto\" Width=\"Auto\"/>\n                        </Viewbox>\n\n                        <TextBlock Grid.Column=\"1\" x:Name=\"WarningTextBlock\" Text=\"{TemplateBinding Text}\" FontSize=\"12\" \n                                   Foreground=\"#FF686868\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" Margin=\"5,0,5,0\"/>\n\n                        <n:ImageButton Grid.Column=\"2\" x:Name=\"SuppressButton\" Content=\"{DynamicResource Vector.Close}\" MaxSize=\"18\" \n                                       HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Center\" Style=\"{DynamicResource Style.Button.NoText}\" MinWidth=\"30\">\n                            <n:ImageButton.ToolTip>\n                                <ToolTip Content=\"Suppress\" Placement=\"Top\" HorizontalOffset=\"-5\"/>\n                            </n:ImageButton.ToolTip>\n                            <!--<local:ImageButton.Triggers>\n                                <EventTrigger RoutedEvent=\"Button.Click\">\n                                    <EventTrigger.Actions>\n                                        <BeginStoryboard Storyboard=\"{StaticResource HideWarningStoryboard}\" Storyboard.TargetName=\"WarningGrid\" HandoffBehavior=\"SnapshotAndReplace\"/>\n                                    </EventTrigger.Actions>\n                                </EventTrigger>\n                            </local:ImageButton.Triggers>-->\n                        </n:ImageButton>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"Type\" Value=\"Info\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"#FFD4D4F8\"/>\n                        </Trigger>\n                        <Trigger Property=\"Type\" Value=\"Warning\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"#FFFCF7B6\"/>\n                        </Trigger>\n                        <Trigger Property=\"Type\" Value=\"Error\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"#FFF8D4D4\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "Other/Translator/Themes/IconSet.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Stop\" HorizontalAlignment=\"Center\" Height=\"30\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"F1M0,30L30,30 30,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"30\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Record\" HorizontalAlignment=\"Center\" Height=\"30\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M30,15C30,23.284 23.284,30 15,30 6.716,30 0,23.284 0,15 0,6.716 6.716,0 15,0 23.284,0 30,6.716 30,15\" Fill=\"#FFA02921\" Height=\"30\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Record.New\" HorizontalAlignment=\"Center\" Height=\"29.09\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M27.207,13.603C27.207,21.116 21.117,27.206 13.604,27.206 6.091,27.206 0,21.116 0,13.603 0,6.09 6.091,0 13.604,0 21.117,0 27.207,6.09 27.207,13.603\" Fill=\"#FFA02921\" Height=\"27.206\" Canvas.Left=\"2.793\" Canvas.Top=\"1.889\" Width=\"27.207\"/>\n        <Path Data=\"M4.421,4.124L0,4.124 0,0 4.421,0z\" Fill=\"White\" Height=\"4.124\" Canvas.Left=\"4.198\" Canvas.Top=\"4.311\" Width=\"4.421\"/>\n        <Path Data=\"F1M1.401,10.126L1.401,11.491 2.775,11.491 4.797,9.481 5.47,9.481 5.47,12.212 6.145,12.881 6.818,12.881 7.492,12.212 7.492,9.481 8.167,9.481 8.839,10.15 9.513,10.82 10.188,11.49 11.562,11.49 11.562,10.126 10.887,9.456 10.213,8.786 9.54,8.117 9.54,7.445 12.287,7.445 12.962,6.776 12.962,6.106 12.289,5.436 9.542,5.436 9.542,4.767 10.215,4.096 10.889,3.427 11.563,2.758 12.236,0.722 10.189,1.393 8.168,3.401 7.493,3.401 7.493,0.671 6.819,0 6.146,0 5.47,0.671 5.47,3.401 4.797,3.401 4.124,2.731 3.449,2.062 2.775,1.392 0.726,0.721 1.4,2.757 2.075,3.427 2.748,4.096 3.422,4.767 3.422,5.436 0.673,5.436 0,6.106 0,6.776 0.673,7.445 3.422,7.445 3.422,8.115z M8.116,5.359L8.116,7.395 7.443,8.064 5.394,8.064 4.72,7.395 4.72,5.359 5.393,4.689 7.442,4.689z\" Fill=\"#FFECC77D\" Height=\"12.881\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"12.962\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Record.Add\" HorizontalAlignment=\"Center\" Height=\"31.6182\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M25.831,22.655C27.585,20.288 28.49,17.419 28.49,14.245 28.49,6.378 22.112,0 14.245,0 6.378,0 0,6.378 0,14.245 0,22.113 6.378,28.49 14.245,28.49 16.726,28.49 18.863,28.087 20.893,26.971L20.987,26.803 16.144,26.876 16.144,22.413 20.798,22.413 20.798,17.759 25.831,17.759z\" Fill=\"#FFA02921\" Height=\"28.49\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"28.49\"/>\n        <Path Data=\"M4.624,4.625L0,4.625 0,8.094 4.624,8.094 4.624,13.296 8.671,13.296 8.671,8.094 13.295,8.094 13.295,4.625 8.671,4.625 8.671,0 4.624,0z\" Fill=\"#FF6EA493\" Height=\"13.296\" Canvas.Left=\"16.705\" Canvas.Top=\"18.322\" Width=\"13.295\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Camera\" HorizontalAlignment=\"Center\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"41\">\n        <Path Data=\"F1M29.437,21.25L0,21.25 0,0 29.437,0z\" Fill=\"White\" Height=\"21.25\" Canvas.Left=\"2.042\" Canvas.Top=\"7.562\" Width=\"29.437\"/>\n        <Path Data=\"F1M20.499,27.666C15.253,27.666 11,23.413 11,18.166 11,12.919 15.253,8.666 20.499,8.666 25.747,8.666 29.998,12.919 29.998,18.166 29.998,23.413 25.747,27.666 20.499,27.666 M4.025,10.143L7.764,10.143 7.764,13.084 4.025,13.084z M30.232,5.828L26.577,0 14.508,0 10.599,5.828 0,5.828 0,32 9.267,32 41,32 41,5.828z\" Fill=\"Gray\" Height=\"32\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"41\"/>\n        <Path Data=\"F1M14,7C14,10.865 10.866,14 7,14 3.134,14 0,10.865 0,7 0,3.135 3.134,0 7,0 10.866,0 14,3.135 14,7\" Fill=\"Gray\" Height=\"14\" Canvas.Left=\"13.5\" Canvas.Top=\"11.25\" Width=\"14\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Camera.New\" HorizontalAlignment=\"Center\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"46\">\n        <Path Data=\"F1M29.437,21.25L0,21.25 0,0 29.437,0z\" Fill=\"White\" Height=\"21.25\" Canvas.Left=\"7.042\" Canvas.Top=\"7.562\" Width=\"29.437\"/>\n        <Path Data=\"F1M20.499,27.666C15.253,27.666 11,23.413 11,18.166 11,12.919 15.253,8.666 20.499,8.666 25.747,8.666 29.998,12.919 29.998,18.166 29.998,23.413 25.747,27.666 20.499,27.666 M4.025,10.143L7.764,10.143 7.764,13.084 4.025,13.084z M30.232,5.828L26.577,0 14.508,0 10.599,5.828 0,5.828 0,32 9.267,32 41,32 41,5.828z\" Fill=\"Gray\" Height=\"32\" Canvas.Left=\"5\" Canvas.Top=\"0\" Width=\"41\"/>\n        <Path Data=\"F1M14,7C14,10.865 10.866,14 7,14 3.134,14 0,10.865 0,7 0,3.135 3.134,0 7,0 10.866,0 14,3.135 14,7\" Fill=\"Gray\" Height=\"14\" Canvas.Left=\"18.5\" Canvas.Top=\"11.25\" Width=\"14\"/>\n        <Path Data=\"F1M4.646,3.821L0.015,3.821 0,0 4.631,0z\" Fill=\"#FFFAFFF8\" Height=\"3.821\" Canvas.Left=\"4.496\" Canvas.Top=\"4.893\" Width=\"4.646\"/>\n        <Path Data=\"F1M1.486,10.791L1.486,12.246 2.944,12.246 5.09,10.104 5.804,10.104 5.804,13.016 6.52,13.729 7.235,13.729 7.949,13.016 7.949,10.104 8.665,10.104 9.38,10.817 10.095,11.53 10.811,12.244 12.268,12.244 12.268,10.791 11.551,10.076 10.836,9.363 10.123,8.65 10.123,7.934 13.037,7.934 13.753,7.221 13.753,6.506 13.039,5.792 10.125,5.792 10.125,5.079 10.839,4.364 11.554,3.651 12.27,2.938 12.984,0.768 10.811,1.483 8.666,3.624 7.95,3.624 7.95,0.715 7.236,0 6.522,0 5.804,0.715 5.804,3.624 5.09,3.624 4.374,2.91 3.658,2.197 2.944,1.482 0.77,0.768 1.486,2.937 2.202,3.651 2.915,4.364 3.632,5.079 3.632,5.792 0.715,5.792 0,6.506 0,7.221 0.715,7.934 3.632,7.934 3.632,8.648z M8.612,5.712L8.612,7.881 7.898,8.595 5.723,8.595 5.009,7.881 5.009,5.712 5.723,4.998 7.897,4.998z\" Fill=\"#FFECC77D\" Height=\"13.729\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"13.753\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Camera.Add\" HorizontalAlignment=\"Left\" Height=\"38.8252\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"47\">\n        <Path Data=\"F1M0,24.5L41,24.5 41,0 0,0z\" Fill=\"White\" Height=\"24.5\" Canvas.Left=\"0\" Canvas.Top=\"7.5\" Width=\"41\"/>\n        <Canvas Clip=\"M0,0L47.063,0 47.063,38.825 0,38.825z\" Height=\"38.825\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"47.063\">\n            <Path Data=\"F1M14,7C14,10.865 10.866,14 7,14 3.134,14 0,10.865 0,7 0,3.135 3.134,0 7,0 10.866,0 14,3.135 14,7\" Fill=\"Gray\" Height=\"14\" Canvas.Left=\"13.5\" Canvas.Top=\"11.25\" Width=\"14\"/>\n            <Path Data=\"M20.499,27.666C15.253,27.666 11,23.413 11,18.166 11,12.919 15.253,8.666 20.499,8.666 25.747,8.666 29.998,12.919 29.998,18.166 29.998,23.413 25.747,27.666 20.499,27.666 M7.765,13.084L4.026,13.084 4.026,10.143 7.765,10.143z M35.2,26.9L35.2,20.9 41,20.9 41,5.828 30.232,5.828 26.577,0 14.508,0 10.599,5.828 0,5.828 0,32 9.267,32 29.1,32 29.1,26.9z\" Fill=\"Gray\" Height=\"32\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"41\"/>\n            <Path Data=\"M6.037,6.038L0,6.038 0,10.566 6.037,10.566 6.037,17.359 11.32,17.359 11.32,10.566 17.358,10.566 17.358,6.038 11.32,6.038 11.32,0 6.037,0z\" Fill=\"#FF6EA391\" Height=\"17.359\" Canvas.Left=\"29.704\" Canvas.Top=\"21.466\" Width=\"17.358\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Ok\" HorizontalAlignment=\"Center\" Height=\"37\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"43\">\n        <Path Data=\"F1M37.24,0L16.124,26.7 5.375,14.494 0,18.309 16.508,37 43,3.815z\" Fill=\"#FF7E7E7E\" Height=\"37\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"43\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Cancel\" HorizontalAlignment=\"Center\" Height=\"37\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"35.9\">\n        <Path Data=\"F1M30.756,0.001L17.887,13.21 5.415,0.029 0,4.308 12.756,18.34 0.057,32.118 4.762,37.05 17.887,24.066 30.898,36.936 35.887,32.173 22.989,18.34 35.801,4.338z\" \n              Fill=\"#FFD76243\" Height=\"37\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"35.9\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.No\" HorizontalAlignment=\"Center\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"32\">\n        <Canvas Height=\"27.972\" Canvas.Left=\"2.058\" Canvas.Top=\"1.964\" Width=\"27.969\">\n            <Path Data=\"F1M13.984,27.972C6.273,27.972 0,21.698 0,13.984 0,6.274 6.273,0 13.984,0 21.696,0 27.969,6.274 27.969,13.984 27.969,21.698 21.696,27.972 13.984,27.972\" Fill=\"#FFF6F6F6\" Height=\"27.972\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"27.969\"/>\n        </Canvas>\n        <Canvas Height=\"23.875\" Canvas.Left=\"4.057\" Canvas.Top=\"4.061\" Width=\"23.873\">\n            <Path Data=\"F1M18.972,16.718L7.464,4.723C8.768,3.914 10.293,3.423 11.936,3.423 16.629,3.423 20.45,7.243 20.45,11.935 20.45,13.706 19.9,15.355 18.972,16.718 M3.423,11.935C3.423,10.125,4.002,8.449,4.97,7.069L16.505,19.096C15.183,19.944 13.62,20.45 11.936,20.45 7.244,20.45 3.423,16.627 3.423,11.935 M11.936,0C5.346,0 0,5.345 0,11.935 0,18.528 5.346,23.875 11.936,23.875 18.529,23.875 23.873,18.528 23.873,11.935 23.873,5.345 18.529,0 11.936,0\" Fill=\"#FFE51300\" Height=\"23.875\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"23.873\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Success\" HorizontalAlignment=\"Left\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"32\">\n        <Canvas  Height=\"32\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"32\">\n            <Path Data=\"F1M0,16C0,7.164 7.164,0 16,0 24.836,0 32,7.164 32,16 32,24.836 24.836,32 16,32 7.164,32 0,24.836 0,16\" Fill=\"#FFF6F6F6\" Height=\"32\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"32\"/>\n        </Canvas>\n        <Canvas Height=\"28\" Canvas.Left=\"2\" Canvas.Top=\"2\" Width=\"28\">\n            <Path Data=\"F1M13,23L9,23 5,15 9,15 11,19 17.5,6 21.5,6z M14,0C6.269,0 0,6.269 0,14 0,21.731 6.269,28 14,28 21.731,28 28,21.731 28,14 28,6.269 21.731,0 14,0\" Fill=\"#FF329932\" Height=\"28\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"28\"/>\n        </Canvas>\n        <Canvas Height=\"17\" Canvas.Left=\"7\" Canvas.Top=\"8\" Width=\"16.5\">\n            <Path Data=\"F1M12.5,0L6,13 4,9 0,9 4,17 8,17 16.5,0z\" Fill=\"White\" Height=\"17\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16.5\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Error\" HorizontalAlignment=\"Left\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"32\">\n        <Canvas  Height=\"32\" Canvas.Left=\"2\" Canvas.Top=\"0\" Width=\"27.999\">\n            <Path Data=\"F1M13.443,31.84C1.299,28.343,-0.576,14.686,0.129,7.953L0.242,6.875 14,0 27.757,6.875 27.87,7.953C28.575,14.686,26.7,28.343,14.557,31.84L14,32z\" Fill=\"#FFF6F6F6\" Height=\"32\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"27.999\"/>\n        </Canvas>\n        <Canvas  Height=\"28\" Canvas.Left=\"3.901\" Canvas.Top=\"2\" Width=\"24.198\">\n            <Path Data=\"F1M19.513,18.586L16.685,21.414 12.098,16.828 7.513,21.414 4.684,18.586 9.27,14 4.684,9.414 7.513,6.586 12.098,11.172 16.685,6.586 19.513,9.414 14.927,14z M24.099,6L12.099,0 0.099,6C0.099,6 -1.901,24 12.099,28 26.099,24 24.099,6 24.099,6\" Fill=\"#FFE51300\" Height=\"28\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"24.198\"/>\n        </Canvas>\n        <Canvas  Height=\"14.828\" Canvas.Left=\"8.585\" Canvas.Top=\"8.586\" Width=\"14.829\">\n            <Path Data=\"F1M14.829,2.828L12.001,0 7.414,4.586 2.829,0 0,2.828 4.586,7.414 0,12 2.829,14.828 7.414,10.242 12.001,14.828 14.829,12 10.243,7.414z\" Fill=\"White\" Height=\"14.828\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14.829\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Back\" HorizontalAlignment=\"Center\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"32\">\n        <Canvas  Height=\"22.578\" Canvas.Left=\"3.087\" Canvas.Top=\"4.317\" Width=\"25.89\">\n            <Path Data=\"F1M2.272,11.974L11.45,21.412C11.71,21.677 11.71,22.113 11.45,22.378 11.191,22.644 10.767,22.644 10.507,22.378L0.192,11.775C0.186,11.767 0.18,11.763 0.176,11.755 0.164,11.74 0.148,11.724 0.138,11.708 0.13,11.697 0.119,11.683 0.113,11.674 0.101,11.657 0.094,11.641 0.084,11.625 0.075,11.611 0.07,11.597 0.059,11.582 0.057,11.573 0.053,11.562 0.048,11.553 0.045,11.546 0.045,11.539 0.043,11.534 0.037,11.519 0.031,11.504 0.028,11.488 0.022,11.471 0.018,11.455 0.013,11.437 0.01,11.422 0.007,11.408 0.007,11.391 0.004,11.374 0.001,11.357 0,11.341L0,11.289 0,11.24C0.001,11.224 0.004,11.205 0.007,11.188 0.007,11.175 0.01,11.158 0.013,11.141 0.018,11.124 0.022,11.106 0.028,11.09 0.031,11.075 0.037,11.059 0.04,11.047 0.045,11.04 0.045,11.033 0.048,11.028 0.053,11.016 0.057,11.006 0.064,10.996 0.07,10.982 0.075,10.97 0.084,10.955 0.094,10.937 0.101,10.922 0.113,10.907 0.119,10.894 0.13,10.882 0.138,10.871 0.148,10.855 0.159,10.84 0.173,10.828 0.179,10.82 0.183,10.813 0.192,10.805L10.507,0.2C10.638,0.066 10.809,0 10.98,0 11.151,0 11.321,0.066 11.45,0.2 11.71,0.467 11.71,0.902 11.45,1.169L2.272,10.605 25.222,10.601C25.59,10.601 25.89,10.908 25.89,11.286 25.89,11.663 25.59,11.97 25.222,11.97\" Fill=\"#FF231F20\" Height=\"22.578\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"25.89\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Maximize\" HorizontalAlignment=\"Left\" Height=\"15\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"15\">\n        <Path Data=\"F1M0,15L15,15 15,0 0,0z M0.997,1.002L14.004,1.002 14.004,13.998 0.997,13.998z\" Fill=\"#FF161717\" Height=\"15\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"15\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Minimize\" HorizontalAlignment=\"Center\" Height=\"15\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"15\">\n        <Canvas Height=\"0.976\" Canvas.Left=\"0\" Canvas.Top=\"6.611\" Width=\"15\">\n            <Path Data=\"F1M0,0.004L0,0.976 15,0.973 15,0z\" Fill=\"#FF040707\" Height=\"0.976\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"15\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Restore\" HorizontalAlignment=\"Center\" Height=\"15\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"15\">\n        <Path Data=\"F1M2.5,0L2.5,2.499 0,2.499 0,15 12.499,15 12.499,12.499 15,12.499 15,0z M3.75,1.25L13.747,1.25 13.747,11.248 12.499,11.248 12.499,2.499 3.75,2.499z M1.249,3.749L11.248,3.749 11.248,13.747 1.249,13.747z\" Fill=\"#FF040707\" Height=\"15\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"15\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Close\" HorizontalAlignment=\"Center\" Height=\"15\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"15\">\n        <Path Data=\"M0.354,0.354L14.707,14.707\" Height=\"15\" Canvas.Left=\"0\" Stroke=\"#FF231F20\" Canvas.Top=\"0\" Width=\"15\"/>\n        <Path Data=\"M14.707,0.354L0.354,14.707\" Height=\"15\" Canvas.Left=\"0\" Stroke=\"#FF231F20\" Canvas.Top=\"0\" Width=\"15\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Options\" HorizontalAlignment=\"Center\" Height=\"48\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M9.629,4.506C7.165,4.506,6.578,3.086,6.578,3.086L2.967,6.007C2.967,6.007,7.78,11.363,0,12.014L0,17.256C7.865,17.908,2.967,22.499,2.967,22.499L5.934,26.239C5.934,26.239,11.225,21.366,11.868,29.242L17.046,29.242C17.69,21.28,22.224,26.239,22.224,26.239L25.919,23.235C25.919,23.235,21.106,17.88,28.888,17.229L28.888,11.986C21.023,11.335,25.919,6.744,25.919,6.744L22.953,3.004C22.953,3.004,17.662,7.877,17.019,0L11.84,0C11.701,1.729,11.169,4.506,9.629,4.506 M9.629,14.989C9.629,7.424 19.258,8.671 19.258,14.253 19.258,21.819 9.629,20.572 9.629,14.989\" Fill=\"#FF7F7F7F\" Height=\"29.242\" Canvas.Left=\"0\" Canvas.Top=\"18.758\" Width=\"28.888\"/>\n        <Path Data=\"F1M7.417,3.002C5.765,3.002,5.794,2.407,4.449,1.501L1.65,4.675C1.65,4.675 3.662,6.432 3.13,7.906 2.786,8.859 2.042,8.812 0,8.982L0,13.487C4.562,13.885,3.219,15.357,1.483,17.992L4.618,20.825C4.618,20.825 6.803,18.744 8.145,19.492 9.364,20.172 8.873,22.498 8.873,22.498L13.323,22.498C13.716,17.879,15.171,19.238,17.774,20.995L20.573,17.822C19.313,15.64 18.558,16.355 19.255,14.563 19.754,13.279 20.181,13.686 22.224,13.516L22.224,9.01C17.661,8.613,19.005,7.14,20.741,4.505L17.605,1.672C17.605,1.672 15.396,3.625 14.177,2.625 13.333,2.219 13.52,2.068 13.352,0L8.901,0C8.787,1.444,8.928,3.002,7.417,3.002 M7.411,11.422C7.437,6.659 14.832,5.862 14.802,11.766 14.801,15.903 7.389,15.559 7.411,11.422\" Fill=\"#FF7F7F7F\" Height=\"22.498\" Canvas.Left=\"17.776\" Canvas.Top=\"0\" Width=\"22.224\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.File.New\" HorizontalAlignment=\"Center\" Height=\"45\" UseLayoutRounding=\"False\" SnapsToDevicePixels=\"True\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M0.031,0.002L0,41.597 30.245,41.597 30.245,9.949 20.102,0z\" Fill=\"White\" Height=\"41.5\" Canvas.Left=\"9.145\" Canvas.Top=\"3.4\" Width=\"30.5\"/>\n        <Path Data=\"F1M6.203,0.738L20.583,0.738 20.583,11.249 31.161,11.249 31.161,41.305 0.915,41.305 0.915,11.109 0,11.109 0,41.932 31.762,41.932 31.766,10.331 21.334,0.011 6.203,0z M21.013,0.739L30.959,10.601 21.013,10.601z\" Fill=\"Gray\" Height=\"41.932\" Canvas.Left=\"8.234\" Canvas.Top=\"3.068\" Width=\"31.766\"/>\n        <Path Data=\"F1M6.777,0L6.032,0.74 6.032,3.75 5.29,3.75 4.548,3.011 3.803,2.273 3.06,1.535 0.801,0.795 1.544,3.04 2.289,3.779 3.03,4.516 3.774,5.256 3.774,5.994 0.743,5.994 0,6.733 0,7.472 0.743,8.21 3.774,8.21 3.774,8.949 1.545,11.165 1.545,12.67 3.06,12.67 5.29,10.454 6.032,10.454 6.032,13.467 6.776,14.204 7.519,14.204 8.262,13.467 8.262,10.454 9.005,10.454 9.748,11.193 10.49,11.93 11.234,12.669 12.749,12.669 12.749,11.165 12.005,10.426 11.263,9.688 10.52,8.951 10.52,8.21 13.55,8.21 14.294,7.472 14.294,6.733 13.551,5.994 10.522,5.994 10.522,5.256 11.264,4.516 12.008,3.779 12.751,3.041 13.493,0.796 11.236,1.535 9.007,3.75 8.263,3.75 8.263,0.74 7.52,0z M5.205,8.154L5.205,5.909 5.947,5.171 8.206,5.171 8.95,5.909 8.95,8.154 8.207,8.893 5.948,8.893z\" Fill=\"#FFECC77D\" Height=\"14.204\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14.294\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.File\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"31.5\">\n        <Path Data=\"F1M0,0L0,40.505 30.005,40.505 30.005,10.45 19.55,0z\" Fill=\"White\" Height=\"40.505\" Canvas.Left=\"0.75\" Canvas.Top=\"0.751\" Width=\"30.005\"/>\n        <Path Data=\"F1M0,0L0,42.006 31.505,42.006 31.505,11.251 20.253,0z M20.253,0.751L30.754,11.252 20.253,11.252z M0.75,0.751L19.503,0.751 19.503,12.002 30.755,12.002 30.755,41.256 0.75,41.256z\" Fill=\"#FF7C7C7D\" Height=\"42.006\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"31.505\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Synchronize\" HorizontalAlignment=\"Center\" Height=\"12\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"12\">\n        <Path Data=\"F1M1.637,6.5C1.637,4.898,2.612,3.348,4,2.762L3.998,3 4,3 4,6 6,4 6,0 2,0 0,2 2.348,2C0.931,2.996 0,4.64 0,6.5 0,9.363 2.201,11.746 5,12L5,10.331C3.102,10.085,1.637,8.465,1.637,6.5\" Fill=\"#FF3A78AF\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"6\"/>\n        <Path Data=\"F1M4.363,5.5C4.363,7.102,3.388,8.652,2,9.238L2.002,9 2,9 2,6 0,8 0,12 4,12 6,10 3.652,10C5.069,9.004 6,7.359 6,5.5 6,2.637 3.799,0.254 1,0L1,1.669C2.898,1.915,4.363,3.535,4.363,5.5\" Fill=\"#FF3A78AF\" Height=\"12\" Canvas.Left=\"6\" Canvas.Top=\"0\" Width=\"6\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Colors\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,19.643L12.778,19.643 12.778,0 0,0z\" Fill=\"#FF4D82B8\" Height=\"19.643\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"12.778\"/>\n        <Path Data=\"F1M0,19.643L12.774,19.643 12.774,0 0,0z\" Fill=\"#FFE78E46\" Height=\"19.643\" Canvas.Left=\"13.613\" Canvas.Top=\"0\" Width=\"12.774\"/>\n        <Path Data=\"F1M0,19.643L12.773,19.643 12.773,0 0,0z\" Fill=\"#FFEAC282\" Height=\"19.643\" Canvas.Left=\"27.227\" Canvas.Top=\"0\" Width=\"12.773\"/>\n        <Path Data=\"F1M0,19.643L12.778,19.643 12.778,0 0,0z\" Fill=\"#FFD86344\" Height=\"19.643\" Canvas.Left=\"0\" Canvas.Top=\"20.356\" Width=\"12.778\"/>\n        <Path Data=\"F1M0,19.643L12.774,19.643 12.774,0 0,0z\" Fill=\"#FF60C964\" Height=\"19.643\" Canvas.Left=\"13.613\" Canvas.Top=\"20.356\" Width=\"12.774\"/>\n        <Path Data=\"F1M0,19.643L12.773,19.643 12.773,0 0,0z\" Fill=\"#FFECEC60\" Height=\"19.643\" Canvas.Left=\"27.227\" Canvas.Top=\"20.356\" Width=\"12.773\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.FramesFromVideo\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M0,0L0,16.481 24.74,16.481 24.74,5.266 11.987,5.266 11.987,0z\" Fill=\"#FFFEFEFE\" Height=\"17.555\" Canvas.Left=\"0.152\" Canvas.Top=\"21.193\" Width=\"25.696\" Stretch=\"Fill\"/>\n        <Path Data=\"M13.745,0.224L0.301,18.326\" Height=\"18.549\" Canvas.Left=\"-0.101\" StrokeStartLineCap=\"Square\" StrokeEndLineCap=\"Square\" StrokeDashCap=\"Square\" Stroke=\"#FF676767\" StrokeThickness=\"0.75\" StrokeDashArray=\"4 2.26666662428116\" Canvas.Top=\"0.276\" Width=\"14.046\"/>\n        <Path Data=\"M16.165,0.266L0.265,16.165\" Height=\"15.952\" Canvas.Left=\"26.084\" StrokeStartLineCap=\"Square\" StrokeEndLineCap=\"Square\" StrokeDashCap=\"Square\" Stroke=\"#FF676767\" StrokeThickness=\"0.75\" StrokeDashArray=\"4 2.26666662428116\" Canvas.Top=\"26.024\" Width=\"15.415\" Stretch=\"Fill\"/>\n        <Path Data=\"F1M0,24.727L27.004,24.727 27.004,0 0,0z\" Fill=\"#FFFEFEFE\" Height=\"25.982\" Canvas.Left=\"13.14\" Canvas.Top=\"-0.118\" Width=\"27.72\" Stretch=\"Fill\"/>\n        <Path Data=\"F1M0,4.399L0,8.136 25.479,8.136 25.479,0.632C25.479,0.632 25.395,0.341 25.266,0.212 25.135,0.082 24.61,0.009 24.61,0.009 24.61,0.009 23.045,-0.039 22.5,0.087 22.092,0.182 21.168,0.64 20.813,0.82 20.295,1.083 19.53,1.528 19.047,1.882 18.573,2.231 16.971,2.226 16.331,2.241 15.69,2.257 14.571,2.433 14.299,2.943 13.885,3.723 11.836,4.015 11.002,3.13 10.252,2.335 8.145,2.163 7.346,2.054 6.793,1.978 5.59,1.836 5.144,2.226 4.769,2.554 4.223,3.459 3.863,3.693 3.079,4.203 1.801,3.611 1.004,3.865 0.751,3.945 0,4.399 0,4.399\" Fill=\"#FF76A797\" Height=\"8.136\" Canvas.Left=\"15.021\" Canvas.Top=\"11.348\" Width=\"25.479\"/>\n        <Path Data=\"F1M0,4.503L25.477,4.503 25.477,0 0,0z\" Fill=\"#FF4D82B8\" Height=\"4.503\" Canvas.Left=\"15.021\" Canvas.Top=\"20.223\" Width=\"25.477\"/>\n        <Path Data=\"F1M7.315,4.298C7.477,4.4 7.924,4.367 8.096,4.282 8.294,4.184 8.672,3.942 8.846,3.861 9.643,3.486 11.469,3.127 12.268,3.924 12.403,4.059 12.633,4.357 12.752,4.504 12.94,4.735 13.264,4.956 13.501,5.064 13.926,5.256 14.934,5.334 15.329,4.939 15.46,4.809 15.516,4.58 16.297,4.283 17.606,3.786 20.274,3.762 21.374,4.783 21.508,4.907 22.032,5.302 22.17,5.423 22.561,5.767 23.239,6.006 23.239,6.006 23.239,6.006 24.247,6.531 24.655,6.626 24.833,6.668 25.477,6.743 25.477,6.743L25.477,0 0,0 0,3.002C0,3.002 0.525,2.892 0.692,2.814 0.89,2.722 1.184,2.476 1.348,2.377 2.364,1.768 4.229,1.932 5.472,2.346 6.128,2.565 6.741,3.935 7.315,4.298\" Fill=\"#FFB8CDE3\" Height=\"7.4\" Canvas.Left=\"15\" Canvas.Top=\"1.472\" Width=\"25.477\" Stretch=\"Fill\"/>\n        <Path Data=\"F1M0.737,0L0,0 0,23.987 26.242,23.987 26.242,9.005 25.506,9.005 25.477,8.977 25.477,20.22 0.737,20.22 0.737,3.737 12.724,3.737 12.724,0 1.474,0z M0.737,0.735L2.976,0.735 2.976,2.972 0.737,2.972z M5.243,0.735L7.481,0.735 7.481,2.972 5.243,2.972z M9.749,0.735L11.988,0.735 11.988,2.972 9.749,2.972z M0.737,20.956L2.976,20.956 2.976,23.193 0.737,23.193z M5.243,20.956L7.481,20.956 7.481,23.193 5.243,23.193z M9.749,20.956L11.988,20.956 11.988,23.193 9.749,23.193z M14.255,20.956L16.494,20.956 16.494,23.193 14.255,23.193z M18.761,20.956L21,20.956 21,23.193 18.761,23.193z M23.268,20.956L25.506,20.956 25.506,23.193 23.268,23.193z\" Fill=\"Gray\" Height=\"23.987\" Canvas.Left=\"0\" Canvas.Top=\"18.014\" Width=\"26.242\"/>\n        <Path Data=\"F1M28.51,0L0,0 0,26.226 28.51,26.226z M0.765,0.737L27.774,0.737 27.774,25.461 0.765,25.461z\" Fill=\"Gray\" Height=\"26.226\" Canvas.Left=\"13.49\" Canvas.Top=\"0\" Width=\"28.51\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Gif\" HorizontalAlignment=\"Center\" Height=\"34.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1 M0,32.993 L40.507,32.993 40.507,0 0,0z\" Fill=\"#FFFEFEFE\" Height=\"34.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42\" Stretch=\"Fill\"/>\n        <Canvas Height=\"34.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42\">\n            <Path Data=\"F1M2.33,0.275C1.806,0.058,0,0,0,0L0,16.498 39.005,16.498 39.005,0 37.503,0 37.503,6.746 24.726,6.746 26.117,9.75 27.627,12.755 4.477,12.755 9.767,2.238C9.767,2.238 7.142,2.384 5.8,1.947 4.787,1.619 3.06,0.578 2.33,0.275\" Fill=\"#FFEAC282\" Height=\"17.45\" Canvas.Left=\"1\" Canvas.Top=\"16\" Width=\"40.167\" Stretch=\"Fill\"/>\n            <Path Data=\"F1M0,11.254L11.253,11.254 11.253,0 0,0z\" Fill=\"#FF4D82B8\" Height=\"11.562\" Canvas.Left=\"27.22\" Canvas.Top=\"10.219\" Width=\"11.56\" Stretch=\"Fill\"/>\n            <Path Data=\"F1M0,34.5L42.01,34.5 42.01,0 0,0z M0.736,0.739L41.243,0.739 41.243,33.735 0.736,33.735z\" Fill=\"#FFB3B3B3\" Height=\"34.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42\"/>\n            <Path Data=\"F1M2.482,5.244L3.247,5.244 3.247,0 0,0z\" Fill=\"#FFEAC282\" Height=\"5.244\" Canvas.Left=\"23\" Canvas.Top=\"16.5\" Width=\"3.247\"/>\n            <Path Data=\"F1M10.488,0L0,20.977 20.238,20.977z\" Fill=\"#FF76A797\" Height=\"20.977\" Canvas.Left=\"7.188\" Canvas.Top=\"7.012\" Width=\"20.624\" Stretch=\"Fill\"/>\n            <Path Data=\"F1M12.285,5.878C11.597,7.331 10.285,10.097 9.94,10.665 8.963,12.28 8.535,13.001 6.5,13.001 2.91,13.001 0,10.091 0,6.501 0,2.91 2.91,0 6.5,0 10.092,0 13.82,2.632 12.285,5.878\" Fill=\"#FFD86344\" Height=\"13.001\" Canvas.Left=\"3.18\" Canvas.Top=\"4\" Width=\"12.64\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Save.Project\" HorizontalAlignment=\"Left\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"34\">\n        <Path Data=\"F1M0,0L0,25 7.403,25 7.403,24.373 22.184,24.373 22.184,25 29.558,25 29.558,9.331 19.791,0z\" Fill=\"White\" Height=\"26.303\" Canvas.Left=\"2\" Width=\"30.326\" Stretch=\"Fill\" Canvas.Top=\"0.211\"/>\n        <Path Data=\"F1M22.184,0L22.184,1.41 7.403,1.41 7.403,0 0,0 0,4.279 29.558,4.279 29.558,0z\" Fill=\"White\" Height=\"4.718\" Canvas.Left=\"2\" Canvas.Top=\"35.141\" Width=\"30.874\" Stretch=\"Fill\"/>\n        <Path Data=\"F1M0,0L0,26.511 0.587,26.511 0.587,0.568 19.808,0.568 19.808,10.588 30.145,10.588 30.145,26.349 30.871,26.349 30.871,10.031 20.366,0z M20.366,0.568L30.145,10.031 20.366,10.031z\" Fill=\"Gray\" Height=\"26.511\" Canvas.Left=\"1.62\" Canvas.Top=\"0\" Width=\"30.871\"/>\n        <Path Data=\"F1M0,7.176L9.61,7.176 9.61,0 0,0z\" Fill=\"Gray\" Height=\"7.176\" Canvas.Left=\"0\" Canvas.Top=\"27.082\" Width=\"9.61\"/>\n        <Path Data=\"F1M0,7.176L9.609,7.176 9.609,0 0,0z\" Fill=\"Gray\" Height=\"7.176\" Canvas.Left=\"24.391\" Canvas.Top=\"27.082\" Width=\"9.609\"/>\n        <Path Data=\"F1M0,10.018L13.297,10.018 13.297,0 0,0z M1.482,1.409L11.816,1.409 11.816,8.585 1.482,8.585z\" Fill=\"Gray\" Height=\"10.018\" Canvas.Left=\"10.5\" Canvas.Top=\"25.673\" Width=\"13.297\"/>\n        <Path Data=\"F1M0,5.74L8.886,5.74 8.886,0 0,0z\" Fill=\"Gray\" Height=\"5.74\" Canvas.Left=\"12\" Canvas.Top=\"27.813\" Width=\"8.886\"/>\n        <Path Data=\"F1M30.285,0L30.285,4.279 0.727,4.279 0.727,0 0,0 0,5.012 31.039,5.012 31.039,0z\" Fill=\"Gray\" Height=\"5.012\" Canvas.Left=\"2.206\" Canvas.Top=\"35\" Width=\"30.655\" Stretch=\"Fill\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Remove\" HorizontalAlignment=\"Left\" Height=\"39\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"44\">\n        <Path Data=\"F1M16.622,16.545C15.934,17.589 -2.088,31.137 0.201,36.54 6.066,42.395 7.981,35.438 11.558,31.675 15.964,27.066 17.279,24.661 22.744,20.984 30.239,26.104 37.706,38.887 43.914,39 41.683,34.646 39.65,31.167 36.962,27.179 34.302,23.218 30.983,19.655 28.666,15.808 32.214,11.566 41.598,7.549 44,4.636 39.909,2.007 30.755,8.482 24.775,11.877 20.169,9.077 10.671,-2.321 4.177,0.423 -1.945,2.997 3.633,7.635 6.58,9.304 9.441,10.915 15.019,14.14 16.622,16.545\" Fill=\"#FF717171\" Height=\"39\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"44\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Editor\" HorizontalAlignment=\"Center\" Height=\"36.3647\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,28.363L38.546,28.363 38.546,0 0,0z M5.819,2.909L32.728,2.909 32.728,25.454 5.819,25.454z\" Fill=\"White\" Height=\"28.363\" Canvas.Left=\"0.727\" Canvas.Top=\"7.274\" Width=\"38.546\"/>\n        <Path Data=\"M0,21.091L25.455,21.091 25.455,0 0,0z\" Fill=\"White\" Height=\"21.091\" Canvas.Left=\"7.273\" Canvas.Top=\"10.91\" Width=\"25.455\"/>\n        <Canvas Clip=\"M0,0L40,0 40,36.365 0,36.365z\" Height=\"36.365\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\">\n            <Path Data=\"M8.728,0.148C8.441,-0.076 7.596,-0.02 7.273,0.148 5.024,1.32 0,7.42 0,7.42L0,11.058 18.91,11.058C18.91,11.058,11.447,2.259,8.728,0.148\" Fill=\"#FFBED0E6\" Height=\"11.058\" Canvas.Left=\"8.727\" Canvas.Top=\"19.489\" Width=\"18.91\"/>\n            <Path Data=\"M7.492,10.295L9.675,10.295 9.675,6.658C9.675,6.658 5.266,0.998 3.129,0.112 2.793,-0.027 2.001,-0.047 1.675,0.112 1.213,0.339 -0.305,1.589 0.055,1.958 2.72,4.685 7.492,10.295 7.492,10.295\" Fill=\"#FFBED0E6\" Height=\"10.295\" Canvas.Left=\"21.599\" Canvas.Top=\"20.252\" Width=\"9.675\"/>\n            <Path Data=\"M0.951,4.573C1.622,4.851 3.19,4.856 3.86,4.573 4.097,4.473 4.476,4.078 4.587,3.846 4.901,3.19 4.828,1.623 4.587,0.936 4.502,0.694 4.092,0.321 3.86,0.209 3.204,-0.105 1.637,-0.033 0.951,0.209 0.708,0.295 0.336,0.705 0.224,0.936 -0.096,1.59 -0.054,3.174 0.224,3.846 0.322,4.084 0.713,4.474 0.951,4.573\" Fill=\"#FFF9EAD3\" Height=\"4.784\" Canvas.Left=\"24.504\" Canvas.Top=\"12.882\" Width=\"4.797\"/>\n            <Path Data=\"M0,36.365L40,36.365 40,0 0,0z M0.727,7.273L39.273,7.273 39.273,35.636 0.727,35.636z\" Fill=\"#FF7C7C7D\" Height=\"36.365\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n            <Path Data=\"M0,22.545L26.91,22.545 26.91,0 0,0z M0.728,0.727L26.183,0.727 26.183,21.818 0.728,21.818z\" Fill=\"#FFCFD1D0\" Height=\"22.545\" Canvas.Left=\"6.545\" Canvas.Top=\"10.183\" Width=\"26.91\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.WidthHeight\" HorizontalAlignment=\"Left\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"42\">\n        <Path Data=\"F1 M 0,14 L1,14 1,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"14\" Canvas.Left=\"16.5\" Canvas.Top=\"0\" Width=\"1\"/>\n        <Path Data=\"F1 M 0,14 L1,14 1,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"14\" Canvas.Left=\"41.25\" Canvas.Top=\"0\" Width=\"1\"/>\n        <Path Data=\"F1 M 0,1 L14,1 14,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1\" Canvas.Left=\"0\" Canvas.Top=\"16.6\" Width=\"14\"/>\n        <Path Data=\"F1 M 0,1 L14,1 14,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1\" Canvas.Left=\"0\" Canvas.Top=\"41.2\" Width=\"14\"/>\n\n        <Path Data=\"F1 M 0,0 0,22 22,22 22,0z\" Fill=\"White\" Height=\"24.955\" Canvas.Left=\"16\" Canvas.Top=\"17\" Width=\"26\" Stretch=\"Fill\"/>\n\n        <Path Data=\"M4,0 L0,0 0,4 1,4 1,1 4,1z\" Fill=\"#FF7C7C7D\" Height=\"4\" Canvas.Left=\"16.5\" Canvas.Top=\"16.501\" Width=\"4\"/>\n        <Path Data=\"M4,4 L4,0 0,0 0,1 3,1 3,4z\" Fill=\"#FF7C7C7D\" Height=\"4\" Canvas.Left=\"38.075\" Canvas.Top=\"17\" Width=\"4\"/>\n\n        <Path Data=\"F1 M 0,0 L0,4 4,4 4,3 1,3 1,0z\" Fill=\"#FF7C7C7D\" Height=\"4\" Canvas.Left=\"16.06\" Canvas.Top=\"37.657\" Width=\"4\"/>\n        <Path Data=\"F1 M 3,0 L3,3 0,3 0,4 4,4 4,0z\" Fill=\"#FF7C7C7D\" Height=\"4\" Canvas.Left=\"38\" Canvas.Top=\"37.597\" Width=\"4\"/>\n\n        <Path Data=\"F1M4.5,0L4.5,9.75 0.751,6.75 0,6.75 0,12 5.999,18 6.75,18 12.749,12 12.749,6.75 12.001,6.75 8.25,9.75 8.25,0z\" Fill=\"#FF3C7CB6\" Height=\"18\" Canvas.Left=\"0.75\" Canvas.Top=\"21.001\" Width=\"12.749\"/>\n        <Path Data=\"M12,0L6.75,0 6.75,0.75 10.5,4.5 0,4.5 0,8.25 10.5,8.25 6.75,12 6.75,12.75 12,12.75 18,6.75 18,6z\" Fill=\"#FF3C7CB6\" Height=\"12.75\" Canvas.Left=\"21\" Canvas.Top=\"0.751\" Width=\"18\"/>\n\n        <Path Data=\"F1 M 0,1 L6,1 6,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1\" Canvas.Left=\"21.701\" Canvas.Top=\"17\" Width=\"6\"/>\n        <Path Data=\"F1 M 0,1 L6,1 6,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1\" Canvas.Left=\"30.373\" Canvas.Top=\"17\" Width=\"6\"/>\n        <Path Data=\"F1 M 0,6 L1,6 1,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"6\" Canvas.Left=\"16\" Canvas.Top=\"22.6\" Width=\"1\"/>\n        <Path Data=\"F1 M 0,6 L1,6 1,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"6\" Canvas.Left=\"16\" Canvas.Top=\"30.224\" Width=\"1\"/>\n        <Path Data=\"F1 M 0,1 L6,1 6,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1\" Canvas.Left=\"22\" Canvas.Top=\"41\" Width=\"6\"/>\n        <Path Data=\"F1 M 0,1 L6,1 6,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1\" Canvas.Left=\"30\" Canvas.Top=\"41\" Width=\"6\"/>\n        <Path Data=\"F1 M 0,6 L1,6 1,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"6\" Canvas.Left=\"41\" Canvas.Top=\"22.552\" Width=\"1\"/>\n        <Path Data=\"F1 M 0,6 L1,6 1,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"6\" Canvas.Left=\"41\" Canvas.Top=\"30.224\" Width=\"1\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Folder\" HorizontalAlignment=\"Center\" Height=\"35\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M5.627,0L0,4.412 0,5.139 18.718,5.139 18.713,0.873 17.937,0z\" Fill=\"White\" Height=\"5.139\" Canvas.Left=\"20.555\" Canvas.Top=\"0.678\" Width=\"18.718\"/>\n        <Path Clip=\"M0,0L40,0 40,34.909 0,34.909z\" Data=\"M18.712,5.818C18.712,5.818 6.931,5.769 1.454,5.818 0.94,5.823 0,7.273 0,7.273L0,34.909 40,34.909 40,1.455 38.545,0 26.181,0z M26.181,0.679L38.492,0.679 39.273,1.551 39.273,5.818 20.555,5.818 20.555,5.091z\" Fill=\"#FFEDC678\" Height=\"34.909\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Application\" HorizontalAlignment=\"Center\" Height=\"37.2\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"41\">\n        <Path Data=\"F1M0,29.073L39.51,29.073 39.51,0 0,0z\" Fill=\"White\" Height=\"29.073\" Canvas.Left=\"0.745\" Canvas.Top=\"7.455\" Width=\"39.51\"/>\n        <Path Data=\"F1M0,7.455L41,7.455 41,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"7.455\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"41\"/>\n        <Path Data=\"F1M40.255,0L40.255,29.073 0.745,29.073 0.745,0 0,0 0,29.818 41,29.818 41,0z\" Fill=\"#FF7C7C7D\" Height=\"29.818\" Canvas.Left=\"0\" Canvas.Top=\"7.455\" Width=\"41\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Play\" HorizontalAlignment=\"Center\" Height=\"37.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M0,37.5L24,19.499 24,18 0,0z\" Fill=\"#FF6EA493\" Height=\"37.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"24\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Pause\" HorizontalAlignment=\"Center\" Height=\"35.7144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"F1M0,35.715L12.857,35.715 12.857,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"35.715\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"12.857\"/>\n        <Path Data=\"F1M0,35.715L12.857,35.715 12.857,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"35.715\" Canvas.Left=\"17.142\" Canvas.Top=\"0\" Width=\"12.857\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Forward\" HorizontalAlignment=\"Center\" Height=\"16.5742\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M9.678,0L14.966,5.982 0,5.982 0,10.6 14.966,10.6 9.524,16.574 15.633,16.574 24,8.287 15.811,0z\" Fill=\"#FF3C7CB6\" Height=\"16.574\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"24\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Backward\" HorizontalAlignment=\"Center\" Height=\"16.5742\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M8.366,0L0,8.287 8.188,16.574 14.322,16.574 9.033,10.592 24,10.592 24,5.974 9.033,5.974 14.476,0z\" Fill=\"#FF3C7CB6\" Height=\"16.574\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"24\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Translate\" HorizontalAlignment=\"Left\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"37.5024\">\n        <Path Data=\"M7.155,4.578L1.322,4.685 1.322,7.314 7.896,7.314 7.843,11.091C4.221,13.839,-0.214,15.491,0.008,21.118L0.076,23.582C1.773,27.397 7.732,24.651 9.128,24.587 11.033,24.5 8.976,25.505 12.065,23.972 13.005,20.269 10.58,24.278 14.598,19.276 15.889,17.67 16.684,15.624 17.924,14.056 19.735,14.232 19.647,14.343 21.267,15.633 23.95,23.635 17.836,23.168 12.553,25.23L13.865,27.587C22.186,28.253 29.801,19.613 23.213,13.031 21.65,11.47 22.236,12.869 17.811,9.23 13.284,9.782 18.069,10.6 10.525,10.6L10.525,7.314 22.333,6.485 22.356,3.37C18.961,3.373,13.597,4.787,10.581,4.516L11.658,0.576 7.902,0z M11.182,17.831L10.589,14.009 14.437,13.099C13.422,15.502,13.28,16.453,11.182,17.831 M3.726,22C3.138,21.599 2.853,19.765 3.171,19.098 4.014,17.328 5.888,15.688 7.783,15.314 7.933,17.25 8.185,19.381 8.384,20.948 6.977,22.06 5.608,22.593 3.726,22\" Fill=\"#FF616162\" Height=\"27.623\" Canvas.Left=\"11.793\" Canvas.Top=\"14.377\" Width=\"25.709\"/>\n        <Path Data=\"M1.453,1.571L1.255,4.03C4.209,3.321 8.951,0.311 9.716,5.89 4,7.964 -0.894,5.605 0.139,14.379 3.127,17.815 6.204,17.834 9.397,14.66 10.435,16.659 9.529,16.461 12.458,16.52 12.458,13.156 13.191,5.275 11.857,2.66 9.953,-1.07 4.009,-0.336 1.453,1.571 M5.172,14.604C2.723,14.475 1.984,12.804 2.599,11.261 3.497,9.006 7.07,8.691 9.828,8.632 9.748,12.458 8.793,13.618 5.172,14.604\" Fill=\"#FF616162\" Height=\"17\" Canvas.Left=\"0\" Canvas.Top=\"9.115\" Width=\"12.659\"/>\n        <Path Data=\"M14.264,5.916C14.53,6.519,14.503,8.542,14.503,8.542L10.75,5.247 10.538,9.689 15.583,14.032 20.971,9.817 20.984,5.314 17.197,8.659C17.102,3.195,16.042,0.424,11.285,0L8.493,0C4.06,0.441 1.027,3.647 0,7.888 4.809,7.893 2.155,7.833 4.933,4.934 6.639,3.154 8.85,2.118 11.174,2.826 11.406,2.896 11.837,3.137 12.027,3.287 12.027,3.287 13.46,4.092 14.264,5.916\" Fill=\"#FF3C7CB6\" Height=\"14.032\" Canvas.Left=\"5.228\" Canvas.Top=\"0\" Width=\"20.984\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Image\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,38.571L38.571,38.571 38.571,0 0,0z\" Fill=\"White\" Height=\"38.571\" Canvas.Left=\"0.715\" Canvas.Top=\"0.714\" Width=\"38.571\"/>\n        <Path Data=\"M14.286,0.467C13.668,-0.178 11.376,-0.133 10.715,0.467 7.979,2.947 0,11.181 0,11.181L0,18.324 31.429,18.324C31.429,18.324,18.811,5.189,14.286,0.467\" Fill=\"#FF3F7EB8\" Height=\"18.324\" Canvas.Left=\"2.142\" Canvas.Top=\"19.533\" Width=\"31.429\"/>\n        <Path Data=\"M0.897,4.653L12.326,16.796 15.897,16.796 15.897,11.081C15.897,11.081 8.516,3.7 5.183,0.367 4.678,-0.138 2.86,-0.107 2.326,0.367 1.761,0.868 0.63,1.987 0.183,2.51 -0.486,3.294 0.897,4.653 0.897,4.653\" Fill=\"#FF3F7EB8\" Height=\"16.796\" Canvas.Left=\"21.96\" Canvas.Top=\"21.061\" Width=\"15.897\"/>\n        <Path Data=\"M0,40L40,40 40,0 0,0z M0.714,0.714L39.285,0.714 39.285,39.285 0.714,39.285z\" Fill=\"#FF7C7C7D\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n        <Path Data=\"M8.57,4.284C8.57,6.652 6.652,8.57 4.285,8.57 1.918,8.57 0,6.652 0,4.284 0,1.918 1.918,-0.001 4.285,-0.001 6.652,-0.001 8.57,1.918 8.57,4.284\" Fill=\"#FFECC17D\" Height=\"8.57\" Canvas.Left=\"25.714\" Canvas.Top=\"5.714\" Width=\"8.57\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Info\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"M0,0 6,0 6,28 0,28\" Fill=\"White\" Height=\"28\" Canvas.Left=\"17\" Canvas.Top=\"6.5\" Width=\"6\" />\n        <Path Data=\"M20.05,12.3C18.529,12.3 17.3,11.071 17.3,9.55 17.3,8.031 18.529,6.8 20.05,6.8 21.569,6.8 22.8,8.031 22.8,9.55 22.8,11.071 21.569,12.3 20.05,12.3 M22.114,33.245L18.114,33.245 18.114,14.245 22.114,14.245z M20,0C8.955,0 0,8.955 0,20 0,31.046 8.955,40 20,40 31.046,40 40,31.046 40,20 40,8.955 31.046,0 20,0\" Fill=\"#FF3C7CB6\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Delay\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"M20,0C8.955,0 0,8.954 0,19.999 0,31.045 8.955,40 20,40 31.046,40 40,31.045 40,19.999 40,8.954 31.046,0 20,0\" Fill=\"White\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n        <Path Data=\"M20.001,38C10.059,38 2,29.941 2,20 2,10.059 10.059,2 20.001,2 29.941,2 38,10.059 38,20 38,29.941 29.941,38 20.001,38 M20,0C8.955,0 0,8.954 0,19.999 0,31.045 8.955,40 20,40 31.046,40 40,31.045 40,19.999 40,8.954 31.046,0 20,0\" Fill=\"Gray\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n        <Path Data=\"M17.2,17.2C17.171,7.876,10.004,-0.019,0,0.001L0,17.2z\" Fill=\"#FFE1876D\" Height=\"17.2\" Canvas.Left=\"20\" Canvas.Top=\"2.799\" Width=\"17.2\"/>\n        <Path Data=\"M11.992,16.491L11.992,15.002 1.495,15.002 1.49,0 0.001,0 0,16.492z\" Fill=\"#FF565657\" Height=\"16.492\" Canvas.Left=\"20\" Canvas.Top=\"3.508\" Width=\"11.992\"/>\n        <Path Data=\"M20,19.999C20,8.954,11.046,0,-0.001,0L0,2C9.94,2,18,10.059,18,20z\" Fill=\"#FFD75D39\" Height=\"20\" Canvas.Left=\"20\" Canvas.Top=\"0\" Width=\"20\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Last\" HorizontalAlignment=\"Center\" Height=\"15\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"18\">\n        <Path Data=\"F1M6,0L9.749,3.749 0,3.749 0,6.749 9.749,6.749 6,10.5 9.6,10.5 15,5.249 9.6,0z\" Fill=\"#FF3C7CB6\" Height=\"10.5\" Canvas.Left=\"0\" Canvas.Top=\"2.251\" Width=\"15\"/>\n        <Path Data=\"F1M0,15L0.75,15 0.75,0 0,0z\" Fill=\"#FF3C7CB6\" Height=\"15\" Canvas.Left=\"17.25\" Canvas.Top=\"0\" Width=\"0.75\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.First\" HorizontalAlignment=\"Left\" Height=\"15\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"18\">\n        <Path Data=\"F1M5.3,0L0,5.252 5.3,10.502 9,10.502 5.251,6.752 15,6.752 15,3.752 5.251,3.752 9,0.001z\" Fill=\"#FF3C7CB6\" Height=\"10.501\" Canvas.Left=\"3\" Canvas.Top=\"2.298\" Width=\"15.002\"/>\n        <Path Data=\"F1M0,15L0.75,15 0.75,0 0,0z\" Fill=\"#FF3C7CB6\" Height=\"15\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"0.75\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Forward.Bold\" HorizontalAlignment=\"Center\" Height=\"22.7334\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"22\">\n        <Path Data=\"F1M14.666,0L14.666,10.267 0,0 0,22.733 14.666,12.467 14.666,22.733 22,22.733 22,0z\" Fill=\"#FF3C7CB6\" Height=\"22.733\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"22\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Backward.Bold\" HorizontalAlignment=\"Center\" Height=\"22\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"22\">\n        <Path Data=\"F1M22,0L7.335,10.266 7.335,0 0,0 0,22 7.335,22 7.335,12.466 22,22z\" Fill=\"#FF3C7CB6\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"22\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Temporary\" HorizontalAlignment=\"Center\" Height=\"43.5059\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M0,12.001L0.751,12.001 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"12.001\" Canvas.Left=\"16.5\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,12.001L0.751,12.001 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"12.001\" Canvas.Left=\"14.25\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,11.251L0.751,11.251 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"11.251\" Canvas.Left=\"18.75\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,10.5L0.751,10.5 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"10.5\" Canvas.Left=\"21\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,8.25L0.751,8.25 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"8.25\" Canvas.Left=\"12\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,8.25L0.751,8.25 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"8.25\" Canvas.Left=\"23.25\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,7.501L0.751,7.501 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"7.501\" Canvas.Left=\"9.75\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,7.501L0.751,7.501 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"7.501\" Canvas.Left=\"25.5\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,6.75L0.751,6.75 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"6.75\" Canvas.Left=\"27.75\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,6.75L0.751,6.75 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"6.75\" Canvas.Left=\"30\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,6L0.751,6 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"6\" Canvas.Left=\"32.25\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,5.25L0.751,5.25 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"5.25\" Canvas.Left=\"34.5\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Path Data=\"F1M0,4.501L0.751,4.501 0.751,0 0,0z\" Fill=\"#FF9B9B9A\" Height=\"4.501\" Canvas.Left=\"36.75\" Canvas.Top=\"31.5\" Width=\"0.751\"/>\n        <Canvas Clip=\"M0,0L42.005,0 42.005,43.506 0,43.506z\" Height=\"43.506\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42.005\">\n            <Path Data=\"M20.998,10.499C20.998,16.296 16.298,20.998 10.499,20.998 4.701,20.998 0,16.296 0,10.499 0,4.702 4.701,0 10.499,0 16.298,0 20.998,4.702 20.998,10.499\" Fill=\"White\" Height=\"20.998\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20.998\"/>\n            <Path Data=\"M0,16.5L0,17.25 21.75,17.25 21.75,8.25 12.75,0 3.25,0C3.25,0 6.513,2.533 5.75,8.258 4.938,14.357 0,16.5 0,16.5\" Fill=\"White\" Height=\"17.25\" Canvas.Left=\"15.75\" Canvas.Top=\"3.75\" Width=\"21.75\"/>\n            <Path Data=\"M37.5,7.525L37.5,1.525C37.5,0.994 36.53,0.026 36,0.025 27.215,-0.003 11.686,-0.013 1.5,0.025 0.97,0.027 0,0.994 0,1.525L0,7.525C0,8.055 0.97,9.027 1.5,9.025 9.603,8.986 26.851,9.027 36,9.025 36.53,9.025 37.5,8.056 37.5,7.525 M30.75,3.025L34.5,3.025 34.5,6.025 30.75,6.025z\" Fill=\"#FF7B7B7B\" Height=\"9.025\" Canvas.Left=\"4.5\" Canvas.Top=\"21.725\" Width=\"37.5\"/>\n            <Path Data=\"M9.747,0L0,0 0,0.75 9,0.75 9,9.75 18.75,9.75 18.75,18 19.5,18 19.5,9z M18.75,9L9.75,9 9.747,0.75z\" Fill=\"#FF7B7B7B\" Height=\"18\" Canvas.Left=\"18.75\" Canvas.Top=\"3\" Width=\"19.5\"/>\n            <Path Data=\"M0,7.5L5.25,7.5 5.25,6.75 0.75,6.75 0.75,0 0,0z\" Fill=\"#FF7B7B7B\" Height=\"7.5\" Canvas.Left=\"9.75\" Canvas.Top=\"4.5\" Width=\"5.25\"/>\n            <Path Data=\"M10.436,20.001C5.19,20.001 0.937,15.749 0.937,10.502 0.937,5.256 5.19,1.003 10.436,1.003 15.683,1.003 19.935,5.256 19.935,10.502 19.935,15.749 15.683,20.001 10.436,20.001 M10.498,0C4.701,0 0,4.7 0,10.498 0,16.296 4.701,20.997 10.498,20.997 16.297,20.997 20.998,16.296 20.998,10.498 20.998,4.7 16.297,0 10.498,0\" Fill=\"#FF4B83B9\" Height=\"20.997\" Canvas.Left=\"0\" Canvas.Top=\"0.001\" Width=\"20.998\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.ImageStack\" HorizontalAlignment=\"Center\" Height=\"38.5186\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,11.851L31.111,11.851 31.111,0 0,0z M0.741,0.74L30.371,0.74 30.371,11.11 0.741,11.11z\" Fill=\"#FF7C7C7D\" Height=\"11.851\" Canvas.Left=\"0\" Canvas.Top=\"26.668\" Width=\"31.111\"/>\n        <Path Data=\"M0.742,20L0.742,0.74 23.704,0.74 23.704,20 24.446,20 24.446,0 0.001,0 0.001,20z\" Fill=\"#FF7C7C7D\" Height=\"20\" Canvas.Left=\"5.925\" Canvas.Top=\"5.927\" Width=\"24.445\"/>\n        <Path Data=\"F1M0,7.408L0,20 8.148,12.593 8.148,0z\" Fill=\"#FF7B7B7B\" Height=\"20\" Canvas.Left=\"31.852\" Canvas.Top=\"18.519\" Width=\"8.148\"/>\n        <Path Data=\"F1M0,0L0,0.741 24.444,0.741 24.444,21.481 25.185,21.481 25.185,0z\" Fill=\"#FF7B7B7B\" Height=\"21.481\" Canvas.Left=\"11.111\" Canvas.Top=\"0.001\" Width=\"25.185\"/>\n        <Path Data=\"M24.444,21.481L24.444,0 0,0 0,0.74 23.704,0.74 23.704,21.481z\" Fill=\"#FF7B7B7B\" Height=\"21.481\" Canvas.Left=\"8.889\" Canvas.Top=\"2.964\" Width=\"24.444\"/>\n        <Path Data=\"F1M0,5.186L5.185,5.186 5.185,0z\" Fill=\"#FF7B7B7B\" Height=\"5.186\" Canvas.Left=\"0\" Canvas.Top=\"20.741\" Width=\"5.185\"/>\n        <Path Data=\"M22.963,0L0,0 0,19.26 22.963,19.26z\" Fill=\"White\" Height=\"19.26\" Canvas.Left=\"6.666\" Canvas.Top=\"6.667\" Width=\"22.963\"/>\n        <Path Data=\"M24.444,20.787L24.444,0 0,0 0,2.222 22.221,2.222 22.221,23.704z\" Fill=\"White\" Height=\"23.704\" Canvas.Left=\"11.112\" Canvas.Top=\"0.741\" Width=\"24.444\"/>\n        <Path Data=\"M23.704,20.741L23.704,0 0,0 0,2.223 21.482,2.223 21.482,22.223z\" Fill=\"White\" Height=\"22.223\" Canvas.Left=\"8.889\" Canvas.Top=\"3.704\" Width=\"23.704\"/>\n        <Path Data=\"F1M0,10.37L29.63,10.37 29.63,0 0,0z\" Fill=\"White\" Height=\"10.37\" Canvas.Left=\"0.741\" Canvas.Top=\"27.408\" Width=\"29.63\"/>\n        <Canvas Clip=\"M0,0L40,0 40,38.519 0,38.519z\" Height=\"38.519\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\">\n            <Path Data=\"M7.408,0.202C7.159,-0.073 6.188,-0.061 5.927,0.202 4.299,1.841 0,6.128 0,6.128L0,9.832 16.297,9.832C16.297,9.832,9.869,2.921,7.408,0.202\" Fill=\"#FF3F7EB8\" Height=\"9.832\" Canvas.Left=\"7.407\" Canvas.Top=\"16.095\" Width=\"16.297\"/>\n            <Path Data=\"M6.07,9.087L9.774,9.087 9.774,6.865C9.774,6.865 4.734,1.868 3.108,0.198 2.849,-0.067 1.889,-0.063 1.626,0.198 0.645,1.173 0.614,1.189 0.145,1.679 -0.051,1.884 -0.045,2.602 0.145,2.813 1.828,4.67 6.07,9.087 6.07,9.087\" Fill=\"#FF3F7EB8\" Height=\"9.086\" Canvas.Left=\"19.115\" Canvas.Top=\"16.84\" Width=\"9.774\"/>\n            <Path Data=\"M4.444,2.222C4.444,3.449 3.449,4.444 2.222,4.444 0.995,4.444 0,3.449 0,2.222 0,0.994 0.995,0 2.222,0 3.449,0 4.444,0.994 4.444,2.222\" Fill=\"#FFECC383\" Height=\"4.444\" Canvas.Left=\"20.738\" Canvas.Top=\"8.888\" Width=\"4.444\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Repeat\" HorizontalAlignment=\"Center\" Height=\"24\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Clip=\"M0,0L24,0 24,22.606 0,22.606z\" Data=\"M17.949,14.971C13.196,23.67 -1.013,16.429 5.079,7.008 6.89,4.206 9.985,4.204 9.985,4.204L9.985,0C7.391,0.216 5.179,1.507 3.698,2.823 -1.69,7.613 -1.713,17.888 7.138,21.768 13.57,24.589 23.423,20.215 22.63,9.793 22.344,6.024 21.565,5.723 19.796,2.803L24,2.803 21.779,0.108 13.489,0 13.489,8.409 16.184,10.631 16.992,6.307C16.992,6.307,20.332,10.61,17.949,14.971\" Fill=\"#FF3A78AF\" Height=\"24\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"24\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.File.Add\" HorizontalAlignment=\"Center\" Height=\"45\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"39.8\">\n        <Path Data=\"F1M0,0L0,40.755 27.17,40.755 27.17,38.491 21.133,38.491 21.133,32.452 27.17,32.452 27.17,26.415 30.19,26.415 30.19,9.81 20.375,0z\" Fill=\"White\" Height=\"40.755\" Canvas.Left=\"0.754\" Canvas.Top=\"0.755\" Width=\"30.19\"/>\n        <Path Data=\"F1M6.036,0L6.036,6.037 0,6.037 0,10.565 6.036,10.565 6.036,17.081 11.32,17.081 11.32,10.565 17.114,10.565 17.114,6.037 11.32,6.037 11.32,0z\" Fill=\"#FF6EA493\" Height=\"17.081\" Canvas.Left=\"22.642\" Canvas.Top=\"27.925\" Width=\"17.114\"/>\n        <Path Data=\"F1M0,0L0,42.264 27.924,42.264 27.924,41.51 0.754,41.51 0.754,0.755 20.377,0.755 20.377,11.321 30.944,11.321 30.944,27.17 31.698,27.17 31.698,10.566 21.131,0z M21.132,1.509L21.132,0.755 30.944,10.566 21.132,10.566z\" Fill=\"#FF7C7C7D\" Height=\"42.264\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"31.698\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.MoveToFolder\" HorizontalAlignment=\"Left\" Height=\"42.0054\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"44.2559\">\n        <Path Data=\"M20.252,6.003L15.002,6.003 15.002,9.753 5.625,18.754 0,13.504 0,36.007 41.255,36.007C41.255,36.007 41.243,6.276 41.255,1.503 41.256,0.972 40.285,0.003 39.754,0.002 36.79,-0.005 30.112,0.005 27.003,0.002 24.745,0 20.252,6.003 20.252,6.003 M27.003,0.753C30.196,0.745 36.133,0.745 39.004,0.753 39.535,0.754 40.507,1.722 40.504,2.253 40.493,4.98 40.504,6.003 40.504,6.003L21.099,6.003C21.099,6.003,25.028,0.757,27.003,0.753\" Fill=\"#FFECC477\" Height=\"36.008\" Canvas.Left=\"3.001\" Canvas.Top=\"5.999\" Width=\"41.255\"/>\n        <Path Data=\"M4.478,4.994C6.081,6.675 6.697,8.213 6.751,9.751 6.81,11.431 6.751,15.752 6.751,15.752L0,9.751 0,15.752 8.626,24.003 17.252,15.752 17.252,9.751 10.501,15.752C10.501,15.752 10.493,9.713 10.501,7.501 10.509,5.442 8.884,3.421 7.501,2.25 6.666,1.544 4.844,0 3.75,0 2.822,0.001 0,0 0,0L0,3.751C0,3.751,3.319,3.778,4.478,4.994\" Fill=\"#FF3C7CB6\" Height=\"24.003\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.252\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Video\" HorizontalAlignment=\"Center\" Height=\"32.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"34\">\n        <Path Data=\"F1M0,32.5L34,32.5 34,0 0,0z\" Fill=\"White\" Height=\"32.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"34\"/>\n        <Path Data=\"F1M0,32.552L34,32.552 34,0 0,0z M29.682,0.739L33.289,0.739 33.289,4.346 29.682,4.346z M23.887,0.739L27.496,0.739 27.496,4.346 23.887,4.346z M18.094,0.739L21.701,0.739 21.701,4.346 18.094,4.346z M12.299,0.739L15.906,0.739 15.906,4.346 12.299,4.346z M6.504,0.739L10.112,0.739 10.112,4.346 6.504,4.346z M0.71,0.739L4.318,0.739 4.318,4.346 0.71,4.346z M0.765,5.084L33.317,5.084 33.317,27.496 0.765,27.496z M29.736,28.234L33.344,28.234 33.344,31.842 29.736,31.842z M23.943,28.234L27.55,28.234 27.55,31.842 23.943,31.842z M18.148,28.234L21.756,28.234 21.756,31.842 18.148,31.842z M12.353,28.234L15.961,28.234 15.961,31.842 12.353,31.842z M6.559,28.234L10.167,28.234 10.167,31.842 6.559,31.842z M0.765,28.234L4.372,28.234 4.372,31.842 0.765,31.842z\" Fill=\"#FF727272\" Height=\"32.552\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"34\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Move\" HorizontalAlignment=\"Left\" Height=\"26\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"26\">\n        <Path Data=\"F1M4.443,0L0,4.5 8.722,4.5z\" Fill=\"#FF3C7CB6\" Height=\"4.5\" Canvas.Left=\"8.557\" Canvas.Top=\"0\" Width=\"8.722\"/>\n        <Path Data=\"F1M0,4.28L4.5,8.724 4.5,0z\" Fill=\"#FF3C7CB6\" Height=\"8.723\" Canvas.Left=\"0\" Canvas.Top=\"8.72\" Width=\"4.5\"/>\n        <Path Data=\"F1M0,8.722L4.5,4.443 0,0z\" Fill=\"#FF3C7CB6\" Height=\"8.722\" Canvas.Left=\"21.5\" Canvas.Top=\"8.556\" Width=\"4.5\"/>\n        <Path Data=\"F1M0,0L4.278,4.501 8.722,0z\" Fill=\"#FF3C7CB6\" Height=\"4.501\" Canvas.Left=\"8.722\" Canvas.Top=\"21.499\" Width=\"8.722\"/>\n        <Path Data=\"M0,9.983L9.982,9.983 9.982,0 0,0z\" Fill=\"White\" Height=\"9.983\" Canvas.Left=\"8.009\" Canvas.Top=\"8.008\" Width=\"9.982\"/>\n        <Path Data=\"M0,11.4L11.6,11.4 11.6,0 0,0z M0.809,0.708L10.791,0.708 10.791,10.691 0.809,10.691z\" Fill=\"#FF7C7C7D\" Height=\"11.4\" Canvas.Left=\"7.2\" Canvas.Top=\"7.3\" Width=\"11.6\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Open\" HorizontalAlignment=\"Center\" Height=\"33.7549\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"43.5\">\n        <Path Data=\"F1M22.75,0L19.15,5.251 0,5.25 0,28.504 0.75,28.504 7.501,10.501 35.255,10.501 35.255,0z\" Fill=\"White\" Height=\"28.504\" Canvas.Left=\"0.75\" Canvas.Top=\"0.75\" Width=\"35.255\"/>\n        <Path Clip=\"M0,0L43.505,0 43.505,33.755 0,33.755z\" Data=\"M19.1,5.251C14.544,5.251 5.2,5.239 0.75,5.251 0.485,5.251 0,5.736 0,6.001L0,33.755 36.755,33.755 43.505,11.251 36.755,11.251 36.755,0 24,0C22.204,0,20.895,5.251,19.1,5.251 M24.4,0.751L35.254,0.751C35.519,0.751,36.005,1.235,36.005,1.501L36.005,11.251C36.005,11.251 15.263,11.239 8.251,11.251 7.729,11.252 6.656,12.614 6.356,13.052 3.981,16.521 1.5,29.254 1.5,29.254L0.75,29.254 0.75,6.751C0.75,6.486,1.235,6.001,1.5,6.001L19.8,6.001C21.595,6.001,22.604,0.751,24.4,0.751\" Fill=\"#FFECBF7C\" Height=\"33.755\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"43.5\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Encoder\" HorizontalAlignment=\"Left\" Height=\"37.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"41.2\">\n        <Path Data=\"F1M0,30.505L41.256,30.505 41.256,0 0,0z\" Fill=\"White\" Height=\"30.505\" Canvas.Left=\"0\" Canvas.Top=\"7\" Width=\"41.256\"/>\n        <Path Data=\"F1M40.506,0L40.506,29.255 0.749,29.255 0.749,0 0,0 0,30.004 41.256,30.004 41.256,0z\" Fill=\"#FF7C7C7D\" Height=\"30.004\" Canvas.Left=\"0\" Canvas.Top=\"7.501\" Width=\"41.256\"/>\n        <Path Data=\"M0,5.25L0,6 14.252,6 14.252,0 0,0 0,0.75 13.502,0.75 13.502,5.25z\" Fill=\"#FF7C7C7D\" Height=\"6\" Canvas.Left=\"22.503\" Canvas.Top=\"13.502\" Width=\"14.252\"/>\n        <Path Data=\"M0,5.251L0,6.001 6.751,6.001 6.751,0 0,0 0,0.75 6.001,0.75 6.001,5.251z\" Fill=\"#FF7C7C7D\" Height=\"6.001\" Canvas.Left=\"30.004\" Canvas.Top=\"24.003\" Width=\"6.751\"/>\n        <Path Data=\"M25.503,0L0,0 0,6.001 25.503,6.001z\" Fill=\"#FF6EA493\" Height=\"6.001\" Canvas.Left=\"4.501\" Canvas.Top=\"24.003\" Width=\"25.503\"/>\n        <Path Data=\"M18.002,0L0,0 0,6 18.002,6z\" Fill=\"#FF6EA493\" Height=\"6\" Canvas.Left=\"4.501\" Canvas.Top=\"13.502\" Width=\"18.002\"/>\n        <Path Data=\"F1M0,7.501L41.256,7.501 41.256,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"7.501\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"41.256\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Fit\" HorizontalAlignment=\"Center\" Height=\"26\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"26\">\n        <Path Data=\"F1M2.888,0L4.333,2.167 0,2.167 0,3.611 4.333,3.611 2.888,5.778 5.055,5.778 7.222,2.889 5.055,0z\" Fill=\"#FF3F7EB8\" Height=\"5.778\" Canvas.Left=\"18.056\" Canvas.Top=\"10.111\" Width=\"7.222\"/>\n        <Path Data=\"F1M2.166,0L2.166,4.333 0,2.889 0,5.055 2.888,7.223 5.778,5.055 5.778,2.889 3.611,4.333 3.611,0z\" Fill=\"#FF3F7EB8\" Height=\"7.223\" Canvas.Left=\"10.112\" Canvas.Top=\"18.056\" Width=\"5.778\"/>\n        <Path Data=\"F1M0,2.166L0,4.333 2.166,2.889 2.166,7.221 3.612,7.221 3.612,2.889 5.778,4.333 5.778,2.166 2.888,0z\" Fill=\"#FF3F7EB8\" Height=\"7.221\" Canvas.Left=\"10.111\" Canvas.Top=\"0.723\" Width=\"5.778\"/>\n        <Path Data=\"F1M2.167,0L0,2.889 2.167,5.778 4.333,5.778 2.89,3.611 7.222,3.611 7.222,2.167 2.89,2.167 4.333,0z\" Fill=\"#FF3F7EB8\" Height=\"5.778\" Canvas.Left=\"0.722\" Canvas.Top=\"10.111\" Width=\"7.222\"/>\n        <Path Data=\"F1M0,26L26,26 26,0 0,0z M0.722,0.723L25.278,0.723 25.278,25.279 0.722,25.279z\" Fill=\"#FF7B7B7B\" Height=\"26\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"26\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Question\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"M0,28L28,28 28,0 0,0.083z\" Fill=\"White\" Height=\"28\" Canvas.Left=\"6.667\" Canvas.Top=\"5.924\" Width=\"28\"/>\n        <Path Data=\"M0,19.172C0,46.942 40,46.942 40,19.172 40,-6.364 0,-6.419 0,19.172 M10.79,14.431C12.687,3.955 24.372,5.42 27.952,9.434 30.387,12.165 30.282,16.061 27.869,18.715 24.7,22.199 23.317,20.481 22.377,26.73L18.04,26.73C17.244,16.825 25.044,18.936 24.252,13.478 23.752,11.436 22.302,9.734 19.036,10.649 16.699,11.303 16.044,12.91 15.247,14.832z M18,28.799L22.5,28.799 22.5,33.699 18,33.699z\" Fill=\"#FF3F7EB8\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Tag\" HorizontalAlignment=\"Center\" Height=\"27.7539\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"43.5059\">\n        <Path Data=\"F1M5.75,0L0,5.95 0,20.35 5.95,26.254 41.45,26.254 42.007,25.549 42.007,1.049 40.65,0z\" Fill=\"White\" Height=\"26.254\" Canvas.Left=\"0.75\" Canvas.Top=\"0.75\" Width=\"42.007\"/>\n        <Path Data=\"F1M0,0.75L22.503,0.75 22.503,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"0.75\" Canvas.Left=\"14.252\" Canvas.Top=\"8.252\" Width=\"22.503\"/>\n        <Path Data=\"F1M0,0.751L22.503,0.751 22.503,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"0.751\" Canvas.Left=\"14.252\" Canvas.Top=\"13.501\" Width=\"22.503\"/>\n        <Path Data=\"F1M0,0.751L22.503,0.751 22.503,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"0.751\" Canvas.Left=\"14.252\" Canvas.Top=\"18.752\" Width=\"22.503\"/>\n        <Canvas Clip=\"M0,0L43.506,0 43.506,27.754 0,27.754z\" Height=\"27.754\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"43.506\">\n            <Path Data=\"M41.256,0L8.252,0C5.334,0,0,5.334,0,8.251L0,19.502C0,22.42,5.334,27.754,8.252,27.754L41.256,27.754C42.051,27.754,43.506,26.299,43.506,25.503L43.506,2.25C43.506,1.455,42.052,0,41.256,0 M42.756,3L42.756,24.753C42.756,25.549,41.301,27.004,40.506,27.004L9.002,27.004C6.084,27.004,0.75,21.67,0.75,18.752L0.75,9.001C0.75,6.084,6.084,0.75,9.002,0.75L40.506,0.75C41.301,0.75,42.756,2.205,42.756,3\" Fill=\"#FF7C7C7D\" Height=\"27.754\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"43.506\"/>\n            <Path Data=\"M2.625,4.75C1.452,4.75 0.5,3.798 0.5,2.625 0.5,1.452 1.452,0.5 2.625,0.5 3.798,0.5 4.75,1.452 4.75,2.625 4.75,3.798 3.798,4.75 2.625,4.75 M2.625,0C1.175,0 0,1.175 0,2.625 0,4.075 1.175,5.25 2.625,5.25 4.075,5.25 5.25,4.075 5.25,2.625 5.25,1.175 4.075,0 2.625,0\" Fill=\"#FF7C7C7D\" Height=\"5.25\" Canvas.Left=\"4.5\" Canvas.Top=\"11.25\" Width=\"5.25\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.RemoveImage\" HorizontalAlignment=\"Center\" Height=\"44\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"44\">\n        <Path Data=\"F1M0,0L0,41.072 17.7,41.072 17.993,40.339 0.738,40.339 0.738,0.734 40.564,0.734 40.564,22.783 41.302,22.587 41.302,0z\" Fill=\"#FF7C7C7D\" Height=\"41.072\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"41.302\"/>\n        <Path Data=\"F1M0.492,0L0,0.733 13.766,0.733 13.274,0z\" Fill=\"#FF7C7C7D\" Height=\"0.733\" Canvas.Left=\"24.777\" Canvas.Top=\"40.339\" Width=\"13.766\"/>\n        <Path Data=\"F1M0,0.392L0,10.468 0.738,11.637 0.738,0z\" Fill=\"#FF7C7C7D\" Height=\"11.637\" Canvas.Left=\"40.564\" Canvas.Top=\"26.204\" Width=\"0.738\"/>\n        <Path Data=\"F1M0,39.604L39.826,39.604 39.826,0 0,0z\" Fill=\"White\" Height=\"39.604\" Canvas.Left=\"0.738\" Canvas.Top=\"0.735\" Width=\"39.826\"/>\n        <Path Data=\"M23.981,10.608C25.194,9.412 18.273,6.421 16.773,4.608 16.096,3.791 15.939,1.566 15.939,1.566 15.939,1.566 14.672,0.673 14.013,0.245 13.55,-0.057 12.226,-0.106 11.8,0.245 8.486,2.975 0,11.246 0,11.246L0,18.581 16.188,18.581C16.188,18.581,18.86,15.66,23.981,10.608\" Fill=\"#FF3F7EB8\" Height=\"18.581\" Canvas.Left=\"2.212\" Canvas.Top=\"20.291\" Width=\"24.123\"/>\n        <Path Data=\"M4.363,0.076C4.159,-0.011 3.665,-0.037 3.474,0.076 2.214,0.828 0,3.743 0,3.743L8.554,3.743C8.554,3.743,5.696,0.645,4.363,0.076\" Fill=\"#FF3F7EB8\" Height=\"3.742\" Canvas.Left=\"27.401\" Canvas.Top=\"35.129\" Width=\"8.554\"/>\n        <Path Data=\"F1M9.657,9.956C9.257,10.584 -1.214,18.736 0.116,21.987 3.524,25.51 4.636,21.324 6.715,19.06 9.274,16.287 10.039,14.84 13.214,12.627 17.569,15.707 21.907,23.399 25.513,23.467 24.217,20.847 23.037,18.754 21.474,16.354 19.928,13.971 18.001,11.828 16.655,9.512 18.716,6.96 24.168,4.543 25.564,2.79 23.187,1.208 17.868,5.104 14.394,7.147 11.718,5.462 6.199,-1.396 2.427,0.255 -1.131,1.804 2.111,4.595 3.823,5.599 5.485,6.568 8.726,8.508 9.657,9.956\" Fill=\"#FFD75B31\" Height=\"23.466\" Canvas.Left=\"18.436\" Canvas.Top=\"20.533\" Width=\"25.565\"/>\n        <Path Data=\"M8.848,4.4C8.848,6.83 6.869,8.8 4.424,8.8 1.98,8.8 0,6.83 0,4.4 0,1.97 1.98,0 4.424,0 6.869,0 8.848,1.97 8.848,4.4\" Fill=\"#FFEDC678\" Height=\"8.8\" Canvas.Left=\"26.548\" Canvas.Top=\"5.867\" Width=\"8.849\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Paste\" HorizontalAlignment=\"Center\" Height=\"44.4448\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"M8.64,1.482L0,1.482 0,33.334 10.37,33.334 10.37,17.037 22.223,17.037 22.223,1.482 13.578,1.481 13.578,0 8.64,0z\" Fill=\"White\" Height=\"33.334\" Canvas.Left=\"5.185\" Canvas.Top=\"2.963\" Width=\"22.223\"/>\n        <Path Data=\"F1M0,22.223L22.222,22.223 22.222,0 0,0z\" Fill=\"White\" Height=\"22.223\" Canvas.Left=\"17.037\" Canvas.Top=\"21.481\" Width=\"22.222\"/>\n        <Canvas Clip=\"M0,0L40,0 40,44.445 0,44.445z\" Height=\"44.445\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\">\n            <Path Data=\"M7.407,0.196C7.145,-0.066 6.188,-0.066 5.926,0.196 4.4,1.722 0,6.122 0,6.122L0,11.307 17.778,11.307C17.778,11.307,10.113,2.902,7.407,0.196\" Fill=\"#FF3F7EB7\" Height=\"11.307\" Canvas.Left=\"17.778\" Canvas.Top=\"31.656\" Width=\"17.778\"/>\n            <Path Data=\"M7.54,10.568L9.021,10.568 9.021,6.123 3.096,0.197C2.833,-0.065 1.876,-0.065 1.614,0.197 1.268,0.544 0.383,1.218 0.132,1.678 -0.009,1.938 -0.076,2.651 0.132,2.86 2.163,4.89 7.54,10.568 7.54,10.568\" Fill=\"#FF3F7EB7\" Height=\"10.568\" Canvas.Left=\"29.497\" Canvas.Top=\"32.396\" Width=\"9.021\"/>\n            <Path Data=\"M0.741,37.037L15.556,37.037 15.556,31.851 5.185,31.851 5.185,0 0.741,0C0.479,0,0,0.479,0,0.741L0,36.296C0,36.558,0.479,37.037,0.741,37.037\" Fill=\"#FFE7C07C\" Height=\"37.037\" Canvas.Left=\"0\" Canvas.Top=\"4.445\" Width=\"15.556\"/>\n            <Path Data=\"M4.444,0L0,0 0,15.555 5.185,15.555 5.185,0.741C5.185,0.479,4.706,0,4.444,0\" Fill=\"#FFE7C07C\" Height=\"15.555\" Canvas.Left=\"27.408\" Canvas.Top=\"4.445\" Width=\"5.185\"/>\n            <Path Data=\"M5.926,0.741L5.926,4.445 1.482,4.445C0.958,4.445,0,5.402,0,5.926L0,10.37 20.741,10.37 20.741,5.926C20.741,5.402,19.783,4.445,19.259,4.445L14.815,4.445 14.815,0.741C14.815,0.479,14.337,0,14.074,0L6.667,0C6.405,0,5.926,0.479,5.926,0.741 M8.889,2.963L11.852,2.963 11.852,5.926 8.889,5.926z\" Fill=\"#FF797B7B\" Height=\"10.37\" Canvas.Left=\"5.926\" Canvas.Top=\"0\" Width=\"20.741\"/>\n            <Path Data=\"M23.704,0L0,0 0,23.704 23.704,23.704z M0.741,0.741L22.963,0.741 22.963,22.964 0.741,22.964z\" Fill=\"#FF797B7B\" Height=\"23.704\" Canvas.Left=\"16.296\" Canvas.Top=\"20.741\" Width=\"23.704\"/>\n            <Path Data=\"M4.444,2.222C4.444,3.449 3.449,4.444 2.222,4.444 0.995,4.444 0,3.449 0,2.222 0,0.995 0.995,0 2.222,0 3.449,0 4.444,0.995 4.444,2.222\" Fill=\"#FFE7C07C\" Height=\"4.444\" Canvas.Left=\"31.107\" Canvas.Top=\"24.441\" Width=\"4.444\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Cut\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"37.5\">\n        <Path Data=\"M12.204,12.75L10.704,12.75 1.704,0 0.204,0C0.204,0 -0.254,4.572 0.204,6 1.189,9.072 7.704,16.5 7.704,16.5L7.704,18C7.704,20.258 3.312,23.143 1.704,24.75 1.439,25.016 1.704,26.396 1.704,26.396L6.204,28.697C6.204,28.697,8.829,22.5,10.704,22.5L12.204,22.5C13.973,22.5,16.701,28.697,16.701,28.697L21.204,26.396C21.204,26.396 21.464,25.01 21.204,24.75 19.641,23.188 15.204,20.258 15.204,18L15.204,16.5C15.204,16.5 21.719,9.072 22.704,6 23.162,4.572 22.704,0 22.704,0L21.204,0z\" Fill=\"#FF6C6C6C\" Height=\"28.697\" Canvas.Left=\"7.296\" Canvas.Top=\"0\" Width=\"22.907\"/>\n        <Path Data=\"M7.874,12.743C5.182,12.743 3,10.56 3,7.868 3,5.177 5.182,2.994 7.874,2.994 10.566,2.994 12.749,5.177 12.749,7.868 12.749,10.56 10.566,12.743 7.874,12.743 M7.874,0C3.526,0 0,3.525 0,7.874 0,12.222 3.526,15.748 7.874,15.748 12.223,15.748 15.748,12.222 15.748,7.874 15.748,3.525 12.223,0 7.874,0\" Fill=\"#FF3C7CB6\" Height=\"15.748\" Canvas.Left=\"21.752\" Canvas.Top=\"26.252\" Width=\"15.748\"/>\n        <Path Data=\"M7.874,12.743C5.182,12.743 2.999,10.56 2.999,7.868 2.999,5.177 5.182,2.994 7.874,2.994 10.566,2.994 12.748,5.177 12.748,7.868 12.748,10.56 10.566,12.743 7.874,12.743 M7.874,0C3.525,0 0,3.525 0,7.874 0,12.222 3.525,15.748 7.874,15.748 12.222,15.748 15.748,12.222 15.748,7.874 15.748,3.525 12.222,0 7.874,0\" Fill=\"#FF3C7CB6\" Height=\"15.748\" Canvas.Left=\"0\" Canvas.Top=\"26.252\" Width=\"15.748\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.PictureFit\" HorizontalAlignment=\"Center\" Height=\"28.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"48\">\n        <Path Data=\"F1M0,0L0,0.751 6,0.751 6,2.25 6.75,2.25 6.75,0z\" Fill=\"#FF7C7C7D\" Height=\"2.25\" Canvas.Left=\"41.25\" Canvas.Top=\"0\" Width=\"6.75\"/>\n        <Path Data=\"F1M0,0L0,2.25 0.75,2.25 0.75,0.751 6.751,0.751 6.751,0z\" Fill=\"#FF7C7C7D\" Height=\"2.25\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"6.751\"/>\n        <Path Data=\"F1M0,0L0,2.25 6.751,2.25 6.751,1.5 0.75,1.5 0.75,0z\" Fill=\"#FF7C7C7D\" Height=\"2.251\" Canvas.Left=\"0\" Canvas.Top=\"26.25\" Width=\"6.751\"/>\n        <Path Data=\"F1M6,0L6,1.5 0,1.5 0,2.25 6.75,2.25 6.75,0z\" Fill=\"#FF7C7C7D\" Height=\"2.251\" Canvas.Left=\"41.25\" Canvas.Top=\"26.25\" Width=\"6.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"47.25\" Canvas.Top=\"3.75\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"0\" Canvas.Top=\"3.75\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"0\" Canvas.Top=\"17.25\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"47.25\" Canvas.Top=\"17.25\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"0\" Canvas.Top=\"21.75\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"47.25\" Canvas.Top=\"21.75\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"0\" Canvas.Top=\"8.25\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,3L0.75,3 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"3\" Canvas.Left=\"47.25\" Canvas.Top=\"8.25\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,2.999L0.75,2.999 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.999\" Canvas.Left=\"0\" Canvas.Top=\"12.75\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,2.999L0.75,2.999 0.75,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.999\" Canvas.Left=\"47.25\" Canvas.Top=\"12.75\" Width=\"0.75\"/>\n        <Path Data=\"F1M0,26.999L28.5,26.999 28.5,0 0,0z\" Fill=\"White\" Height=\"26.999\" Canvas.Left=\"9.75\" Canvas.Top=\"0.751\" Width=\"28.5\"/>\n        <Canvas Clip=\"M0,0L48.007,0 48.007,28.504 0,28.504z\" Height=\"28.504\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"48.007\">\n            <Path Data=\"M9.75,0.199C9.485,-0.066 8.515,-0.066 8.25,0.199 6.166,2.283 0,8.449 0,8.449L0,13.699 22.5,13.699C22.5,13.699,12.731,3.18,9.75,0.199\" Fill=\"#FF3F7EB8\" Height=\"13.699\" Canvas.Left=\"10.5\" Canvas.Top=\"13.301\" Width=\"22.5\"/>\n            <Path Data=\"M3.949,0.298C3.552,-0.099 2.096,-0.1 1.699,0.298 1.312,0.686 0.583,1.414 0.199,1.798 -0.066,2.063 -0.066,3.033 0.199,3.298 2.43,5.529 8.644,12.298 8.644,12.298L11.449,12.298 11.449,7.798C11.449,7.798,5.774,2.123,3.949,0.298\" Fill=\"#FF3F7EB8\" Height=\"12.298\" Canvas.Left=\"26.051\" Canvas.Top=\"14.702\" Width=\"11.449\"/>\n            <Path Data=\"M0,28.5L30,28.5 30,0 0,0z M0.75,0.751L29.25,0.751 29.25,27.751 0.75,27.751z\" Fill=\"#FFB3B2B3\" Height=\"28.5\" Canvas.Left=\"9\" Canvas.Top=\"0\" Width=\"30\"/>\n            <Path Data=\"M5.999,3C5.999,4.657 4.656,6 2.999,6 1.343,6 0,4.657 0,3 0,1.344 1.343,0 2.999,0 4.656,0 5.999,1.344 5.999,3\" Fill=\"#FFECC17D\" Height=\"6\" Canvas.Left=\"26.996\" Canvas.Top=\"3.749\" Width=\"5.999\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Undo\" HorizontalAlignment=\"Center\" Height=\"29.856\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M0,8.358L8.503,16.863 15.798,16.863 10.295,10.875C14.954,10.715 20.843,9.936 23.577,13.588 26.502,17.808 25.413,23.365 18.058,25.079L18.058,29.856C25.429,29.856 29.578,24.079 29.891,19.829 30.266,16.376 30,11.232 24.143,7.662 21.913,6.483 19.391,5.921 18.07,5.959 15.498,5.959 12.887,5.959 10.295,5.959L15.798,0 8.503,0z\" Fill=\"#FF3C7CB6\" Height=\"29.856\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Redo\" HorizontalAlignment=\"Center\" Height=\"29.856\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M30.002,8.358L21.499,16.863 14.204,16.863 19.707,10.875C15.048,10.715 9.159,9.936 6.425,13.588 3.5,17.808 4.589,23.365 11.944,25.079L11.944,29.856C4.573,29.856 0.424,24.079 0.111,19.829 -0.264,16.376 0.002,11.232 5.859,7.662 8.089,6.483 10.611,5.921 11.932,5.959 14.504,5.959 17.115,5.959 19.707,5.959L14.204,0 21.499,0z\" Fill=\"#FF3C7CB6\" Height=\"29.856\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.FlipHorizontal\" HorizontalAlignment=\"Center\" Height=\"18\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M10.5,0L0,18 10.5,18z\" Fill=\"#FF7B7B7B\" Height=\"18\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"10.5\"/>\n        <Path Data=\"F1M0,0L0,18 10.5,18z\" Fill=\"#FFB7B7B8\" Height=\"18.001\" Canvas.Left=\"13.5\" Canvas.Top=\"0\" Width=\"10.5\"/>\n        <Path Data=\"F1M0,14.242L8.374,14.242 0,0z\" Fill=\"White\" Height=\"14.242\" Canvas.Left=\"14.25\" Canvas.Top=\"3.009\" Width=\"8.374\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.FlipVertical\" HorizontalAlignment=\"Center\" Height=\"24\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"18\">\n        <Path Data=\"F1M0,0L18,10.499 18,0z\" Fill=\"#FF7B7B7B\" Height=\"10.5\" Canvas.Left=\"0\" Canvas.Top=\"13.5\" Width=\"18\"/>\n        <Path Data=\"F1M18,0L0,10.5 18,10.5z\" Fill=\"#FFB7B7B8\" Height=\"10.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"18\"/>\n        <Path Data=\"M0,8.373L14.242,8.373 14.242,0z\" Fill=\"White\" Height=\"8.373\" Canvas.Left=\"3\" Canvas.Top=\"1.4\" Width=\"14.242\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.RotateLeft90\" HorizontalAlignment=\"Center\" Height=\"22.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"33\">\n        <Path Data=\"F1M0,21.001L11.946,21.001 11.946,0z\" Fill=\"#FF7B7B7B\" Height=\"21.001\" Canvas.Left=\"0\" Canvas.Top=\"1.5\" Width=\"11.946\"/>\n        <Path Data=\"F1M0,11.999L19.542,11.999 0,0z\" Fill=\"#FFB7B7B8\" Height=\"11.999\" Canvas.Left=\"13.459\" Canvas.Top=\"10.5\" Width=\"19.542\"/>\n        <Path Data=\"F1M0,9.567L15.458,9.567 0,0z\" Fill=\"White\" Height=\"9.567\" Canvas.Left=\"14.277\" Canvas.Top=\"12.077\" Width=\"15.458\"/>\n        <Path Clip=\"M-15.75,0L17.254,0 17.254,22.503 -15.75,22.503z\" Data=\"M0,4.125L3.348,8.25 6.75,8.25 4.5,5.25 8.25,5.25C8.78,5.25,9.75,6.219,9.75,6.75L9.75,8.25 12,8.25 12,5.25C12,4.454,10.545,3,9.75,3L4.5,3 6.75,0 3.348,0z\" Fill=\"#FF3C7CB6\" Height=\"8.25\" Canvas.Left=\"15.75\" Canvas.Top=\"0\" Width=\"12\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.RotateRight90\" HorizontalAlignment=\"Center\" Height=\"22.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"33\">\n        <Path Data=\"F1M0,21.001L11.946,21.001 0,0z\" Fill=\"#FF7B7B7B\" Height=\"21\" Canvas.Left=\"21.055\" Canvas.Top=\"1.5\" Width=\"11.946\"/>\n        <Path Data=\"F1M0,11.999L19.542,11.999 19.542,0z\" Fill=\"#FFB7B7B8\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"10.5\" Width=\"19.542\"/>\n        <Path Data=\"F1M0,9.567L15.459,9.567 15.459,0z\" Fill=\"White\" Height=\"9.567\" Canvas.Left=\"3.264\" Canvas.Top=\"12\" Width=\"15.459\"/>\n        <Path Clip=\"M-5.25,0L27.754,0 27.754,22.503 -5.25,22.503z\" Data=\"M12,4.125L8.652,8.25 5.25,8.25 7.5,5.25 3.75,5.25C3.22,5.25,2.25,6.219,2.25,6.75L2.25,8.25 0,8.25 0,5.25C0,4.454,1.455,3,2.25,3L7.5,3 5.25,0 8.652,0z\" Fill=\"#FF3C7CB6\" Height=\"8.25\" Canvas.Left=\"5.25\" Canvas.Top=\"0\" Width=\"12\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Copy\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,25.715L25.714,25.715 25.714,0 0,0z M0.714,0.715L25,0.715 25,25.001 0.714,25.001z\" Fill=\"#FF7C7C7D\" Height=\"25.715\" Canvas.Left=\"14.286\" Canvas.Top=\"14.285\" Width=\"25.714\"/>\n        <Path Data=\"F1M0,0L0,25.714 13.571,25.714 13.571,24.999 0.715,24.999 0.715,0.714 24.999,0.714 24.999,13.571 25.715,13.571 25.715,0z\" Fill=\"#FF7C7C7D\" Height=\"25.714\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"25.715\"/>\n        <Path Data=\"F1M0,24.286L24.286,24.286 24.286,0 0,0z\" Fill=\"White\" Height=\"24.286\" Canvas.Left=\"15\" Canvas.Top=\"14.999\" Width=\"24.286\"/>\n        <Path Data=\"F1M0,0L0,24.286 12.857,24.286 12.857,12.857 24.285,12.857 24.285,0z\" Fill=\"White\" Height=\"24.286\" Canvas.Left=\"0.715\" Canvas.Top=\"0.714\" Width=\"24.285\"/>\n        <Path Data=\"M7.857,0.189C7.605,-0.063 6.681,-0.063 6.429,0.189 4.898,1.721 0,6.618 0,6.618L0,10.904 17.858,10.904C17.858,10.904,10.224,2.556,7.857,0.189\" Fill=\"#FF3F7EB8\" Height=\"10.904\" Canvas.Left=\"16.428\" Canvas.Top=\"26.954\" Width=\"17.858\"/>\n        <Path Data=\"M7.858,0.189C7.606,-0.063,6.682,-0.063,6.43,0.189L0,6.618 0,10.903 11.43,10.903 11.43,3.76C11.43,3.76,8.73,1.06,7.858,0.189\" Fill=\"#FF3F7EB8\" Height=\"10.903\" Canvas.Left=\"2.142\" Canvas.Top=\"12.668\" Width=\"11.429\"/>\n        <Path Data=\"M2.989,0.189C2.737,-0.063 1.813,-0.063 1.56,0.189 1.239,0.51 0.51,1.239 0.132,1.617 -0.044,1.793 -0.044,2.438 0.132,2.613 1.953,4.435 7.275,10.189 7.275,10.189L9.418,10.189 9.418,6.618C9.418,6.618,4.609,1.808,2.989,0.189\" Fill=\"#FF3F7EB8\" Height=\"10.189\" Canvas.Left=\"28.44\" Canvas.Top=\"27.668\" Width=\"9.418\"/>\n        <Path Data=\"M4.285,2.143C4.285,3.327 3.326,4.286 2.142,4.286 0.959,4.286 0,3.327 0,2.143 0,0.96 0.959,0 2.142,0 3.326,0 4.285,0.96 4.285,2.143\" Fill=\"#FFEDC678\" Height=\"4.286\" Canvas.Left=\"17.141\" Canvas.Top=\"4.285\" Width=\"4.285\"/>\n        <Path Data=\"M4.286,2.143C4.286,3.327 3.327,4.286 2.143,4.286 0.96,4.286 0,3.327 0,2.143 0,0.96 0.96,0 2.143,0 3.327,0 4.286,0.96 4.286,2.143\" Fill=\"#FFEDC678\" Height=\"4.286\" Canvas.Left=\"31.424\" Canvas.Top=\"18.568\" Width=\"4.286\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Zoom\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M28,14C28,21.732 21.732,28 14,28 6.268,28 0,21.732 0,14 0,6.268 6.268,0 14,0 21.732,0 28,6.268 28,14\" Fill=\"White\" Height=\"28\" Canvas.Left=\"1\" Canvas.Top=\"1\" Width=\"28\"/>\n        <Path Data=\"F1M2.962,14.813C2.962,8.268 8.268,2.962 14.813,2.962 21.357,2.962 26.663,8.268 26.663,14.813 26.663,21.357 21.357,26.663 14.813,26.663 8.268,26.663 2.962,21.357 2.962,14.813 M39.259,38.519C39.259,38.519,40,37.451,40,37.037L40,36.296C40,36.296 39.552,35.108 39.259,34.815 36.288,31.845 27.407,23.704 27.407,23.704L27.407,22.582C28.805,20.321 29.625,17.666 29.625,14.813 29.625,6.632 22.993,0 14.813,0 6.631,0 0,6.632 0,14.813 0,22.994 6.631,29.626 14.813,29.626 17.666,29.626 20.32,28.805 22.582,27.408L23.704,27.408C23.704,27.408 32.207,36.651 34.815,39.259 35.108,39.552 36.296,40 36.296,40L37.037,40C37.451,40,38.518,39.259,38.518,39.259z\" Fill=\"#FF7C7C7D\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Invert\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M10.001,0L0,10.98 10.001,21.961 18.462,21.961 11.539,14.117 36.154,14.117 36.154,7.844 11.539,7.844 18.462,0z\" Fill=\"#FF3C7CB6\" Height=\"21.961\" Canvas.Left=\"0\" Canvas.Top=\"18.039\" Width=\"36.154\"/>\n        <Path Data=\"F1M17.692,0L24.615,7.843 0,7.843 0,14.117 24.615,14.117 17.692,21.96 26.153,21.96 36.153,10.98 26.153,0z\" Fill=\"#FF6EA493\" Height=\"21.96\" Canvas.Left=\"3.847\" Canvas.Top=\"0\" Width=\"36.153\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Switch\" HorizontalAlignment=\"Center\" Height=\"28.8\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M0,27.2L22.4,27.2 22.4,0 0,0z\" Fill=\"White\" Height=\"27.2\" Canvas.Left=\"0.8\" Canvas.Top=\"0.8\" Width=\"22.4\"/>\n        <Path Data=\"M11.2,0L1.6,0 0,8 0,9.601 0.801,9.601 0.801,8.801 9.6,8.801z\" Fill=\"#FFB0B1B1\" Height=\"9.601\" Canvas.Left=\"5.6\" Canvas.Top=\"13.6\" Width=\"11.2\"/>\n        <Path Data=\"F1M0,28.8L24,28.8 24,0 0,0z M0.8,0.8L23.2,0.8 23.2,28 0.8,28z\" Fill=\"#FF7C7D7E\" Height=\"28.8\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"24\"/>\n        <Path Data=\"M9.6,0L0,0 0,8 9.6,8z\" Fill=\"#FFB0B1B1\" Height=\"8\" Canvas.Left=\"7.2\" Canvas.Top=\"4.8\" Width=\"9.6\"/>\n        <Path Data=\"M8.8,17.601L0,17.601 0,18.401 11.199,18.401 11.199,0 10.4,0 10.4,8.8z\" Fill=\"#FF7C7D7E\" Height=\"18.401\" Canvas.Left=\"6.4\" Canvas.Top=\"4.8\" Width=\"11.199\"/>\n        <Path Data=\"M0,1.601L1.6,1.601 1.6,0 0,0z\" Fill=\"#FF7C7D7E\" Height=\"1.601\" Canvas.Left=\"11.2\" Canvas.Top=\"1.599\" Width=\"1.6\"/>\n        <Path Data=\"M0,1.601L1.6,1.601 1.6,0 0,0z\" Fill=\"#FF7C7D7E\" Height=\"1.601\" Canvas.Left=\"11.2\" Canvas.Top=\"25.599\" Width=\"1.6\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Resize\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"M0,24.516L24.516,24.516 24.516,0 0,0z\" Fill=\"White\" Height=\"24.516\" Canvas.Left=\"7.742\" Canvas.Top=\"7.742\" Width=\"24.516\"/>\n        <Canvas Clip=\"M0,0L40,0 40,40 0,40z\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\">\n            <Path Data=\"M8.387,0.171C8.159,-0.057 7.325,-0.057 7.097,0.171 5.411,1.858 0,7.268 0,7.268L0,11.784 19.355,11.784C19.355,11.784,11.085,2.87,8.387,0.171\" Fill=\"#FF3F7EB8\" Height=\"11.784\" Canvas.Left=\"8.387\" Canvas.Top=\"19.829\" Width=\"19.355\"/>\n            <Path Data=\"M25.807,0L0,0 0,25.806 25.807,25.806z M0.646,0.645L25.162,0.645 25.162,25.161 0.646,25.161z\" Fill=\"#FF7C7C7D\" Height=\"25.806\" Canvas.Left=\"7.096\" Canvas.Top=\"7.097\" Width=\"25.807\"/>\n            <Path Data=\"M7.479,10.579L9.849,10.579 9.849,6.708 3.397,0.256C3.055,-0.086 1.803,-0.086 1.461,0.256 1.199,0.518 0.501,1.217 0.171,1.547 -0.057,1.775 -0.057,2.609 0.171,2.837 2.117,4.782 7.479,10.579 7.479,10.579\" Fill=\"#FF3F7EB8\" Height=\"10.58\" Canvas.Left=\"21.764\" Canvas.Top=\"21.034\" Width=\"9.849\"/>\n            <Path Data=\"M0,0.644L0,1.934 3.226,5.16 0,5.16 0,5.806 1.291,7.096 7.097,7.096 7.097,1.29 5.807,-0.001 5.162,-0.001 5.162,3.226 1.936,-0.001 0.645,-0.001z\" Fill=\"#FF3F7EB8\" Height=\"7.097\" Canvas.Left=\"0\" Canvas.Top=\"0.001\" Width=\"7.097\"/>\n            <Path Data=\"M7.097,5.807L7.097,5.161 3.871,5.161 7.097,1.935 7.097,0.645 6.452,0 5.161,0 1.935,3.226 1.935,0 1.29,0 0,1.29 0,7.097 5.806,7.097z\" Fill=\"#FF3F7EB8\" Height=\"7.097\" Canvas.Left=\"32.903\" Canvas.Top=\"0\" Width=\"7.097\"/>\n            <Path Data=\"M0,1.29L0,1.936 3.226,1.936 0,5.162 0,6.452 0.645,7.097 1.936,7.097 5.162,3.871 5.162,7.097 5.807,7.097 7.097,5.807 7.097,0 1.291,0z\" Fill=\"#FF3F7EB8\" Height=\"7.097\" Canvas.Left=\"0\" Canvas.Top=\"32.903\" Width=\"7.097\"/>\n            <Path Data=\"M5.806,0L0.001,0 0.001,5.807 1.29,7.097 1.936,7.097 1.936,3.871 5.162,7.097 6.452,7.097 7.098,6.452 7.098,5.162 3.872,1.936 7.098,1.936 7.098,1.29z\" Fill=\"#FF3F7EB8\" Height=\"7.097\" Canvas.Left=\"32.903\" Canvas.Top=\"32.903\" Width=\"7.097\"/>\n            <Path Data=\"M6,3C6,4.658 4.657,6 3,6 1.343,6 0,4.658 0,3 0,1.344 1.343,0 3,0 4.657,0 6,1.344 6,3\" Fill=\"#FFEDC678\" Height=\"6\" Canvas.Left=\"23\" Canvas.Top=\"11\" Width=\"6\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Crop\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"M18.375,18.375L0,18.375 0,0 18.375,0z\" Fill=\"White\" Height=\"18.375\" Canvas.Left=\"11.77\" Canvas.Top=\"11.75\" Width=\"18.375\"/>\n        <Path Data=\"F1M30,0L30,7.498 7.5,7.498 7.5,30.001 0,30.001 0,34.501 7.5,34.501 7.5,42 12,42 12,34.501 34.5,34.501 34.5,12.001 42.001,12.001 42.001,7.501 34.5,7.501 34.5,0z M12,12.001L30,12.001 30,30.001 12,30.001z\" Fill=\"#FF7B7B7B\" Height=\"42\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.MoveLeft\" HorizontalAlignment=\"Center\" Height=\"22\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36\">\n        <Path Data=\"F1M9.957,0L0,10.998 0,11 9.958,21.999 18.383,21.999 11.49,14.142 35.999,14.142 35.999,7.856 11.49,7.856 18.382,0z\" Fill=\"#FF3C7CB6\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"36\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.MoveRight\" HorizontalAlignment=\"Center\" Height=\"22\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36\">\n        <Path Data=\"F1M17.618,0L24.512,7.857 0.001,7.857 0.001,14.143 24.512,14.143 17.618,22 26.044,22 36,11 26.044,0z\" Fill=\"#FF6EA493\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"36\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Yoyo\" HorizontalAlignment=\"Center\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36\">\n        <Path Data=\"F1M 0,0 L 0,6.259 25.768,6.259 25.768,12.128 32.016,12.128 32.016,0.001 z\" Fill=\"#FF6EA493\" Height=\"12.128\" Canvas.Left=\"4\" Canvas.Top=\"0\" Width=\"32\"/>\n        <Path Data=\"F1M 9.958,0 L 0,10.954 9.958,21.908 18.384,21.908 11.49,14.083 36,14.083 36,1.956 29.752,1.956 29.752,7.825 11.49,7.825 18.384,0 z\" Fill=\"#FF3C7CB6\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"10\" Width=\"36\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Delete.Before\" HorizontalAlignment=\"Center\" Height=\"22\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36\">\n        <Path Data=\"F1M9.998,0L0,10.998 0,11 9.999,21.999 18.382,21.999 11.489,14.142 17.999,14.142 17.999,7.856 11.489,7.856 18.382,0z\" Fill=\"#FFD75B30\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"18.382\"/>\n        <Path Data=\"M5,6.408L0,6.408 0,0 5,0z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"19\" Canvas.Top=\"7.857\" Width=\"5\"/>\n        <Path Data=\"M4,6.408L0,6.408 0,0 4,0z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"25\" Canvas.Top=\"7.857\" Width=\"4\"/>\n        <Path Data=\"M3,6.408L0,6.408 0,0 3,0z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"30\" Canvas.Top=\"7.857\" Width=\"3\"/>\n        <Path Data=\"F1M0,6.408L2,6.408 2,0 0,0z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"34\" Canvas.Top=\"7.856\" Width=\"2\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Delete.After\" HorizontalAlignment=\"Center\" Height=\"22\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36\">\n        <Path Data=\"F1M0.001,0L6.893,7.856 0.384,7.856 0.384,14.142 6.893,14.142 0,21.999 8.384,21.999 18.383,11.001 18.383,10.999 8.385,0z\" Fill=\"#FFD75B30\" Height=\"22\" Canvas.Left=\"17.617\" Canvas.Top=\"0\" Width=\"18.383\"/>\n        <Path Data=\"M0,0L5,0 5,6.408 0,6.408z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"12\" Canvas.Top=\"7.734\" Width=\"5\"/>\n        <Path Data=\"M0,0L4,0 4,6.408 0,6.408z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"7\" Canvas.Top=\"7.734\" Width=\"4\"/>\n        <Path Data=\"M0,0L3,0 3,6.408 0,6.408z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"3\" Canvas.Top=\"7.734\" Width=\"3\"/>\n        <Path Data=\"F1M0,6.408L2,6.408 2,0 0,0z\" Fill=\"#FFD75B30\" Height=\"6.408\" Canvas.Left=\"0\" Canvas.Top=\"7.734\" Width=\"2\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Delete.Folder\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"45\">\n        <Path Data=\"M18.3,0L4.3,0 0,5.25 19.105,5.25 19.105,0.65z\" Fill=\"White\" Height=\"5.25\" Canvas.Left=\"21.4\" Canvas.Top=\"0.751\" Width=\"19.105\"/>\n        <Canvas Clip=\"M0,0.001L45.006,0.001 45.006,42.006 0,42.006z\" Height=\"42\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"45\">\n            <Path Data=\"M41.255,22.8L41.255,1.5C41.255,0.97,40.286,0,39.755,0L26.253,0C24.131,0,20.252,6.001,20.252,6.001L1.5,6.001C0.969,6.001,0,6.97,0,7.501L0,36.005 23.253,36.005C23.253,36.005 27.822,31.932 29.254,30.5 29.519,30.235 29.519,29.519 29.254,29.254 28.651,28.652 26.988,28.156 26.253,27.754 25.43,27.303 24.094,26.344 23.253,25.503 22.576,24.827 21.826,22.429 22.502,21.753 22.977,21.278 23.513,20.456 24.003,20.253 24.695,19.966 26.297,20.002 27.003,20.253 28.67,20.845 31.394,22.906 32.7,24.003 33.344,24.544 35.2,26.254 35.2,26.254z M40.505,2.25L40.505,6.001 21.752,6.001C21.752,6.001,25.147,0.75,27.003,0.75L39.005,0.75C39.535,0.75,40.505,1.719,40.505,2.25\" Fill=\"#FFECC477\" Height=\"36\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"41.255\"/>\n            <Path Data=\"M0.001,2.3C0.081,3.616,3.001,6.455,3.001,6.455L3.001,0C3.001,0,-0.056,1.357,0.001,2.3\" Fill=\"#FFECC477\" Height=\"6.455\" Canvas.Left=\"38.254\" Canvas.Top=\"27.3\" Width=\"3\"/>\n            <Path Data=\"M0.4,1.608C0.339,1.785,0,2.358,0,2.358L5.6,2.358C5.6,2.358 5.2,1.781 5.128,1.608 4.925,1.118 4.117,0.311 3.628,0.108 3.281,-0.036 2.474,-0.036 2.128,0.108 1.638,0.311 0.572,1.106 0.4,1.608\" Fill=\"#FFECC477\" Height=\"2.358\" Canvas.Left=\"31.3\" Canvas.Top=\"33.647\" Width=\"5.6\"/>\n            <Path Data=\"F1M8.501,8.91C8.149,9.472 -1.068,16.768 0.103,19.678 3.103,22.831 4.082,19.084 5.911,17.058 8.164,14.576 8.837,13.281 11.632,11.301 15.465,14.057 19.284,20.942 22.459,21.003 21.317,18.658 20.279,16.784 18.903,14.637 17.543,12.504 15.846,10.585 14.661,8.513 16.476,6.229 21.274,4.065 22.503,2.496 20.411,1.08 15.729,4.568 12.671,6.396 10.315,4.889 5.458,-1.25 2.137,0.227 -0.995,1.614 1.858,4.112 3.365,5.011 4.829,5.878 7.682,7.615 8.501,8.91\" Fill=\"#FFD75B31\" Height=\"21\" Canvas.Left=\"22.5\" Canvas.Top=\"21\" Width=\"22.5\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.First.Green\" HorizontalAlignment=\"Center\" Height=\"12\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M5.811,0L0,6 5.811,12 10.752,12 6.517,7.764 17.104,7.764 17.104,4.234 6.517,4.234 10.752,0z\" Fill=\"#FF60A18C\" Height=\"12\" Canvas.Left=\"6.9\" Canvas.Top=\"0\" Width=\"17.1\"/>\n        <Path Data=\"F1M5.646,0L 0,6 5.646,11.999 10.6,12 4.9,6 10.6,0z\" Fill=\"#FF60A18C\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"10.6\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Previous.Green\" HorizontalAlignment=\"Center\" Height=\"12\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"17.1\">\n        <Path Data=\"F1M5.81,0L0,5.998 0,6 5.81,12 10.751,12 6.516,7.764 17.103,7.764 17.103,4.234 6.516,4.234 10.751,0z\" Fill=\"#FF60A18C\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.1\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Next.Green\" HorizontalAlignment=\"Center\" Height=\"11.999\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"17.1\">\n        <Path Data=\"F1M6.353,0L10.588,4.234 0,4.234 0,7.764 10.588,7.764 6.353,12 11.294,12 17.105,5.999 11.294,0z\" Fill=\"#FF60A18C\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.105\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Last.Green\" HorizontalAlignment=\"Center\" Height=\"12\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24\">\n        <Path Data=\"F1M6.353,0L10.588,4.234 0,4.234 0,7.764 10.588,7.764 6.353,12 11.294,12 17.105,6 11.294,0z\" Fill=\"#FF60A18C\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.1\"/>\n        <Path Data=\"F1M0,0L5.647,6 0,12 4.941,12 10.589,6 4.941,0z\" Fill=\"#FF60A18C\" Height=\"12\" Canvas.Left=\"13.412\" Canvas.Top=\"0\" Width=\"10.6\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Launcher\" HorizontalAlignment=\"Left\" Height=\"6\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"6\">\n        <Path Data=\"F1M2.572,0L2.572,0.858 0.858,0.858 0.858,2.571 0,2.571 0,3.429 3.428,3.429 3.428,0z M0,0.858L0.858,0.858 0.858,0 0,0z\" Fill=\"#FFAEB1B1\" Height=\"3.429\" Canvas.Left=\"2.572\" Canvas.Top=\"2.571\" Width=\"3.429\"/>\n        <Path Data=\"F1M0,0L0,5.143 0.858,5.143 0.858,0.857 5.143,0.857 5.143,0z\" Fill=\"#FFAEB1B1\" Height=\"5.143\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"5.143\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Caption\" HorizontalAlignment=\"Center\" Height=\"36\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36\">\n        <Canvas x:Name=\"Layer_1\" Height=\"36\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"36\">\n            <Path Data=\"F1M12.3,0L0,34.88 7.7,34.88 9.9,27.58 23.8,27.58 26.1,34.88 34.398,34.88 21.5,0z M16.18,4.32L17.62,4.32 21.94,21.599 11.14,21.599z\" Fill=\"White\" Height=\"34.88\" Canvas.Left=\"1.1\" Canvas.Top=\"0.72\" Width=\"34.398\"/>\n            <Path Data=\"F1M12.96,0L0,36 9.36,36 11.52,28.8 24.481,28.8 26.64,36 36.001,36 23.04,0z M13.68,0.72L22.32,0.72 35.012,35.419 27.427,35.419 25.028,28.08 10.8,28.08 8.71,35.279 1.44,35.279z\" Fill=\"#FF4680B9\" Height=\"36\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"36\"/>\n            <Path Data=\"M0,17.279L10.8,17.279 6.479,0 5.04,0z M9.813,16.559L1.078,16.559 5.493,0.43 6.069,0.43z\" Fill=\"#FF4680B9\" Height=\"17.279\" Canvas.Left=\"12.24\" Canvas.Top=\"5.04\" Width=\"10.8\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.FreeText\" HorizontalAlignment=\"Center\" Height=\"26.25\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"43.7\">\n        <Path Data=\"F1M15.002,0L0,26.253 5.575,26.253 9.001,20.253 19.502,20.253 20.576,26.253 25.504,26.253 20.375,0z M16.502,6L17.252,6 19.175,15.752 11.175,15.752z\" Fill=\"#FF555556\" Height=\"26.25\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"25.5\"/>\n        <Path Clip=\"M-26.342,-6.873L17.431,-6.873 17.431,19.38 -26.342,19.38z\" Data=\"F1M11.211,2.786C9.707,2.786 7.958,4.196 5.964,7.016 3.971,9.835 2.974,12.174 2.974,14.031 2.974,15.341 3.406,15.996 4.273,15.996 5.525,15.996 7.263,14.732 9.485,12.203 11.706,9.673 12.817,7.349 12.817,5.23 12.817,3.601 12.281,2.786 11.211,2.786 M12.253,12.408C10.658,14.55 9.08,16.156 7.52,17.227 5.958,18.298 4.528,18.833 3.23,18.833 2.353,18.833 1.595,18.463 0.957,17.722 0.318,16.982 0,16.031 0,14.869 0,11.872 1.339,8.646 4.017,5.187 6.693,1.729 9.354,0 11.997,0 12.954,0 13.666,0.547 14.134,1.641 14.281,2.006 14.515,2.188 14.834,2.188 15.745,2.188 16.201,2.541 16.201,3.247 16.201,3.601 16.144,4.085 16.03,4.701 15.415,8.062 15.107,10.431 15.107,11.81 15.107,14.567 15.631,16.218 16.68,16.765 17.181,17.038 17.432,17.375 17.432,17.774 17.432,18.127 17.187,18.483 16.696,18.842 16.207,19.201 15.733,19.38 15.278,19.38 14.4,19.38 13.678,18.777 13.108,17.569 12.538,16.361 12.253,14.641 12.253,12.408\" Fill=\"#FF545656\" Height=\"19.38\" Canvas.Left=\"26.342\" Canvas.Top=\"6.873\" Width=\"17.432\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.TitleFrame\" HorizontalAlignment=\"Center\" Height=\"32\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M0,30.512L40.5,30.512 40.5,0 0,0z\" Fill=\"White\" Height=\"30.512\" Canvas.Left=\"0.75\" Canvas.Top=\"0.744\" Width=\"40.5\"/>\n        <Path Data=\"F1M0,32L42,32 42,0 0,0z M0.75,0.744L41.25,0.744 41.25,31.256 0.75,31.256z\" Fill=\"#FF7C7C7D\" Height=\"32\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42\"/>\n        <Path Data=\"M0,18.916C5.612,18.44 0.831,17.264 3.864,18.312 13.446,21.622 12.725,11.436 11.681,9.024 9.617,4.256 6.056,5.786 2.712,7.8L2.712,0 0,0z M9.31,9.426C10.352,11.99 9.771,13.956 8.39,15.792 7.148,17.44 4.644,17.454 3.422,15.826 1.18,12.84 3.227,6.448 8.797,8.814 8.981,8.892 9.235,9.242 9.31,9.426\" Fill=\"#FF565657\" Height=\"18.967\" Canvas.Left=\"22.388\" Canvas.Top=\"5.773\" Width=\"12.264\"/>\n        <Path Data=\"M1.375,3.251C6.458,1.356 7.985,3.087 7.825,3.95 7.618,5.064 7.244,4.687 5.03,5.188 -4.6,7.37 1.548,16.88 7.32,11.525 8.843,13.336 7.463,12.675 10.605,12.951 10.605,8.727 11.544,4.584 9.719,0.786 9.443,0.212 1.209,-1.531 1.375,3.251 M8.1,6.863C8.487,8.159 7.594,9.706 6.905,10.3 4.852,12.074 1.162,10.972 2.968,7.648 3.563,6.554 6.635,6.548 7.865,6.738 7.931,6.748 8.1,6.863 8.1,6.863\" Fill=\"#FF565657\" Height=\"13.138\" Canvas.Left=\"8.63\" Canvas.Top=\"11.738\" Width=\"10.846\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Watermark\" HorizontalAlignment=\"Center\" Height=\"29.8\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"22\">\n        <Path Data=\"F1M0,0L0,28.375 20.581,28.375 20.581,6.385 14.193,0z\" Fill=\"White\" Height=\"28.375\" Canvas.Left=\"0.709\" Canvas.Top=\"0.709\" Width=\"20.581\"/>\n        <Path Data=\"F1M0,0L0,29.793 22,29.793 22,7.093 14.902,0z M14.902,0.708L21.291,7.093 14.902,7.093z M0.709,0.708L14.193,0.708 14.193,7.802 21.29,7.802 21.29,29.083 0.709,29.083z\" Fill=\"#FF7C7C7D\" Height=\"29.793\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"22\"/>\n        <Path Data=\"F1M7.8,8.008L4.408,4.821C3.639,4.1,3.012,3.404,2.394,2.729L2.355,2.749C2.58,3.658,2.798,4.598,2.974,5.559L3.73,10.172z M4.095,11.726L4.951,16.722 3.147,17.681 0.551,1.729 2.656,0.61 14.454,11.671 12.59,12.661 8.887,9.179z\" Fill=\"#FFF0C1B4\" Height=\"18.449\" Canvas.Left=\"4.274\" Stroke=\"#FFF0C1B4\" Canvas.Top=\"7.589\" Width=\"15.306\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Warning\" HorizontalAlignment=\"Center\" Height=\"37.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M21.003,0L0,37.506 42.005,37.506z\" Fill=\"#FFECC477\" Height=\"37.506\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42.005\"/>\n        <Canvas Clip=\"M0,0L42.005,0 42.005,37.506 0,37.506z\" Height=\"37.506\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42.005\">\n            <Path Data=\"M4.5,2.25C4.5,3.493 3.493,4.5 2.25,4.5 1.007,4.5 0,3.493 0,2.25 0,1.007 1.007,0 2.25,0 3.493,0 4.5,1.007 4.5,2.25\" Fill=\"#FF444444\" Height=\"4.5\" Canvas.Left=\"18.75\" Canvas.Top=\"30\" Width=\"4.5\"/>\n            <Path Data=\"M0.75,18.002L3.75,18.002 4.5,0 0,0z\" Fill=\"#FF444444\" Height=\"18.002\" Canvas.Left=\"18.753\" Canvas.Top=\"9.752\" Width=\"4.5\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Eraser\" HorizontalAlignment=\"Center\" Height=\"30\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M4.56,16.146C4.327,15.914 4.319,15.06 4.553,14.826 7.9,11.478 15.44,3.94 19.028,0.352 19.497,-0.118 21.213,-0.118 21.682,0.352 23.535,2.204 27.767,6.436 29.648,8.318 30.117,8.786 30.117,10.504 29.648,10.974 26.091,14.53 18.553,22.07 15.175,25.448 14.942,25.68 14.088,25.674 13.855,25.44 11.517,23.102 6.749,18.334 4.56,16.146 M4.297,16.41C4.127,16.24 3.77,15.606 3.77,15.606 3.77,15.606 1.047,18.334 0.44,18.94 -0.147,19.528 -0.147,21.672 0.44,22.258 2.139,23.958 6.013,27.832 7.741,29.56 8.328,30.148 10.474,30.148 11.061,29.56 11.667,28.956 14.393,26.23 14.393,26.23 14.393,26.23 13.761,25.874 13.592,25.704 11.311,23.422 6.675,18.788 4.297,16.41\" Fill=\"#FFE57F92\" Height=\"30\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Select\" HorizontalAlignment=\"Center\" Height=\"32.6\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"41.8\">\n        <Path Data=\"M37.505,0L0,0 0,28.504 37.505,28.504z\" Fill=\"White\" Height=\"28.504\" Canvas.Left=\"1.902\" Canvas.Top=\"1.8\" Width=\"37.505\"/>\n        <Path Data=\"M0,0L0,13.502 0.75,13.502 0.75,0.75 38.256,0.75 38.256,13.502 39.006,13.502 39.006,0z\" Fill=\"#FF3F7EB8\" Height=\"13.502\" Canvas.Left=\"1.151\" Canvas.Top=\"1.049\" Width=\"39.006\"/>\n        <Path Data=\"M0,13.502L18.003,13.502 18.003,12.752 0.75,12.752 0.75,0.001 0,0.001z\" Fill=\"#FF3F7EB8\" Height=\"13.502\" Canvas.Left=\"1.151\" Canvas.Top=\"17.551\" Width=\"18.003\"/>\n        <Path Data=\"M0,12.752L0,13.502 18.003,13.502 18.003,0.001 17.253,0.001 17.253,12.752z\" Fill=\"#FF3F7EB8\" Height=\"13.502\" Canvas.Left=\"22.154\" Canvas.Top=\"17.551\" Width=\"18.003\"/>\n        <Path Data=\"F1M0,3L3,3 3,0 0,0z\" Fill=\"White\" Height=\"3\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"3\"/>\n        <Path Clip=\"M0,0L41.801,0 41.801,32.699 0,32.699z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"-0.25\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"-0.249\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,2.999L3,2.999 3,0 0,0z\" Fill=\"White\" Height=\"2.999\" Canvas.Left=\"0\" Canvas.Top=\"14.552\" Width=\"3\"/>\n        <Path Clip=\"M0,-14.552L41.801,-14.552 41.801,18.147 0,18.147z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"-0.25\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"14.303\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,3L3.001,3 3.001,0 0,0z\" Fill=\"White\" Height=\"3\" Canvas.Left=\"19.154\" Canvas.Top=\"0\" Width=\"3.001\"/>\n        <Path Clip=\"M-19.154,0L22.647,0 22.647,32.699 -19.154,32.699z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"18.904\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"-0.249\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,2.999L3.001,2.999 3.001,0 0,0z\" Fill=\"White\" Height=\"2.999\" Canvas.Left=\"38.301\" Canvas.Top=\"14.552\" Width=\"3.001\"/>\n        <Path Clip=\"M-38.301,-14.552L3.5,-14.552 3.5,18.147 -38.301,18.147z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"38.051\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"14.303\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,3L3.001,3 3.001,0 0,0z\" Fill=\"White\" Height=\"3\" Canvas.Left=\"38.301\" Canvas.Top=\"0\" Width=\"3.001\"/>\n        <Path Clip=\"M-38.301,0L3.5,0 3.5,32.699 -38.301,32.699z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"38.051\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"-0.249\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,2.999L3.001,2.999 3.001,0 0,0z\" Fill=\"White\" Height=\"2.999\" Canvas.Left=\"38.301\" Canvas.Top=\"29.2\" Width=\"3.001\"/>\n        <Path Clip=\"M-38.301,-29.199L3.5,-29.199 3.5,3.5 -38.301,3.5z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"38.051\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"28.95\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,2.999L3.001,2.999 3.001,0 0,0z\" Fill=\"White\" Height=\"2.999\" Canvas.Left=\"19.154\" Canvas.Top=\"29.201\" Width=\"3.001\"/>\n        <Path Clip=\"M-19.154,-29.2L22.647,-29.2 22.647,3.499 -19.154,3.499z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"18.904\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"28.951\" Width=\"3.5\"/>\n        <Path Data=\"F1M0,2.999L3,2.999 3,0 0,0z\" Fill=\"White\" Height=\"2.999\" Canvas.Left=\"0\" Canvas.Top=\"29.2\" Width=\"3\"/>\n        <Path Clip=\"M0,-29.199L41.801,-29.199 41.801,3.5 0,3.5z\" Data=\"M3.25,0.25L0.25,0.25 0.25,3.249 3.25,3.249z\" Height=\"3.499\" Canvas.Left=\"-0.25\" Stroke=\"#FF7E7D7E\" StrokeThickness=\"0.5\" Canvas.Top=\"28.95\" Width=\"3.5\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Border\" HorizontalAlignment=\"Center\" Height=\"30\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"F1M0,30L30,30 30,0 0,0z\" Fill=\"White\" Height=\"30\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n        <Path Data=\"F1M0,30L30,30 30,0 0,0z M1.321,1.132L28.678,1.132 28.678,28.679 1.321,28.679z\" Fill=\"#FF7C7C7D\" Height=\"30\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n        <Path Data=\"M0,1.509L1.509,1.509 1.509,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"19.528\" Canvas.Top=\"14.245\" Width=\"1.509\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"8.963\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"19.529\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.509,1.509 1.509,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"8.963\" Canvas.Top=\"14.245\" Width=\"1.509\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"2.029\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"4.434\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"11.226\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"6.699\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"2.17\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"4.434\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"6.698\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"24.057\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"26.32\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.508L1.51,1.508 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.508\" Canvas.Left=\"11.227\" Canvas.Top=\"14.246\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"17.264\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"17.264\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"21.792\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"21.792\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"14.245\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"24.057\" Width=\"1.51\"/>\n        <Path Data=\"M0,1.509L1.51,1.509 1.51,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"1.509\" Canvas.Left=\"14.245\" Canvas.Top=\"26.321\" Width=\"1.51\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Number\" HorizontalAlignment=\"Center\" Height=\"25.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"31.5\">\n        <Path Data=\"F1M0,24.004L30.004,24.004 30.004,0 0,0z\" Fill=\"White\" Height=\"24.004\" Canvas.Left=\"0.75\" Canvas.Top=\"0.749\" Width=\"30.004\"/>\n        <Path Data=\"F1M0.75,0L0.75,0.75 0,0.75 0,24.754 0.75,24.754 0.75,25.503 30.754,25.503 30.754,24.754 31.504,24.754 31.504,0.75 30.754,0.75 30.754,24.754 0.75,24.754 0.75,0.75 30.754,0.75 30.754,0z\" Fill=\"#FF7B7B7B\" Height=\"25.503\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"31.504\"/>\n        <Path Data=\"F1M6.328,4.614L4.183,4.614 3.656,7.04 5.809,7.04z M9.985,3.384L9.712,4.614 7.717,4.614 7.207,7.04 9.388,7.04 9.079,8.27 6.952,8.27 6.231,11.522 4.834,11.522 5.537,8.27 3.41,8.27 2.724,11.522 1.327,11.522 2.013,8.27 0,8.27 0.246,7.04 2.285,7.04 2.768,4.614 0.624,4.614 0.879,3.384 3.023,3.384 3.726,0 5.141,0 4.447,3.384 6.574,3.384 7.295,0 8.683,0 7.98,3.384z\" Fill=\"#FF3F7EB8\" Height=\"11.522\" Canvas.Left=\"11.884\" Canvas.Top=\"10.996\" Width=\"9.985\"/>\n        <Path Data=\"F1M0,0.751L20.251,0.751 20.251,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"6.751\" Canvas.Top=\"4.499\" Width=\"20.251\"/>\n        <Path Data=\"F1M0,0.751L20.251,0.751 20.251,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"6.751\" Canvas.Top=\"7.5\" Width=\"20.251\"/>\n        <Path Data=\"F1M0,0.751L1.5,0.751 1.5,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"4.5\" Canvas.Top=\"4.499\" Width=\"1.5\"/>\n        <Path Data=\"F1M0,0.751L1.5,0.751 1.5,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"4.5\" Canvas.Top=\"7.5\" Width=\"1.5\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Web\" HorizontalAlignment=\"Center\" Height=\"53\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"53\">\n        <Path Data=\"F1M26.5,0C41.136,0 53,11.864 53,26.5 53,41.136 41.136,53 26.5,53 11.864,53 0,41.136 0,26.5 0,11.864 11.864,0 26.5,0\" Fill=\"White\" Height=\"53\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"53\"/>\n        <Path Data=\"F1M30.854,51.117C33.402,48.809 35.472,44.52 36.736,39.037 40.318,39.714 43.562,40.727 46.102,42.002 42.378,46.7 36.994,50.033 30.854,51.117 M6.916,42.022C9.444,40.747 12.698,39.723 16.262,39.047 17.526,44.53 19.596,48.819 22.144,51.117 16.014,50.033 10.638,46.72 6.916,42.022 M22.144,1.881C19.716,4.081 17.716,8.082 16.442,13.208 13.098,12.541 10.052,11.546 7.504,10.262 11.196,5.952 16.322,2.906 22.144,1.881 M45.494,10.262C42.948,11.546 39.89,12.541 36.556,13.208 35.284,8.082 33.282,4.081 30.854,1.881 36.666,2.906 41.802,5.952 45.494,10.262 M38.06,25.38C37.99,21.519 37.582,17.896 36.894,14.66 40.478,13.944 43.752,12.849 46.46,11.446 49.416,15.367 51.248,20.164 51.476,25.38z M38.07,26.873L51.496,26.873C51.416,32.039 49.774,36.826 47.008,40.778 44.33,39.404 40.856,38.3 37.044,37.572 37.68,34.328 38.05,30.715 38.07,26.873 M14.928,26.873C14.958,30.715 15.316,34.328 15.954,37.582 12.152,38.319 8.678,39.424 6.01,40.807 3.234,36.846 1.582,32.05 1.502,26.873z M14.938,25.38L1.522,25.38C1.75,20.164 3.582,15.367 6.538,11.446 9.246,12.859 12.52,13.944 16.112,14.66 15.416,17.896 15.008,21.519 14.938,25.38 M26.504,15.676C29.54,15.676 32.544,15.417 35.392,14.939 36.078,18.104 36.496,21.648 36.566,25.38L16.432,25.38C16.5,21.648 16.92,18.104 17.606,14.939 20.452,15.417 23.458,15.676 26.504,15.676 M26.504,1.493C30.058,1.493 33.252,6.35 35.054,13.486 32.316,13.934 29.43,14.183 26.504,14.183 23.568,14.183 20.682,13.934 17.944,13.486 19.746,6.35 22.94,1.493 26.504,1.493 M26.504,36.577C23.458,36.577 20.374,36.836 17.446,37.314 16.82,34.129 16.442,30.586 16.422,26.873L36.576,26.873C36.556,30.586 36.188,34.129 35.552,37.314 32.624,36.836 29.548,36.577 26.504,36.577 M26.504,51.507C22.822,51.507 19.528,46.31 17.766,38.777 20.582,38.319 23.558,38.07 26.504,38.07 29.44,38.07 32.416,38.319 35.234,38.767 33.47,46.301 30.176,51.507 26.504,51.507 M26.504,0C11.884,0 0,11.884 0,26.495 0,41.116 11.884,53 26.504,53 41.116,53 53,41.116 53,26.495 53,11.884 41.116,0 26.504,0\" Fill=\"#FF4D81B8\" Height=\"53\" Canvas.Left=\"0.001\" Canvas.Top=\"0\" Width=\"53\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Close.Square\" HorizontalAlignment=\"Left\" Height=\"30\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"30\">\n        <Path Data=\"M17.5,13.75L0,13.75 0,0 17.5,0z\" Fill=\"White\" Height=\"13.75\" Canvas.Left=\"6.25\" Canvas.Top=\"8.75\" Width=\"17.5\"/>\n        <Path Data=\"M1.875,30L28.125,30C28.865,30,30,28.449,30,27.708L30,1.875C30,1.212,28.788,0,28.125,0L1.875,0C1.212,0,0,1.212,0,1.875L0,27.708C0,28.449,1.135,30,1.875,30 M17.5,15L17.5,16.25 23.75,22.5 18.75,22.5 15.625,18.75 14.375,18.75 11.25,22.5 6.25,22.5 12.5,16.25 12.5,15 6.25,8.75 11.25,8.75 14.375,12.5 15.625,12.5 18.75,8.75 23.75,8.75z\" Fill=\"#FFD95C36\" Height=\"30\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.FreeDrawing\" HorizontalAlignment=\"Center\" Height=\"41.4\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"41.5\">\n        <Path Data=\"M4.913,25.665C5.123,25.876 5.893,25.876 6.104,25.665 10.389,21.379 20.536,11.232 25.412,6.357 26.068,5.701 25.85,3.462 25.412,2.644 25.04,1.949 23.875,0.793 23.184,0.416 22.367,-0.027 20.128,-0.24 19.471,0.416 15.184,4.704 4.774,15.114 0.164,19.724 -0.055,19.942 -0.054,20.741 0.164,20.958 1.264,22.059 3.853,24.604 4.913,25.665\" Fill=\"#FF797B7B\" Height=\"25.823\" Canvas.Left=\"14.703\" Canvas.Top=\"0\" Width=\"25.826\"/>\n        <Path Data=\"M10.716,0.131C10.541,-0.044 9.903,-0.044 9.728,0.131 8.172,1.688 4.554,4.998 3.045,6.815 2.617,7.33 1.907,8.471 1.559,9.042 1.128,9.75 0.348,11.23 0.074,12.013 0.013,12.188 -0.056,12.624 0.074,12.755 0.799,13.48 2.415,15.096 3.045,15.726 3.175,15.857 3.612,15.786 3.787,15.726 4.57,15.45 6.048,14.673 6.758,14.24 7.329,13.893 8.47,13.184 8.986,12.755 10.802,11.245 14.063,7.678 15.669,6.072 15.844,5.897 15.844,5.257 15.669,5.082 14.502,3.915 11.924,1.339 10.716,0.131\" Fill=\"#FFD75B34\" Height=\"15.8\" Canvas.Left=\"3.653\" Canvas.Top=\"21.078\" Width=\"15.8\"/>\n        <Path Data=\"M3.12,0.155C2.858,-0.108 1.978,0.012 1.635,0.155 1.392,0.256 1.037,0.678 0.892,0.897 0.663,1.243 0.287,1.991 0.149,2.383 0.026,2.733 -0.113,3.605 0.149,3.868 0.561,4.28 1.264,4.983 1.635,5.353 1.897,5.615 2.757,5.431 3.12,5.353 3.526,5.265 4.257,4.838 4.605,4.611 4.825,4.467 5.222,4.098 5.348,3.868 5.525,3.542 5.611,2.645 5.348,2.383 4.821,1.856 3.678,0.713 3.12,0.155\" Fill=\"#FFD75B34\" Height=\"5.489\" Canvas.Left=\"0.608\" Canvas.Top=\"34.421\" Width=\"5.514\"/>\n        <Path Data=\"M19.941,1.077C12.871,0.902,3.991,3.652,0.994,10.841\" Height=\"11.255\" Canvas.Left=\"-0.994\" Stroke=\"#FFD96445\" StrokeThickness=\"2.154\" Canvas.Top=\"11.848\" Width=\"19.968\"/>\n        <Path Data=\"M0.456,22.234C3.426,23.622 6.96,24.43 10.749,24.43 21.216,24.43 29.747,18.268 29.747,10.71 29.747,6.862 27.537,3.378 23.986,0.881\" Height=\"25.506\" Canvas.Left=\"7.449\" Stroke=\"#FFD96445\" StrokeThickness=\"2.154\" Canvas.Top=\"15.921\" Width=\"30.824\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Ok.Round\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M17.637,34.435L6.503,21.829 10.128,19.257 17.377,27.488 31.617,9.481 35.503,12.053z M21.003,0C9.404,0 0,9.403 0,21.002 0,32.602 9.404,42.005 21.003,42.005 32.602,42.005 42.005,32.602 42.005,21.002 42.005,9.403 32.602,0 21.003,0\" Fill=\"#FF689B8B\" Height=\"42.005\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42.005\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Arrow.Blue.Bottom\" HorizontalAlignment=\"Center\" Height=\"10\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"17.5\">\n        <Path Data=\"F1M0,0L8.753,10 17.5,0z\" Fill=\"#FF3F7CB8\" Height=\"10\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.5\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Arrow.Blue.Left\" HorizontalAlignment=\"Center\" Height=\"17.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"10\">\n        <Path Data=\"F1 M 10,0 L 0,8.753 10,17.5 10,0 z\" Fill=\"#FF3F7CB8\" Height=\"17.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"10\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Arrow.Blue.Right\" HorizontalAlignment=\"Center\" Height=\"17.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"10\">\n        <Path Data=\"F1 M 0,0 L 0,17.505 10,8.753 z\" Fill=\"#FF3F7CB8\" Height=\"17.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"10\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Arrow.Blue.Top\" HorizontalAlignment=\"Center\" Height=\"10\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"17.5\">\n        <Path Data=\"F1 M 8.754,0 L 0,10 17.5,10z\" Fill=\"#FF3F7CB8\" Height=\"10\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.5\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Error.Round\" HorizontalAlignment=\"Center\" Height=\"40.\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"M31.428,12.143L23.573,19.286 23.573,20.714 31.428,27.859 31.428,29.288 29.286,31.429 27.858,31.429 20.713,23.572 19.285,23.572 12.143,31.429 10.715,31.429 8.571,29.288 8.571,27.859 16.428,20.714 16.428,19.286 8.571,12.143 8.571,10.715 10.715,8.571 12.143,8.571 19.285,16.429 20.713,16.429 27.858,8.571 29.286,8.571 31.428,10.715z M20,0C8.954,0 0,8.954 0,20 0,31.045 8.954,40 20,40 31.045,40 40,31.045 40,20 40,8.954 31.045,0 20,0\" Fill=\"#FFD75B34\" Height=\"40\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Ellipse\" HorizontalAlignment=\"Center\" Height=\"24\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30.9\">\n        <Path Data=\"M15.48,23.814 C23.742,23.814 30.48,18.574 30.48,12.148 30.48,5.722 23.742,0.48 15.48,0.48 7.218,0.48 0.48,5.722 0.48,12.148 0.48,18.574 7.218,23.814 15.48,23.814\" Fill=\"White\" Height=\"24.4\" Canvas.Left=\"0\" Stroke=\"#FF7B7B7B\" StrokeThickness=\"1\" Canvas.Top=\"0\" Width=\"30.9\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Rectangle\" HorizontalAlignment=\"Center\" Height=\"22.1\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"31\">\n        <Path Data=\"F1M0,20.667L29.524,20.667 29.524,0 0,0z\" Fill=\"White\" Height=\"20.667\" Canvas.Left=\"0.7\" Canvas.Top=\"0.7\" Width=\"29.5\"/>\n        <Path Data=\"F1M0,22.143L31,22.143 31,0 0,0z M0.738,0.738L30.262,0.738 30.262,21.405 0.738,21.405z\" Fill=\"#FF7B7B7B\" Height=\"22.1\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"31\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Pen\" HorizontalAlignment=\"Center\" Height=\"33.6\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"33.6\">\n        <Path Data=\"F1M2.779,21.752L8.03,27.003 29.783,5.251 24.531,0z M0,29.783L7.5,27.533 2.249,22.282z\" Fill=\"#FF3C7CB6\" Height=\"29.7\" Canvas.Left=\"0\" Canvas.Top=\"3.8\" Width=\"29.7\"/>\n        <Path Data=\"F1M3.376,0L0,3.375 5.252,8.6 8.6,5.252z\" Fill=\"#FF3C7CB6\" Height=\"8.6\" Canvas.Left=\"25\" Canvas.Top=\"0\" Width=\"8.6\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.StrokeEraser\" HorizontalAlignment=\"Center\" Height=\"21\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"24.7\">\n        <Path Data=\"F1M0,0.75L17.252,0.75 17.252,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"0.75\" Canvas.Left=\"7.5\" Canvas.Top=\"20.2\" Width=\"17.2\"/>\n        <Path Clip=\"M0,0L24.753,0 24.753,21.002 0,21.002z\" Data=\"M3.04,10.764C2.885,10.61 2.88,10.039 3.036,9.885 5.267,7.652 10.294,2.626 12.686,0.235 12.998,-0.078 14.143,-0.078 14.455,0.235 15.691,1.469 18.51,4.291 19.766,5.545 20.078,5.857 20.078,7.003 19.766,7.316 17.393,9.686 12.369,14.716 10.116,16.966 9.962,17.122 9.392,17.118 9.236,16.964 7.679,15.404 4.499,12.224 3.04,10.764 M2.813,11.033C2.699,10.921 2.514,10.406 2.514,10.406 2.514,10.406 0.698,12.224 0.293,12.628 -0.098,13.019 -0.098,14.449 0.293,14.839 1.426,15.972 4.008,18.556 5.161,19.708 5.552,20.101 6.982,20.101 7.375,19.708 7.778,19.306 9.595,17.49 9.595,17.49 9.595,17.49 9.129,17.318 9.017,17.204 7.497,15.685 4.397,12.619 2.813,11\" Fill=\"#FFE57F92\" Height=\"20\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Properties\" HorizontalAlignment=\"Center\" Height=\"45.2\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,0L0,40.755 30.19,40.755 30.19,9.81 20.375,0z\" Fill=\"White\" Height=\"40.755\" Canvas.Left=\"0.754\" Canvas.Top=\"0.755\" Width=\"30.19\"/>\n        <Path Data=\"F1M8.303,11.625L3.368,6.741 0,10.117 7.549,18.418 21.132,2.569 18.36,0z\" Fill=\"#FF6EA493\" Height=\"18.418\" Canvas.Left=\"18.867\" Canvas.Top=\"26.865\" Width=\"21.132\"/>\n        <Path Data=\"F1M0,0L0,42.264 22.642,42.264 22.642,41.51 0.754,41.51 0.754,0.755 20.378,0.755 20.378,11.322 30.944,11.322 30.944,31.7 31.698,31.7 31.698,10.564 21.132,0z M21.132,0.755L30.944,10.564 21.132,10.566z\" Fill=\"#FF7B7B7B\" Height=\"42.265\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"31.698\"/>\n        <Path Data=\"F1M0,0.755L16.604,0.755 16.604,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.755\" Canvas.Left=\"10.566\" Canvas.Top=\"15.094\" Width=\"16.604\"/>\n        <Path Data=\"F1M0,0.754L16.604,0.754 16.604,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.754\" Canvas.Left=\"10.566\" Canvas.Top=\"21.133\" Width=\"16.604\"/>\n        <Path Data=\"F1M0,0.755L16.604,0.755 16.604,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.755\" Canvas.Left=\"10.566\" Canvas.Top=\"27.17\" Width=\"16.604\"/>\n        <Path Data=\"F1M0,0.755L8.302,0.755 8.302,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.755\" Canvas.Left=\"10.566\" Canvas.Top=\"33.208\" Width=\"8.302\"/>\n        <Path Data=\"F1M0,0.755L3.774,0.755 3.774,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.755\" Canvas.Left=\"23.396\" Canvas.Top=\"33.208\" Width=\"3.774\"/>\n        <Canvas Clip=\"M0,0L40,0 40,45.283 0,45.283z\" Height=\"45.283\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\">\n            <Path Data=\"M4.5,2.25C4.5,3.493 3.494,4.5 2.25,4.5 1.008,4.5 0,3.493 0,2.25 0,1.008 1.008,0 2.25,0 3.494,0 4.5,1.008 4.5,2.25\" Fill=\"#FFB3B2B3\" Height=\"4.5\" Canvas.Left=\"4.623\" Canvas.Top=\"13.64\" Width=\"4.5\"/>\n            <Path Data=\"M4.376,2.375C4.376,3.479 3.48,4.375 2.376,4.375 1.272,4.375 0.376,3.479 0.376,2.375 0.376,1.271 1.272,0.375 2.376,0.375 3.48,0.375 4.376,1.271 4.376,2.375z\" Height=\"4.75\" Canvas.Left=\"4.498\" Stroke=\"#FFB2B2B3\" StrokeThickness=\"0.75\" Canvas.Top=\"19.516\" Width=\"4.75\"/>\n            <Path Data=\"M4.376,2.375C4.376,3.479 3.48,4.375 2.376,4.375 1.272,4.375 0.376,3.479 0.376,2.375 0.376,1.271 1.272,0.375 2.376,0.375 3.48,0.375 4.376,1.271 4.376,2.375z\" Height=\"4.75\" Canvas.Left=\"4.498\" Stroke=\"#FFB2B2B3\" StrokeThickness=\"0.75\" Canvas.Top=\"25.518\" Width=\"4.75\"/>\n            <Path Data=\"M4.376,2.375C4.376,3.479 3.48,4.375 2.376,4.375 1.272,4.375 0.376,3.479 0.376,2.375 0.376,1.271 1.272,0.375 2.376,0.375 3.48,0.375 4.376,1.271 4.376,2.375z\" Height=\"4.75\" Canvas.Left=\"4.498\" Stroke=\"#FFB2B2B3\" StrokeThickness=\"0.75\" Canvas.Top=\"31.517\" Width=\"4.75\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Keyboard\" HorizontalAlignment=\"Center\" Height=\"24\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,16.6 L38.6,16.6 38.6,0 0,0z\" Fill=\"White\" Height=\"16.6\" Canvas.Left=\"0.6\" Canvas.Top=\"0.6\" Width=\"38.6\"/>\n        <Path Data=\"F1M0,6.003L13.333,6.003 13.333,0 0,0z\" Fill=\"White\" Height=\"6.003\" Canvas.Left=\"23.333\" Canvas.Top=\"17.331\" Width=\"13.333\"/>\n        <Path Data=\"M1.333,18L22,18 22,17.334 1.333,17.334C1.098,17.334,0.666,16.903,0.666,16.667L0.666,1.333C0.666,1.098,1.098,0.667,1.333,0.667L38.667,0.667C38.903,0.667,39.333,1.098,39.333,1.333L39.333,16.667C39.333,16.902,38.902,17.331,38.667,17.331L38,17.331 38,18 38.667,18C39.138,18,40,17.139,40,16.667L40,1.333C40,0.862,39.138,0,38.667,0L1.333,0C0.861,0,0,0.862,0,1.333L0,16.667C0,17.139,0.862,18,1.333,18\" Fill=\"#FF7C7C7D\" Height=\"18\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40\"/>\n        <Path Data=\"M0.667,14.667L14.001,14.667C14.236,14.667,14.668,14.236,14.668,14.001L14.668,0.667C14.668,0.432,14.236,0,14.001,0L0.667,0C0.431,0,0,0.432,0,0.667L0,14.001C0,14.235,0.431,14.667,0.667,14.667 M1.334,0.667L13.334,0.667C13.57,0.667,14.001,1.099,14.001,1.334L14.001,13.334C14.001,13.569,13.57,14.001,13.334,14.001L1.334,14.001C1.1,14.001,0.667,13.57,0.667,13.334L0.667,1.334C0.667,1.098,1.1,0.667,1.334,0.667\" Fill=\"#FF7C7C7D\" Height=\"14.667\" Canvas.Left=\"22.666\" Canvas.Top=\"9.333\" Width=\"14.668\"/>\n        <Path Data=\"M0,2.667L12,2.667 12,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"10\" Canvas.Top=\"13.333\" Width=\"12\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"2.667\" Canvas.Top=\"9.333\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"6.667\" Canvas.Top=\"9.333\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"10.667\" Canvas.Top=\"9.333\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"2.667\" Canvas.Top=\"2.666\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"6.667\" Canvas.Top=\"2.666\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"10.667\" Canvas.Top=\"2.666\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.668,2.667 2.668,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"22.666\" Canvas.Top=\"2.666\" Width=\"2.668\"/>\n        <Path Data=\"M0,2.667L2.667,2.667 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"26.667\" Canvas.Top=\"2.666\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.667L2.666,2.667 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"30.667\" Canvas.Top=\"2.666\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.667L2.668,2.667 2.668,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"34.666\" Canvas.Top=\"2.666\" Width=\"2.668\"/>\n        <Path Data=\"M0,2.666L2.667,2.666 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"8.667\" Canvas.Top=\"6.001\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.666L2.667,2.666 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"12.667\" Canvas.Top=\"6.001\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.666L2.667,2.666 2.667,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"16.667\" Canvas.Top=\"6.001\" Width=\"2.667\"/>\n        <Path Data=\"M0,2.666L2.666,2.666 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"20.667\" Canvas.Top=\"6.001\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.666L2.666,2.666 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"24.667\" Canvas.Top=\"6.001\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.666L2.668,2.666 2.668,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"28.666\" Canvas.Top=\"6.001\" Width=\"2.668\"/>\n        <Path Data=\"M0,2.667L2.666,2.667 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"14.667\" Canvas.Top=\"9.333\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.667L2.666,2.667 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"18.667\" Canvas.Top=\"9.333\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.667L2.666,2.667 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"14.667\" Canvas.Top=\"2.666\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.667L2.666,2.667 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.667\" Canvas.Left=\"18.667\" Canvas.Top=\"2.666\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.666L2.666,2.666 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"4.667\" Canvas.Top=\"6.001\" Width=\"2.666\"/>\n        <Path Data=\"M0,2.666L2.666,2.666 2.666,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"2.666\" Canvas.Left=\"32.667\" Canvas.Top=\"6.001\" Width=\"2.666\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Text\" HorizontalAlignment=\"Center\" Height=\"41.2\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"32.2\">\n        <Path Data=\"F1M0,39.757L30.754,39.757 30.754,0 0,0z\" Fill=\"White\" Height=\"39.757\" Canvas.Left=\"0.75\" Canvas.Top=\"0.749\" Width=\"30.754\"/>\n        <Path Data=\"F1M27.004,0L27.004,0.75 31.504,0.75 31.504,40.506 0.75,40.506 0.75,0.75 5.251,0.75 5.251,0 0,0 0,41.256 32.255,41.256 32.255,0z M21.753,0.75L26.253,0.75 26.253,0 21.753,0z M16.503,0.75L21.004,0.75 21.004,0 16.503,0z M11.252,0.75L15.752,0.75 15.752,0 11.252,0z M6.001,0.75L10.502,0.75 10.502,0 6.001,0z\" Fill=\"#FF7B7B7B\" Height=\"41.256\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"32.255\"/>\n        <Path Data=\"F1M0,0.751L24.754,0.751 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"3.75\" Canvas.Top=\"14.252\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.75L24.754,0.75 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.75\" Canvas.Left=\"3.75\" Canvas.Top=\"26.254\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.751L24.754,0.751 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"3.75\" Canvas.Top=\"8.251\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.751L24.754,0.751 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"3.75\" Canvas.Top=\"11.251\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.75L24.754,0.75 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.75\" Canvas.Left=\"3.75\" Canvas.Top=\"17.253\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.751L24.754,0.751 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"3.75\" Canvas.Top=\"20.252\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.75L24.754,0.75 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.75\" Canvas.Left=\"3.75\" Canvas.Top=\"23.253\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.751L24.754,0.751 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"3.75\" Canvas.Top=\"29.253\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.75L24.754,0.75 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.75\" Canvas.Left=\"3.75\" Canvas.Top=\"32.255\" Width=\"24.754\"/>\n        <Path Data=\"F1M0,0.751L24.754,0.751 24.754,0 0,0z\" Fill=\"#FFB3B2B3\" Height=\"0.751\" Canvas.Left=\"3.75\" Canvas.Top=\"35.254\" Width=\"24.754\"/>\n        <Canvas Clip=\"M0,0L32.254,0 32.254,41.256 0,41.256z\" Height=\"41.256\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"32.254\">\n            <Path Data=\"M3.75,2C3.75,2.966 2.966,3.75 2,3.75 1.034,3.75 0.25,2.966 0.25,2 0.25,1.034 1.034,0.25 2,0.25 2.966,0.25 3.75,1.034 3.75,2z\" Height=\"4\" Canvas.Left=\"3.627\" Stroke=\"#FF7B7B7B\" StrokeThickness=\"0.5\" Canvas.Top=\"0.593\" Width=\"4\"/>\n            <Path Data=\"M3.75,2C3.75,2.966 2.966,3.75 2,3.75 1.034,3.75 0.25,2.966 0.25,2 0.25,1.034 1.034,0.25 2,0.25 2.966,0.25 3.75,1.034 3.75,2z\" Height=\"4\" Canvas.Left=\"8.898\" Stroke=\"#FF7B7B7B\" StrokeThickness=\"0.5\" Canvas.Top=\"0.593\" Width=\"4\"/>\n            <Path Data=\"M3.75,2C3.75,2.966 2.967,3.75 2,3.75 1.034,3.75 0.25,2.966 0.25,2 0.25,1.034 1.034,0.25 2,0.25 2.967,0.25 3.75,1.034 3.75,2z\" Height=\"4\" Canvas.Left=\"14.127\" Stroke=\"#FF7B7B7B\" StrokeThickness=\"0.5\" Canvas.Top=\"0.593\" Width=\"4\"/>\n            <Path Data=\"M3.75,2C3.75,2.966 2.967,3.75 2,3.75 1.033,3.75 0.25,2.966 0.25,2 0.25,1.034 1.033,0.25 2,0.25 2.967,0.25 3.75,1.034 3.75,2z\" Height=\"4\" Canvas.Left=\"19.375\" Stroke=\"#FF7B7B7B\" StrokeThickness=\"0.5\" Canvas.Top=\"0.593\" Width=\"4\"/>\n            <Path Data=\"M3.75,2C3.75,2.966 2.967,3.75 2,3.75 1.034,3.75 0.25,2.966 0.25,2 0.25,1.034 1.034,0.25 2,0.25 2.967,0.25 3.75,1.034 3.75,2z\" Height=\"4\" Canvas.Left=\"24.643\" Stroke=\"#FF7B7B7B\" StrokeThickness=\"0.5\" Canvas.Top=\"0.593\" Width=\"4\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.OverrideDelay\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M21,0.75C32.184,0.75 41.25,9.816 41.25,21 41.25,32.184 32.184,41.25 21,41.25 9.816,41.25 0.75,32.184 0.75,21 0.75,9.816 9.816,0.75 21,0.75\" Fill=\"White\" Height=\"42\" Canvas.Left=\"0\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" Stroke=\"#FF4680B7\" StrokeThickness=\"1.5\" StrokeLineJoin=\"Round\" Canvas.Top=\"-0.75\" Width=\"42\"/>\n        <Path Data=\"M0,16.502L12.002,16.502 12.002,15.002 1.5,15.002 1.5,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"16.502\" Canvas.Left=\"20.253\" Canvas.Top=\"4.497\" Width=\"12.002\"/>\n        <Path Data=\"M8.6,4L8,4 8,0 6,0 6,4 5.333,4 2,0.667 0.666,2 4,5.334 4,6 0,6 0,8.001 4,8.001 4,8.667 0.666,12 2,13.334 5.333,10.001 6,10.001 6,14.001 8,14.001 8,10.001 8.666,10.001 12,13.334 13.333,12 10,8.667 10,8.001 14,8.001 14,6 10,6 10,5.334 13.333,2 12,0.667z M5.333,5.334L8.666,5.334 8.666,8.667 5.333,8.667z\" Fill=\"#FFE9BF7B\" Height=\"14\" Canvas.Left=\"0\" Canvas.Top=\"27.25\" Width=\"14\"/>\n        <Path Data=\"M3.3,3.3L0,3.3 0,0 3.3,0z\" Fill=\"#FFF9F9F9\" Height=\"3.3\" Canvas.Left=\"5.333\" Canvas.Top=\"32.585\" Width=\"3.3\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.IncreaseDecreaseDelay\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M21,0.75C32.184,0.75 41.25,9.816 41.25,21 41.25,32.184 32.184,41.25 21,41.25 9.816,41.25 0.75,32.184 0.75,21 0.75,9.816 9.816,0.75 21,0.75\" Fill=\"White\" Height=\"42\" Canvas.Left=\"0\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" Stroke=\"#FF4680B7\" StrokeThickness=\"1.5\" StrokeLineJoin=\"Round\" Canvas.Top=\"0\" Width=\"42\"/>\n        <Path Data=\"M0,16.502L12.002,16.502 12.002,15.002 1.5,15.002 1.5,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"16.502\" Canvas.Left=\"20.253\" Canvas.Top=\"4.497\" Width=\"12.002\"/>\n        <Path Data=\"M5.444,5.443L0,5.443 0,8.554 5.444,8.554 5.444,14 8.555,14 8.555,8.554 14,8.554 14,5.443 8.555,5.443 8.5,0 5.444,0z\" Fill=\"#FF8D8D8C\" Height=\"14\" Canvas.Left=\"0\" Canvas.Top=\"27.252\" Width=\"14\"/>\n        <Path Data=\"M0,3.1L14,3.1 14,0 0,0z\" Fill=\"#FFD75B34\" Height=\"3.1\" Canvas.Left=\"28\" Canvas.Top=\"32.7\" Width=\"14\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Clock\" HorizontalAlignment=\"Center\" Height=\"42\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M21,0.75C32.184,0.75 41.25,9.816 41.25,21 41.25,32.184 32.184,41.25 21,41.25 9.816,41.25 0.75,32.184 0.75,21 0.75,9.816 9.816,0.75 21,0.75\" Fill=\"White\" Height=\"42\" Canvas.Left=\"0\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" Stroke=\"#FF4680B7\" StrokeThickness=\"1.5\" StrokeLineJoin=\"Round\" Canvas.Top=\"0\" Width=\"42\"/>\n        <Path Data=\"M0,16.5L12,16.502 12,15 1.5,15.002 1.5,0 0,0z\" Fill=\"#FF7C7C7D\" Height=\"16.5\" Canvas.Left=\"19.5\" Canvas.Top=\"5\" Width=\"12\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Board\" HorizontalAlignment=\"Center\" Height=\"39.418\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"43.5\">\n        <Path Data=\"M42.709,38.709L0.709,38.709 0.709,0.709 42.709,0.709z\" Height=\"39.418\" Canvas.Left=\"0\" Stroke=\"#FFA4A3A3\" StrokeThickness=\"1.418\" Canvas.Top=\"0\" Width=\"43.418\" Fill=\"White\"/>\n        <Path Data=\"M0.009,12.792C2.257,11.679 4.758,0.994 9.192,1.165 11.327,8.263 4.026,20.179 4.976,25.413 9.514,25.31 14.171,12.431 18.694,12.862 19.874,17.653 14.397,20.356 15.313,24.671 17.103,24.733 24.676,16.636 24.903,15.423 21.714,15.62 20.786,18.884 18.188,20.069 18.53,16.181 21.977,14.991 19.242,11.163 15.031,11.087 9.067,20.204 6.204,23.54 7.448,17.733 13.081,5.137 9.961,0.037 5.564,-0.668 -0.261,8.783 0.009,12.792 M17.511,21.005C17.675,20.649,17.141,21.808,17.511,21.005\" Fill=\"#FFDA6644\" Height=\"25.413\" Canvas.Left=\"8.549\" Canvas.Top=\"6.294\" Width=\"24.903\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Board.New\" HorizontalAlignment=\"Center\" Height=\"45.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"49.5\">\n        <Path Data=\"F1M0,38L41.999,38 41.999,0 0,0z\" Fill=\"White\" Height=\"38\" Canvas.Left=\"6.877\" Canvas.Top=\"6.864\" Width=\"41.999\"/>\n        <Canvas Clip=\"M0,0L49.585,0 49.585,45.573 0,45.573z\" Height=\"45.573\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"49.585\">\n            <Path Data=\"M42.709,38.709L0.709,38.709 0.709,0.709 42.709,0.709z\" Height=\"39.418\" Canvas.Left=\"6.167\" Stroke=\"#FFA4A3A3\" StrokeThickness=\"1.418\" Canvas.Top=\"6.155\" Width=\"43.418\"/>\n            <Path Data=\"M0.009,12.792C2.257,11.679 4.758,0.994 9.192,1.165 11.327,8.263 4.026,20.179 4.976,25.413 9.514,25.31 14.171,12.431 18.694,12.862 19.874,17.653 14.397,20.356 15.313,24.671 17.103,24.733 24.676,16.636 24.903,15.423 21.714,15.62 20.786,18.884 18.188,20.069 18.53,16.181 21.977,14.991 19.242,11.163 15.031,11.087 9.067,20.204 6.204,23.54 7.448,17.733 13.081,5.137 9.961,0.037 5.564,-0.668 -0.261,8.783 0.009,12.792 M17.511,21.005C17.675,20.649,17.141,21.808,17.511,21.005\" Fill=\"#FFDA6644\" Height=\"25.413\" Canvas.Left=\"15.425\" Canvas.Top=\"13.158\" Width=\"24.903\"/>\n            <Path Data=\"F1M7.76,6.402L0.001,6.402 0,0 7.76,0z\" Fill=\"#FFFBFDF9\" Height=\"6.402\" Canvas.Left=\"7.557\" Canvas.Top=\"8.198\" Width=\"7.76\"/>\n            <Path Data=\"F1M2.491,18.08L2.491,20.518 4.93,20.518 8.53,16.926 9.724,16.926 9.724,21.808 10.925,23 12.119,23 13.319,21.808 13.319,16.926 14.519,16.926 15.713,18.125 16.913,19.318 18.113,20.516 20.553,20.516 20.553,18.08 19.351,16.881 18.157,15.688 16.959,14.491 16.959,13.295 21.843,13.295 23.043,12.097 23.043,10.903 21.845,9.705 16.966,9.705 16.966,8.512 18.159,7.313 19.359,6.12 20.559,4.922 21.753,1.289 18.113,2.485 14.52,6.075 13.32,6.075 13.32,1.2 12.126,0 10.927,0 9.724,1.2 9.724,6.075 8.53,6.075 7.33,4.876 6.13,3.683 4.93,2.484 1.29,1.289 2.491,4.921 3.69,6.12 4.884,7.313 6.084,8.512 6.084,9.705 1.199,9.705 0,10.903 0,12.097 1.199,13.295 6.084,13.295 6.084,14.489z M14.429,9.57L14.429,13.205 13.23,14.4 9.589,14.4 8.39,13.205 8.39,9.57 9.589,8.375 13.229,8.375z\" Fill=\"#FFECC77D\" Height=\"23\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"23.043\"/>\n        </Canvas>\n    </Canvas>\n\n    <!--TODO: Remake this vector.-->\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Board.Add\" HorizontalAlignment=\"Center\" Height=\"39.418\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"43.5\">\n        <Path Data=\"M42.709,38.709L0.709,38.709 0.709,0.709 42.709,0.709z\" Height=\"39.418\" Canvas.Left=\"0\" Stroke=\"#FFA4A3A3\" StrokeThickness=\"1.418\" Canvas.Top=\"0\" Width=\"43.418\" Fill=\"White\"/>\n        <Path Data=\"M0.009,12.792C2.257,11.679 4.758,0.994 9.192,1.165 11.327,8.263 4.026,20.179 4.976,25.413 9.514,25.31 14.171,12.431 18.694,12.862 19.874,17.653 14.397,20.356 15.313,24.671 17.103,24.733 24.676,16.636 24.903,15.423 21.714,15.62 20.786,18.884 18.188,20.069 18.53,16.181 21.977,14.991 19.242,11.163 15.031,11.087 9.067,20.204 6.204,23.54 7.448,17.733 13.081,5.137 9.961,0.037 5.564,-0.668 -0.261,8.783 0.009,12.792 M17.511,21.005C17.675,20.649,17.141,21.808,17.511,21.005\" Fill=\"#FFDA6644\" Height=\"25.413\" Canvas.Left=\"8.549\" Canvas.Top=\"6.294\" Width=\"24.903\"/>\n        <Path Data=\"M6.037,6.038L0,6.038 0,10.566 6.037,10.566 6.037,17.359 11.32,17.359 11.32,10.566 17.358,10.566 17.358,6.038 11.32,6.038 11.32,0 6.037,0z\" Fill=\"#FF6EA391\" Height=\"17.359\" Canvas.Left=\"29.704\" Canvas.Top=\"21.466\" Width=\"17.358\"/>\n    </Canvas>\n    \n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Money\" HorizontalAlignment=\"Center\" Height=\"42.749\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"45\">\n        <Path Data=\"M30.422,11.365C35.047,11.117,37.506,11.95,37.506,11.95L37.506,0 0.001,0 0,19.503 22.504,19.503C22.504,19.503 22.078,15.146 23.297,13.771 24.603,12.299 26.922,11.552 30.422,11.365\" Fill=\"White\" Height=\"19.503\" Canvas.Left=\"2.249\" Canvas.Top=\"2.25\" Width=\"37.506\"/>\n        <Path Data=\"M36.754,6.751L39.755,6.751 39.755,14.252 42.005,14.252 42.005,0 0,0 0,24.003 17.5,24.003C18.248,24.003,19.65,23.253,20.4,23.253L24.753,23.253 24.753,21.753 6.75,21.753 6.75,18.752C6.75,18.222,5.781,17.252,5.25,17.252L2.25,17.252 2.25,6.751 5.25,6.751C5.78,6.751,6.75,5.781,6.75,5.251L6.75,2.25 35.254,2.25 35.254,5.251C35.254,5.781,36.224,6.751,36.754,6.751\" Fill=\"#FF3F7EB8\" Height=\"24.003\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"42\"/>\n        <Path Data=\"M12,6C12,9.314 9.313,12 6,12 2.687,12 0,9.314 0,6 0,2.687 2.687,0 6,0 9.313,0 12,2.687 12,6\" Fill=\"#FF3F7EB8\" Height=\"12\" Canvas.Left=\"15.002\" Canvas.Top=\"6\" Width=\"12\"/>\n        <Path Data=\"M19.5,3.375C19.5,5.239 15.135,6.75 9.75,6.75 4.365,6.75 0,5.239 0,3.375 0,1.511 4.365,0 9.75,0 15.135,0 19.5,1.511 19.5,3.375\" Fill=\"#FFE9BF7B\" Height=\"6.75\" Canvas.Left=\"13.502\" Canvas.Top=\"23.969\" Width=\"19.5\"/>\n        <Path Data=\"M19.5,3.375C19.5,5.239 15.135,6.75 9.75,6.75 4.365,6.75 0,5.239 0,3.375 0,1.511 4.365,0 9.75,0 15.135,0 19.5,1.511 19.5,3.375\" Fill=\"#FFE9BF7B\" Height=\"6.75\" Canvas.Left=\"25.505\" Canvas.Top=\"14.219\" Width=\"19.5\"/>\n        <Path Data=\"M9.75,2.652C5.082,2.652 1.187,1.515 0.229,0 0.083,0.232 0,0.474 0,0.722 0,2.586 4.365,4.097 9.75,4.097 15.135,4.097 19.5,2.586 19.5,0.722 19.5,0.474 19.417,0.232 19.271,0 18.313,1.515 14.418,2.652 9.75,2.652\" Fill=\"#FFE9BF7B\" Height=\"4.097\" Canvas.Left=\"13.492\" Canvas.Top=\"35.652\" Width=\"19.5\"/>\n        <Path Data=\"M9.75,2.652C5.082,2.652 1.187,1.517 0.229,0 0.083,0.234 0,0.474 0,0.722 0,2.588 4.365,4.097 9.75,4.097 15.135,4.097 19.5,2.588 19.5,0.722 19.5,0.474 19.417,0.234 19.271,0 18.313,1.517 14.418,2.652 9.75,2.652\" Fill=\"#FFE9BF7B\" Height=\"4.097\" Canvas.Left=\"13.502\" Canvas.Top=\"32.652\" Width=\"19.5\"/>\n        <Path Data=\"M9.75,2.652C5.082,2.652 1.187,1.516 0.229,0 0.083,0.233 0,0.474 0,0.722 0,2.587 4.365,4.097 9.75,4.097 15.135,4.097 19.5,2.587 19.5,0.722 19.5,0.474 19.417,0.233 19.271,0 18.313,1.516 14.418,2.652 9.75,2.652\" Fill=\"#FFE9BF7B\" Height=\"4.097\" Canvas.Left=\"13.502\" Canvas.Top=\"29.652\" Width=\"19.5\"/>\n        <Path Data=\"M9.75,2.652C5.082,2.652 1.187,1.515 0.229,0 0.083,0.232 0,0.474 0,0.722 0,2.586 4.365,4.097 9.75,4.097 15.135,4.097 19.5,2.586 19.5,0.722 19.5,0.474 19.417,0.232 19.271,0 18.313,1.515 14.418,2.652 9.75,2.652\" Fill=\"#FFE9BF7B\" Height=\"4.097\" Canvas.Left=\"13.502\" Canvas.Top=\"38.652\" Width=\"19.5\"/>\n        <Path Data=\"M9.75,2.652C5.082,2.652 1.187,1.516 0.229,0 0.083,0.233 0,0.474 0,0.722 0,2.587 4.365,4.097 9.75,4.097 15.135,4.097 19.5,2.587 19.5,0.722 19.5,0.474 19.417,0.233 19.271,0 18.313,1.516 14.418,2.652 9.75,2.652\" Fill=\"#FFE9BF7B\" Height=\"4.097\" Canvas.Left=\"25.505\" Canvas.Top=\"19.752\" Width=\"19.5\"/>\n        <Path Data=\"M0,4.098C5.385,4.098 9.75,2.587 9.75,0.723 9.75,0.475 9.667,0.234 9.521,0 8.563,1.517 4.668,2.653 0,2.653z\" Fill=\"#FFE9BF7B\" Height=\"4.098\" Canvas.Left=\"35.255\" Canvas.Top=\"22.655\" Width=\"9.75\"/>\n        <Path Data=\"M0,4.098C5.385,4.098 9.75,2.588 9.75,0.723 9.75,0.475 9.667,0.235 9.521,0 8.563,1.518 4.668,2.653 0,2.653z\" Fill=\"#FFE9BF7B\" Height=\"4.098\" Canvas.Left=\"35.255\" Canvas.Top=\"25.557\" Width=\"9.75\"/>\n        <Path Data=\"M0,4.098C5.385,4.098 9.75,2.586 9.75,0.723 9.75,0.475 9.667,0.233 9.521,0 8.563,1.516 4.668,2.653 0,2.653z\" Fill=\"#FFE9BF7B\" Height=\"4.098\" Canvas.Left=\"35.255\" Canvas.Top=\"28.461\" Width=\"9.75\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Cinemagraph\" HorizontalAlignment=\"Center\" Height=\"32.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"34\">\n        <Path Data=\"F1M0,32.5L34,32.5 34,0 0,0z\" Fill=\"White\" Height=\"32.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"34\"/>\n        <Path Data=\"F1M0,32.552L34,32.552 34,0 0,0z M29.682,0.739L33.289,0.739 33.289,4.346 29.682,4.346z M23.887,0.739L27.496,0.739 27.496,4.346 23.887,4.346z M18.094,0.739L21.701,0.739 21.701,4.346 18.094,4.346z M12.299,0.739L15.906,0.739 15.906,4.346 12.299,4.346z M6.504,0.739L10.112,0.739 10.112,4.346 6.504,4.346z M0.71,0.739L4.318,0.739 4.318,4.346 0.71,4.346z M0.765,5.084L33.317,5.084 33.317,27.496 0.765,27.496z M29.736,28.234L33.344,28.234 33.344,31.842 29.736,31.842z M23.943,28.234L27.55,28.234 27.55,31.842 23.943,31.842z M18.148,28.234L21.756,28.234 21.756,31.842 18.148,31.842z M12.353,28.234L15.961,28.234 15.961,31.842 12.353,31.842z M6.559,28.234L10.167,28.234 10.167,31.842 6.559,31.842z M0.765,28.234L4.372,28.234 4.372,31.842 0.765,31.842z\" Fill=\"#FF727272\" Height=\"32.552\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"34\"/>\n        <Path Clip=\"M-3.01,-7.143L30.99,-7.143 30.99,25.409 -3.01,25.409z\" Data=\"M1.462,13.573C2.2,12.783 2.858,11.416 3.435,10.466 4.339,8.979 5.024,7.631 6.172,6.32 6.737,5.674 7.33,4.506 8.257,4.368 9.705,4.154 9.42,6.504 9.412,7.438 9.393,9.547 8.36,14.929 11.893,11.498 12.844,10.573 13.948,8.361 15.635,8.925 16.715,9.286 16.608,12.1 17.579,12.654 19.421,13.705 21.041,9.175 22.021,7.495 23.331,5.252 25.223,3.264 26.908,1.305\" Height=\"14.937\" Canvas.Left=\"3.01\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" Stroke=\"#FF80FF88\" StrokeThickness=\"4\" StrokeLineJoin=\"Round\" Canvas.Top=\"7.143\" Width=\"28.424\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Cursor\" HorizontalAlignment=\"Center\" Height=\"41.8\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"26\">\n        <Path Data=\"F1M15.409,38.806L9.625,26.529 7.46,26.529 0.24,33.51 0,0 23.587,23.637 13.963,23.637 13.963,25.801 19.737,36.642z\" Fill=\"White\" Height=\"38.806\" Canvas.Left=\"0.477\" Canvas.Top=\"1.636\" Width=\"23.587\"/>\n        <Path Data=\"F1M26,26L15.886,26 15.886,27.437 21.78,38.636 15.158,41.888 9.384,29.61 7.938,29.61 -0.001,36.831 -0.001,0z M14.44,25.272L24.064,25.272 0.478,1.636 0.717,35.146 7.938,28.164 10.102,28.164 15.886,40.441 20.214,38.277 14.44,27.437z\" Fill=\"#FF7C7D7E\" Height=\"41.888\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"26\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Unselect\" HorizontalAlignment=\"Center\" Height=\"26.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"26\">\n        <Path Data=\"F1M0,0L0,16.142 6.299,16.142 6.299,2.801 16.144,2.801 16.144,0z\" Fill=\"White\" Height=\"16.142\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16.144\"/>\n        <Canvas Clip=\"M0,0L26,0 26,26.447 0,26.447z\" Height=\"26.447\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"26\">\n            <Path Data=\"F1M0,0L7.541,7.563 4.73,7.728 4.759,8.686 6.705,12.34 5.197,13.195 3.198,8.949 2.286,8.75 0.046,10.725z\" Fill=\"White\" Height=\"13.195\" Canvas.Left=\"17.081\" Canvas.Top=\"12.555\" Width=\"7.541\"/>\n            <Path Data=\"F1M0,0L9.357,9.357 5.718,9.357 5.718,9.874 7.84,13.905 5.456,15.079 3.378,10.66 2.857,10.66 0,13.256z M5.169,8.916L7.979,8.751 0.438,1.188 0.484,11.913 2.725,9.938 3.637,10.137 5.636,14.383 7.144,13.528 5.197,9.874z\" Fill=\"#FF7C7D7E\" Height=\"15.079\" Canvas.Left=\"16.642\" Canvas.Top=\"11.367\" Width=\"9.357\"/>\n        </Canvas>\n        <Path Data=\"M8.356,14.738L8.457,6.17 14.739,11.97 14.739,-0.001 0,-0.001 0,14.738z\" Fill=\"White\" Height=\"14.739\" Canvas.Left=\"7.743\" Canvas.Top=\"4.23\" Width=\"14.739\"/>\n        <Path Data=\"F1M0,0L0,16.143 6.317,16.143 6.317,15.441 0.702,15.441 0.702,0.702 15.441,0.702 15.441,2.808 16.143,2.808 16.143,0z\" Fill=\"#FF3F7EB8\" Height=\"16.143\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16.143\"/>\n        <Path Data=\"M9.065,15.441L0.702,15.441 0.702,0.702 15.441,0.702 15.441,12.676 16.143,13.277 16.143,0 0,0 0,16.144 9.065,16.144z\" Fill=\"#FF3F7EB8\" Height=\"16.144\" Canvas.Left=\"7.034\" Canvas.Top=\"3.524\" Width=\"16.143\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.InverseSelection\" HorizontalAlignment=\"Center\" Height=\"26.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"26\">\n        <Path Data=\"F1M0,0L0,16.142 6.299,16.142 6.299,2.801 16.144,2.801 16.144,0z\" Fill=\"#FF7B7B7B\" Height=\"16.142\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16.144\"/>\n        <Canvas Clip=\"M0,0L26,0 26,26.447 0,26.447z\" Height=\"26.447\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"26\">\n            <Path Data=\"F1M0,0L7.541,7.563 4.73,7.728 4.759,8.686 6.705,12.34 5.197,13.195 3.198,8.949 2.286,8.75 0.046,10.725z\" Fill=\"White\" Height=\"13.195\" Canvas.Left=\"17.081\" Canvas.Top=\"12.555\" Width=\"7.541\"/>\n            <Path Data=\"F1M0,0L9.357,9.357 5.718,9.357 5.718,9.874 7.84,13.905 5.456,15.079 3.378,10.66 2.857,10.66 0,13.256z M5.169,8.916L7.979,8.751 0.438,1.188 0.484,11.913 2.725,9.938 3.637,10.137 5.636,14.383 7.144,13.528 5.197,9.874z\" Fill=\"#FF7C7D7E\" Height=\"15.079\" Canvas.Left=\"16.642\" Canvas.Top=\"11.367\" Width=\"9.357\"/>\n        </Canvas>\n        <Path Data=\"M8.356,14.738L8.457,6.17 14.739,11.97 14.739,-0.001 0,-0.001 0,14.738z\" Fill=\"White\" Height=\"14.739\" Canvas.Left=\"7.743\" Canvas.Top=\"4.23\" Width=\"14.739\"/>\n        <Path Data=\"F1M0,0L0,16.143 6.317,16.143 6.317,15.441 0.702,15.441 0.702,0.702 15.441,0.702 15.441,2.808 16.143,2.808 16.143,0z\" Fill=\"#FF3F7EB8\" Height=\"16.143\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16.143\"/>\n        <Path Data=\"M9.065,15.441L0.702,15.441 0.702,0.702 15.441,0.702 15.441,12.676 16.143,13.277 16.143,0 0,0 0,16.144 9.065,16.144z\" Fill=\"#FF3F7EB8\" Height=\"16.144\" Canvas.Left=\"7.034\" Canvas.Top=\"3.524\" Width=\"16.143\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.FilePermission\" HorizontalAlignment=\"Center\" Height=\"33.9624\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"F1M0,0L0,30.568 22.642,30.568 22.642,7.358 15.284,0z\" Fill=\"White\" Height=\"30.568\" Canvas.Left=\"0.566\" Canvas.Top=\"0.566\" Width=\"22.642\"/>\n        <Path Data=\"F1M0,0L0,31.7 16.678,31.7 16.753,31.134 0.566,31.134 0.566,0.566 15.284,0.566 15.284,8.492 23.208,8.492 23.208,18.489 23.774,18.489 23.774,7.924 15.85,0z M15.85,0.566L23.208,7.924 15.85,7.924z\" Fill=\"#FF7C7C7D\" Height=\"31.7\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"23.774\"/>\n        <Path Data=\"M0,2.265L9.057,2.265 9.057,0 0,0z\" Fill=\"White\" Height=\"2.265\" Canvas.Left=\"17.548\" Canvas.Top=\"24.906\" Width=\"9.057\"/>\n        <Path Clip=\"M-14.152,-18.115L15.848,-18.115 15.848,15.847 -14.152,15.847z\" Data=\"M12.452,9.056L3.396,9.056 3.396,6.791 12.452,6.791z M7.924,0C3.548,0 0,3.547 0,7.923 0,12.3 3.548,15.847 7.924,15.847 12.3,15.847 15.848,12.3 15.848,7.923 15.848,3.547 12.3,0 7.924,0\" Fill=\"#FFD75B34\" Height=\"15.847\" Canvas.Left=\"14.152\" Canvas.Top=\"18.115\" Width=\"15.848\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Fade\" HorizontalAlignment=\"Center\" Height=\"28\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M16.039,0L0,0 0,11.99 16.039,11.99z\" Fill=\"#FF83A8CC\" Height=\"11.99\" Canvas.Left=\"6.981\" Canvas.Top=\"7.993\" Width=\"16.039\"/>\n        <Path Data=\"M20.996,3.997L2.984,3.997 2.984,17.958 0,17.958 0,0 20.996,0z\" Fill=\"#FFBED0E4\" Height=\"17.958\" Canvas.Left=\"2.024\" Canvas.Top=\"2.024\" Width=\"20.995\"/>\n        <Path Data=\"M0.958,1.013L16.998,1.013 16.998,0 0,0 0,13.003 0.958,13.003z\" Fill=\"#FFBED0E4\" Height=\"13.003\" Canvas.Left=\"6.022\" Canvas.Top=\"6.98\" Width=\"16.998\"/>\n        <Path Data=\"M18.97,0L18.97,14.973 0,14.973 0,19.982 22.966,19.982 22.966,0z\" Fill=\"White\" Height=\"19.982\" Canvas.Left=\"6.021\" Canvas.Top=\"6.98\" Width=\"22.966\"/>\n        <Path Data=\"M3.997,18.97L1.013,18.97 1.013,19.982 3.997,19.982z M0,1.012L1.013,1.012 1.013,18.97 0,18.97z M22.967,5.008L22.008,5.008 22.008,1.011 22.967,1.011z M22.008,0L1.013,0 1.013,1.012 22.008,1.012z\" Fill=\"White\" Height=\"19.982\" Canvas.Left=\"1.012\" Canvas.Top=\"1.013\" Width=\"22.967\"/>\n        <Path Data=\"M0,11.99L16.038,11.99 16.038,0 20.994,0 20.994,17.958 0,17.958 0,13.961z\" Fill=\"#FFBED0E4\" Height=\"17.958\" Canvas.Left=\"6.981\" Canvas.Top=\"7.993\" Width=\"20.995\"/>\n        <Path Data=\"F1M0,0L0,21.953 5.008,21.953 5.008,27.975 30,27.975 30,6.021 24.991,6.021 24.991,0z M1.012,1.012L23.978,1.012 23.978,20.994 1.012,20.994z M6.022,21.953L24.991,21.953 24.991,6.98 28.987,6.98 28.987,26.962 6.022,26.962z\" Fill=\"#FF7C7C7D\" Height=\"27.975\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n        <Path Data=\"M1.012,14.972L1.012,0.959 18.97,0.959 18.97,0 -0.001,0 -0.001,14.972z\" Fill=\"#FFA09FA0\" Height=\"14.973\" Canvas.Left=\"5.009\" Canvas.Top=\"6.022\" Width=\"18.97\"/>\n        <Path Data=\"F1M0,1.012L0.959,1.012 0.959,0 0,0z\" Fill=\"White\" Height=\"1.012\" Canvas.Left=\"23.019\" Canvas.Top=\"6.981\" Width=\"0.959\"/>\n        <Path Data=\"F1M0,1.012L0.958,1.012 0.958,0 0,0z\" Fill=\"White\" Height=\"1.012\" Canvas.Left=\"6.022\" Canvas.Top=\"19.983\" Width=\"0.958\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Logo\" HorizontalAlignment=\"Center\" Height=\"74.1\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"100\">\n        <Path Data=\"M0,46.668L90.836,46.668 90.004,46.668 90.004,0 0.002,0z M81.072,22.322C84.336,21.496 85.842,21.834 84.902,24.87 84.69,25.556 84.198,26.572 83.946,27.276 82.958,30.048 81.954,34.634 81.776,37.552 81.584,40.72 83.068,43.642 80.852,44.51 78.864,44.58 78.724,44.114 77.538,43.088L78.744,33.674C74.984,36.062 68.562,41.168 61.956,39.29 55.614,37.488 55.54,29.44 58.286,23.286 60.414,18.514 64.385,13.646 68.562,10.654 72.49,7.84 81.29,3.956 85.768,8.338 86.19,11.002 85.322,13.21 82.984,13.622 81.85,12.342 81.988,11.714 80.518,10.502 71.156,9.874 60.794,21.646 60.496,30.42 60.1,42.08 75.006,33.186 78.304,29.966 80.288,28.032 80.228,25.248 81.072,22.322 M2.46,40.132C7.476,43.458 17.14,40.19 21.39,37.216 35.734,27.18 14.888,23.496 10.896,21.61 3.588,18.16 8.756,12.004 17.53,11.374 19.11,11.258 21.378,11.176 22.808,11.764 24.584,12.492 24.158,13.912 25.002,15.352 27.882,15.006 28.122,11.124 26.238,9.602 19.97,4.544 -0.778,10.758 4.382,21.038 5.582,23.428 7.142,23.992 9.53,25.054 12.694,26.458 22.1,28.588 22.37,30.834 21.756,33.68 17.684,35.692 14.666,36.752 8.864,38.79 8.334,37.158 3.4,36.796 2.624,37.836 2.458,38.392 2.46,40.132 M32.526,12.568C34.9,12.486 38.868,16.178 42.542,18.3 47.37,21.09 51.418,22.392 51.71,25.18 48.324,27.982 47.402,27.928 43.472,31.8 42.24,33.014 41.2,34.482 40.01,35.846 38.54,37.53 37.772,38.218 35.376,37.214 35.248,34.816 37.916,32.858 40.392,30.39L45.024,26.272C45.652,25.646 45.904,25.38 46.49,24.856 41.916,19.36 31.38,19.05 32.526,12.568\" Fill=\"White\" Height=\"46.669\" Canvas.Left=\"4.998\" Canvas.Top=\"5\" Width=\"90.835\"/>\n        <Path Data=\"M39.17,56.666L42.502,56.666 42.502,68.336 39.17,68.334 22.5,68.334 22.5,74.168 77.496,74.166 77.517,68.334 60.83,68.334 57.499,68.336 57.499,56.666 60.83,56.666 100,56.668 100,0.001 0.001,0.001 0,56.668z M5,5L95.002,5 95.002,51.668 95.834,51.668 4.999,51.668z\" Fill=\"#FF706F70\" Height=\"74.167\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"100\"/>\n        <Path Data=\"M24.508,15.958C23.663,18.885 23.724,21.667 21.739,23.603 18.441,26.822 3.534,35.717 3.931,24.057 4.229,15.283 14.591,3.511 23.953,4.139 25.423,5.35 25.285,5.979 26.419,7.257 28.757,6.846 29.626,4.638 29.202,1.974 24.726,-2.408 15.926,1.476 11.996,4.29 7.821,7.282 3.849,12.15 1.721,16.922 -1.024,23.077 -0.95,31.124 5.392,32.927 11.996,34.805 18.42,29.697 22.179,27.31L20.973,36.724C22.159,37.75 22.3,38.217 24.287,38.146 26.504,37.277 25.02,34.356 25.212,31.187 25.389,28.271 26.394,23.684 27.382,20.912 27.633,20.209 28.125,19.193 28.337,18.506 29.278,15.47 27.772,15.132 24.508,15.958\" Fill=\"#FF5D5D5D\" Height=\"38.153\" Canvas.Left=\"61.563\" Canvas.Top=\"11.364\" Width=\"29.305\"/>\n        <Path Data=\"M0,32.322C5.017,35.649 14.679,32.381 18.93,29.407 33.274,19.37 12.427,15.686 8.435,13.801 1.128,10.351 6.296,4.195 15.07,3.564 16.651,3.449 18.919,3.367 20.348,3.954 22.125,4.683 21.699,6.103 22.542,7.543 25.422,7.197 25.663,3.314 23.778,1.793 17.51,-3.264 -3.237,2.948 1.923,13.228 3.123,15.618 4.681,16.182 7.07,17.244 10.234,18.649 19.64,20.78 19.91,23.025 19.295,25.87 15.224,27.884 12.207,28.943 6.404,30.98 5.873,29.349 0.94,28.988 0.164,30.028 -0.003,30.582 0,32.322\" Fill=\"#FF5D5D5D\" Height=\"33.722\" Canvas.Left=\"7.458\" Canvas.Top=\"12.809\" Width=\"24.99\"/>\n        <Path Data=\"M19.27,12.611C18.978,9.823 14.93,8.523 10.102,5.733 6.427,3.61 2.46,-0.082 0.087,0.001 -1.06,6.483 9.476,6.791 14.05,12.289 13.464,12.811 13.212,13.077 12.584,13.704L7.952,17.822C5.476,20.29 2.808,22.247 2.936,24.646 5.332,25.649 6.1,24.962 7.57,23.278 8.76,21.915 9.799,20.445 11.032,19.232 14.962,15.359 15.884,15.413 19.27,12.611\" Fill=\"#FF5D5D5D\" Height=\"25.113\" Canvas.Left=\"37.438\" Canvas.Top=\"17.568\" Width=\"19.271\"/>\n        <Path Data=\"M0,11.669L3.332,11.67 3.332,0 0,0.001z\" Fill=\"#FFD4D3D6\" Height=\"11.67\" Canvas.Left=\"39.17\" Canvas.Top=\"56.666\" Width=\"3.332\"/>\n        <Path Data=\"M3.331,11.669L3.331,0.001 0,0 0,11.67z\" Fill=\"#FFD4D3D6\" Height=\"11.67\" Canvas.Left=\"57.499\" Canvas.Top=\"56.666\" Width=\"3.331\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Slide\" HorizontalAlignment=\"Center\" Height=\"22\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"35\">\n        <Path Data=\"F1M0,22 L35,22 35,0 0,0z\" Fill=\"White\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"35\"/>\n        <Path Data=\"M21,18 L0,18 0,0 21,0z\" Fill=\"#FFBED0E4\" Height=\"17.958\" Canvas.Left=\"2.001\" Canvas.Top=\"2\" Width=\"21\"/>\n        <Path Data=\"F1M0,22 L25,22 25,0 0,0z M1,1 L24,1.013 24,21 1,21z\" Fill=\"#FFA09F9F\" Height=\"22\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"25\"/>\n        <Path Data=\"F1M0,22 L25,22 25,0 0,0z M1,1 L24,1.013 24,21 1,21z\" Fill=\"#FF7C7C7D\" Height=\"22\" Canvas.Left=\"10\" Canvas.Top=\"0\" Width=\"25\"/>\n        <Path Clip=\"M-12,-2L23,-2 23,20 -12,20z\" Data=\"M21,18 L0,18 0,0 21,0z\" Fill=\"#FF83A8CC\" Height=\"18\" Canvas.Left=\"12\" Opacity=\"0.5\" Canvas.Top=\"2\" Width=\"21\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Save\" HorizontalAlignment=\"Center\" Height=\"20\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\">\n        <Path Data=\"F1M0,0L0,9.824 0.351,10.175 14.036,10.175 14.387,9.824 14.387,0z\" Fill=\"White\" Height=\"10.175\" Canvas.Left=\"2.807\" Canvas.Top=\"0.702\" Width=\"14.387\"/>\n        <Path Data=\"F1M0.351,0L0,0.35 0,5.262 0.351,5.614 1.404,5.614 3.509,5.614 9.123,5.614 9.474,5.262 9.474,0.35 9.123,0z\" Fill=\"White\" Height=\"5.614\" Canvas.Left=\"4.561\" Canvas.Top=\"13.685\" Width=\"9.474\"/>\n        <Path Data=\"F1M0,0L0,18.597 1.404,20 20,20 20,0z M2.807,10.526L2.807,0.702 17.194,0.702 17.194,10.526 16.843,10.877 3.158,10.877z M4.561,18.947L4.561,14.035 4.912,13.684 13.684,13.684 14.036,14.035 14.036,18.947 13.684,19.299 8.07,19.299 8.07,14.738 7.719,14.387 6.316,14.387 5.965,14.738 5.965,19.299 4.912,19.299z\" Fill=\"#FF9263A9\" Height=\"20\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Add\" HorizontalAlignment=\"Center\" Height=\"17.35\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"17.35\">\n        <Path Data=\"M6.037,6.038L0,6.038 0,10.566 6.037,10.566 6.037,17.359 11.32,17.359 11.32,10.566 17.358,10.566 17.358,6.038 11.32,6.038 11.32,0 6.037,0z\" \n              Fill=\"#FF6EA391\" Height=\"17.35\" Width=\"17.35\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Subtract\" HorizontalAlignment=\"Center\" Height=\"4.528\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"17.35\">\n        <Path Data=\"M6.037,0 L0,0 0,4.528 6.037,4.528 11.32,4.528 17.358,4.528 17.358,0 11.32,0z\" \n              Fill=\"#FFD86344\" Height=\"4.528\" Width=\"17.35\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Package\" HorizontalAlignment=\"Center\" Height=\"33.8\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"36.8\">\n        <Path Data=\"F1M0,22.503L25.504,22.503 25.504,0 0,0z\" Fill=\"#FFAA8055\" Height=\"22.5\" Canvas.Left=\"0\" Canvas.Top=\"11.25\" Width=\"25.5\"/>\n        <Path Data=\"F1M10.502,0L0,10.748 0,33.004 10.502,23.251z\" Fill=\"#FFAA8055\" Height=\"33.\" Canvas.Left=\"26.25\" Canvas.Top=\"0\" Width=\"10.5\"/>\n        <Path Data=\"F1M9.751,0L0,10.499 12.751,10.499 22.502,0z\" Fill=\"#FFAA8055\" Height=\"10.5\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"22.5\"/>\n        <Path Data=\"F1M9.752,0L0,10.499 12.002,10.499 22.502,0z\" Fill=\"#FFAA8055\" Height=\"10.5\" Canvas.Left=\"13.5\" Canvas.Top=\"0\" Width=\"22.5\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.NewPackage\" HorizontalAlignment=\"Center\" Height=\"40.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"42\">\n        <Path Data=\"F1M0,22.503L25.504,22.503 25.504,0 0,0z\" Fill=\"#FFAA8055\" Height=\"22.5\" Canvas.Left=\"5.25\" Canvas.Top=\"18\" Width=\"25.5\"/>\n        <Path Data=\"F1M0,10.748L0,33.004 10.502,23.252 10.502,0z\" Fill=\"#FFAA8055\" Height=\"33\" Canvas.Left=\"31.5\" Canvas.Top=\"6.752\" Width=\"10.5\"/>\n        <Path Data=\"F1M6,0L6,4.5 0,4.5 0,10.5 6,10.5 15.752,0z\" Fill=\"#FFAA8055\" Height=\"10.5\" Canvas.Left=\"12\" Canvas.Top=\"6.752\" Width=\"15.752\"/>\n        <Path Data=\"F1M9.752,0L0,10.5 12.002,10.5 22.503,0z\" Fill=\"#FFAA8055\" Height=\"10.5\" Canvas.Left=\"18.752\" Canvas.Top=\"6.752\" Width=\"22.5\"/>\n        <Path Data=\"F1M6.001,0L6.001,6.001 0,6.001 0,10.502 6.001,10.502 6.001,17.252 11.252,17.252 11.252,10.502 17.252,10.502 17.252,6.001 11.252,6.001 11.252,0z\" Fill=\"#FF6EA493\" Height=\"17.25\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"17.25\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Print\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"17.5\">\n        <Path Fill=\"#ff407eb7\" Data=\" M 14.643,4.643 L 14.643,6.072 L 5.357,6.072 L 5.357,4.643 L 4.286,4.643 L 4.286,8.572 L 15.714,8.572 L 15.714,4.643 L 14.643,4.643 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 7.143,13.214 L 12.857,13.214 L 12.857,12.857 L 7.143,12.857 L 7.143,13.214 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 7.143,14.643 L 12.857,14.643 L 12.857,14.286 L 7.143,14.286 L 7.143,14.643 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 7.143,16.072 L 12.857,16.072 L 12.857,15.714 L 7.143,15.714 L 7.143,16.072 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 5.714,5.714 L 14.286,5.714 L 14.286,0.357 L 5.714,0.357 L 5.714,5.714 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 5.714,17.143 L 14.286,17.143 L 14.286,11.786 L 5.714,11.786 L 5.714,17.143 Z M 7.143,12.857 L 12.857,12.857 L 12.857,13.214 L 7.143,13.214 L 7.143,12.857 L 7.143,12.857 Z M 7.143,14.286 L 12.857,14.286 L 12.857,14.643 L 7.143,14.643 L 7.143,14.286 L 7.143,14.286 Z M 7.143,15.714 L 12.857,15.714 L 12.857,16.072 L 7.143,16.072 L 7.143,15.714 L 7.143,15.714 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 0.912,13.571 L 5.357,13.571 L 5.357,17.500 L 14.643,17.500 L 14.643,13.571 L 19.089,13.571 C 19.215,13.571 19.336,13.521 19.425,13.432 L 19.861,12.997 C 19.950,12.907 20.000,12.786 20.000,12.660 L 20.000,5.555 C 20.000,5.428 19.950,5.307 19.860,5.217 L 19.426,4.783 C 19.336,4.693 19.214,4.643 19.088,4.643 L 16.071,4.643 L 16.071,8.929 L 3.929,8.929 L 3.929,4.643 L 0.911,4.643 C 0.785,4.643 0.664,4.693 0.575,4.782 L 0.139,5.218 C 0.050,5.307 0.000,5.428 0.000,5.554 L 0.000,12.659 C 0.000,12.786 0.050,12.908 0.140,12.997 L 0.574,13.432 C 0.664,13.521 0.785,13.571 0.912,13.571 Z M 17.143,11.429 C 17.187,11.310 17.383,11.120 17.500,11.071 C 17.665,11.003 18.049,11.003 18.214,11.071 C 18.331,11.120 18.523,11.312 18.572,11.429 C 18.640,11.594 18.640,11.978 18.572,12.143 C 18.523,12.260 18.331,12.452 18.214,12.500 C 18.049,12.568 17.665,12.569 17.500,12.500 C 17.383,12.452 17.192,12.259 17.143,12.143 C 17.074,11.978 17.080,11.596 17.143,11.429 Z M 5.714,11.786 L 14.286,11.786 L 14.286,17.143 L 5.714,17.143 L 5.714,11.786 L 5.714,11.786 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 5.357,6.072 L 14.643,6.072 L 14.643,0.000 L 5.357,0.000 L 5.357,6.072 Z M 5.714,0.357 L 14.286,0.357 L 14.286,5.714 L 5.714,5.714 L 5.714,0.357 L 5.714,0.357 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Extras\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"20\">\n        <Path Fill=\"#ffffffff\" Data=\" M 12.593,7.407 L 12.617,2.971 L 3.704,2.963 L 0.370,6.262 L 0.370,11.111 L 0.370,19.630 L 13.704,19.630 L 17.037,16.296 L 17.037,7.407 L 12.593,7.407 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 3.333,2.963 L 2.963,2.963 L 2.963,3.333 L 2.593,3.333 L 2.593,3.704 L 2.222,3.704 L 2.222,4.074 L 1.852,4.074 L 1.852,4.444 L 1.482,4.444 L 1.482,4.815 L 1.111,4.815 L 1.111,5.185 L 0.741,5.185 L 0.741,5.556 L 0.370,5.556 L 0.370,5.926 L 0.000,5.926 L 0.000,20.000 L 14.074,20.000 L 14.074,19.630 L 14.444,19.630 L 14.444,19.259 L 14.815,19.259 L 14.815,18.889 L 15.185,18.889 L 15.185,18.518 L 15.556,18.518 L 15.556,18.148 L 15.926,18.148 L 15.926,17.778 L 16.296,17.778 L 16.296,17.407 L 16.667,17.407 L 16.667,17.037 L 17.037,17.037 L 17.037,16.667 L 17.407,16.667 L 17.407,7.037 L 12.963,7.037 L 12.963,2.593 L 3.333,2.593 L 3.333,2.963 Z M 0.370,6.667 L 4.444,6.667 L 4.444,10.741 L 0.370,10.741 L 0.370,6.667 L 0.370,6.667 Z M 4.815,6.667 L 8.889,6.667 L 8.889,10.741 L 4.815,10.741 L 4.815,6.667 L 4.815,6.667 Z M 6.667,4.074 L 7.037,4.074 L 7.037,4.444 L 11.111,4.444 L 11.111,8.518 L 11.482,8.518 L 11.482,8.889 L 15.556,8.889 L 15.556,12.963 L 15.926,12.963 L 15.926,12.593 L 16.296,12.593 L 16.296,12.222 L 16.667,12.222 L 16.667,11.852 L 17.037,11.852 L 17.037,7.778 L 16.667,7.778 L 16.667,8.148 L 16.296,8.148 L 16.296,8.518 L 15.926,8.518 L 15.926,8.889 L 15.556,8.889 L 15.556,8.518 L 15.926,8.518 L 15.926,8.148 L 16.296,8.148 L 16.296,7.778 L 16.667,7.778 L 16.667,7.407 L 12.593,7.407 L 12.593,7.778 L 12.222,7.778 L 12.222,8.148 L 11.852,8.148 L 11.852,8.518 L 11.482,8.518 L 11.482,8.148 L 11.852,8.148 L 11.852,7.778 L 12.222,7.778 L 12.222,7.407 L 12.593,7.407 L 12.593,3.333 L 12.222,3.333 L 12.222,3.704 L 11.852,3.704 L 11.852,4.074 L 11.482,4.074 L 11.482,4.444 L 11.111,4.444 L 11.111,4.074 L 11.482,4.074 L 11.482,3.704 L 11.852,3.704 L 11.852,3.333 L 12.222,3.333 L 12.222,2.963 L 8.148,2.963 L 8.148,3.333 L 7.778,3.333 L 7.778,3.704 L 7.407,3.704 L 7.407,4.074 L 7.037,4.074 L 7.037,3.704 L 7.407,3.704 L 7.407,3.333 L 7.778,3.333 L 7.778,2.963 L 3.704,2.963 L 3.704,3.333 L 3.333,3.333 L 3.333,3.704 L 2.963,3.704 L 2.963,4.074 L 2.593,4.074 L 2.593,4.444 L 6.667,4.444 L 6.667,4.074 L 6.667,4.074 Z M 4.815,5.926 L 5.185,5.926 L 5.185,6.296 L 9.259,6.296 L 9.259,10.370 L 9.630,10.370 L 9.630,10.741 L 13.704,10.741 L 13.704,14.815 L 14.074,14.815 L 14.074,14.444 L 14.444,14.444 L 14.444,14.074 L 14.815,14.074 L 14.815,13.704 L 15.185,13.704 L 15.185,9.630 L 14.815,9.630 L 14.815,10.000 L 14.444,10.000 L 14.444,10.370 L 14.074,10.370 L 14.074,10.741 L 13.704,10.741 L 13.704,10.370 L 14.074,10.370 L 14.074,10.000 L 14.444,10.000 L 14.444,9.630 L 14.815,9.630 L 14.815,9.259 L 10.741,9.259 L 10.741,9.630 L 10.370,9.630 L 10.370,10.000 L 10.000,10.000 L 10.000,10.370 L 9.630,10.370 L 9.630,10.000 L 10.000,10.000 L 10.000,9.630 L 10.370,9.630 L 10.370,9.259 L 10.741,9.259 L 10.741,5.185 L 10.370,5.185 L 10.370,5.556 L 10.000,5.556 L 10.000,5.926 L 9.630,5.926 L 9.630,6.296 L 9.259,6.296 L 9.259,5.926 L 9.630,5.926 L 9.630,5.556 L 10.000,5.556 L 10.000,5.185 L 10.370,5.185 L 10.370,4.815 L 6.296,4.815 L 6.296,5.185 L 5.926,5.185 L 5.926,5.556 L 5.556,5.556 L 5.556,5.926 L 5.185,5.926 L 5.185,5.556 L 5.556,5.556 L 5.556,5.185 L 5.926,5.185 L 5.926,4.815 L 1.852,4.815 L 1.852,5.185 L 1.482,5.185 L 1.482,5.556 L 1.111,5.556 L 1.111,5.926 L 0.741,5.926 L 0.741,6.296 L 4.815,6.296 L 4.815,5.926 L 4.815,5.926 Z M 0.370,11.111 L 4.444,11.111 L 4.444,15.185 L 0.370,15.185 L 0.370,11.111 L 0.370,11.111 Z M 4.815,11.111 L 8.889,11.111 L 8.889,15.185 L 4.815,15.185 L 4.815,11.111 L 4.815,11.111 Z M 9.259,11.111 L 13.333,11.111 L 13.333,15.185 L 9.259,15.185 L 9.259,11.111 L 9.259,11.111 Z M 15.926,13.333 L 15.926,12.963 L 16.296,12.963 L 16.296,12.593 L 16.667,12.593 L 16.667,12.222 L 17.037,12.222 L 17.037,16.296 L 16.667,16.296 L 16.667,16.667 L 16.296,16.667 L 16.296,17.037 L 15.926,17.037 L 15.926,17.407 L 15.556,17.407 L 15.556,13.333 L 15.926,13.333 L 15.926,13.333 Z M 14.074,15.185 L 14.074,14.815 L 14.444,14.815 L 14.444,14.444 L 14.815,14.444 L 14.815,14.074 L 15.185,14.074 L 15.185,18.148 L 14.815,18.148 L 14.815,18.518 L 14.444,18.518 L 14.444,18.889 L 14.074,18.889 L 14.074,19.259 L 13.704,19.259 L 13.704,15.185 L 14.074,15.185 L 14.074,15.185 Z M 0.370,15.556 L 4.444,15.556 L 4.444,19.630 L 0.370,19.630 L 0.370,15.556 L 0.370,15.556 Z M 4.815,15.556 L 8.889,15.556 L 8.889,19.630 L 4.815,19.630 L 4.815,15.556 L 4.815,15.556 Z M 9.259,15.556 L 13.333,15.556 L 13.333,19.630 L 9.259,19.630 L 9.259,15.556 L 9.259,15.556 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 14.815,5.185 L 20.000,5.185 L 20.000,0.000 L 14.815,0.000 L 14.815,5.185 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.User\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"23.6\">\n        <Path Fill=\"#ff3e7cb5\" Data=\" M 0.000,18.717 L 0.000,21.325 C 4.665,24.449 15.335,24.449 20.000,21.325 C 20.000,15.901 19.802,12.195 13.043,12.195 C 12.551,14.038 10.970,15.548 10.435,17.847 L 9.565,17.847 C 8.974,15.309 7.466,14.383 6.957,12.195 C 4.722,12.195 3.050,12.492 1.824,13.584 C 0.795,14.500 0.000,16.862 0.000,18.717 Z\"/>\n        <Path Fill=\"#ff3e7cb5\" Data=\" M 4.348,5.238 C 4.348,13.662 15.652,13.080 15.652,5.673 C 15.652,-2.245 4.348,-1.389 4.348,5.238 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Key\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"40\">\n        <Path Fill=\"#ffffffff\" Data=\" M 7.857,37.143 L 12.642,37.143 L 12.642,1.428 L 7.857,1.428 L 7.857,37.143 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 10.533,6.364 C 8.938,6.748 7.537,5.348 7.922,3.753 C 8.102,3.003 8.717,2.388 9.467,2.208 C 11.062,1.823 12.463,3.224 12.078,4.819 C 11.897,5.569 11.282,6.183 10.533,6.364 Z M 9.286,37.143 L 7.857,37.143 L 7.857,17.143 L 9.286,17.143 L 9.286,37.143 Z M 19.286,0.000 C 14.823,0.000 5.197,0.000 0.714,0.000 C 0.462,0.000 0.000,0.462 0.000,0.714 C 0.000,4.043 0.000,15.000 0.000,15.000 L 0.714,15.714 L 5.714,15.714 L 5.714,37.857 L 6.429,37.857 C 6.429,37.857 6.429,38.949 6.429,39.285 C 6.429,39.538 6.890,40.000 7.143,40.000 C 8.173,40.000 11.428,40.000 11.428,40.000 L 11.428,39.285 L 13.571,37.143 L 13.571,35.714 L 14.286,35.714 L 14.286,33.571 L 15.714,32.857 L 15.714,30.000 L 14.286,30.000 L 13.571,29.286 L 13.571,27.143 C 13.571,27.143 15.714,26.358 15.714,25.714 C 15.714,25.351 15.714,24.606 15.714,24.285 C 15.714,23.642 13.571,22.857 13.571,22.857 L 13.571,21.428 L 12.857,21.428 L 12.857,19.286 L 13.571,19.286 L 13.571,17.857 L 15.714,15.714 C 15.714,15.714 18.454,15.714 19.286,15.714 C 19.538,15.714 20.000,15.252 20.000,15.000 C 20.000,11.765 20.000,4.028 20.000,0.714 C 20.000,0.462 19.538,0.000 19.286,0.000 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Lock\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"25.2\">\n        <Path Fill=\"#ffecc477\" Data=\" M 5.909,1.108 C 5.387,1.484 4.490,2.423 4.091,2.927 C 3.776,3.325 3.182,4.237 3.182,4.745 C 3.182,6.029 3.182,9.745 3.182,9.745 C 3.182,9.745 1.559,9.745 0.909,9.745 C 0.588,9.745 0.000,10.333 0.000,10.654 C 0.000,13.970 0.000,21.166 0.000,24.290 C 0.000,24.612 0.588,25.199 0.909,25.199 C 5.346,25.199 14.613,25.199 19.091,25.199 C 19.412,25.199 20.000,24.612 20.000,24.290 C 20.000,21.141 20.000,13.793 20.000,10.654 C 20.000,10.333 19.412,9.745 19.091,9.745 C 18.555,9.745 16.818,9.745 16.818,9.745 C 16.818,9.745 16.818,5.955 16.818,4.745 C 16.818,4.237 16.226,3.324 15.909,2.927 C 15.507,2.425 14.600,1.501 14.091,1.108 C 13.689,0.798 12.763,0.333 12.273,0.199 C 11.176,-0.099 8.840,-0.032 7.727,0.199 C 7.230,0.303 6.321,0.811 5.909,1.108 Z M 5.909,4.745 C 6.275,4.216 7.171,3.248 7.727,2.927 C 8.038,2.747 8.734,2.518 9.091,2.472 C 9.542,2.414 10.462,2.390 10.909,2.472 C 11.262,2.537 11.971,2.731 12.273,2.927 C 12.812,3.277 13.743,4.204 14.091,4.745 C 14.285,5.047 14.545,5.749 14.545,6.108 C 14.545,6.994 14.545,9.745 14.545,9.745 L 5.454,9.745 C 5.454,9.745 5.454,6.994 5.454,6.108 C 5.454,5.749 5.705,5.040 5.909,4.745 Z M 9.091,12.927 C 9.511,12.753 10.491,12.748 10.909,12.927 C 11.204,13.053 11.671,13.550 11.818,13.836 C 12.026,14.240 12.057,15.267 11.818,15.654 C 11.685,15.870 10.909,16.108 10.909,16.108 L 10.909,22.018 L 9.091,22.018 L 9.091,16.108 C 9.091,16.108 8.327,15.863 8.182,15.654 C 7.923,15.280 8.034,14.266 8.182,13.836 C 8.286,13.532 8.794,13.050 9.091,12.927 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Calculator\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"29.25\" Height=\"42\">\n        <Path Fill=\"#ffffffff\" Data=\" M 0.751,0.750 L 0.751,41.255 L 28.504,41.255 L 28.504,0.750 L 0.751,0.750 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 9.002,16.502 L 14.252,16.502 L 14.252,12.752 L 9.002,12.752 L 9.002,16.502 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 15.003,16.502 L 20.253,16.502 L 20.253,12.752 L 15.003,12.752 L 15.003,16.502 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 3.001,16.502 L 8.252,16.502 L 8.252,12.752 L 3.001,12.752 L 3.001,16.502 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 3.001,21.753 L 8.252,21.753 L 8.252,18.002 L 3.001,18.002 L 3.001,21.753 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 9.002,21.753 L 14.252,21.753 L 14.252,18.002 L 9.002,18.002 L 9.002,21.753 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 15.003,21.753 L 20.253,21.753 L 20.253,18.002 L 15.003,18.002 L 15.003,21.753 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 3.001,27.004 L 8.252,27.004 L 8.252,23.253 L 3.001,23.253 L 3.001,27.004 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 9.002,27.004 L 14.252,27.004 L 14.252,23.253 L 9.002,23.253 L 9.002,27.004 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 15.003,27.004 L 20.253,27.004 L 20.253,23.253 L 15.003,23.253 L 15.003,27.004 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 3.001,32.254 L 8.252,32.254 L 8.252,28.504 L 3.001,28.504 L 3.001,32.254 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 9.002,32.254 L 14.252,32.254 L 14.252,28.504 L 9.002,28.504 L 9.002,32.254 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 15.003,32.254 L 20.253,32.254 L 20.253,28.504 L 15.003,28.504 L 15.003,32.254 Z\"/>\n\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 0.000,1.500 C 0.000,10.839 0.000,42.005 0.000,42.005 L 29.255,42.005 C 29.255,42.005 29.255,10.683 29.255,1.500 C 29.255,0.970 28.285,0.000 27.754,0.000 C 21.427,0.000 7.771,0.000 1.501,0.000 C 0.970,0.000 0.000,0.970 0.000,1.500 Z M 2.251,0.750 L 27.004,0.750 C 27.829,0.750 28.504,1.425 28.504,2.250 L 28.504,41.255 L 0.751,41.255 L 0.751,2.250 C 0.751,1.425 1.426,0.750 2.251,0.750 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 3.001,37.505 L 14.252,37.505 L 14.252,33.754 L 3.001,33.754 L 3.001,37.505 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 21.003,16.502 L 26.254,16.502 L 26.254,12.752 L 21.003,12.752 L 21.003,16.502 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 21.003,21.753 L 26.254,21.753 L 26.254,18.002 L 21.003,18.002 L 21.003,21.753 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 21.003,27.004 L 26.254,27.004 L 26.254,23.253 L 21.003,23.253 L 21.003,27.004 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 21.003,32.254 L 26.254,32.254 L 26.254,28.504 L 21.003,28.504 L 21.003,32.254 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 15.003,37.505 L 20.253,37.505 L 20.253,33.754 L 15.003,33.754 L 15.003,37.505 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 21.003,37.505 L 26.254,37.505 L 26.254,33.754 L 21.003,33.754 L 21.003,37.505 Z\"/>\n\n        <Path Fill=\"#ff407eb7\" Data=\" M 3.001,3.751 C 3.001,5.199 3.001,9.751 3.001,9.751 L 26.254,9.751 C 26.254,9.751 26.254,5.162 26.254,3.751 C 26.254,3.485 25.769,3.001 25.504,3.001 C 20.253,3.001 9.068,3.001 3.751,3.001 C 3.486,3.001 3.001,3.485 3.001,3.751 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Filter\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"20\">\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 0.000,2.222 L 8.148,10.370 L 8.148,20.000 L 11.852,20.000 L 11.852,10.370 L 20.000,2.222 L 20.000,0.000 L 0.000,0.000 L 0.000,2.222 Z M 1.111,1.482 L 1.111,1.111 L 1.482,1.111 L 9.630,9.259 L 9.630,18.889 L 9.259,18.889 L 9.259,9.630 L 1.111,1.482 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 1.111,1.482 L 9.259,9.630 L 9.259,18.889 L 9.630,18.889 L 9.630,9.259 L 1.482,1.111 L 1.111,1.111 L 1.111,1.482 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Company\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"21.250\">\n        <Path Fill=\"#ffffffff\" Data=\" M 10.000,15.625 L 18.125,15.625 L 18.125,1.875 L 10.000,1.875 L 10.000,15.625 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 1.875,18.125 L 5.625,18.125 L 5.625,9.375 L 1.875,9.375 L 1.875,18.125 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 8.125,21.250 L 20.000,21.250 L 20.000,0.000 L 8.125,0.000 L 8.125,21.250 Z M 10.000,1.875 L 11.875,1.875 L 11.875,4.375 L 10.000,4.375 L 10.000,1.875 L 10.000,1.875 Z M 13.125,1.875 L 15.000,1.875 L 15.000,4.375 L 13.125,4.375 L 13.125,1.875 L 13.125,1.875 Z M 16.250,1.875 L 18.125,1.875 L 18.125,4.375 L 16.250,4.375 L 16.250,1.875 L 16.250,1.875 Z M 10.000,5.625 L 11.875,5.625 L 11.875,8.125 L 10.000,8.125 L 10.000,5.625 L 10.000,5.625 Z M 13.125,5.625 L 15.000,5.625 L 15.000,8.125 L 13.125,8.125 L 13.125,5.625 L 13.125,5.625 Z M 16.250,5.625 L 18.125,5.625 L 18.125,8.125 L 16.250,8.125 L 16.250,5.625 L 16.250,5.625 Z M 10.000,9.375 L 11.875,9.375 L 11.875,11.875 L 10.000,11.875 L 10.000,9.375 L 10.000,9.375 Z M 13.125,9.375 L 15.000,9.375 L 15.000,11.875 L 13.125,11.875 L 13.125,9.375 L 13.125,9.375 Z M 16.250,9.375 L 18.125,9.375 L 18.125,11.875 L 16.250,11.875 L 16.250,9.375 L 16.250,9.375 Z M 10.000,13.125 L 11.875,13.125 L 11.875,15.625 L 10.000,15.625 L 10.000,13.125 L 10.000,13.125 Z M 13.125,13.125 L 15.000,13.125 L 15.000,15.625 L 13.125,15.625 L 13.125,13.125 L 13.125,13.125 Z M 16.250,13.125 L 18.125,13.125 L 18.125,15.625 L 16.250,15.625 L 16.250,13.125 L 16.250,13.125 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 0.000,21.250 L 7.500,21.250 L 7.500,7.500 L 0.000,7.500 L 0.000,21.250 Z M 1.875,9.375 L 3.125,9.375 L 3.125,10.625 L 1.875,10.625 L 1.875,9.375 L 1.875,9.375 Z M 4.375,9.375 L 5.625,9.375 L 5.625,10.625 L 4.375,10.625 L 4.375,9.375 L 4.375,9.375 Z M 1.875,11.875 L 3.125,11.875 L 3.125,13.125 L 1.875,13.125 L 1.875,11.875 L 1.875,11.875 Z M 4.375,11.875 L 5.625,11.875 L 5.625,13.125 L 4.375,13.125 L 4.375,11.875 L 4.375,11.875 Z M 1.875,14.375 L 3.125,14.375 L 3.125,15.625 L 1.875,15.625 L 1.875,14.375 L 1.875,14.375 Z M 4.375,14.375 L 5.625,14.375 L 5.625,15.625 L 4.375,15.625 L 4.375,14.375 L 4.375,14.375 Z M 1.875,16.875 L 3.125,16.875 L 3.125,18.125 L 1.875,18.125 L 1.875,16.875 L 1.875,16.875 Z M 4.375,16.875 L 5.625,16.875 L 5.625,18.125 L 4.375,18.125 L 4.375,16.875 L 4.375,16.875 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Database\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"29.574\">\n        <Path Fill=\"#ff797a7a\" Data=\" M 20.000,3.437 C 20.000,5.335 15.523,6.874 10.000,6.874 C 4.477,6.874 0.000,5.335 0.000,3.437 C 0.000,1.539 4.477,0.000 10.000,0.000 C 15.523,0.000 20.000,1.539 20.000,3.437 Z\"/>\n        <Path Fill=\"#ff797a7a\" Data=\" M 20.000,4.219 L 19.958,4.219 C 19.533,5.982 15.241,7.369 10.000,7.369 C 4.759,7.369 0.467,5.982 0.042,4.219 L 0.000,4.219 C 0.000,4.219 0.000,26.125 0.000,26.137 C 0.000,28.035 4.477,29.574 10.000,29.574 C 15.523,29.574 20.000,28.035 20.000,26.137 C 20.000,26.124 20.000,4.219 20.000,4.219 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.PrintOptions\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\" Height=\"30\">\n        <Path Fill=\"#ffffffff\" Data=\" M 14.000,27.500 L 14.000,26.500 L 9.500,26.500 L 8.500,25.500 L 8.500,17.000 L 9.500,16.000 L 14.000,16.000 L 14.000,11.000 L 20.500,11.000 L 20.500,7.130 L 13.866,0.500 L 0.500,0.500 L 0.500,27.500 L 14.000,27.500 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 15.000,17.500 L 24.000,17.500 L 24.000,12.000 L 15.000,12.000 L 15.000,17.500 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 15.000,29.500 L 24.000,29.500 L 24.000,24.000 L 15.000,24.000 L 15.000,29.500 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 27.000,24.500 L 28.500,24.500 L 28.500,23.000 L 27.000,23.000 L 27.000,24.500 Z\"/>\n\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.000,10.500 L 18.000,10.500 L 18.000,10.000 L 7.000,10.000 L 7.000,10.500 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 14.000,14.500 L 14.000,14.000 L 7.000,14.000 L 7.000,14.500 L 14.000,14.500 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 8.500,18.500 L 8.500,18.000 L 7.000,18.000 L 7.000,18.500 L 8.500,18.500 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 8.500,22.500 L 8.500,22.000 L 7.000,22.000 L 7.000,22.500 L 8.500,22.500 Z\"/>\n\n        <Path Fill=\"#ff407eb6\" Data=\" M 24.500,16.500 L 24.500,18.000 L 14.500,18.000 L 14.500,16.500 L 13.500,16.500 L 13.500,20.500 L 25.500,20.500 L 25.500,16.500 L 24.500,16.500 Z\"/>\n        <Path Fill=\"#ff407eb6\" Data=\" M 16.500,26.000 L 22.500,26.000 L 22.500,25.500 L 16.500,25.500 L 16.500,26.000 Z\"/>\n        <Path Fill=\"#ff407eb6\" Data=\" M 16.500,28.000 L 22.500,28.000 L 22.500,27.500 L 16.500,27.500 L 16.500,28.000 Z\"/>\n\n        <Path Fill=\"#ff7f7e7e\" Data=\" M 9.000,17.000 L 9.000,25.500 L 9.500,26.000 L 14.500,26.000 L 14.500,30.000 L 24.500,30.000 L 24.500,26.000 L 29.500,26.000 L 30.000,25.500 L 30.000,17.000 L 29.500,16.500 L 26.000,16.500 L 26.000,21.000 L 13.000,21.000 L 13.000,16.500 L 9.500,16.500 L 9.000,17.000 Z M 27.000,23.000 L 28.500,23.000 L 28.500,24.500 L 27.000,24.500 L 27.000,23.000 L 27.000,23.000 Z M 15.000,24.000 L 24.000,24.000 L 24.000,29.500 L 15.000,29.500 L 15.000,24.000 L 15.000,24.000 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 14.000,27.500 L 0.500,27.500 L 0.500,0.500 L 13.500,0.500 L 13.500,7.500 L 20.500,7.500 L 20.500,11.000 L 21.000,11.000 L 21.000,7.130 L 13.867,0.000 L 0.000,0.000 L 0.000,28.000 L 14.000,28.000 L 14.000,27.500 Z M 20.500,7.130 L 13.867,7.130 L 13.866,0.500 L 20.500,7.130 Z\"/>\n        <Path Fill=\"#ff999a99\" Data=\" M 6.000,10.500 C 6.000,11.328 5.328,12.000 4.500,12.000 C 3.672,12.000 3.000,11.328 3.000,10.500 C 3.000,9.672 3.672,9.000 4.500,9.000 C 5.328,9.000 6.000,9.672 6.000,10.500 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 4.500,15.500 C 3.948,15.500 3.500,15.052 3.500,14.500 C 3.500,13.948 3.948,13.500 4.500,13.500 C 5.052,13.500 5.500,13.948 5.500,14.500 C 5.500,15.052 5.052,15.500 4.500,15.500 Z M 4.500,13.000 C 3.672,13.000 3.000,13.672 3.000,14.500 C 3.000,15.329 3.672,16.000 4.500,16.000 C 5.328,16.000 6.000,15.329 6.000,14.500 C 6.000,13.672 5.328,13.000 4.500,13.000 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 4.500,19.500 C 3.948,19.500 3.500,19.052 3.500,18.500 C 3.500,17.947 3.948,17.500 4.500,17.500 C 5.052,17.500 5.500,17.947 5.500,18.500 C 5.500,19.052 5.052,19.500 4.500,19.500 Z M 4.500,17.000 C 3.672,17.000 3.000,17.672 3.000,18.500 C 3.000,19.328 3.672,20.000 4.500,20.000 C 5.328,20.000 6.000,19.328 6.000,18.500 C 6.000,17.672 5.328,17.000 4.500,17.000 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 4.500,23.500 C 3.948,23.500 3.500,23.052 3.500,22.500 C 3.500,21.947 3.948,21.500 4.500,21.500 C 5.052,21.500 5.500,21.947 5.500,22.500 C 5.500,23.052 5.052,23.500 4.500,23.500 Z M 4.500,21.000 C 3.672,21.000 3.000,21.672 3.000,22.500 C 3.000,23.328 3.672,24.000 4.500,24.000 C 5.328,24.000 6.000,23.328 6.000,22.500 C 6.000,21.672 5.328,21.000 4.500,21.000 Z\"/>\n        <Path Fill=\"#ff7a7f82\" Data=\" M 14.500,18.000 L 24.500,18.000 L 24.500,11.500 L 14.500,11.500 L 14.500,18.000 Z M 15.000,12.000 L 24.000,12.000 L 24.000,17.500 L 15.000,17.500 L 15.000,12.000 L 15.000,12.000 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Quick\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"35\">\n        <Path Fill=\"#ffeac577\" Data=\" M 0.000,17.500 L 0.000,18.125 L 7.500,18.125 L 0.000,34.375 L 0.000,35.000 L 2.500,35.000 L 17.500,14.375 L 10.625,14.375 L 20.000,0.000 L 8.125,0.000 L 0.000,17.500 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Permission\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"18.36\">\n        <Path Fill=\"#ff3e7cb5\" Data=\" M 11.475,13.114 C 11.475,13.114 11.541,11.880 11.475,11.475 C 11.434,11.219 11.278,10.715 11.148,10.491 C 10.825,9.938 9.821,8.852 9.180,8.852 C 8.784,8.852 7.541,8.852 7.541,8.852 L 5.902,12.131 L 5.574,12.131 L 3.934,8.852 C 3.934,8.852 2.687,8.852 2.295,8.852 C 1.655,8.852 0.668,9.949 0.328,10.491 C 0.148,10.778 0.000,11.803 0.000,11.803 L 0.000,14.098 C 0.000,14.098 0.941,14.905 1.311,15.082 C 1.617,15.227 2.623,15.409 2.623,15.409 L 9.157,15.409 L 11.475,13.114 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 17.717,10.173 L 16.406,10.173 L 16.406,8.862 L 17.717,8.862 L 17.717,10.173 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 9.572,17.375 L 8.944,16.875 L 13.597,12.303 L 14.131,12.731 L 9.572,17.375 Z\"/>\n        <Path Fill=\"#ffecc477\" Data=\" M 17.057,10.171 C 16.695,10.172 16.401,9.879 16.400,9.517 C 16.399,9.155 16.692,8.860 17.054,8.860 C 17.416,8.859 17.711,9.152 17.712,9.514 C 17.712,9.876 17.419,10.170 17.057,10.171 Z M 13.785,13.102 L 9.860,17.046 L 9.204,17.047 L 9.204,16.722 L 13.129,12.776 L 13.784,12.447 L 13.785,13.102 Z M 16.007,6.483 L 14.670,6.625 L 11.809,9.172 L 11.811,10.159 L 12.793,11.142 L 12.800,12.121 L 8.205,16.706 L 8.223,18.033 L 8.552,18.360 L 9.863,18.357 L 9.862,18.029 L 11.174,18.026 L 11.173,17.699 L 11.829,17.697 L 11.826,16.385 L 12.809,16.383 L 12.809,16.055 L 13.464,16.054 L 13.464,15.726 L 13.792,15.725 L 13.789,14.414 L 15.070,14.396 L 15.555,13.911 L 16.232,14.589 L 17.214,14.588 L 20.000,11.776 L 20.000,10.465 L 16.007,6.483 Z\"/>\n        <Path Fill=\"#ff3e7cb5\" Data=\" M 8.852,5.081 C 8.852,6.801 7.458,8.196 5.738,8.196 C 4.018,8.196 2.623,6.801 2.623,5.081 C 2.623,3.361 4.018,1.967 5.738,1.967 C 7.458,1.967 8.852,3.361 8.852,5.081 Z\"/>\n        <Path Fill=\"#ff6da391\" Data=\" M 12.546,11.141 L 11.564,10.158 L 11.562,9.171 L 12.447,8.382 L 12.131,7.868 L 11.475,6.885 C 11.475,6.885 10.235,6.791 9.836,6.885 C 9.479,6.969 8.525,7.541 8.525,7.541 L 8.197,7.868 L 8.197,8.688 C 8.592,8.688 9.127,8.688 9.362,8.688 C 10.003,8.688 11.007,9.774 11.330,10.328 C 11.460,10.551 11.616,11.055 11.658,11.311 C 11.697,11.552 11.689,12.084 11.677,12.478 L 12.195,12.478 L 12.553,12.121 L 12.546,11.141 Z\"/>\n        <Path Fill=\"#ff6da391\" Data=\" M 16.393,3.114 C 16.393,4.834 14.999,6.229 13.279,6.229 C 11.559,6.229 10.164,4.834 10.164,3.114 C 10.164,1.394 11.559,0.000 13.279,0.000 C 14.999,0.000 16.393,1.394 16.393,3.114 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.ItemTag\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"15\">\n        <Path Fill=\"#ffffffff\" Data=\" M 3.929,7.951 L 3.929,11.332 L 7.285,14.643 L 19.140,14.643 L 19.643,14.141 L 19.643,4.809 L 19.521,4.643 L 7.237,4.643 L 3.929,7.951 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 3.571,7.857 L 3.571,11.429 L 7.143,15.000 L 19.286,15.000 L 20.000,14.286 L 20.000,4.643 L 19.643,4.286 L 7.143,4.286 L 3.571,7.857 Z M 3.929,7.999 L 7.285,4.643 L 19.474,4.643 L 19.643,4.857 L 19.643,14.093 L 19.093,14.643 L 7.332,14.643 L 3.929,11.284 L 3.929,7.999 Z\"/>\n        <Path Fill=\"#ff3e7cb5\" Data=\" M 7.047,3.929 L 17.143,3.929 L 17.143,0.000 L 0.000,0.000 L 0.000,7.857 L 3.095,7.857 L 7.047,3.929 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 7.857,10.714 C 7.265,10.714 6.786,10.235 6.786,9.643 C 6.786,9.051 7.265,8.572 7.857,8.572 C 8.449,8.572 8.928,9.051 8.928,9.643 C 8.928,10.235 8.449,10.714 7.857,10.714 Z M 7.857,8.214 C 7.068,8.214 6.429,8.854 6.429,9.643 C 6.429,10.432 7.068,11.071 7.857,11.071 C 8.646,11.071 9.285,10.432 9.285,9.643 C 9.285,8.854 8.646,8.214 7.857,8.214 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Report\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"26.66\">\n        <Path Fill=\"#ffffffff\" Data=\" M 0.476,26.190 L 19.524,26.190 L 19.524,0.476 L 0.476,0.476 L 0.476,26.190 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 2.381,14.762 L 7.143,14.762 L 7.143,14.286 L 2.381,14.286 L 2.381,14.762 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 2.381,3.333 L 7.143,3.333 L 7.143,2.857 L 2.381,2.857 L 2.381,3.333 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,7.143 L 12.857,7.143 L 12.857,6.667 L 7.143,6.667 L 7.143,7.143 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,22.381 L 12.857,22.381 L 12.857,21.905 L 7.143,21.905 L 7.143,22.381 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,5.238 L 12.857,5.238 L 12.857,4.762 L 7.143,4.762 L 7.143,5.238 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,9.047 L 12.857,9.047 L 12.857,8.571 L 7.143,8.571 L 7.143,9.047 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,10.952 L 12.857,10.952 L 12.857,10.476 L 7.143,10.476 L 7.143,10.952 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,12.857 L 12.857,12.857 L 12.857,12.381 L 7.143,12.381 L 7.143,12.857 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,16.667 L 12.857,16.667 L 12.857,16.190 L 7.143,16.190 L 7.143,16.667 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,18.571 L 12.857,18.571 L 12.857,18.095 L 7.143,18.095 L 7.143,18.571 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.143,20.476 L 12.857,20.476 L 12.857,20.000 L 7.143,20.000 L 7.143,20.476 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,7.143 L 17.619,7.143 L 17.619,6.667 L 13.810,6.667 L 13.810,7.143 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,22.381 L 17.619,22.381 L 17.619,21.905 L 13.810,21.905 L 13.810,22.381 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,5.238 L 17.619,5.238 L 17.619,4.762 L 13.810,4.762 L 13.810,5.238 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,9.047 L 17.619,9.047 L 17.619,8.571 L 13.810,8.571 L 13.810,9.047 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,10.952 L 17.619,10.952 L 17.619,10.476 L 13.810,10.476 L 13.810,10.952 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,12.857 L 17.619,12.857 L 17.619,12.381 L 13.810,12.381 L 13.810,12.857 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,16.667 L 17.619,16.667 L 17.619,16.190 L 13.810,16.190 L 13.810,16.667 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,18.571 L 17.619,18.571 L 17.619,18.095 L 13.810,18.095 L 13.810,18.571 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 13.810,20.476 L 17.619,20.476 L 17.619,20.000 L 13.810,20.000 L 13.810,20.476 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 0.000,26.667 L 20.000,26.667 L 20.000,0.000 L 0.000,0.000 L 0.000,26.667 Z M 0.476,0.476 L 19.524,0.476 L 19.524,26.190 L 0.476,26.190 L 0.476,0.476 L 0.476,0.476 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Table\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"18\">\n        <Path Fill=\"#ffffffff\" Data=\" M 9.756,3.415 L 5.366,3.415 L 5.366,5.854 L 9.756,5.854 L 9.756,3.415 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 14.634,3.415 L 10.244,3.415 L 10.244,5.854 L 14.634,5.854 L 14.634,3.415 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 10.244,8.781 L 14.634,8.781 L 14.634,6.341 L 10.244,6.341 L 10.244,8.781 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 5.366,8.781 L 9.756,8.781 L 9.756,6.341 L 5.366,6.341 L 5.366,8.781 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 5.366,11.707 L 9.756,11.707 L 9.756,9.268 L 5.366,9.268 L 5.366,11.707 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 10.244,11.707 L 14.634,11.707 L 14.634,9.268 L 10.244,9.268 L 10.244,11.707 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 5.366,14.634 L 9.756,14.634 L 9.756,12.195 L 5.366,12.195 L 5.366,14.634 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 10.244,14.634 L 14.634,14.634 L 14.634,12.195 L 10.244,12.195 L 10.244,14.634 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 9.756,17.561 L 9.756,15.122 L 5.366,15.122 L 5.366,17.561 L 9.756,17.561 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 14.634,17.561 L 14.634,15.122 L 10.244,15.122 L 10.244,17.561 L 14.634,17.561 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 4.878,3.415 L 0.488,3.415 L 0.488,5.854 L 4.878,5.854 L 4.878,3.415 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 19.512,5.854 L 19.512,3.415 L 15.122,3.415 L 15.122,5.854 L 19.512,5.854 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 0.488,6.341 L 0.488,8.781 L 4.878,8.781 L 4.878,6.341 L 0.488,6.341 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 19.512,8.781 L 19.512,6.341 L 15.122,6.341 L 15.122,8.781 L 19.512,8.781 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 0.488,9.268 L 0.488,11.707 L 4.878,11.707 L 4.878,9.268 L 0.488,9.268 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 19.512,11.707 L 19.512,9.268 L 15.122,9.268 L 15.122,11.707 L 19.512,11.707 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 0.488,12.195 L 0.488,14.634 L 4.878,14.634 L 4.878,12.195 L 0.488,12.195 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 19.512,14.634 L 19.512,12.195 L 15.122,12.195 L 15.122,14.634 L 19.512,14.634 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 4.878,17.561 L 4.878,15.122 L 0.488,15.122 L 0.488,17.561 L 4.878,17.561 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 19.512,15.122 L 15.122,15.122 L 15.122,17.561 L 19.512,17.561 L 19.512,15.122 Z\"/>\n        <Path Fill=\"#ff6b6c6c\" Data=\" M 0.000,18.049 L 20.000,18.049 L 20.000,0.000 L 0.000,0.000 L 0.000,18.049 Z M 0.488,3.415 L 19.512,3.415 L 19.512,17.561 L 0.488,17.561 L 0.488,3.415 L 0.488,3.415 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.488,5.854 L 0.488,6.341 L 4.878,6.341 L 4.878,8.781 L 0.488,8.781 L 0.488,9.268 L 4.878,9.268 L 4.878,11.707 L 0.488,11.707 L 0.488,12.195 L 4.878,12.195 L 4.878,14.634 L 0.488,14.634 L 0.488,15.122 L 4.878,15.122 L 4.878,17.561 L 5.366,17.561 L 5.366,15.122 L 9.756,15.122 L 9.756,17.561 L 10.244,17.561 L 10.244,15.122 L 14.634,15.122 L 14.634,17.561 L 15.122,17.561 L 15.122,15.122 L 19.512,15.122 L 19.512,14.634 L 15.122,14.634 L 15.122,12.195 L 19.512,12.195 L 19.512,11.707 L 15.122,11.707 L 15.122,9.268 L 19.512,9.268 L 19.512,8.781 L 15.122,8.781 L 15.122,6.341 L 19.512,6.341 L 19.512,5.854 L 15.122,5.854 L 15.122,3.415 L 14.634,3.415 L 14.634,5.854 L 10.244,5.854 L 10.244,3.415 L 9.756,3.415 L 9.756,5.854 L 5.366,5.854 L 5.366,3.415 L 4.878,3.415 L 4.878,5.854 L 0.488,5.854 Z M 5.366,6.341 L 9.756,6.341 L 9.756,8.781 L 5.366,8.781 L 5.366,6.341 L 5.366,6.341 Z M 10.244,6.341 L 14.634,6.341 L 14.634,8.781 L 10.244,8.781 L 10.244,6.341 L 10.244,6.341 Z M 5.366,9.268 L 9.756,9.268 L 9.756,11.707 L 5.366,11.707 L 5.366,9.268 L 5.366,9.268 Z M 10.244,9.268 L 14.634,9.268 L 14.634,11.707 L 10.244,11.707 L 10.244,9.268 L 10.244,9.268 Z M 5.366,12.195 L 9.756,12.195 L 9.756,14.634 L 5.366,14.634 L 5.366,12.195 L 5.366,12.195 Z M 10.244,12.195 L 14.634,12.195 L 14.634,14.634 L 10.244,14.634 L 10.244,12.195 L 10.244,12.195 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Form\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"18.2\">\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.454,16.727 L 14.182,16.727 L 14.182,7.273 L 1.454,7.273 L 1.454,16.727 Z M 1.818,7.636 L 13.818,7.636 L 13.818,16.364 L 1.818,16.364 L 1.818,7.636 L 1.818,7.636 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 15.273,8.364 L 18.545,8.364 L 18.545,7.273 L 15.273,7.273 L 15.273,8.364 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 15.273,10.909 L 18.545,10.909 L 18.545,9.818 L 15.273,9.818 L 15.273,10.909 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 15.273,16.000 L 18.545,16.000 L 18.545,14.909 L 15.273,14.909 L 15.273,16.000 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 15.273,13.455 L 18.545,13.455 L 18.545,12.364 L 15.273,12.364 L 15.273,13.455 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 20.000,3.636 L 19.636,3.636 L 19.636,17.818 L 0.364,17.818 L 0.364,3.636 L 0.000,3.636 L 0.000,18.182 L 20.000,18.182 L 20.000,3.636 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 2.182,5.818 L 5.455,5.818 L 5.455,4.727 L 2.182,4.727 L 2.182,5.818 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 6.545,5.818 L 9.818,5.818 L 9.818,4.727 L 6.545,4.727 L 6.545,5.818 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 10.909,5.818 L 14.182,5.818 L 14.182,4.727 L 10.909,4.727 L 10.909,5.818 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 15.273,5.818 L 18.545,5.818 L 18.545,4.727 L 15.273,4.727 L 15.273,5.818 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 19.636,3.636 L 0.364,3.636 L 0.364,17.818 L 19.636,17.818 L 19.636,3.636 Z M 2.182,4.727 L 5.455,4.727 L 5.455,5.818 L 2.182,5.818 L 2.182,4.727 L 2.182,4.727 Z M 6.545,4.727 L 9.818,4.727 L 9.818,5.818 L 6.545,5.818 L 6.545,4.727 L 6.545,4.727 Z M 10.909,4.727 L 14.182,4.727 L 14.182,5.818 L 10.909,5.818 L 10.909,4.727 L 10.909,4.727 Z M 15.273,4.727 L 18.545,4.727 L 18.545,5.818 L 15.273,5.818 L 15.273,4.727 L 15.273,4.727 Z M 15.273,7.273 L 18.545,7.273 L 18.545,8.364 L 15.273,8.364 L 15.273,7.273 L 15.273,7.273 Z M 15.273,9.818 L 18.545,9.818 L 18.545,10.909 L 15.273,10.909 L 15.273,9.818 L 15.273,9.818 Z M 15.273,12.364 L 18.545,12.364 L 18.545,13.455 L 15.273,13.455 L 15.273,12.364 L 15.273,12.364 Z M 15.273,14.909 L 18.545,14.909 L 18.545,16.000 L 15.273,16.000 L 15.273,14.909 L 15.273,14.909 Z M 1.454,7.273 L 14.182,7.273 L 14.182,16.727 L 1.454,16.727 L 1.454,7.273 L 1.454,7.273 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\" M 1.818,16.364 L 13.818,16.364 L 13.818,7.636 L 1.818,7.636 L 1.818,16.364 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 20.000,3.636 L 20.000,0.000 L 0.000,0.000 L 0.000,3.636 L 20.000,3.636 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.BlockUser\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"19.7\">\n        <Path Fill=\"#ffffffff\" Data=\" M 18.750,15.313 C 18.750,17.039 17.351,18.438 15.625,18.438 C 13.900,18.438 12.501,17.039 12.501,15.313 C 12.501,13.587 13.900,12.188 15.625,12.188 C 17.351,12.188 18.750,13.587 18.750,15.313 Z\"/>\n        <Path Fill=\"#ffd55a33\" Data=\" M 18.284,16.948 L 13.992,12.653 C 14.467,12.360 15.026,12.188 15.625,12.188 C 17.351,12.188 18.750,13.587 18.750,15.313 C 18.750,15.913 18.578,16.472 18.284,16.948 Z M 12.501,15.313 C 12.501,14.713 12.673,14.154 12.967,13.678 L 17.261,17.972 C 16.785,18.265 16.226,18.438 15.625,18.438 C 13.900,18.438 12.501,17.039 12.501,15.313 Z M 15.625,10.939 C 13.209,10.939 11.251,12.897 11.251,15.313 C 11.251,17.729 13.209,19.688 15.625,19.688 C 18.041,19.688 20.000,17.729 20.000,15.313 C 20.000,12.897 18.041,10.939 15.625,10.939 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 10.834,15.313 C 10.834,13.305 12.071,11.587 13.824,10.875 C 13.824,10.875 13.822,10.435 13.750,10.313 C 13.380,9.675 11.959,8.953 11.250,8.750 C 10.800,8.621 9.375,8.750 9.375,8.750 L 7.500,12.813 L 6.875,12.813 L 5.000,8.750 C 5.000,8.750 3.576,8.621 3.125,8.750 C 2.417,8.953 1.054,9.714 0.625,10.313 C 0.337,10.715 0.000,11.694 0.000,12.188 C 0.000,12.977 0.000,15.313 0.000,15.313 C 0.000,15.313 2.008,16.876 2.813,16.876 C 4.832,16.876 11.100,16.876 11.100,16.876 C 10.931,16.385 10.834,15.861 10.834,15.313 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 11.250,4.063 C 11.250,6.306 9.431,8.125 7.188,8.125 C 4.944,8.125 3.125,6.306 3.125,4.063 C 3.125,1.819 4.944,0.000 7.188,0.000 C 9.431,0.000 11.250,1.819 11.250,4.063 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Synchronize.Thin\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"16.6\">\n        <Path Fill=\"#ff7b7a7a\" Data=\"F1 M 19.999,6.552 L 18.278,7.629 C 17.926,3.364 14.344,0.000 9.990,0.000 C 6.715,0.000 3.734,1.932 2.395,4.921 L 3.552,5.440 C 4.687,2.905 7.214,1.268 9.990,1.268 C 13.621,1.268 16.618,4.027 16.998,7.559 L 15.388,6.553 L 15.389,8.859 L 17.695,10.876 L 20.000,8.857 L 19.999,6.552 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 16.311,11.445 C 16.254,11.560 16.194,11.673 16.132,11.784 C 14.881,13.995 12.528,15.369 9.990,15.369 C 6.507,15.369 3.613,12.827 3.047,9.501 L 4.612,10.479 L 4.611,8.173 L 2.305,6.156 L 0.000,8.175 L 0.001,10.480 L 1.743,9.390 C 2.271,13.472 5.767,16.637 9.990,16.637 C 12.984,16.637 15.760,15.016 17.236,12.407 C 17.310,12.277 17.380,12.144 17.447,12.008 L 16.311,11.445 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Report.New\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"22.7\">\n        <Path Fill=\"#ffffffff\" Data=\" M 6.010,2.647 L 7.145,2.647 L 7.523,3.025 L 7.476,4.113 L 7.145,4.537 L 6.010,4.537 L 7.145,5.671 L 7.145,6.806 L 6.767,7.184 L 5.632,7.184 L 4.498,6.050 L 4.498,22.308 L 19.622,22.308 L 19.622,1.890 L 6.766,1.890 L 6.010,2.647 Z\"/>\n        <Path Fill=\"#ffebc17d\" Data=\" M 5.671,6.428 L 6.428,6.806 L 6.806,6.428 L 6.428,5.671 L 5.293,4.537 L 5.293,4.159 L 6.806,4.159 L 7.184,3.781 L 7.184,3.403 L 6.806,3.025 L 5.293,3.025 L 5.293,2.647 L 6.806,1.134 L 6.806,0.378 L 6.048,0.378 L 4.537,1.890 L 4.159,1.890 L 4.159,0.378 L 3.781,0.000 L 3.403,0.000 L 3.025,0.378 L 3.025,1.890 L 2.647,1.890 L 1.133,0.378 L 0.378,0.378 L 0.378,1.134 L 1.890,2.647 L 1.890,3.025 L 0.378,3.025 L 0.000,3.403 L 0.000,3.781 L 0.378,4.159 L 1.890,4.159 L 1.890,4.537 L 0.756,5.671 L 0.378,6.428 L 0.756,6.806 L 1.512,6.428 L 2.647,5.293 L 3.025,5.293 L 3.025,6.806 L 3.403,7.184 L 3.781,7.184 L 4.159,6.806 L 4.159,5.293 L 4.537,5.293 L 5.671,6.428 Z M 2.647,3.025 L 3.025,2.647 L 4.159,2.647 L 4.537,3.025 L 4.537,4.159 L 4.159,4.537 L 3.025,4.537 L 2.647,4.159 L 2.647,3.025 L 2.647,3.025 Z\"/>\n        <Path Fill=\"#ffebc17d\" Data=\" M 13.572,19.661 L 13.572,9.831 L 10.926,9.831 L 10.926,19.661 L 13.572,19.661 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 6.767,20.039 L 17.353,20.039 L 17.353,19.661 L 7.145,19.661 L 7.145,9.831 L 6.767,9.831 L 6.767,20.039 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 5.632,9.074 L 11.682,9.074 L 11.682,8.696 L 5.632,8.696 L 5.632,9.074 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 12.438,9.074 L 18.488,9.074 L 18.488,8.696 L 12.438,8.696 L 12.438,9.074 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 12.438,6.050 L 18.488,6.050 L 18.488,5.671 L 12.438,5.671 L 12.438,6.050 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 12.438,7.562 L 18.488,7.562 L 18.488,7.184 L 12.438,7.184 L 12.438,7.562 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.145,7.562 L 11.682,7.562 L 11.682,7.184 L 7.145,7.184 L 7.145,7.562 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 7.523,6.050 L 11.682,6.050 L 11.682,5.671 L 7.523,5.671 L 7.523,6.050 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 16.597,19.661 L 16.597,11.721 L 13.950,11.721 L 13.950,19.661 L 16.597,19.661 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 10.548,19.661 L 10.548,13.233 L 7.901,13.233 L 7.901,19.661 L 10.548,19.661 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 7.523,4.159 L 7.523,4.537 L 10.548,4.537 L 10.548,4.159 L 7.523,4.159 Z\"/>\n        <Path Fill=\"#ff797a7a\" Data=\" M 4.498,7.184 L 4.120,7.184 L 4.120,22.686 L 20.000,22.686 L 20.000,1.512 L 6.767,1.512 L 6.767,1.890 L 19.622,1.890 L 19.622,22.308 L 4.498,22.308 L 4.498,7.184 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Email\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"12.14\">\n        <Path Fill=\"#ffffffff\" Data=\" M 0.357,11.786 L 19.643,11.786 L 19.643,0.357 L 0.357,0.357 L 0.357,11.786 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 4.643,7.143 L 13.214,7.143 L 13.214,6.786 L 4.643,6.786 L 4.643,7.143 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 4.643,8.571 L 13.214,8.571 L 13.214,8.214 L 4.643,8.214 L 4.643,8.571 Z\"/>\n        <Path Fill=\"#ff7c7b7c\" Data=\" M 0.000,12.143 L 20.000,12.143 L 20.000,0.000 L 0.000,0.000 L 0.000,12.143 Z M 0.357,0.357 L 19.643,0.357 L 19.643,11.786 L 0.357,11.786 L 0.357,0.357 L 0.357,0.357 Z\"/>\n        <Path Fill=\"#ff407eb7\" Data=\" M 16.071,4.643 L 18.572,4.643 L 18.572,1.429 L 16.071,1.429 L 16.071,4.643 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Journal\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"23.3\">\n        <Path Fill=\"#ffffffff\" Data=\" M 1.250,22.917 L 19.583,22.916 L 19.583,0.417 L 1.250,0.417 L 1.250,22.917 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 1.250,1.667 L 1.250,0.417 L 19.583,0.417 L 19.583,22.917 L 1.250,22.917 L 1.250,21.667 L 0.833,21.667 L 0.833,23.333 L 20.000,23.330 L 20.000,0.000 L 0.833,0.000 L 0.833,1.667 L 1.250,1.667 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 1.250,12.917 L 1.250,10.417 L 0.833,10.417 L 0.833,12.917 L 1.250,12.917 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 1.250,5.417 L 1.250,2.917 L 0.833,2.917 L 0.833,5.417 L 1.250,5.417 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 1.250,9.167 L 1.250,6.667 L 0.833,6.667 L 0.833,9.167 L 1.250,9.167 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 1.250,16.667 L 1.250,14.167 L 0.833,14.167 L 0.833,16.667 L 1.250,16.667 Z\"/>\n        <Path Fill=\"#ff7b7a7a\" Data=\" M 1.250,20.417 L 1.250,17.917 L 0.833,17.917 L 0.833,20.417 L 1.250,20.417 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.250,5.417 L 1.250,6.667 L 2.917,6.667 L 2.917,5.417 L 1.250,5.417 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.250,16.667 L 1.250,17.917 L 2.917,17.917 L 2.917,16.667 L 1.250,16.667 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.250,20.417 L 1.250,21.667 L 2.917,21.667 L 2.917,20.417 L 1.250,20.417 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.250,1.667 L 1.250,2.917 L 2.917,2.917 L 2.917,1.667 L 1.250,1.667 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.250,9.167 L 1.250,10.417 L 2.917,10.417 L 2.917,9.167 L 1.250,9.167 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 1.250,12.917 L 1.250,14.167 L 2.917,14.167 L 2.917,12.917 L 1.250,12.917 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.833,6.667 L 0.833,5.417 L 0.000,5.417 L 0.000,6.667 L 0.833,6.667 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.833,17.917 L 0.833,16.667 L 0.000,16.667 L 0.000,17.917 L 0.833,17.917 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.833,21.667 L 0.833,20.417 L 0.000,20.417 L 0.000,21.667 L 0.833,21.667 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.833,2.917 L 0.833,1.667 L 0.000,1.667 L 0.000,2.917 L 0.833,2.917 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.833,10.417 L 0.833,9.167 L 0.000,9.167 L 0.000,10.417 L 0.833,10.417 Z\"/>\n        <Path Fill=\"#ffb2b2b2\" Data=\" M 0.833,14.167 L 0.833,12.917 L 0.000,12.917 L 0.000,14.167 L 0.833,14.167 Z\"/>\n        <Path Fill=\"#ff6fa493\" Data=\" M 5.000,7.083 L 16.667,7.083 L 16.667,3.333 L 5.000,3.333 L 5.000,7.083 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Progress\" HorizontalAlignment=\"Center\" Height=\"15.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\">\n        <Path Data=\"F1M0,6.666L14.444,6.666 14.444,0 0,0z\" Fill=\"#FF3F7EB8\" Height=\"6.666\" Canvas.Left=\"0\" Canvas.Top=\"0.001\" Width=\"14.444\"/>\n        <Path Data=\"F1M0,6.666L9.445,6.666 9.445,0 0,0z\" Fill=\"#FF6EA493\" Height=\"6.666\" Canvas.Left=\"0\" Canvas.Top=\"8.889\" Width=\"9.445\"/>\n        <Path Data=\"F1M0,5.556L10,5.556 10,0 0,0z\" Fill=\"White\" Height=\"5.556\" Canvas.Left=\"9.445\" Canvas.Top=\"9.444\" Width=\"10\"/>\n        <Path Data=\"F1M0,5.556L5,5.556 5,0 0,0z\" Fill=\"White\" Height=\"5.556\" Canvas.Left=\"14.444\" Canvas.Top=\"0.555\" Width=\"5\"/>\n        <Path Data=\"F1M0,0L0,0.555 10,0.555 10,6.111 0,6.111 0,6.666 10.555,6.666 10.555,0z\" Fill=\"#FF7C7C7D\" Height=\"6.666\" Canvas.Left=\"9.445\" Canvas.Top=\"8.889\" Width=\"10.555\"/>\n        <Path Data=\"F1M0,0L0,0.555 5,0.555 5,6.111 0,6.111 0,6.666 5.556,6.666 5.556,0z\" Fill=\"#FF7C7C7D\" Height=\"6.666\" Canvas.Left=\"14.444\" Canvas.Top=\"0\" Width=\"5.556\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Monitor\" HorizontalAlignment=\"Center\" Height=\"25.17\" UseLayoutRounding=\"True\" VerticalAlignment=\"Center\" Width=\"30\">\n        <Path Data=\"M16.055,4.285L10.179,4.285 10.179,0 6.412,0 6.412,4.286 0.536,4.286C0.347,4.286,0,4.633,0,4.822L0,5.893 16.591,5.893 16.591,4.822C16.591,4.633,16.244,4.285,16.055,4.285\" Fill=\"#FF3C7CB6\" Height=\"5.893\" Canvas.Left=\"6.428\" Canvas.Top=\"19.286\" Width=\"16.591\"/>\n        <Path Data=\"M26.786,15.536L0,15.536 0,0 26.786,0z\" Fill=\"#FF3C7CB6\" Height=\"15.536\" Canvas.Left=\"1.607\" Canvas.Top=\"1.607\" Width=\"26.786\"/>\n        <Path Data=\"M30,0L0,0 0,18.75 30,18.75z\" Fill=\"#FF3C7CB6\" Height=\"18.75\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"30\"/>\n        <Path Data=\"M26.786,0L0,0 0,15.536 26.786,15.536z\" Fill=\"White\" Height=\"15.536\" Canvas.Left=\"1.607\" Canvas.Top=\"1.607\" Width=\"26.786\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Crosshair\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"True\" VerticalAlignment=\"Center\" Width=\"40\" >\n        <!--<Path Data=\"F1 M 19.299,21.380 L 1.732,21.380 C 2.246,30.380 10.299,37.911 19.299,38.280 L 19.299,21.380 Z\" Fill=\"Yellow\"/>\n        <Path Data=\"F1 M 21.299,19.380 L 38.280,19.380 C 37.928,9.380 30.299,2.227 21.299,1.729 L 21.299,19.380 Z\" Fill=\"Blue\"/>\n        <Path Data=\"F1 M 19.299,19.380 L 19.299,1.720 C 9.299,2.093 2.075,9.380 1.720,19.380 L 19.299,19.380 Z\" Fill=\"Red\"/>\n        <Path Data=\"F1 M 21.299,21.380 L 21.299,38.271 C 30.299,37.779 37.759,30.380 38.268,21.380 L 21.299,21.380 Z\" Fill=\"Green\"/>-->\n        <Path Fill=\"#ff686868\" Data=\"F1 M 21.299,38.271 L 21.299,21.380 L 38.268,21.380 C 37.759,30.380 30.299,37.779 21.299,38.271 Z M 1.732,21.380 L 19.299,21.380 L 19.299,38.280 C 10.299,37.911 2.246,30.380 1.732,21.380 Z M 19.299,1.720 L 19.299,19.380 L 1.720,19.380 C 2.075,9.380 9.299,2.093 19.299,1.720 Z M 38.280,19.380 L 21.299,19.380 L 21.299,1.729 C 30.299,2.227 37.928,9.380 38.280,19.380 Z M 20.000,0.000 C 8.972,0.000 0.000,8.972 0.000,20.000 C 0.000,31.028 8.972,40.000 20.000,40.000 C 31.028,40.000 40.000,31.028 40.000,20.000 C 40.000,8.972 31.028,0.000 20.000,0.000 Z\"/>\n    </Canvas>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <!--Old-->\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Info.Old\" HorizontalAlignment=\"Center\" Height=\"16\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"16\">\n        <Canvas Height=\"16\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\">\n            <Path Data=\"F1M0,8C0,3.582 3.582,0 8,0 12.418,0 16,3.582 16,8 16,12.418 12.418,16 8,16 3.582,16 0,12.418 0,8\" Fill=\"#FFF6F6F6\" Height=\"16\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\"/>\n        </Canvas>\n        <Canvas Height=\"14\" Canvas.Left=\"1\" Canvas.Top=\"1\" Width=\"14\">\n            <Path Data=\"F1M8,4L6,4 6,2 8,2z M8,12L6,12 6,5 8,5z M7,0C3.135,0 0,3.134 0,7 0,10.865 3.135,14 7,14 10.865,14 14,10.865 14,7 14,3.134 10.865,0 7,0\" Fill=\"#FF1AA1E2\" Height=\"14\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14\"/>\n        </Canvas>\n        <Canvas Height=\"10\" Canvas.Left=\"7\" Canvas.Top=\"3\" Width=\"2\">\n            <Path Data=\"F1M2,0L0,0 0,2 2,2z M2,10L0,10 0,3 2,3z\" Fill=\"White\" Height=\"10\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"2\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Camera.Old\" HorizontalAlignment=\"Left\" Height=\"16\" UseLayoutRounding=\"False\" VerticalAlignment=\"Top\" Width=\"16\">\n        <Canvas  Height=\"12.001\" Canvas.Left=\"0\" Canvas.Top=\"2\" Width=\"16\">\n            <Path Data=\"F1M5.586,0L3.585,2.001 1.585,2.001 0,3.587 0,10.415 1.585,12.001 14.414,12.001 16,10.415 16,3.587 14.414,2.001 12.413,2.001 10.414,0z\" Fill=\"#FFF6F6F6\" Height=\"12.001\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\"/>\n        </Canvas>\n        <Canvas  Height=\"10\" Canvas.Left=\"1\" Canvas.Top=\"3\" Width=\"14\">\n            <Path Data=\"F1M7,8C5.896,8 5,7.104 5,6 5,4.896 5.896,4 7,4 8.104,4 9,4.896 9,6 9,7.104 8.104,8 7,8 M13,5L11,5 11,3 13,3z M7,9C5.344,9 4,7.656 4,6 4,4.343 5.344,3 7,3 8.656,3 10,4.343 10,6 10,7.656 8.656,9 7,9 M13,2L11,2 9,0 5,0 3,2 1,2 0,3 0,9 1,10 13,10 14,9 14,3z\" Fill=\"#FF414141\" Height=\"10\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14\"/>\n        </Canvas>\n        <Canvas  Height=\"6\" Canvas.Left=\"5\" Canvas.Top=\"6\" Width=\"9\">\n            <Path Data=\"F1M9,2L7,2 7,0 9,0z M3,5C1.896,5 1,4.104 1,3 1,1.896 1.896,1 3,1 4.104,1 5,1.896 5,3 5,4.104 4.104,5 3,5 M3,0C1.344,0 0,1.343 0,3 0,4.656 1.344,6 3,6 4.656,6 6,4.656 6,3 6,1.343 4.656,0 3,0\" Fill=\"#FFF0EFF1\" Height=\"6\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"9\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Record.Old\" HorizontalAlignment=\"Center\" Height=\"16\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"16\">\n        <Canvas  Height=\"14\" Canvas.Left=\"1\" Canvas.Top=\"1\" Width=\"14\">\n            <Path Data=\"F1M14,7C14,10.866 10.865,14 7,14 3.134,14 0,10.866 0,7 0,3.134 3.134,0 7,0 10.865,0 14,3.134 14,7\" Fill=\"#FFF6F6F6\" Height=\"14\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14\"/>\n        </Canvas>\n        <Canvas Height=\"12\" Canvas.Left=\"2\" Canvas.Top=\"2\" Width=\"12\">\n            <Path Data=\"F1M6,0C2.686,0 0,2.686 0,6 0,9.314 2.686,12 6,12 9.314,12 12,9.314 12,6 12,2.686 9.314,0 6,0\" Fill=\"#FFE51300\" Height=\"12\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"12\"/>\n        </Canvas>\n    </Canvas>\n\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Pause.Round\" HorizontalAlignment=\"Center\" Height=\"16\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"16\">\n        <Canvas Height=\"16\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\">\n            <Path Data=\"F1M0,8C0,3.582 3.582,0 8,0 12.418,0 16,3.582 16,8 16,12.418 12.418,16 8,16 3.582,16 0,12.418 0,8\" Fill=\"#FFF6F6F6\" Height=\"16\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\"/>\n        </Canvas>\n        <Canvas  Height=\"14\" Canvas.Left=\"1\" Canvas.Top=\"1\" Width=\"14\">\n            <Path Data=\"F1M10,10L8,10 8,4 10,4z M6,10L4,10 4,4 6,4z M7,0C3.135,0 0,3.135 0,7 0,10.865 3.135,14 7,14 10.865,14 14,10.865 14,7 14,3.135 10.865,0 7,0\" Fill=\"#FF1AA1E2\" Height=\"14\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14\"/>\n        </Canvas>\n        <Canvas  Height=\"6\" Canvas.Left=\"5\" Canvas.Top=\"5\" Width=\"6\">\n            <Path Data=\"F1M6,0L4,0 4,6 6,6z M2,6L0,6 0,0 2,0z\" Fill=\"White\" Height=\"6\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"6\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Vector.Stop.Round\" HorizontalAlignment=\"Center\" Height=\"16\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"16\">\n        <Canvas Height=\"16\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\">\n            <Path Data=\"F1M0,8C0,3.582 3.582,0 8,0 12.418,0 16,3.582 16,8 16,12.418 12.418,16 8,16 3.582,16 0,12.418 0,8\" Fill=\"#FFF6F6F6\" Height=\"16\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"16\"/>\n        </Canvas>\n        <Canvas Height=\"14\" Canvas.Left=\"1\" Canvas.Top=\"1\" Width=\"14\">\n            <Path Data=\"F1M10,10L4,10 4,4 10,4z M7,0C3.135,0 0,3.135 0,7 0,10.865 3.135,14 7,14 10.865,14 14,10.865 14,7 14,3.135 10.865,0 7,0\" Fill=\"#FFE51300\" Height=\"14\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"14\"/>\n        </Canvas>\n        <Canvas Height=\"6\" Canvas.Left=\"5\" Canvas.Top=\"5\" Width=\"6\">\n            <Path Data=\"F1M6,6L0,6 0,0 6,0z\" Fill=\"White\" Height=\"6\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"6\"/>\n        </Canvas>\n    </Canvas>\n\n</ResourceDictionary>\n"
  },
  {
    "path": "Other/Translator/Themes/ProgressBar.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <SolidColorBrush x:Key=\"ProgressBar.Progress\" Color=\"#FF06B025\"/>\n    <SolidColorBrush x:Key=\"ProgressBar.Background\" Color=\"#FFE6E6E6\"/>\n    <SolidColorBrush x:Key=\"ProgressBar.Border\" Color=\"#FFBCBCBC\"/>\n    <Style TargetType=\"{x:Type ProgressBar}\">\n        <Setter Property=\"Foreground\" Value=\"{StaticResource ProgressBar.Progress}\"/>\n        <Setter Property=\"Background\" Value=\"{StaticResource ProgressBar.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{StaticResource ProgressBar.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ProgressBar}\">\n                    <Grid x:Name=\"TemplateRoot\">\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Determinate\"/>\n                                <VisualState x:Name=\"Indeterminate\">\n                                    <Storyboard RepeatBehavior=\"Forever\">\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)\" Storyboard.TargetName=\"Animation\">\n                                            <EasingDoubleKeyFrame KeyTime=\"0\" Value=\"0.25\"/>\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:1\" Value=\"0.25\"/>\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:2\" Value=\"0.25\"/>\n                                        </DoubleAnimationUsingKeyFrames>\n                                        <PointAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransformOrigin)\" Storyboard.TargetName=\"Animation\">\n                                            <EasingPointKeyFrame KeyTime=\"0\" Value=\"-0.5,0.5\"/>\n                                            <EasingPointKeyFrame KeyTime=\"0:0:1\" Value=\"0.5,0.5\"/>\n                                            <EasingPointKeyFrame KeyTime=\"0:0:2\" Value=\"1.5,0.5\"/>\n                                        </PointAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"/>\n                        <Rectangle x:Name=\"PART_Track\"/>\n                        <Grid x:Name=\"PART_Indicator\" ClipToBounds=\"true\" HorizontalAlignment=\"Left\">\n                            <Rectangle x:Name=\"Indicator\" Fill=\"{TemplateBinding Foreground}\"/>\n                            <Rectangle x:Name=\"Animation\" Fill=\"{TemplateBinding Foreground}\" RenderTransformOrigin=\"0.5,0.5\">\n                                <Rectangle.RenderTransform>\n                                    <TransformGroup>\n                                        <ScaleTransform/>\n                                        <SkewTransform/>\n                                        <RotateTransform/>\n                                        <TranslateTransform/>\n                                    </TransformGroup>\n                                </Rectangle.RenderTransform>\n                            </Rectangle>\n                        </Grid>\n                    </Grid>\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"Orientation\" Value=\"Vertical\">\n                            <Setter Property=\"LayoutTransform\" TargetName=\"TemplateRoot\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"-90\"/>\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n                        <Trigger Property=\"IsIndeterminate\" Value=\"true\">\n                            <Setter Property=\"Visibility\" TargetName=\"Indicator\" Value=\"Collapsed\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "Other/Translator/Translator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0-windows</TargetFramework>\n    <OutputType>WinExe</OutputType>\n    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>\n    <UseWPF>true</UseWPF>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Logo.ico</ApplicationIcon>\n  </PropertyGroup>\n  <ItemGroup>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"Logo.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers\">\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.CSharp\" />\n    <PackageReference Include=\"Microsoft.Windows.Compatibility\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "Other/Translator/TranslatorWindow.xaml",
    "content": "﻿<Window x:Class=\"Translator.TranslatorWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:c=\"clr-namespace:Translator.Controls\"\n        xmlns:cv=\"clr-namespace:Translator.Converters\"\n        Title=\"ScreenToGif - Translator\" Height=\"450\" Width=\"1000\" MinHeight=\"400\" MinWidth=\"800\"\n        WindowStartupLocation=\"CenterScreen\" Loaded=\"Window_Loaded\" Closing=\"Window_Closing\" Icon=\"Logo.ico\">\n\n    <Window.Resources>\n        <cv:NullToInvertedBool x:Key=\"NullToInvertedBool\"/>\n    </Window.Resources>\n\n    <Window.CommandBindings>\n        <CommandBinding Command=\"Save\" CanExecute=\"Export_CanExecute\" Executed=\"Export_Executed\"/>\n        <CommandBinding Command=\"Open\" CanExecute=\"Load_CanExecute\" Executed=\"Load_Executed\"/>\n    </Window.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"#FFF9F9FF\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"40\"/>\n            </Grid.ColumnDefinitions>\n\n            <Viewbox Grid.Column=\"0\" x:Name=\"IconViewBox\" Margin=\"5\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" \n                     Stretch=\"Uniform\" Child=\"{StaticResource Vector.Translate}\" Width=\"30\" Height=\"30\"/>\n\n            <Label Grid.Column=\"1\" x:Name=\"HeaderLabel\" Content=\"Translator\" Margin=\"5,0,5,0\" VerticalAlignment=\"Center\" Padding=\"2\" FontSize=\"18\" FontFamily=\"{DynamicResource FontFamilyLight}\"/>\n\n            <Label Grid.Column=\"3\" Content=\"From\" VerticalAlignment=\"Center\" Padding=\"2\" FontSize=\"16\" FontFamily=\"{DynamicResource FontFamilyLight}\"/>\n            <ComboBox Grid.Column=\"4\" x:Name=\"FromComboBox\" Margin=\"5,0\" SelectedValuePath=\"Code\" DisplayMemberPath=\"CodeName\" IsEditable=\"True\" IsEnabled=\"False\" \n                      PreviewKeyDown=\"ComboBox_KeyDown\"/>\n\n            <Label Grid.Column=\"5\" Content=\"into\" VerticalAlignment=\"Center\" Padding=\"2\" FontSize=\"16\" FontFamily=\"{DynamicResource FontFamilyLight}\"/>\n            <ComboBox Grid.Column=\"6\" x:Name=\"ToComboBox\" Margin=\"5,0\" SelectedValuePath=\"Code\" DisplayMemberPath=\"CodeName\" IsEditable=\"True\" \n                      PreviewKeyDown=\"ComboBox_KeyDown\"/>\n\n            <c:ImageButton Grid.Column=\"7\" x:Name=\"RefreshButton\" Content=\"{StaticResource Vector.Synchronize}\" MaxSize=\"22\"\n                           Style=\"{StaticResource Style.Button.NoText}\" ToolTip=\"Update the table with the selected languages.\"\n                           Click=\"Refresh_Click\"/>\n        </Grid>\n\n        <c:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"2\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"23\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n\n            <Label Grid.Row=\"0\" Grid.Column=\"0\" Content=\"List of text resources and translations \" Style=\"{StaticResource LabelSeparator}\"/>\n            <DataGrid Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"BaseDataGrid\" Margin=\"3\" EnableColumnVirtualization=\"True\" RowHeight=\"22\" IsEnabled=\"False\"\n                      CanUserAddRows=\"False\" CanUserDeleteRows=\"False\" CanUserReorderColumns=\"False\" AutoGenerateColumns=\"False\" HeadersVisibility=\"Column\">\n\n                <DataGrid.Columns>\n                    <DataGridTemplateColumn Header=\"Identifier\" Width=\"220\" CanUserSort=\"True\" CanUserReorder=\"False\" SortMemberPath=\"Key\" SortDirection=\"Ascending\">\n                        <DataGridTemplateColumn.CellTemplate>\n                            <DataTemplate>\n                                <c:ExtendedTextBox x:Name=\"KeyColumn\" Style=\"{StaticResource TextBoxCell}\" Height=\"20\" IsReadOnly=\"True\"\n                                                   Text=\"{Binding Key, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}\"\n                                                   GotFocus=\"Itens_GotFocus\" PreviewKeyDown=\"Item_PreviewKeyDown\"/>\n                            </DataTemplate>\n                        </DataGridTemplateColumn.CellTemplate>\n                    </DataGridTemplateColumn>\n\n                    <DataGridTemplateColumn Header=\"English base translation\" Width=\"*\" CanUserSort=\"True\" SortMemberPath=\"BaseText\">\n                        <DataGridTemplateColumn.CellTemplate>\n                            <DataTemplate>\n                                <c:ExtendedTextBox x:Name=\"KeyColumn\" Style=\"{StaticResource TextBoxCell}\" Height=\"20\" IsReadOnly=\"True\"\n                                                   Text=\"{Binding BaseText, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}\"\n                                                   GotFocus=\"Itens_GotFocus\" PreviewKeyDown=\"Item_PreviewKeyDown\"/>\n                            </DataTemplate>\n                        </DataGridTemplateColumn.CellTemplate>\n                    </DataGridTemplateColumn>\n\n                    <DataGridTemplateColumn Header=\"Selected language translation\" Width=\"*\" CanUserSort=\"True\" SortMemberPath=\"SpecificText\">\n                        <DataGridTemplateColumn.CellTemplate>\n                            <DataTemplate>\n                                <c:ExtendedTextBox x:Name=\"KeyColumn\" Style=\"{StaticResource TextBoxCell}\" Height=\"20\" IsReadOnly=\"{Binding ElementName=ToComboBox, Path=SelectedItem, Converter={StaticResource NullToInvertedBool}}\"\n                                                   Text=\"{Binding SpecificText, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}\"\n                                                   GotFocus=\"Itens_GotFocus\" PreviewKeyDown=\"Item_PreviewKeyDown\"/>\n                            </DataTemplate>\n                        </DataGridTemplateColumn.CellTemplate>\n                    </DataGridTemplateColumn>\n                </DataGrid.Columns>\n            </DataGrid>\n        </Grid>\n\n        <Grid Grid.Row=\"3\" Background=\"WhiteSmoke\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"5\"\n                       ToolTip=\"https://github.com/NickeManarin/ScreenToGif/wiki/Localization\">\n                <Hyperlink RequestNavigate=\"TutorialHyperlink_RequestNavigate\" \n                           NavigateUri=\"https://github.com/NickeManarin/ScreenToGif/wiki/Localization\">\n                    <Run Text=\"Tutorial\"/>\n                </Hyperlink>\n            </TextBlock>\n\n            <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"5\"\n                       ToolTip=\"New Line: &amp;#10;\">\n                <Hyperlink Click=\"NewLineHyperlink_Click\">\n                    <Run Text=\"Copy [NewLine]\"/>\n                </Hyperlink>\n            </TextBlock>\n\n            <c:ImageButton x:Name=\"OpenButton\" Grid.Column=\"3\" Text=\"Open\" Margin=\"5\" Padding=\"10,5\" MaxSize=\"20\"\n                           Content=\"{StaticResource Vector.Open}\" MinWidth=\"90\" MinHeight=\"20\" Command=\"Open\"/>\n            <c:ImageButton x:Name=\"OkButton\" Grid.Column=\"4\" Text=\"Export\" Margin=\"5\" Padding=\"10,5\" MaxSize=\"20\"\n                           Content=\"{StaticResource Vector.Save}\" MinWidth=\"90\" MinHeight=\"20\" Command=\"Save\"/>\n            <c:ImageButton x:Name=\"CancelButton\" Grid.Column=\"5\" Text=\"Cancel\" Margin=\"5\" Padding=\"10,5\" MaxSize=\"20\"\n                           Content=\"{StaticResource Vector.Cancel}\" MinWidth=\"90\" MinHeight=\"20\" Click=\"CancelButton_Click\"/>\n        </Grid>\n    </Grid>\n</Window>"
  },
  {
    "path": "Other/Translator/TranslatorWindow.xaml.cs",
    "content": "using Microsoft.Win32;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Markup;\nusing System.Windows.Navigation;\nusing System.Windows.Threading;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\nusing Translator.Util;\nusing XamlReader = System.Windows.Markup.XamlReader;\n\nnamespace Translator;\n\npublic partial class TranslatorWindow : Window\n{\n    private readonly List<ResourceDictionary> _resourceList = new();\n    private IEnumerable<string> _cultures;\n    private ObservableCollection<Translation> _translationList = new();\n    private string _tempPath;\n    private string _resourceTemplate;\n\n    public TranslatorWindow()\n    {\n        InitializeComponent();\n    }\n\n    #region Events\n\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        PrepareTempPath();\n\n        OpenButton.IsEnabled = false;\n        RefreshButton.IsEnabled = false;\n        ToComboBox.IsEnabled = false;\n\n        #region Languages\n\n        FromComboBox.Text = \"Loading...\";\n        ToComboBox.Text = \"Loading...\";\n\n        StatusBand.Info(\"Downloading English resource file...\");\n\n        //We have to get english resource first in case we import first without refreshing\n        await DownloadSingleResourceAsync(\"en\");\n\n        StatusBand.Info(\"Loading language codes...\");\n\n        _cultures = await GetProperCulturesAsync();\n        var languageList = await Task.Factory.StartNew(() => _cultures.Select(x => new Culture { Code = x, Name = CultureInfo.GetCultureInfo(x).DisplayName }).ToList());\n        //var languageList = CultureInfo.GetCultures(CultureTypes.AllCultures).Select(x => new Culture { Code = x.IetfLanguageTag, Name = x.EnglishName }).ToList();\n\n        FromComboBox.ItemsSource = languageList;\n        ToComboBox.ItemsSource = languageList;\n        ToComboBox.Text = null;\n        FromComboBox.SelectedIndex = languageList.FindIndex(x => x.Code == \"en\");\n\n        StatusBand.Hide();\n\n        #endregion\n\n        OpenButton.IsEnabled = true;\n        RefreshButton.IsEnabled = true;\n        ToComboBox.IsEnabled = true;\n\n        ToComboBox.Focus();\n    }\n\n    private void TutorialHyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)\n    {\n        try\n        {\n            Process.Start(\"https://github.com/NickeManarin/ScreenToGif/wiki/Localization\");\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Translator\", \"Tutorial\", \"Error while trying to open the tutorial link\");\n        }\n    }\n\n    private void NewLineHyperlink_Click(object sender, RoutedEventArgs e)\n    {\n        Clipboard.SetText(\"&#10;\");\n    }\n\n    private void ComboBox_KeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key == Key.Return || e.Key == Key.Enter)\n        {\n            e.Handled = true;\n            RefreshButton.Focus();\n        }\n    }\n\n    private async void Refresh_Click(object sender, RoutedEventArgs e)\n    {\n        var baseCulture = FromComboBox.SelectedValue as string;\n\n        if (ToComboBox.SelectedValue is not string specificCulture)\n        {\n            StatusBand.Info(\"You need to select a target language to load the translations.\");\n            return;\n        }\n\n        HeaderLabel.Content = \"Downloading resources...\";\n        StatusBand.Info(\"Downloading selected translations...\");\n\n        await DownloadResourcesAsync(baseCulture, specificCulture);\n        ShowTranslations(baseCulture, specificCulture);\n\n        HeaderLabel.Content = \"Translator\";\n        BaseDataGrid.IsEnabled = true;\n        StatusBand.Hide();\n    }\n\n    private void Itens_GotFocus(object sender, RoutedEventArgs e)\n    {\n        if (e.OriginalSource is not TextBox ue)\n            return;\n\n        ue.Dispatcher.BeginInvoke(DispatcherPriority.Send, () => ue.SelectAll());\n\n        BaseDataGrid.SelectedItem = ((FrameworkElement)sender).DataContext;\n    }\n\n    private void Item_PreviewKeyDown(object sender, KeyEventArgs e)\n    {\n        var source = e.OriginalSource as TextBox;\n\n        if (source == null)\n            return;\n\n        //Back, up.\n        if (e.Key == Key.Up || e.Key is Key.Enter or Key.Return && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))\n        {\n            source.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));\n            BaseDataGrid.BeginEdit();\n\n            var current = DataGridHelper.GetDataGridCell(BaseDataGrid.CurrentCell);\n\n            current?.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));\n\n            e.Handled = true;\n            return;\n        }\n\n        //Back, left.\n        if ((e.Key == Key.Left && (source.CaretIndex == 0 || source.IsReadOnly)) || (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))))\n        {\n            source.MoveFocus(new TraversalRequest(FocusNavigationDirection.Left));\n            BaseDataGrid.BeginEdit();\n\n            var current = DataGridHelper.GetDataGridCell(BaseDataGrid.CurrentCell);\n\n            current?.MoveFocus(new TraversalRequest(FocusNavigationDirection.Left));\n\n            e.Handled = true;\n            return;\n        }\n\n        //Next, down.\n        if (e.Key == Key.Down || e.Key == Key.Enter || e.Key == Key.Return)\n        {\n            source.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));\n            BaseDataGrid.BeginEdit();\n\n            var current = DataGridHelper.GetDataGridCell(BaseDataGrid.CurrentCell);\n\n            current?.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));\n\n            e.Handled = true;\n            return;\n        }\n\n        //Next, right. OLD (e.Key == Key.Right && (source.CaretIndex == source.Text.Length - 1 || source.IsReadOnly)) ||\n        if (e.Key == Key.Tab)\n        {\n            source.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n            BaseDataGrid.BeginEdit();\n\n            var current = DataGridHelper.GetDataGridCell(BaseDataGrid.CurrentCell);\n\n            current?.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n\n            e.Handled = true;\n            return;\n        }\n    }\n\n    private void Load_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = true;\n    }\n\n    private void Export_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = BaseDataGrid.IsEnabled && ToComboBox.SelectedValue != null && BaseDataGrid.Items.Count > 0;\n    }\n\n    private async void Load_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var ofd = new OpenFileDialog\n        {\n            AddExtension = true,\n            CheckFileExists = true,\n            Title = \"Open a Resource Dictionary\",\n            Filter = \"Resource Dictionary (*.xaml)|*.xaml;\",\n            InitialDirectory = Path.GetFullPath(_tempPath)\n        };\n\n        var result = ofd.ShowDialog();\n\n        if (!result.HasValue || !result.Value)\n            return;\n\n        //Will save the file to other folder.\n        var tempFile = Path.Combine(_tempPath, \"Temp\", Path.GetFileName(ofd.FileName));\n\n        Directory.CreateDirectory(Path.Combine(_tempPath, \"Temp\"));\n\n        //Replaces the special chars.\n        var text = await Task.Factory.StartNew(() => File.ReadAllText(ofd.FileName, Encoding.UTF8).Replace(\"&#\", \"&amp;#\").Replace(\"<!--<!--\", \"<!--\").Replace(\"-->-->\", \"-->\"));\n        await Task.Factory.StartNew(() => File.WriteAllText(tempFile, text, Encoding.UTF8));\n\n        var dictionary = await Task.Factory.StartNew(() => new ResourceDictionary { Source = new Uri(Path.GetFullPath(tempFile), UriKind.Absolute) });\n        _resourceList.Add(dictionary);\n\n        var baseCulture = FromComboBox.SelectedValue as string;\n        var specificCulture = Path.GetFileName(ofd.FileName).Replace(\"StringResources.\", \"\").Replace(\".xaml\", \"\");\n\n        string properCulture;\n\n        //Catching here, because we can access UI thread easily here to show dialogs\n        try\n        {\n            properCulture = await Task.Factory.StartNew(() => CheckSupportedCulture(specificCulture));\n        }\n        catch (CultureNotFoundException)\n        {\n            Dialog.Ok(\"Action Denied\", \"Unknown Language.\",\n                $\"The \\\"{specificCulture}\\\" and its family were not recognized as a valid language codes.\");\n\n            return;\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Action Denied\", \"Error checking culture.\", ex.Message);\n\n            return;\n        }\n\n        if (properCulture != specificCulture)\n        {\n            Dialog.Ok(\"Action Denied\", \"Redundant Language Code.\",\n                $\"The \\\"{specificCulture}\\\" code is redundant. Try using \\'{properCulture}\\\" instead\");\n\n            return;\n        }\n\n        ToComboBox.SelectedValue = specificCulture;\n\n        ShowTranslations(baseCulture, specificCulture);\n\n        BaseDataGrid.IsEnabled = true;\n    }\n\n    private async void Export_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var sfd = new SaveFileDialog\n        {\n            AddExtension = true,\n            Filter = \"Resource Dictionary (*.xaml)|*.xaml\",\n            Title = \"Save Resource Dictionary\",\n            FileName = $\"StringResources.{ToComboBox.SelectedValue}.xaml\"\n        };\n\n        var result = sfd.ShowDialog();\n\n        if (!result.HasValue || !result.Value)\n            return;\n\n        BaseDataGrid.IsEnabled = false;\n        StatusBand.Info(\"Exporting translation...\");\n\n        var fileName = sfd.FileName;\n        var saved = await Task.Factory.StartNew(() => ExportTranslation(fileName));\n\n        BaseDataGrid.IsEnabled = true;\n\n        if (saved)\n            StatusBand.Info(\"Translation saved!\");\n        else\n            StatusBand.Hide();\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    private void Window_Closing(object sender, CancelEventArgs e)\n    {\n        if (BaseDataGrid.Items.Count > 0 && !Dialog.Ask(\"Translator\", \"Do you really wish to close?\", \"Don't forget to export your translation, if you started translating but not exported yet.\"))\n            e.Cancel = true;\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void PrepareTempPath()\n    {\n        _tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"ScreenToGif\", \"Resources\");\n\n        if (!Directory.Exists(_tempPath))\n            Directory.CreateDirectory(_tempPath);\n    }\n\n    private async Task DownloadSingleResourceAsync(string culture)\n    {\n        try\n        {\n            var request = (HttpWebRequest)WebRequest.Create(\"https://api.github.com/repos/NickeManarin/ScreenToGif/contents/ScreenToGif/Resources/Localization\");\n            request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n\n            var response = (HttpWebResponse)await request.GetResponseAsync();\n\n            await using (var resultStream = response.GetResponseStream())\n            {\n                using (var reader = new StreamReader(resultStream))\n                {\n                    var result = await reader.ReadToEndAsync();\n\n                    var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),\n                        new System.Xml.XmlDictionaryReaderQuotas());\n\n                    var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));\n\n                    var element = json.XPathSelectElement(\"/\").Elements().FirstOrDefault(x => x.XPathSelectElement(\"name\").Value.EndsWith(culture + \".xaml\"));\n\n                    if (element == null)\n                        throw new WebException(\"File not found\");\n\n                    var name = element.XPathSelectElement(\"name\").Value;\n                    var downloadUrl = element.XPathSelectElement(\"download_url\").Value;\n\n                    await DownloadFileAsync(new Uri(downloadUrl), name);\n\n                    CommandManager.InvalidateRequerySuggested();\n                }\n            }\n        }\n        catch (WebException web)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Downloading Single Resource\", web.Message +\n                Environment.NewLine + \"Trying to load files already downloaded.\"));\n\n            await LoadFilesAsync();\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Downloading Single Resource\", ex.Message));\n        }\n\n        GC.Collect();\n    }\n\n    private async Task DownloadResourcesAsync(string baseCulture, string specificCulture)\n    {\n        try\n        {\n            var request = (HttpWebRequest)WebRequest.Create(\"https://api.github.com/repos/NickeManarin/ScreenToGif/contents/ScreenToGif/Resources/Localization\");\n            request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n\n            var response = (HttpWebResponse)await request.GetResponseAsync();\n\n            await using (var resultStream = response.GetResponseStream())\n            {\n                using (var reader = new StreamReader(resultStream))\n                {\n                    var result = await reader.ReadToEndAsync();\n\n                    var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),\n                        new System.Xml.XmlDictionaryReaderQuotas());\n\n                    var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));\n\n                    foreach (var element in json.XPathSelectElement(\"/\").Elements())\n                    {\n                        var name = element.XPathSelectElement(\"name\").Value;\n\n                        if (string.IsNullOrEmpty(name) || (!name.EndsWith(baseCulture + \".xaml\") && !name.EndsWith(specificCulture + \".xaml\")))\n                            continue;\n\n                        var downloadUrl = element.XPathSelectElement(\"download_url\").Value;\n\n                        await DownloadFileAsync(new Uri(downloadUrl), name);\n                    }\n\n                    CommandManager.InvalidateRequerySuggested();\n                }\n            }\n        }\n        catch (WebException web)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Downloading Resources\", web.Message +\n                Environment.NewLine + \"Trying to load files already downloaded.\"));\n\n            await LoadFilesAsync();\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Downloading Resources\", ex.Message));\n        }\n\n        GC.Collect();\n    }\n\n    private async Task DownloadFileAsync2(Uri uri, string name)\n    {\n        try\n        {\n            var file = Path.Combine(Dispatcher.Invoke<string>(() => _tempPath), name);\n\n            if (File.Exists(file))\n                File.Delete(file);\n\n            using (var webClient = new WebClient { Credentials = CredentialCache.DefaultNetworkCredentials })\n                await webClient.DownloadFileTaskAsync(uri, file);\n\n            //Saves the template for later, when exporting the translation.\n            if (name.EndsWith(\"en.xaml\"))\n            {\n                using (var sr = new StreamReader(file, Encoding.UTF8))\n                {\n                    _resourceTemplate = await sr.ReadToEndAsync();\n                }\n            }\n\n            await using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))\n            {\n                var dictionary = await Task.Factory.StartNew(() => (ResourceDictionary)XamlReader.Load(fs, new ParserContext { XmlSpace = \"preserve\" }));\n                //var dictionary = new ResourceDictionary();\n                dictionary.Source = await Task.Factory.StartNew(() => new Uri(Path.GetFullPath(file), UriKind.Absolute));\n\n                _resourceList.Add(dictionary);\n\n                if (name.EndsWith(\"en.xaml\"))\n                    Application.Current.Resources.MergedDictionaries.Add(dictionary);\n            }\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Downloading File\", ex.Message));\n        }\n    }\n\n    private async Task DownloadFileAsync(Uri uri, string name)\n    {\n        try\n        {\n            var file = Path.Combine(Dispatcher.Invoke<string>(() => _tempPath), name);\n\n            if (File.Exists(file))\n                File.Delete(file);\n\n            using (var webClient = new WebClient { Credentials = CredentialCache.DefaultNetworkCredentials })\n                await webClient.DownloadFileTaskAsync(uri, file);\n\n            //Replaces the special chars.\n            var text = await Task.Factory.StartNew(() => File.ReadAllText(file, Encoding.UTF8).Replace(\"&#\", \"&amp;#\"));\n            await Task.Factory.StartNew(() => File.WriteAllText(file, text, Encoding.UTF8));\n\n\n            //Saves the template for later, when exporting the translation.\n            if (name.EndsWith(\"en.xaml\"))\n                _resourceTemplate = text;\n\n            var dictionary = await Task.Factory.StartNew(() => new ResourceDictionary { Source = new Uri(Path.GetFullPath(file), UriKind.Absolute) });\n\n            _resourceList.Add(dictionary);\n\n            //if (name.EndsWith(\"en.xaml\"))\n            //    Application.Current.Resources.MergedDictionaries.Add(dictionary);\n\n            //using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(text)))\n            //{\n            //    var dictionary = (ResourceDictionary)System.Windows.Markup.XamlReader.Load(stream, new ParserContext { XmlSpace = \"preserve\" });\n            //}\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Downloading File\", ex.Message));\n        }\n    }\n\n    private async Task LoadFilesAsync()\n    {\n        try\n        {\n            var files = await Task.Factory.StartNew(() => Directory.EnumerateFiles(_tempPath, \"*.xaml\"));\n\n            foreach (var file in files)\n            {\n                //Replaces the special chars.\n                var text = await Task.Factory.StartNew(() => File.ReadAllText(file, Encoding.UTF8).Replace(\"&#\", \"&amp;#\"));\n                await Task.Factory.StartNew(() => File.WriteAllText(file, text, Encoding.UTF8));\n\n                //Saves the template for later, when exporting the translation.\n                if (file.EndsWith(\"en.xaml\"))\n                    _resourceTemplate = text;\n\n                var dictionary = await Task.Factory.StartNew(() => new ResourceDictionary { Source = new Uri(Path.GetFullPath(file), UriKind.Absolute) });\n\n                _resourceList.Add(dictionary);\n            }\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Loading Offline File\", ex.Message));\n        }\n    }\n\n    private void ShowTranslations(string baseCulture, string specificCulture)\n    {\n        //var baseCulture = FromComboBox.SelectionBoxItem as Culture;\n        //var specificCulture = ToComboBox.SelectionBoxItem as Culture;\n\n        if (baseCulture == null)\n        {\n            _translationList = null;\n            BaseDataGrid.ItemsSource = null;\n            return;\n        }\n\n        var baseResource = _resourceList.FirstOrDefault(x => x.Source?.OriginalString.EndsWith(baseCulture + \".xaml\") ?? false);\n        //var baseResource = Application.Current.Resources.MergedDictionaries.FirstOrDefault(x => x.Source?.OriginalString.EndsWith(baseCulture + \".xaml\") ?? false);\n\n        if (baseResource == null)\n            return;\n\n        if (specificCulture == null)\n        {\n            _translationList = new ObservableCollection<Translation>(baseResource.Keys.Cast<string>().Select(y => new Translation\n            {\n                Key = y,\n                BaseText = (string)baseResource[y]\n            }).OrderBy(o => o.Key).ToList());\n\n            BaseDataGrid.ItemsSource = _translationList;\n            return;\n        }\n\n        var specificResource = _resourceList.LastOrDefault(x => x.Source?.OriginalString.EndsWith(specificCulture + \".xaml\") ?? false);\n\n        if (specificResource == null)\n        {\n            _translationList = new ObservableCollection<Translation>(baseResource.Keys.Cast<string>().Select(y => new Translation\n            {\n                Key = y,\n                BaseText = (string)baseResource[y]\n            }).OrderBy(o => o.Key).ToList());\n\n            BaseDataGrid.ItemsSource = _translationList;\n            return;\n        }\n\n        _translationList = new ObservableCollection<Translation>(baseResource.Keys.Cast<string>().Select(y => new Translation\n        {\n            Key = y,\n            BaseText = (string)baseResource[y],\n            SpecificText = (string)specificResource[y]\n        }).OrderBy(o => o.Key).ToList());\n\n        BaseDataGrid.ItemsSource = _translationList;\n    }\n\n    private bool ExportTranslation(string path)\n    {\n        try\n        {\n            var lines = _resourceTemplate.Split('\\n');\n\n            for (var i = 0; i < lines.Length; i++)\n            {\n                var keyIndex = lines[i].IndexOf(\":Key=\", StringComparison.Ordinal);\n\n                if (lines[i].TrimStart().StartsWith(\"<!--\") || keyIndex == -1)\n                    continue;\n\n                var keyAux = lines[i].Substring(keyIndex + 6);\n                var key = keyAux.Substring(0, keyAux.IndexOf(\"\\\"\", StringComparison.Ordinal));\n\n                var translated = _translationList.FirstOrDefault(x => x.Key == key);\n\n                //\"    <s:String x:Key=\\\"Size\\\">Size</s:String>\"\n                if (string.IsNullOrWhiteSpace(translated?.SpecificText))\n                    lines[i] = $\"    <!--{lines[i].TrimStart()}-->\"; //Comment the line.\n                else\n                    lines[i] = $\"    <s:String x:Key=\\\"{key}\\\">{translated.SpecificText}</s:String>\";\n            }\n\n            if (File.Exists(path))\n                File.Delete(path);\n\n            File.WriteAllText(path, string.Join(Environment.NewLine, lines).Replace(\"&amp;#\", \"&#\"), Encoding.UTF8);\n            return true;\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Saving Translation\", ex.Message));\n            return false;\n        }\n    }\n\n    private string CheckSupportedCulture(string cultureName)\n    {\n        //Using HashSet, because we can check if it contains string in O(1) time\n        //Only creating it takes some time,\n        //but it's better than performing Contains multiple times on the list in the loop below\n        var cultureHash = new HashSet<string>(_cultures);\n\n        if (cultureHash.Contains(cultureName))\n            return cultureName;\n\n        var t = CultureInfo.GetCultureInfo(cultureName);\n\n        while (t != CultureInfo.InvariantCulture)\n        {\n            if (cultureHash.Contains(t.Name))\n                return t.Name;\n\n            t = t.Parent;\n        }\n\n        throw new CultureNotFoundException();\n    }\n\n    private async Task<IEnumerable<string>> GetProperCulturesAsync()\n    {\n        var allCodes = await Task.Factory.StartNew(() => CultureInfo.GetCultures(CultureTypes.AllCultures).Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name));\n\n        try\n        {\n            var downloadedCodes = GetLanguageCodesOffline();\n            var properCodes = await Task.Factory.StartNew(() => allCodes.Where(x => downloadedCodes.Contains(x)));\n                \n            return properCodes ?? allCodes;\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Getting Language Codes\", ex.Message +\n                Environment.NewLine + \"Loading all local language codes.\"));\n        }\n\n        GC.Collect();\n        return allCodes;\n    }\n\n    private List<string> GetLanguageCodesOffline()\n    {\n        //I'm taking a shortcut in here.\n        return (\"af;af-NA;agq;ak;am;ar;ar-AE;ar-BH;ar-DJ;ar-DZ;ar-EG;ar-ER;ar-IL;ar-IQ;ar-JO;ar-KM;ar-KW;ar-LB;ar-LY;ar-MA;ar-MR;ar-OM;ar-PS;ar-QA;ar-SA;ar-SD;ar-SO;\" +\n                \"ar-SS;ar-SY;ar-TD;ar-TN;ar-YE;as;asa;ast;az;az-Cyrl;bas;be;bem;bez;bg;bm;bn;bn-IN;bo;bo-IN;br;brx;bs;bs-Cyrl;ca;ca-FR;ccp;ce;ceb;cgg;chr;cs;cu;cy;da;\" +\n                \"dav;de;de-AT;de-CH;de-IT;de-LI;de-LU;dje;dsb;dua;dyo;dz;ebu;ee;ee-TG;el;en;en-001;en-150;en-AE;en-AG;en-AI;en-AT;en-AU;en-BB;en-BE;en-BI;en-BM;en-BS;\" +\n                \"en-BW;en-BZ;en-CA;en-CC;en-CH;en-CK;en-CM;en-CX;en-DE;en-DK;en-DM;en-ER;en-FI;en-FJ;en-FK;en-GB;en-GD;en-GG;en-GH;en-GI;en-GM;en-GU;en-GY;en-HK;en-IE;\" +\n                \"en-IL;en-IM;en-IN;en-IO;en-JE;en-JM;en-KE;en-KI;en-KN;en-KY;en-LC;en-LR;en-LS;en-MG;en-MH;en-MO;en-MP;en-MS;en-MT;en-MU;en-MW;en-MY;en-NA;en-NF;en-NG;\" +\n                \"en-NL;en-NR;en-NU;en-NZ;en-PG;en-PH;en-PK;en-PN;en-PW;en-RW;en-SB;en-SC;en-SD;en-SE;en-SG;en-SH;en-SI;en-SL;en-SS;en-SX;en-SZ;en-TK;en-TO;en-TT;en-TV;\" +\n                \"en-TZ;en-UG;en-VC;en-VU;en-WS;en-ZA;en-ZM;en-ZW;eo;es;es-419;es-AR;es-BO;es-BR;es-BZ;es-CL;es-CO;es-CR;es-CU;es-DO;es-EC;es-GQ;es-GT;es-HN;es-MX;es-NI;\" +\n                \"es-PA;es-PE;es-PH;es-PR;es-PY;es-SV;es-US;es-UY;es-VE;et;eu;ewo;fa;ff;ff-Latn-GH;ff-Latn-GM;ff-Latn-GN;ff-Latn-LR;ff-Latn-MR;ff-Latn-NG;ff-Latn-SL;fi;fil;\" +\n                \"fo;fo-DK;fr;fr-BE;fr-BI;fr-CA;fr-CD;fr-CH;fr-CI;fr-CM;fr-DJ;fr-DZ;fr-GF;fr-GN;fr-HT;fr-KM;fr-LU;fr-MA;fr-MG;fr-ML;fr-MR;fr-MU;fr-RE;fr-RW;fr-SC;fr-SN;fr-SY;\" +\n                \"fr-TD;fr-TN;fr-VU;fur;fy;ga;gd;gl;gsw;gu;guz;gv;ha;haw;he;hi;hr;hr-BA;hsb;hu;hy;ia;id;ig;ii;is;it;it-CH;ja;jgo;jmc;jv;ka;kab;kam;kde;kea;khq;ki;kk;kkj;kl;kln;\" +\n                \"km;kn;ko;ko-KP;kok;ks;ksb;ksf;ksh;ku;kw;ky;lag;lb;lg;lkt;ln;ln-AO;lo;lrc;lrc-IQ;lt;lu;luo;luy;lv;mas;mas-TZ;mer;mfe;mg;mgh;mgo;mi;mk;ml;mn;mni;mr;ms;ms-BN;ms-SG;\" +\n                \"mt;mua;my;mzn;naq;nb;nd;nds;nds-NL;ne;ne-IN;nl;nl-AW;nl-BE;nl-BQ;nl-CW;nl-SR;nl-SX;nmg;nn;nnh;nus;nyn;om;om-KE;or;os;os-RU;pa;pa-Arab;pl;prg;ps;ps-PK;pt;pt-AO;\" +\n                \"pt-CV;pt-GW;pt-LU;pt-MO;pt-MZ;pt-PT;pt-ST;pt-TL;rm;rn;ro;ro-MD;rof;ru;ru-BY;ru-KG;ru-KZ;ru-MD;ru-UA;rw;rwk;sah;saq;sbp;sd;sd-Deva;se;se-FI;se-SE;seh;ses;sg;shi;\" +\n                \"shi-Latn;si;sk;sl;smn;sn;so;so-DJ;so-ET;so-KE;sq;sq-MK;sq-XK;sr;sr-Cyrl-BA;sr-Cyrl-ME;sr-Cyrl-XK;sr-Latn;sr-Latn-BA;sr-Latn-ME;sr-Latn-XK;sv;sv-FI;sw;sw-CD;sw-KE;\" +\n                \"sw-UG;ta;ta-LK;ta-MY;ta-SG;te;teo;teo-KE;tg;th;ti;ti-ER;tk;to;tr;tr-CY;tt;twq;tzm;ug;uk;ur;ur-IN;uz;uz-Arab;uz-Cyrl;vai;vai-Latn;vi;vo;vun;wae;wo;xh;xog;yav;yi;yo;\" +\n                \"yo-BJ;zgh;zh;zh-Hans-HK;zh-Hans-MO;zh-Hant;zu\").Split(';').ToList();\n    }\n\n    private async Task<IEnumerable<string>> GetLanguageCodesAsync()\n    {\n        var path = await GetLanguageCodesPathAsync();\n\n        if (string.IsNullOrEmpty(path))\n            throw new WebException(\"Can't get language codes. Path to language codes is null\");\n\n        var request = (HttpWebRequest)WebRequest.Create(path);\n        request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n\n        var response = (HttpWebResponse)await request.GetResponseAsync();\n\n        using (var resultStream = response.GetResponseStream())\n        {\n            if (resultStream == null)\n                throw new WebException(\"Empty response from server when getting language codes\");\n\n            using (var reader = new StreamReader(resultStream))\n            {\n                var result = await reader.ReadToEndAsync();\n\n                var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),\n                    new System.Xml.XmlDictionaryReaderQuotas());\n\n                var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));\n                var languages = json.Elements();\n\n                return await Task.Factory.StartNew(() => languages.Where(x => x.XPathSelectElement(\"defs\").Value != \"0\").Select(x => x.XPathSelectElement(\"lang\").Value));\n            }\n        }\n    }\n\n    private async Task<string> GetLanguageCodesPathAsync()\n    {\n        var request = (HttpWebRequest)WebRequest.Create(\"https://datahub.io/core/language-codes/datapackage.json\");\n        request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n\n        var response = (HttpWebResponse)await request.GetResponseAsync();\n\n        using (var resultStream = response.GetResponseStream())\n        {\n            if (resultStream == null)\n                throw new WebException(\"Empty response from server when getting language codes path\");\n\n            using (var reader = new StreamReader(resultStream))\n            {\n                var result = await reader.ReadToEndAsync();\n\n                var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),\n                    new System.Xml.XmlDictionaryReaderQuotas());\n\n                var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));\n\n                return await Task.Factory.StartNew(() => json.XPathSelectElement(\"resources\").Elements().First(x => x.XPathSelectElement(\"name\").Value == \"ietf-language-tags_json\").XPathSelectElement(\"path\").Value);\n            }\n        }\n    }\n\n    #endregion\n}\n\ninternal class Culture\n{\n    public string Code { get; set; }\n    public string Name { get; set; }\n    public string CodeName => Code.PadRight(3) + \" - \" + Name;\n}\n\ninternal class Translation\n{\n    public string Key { get; set; }\n    public string BaseText { get; set; }\n    public string SpecificText { get; set; }\n}"
  },
  {
    "path": "Other/Translator/Util/DataGridHelper.cs",
    "content": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Data;\nusing System.Windows.Media;\n\nnamespace Translator.Util;\n\npublic static class DataGridHelper\n{\n    public static DataGridCell GetCell(DataGrid dg, int row, int column)\n    {\n        var rowContainer = GetRow(dg, row);\n\n        if (rowContainer != null)\n        {\n            var presenter = VisualHelper.GetVisualChild<DataGridCellsPresenter>(rowContainer);\n\n            // try to get the cell but it may possibly be virtualized\n            var cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);\n\n            if (cell == null)\n            {\n                // now try to bring into view and retrieve the cell\n                dg.ScrollIntoView(rowContainer, dg.Columns[column]);\n                cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);\n            }\n\n            return cell;\n        }\n\n        return null;\n    }\n\n    public static DataGridRow GetRow(DataGrid dg, int index)\n    {\n        dg.UpdateLayout();\n        var row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);\n\n        if (row == null)\n        {\n            // may be virtualized, bring into view and try again\n            dg.ScrollIntoView(dg.Items[index]);\n            row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);\n        }\n\n        return row;\n    }\n\n    public static int GetRowIndex(DataGrid dg, DataGridCellInfo dgci)\n    {\n        if (!dgci.IsValid)\n            return -1;\n\n        var dgrow = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(dgci.Item);\n\n        return dgrow?.GetIndex() ?? -1;\n    }\n\n    public static int GetColIndex(DataGridCellInfo dgci)\n    {\n        return dgci.Column.DisplayIndex;\n    }\n\n    public static DataGridCell FindParentCell(DataGrid grid, DependencyObject child, int i)\n    {\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is DataGridCell)\n            return logicalParent as DataGridCell;\n\n        if (i > 4 || parent == null || parent is DataGridCell)\n            return parent as DataGridCell;\n\n        return FindParentCell(grid, parent, i + 1);\n    }\n\n    public static DataGridCell GetDataGridCell(DataGridCellInfo cellInfo)\n    {\n        if (cellInfo.IsValid == false)\n            return null;\n\n        var cellContent = cellInfo.Column.GetCellContent(cellInfo.Item);\n\n        return cellContent?.Parent as DataGridCell;\n    }\n\n    public static DataGridCell GetDataGridCell(DataGrid dataGrid)\n    {\n        if (dataGrid.CurrentCell.IsValid == false)\n            return null;\n\n        var cellContent = dataGrid.CurrentCell.Column.GetCellContent(dataGrid.CurrentCell.Item);\n\n        if (cellContent == null)\n        {\n            return GetCell(dataGrid, GetColIndex(dataGrid.CurrentCell), GetRowIndex(dataGrid, dataGrid.CurrentCell));\n        }\n\n        return cellContent.Parent as DataGridCell;\n    }\n\n    public static void FocusOnFirstCell(this DataGrid dataGrid)\n    {\n        dataGrid.SelectedIndex = 0;\n        //dataGrid.CurrentCell = new DataGridCellInfo(DataGrid.Items[0], DataGrid.Columns[0]);\n\n        var cell = GetCell(dataGrid, 0, 0);\n\n        cell?.Focus();\n    }\n\n    public static bool Sort(this DataGrid grid, ListSortDirection direction, string property, string second = null)\n    {\n        //If there's already a sort defined in another property.\n        foreach (var column in grid.Columns)\n        {\n            if (column.SortDirection.HasValue)\n                return false;\n\n            var dataColumn = column as DataGridTextColumn;\n\n            if (dataColumn == null || dataColumn.Binding == null) continue;\n\n            var binding = dataColumn.Binding as Binding;\n\n            if (binding != null && binding.Path != null && binding.Path.Path == property)\n                column.SortDirection = direction;\n        }\n\n        //Add the new sort description.\n        grid.Items.SortDescriptions.Add(new SortDescription(property, direction));\n\n        if (second != null)\n            grid.Items.SortDescriptions.Add(new SortDescription(second, direction));\n\n        return true;\n    }\n\n    public static void ReSort(this DataGrid grid, Dictionary<string, ListSortDirection> sorted)\n    {\n        if (sorted == null || !sorted.Any())\n            sorted = grid.Columns.Where(x => x.SortDirection.HasValue)\n                .ToDictionary(w => w.SortMemberPath, w => w.SortDirection.Value);\n\n        grid.Items.SortDescriptions.Clear();\n\n        foreach (var sort in sorted)\n        {\n            #region Search for the column that should be sorted\n\n            var column = grid.Columns.FirstOrDefault(x =>\n            {\n                var dataColumn = x as DataGridTextColumn;\n\n                if (dataColumn == null || dataColumn.Binding == null)\n                    return false;\n\n                var binding = dataColumn.Binding as Binding;\n\n                    //Only returns true if it's the match.\n                    if (binding != null && binding.Path != null && binding.Path.Path == sort.Key)\n                    return true;\n\n                return false;\n            });\n\n            #endregion\n\n            //Displays the sort direction glyph.\n            if (column != null)\n                column.SortDirection = sort.Value;\n\n            //Add the new sort description.\n            grid.Items.SortDescriptions.Add(new SortDescription(sort.Key, sort.Value));\n        }\n    }\n}\n"
  },
  {
    "path": "Other/Translator/Util/LogWriter.cs",
    "content": "using System;\nusing System.IO;\n\nnamespace Translator.Util;\n\n/// <summary>\n/// Log Writer Class\n/// </summary>\npublic static class LogWriter\n{\n    /// <summary>\n    /// Write to Error Log (Text File).\n    /// </summary>\n    /// <param name=\"ex\">The Exception to write.</param>\n    /// <param name=\"title\">The name of the error</param>\n    /// <param name=\"additional\">Additional information.</param>\n    /// <param name=\"isFallback\">Fallbacks to the Documents folder.</param>\n    public static void Log(Exception ex, string title, object additional = null, bool isFallback = false)\n    {\n        try\n        {\n            #region Output folder\n\n            var documents = isFallback ? Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) : \".\";\n            var folder = Path.Combine(documents, \"ScreenToGif\", \"Logs\");\n\n            if (!Directory.Exists(folder))\n                Directory.CreateDirectory(folder);\n\n            #endregion\n\n            #region Creates the file\n\n            var date = Path.Combine(folder, DateTime.Now.ToString(\"yy_MM_dd\") + \".txt\");\n            var dateTime = Path.Combine(folder, DateTime.Now.ToString(\"yy_MM_dd hh_mm_ss_fff\") + \".txt\");\n\n            FileStream fs = null;\n            var inUse = false;\n\n            try\n            {\n                fs = new FileStream(date, FileMode.OpenOrCreate, FileAccess.ReadWrite);\n            }\n            catch (Exception)\n            {\n                inUse = true;\n                fs = new FileStream(dateTime, FileMode.OpenOrCreate, FileAccess.ReadWrite);\n            }\n\n            fs.Dispose();\n\n            #endregion\n\n            #region Append the exception information\n\n            using (var fileStream = new FileStream(inUse ? dateTime : date, FileMode.Append, FileAccess.Write))\n            {\n                using (var writer = new StreamWriter(fileStream))\n                {\n                    writer.WriteLine($\"► Title - {Environment.NewLine}\\t{title}\");\n                    writer.WriteLine($\"▬ Message - {Environment.NewLine}\\t{ex.Message}\");\n                    writer.WriteLine($\"○ Type - {Environment.NewLine}\\t{ex.GetType()}\");\n                    writer.WriteLine(FormattableString.Invariant($\"♦ [Version] Date/Hour - {Environment.NewLine}\\t[{App.Version}] {DateTime.Now}\"));\n                    writer.WriteLine($\"▲ Source - {Environment.NewLine}\\t{ex.Source}\");\n                    writer.WriteLine($\"▼ TargetSite - {Environment.NewLine}\\t{ex.TargetSite}\");\n\n                    var bad = ex as BadImageFormatException;\n\n                    if (bad != null)\n                        writer.WriteLine($\"► Fuslog - {Environment.NewLine}\\t{bad.FusionLog}\");\n\n                    if (additional != null)\n                        writer.WriteLine($\"◄ Additional - {Environment.NewLine}\\t{additional}\");\n\n                    writer.WriteLine($\"♠ StackTrace - {Environment.NewLine}{ex.StackTrace}\");\n\n                    if (ex.InnerException != null)\n                    {\n                        writer.WriteLine();\n                        writer.WriteLine($\"▬▬ Message - {Environment.NewLine}\\t{ex.InnerException.Message}\");\n                        writer.WriteLine($\"○○ Type - {Environment.NewLine}\\t{ex.InnerException.GetType()}\");\n                        writer.WriteLine($\"▲▲ Source - {Environment.NewLine}\\t{ex.InnerException.Source}\");\n                        writer.WriteLine($\"▼▼ TargetSite - {Environment.NewLine}\\t{ex.InnerException.TargetSite}\");\n                        writer.WriteLine($\"♠♠ StackTrace - {Environment.NewLine}{ex.InnerException.StackTrace}\");\n\n                        if (ex.InnerException.InnerException != null)\n                        {\n                            writer.WriteLine();\n                            writer.WriteLine($\"▬▬▬ Message - {Environment.NewLine}\\t{ex.InnerException.InnerException.Message}\");\n                            writer.WriteLine($\"○○○ Type - {Environment.NewLine}\\t{ex.InnerException.InnerException.GetType()}\");\n                            writer.WriteLine($\"▲▲▲ Source - {Environment.NewLine}\\t{ex.InnerException.InnerException.Source}\");\n                            writer.WriteLine($\"▼▼▼ TargetSite - {Environment.NewLine}\\t{ex.InnerException.InnerException.TargetSite}\");\n                            writer.WriteLine($\"♠♠♠ StackTrace - {Environment.NewLine}\\t{ex.InnerException.InnerException.StackTrace}\");\n\n                            if (ex.InnerException.InnerException.InnerException != null)\n                            {\n                                writer.WriteLine();\n                                writer.WriteLine($\"▬▬▬▬ Message - {Environment.NewLine}\\t{ex.InnerException.InnerException.InnerException.Message}\");\n                                writer.WriteLine($\"○○○○ Type - {Environment.NewLine}\\t{ex.InnerException.InnerException.InnerException.GetType()}\");\n                                writer.WriteLine($\"▲▲▲▲ Source - {Environment.NewLine}\\t{ex.InnerException.InnerException.InnerException.Source}\");\n                                writer.WriteLine($\"▼▼▼▼ TargetSite - {Environment.NewLine}\\t{ex.InnerException.InnerException.InnerException.TargetSite}\");\n                                writer.WriteLine($\"♠♠♠♠ StackTrace - {Environment.NewLine}\\t{ex.InnerException.InnerException.InnerException.StackTrace}\");\n                            }\n                        }\n                    }\n\n                    writer.WriteLine();\n                    writer.WriteLine(\"----------------------------------\");\n                    writer.WriteLine();\n                }\n            }\n\n            #endregion\n        }\n        catch (Exception)\n        {\n            //One last trial.\n            if (!isFallback)\n                Log(ex, title, additional, true);\n        }\n    }\n}"
  },
  {
    "path": "Other/Translator/Util/VisualHelper.cs",
    "content": "using System;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\n\nnamespace Translator.Util;\n\npublic static class VisualHelper\n{\n    public static TP GetParent<TP>(DependencyObject child, int i) where TP : DependencyObject\n    {\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is TP)\n            return logicalParent as TP;\n\n        if (i > 4 || parent == null || parent is TP)\n            return parent as TP;\n\n        return GetParent<TP>(parent, i + 1);\n    }\n\n    public static TP GetParent<TP>(DependencyObject child, Type stopWhen) where TP : Visual\n    {\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is TP)\n            return logicalParent as TP;\n\n        if (parent is TP)\n            return parent as TP;\n\n        if (parent == null || parent.GetType() == stopWhen)\n            return null;\n\n        return GetParent<TP>(parent, stopWhen);\n    }\n\n    public static T GetVisualChild<T>(Visual parent) where T : Visual\n    {\n        var child = default(T);\n        var numVisuals = VisualTreeHelper.GetChildrenCount(parent);\n\n        for (var i = 0; i < numVisuals; i++)\n        {\n            var v = (Visual)VisualTreeHelper.GetChild(parent, i);\n\n            child = v as T ?? GetVisualChild<T>(v);\n\n            if (child != null)\n                break;\n        }\n\n        return child;\n    }\n\n    public static T DeepCopy<T>(UIElement source) where T : new()\n    {\n        if (source == null)\n            return new T();\n\n        var savedObject = System.Windows.Markup.XamlWriter.Save(source);\n\n        var stringReader = new StringReader(savedObject);\n        var xmlReader = System.Xml.XmlReader.Create(stringReader);\n\n        return (T)System.Windows.Markup.XamlReader.Load(xmlReader);\n    }\n\n    public static Storyboard FindStoryboard(this FrameworkElement visual, string key)\n    {\n        var resource = visual.FindResource(key) as Storyboard;\n\n        if (resource == null)\n            return new Storyboard();\n\n        return resource;\n    }\n}\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\" markdown=\"1\">\n   <sup>Special thanks to:</sup>\n   <br>\n   <br>\n   <a href=\"https://www.warp.dev/ScreenToGif\">\n      <img alt=\"Warp sponsorship\" width=\"400\" src=\"https://github.com/warpdotdev/brand-assets/blob/640dffd347439bbcb535321ab36b7281cf4446c0/Github/Sponsor/Warp-Github-LG-03.png\">\n   </a>\n\n### [Warp, built for coding with multiple AI agents](https://www.warp.dev/ScreenToGif)\n[Available for MacOS, Linux, & Windows](https://www.warp.dev/ScreenToGif)<br>\n\n</div>\n<hr>\n\n<p align=\"center\">\n  <a href=\"https://github.com/NickeManarin/ScreenToGif\" target=\"_blank\">\n    <img align=\"center\" alt=\"screen recorder\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/logos/ms-icon-144x144.png\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/NickeManarin/ScreenToGif/stargazers\" target=\"_blank\">\n    <img alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/NickeManarin/ScreenToGif.svg\" />\n  </a>\n\n  <a href=\"https://github.com/NickeManarin/ScreenToGif/releases\" target=\"_blank\">\n    <img alt=\"All releases\" src=\"https://img.shields.io/github/downloads/NickeManarin/ScreenToGif/total.svg\" />\n  </a>\n\n  <a href=\"https://chocolatey.org/packages/screentogif\" target=\"_blank\">\n    <img alt=\"All Chocolatey releases\" src=\"https://img.shields.io/chocolatey/dt/screentogif.svg\" />\n  </a>\n</p>\n\n<h1 align=\"center\">\n  ScreenToGif 🎬\n  <a href=\"http://www.screentogif.com/\" target=\"_blank\">screentogif.com</a>\n</h1>\n\n<p align=\"center\">This tool allows you to record a selected area of your <strong>screen</strong>, live feed from your <strong>webcam</strong> or live drawings from a <strong>sketchboard</strong>. Afterward, you can edit and save the animation as a gif, apng, video, psd or png image.</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/NickeManarin/ScreenToGif/releases\" target=\"_blank\">\n    <img align=\"center\" alt=\"download\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/wiki/download-now.png\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.microsoft.com/en-us/p/screentogif/9n3sqk8pds8g\" target=\"_blank\">\n    <img align=\"center\" alt=\"download Microsoft Store\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/wiki/download-store.png\"/>\n  </a>\n\n  <a href=\"https://chocolatey.org/packages/screentogif\" target=\"_blank\">\n    <img align=\"center\" alt=\"Download from Chocolatey\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/wiki/download-chocolatey.png\"/>\n  </a>\n</p>\n\n<p align=\"center\">\n  <g-emoji ios-version=\"6.0\" fallback-src=\"https://assets-cdn.github.com/images/icons/emoji/unicode/26a0.png\" alias=\"warning\">⚠️</g-emoji>\n  Attention, it requires <a href=\"https://dotnet.microsoft.com/en-us/download/dotnet/9.0/runtime\">.NET 9 Desktop Runtime</a> (or above). \n  <g-emoji ios-version=\"6.0\" fallback-src=\"https://assets-cdn.github.com/images/icons/emoji/unicode/26a0.png\" alias=\"warning\">⚠️</g-emoji>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/NickeManarin/ScreenToGif/releases/latest\" target=\"_blank\">\n    <img alt=\"Latest GitHub release\" src=\"https://img.shields.io/github/release/nickemanarin/screentogif.svg\" />\n  </a>\n\n  <a href=\"https://chocolatey.org/packages/screentogif\" target=\"_blank\">\n    <img alt=\"Latest Chocolatey release\" src=\"https://img.shields.io/chocolatey/v/screentogif.svg\" />\n  </a>\n\n  <a href=\"https://github.com/NickeManarin/ScreenToGif/wiki/Help\" target=\"_blank\">\n    <img alt=\"Documentation WIP\" src=\"https://img.shields.io/badge/Docs-WIP-red.svg\" />\n  </a>\n\n  <a href=\"https://github.com/NickeManarin/ScreenToGif/issues\" target=\"_blank\">\n    <img alt=\"Issues\" src=\"https://img.shields.io/github/issues/NickeManarin/ScreenToGif.svg\" />\n  </a>\n\n  <a style=\"text-decoration:none\" href=\"https://discord.gg/XgEqDHX\">\n    <img src=\"https://img.shields.io/discord/318260719680356352.svg\" alt=\"Discord\" />\n  </a>\n</p>\n\t\n<h2>Would you like to help the project?</h2>\n\n * PayPal donation: [![PayPal page](https://img.shields.io/badge/donate-Paypal-fd8200.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=JCY2BGLULSWVJ&lc=US&item_name=ScreenToGif&item_number=screentogif&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted)\n * Patreon subscription: [![Patreon subscription](https://img.shields.io/badge/subscribe-Patreon-orange.svg)](https://www.patreon.com/nicke)\n * Ko-fi donation: [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/B0B7Y5Z9)\n * Flattr subscription: https://flattr.com/@NickeManarin/domain/screentogif.com \n * Steam wishlist: [![Steam wishlist](https://img.shields.io/badge/donate-Steam-171a21.svg)](http://steamcommunity.com/id/nickesm/wishlist)\n * GOG Galaxy wishlist: https://www.gog.com/u/Nickesm/wishlist\n * Amazon wishlist: https://www.amazon.com/hz/wishlist/ls/2S54SRWY2K8KF?ref_=wl_share\n * Feedback (reporting bugs, ideas, etc) [![Author's Twitter](https://img.shields.io/badge/Twitter-%40NickeManarin-blue.svg)](https://twitter.com/NickeManarin)\n * [Anyone can still contribute to the localization of the app/website/installer](https://github.com/NickeManarin/ScreenToGif/blob/master/LOCALIZATION.md)\n * Create a review. :)\n\n\n<h2>Please, avoid selling this app as yours</h2>\nI don't care if you copy the source code to use in your project, but please avoid simply changing the name and selling as your work. \nThat's not why I'm sharing the source code, at all.\n\n<h2>Screenshots</h2>\n\n<p align=\"center\">\n <img align=\"center\" alt=\"start up\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/media/Recorder.png\" />\n</p>\n\n<p align=\"center\">\n <img align=\"center\" alt=\"start up\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/media/Startup.png\" />\n</p>\n\n<p align=\"center\">\n  <img align=\"center\" alt=\"editor\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/media/Editor.gif\" />\n</p>\n\n<p align=\"center\">\n  <img align=\"center\" alt=\"option\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/media/Options.gif\" />\n</p>\n\n<p align=\"center\">\n  <img align=\"center\" alt=\"keystrokes\" src=\"https://nickemanarin.github.io/ScreenToGif-Website/media/Keys.gif\" />\n</p>\n\n<h2>Mentions</h2>\n\n<table>\n\t<tr>\n\t\t<th>Website</th>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://www.chip.de/downloads/Screen-To-Gif_65993193.html\">Chip</a></td>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://www.softpedia.com/get/Multimedia/Graphic/Graphic-Others/Screen-to-Gif.shtml\">Softpedia</a></td>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://www.portablefreeware.com/index.php?id=2895\">PortableFreeware</a></td>\n\t</tr>\n</table>\n\n<h2>The creator also distributes this app via these websites</h2>\n\n* [Chocolatey](https://chocolatey.org/packages/screentogif)\n* [FOSSHUB](https://www.fosshub.com/ScreenToGif.html)\n* [Microsoft Store](https://www.microsoft.com/en-us/p/screentogif/9n3sqk8pds8g)\n"
  },
  {
    "path": "ScreenToGif/App.xaml",
    "content": "<Application x:Class=\"ScreenToGif.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n             xmlns:cx=\"clr-namespace:ScreenToGif.Util.Converters\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:viewModel=\"clr-namespace:ScreenToGif.ViewModel\"\n             ShutdownMode=\"OnExplicitShutdown\" Startup=\"App_Startup\" Exit=\"App_Exit\" \n             DispatcherUnhandledException=\"App_DispatcherUnhandledException\">\n\n    <Application.Resources>\n        <ResourceDictionary>\n\n            <ResourceDictionary.MergedDictionaries>\n                <ResourceDictionary Source=\"/Resources/Vectors.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Glyphs.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Backgrounds.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Commands.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Settings.xaml\"/>\n\n                <!--Themes-->\n                <ResourceDictionary Source=\"/Themes/Colors/VeryDark.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Colors/Dark.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Colors/Medium.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Colors/Light.xaml\"/>\n                \n                <ResourceDictionary Source=\"/Themes/DataGrid.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Button.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/Common.xaml\"/>\n                <ResourceDictionary Source=\"/Themes/ComboBox.xaml\"/>\n\n                <!--Localizations-->\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.ar.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.cs.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.da.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.de.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.el.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.es-AR.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.es.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.fi.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.fr.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.ja.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.he.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.hu.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.ko.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.it.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.nl.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.pl.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.pt.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.pt-PT.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.ru.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.sw.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.sv.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.ta.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.tr.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.uk.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.vi.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.zh.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.zh-Hant.xaml\"/>\n                <ResourceDictionary Source=\"/Resources/Localization/StringResources.en.xaml\"/>\n            </ResourceDictionary.MergedDictionaries>\n\n            <viewModel:ApplicationViewModel x:Key=\"AppViewModel\"/>\n\n            <!--Converter-->\n            <BooleanToVisibilityConverter x:Key=\"Bool2Visibility\"/>\n            <c:InvertedBoolToVisibility x:Key=\"InvertedBoolToVisibility\"/>\n            <c:CountToBool x:Key=\"CountToBoolConverter\"/>\n            <c:IntToDecimal x:Key=\"IntToDecimalConverter\"/>\n            <c:EnumToInt x:Key=\"EnumToInt\"/>\n            <c:ColorToBrush x:Key=\"ColorToBrushConverter\"/>\n            <c:ShortcutSelection x:Key=\"ShortcutSelectionConverter\"/>\n            <c:IntToVisibility x:Key=\"IntToVisibility\"/>\n            <c:InvertedIntToVisibility x:Key=\"InvertedIntToVisibility\"/>\n            <c:EnumToVisibility x:Key=\"EnumToVisibility\"/>\n            <c:InvertedBool x:Key=\"InvertedBool\"/>\n            <cx:CommandToInputGestureText x:Key=\"CommandToInputGestureText\"/>\n            <c:EnumToBool x:Key=\"EnumToBool\"/>\n            <c:InvertedEnumToBool x:Key=\"InvertedEnumToBool\"/>\n            <c:BoolAndToVisibility x:Key=\"BoolAndToVisibility\"/>\n            <c:ContentToVisibility x:Key=\"ContentToVisibility\"/>\n            <c:UriToBitmap x:Key=\"UriToBitmapConverter\"/>\n            \n            <!--Effects-->\n            <DropShadowEffect x:Key=\"Shadow.Invariant\" ShadowDepth=\"0\" Color=\"Transparent\" Opacity=\"0\" BlurRadius=\"0\" RenderingBias=\"Performance\"/>\n\n            <!--Notification Icon-->\n            <n:NotifyIcon x:Key=\"NotifyIcon\" IconSource=\"/Resources/Logo.ico\" DataContext=\"{StaticResource AppViewModel}\" NotifyToolTipText=\"ScreenToGif\" Visibility=\"Collapsed\" \n                          LeftClickCommand=\"{Binding TrayLeftClick}\" LeftDoubleClickCommand=\"{Binding TrayDoubleLeftClick}\" MiddleClickCommand=\"{Binding TrayMiddleClick}\">\n                <n:NotifyIcon.ContextMenu>\n                    <ContextMenu>\n                        <n:ExtendedMenuItem Header =\"{StaticResource S.NewRecording}\" Icon=\"{StaticResource Vector.Record.New}\" Command=\"{Binding OpenRecorder}\" InputGestureText=\"{Binding RecorderGesture, UpdateSourceTrigger=PropertyChanged}\" Tag=\"S.NewRecording\"/>\n                        <n:ExtendedMenuItem Header =\"{StaticResource S.NewWebcamRecording}\" Icon=\"{StaticResource Vector.Camera.New}\" Command=\"{Binding OpenWebcamRecorder}\" InputGestureText=\"{Binding WebcamRecorderGesture, UpdateSourceTrigger=PropertyChanged}\" Tag=\"S.NewWebcamRecording\"/>\n                        <n:ExtendedMenuItem Header=\"{StaticResource S.NewBoardRecording}\" Icon=\"{StaticResource Vector.Board.New}\" Command=\"{Binding OpenBoardRecorder}\" InputGestureText=\"{Binding BoardRecorderGesture, UpdateSourceTrigger=PropertyChanged}\" Tag=\"S.NewBoardRecording\"/>\n                        <Separator/>\n                        <n:ExtendedMenuItem Header=\"{StaticResource S.StartUp.Editor}\" Icon=\"{StaticResource Vector.Editor}\" Command=\"{Binding OpenEditor}\" InputGestureText=\"{Binding EditorGesture, UpdateSourceTrigger=PropertyChanged}\" Tag=\"S.StartUp.Editor\"/>\n                        <n:ExtendedMenuItem Header=\"{StaticResource S.StartUp.Options}\" Icon=\"{StaticResource Vector.Options}\" Command=\"{Binding OpenOptions}\" InputGestureText=\"{Binding OptionsGesture, UpdateSourceTrigger=PropertyChanged}\" Tag=\"S.StartUp.Options\"/>\n                        <n:ExtendedMenuItem Header=\"{StaticResource S.Feedback.Feedback}\" Icon=\"{StaticResource Vector.Application}\" Command=\"{Binding OpenFeedback}\" Tag=\"S.Feedback.Feedback\"/>\n                        <n:ExtendedMenuItem Header=\"{StaticResource S.Troubleshoot.Title}\" Icon=\"{StaticResource Vector.Warning}\" Command=\"{Binding OpenTroubleshoot}\" Tag=\"S.Troubleshoot.Title\"/>\n                        <Separator/>\n                        <n:ExtendedMenuItem Header=\"{StaticResource S.Exit}\" Icon=\"{StaticResource Vector.Close}\" Command=\"{Binding ExitApplication}\" InputGestureText=\"{Binding ExitGesture, UpdateSourceTrigger=PropertyChanged}\" Tag=\"S.Exit\"/>\n                    </ContextMenu>\n                </n:NotifyIcon.ContextMenu>\n            </n:NotifyIcon>\n\n            <Style x:Key=\"Style.FocusVisual.NoMargin\">\n                <Setter Property=\"Control.Template\">\n                    <Setter.Value>\n                        <ControlTemplate>\n                            <Border>\n                                <Rectangle Margin=\"0\" SnapsToDevicePixels=\"True\" Stroke=\"{DynamicResource Element.Foreground}\" StrokeThickness=\"1\" StrokeDashArray=\"1,2\" RadiusX=\"4\" RadiusY=\"4\"/>\n                            </Border>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n\n            <!--RadioButton-->\n            <Style TargetType=\"{x:Type RadioButton}\">\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Style.FocusVisual.NoMargin}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"Padding\" Value=\"2,0,0,0\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type RadioButton}\">\n                            <Grid x:Name=\"templateRoot\" Background=\"Transparent\" SnapsToDevicePixels=\"True\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border x:Name=\"radioButtonBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                        Background=\"{TemplateBinding Background}\" CornerRadius=\"100\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                        Margin=\"1,1,2,1\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                                    <Grid x:Name=\"markGrid\" Margin=\"2\">\n                                        <Ellipse x:Name=\"optionMark\" Fill=\"{DynamicResource Element.Glyph}\" MinWidth=\"6\" MinHeight=\"6\" Opacity=\"0\"/>\n                                    </Grid>\n                                </Border>\n\n                                <ContentPresenter x:Name=\"contentPresenter\" Grid.Column=\"1\" Focusable=\"False\" \n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                                  RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Background\" TargetName=\"radioButtonBorder\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"radioButtonBorder\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Background\" TargetName=\"radioButtonBorder\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"radioButtonBorder\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                    <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"1\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsChecked\" Value=\"{x:Null}\">\n                                    <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"0.56\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" Value=\"0.6\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--ToolTip-->\n            <Style TargetType=\"{x:Type ToolTip}\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"MinWidth\" Value=\"20\"/>\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"Effect\" Value=\"{DynamicResource Shadow.Border.Dark}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToolTip}\">\n                            <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" Margin=\"2\" Background=\"{TemplateBinding Background}\" Padding=\"5\" TextBlock.Foreground=\"{TemplateBinding Foreground}\" CornerRadius=\"4\">\n                                <ContentPresenter Content=\"{TemplateBinding Content}\" Width=\"Auto\" HorizontalAlignment=\"Center\" TextBlock.Foreground=\"{TemplateBinding Foreground}\"/>\n                            </Border>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--ContextMenu-->\n            <Style TargetType=\"{x:Type ContextMenu}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n                <Setter Property=\"Grid.IsSharedSizeScope\" Value=\"True\"/>\n                <Setter Property=\"Placement\" Value=\"Bottom\"/>\n                <Setter Property=\"HorizontalOffset\" Value=\"-5\"/>\n                <Setter Property=\"Effect\" Value=\"{DynamicResource Shadow.Border.Dark}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ContextMenu}\">\n                            <Border x:Name=\"Border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" Margin=\"2\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                                <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                            </Border>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!-- Separator-->\n            <Style TargetType=\"{x:Type Separator}\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Light}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Separator}\">\n                            <Rectangle Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\" Fill=\"{TemplateBinding BorderBrush}\"/>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--LabelSeparator-->\n            <Style x:Key=\"LabelSeparator\" TargetType=\"{x:Type Label}\">\n                <Setter Property=\"Height\" Value=\"Auto\" />\n                <Setter Property=\"Padding\" Value=\"3,1\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Light}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Label}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Label Padding=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" \n                                       ContentStringFormat=\"{TemplateBinding ContentStringFormat}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                       ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\" Content=\"{TemplateBinding Content}\"/>\n\n                                <Rectangle Grid.Column=\"1\" Height=\"{TemplateBinding BorderThickness}\" Fill=\"{TemplateBinding BorderBrush}\" VerticalAlignment=\"Center\" Margin=\"5,0,0,0\"/>\n                            </Grid>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--ScrollBar Styles-->\n            <Style x:Key=\"ScrollBar.Button\" TargetType=\"{x:Type RepeatButton}\">\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n                <Setter Property=\"Focusable\" Value=\"False\"/>\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\n                            <Grid x:Name=\"Root\" Margin=\"0\">\n                                <Border x:Name=\"BackgroundBorder\" Background=\"{DynamicResource Brush.ScrollBar.Background}\" BorderBrush=\"{DynamicResource Brush.ScrollBar.Border}\" BorderThickness=\"1\" CornerRadius=\"4\"/>\n\n                                <Path x:Name=\"Arrow\" Stretch=\"None\" Data=\"{Binding Content, RelativeSource={RelativeSource TemplatedParent}}\" Fill=\"{DynamicResource Element.Glyph}\" \n                                      HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" SnapsToDevicePixels=\"True\"/>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.ScrollBar.Background.Hover}\"/>\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"BorderBrush\" Value=\"{DynamicResource Brush.ScrollBar.Border.Hover}\"/>\n                                    <Setter TargetName=\"Arrow\" Property=\"Fill\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.ScrollBar.Background.Pressed}\"/>\n                                    <Setter TargetName=\"BackgroundBorder\" Property=\"BorderBrush\" Value=\"{DynamicResource Brush.ScrollBar.Border.Pressed}\"/>\n                                    <Setter TargetName=\"Arrow\" Property=\"Fill\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ScrollBar.Thumb\" TargetType=\"{x:Type Thumb}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"Focusable\" Value=\"False\"/>\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.ScrollBar.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.ScrollBar.Border}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                            <Grid Background=\"Transparent\">\n                                <Border Background=\"{TemplateBinding Background}\" Margin=\"{TemplateBinding Padding}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" CornerRadius=\"4\"/>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Brush.ScrollBar.Background.Hover}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.ScrollBar.Border.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsDragging\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Brush.ScrollBar.Background.Pressed}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.ScrollBar.Border.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ScrollBar.Transparent\" TargetType=\"{x:Type RepeatButton}\">\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"Focusable\" Value=\"False\"/>\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\n                            <Rectangle Fill=\"{TemplateBinding Background}\" Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\"/>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style TargetType=\"{x:Type ScrollBar}\">\n                <Setter Property=\"Stylus.IsPressAndHoldEnabled\" Value=\"False\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.ScrollBar.Background.Back}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.ScrollBar.Background.Back}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1,0\"/>\n                <Setter Property=\"Width\" Value=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\"/>\n                <Setter Property=\"MinWidth\" Value=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ScrollBar}\">\n                            <Grid x:Name=\"Bg\" SnapsToDevicePixels=\"True\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition MaxHeight=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}\"/>\n                                    <RowDefinition Height=\"0.00001*\"/>\n                                    <RowDefinition MaxHeight=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}\"/>\n                                </Grid.RowDefinitions>\n\n                                <RepeatButton Grid.Row=\"0\" x:Name=\"PART_LineUpButton\" Command=\"{x:Static ScrollBar.LineUpCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBar.Button}\" \n                                              Content=\"M 0,4 C0,4 0,6 0,6 0,6 3.5,2.5 3.5,2.5 3.5,2.5 7,6 7,6 7,6 7,4 7,4 7,4 3.5,0.5 3.5,0.5 3.5,0.5 0,4 0,4 z\"/>\n\n                                <Border Grid.Row=\"1\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"/>\n                                <Track Grid.Row=\"1\" x:Name=\"PART_Track\" IsDirectionReversed=\"True\" IsEnabled=\"{TemplateBinding IsMouseOver}\">\n                                    <Track.DecreaseRepeatButton>\n                                        <RepeatButton Command=\"{x:Static ScrollBar.PageUpCommand}\" Style=\"{StaticResource ScrollBar.Transparent}\"/>\n                                    </Track.DecreaseRepeatButton>\n                                    <Track.IncreaseRepeatButton>\n                                        <RepeatButton Command=\"{x:Static ScrollBar.PageDownCommand}\" Style=\"{StaticResource ScrollBar.Transparent}\"/>\n                                    </Track.IncreaseRepeatButton>\n                                    <Track.Thumb>\n                                        <Thumb Style=\"{StaticResource ScrollBar.Thumb}\"/>\n                                    </Track.Thumb>\n                                </Track>\n\n                                <RepeatButton Grid.Row=\"2\" x:Name=\"PART_LineDownButton\" Command=\"{x:Static ScrollBar.LineDownCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBar.Button}\" \n                                              Content=\"M 0,2.5 C0,2.5 0,0.5 0,0.5 0,0.5 3.5,4 3.5,4 3.5,4 7,0.5 7,0.5 7,0.5 7,2.5 7,2.5 7,2.5 3.5,6 3.5,6 3.5,6 0,2.5 0,2.5 z\"/>\n                            </Grid>\n                            \n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter TargetName=\"Bg\" Property=\"Opacity\" Value=\"0.6\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n\n                <Style.Triggers>\n                    <Trigger Property=\"Orientation\" Value=\"Horizontal\">\n                        <Setter Property=\"Width\" Value=\"Auto\"/>\n                        <Setter Property=\"MinWidth\" Value=\"0\"/>\n                        <Setter Property=\"Height\" Value=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}\"/>\n                        <Setter Property=\"MinHeight\" Value=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}\"/>\n                        <Setter Property=\"BorderThickness\" Value=\"0,1\"/>\n\n                        <Setter Property=\"Template\">\n                            <Setter.Value>\n                                <ControlTemplate TargetType=\"{x:Type ScrollBar}\">\n                                    <Grid x:Name=\"Bg\" SnapsToDevicePixels=\"True\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition MaxWidth=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}\"/>\n                                            <ColumnDefinition Width=\"0.00001*\"/>\n                                            <ColumnDefinition MaxWidth=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}\"/>\n                                        </Grid.ColumnDefinitions>\n\n                                        <RepeatButton Grid.Column=\"0\" x:Name=\"PART_LineLeftButton\" Command=\"{x:Static ScrollBar.LineLeftCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBar.Button}\" \n                                                      Content=\"M 3.18,7 C3.18,7 5,7 5,7 5,7 1.81,3.5 1.81,3.5 1.81,3.5 5,0 5,0 5,0 3.18,0 3.18,0 3.18,0 0,3.5 0,3.5 0,3.5 3.18,7 3.18,7 z\" />\n\n                                        <Border Grid.Column=\"1\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"/>\n                                        <Track Grid.Column=\"1\" x:Name=\"PART_Track\" IsEnabled=\"{TemplateBinding IsMouseOver}\">\n                                            <Track.DecreaseRepeatButton>\n                                                <RepeatButton Command=\"{x:Static ScrollBar.PageLeftCommand}\" Style=\"{StaticResource ScrollBar.Transparent}\"/>\n                                            </Track.DecreaseRepeatButton>\n                                            <Track.IncreaseRepeatButton>\n                                                <RepeatButton Command=\"{x:Static ScrollBar.PageRightCommand}\" Style=\"{StaticResource ScrollBar.Transparent}\"/>\n                                            </Track.IncreaseRepeatButton>\n                                            <Track.Thumb>\n                                                <Thumb Style=\"{StaticResource ScrollBar.Thumb}\"/>\n                                            </Track.Thumb>\n                                        </Track>\n\n                                        <RepeatButton Grid.Column=\"2\" x:Name=\"PART_LineRightButton\" Command=\"{x:Static ScrollBar.LineRightCommand}\" IsEnabled=\"{TemplateBinding IsMouseOver}\" Style=\"{StaticResource ScrollBar.Button}\" \n                                                      Content=\"M 1.81,7 C1.81,7 0,7 0,7 0,7 3.18,3.5 3.18,3.5 3.18,3.5 0,0 0,0 0,0 1.81,0 1.81,0 1.81,0 5,3.5 5,3.5 5,3.5 1.81,7 1.81,7 z\" />\n                                    </Grid>\n\n                                    <ControlTemplate.Triggers>\n                                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                            <Setter TargetName=\"Bg\" Property=\"Opacity\" Value=\"0.6\"/>\n                                        </Trigger>\n                                    </ControlTemplate.Triggers>\n                                </ControlTemplate>\n                            </Setter.Value>\n                        </Setter>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--ScrollViewer-->\n            <Style TargetType=\"{x:Type ScrollViewer}\">\n                <!--<Setter Property=\"PanningRatio\" Value=\"0.01\"/>\n                <Setter Property=\"PanningDeceleration\" Value=\"0.1\"/>\n                <Setter Property=\"CanContentScroll\" Value=\"True\"/>-->\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ScrollViewer}\">\n                            <Grid x:Name=\"Grid\" Background=\"{TemplateBinding Background}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"*\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <ScrollContentPresenter Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"PART_ScrollContentPresenter\" CanContentScroll=\"{TemplateBinding CanContentScroll}\" CanHorizontallyScroll=\"False\" \n                                                        CanVerticallyScroll=\"False\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" Content=\"{TemplateBinding Content}\" Margin=\"{TemplateBinding Padding}\"/>\n\n                                <ScrollBar Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"PART_VerticalScrollBar\" AutomationProperties.AutomationId=\"VerticalScrollBar\" Cursor=\"Arrow\"\n                                           Maximum=\"{TemplateBinding ScrollableHeight}\" Minimum=\"0\" Visibility=\"{TemplateBinding ComputedVerticalScrollBarVisibility}\" \n                                           Value=\"{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\" ViewportSize=\"{TemplateBinding ViewportHeight}\"/>\n\n                                <Rectangle Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"Corner\" Fill=\"{DynamicResource Element.Background.Back}\"/>\n\n                                <ScrollBar Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"PART_HorizontalScrollBar\" AutomationProperties.AutomationId=\"HorizontalScrollBar\" Cursor=\"Arrow\" \n                                           Maximum=\"{TemplateBinding ScrollableWidth}\" Minimum=\"0\" Orientation=\"Horizontal\" Visibility=\"{TemplateBinding ComputedHorizontalScrollBarVisibility}\" \n                                           Value=\"{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\" ViewportSize=\"{TemplateBinding ViewportWidth}\"/>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter TargetName=\"Corner\" Property=\"Opacity\" Value=\"0.6\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Expander Style-->\n            <Style x:Key=\"ExpanderRightHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Padding\" Value=\"0\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"*\"/>\n                                        <RowDefinition Height=\"19\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <Label Grid.Row=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\"\n                                           HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                                    <Rectangle Grid.Row=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"{DynamicResource Element.Border.Light}\" \n                                               Height=\"Auto\" HorizontalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Row=\"2\" x:Name=\"ArrowPath\" Data=\"M 1,1  L 4.5,4.5  L 1,8\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"False\" \n                                          Stroke=\"{DynamicResource Element.Glyph}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 4.5,1  L 1,4.5  L 4.5,8\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderLeftHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Padding\" Value=\"0\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"*\"/>\n                                        <RowDefinition Height=\"19\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <Label Grid.Row=\"0\" Content=\"{TemplateBinding Content}\" Foreground=\"{TemplateBinding Foreground}\"\n                                           HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                                    <Rectangle Grid.Row=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"{DynamicResource Element.Border.Light}\" \n                                               Height=\"Auto\" HorizontalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Row=\"2\" x:Name=\"ArrowPath\" Data=\"M 4.5,1  L 1,4.5  L 4.5,8\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"False\" \n                                          Stroke=\"{DynamicResource Element.Glyph}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 1,1  L 4.5,4.5  L 1,8\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderUpHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Height\" Value=\"27\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition Width=\"19\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Label Grid.Column=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"3\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalContentAlignment=\"Center\"/>\n\n                                    <Rectangle Grid.Column=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"{DynamicResource Element.Border.Light}\" \n                                               Height=\"Auto\" VerticalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Column=\"2\" x:Name=\"ArrowPath\" Data=\"M 1,4.5 L 4.5,1 L 8,4.5\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"False\" \n                                          Stroke=\"{DynamicResource Element.Glyph}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 1,1.5 L 4.5,5 L 8,1.5\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ExpanderDownHeaderStyle\" TargetType=\"{x:Type ToggleButton}\">\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                            <Border Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding Background}\" >\n                                <Grid SnapsToDevicePixels=\"False\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition Width=\"19\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Label Grid.Column=\"0\" Content=\"{TemplateBinding Content}\" Padding=\"3\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalContentAlignment=\"Center\"/>\n\n                                    <Rectangle Grid.Column=\"1\" x:Name=\"HorizontalRectangle\" MinHeight=\"1\" Fill=\"{DynamicResource Element.Border.Light}\" \n                                               Height=\"Auto\" VerticalAlignment=\"Center\" Margin=\"3,0,3,0\"/>\n\n                                    <Path Grid.Column=\"2\" x:Name=\"ArrowPath\" Data=\"M 1,1.5 L 4.5,5 L 8,1.5\" HorizontalAlignment=\"Center\" SnapsToDevicePixels=\"False\" \n                                          Stroke=\"{DynamicResource Element.Glyph}\" StrokeThickness=\"2\" VerticalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Data\" TargetName=\"ArrowPath\" Value=\"M 1,4.5 L 4.5,1 L 8,4.5\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\n                                    <Setter Property=\"Stroke\" TargetName=\"HorizontalRectangle\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                                    <Setter Property=\"Stroke\" TargetName=\"ArrowPath\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style TargetType=\"{x:Type Expander}\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n                <Setter Property=\"BorderThickness\" Value=\"0\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Expander}\">\n                            <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\">\n                                <DockPanel>\n                                    <ToggleButton x:Name=\"HeaderSite\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" ContentTemplateSelector=\"{TemplateBinding HeaderTemplateSelector}\" \n                                                  Content=\"{TemplateBinding Header}\" DockPanel.Dock=\"Top\" Foreground=\"{TemplateBinding Foreground}\" FontWeight=\"{TemplateBinding FontWeight}\" \n                                                  FocusVisualStyle=\"{StaticResource Style.FocusVisual.NoMargin}\" FontStyle=\"{TemplateBinding FontStyle}\" FontStretch=\"{TemplateBinding FontStretch}\" \n                                                  FontSize=\"{TemplateBinding FontSize}\" FontFamily=\"{TemplateBinding FontFamily}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                                  IsChecked=\"{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Margin=\"0\"\n                                                  Padding=\"{TemplateBinding Padding}\" Style=\"{StaticResource ExpanderDownHeaderStyle}\" \n                                                  VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                                    <ContentPresenter x:Name=\"ExpandSite\" DockPanel.Dock=\"Bottom\" Focusable=\"False\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                                      Margin=\"{TemplateBinding Padding}\" Visibility=\"Collapsed\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                                </DockPanel>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsExpanded\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"ExpandSite\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"ExpandDirection\" Value=\"Right\">\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"ExpandSite\" Value=\"Right\"/>\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"HeaderSite\" Value=\"Left\"/>\n                                    <Setter Property=\"Style\" TargetName=\"HeaderSite\" Value=\"{StaticResource ExpanderRightHeaderStyle}\"/>\n                                </Trigger>\n                                <Trigger Property=\"ExpandDirection\" Value=\"Up\">\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"ExpandSite\" Value=\"Top\"/>\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"HeaderSite\" Value=\"Bottom\"/>\n                                    <Setter Property=\"Style\" TargetName=\"HeaderSite\" Value=\"{StaticResource ExpanderUpHeaderStyle}\"/>\n                                </Trigger>\n                                <Trigger Property=\"ExpandDirection\" Value=\"Left\">\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"ExpandSite\" Value=\"Left\"/>\n                                    <Setter Property=\"DockPanel.Dock\" TargetName=\"HeaderSite\" Value=\"Right\"/>\n                                    <Setter Property=\"Style\" TargetName=\"HeaderSite\" Value=\"{StaticResource ExpanderLeftHeaderStyle}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter TargetName=\"HeaderSite\" Property=\"Opacity\" Value=\"0.6\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Slider-->\n            <Style TargetType=\"{x:Type Slider}\">\n                <Setter Property=\"TickPlacement\" Value=\"BottomRight\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"Slider\">\n                            <Grid x:Name=\"Root\">\n                                <Grid x:Name=\"HorizontalTemplate\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\" MinHeight=\"{TemplateBinding MinHeight}\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <TickBar x:Name=\"TopTick\" Grid.Row=\"0\" Fill=\"{TemplateBinding BorderBrush}\" TickFrequency=\"1\" Height=\"4\" Margin=\"0,0,0,2\" Placement=\"Top\" Visibility=\"Collapsed\"/>\n                                    <TickBar x:Name=\"BottomTick\" Grid.Row=\"2\" Fill=\"{TemplateBinding BorderBrush}\" TickFrequency=\"1\" Height=\"4\" Margin=\"0,1,0,0\" Placement=\"Bottom\" Visibility=\"Collapsed\"/>\n\n                                    <Border x:Name=\"TrackBorder\" Grid.Row=\"1\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" Height=\"3\" VerticalAlignment=\"Center\" Margin=\"4,0\" CornerRadius=\"2\">\n                                        <Canvas Margin=\"-6,-1\">\n                                            <Rectangle x:Name=\"PART_SelectionRange\" Fill=\"{DynamicResource Brush.ProgressBar.Info}\" Height=\"4.0\" Visibility=\"Hidden\"/>\n                                        </Canvas>\n                                    </Border>\n\n                                    <Track Grid.Row=\"1\" x:Name=\"PART_Track\">\n                                        <Track.DecreaseRepeatButton>\n                                            <RepeatButton x:Name=\"HorizontalTrackLargeChangeDecreaseRepeatButton\" Template=\"{StaticResource Template.RepeatButton.Simple}\" Background=\"Transparent\" IsTabStop=\"False\"/>\n                                        </Track.DecreaseRepeatButton>\n                                        <Track.IncreaseRepeatButton>\n                                            <RepeatButton x:Name=\"HorizontalTrackLargeChangeIncreaseRepeatButton\" Template=\"{StaticResource Template.RepeatButton.Simple}\" Background=\"Transparent\" IsTabStop=\"False\"/>\n                                        </Track.IncreaseRepeatButton>\n\n                                        <Track.Thumb>\n                                            <Thumb x:Name=\"HorizontalThumb\" Height=\"18\" Width=\"10\" Template=\"{StaticResource Template.Slider.Thumb.Horizontal}\"/>\n                                        </Track.Thumb>\n                                    </Track>\n                                </Grid>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"TickPlacement\" Value=\"BottomRight\">\n                                    <Setter TargetName=\"HorizontalThumb\" Property=\"Template\" Value=\"{StaticResource Template.Slider.Thumb.Bottom}\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"BottomTick\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"TickPlacement\" Value=\"TopLeft\">\n                                    <Setter TargetName=\"HorizontalThumb\" Property=\"Template\" Value=\"{StaticResource Template.Slider.Thumb.Top}\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"TopTick\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"TickPlacement\" Value=\"Both\">\n                                    <Setter Property=\"Visibility\" TargetName=\"TopTick\" Value=\"Visible\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"BottomTick\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Hyperlink-->\n            <Style x:Key=\"{x:Type Hyperlink}\" TargetType=\"{x:Type Hyperlink}\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.Hyperlink}\"/>\n                <Setter Property=\"TextDecorations\" Value=\"Underline\"/>\n\n                <Style.Triggers>\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                        <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.Hyperlink.Hover}\"/>\n                    </Trigger>\n                    <Trigger Property=\"IsEnabled\" Value=\"False\">\n                        <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.Hyperlink.Disabled}\"/>\n                    </Trigger>\n                    <Trigger Property=\"IsEnabled\" Value=\"True\">\n                        <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--ProgressBar-->\n            <Style TargetType=\"{x:Type ProgressBar}\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.ProgressBar.Primary}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Back}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ProgressBar}\">\n                            <Grid x:Name=\"TemplateRoot\">\n                                <VisualStateManager.VisualStateGroups>\n                                    <VisualStateGroup x:Name=\"CommonStates\">\n                                        <VisualState x:Name=\"Determinate\"/>\n                                        <VisualState x:Name=\"Indeterminate\">\n                                            <Storyboard RepeatBehavior=\"Forever\">\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)\" Storyboard.TargetName=\"Animation\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0\" Value=\"0.25\"/>\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:1\" Value=\"0.25\"/>\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:2\" Value=\"0.25\"/>\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <PointAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransformOrigin)\" Storyboard.TargetName=\"Animation\">\n                                                    <EasingPointKeyFrame KeyTime=\"0\" Value=\"-0.5,0.5\"/>\n                                                    <EasingPointKeyFrame KeyTime=\"0:0:1\" Value=\"0.5,0.5\"/>\n                                                    <EasingPointKeyFrame KeyTime=\"0:0:2\" Value=\"1.5,0.5\"/>\n                                                </PointAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                </VisualStateManager.VisualStateGroups>\n\n                                <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"/>\n                                <Rectangle x:Name=\"PART_Track\"/>\n\n                                <Grid x:Name=\"PART_Indicator\" ClipToBounds=\"True\" HorizontalAlignment=\"Left\">\n                                    <Rectangle x:Name=\"Indicator\" Fill=\"{TemplateBinding Foreground}\"/>\n                                    <Rectangle x:Name=\"Animation\" Fill=\"{TemplateBinding Foreground}\" RenderTransformOrigin=\"0.5,0.5\">\n                                        <Rectangle.RenderTransform>\n                                            <TransformGroup>\n                                                <ScaleTransform/>\n                                                <SkewTransform/>\n                                                <RotateTransform/>\n                                                <TranslateTransform/>\n                                            </TransformGroup>\n                                        </Rectangle.RenderTransform>\n                                    </Rectangle>\n                                </Grid>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"Orientation\" Value=\"Vertical\">\n                                    <Setter Property=\"LayoutTransform\" TargetName=\"TemplateRoot\">\n                                        <Setter.Value>\n                                            <RotateTransform Angle=\"-90\"/>\n                                        </Setter.Value>\n                                    </Setter>\n                                </Trigger>\n                                <Trigger Property=\"IsIndeterminate\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"Indicator\" Value=\"Collapsed\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--ListBox-->\n            <Style TargetType=\"{x:Type ListBox}\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n                <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"True\"/>\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ListBox}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"1\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\">\n                                <ScrollViewer Focusable=\"False\" Padding=\"{TemplateBinding Padding}\">\n                                    <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                                </ScrollViewer>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                                </Trigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                                        <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n                                </MultiTrigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--ListView-->\n            <Style TargetType=\"{x:Type ListView}\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n                <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"True\"/>\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ListView}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"1\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\">\n                                <ScrollViewer Focusable=\"False\" Padding=\"{TemplateBinding Padding}\">\n                                    <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                                </ScrollViewer>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                                </Trigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                                        <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n                                </MultiTrigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--ComboBoxItem-->\n            <Style TargetType=\"{x:Type ComboBoxItem}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"Padding\" Value=\"4,1\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Style.FocusVisual.NoMargin}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ComboBoxItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n                                <ContentPresenter HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" TargetName=\"Bd\" Value=\"0.7\"/>\n                                </Trigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsSelected\" Value=\"False\"/>\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                                        <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                        <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                                        <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                        <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                                        <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedInactive.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedInactive.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsSelected\" Value=\"False\"/>\n                                        <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                                        <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsSelected\" Value=\"False\"/>\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                                        <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                                </MultiTrigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--PasswordBox Style-->\n            <Style TargetType=\"{x:Type PasswordBox}\">\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"Padding\" Value=\"2\"/>\n                <Setter Property=\"MinHeight\" Value=\"23\"/>\n                <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\"/>\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n                <Setter Property=\"AllowDrop\" Value=\"True\"/>\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type PasswordBox}\">\n                            <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                                    VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\"\n                                    Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\">\n                                <Grid x:Name=\"InnerGrid\">\n                                    <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                  VerticalScrollBarVisibility=\"Hidden\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.7\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                </Trigger>\n\n                                <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                                    <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                    <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Custom styles-->\n\n            <!--ListView - Frames-->\n            <Style x:Key=\"Style.ListView.Frames\" TargetType=\"{x:Type ListView}\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n                <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"True\"/>\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n                <Setter Property=\"ItemsPanel\">\n                    <Setter.Value>\n                        <ItemsPanelTemplate>\n                            <VirtualizingStackPanel Orientation=\"Horizontal\" MinHeight=\"0\" VirtualizationMode=\"Recycling\" IsVirtualizing=\"True\"/>\n                        </ItemsPanelTemplate>\n                    </Setter.Value>\n                </Setter>\n\n                <Setter Property=\"ItemContainerStyle\">\n                    <Setter.Value>\n                        <Style TargetType=\"{x:Type ListViewItem}\">\n                            <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                            <Setter Property=\"Padding\" Value=\"4,1\"/>\n                            <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n                            <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n                            <Setter Property=\"Background\" Value=\"Transparent\"/>\n                            <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n                            <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                            <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n\n                            <Setter Property=\"Template\">\n                                <Setter.Value>\n                                    <ControlTemplate TargetType=\"ListViewItem\">\n                                        <Border x:Name=\"Border\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                                BorderThickness=\"1\" CornerRadius=\"4\" SnapsToDevicePixels=\"True\">\n                                            <ContentPresenter HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\" Margin=\"4\"/>\n                                        </Border>\n                                    </ControlTemplate>\n                                </Setter.Value>\n                            </Setter>\n\n                            <Style.Triggers>\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"Selector.IsSelectionActive\" Value=\"False\"/>\n                                        <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Item.SelectedInactive.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Item.SelectedInactive.Border}\"/>\n                                </MultiTrigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"Selector.IsSelectionActive\" Value=\"True\"/>\n                                        <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n                                </MultiTrigger>\n\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                                </Trigger>\n                            </Style.Triggers>\n                        </Style>\n                    </Setter.Value>\n                </Setter>\n                \n                <Setter Property=\"ItemTemplate\">\n                    <Setter.Value>\n                        <DataTemplate>\n                            <Border x:Name=\"Bd\" BorderBrush=\"{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=BorderBrush}\"\n                                    BorderThickness=\"{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=BorderThickness}\" CornerRadius=\"4\"\n                                    Background=\"{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=Background}\" MinWidth=\"80\"\n                                    Padding=\"{Binding RelativeSource={RelativeSource AncestorType=ListViewItem}, Path=Padding}\" SnapsToDevicePixels=\"True\">\n                                <Grid>\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"*\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Stretch=\"Uniform\" StretchDirection=\"Both\" MaxWidth=\"100\" MaxHeight=\"100\" Effect=\"{x:Null}\">\n                                        <Image Source=\"{Binding Image, Converter={StaticResource UriToBitmapConverter}, ConverterParameter=100}\" Width=\"Auto\" Height=\"Auto\" Effect=\"{DynamicResource Shadow.Border.Large}\"/>\n                                    </Viewbox>\n\n                                    <Grid Grid.Row=\"1\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition/>\n                                            <ColumnDefinition/>\n                                        </Grid.ColumnDefinitions>\n\n                                        <TextBlock x:Name=\"NumberLabel\" Text=\"{Binding Number, StringFormat={}{0:0}}\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" \n                                                   HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"0\" Padding=\"0\"/>\n\n                                        <TextBlock x:Name=\"DelayLabel\" Grid.Column=\"1\" Text=\"{Binding Delay, StringFormat={}{0:0 'ms'}}\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"\n                                                   HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"0\" Padding=\"0\" FontSize=\"11\" FontWeight=\"Normal\" FontStyle=\"Italic\"/>\n                                    </Grid>\n                                </Grid>\n                            </Border>\n                        </DataTemplate>\n                    </Setter.Value>\n                </Setter>\n                \n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type ListView}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"2\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\">\n                                <ScrollViewer Focusable=\"False\" Padding=\"{TemplateBinding Padding}\" CanContentScroll=\"True\">\n                                    <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                                </ScrollViewer>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                    <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                                </Trigger>\n\n                                <MultiTrigger>\n                                    <MultiTrigger.Conditions>\n                                        <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                                        <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                                    </MultiTrigger.Conditions>\n\n                                    <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n                                </MultiTrigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Integer Up/Down - Minimal-->\n            <Style x:Key=\"IntegerUpDown.Minimal\" TargetType=\"{x:Type n:IntegerUpDown}\">\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"0\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:IntegerUpDown}\">\n                            <Border Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\"\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"4\">\n                                <Grid Background=\"{TemplateBinding Background}\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition/>\n                                        <RowDefinition/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"55*\" MinWidth=\"24\"/>\n                                        <ColumnDefinition x:Name=\"SecondColumn\" Width=\"45*\" MinWidth=\"18\" MaxWidth=\"25\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <ScrollViewer Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"PART_ContentHost\" Focusable=\"False\" \n                                                  HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"\n                                                  VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                  HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                                    <RepeatButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"UpButton\" Content=\"▲\" IsTabStop=\"False\" Focusable=\"False\"\n                                                  Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"7\" VerticalContentAlignment=\"Center\" \n                                                  BorderThickness=\"0\" Padding=\"0\" Margin=\"0\"/>\n\n                                    <RepeatButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"DownButton\" Content=\"▼\" IsTabStop=\"False\" Focusable=\"False\"\n                                                  Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"7\" VerticalContentAlignment=\"Center\" \n                                                  BorderThickness=\"0\" Padding=\"0\" Margin=\"0\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n\n                <Style.Triggers>\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                    </Trigger>\n                    <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                    </Trigger>\n                    <Trigger Property=\"IsEnabled\" Value=\"False\">\n                        <Setter Property=\"Opacity\" Value=\"0.6\"/>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--Round Thumb-->\n            <Style x:Key=\"Style.Thumb.Ellipse\" TargetType=\"{x:Type Thumb}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"Focusable\" Value=\"False\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                            <Grid Background=\"Transparent\">\n                                <Ellipse Fill=\"{TemplateBinding Background}\" Margin=\"{TemplateBinding Padding}\" Stroke=\"{TemplateBinding BorderBrush}\" StrokeThickness=\"1\"/>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsDragging\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <!--Viewbox-->\n            <Style x:Key=\"Style.ViewBox\" TargetType=\"{x:Type Viewbox}\">\n                <Setter Property=\"Opacity\" Value=\"{DynamicResource Element.Opacity}\"/>\n\n                <Style.Triggers>\n                    <Trigger Property=\"IsEnabled\" Value=\"False\">\n                        <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                    </Trigger>\n                </Style.Triggers>\n            </Style>\n\n            <!--Transparent Thumb Style, used by the cropping adorner-->\n            <Style x:Key=\"ThumbTranparent\" TargetType=\"{x:Type Thumb}\">\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"Focusable\" Value=\"False\"/>\n                <Setter Property=\"Background\" Value=\"Transparent\"/>\n                <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n                <Setter Property=\"BorderThickness\" Value=\"0\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                            <Grid Background=\"Transparent\">\n                                <Border Background=\"{TemplateBinding Background}\" Margin=\"{TemplateBinding Padding}\"\n                                        BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" />\n                            </Grid>\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                                    <Setter Property=\"Cursor\" Value=\"SizeAll\"/>\n                                </Trigger>\n                                <Trigger Property=\"IsDragging\" Value=\"True\">\n                                    <Setter Property=\"Background\" Value=\"#10000000\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <FontFamily x:Key=\"FontFamilyNormal\">Segoe UI</FontFamily>\n            <FontFamily x:Key=\"FontFamilyLight\">Segoe UI Semilight</FontFamily>\n            <FontFamily x:Key=\"FontFamilyBold\">Segoe UI Semibold</FontFamily>\n        </ResourceDictionary>\n    </Application.Resources>\n</Application>"
  },
  {
    "path": "ScreenToGif/App.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Net;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Interop;\nusing System.Windows.Markup;\nusing System.Windows.Media;\nusing System.Windows.Threading;\nusing Microsoft.Win32;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Helpers;\nusing ScreenToGif.Util.InterProcessChannel;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif;\n\npublic partial class App : IDisposable\n{\n    #region Properties\n\n    internal static NotifyIcon NotifyIcon { get; private set; }\n\n    internal static ApplicationViewModel MainViewModel { get; private set; }\n\n    private Mutex _mutex;\n    private bool _accepted;\n    private readonly List<Exception> _exceptionList = [];\n    private readonly Lock _lock = new();\n\n    #endregion\n\n    #region Events\n\n    private void App_Startup(object sender, StartupEventArgs e)\n    {\n        Global.StartupDateTime = DateTime.Now;\n\n        //Unhandled Exceptions.\n        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;\n\n        DllSecurity.HardenDllSearchPath();\n\n        //Increases the duration of the tooltip display.\n        ToolTipService.ShowDurationProperty.OverrideMetadata(typeof(DependencyObject), new FrameworkPropertyMetadata(int.MaxValue));\n\n#if !DEBUG\n        BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailure = BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailureOptions.Continue;\n#endif\n\n        SetSecurityProtocol();\n\n        //Parse arguments.\n        Arguments.Prepare(e.Args);\n\n        LocalizationHelper.SelectCulture(UserSettings.All.LanguageCode);\n        ThemeHelper.SelectTheme(UserSettings.All.MainTheme);\n\n        //Listen to changes in theme.\n        SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;\n\n        #region Download mode\n\n        if (Arguments.IsInDownloadMode)\n        {\n            var downloader = new Downloader\n            {\n                DownloadMode = Arguments.DownloadMode,\n                DestinationPath = Arguments.DownloadPath\n            };\n            downloader.ShowDialog();\n\n            Environment.Exit(90);\n            return;\n        }\n\n        #endregion\n\n        #region Settings persistence mode\n\n        if (Arguments.IsInSettingsMode)\n        {\n            SettingsPersistenceChannel.RegisterServer();\n            return;\n        }\n\n        #endregion\n\n        #region If set, it allows only one instance per user\n\n        //The singleton works on a per-user and per-executable mode.\n        //Meaning that a different user and/or a different executable instances can co-exist.\n        //Part of this code won't work on debug mode, since the SetForegroundWindow() needs focus on the foreground window calling the method.\n        if (UserSettings.All.SingleInstance && !Arguments.NewInstance)\n        {\n            try\n            {\n                using (var thisProcess = Process.GetCurrentProcess())\n                {\n                    var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;\n                    var name = thisProcess.MainModule?.FileName ?? Assembly.GetEntryAssembly()?.Location ?? \"ScreenToGif\";\n                    var location = Convert.ToBase64String(Encoding.UTF8.GetBytes(name));\n                    var mutexName = (user?.Value ?? Environment.UserName) + \"_\" + location;\n\n                    _mutex = new Mutex(true, mutexName, out _accepted);\n\n                    //If the mutex failed to be accepted, it means that another process already opened it.\n                    if (!_accepted)\n                    {\n                        var warning = true;\n\n                        //Switch to the other app (get only one, if multiple available). Use name of assembly.\n                        using (var process = Process.GetProcessesByName(thisProcess.ProcessName).FirstOrDefault(f => f.MainWindowHandle != thisProcess.MainWindowHandle))\n                        {\n                            if (process != null)\n                            {\n                                var handles = WindowHelper.GetWindowHandlesFromProcess(process);\n\n                                //Show the window before setting focus.\n                                Native.External.User32.ShowWindow(handles.Count > 0 ? handles[0] : process.Handle, Domain.Enums.Native.ShowWindowCommands.Show);\n\n                                //Set user the focus to the window.\n                                Native.External.User32.SetForegroundWindow(handles.Count > 0 ? handles[0] : process.Handle);\n                                warning = false;\n\n                                InstanceSwitcherChannel.SendMessage(process.Id, e.Args);\n                            }\n                        }\n\n                        //If no window available (app is in the system tray), display a warning.\n                        if (warning)\n                            Dialog.Ok(LocalizationHelper.Get(\"S.Warning.Single.Title\"), LocalizationHelper.Get(\"S.Warning.Single.Header\"), LocalizationHelper.Get(\"S.Warning.Single.Message\"), Icons.Info);\n\n                        Environment.Exit(0);\n                        return;\n                    }\n\n                    //If this is the first instance, register the inter process channel to listen for other instances.\n                    InstanceSwitcherChannel.RegisterServer(InstanceSwitch_Received);\n                }\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to check if another instance is running\");\n            }\n        }\n\n        #endregion\n\n        //Render mode.\n        RenderOptions.ProcessRenderMode = UserSettings.All.DisableHardwareAcceleration ? RenderMode.SoftwareOnly : RenderMode.Default;\n\n        SetWorkaroundForDispatcher();\n\n        #region Tray icon and view model\n\n        NotifyIcon = (NotifyIcon)FindResource(\"NotifyIcon\");\n\n        if (NotifyIcon != null)\n        {\n            NotifyIcon.Visibility = UserSettings.All.ShowNotificationIcon || UserSettings.All.StartMinimized || UserSettings.All.StartUp == 5 ? Visibility.Visible : Visibility.Collapsed;\n\n            //Replace the old option with the new setting.\n            if (UserSettings.All.StartUp == 5)\n            {\n                UserSettings.All.StartMinimized = true;\n                UserSettings.All.ShowNotificationIcon = true;\n                UserSettings.All.StartUp = 0;\n            }\n\n            //using (var iconStream = GetResourceStream(new Uri(\"pack://application:,,,/Resources/Logo.ico\"))?.Stream)\n            //{\n            //    if (iconStream != null)\n            //        NotifyIcon.Icon = new System.Drawing.Icon(iconStream);\n            //}\n        }\n\n        MainViewModel = (ApplicationViewModel)FindResource(\"AppViewModel\") ?? new ApplicationViewModel();\n\n        RegisterShortcuts();\n\n        #endregion\n\n        //var test = new TestField(); test.ShowDialog(); Environment.Exit(1); return;\n        //var test = new Windows.EditorEx(); test.ShowDialog(); return;\n        //var test = new Windows.NewWebcam(); test.ShowDialog(); return;\n        //var test = Settings.UserSettings.All.StartupTop;\n\n        #region Tasks\n\n        Task.Factory.StartNew(MainViewModel.ClearTemporaryFiles, TaskCreationOptions.LongRunning);\n        Task.Factory.StartNew(async () => await MainViewModel.CheckForUpdates(),TaskCreationOptions.LongRunning);\n        Task.Factory.StartNew(MainViewModel.SendFeedback, TaskCreationOptions.LongRunning);\n\n        #endregion\n\n        #region Startup\n\n        if (Arguments.Open)\n            MainViewModel.Open.Execute(Arguments.WindownToOpen, true);\n        else\n            MainViewModel.Open.Execute(UserSettings.All.StartUp);\n\n        #endregion\n    }\n\n    internal static void InstanceSwitch_Received(object _, InstanceSwitcherMessage message)\n    {\n        try\n        {\n            var args = message.Args;\n\n            if (args?.Length > 0)\n                Arguments.Prepare(args);\n\n            if (Arguments.Open)\n                MainViewModel.Open.Execute(Arguments.WindownToOpen, true);\n            else\n                MainViewModel.Open.Execute(UserSettings.All.StartUp);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Unable to execute arguments from IPC.\");\n        }\n    }\n\n    private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)\n    {\n        LogWriter.Log(e.Exception, \"On dispatcher unhandled exception - Unknown\");\n\n        try\n        {\n            ShowException(e.Exception);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while displaying the error.\");\n            //Ignored.\n        }\n        finally\n        {\n            e.Handled = true;\n        }\n    }\n\n    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)\n    {\n        if (e.ExceptionObject is not Exception exception)\n            return;\n\n        LogWriter.Log(exception, \"Current domain unhandled exception - Unknown\");\n\n        try\n        {\n            ShowException(exception);\n        }\n        catch (Exception)\n        {\n            //Ignored.\n        }\n    }\n\n    private void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)\n    {\n        if (e.Category != UserPreferenceCategory.General)\n            return;\n\n        ThemeHelper.SelectTheme(UserSettings.All.MainTheme);\n\n        if (UserSettings.All.GridColorsFollowSystem)\n        {\n            var isSystemUsingDark = ThemeHelper.IsSystemUsingDarkTheme();\n            UserSettings.All.GridColor1 = isSystemUsingDark ? Constants.DarkEven : Constants.VeryLightEven;\n            UserSettings.All.GridColor2 = isSystemUsingDark ? Constants.DarkOdd : Constants.VeryLightOdd;\n        }\n    }\n\n    private void App_Exit(object sender, ExitEventArgs e)\n    {\n        SystemEvents.UserPreferenceChanged -= SystemEvents_UserPreferenceChanged;\n\n        try\n        {\n            MutexList.RemoveAll();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to remove all mutexes of the opened projects.\");\n        }\n\n        try\n        {\n            NotifyIcon?.Dispose();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to dispose the system tray icon.\");\n        }\n\n        try\n        {\n            EncodingManager.StopAllEncodings();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to cancel all encodings.\");\n        }\n\n        try\n        {\n            SettingsExtension.ForceSave();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to save the user settings.\");\n        }\n\n        try\n        {\n            if (_mutex != null && _accepted)\n            {\n                _mutex.ReleaseMutex();\n                _accepted = false;\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to release the single instance mutex.\");\n        }\n\n        try\n        {\n            HotKeyCollection.Default.Dispose();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to dispose the hotkeys.\");\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void SetSecurityProtocol()\n    {\n        try\n        {\n            ServicePointManager.Expect100Continue = true;\n            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to set the network properties\");\n        }\n    }\n\n    private void SetWorkaroundForDispatcher()\n    {\n        try\n        {\n            if (UserSettings.All.WorkaroundQuota)\n                BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailure = BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailureOptions.Reset;\n\n#if DEBUG\n\n            PresentationTraceSources.DataBindingSource.Listeners.Add(new ConsoleTraceListener());\n            PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Warning;\n\n            BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailure = BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailureOptions.Throw;\n\n#endif\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to set the workaround for the quota crash\");\n        }\n    }\n\n    internal static void RegisterShortcuts()\n    {\n        //TODO: If startup/editor is open and focused, should I let the hotkeys work?\n\n        //Registers all shortcuts.\n        var screen = HotKeyCollection.Default.TryRegisterHotKey(UserSettings.All.RecorderModifiers, UserSettings.All.RecorderShortcut, () =>\n            { if (!Global.IgnoreHotKeys && MainViewModel.OpenRecorder.CanExecute(null)) MainViewModel.OpenRecorder.Execute(null); }, true);\n\n        var webcam = HotKeyCollection.Default.TryRegisterHotKey(UserSettings.All.WebcamRecorderModifiers, UserSettings.All.WebcamRecorderShortcut, () =>\n            { if (!Global.IgnoreHotKeys && MainViewModel.OpenWebcamRecorder.CanExecute(null)) MainViewModel.OpenWebcamRecorder.Execute(null); }, true);\n\n        var board = HotKeyCollection.Default.TryRegisterHotKey(UserSettings.All.BoardRecorderModifiers, UserSettings.All.BoardRecorderShortcut, () =>\n            { if (!Global.IgnoreHotKeys && MainViewModel.OpenBoardRecorder.CanExecute(null)) MainViewModel.OpenBoardRecorder.Execute(null); }, true);\n\n        var editor = HotKeyCollection.Default.TryRegisterHotKey(UserSettings.All.EditorModifiers, UserSettings.All.EditorShortcut, () =>\n            { if (!Global.IgnoreHotKeys && MainViewModel.OpenEditor.CanExecute(null)) MainViewModel.OpenEditor.Execute(null); }, true);\n\n        var options = HotKeyCollection.Default.TryRegisterHotKey(UserSettings.All.OptionsModifiers, UserSettings.All.OptionsShortcut, () =>\n            { if (!Global.IgnoreHotKeys && MainViewModel.OpenOptions.CanExecute(null)) MainViewModel.OpenOptions.Execute(null); }, true);\n\n        var exit = HotKeyCollection.Default.TryRegisterHotKey(UserSettings.All.ExitModifiers, UserSettings.All.ExitShortcut, () =>\n            { if (!Global.IgnoreHotKeys && MainViewModel.ExitApplication.CanExecute(null)) MainViewModel.ExitApplication.Execute(null); }, true);\n\n        //Updates the input gesture text of each command.\n        MainViewModel.RecorderGesture = screen ? KeyHelper.GetSelectKeyText(UserSettings.All.RecorderShortcut, UserSettings.All.RecorderModifiers, true, true) : \"\";\n        MainViewModel.WebcamRecorderGesture = webcam ? KeyHelper.GetSelectKeyText(UserSettings.All.WebcamRecorderShortcut, UserSettings.All.WebcamRecorderModifiers, true, true) : \"\";\n        MainViewModel.BoardRecorderGesture = board ? KeyHelper.GetSelectKeyText(UserSettings.All.BoardRecorderShortcut, UserSettings.All.BoardRecorderModifiers, true, true) : \"\";\n        MainViewModel.EditorGesture = editor ? KeyHelper.GetSelectKeyText(UserSettings.All.EditorShortcut, UserSettings.All.EditorModifiers, true, true) : \"\";\n        MainViewModel.OptionsGesture = options ? KeyHelper.GetSelectKeyText(UserSettings.All.OptionsShortcut, UserSettings.All.OptionsModifiers, true, true) : \"\";\n        MainViewModel.ExitGesture = exit ? KeyHelper.GetSelectKeyText(UserSettings.All.ExitShortcut, UserSettings.All.ExitModifiers, true, true) : \"\";\n    }\n\n    private void ShowException(Exception exception)\n    {\n        lock(_lock)\n        {\n            //Avoid displaying an exception that is already being displayed.\n            if (_exceptionList.Any(a => a.Message == exception.Message))\n                return;\n\n            //Adding to the list, so a second exception with the same name won't be displayed.\n            _exceptionList.Add(exception);\n\n            Current.Dispatcher.Invoke(() =>\n            {\n                if (Global.IsHotFix4055002Installed && exception is XamlParseException && exception.InnerException is TargetInvocationException)\n                    ExceptionDialog.Ok(exception, \"ScreenToGif\", \"Error while rendering visuals\", exception.Message);\n                else\n                    ExceptionDialog.Ok(exception, \"ScreenToGif\", \"Unhandled exception\", exception.Message);\n            });\n\n            //By removing the exception, the same exception can be displayed later.\n            _exceptionList.Remove(exception);\n        }\n    }\n\n    public void Dispose()\n    {\n        if (_mutex != null && _accepted)\n        {\n            _mutex.ReleaseMutex();\n            _accepted = false;\n        }\n\n        _mutex?.Dispose();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Capture/BaseCapture.cs",
    "content": "using System;\nusing System.Collections.Concurrent;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing ScreenToGif.Model;\n\nnamespace ScreenToGif.Capture;\n\npublic abstract class BaseCapture : ICapture\n{\n    private Task _task;\n\n    #region Properties\n\n    public bool WasStarted { get; set; }\n    public bool IsAcceptingFrames { get; set; }\n    public int FrameCount { get; set; }\n    public int MinimumDelay { get; set; }\n        \n    public int Left { get; set; }\n    public int Top { get; set; }\n\n    /// <summary>\n    /// The current width of the capture. It can fluctuate, based on the DPI of the current screen.\n    /// </summary>\n    public int Width { get; set; }\n\n    /// <summary>\n    /// The current height of the capture. It can fluctuate, based on the DPI of the current screen.\n    /// </summary>\n    public int Height { get; set; }\n\n    /// <summary>\n    /// The starting width of the capture. \n    /// </summary>\n    public int StartWidth { get; set; }\n\n    /// <summary>\n    /// The starting height of the capture.\n    /// </summary>\n    public int StartHeight { get; set; }\n\n    /// <summary>\n    /// The starting scale of the recording.\n    /// </summary>\n    public double StartScale { get; set; }\n\n    /// <summary>\n    /// The current scale of the recording.\n    /// </summary>\n    public double Scale { get; set; }\n\n    /// <summary>\n    /// The difference in scale from the start frame to the current frame.\n    /// </summary>\n    public double ScaleDiff => StartScale / Scale;\n\n    /// <summary>\n    /// The name of the monitor device where the recording is supposed to happen.\n    /// </summary>\n    public string DeviceName { get; set; }\n\n    public ProjectInfo Project { get; set; }\n    public Action<Exception> OnError { get; set; }\n\n    protected BlockingCollection<FrameInfo> BlockingCollection { get; private set; } = new();\n\n    #endregion\n\n    ~BaseCapture()\n    {\n        Dispose();\n    }\n\n    public virtual void Start(int delay, int left, int top, int width, int height, double scale, ProjectInfo project)\n    {\n        if (WasStarted)\n            throw new Exception(\"Screen capture was already started. Stop before trying again.\");\n\n        FrameCount = 0;\n        MinimumDelay = delay;\n        Left = left;\n        Top = top;\n        StartWidth = Width = width;\n        StartHeight = Height = height;\n        StartScale = scale;\n        Scale = scale;\n\n        Project = project;\n        Project.Width = width;\n        Project.Height = height;\n        Project.Dpi = 96 * scale;\n\n        BlockingCollection ??= new BlockingCollection<FrameInfo>();\n\n        //Spin up a Task to consume the BlockingCollection.\n        _task = Task.Factory.StartNew(() =>\n        {\n            try\n            {\n                while (true)\n                    Save(BlockingCollection.Take());\n            }\n            catch (InvalidOperationException)\n            {\n                //It means that Take() was called on a completed collection.\n            }\n            catch (Exception e)\n            {\n                Application.Current.Dispatcher.Invoke(() => OnError?.Invoke(e));\n            }\n        });\n\n        WasStarted = true;\n        IsAcceptingFrames = true;\n    }\n\n    public virtual void ResetConfiguration()\n    { }\n\n    public virtual void Save(FrameInfo info)\n    { }\n\n    public virtual int Capture(FrameInfo frame)\n    {\n        return 0;\n    }\n\n    public virtual Task<int> CaptureAsync(FrameInfo frame)\n    {\n        return null;\n    }\n\n    public virtual int CaptureWithCursor(FrameInfo frame)\n    {\n        return 0;\n    }\n\n    public virtual Task<int> CaptureWithCursorAsync(FrameInfo frame)\n    {\n        return null;\n    }\n\n    public virtual int ManualCapture(FrameInfo frame, bool showCursor = false)\n    {\n        return showCursor ? CaptureWithCursor(frame) : Capture(frame);\n    }\n\n    public virtual Task<int> ManualCaptureAsync(FrameInfo frame, bool showCursor = false)\n    {\n        return showCursor ? CaptureWithCursorAsync(frame) : CaptureAsync(frame);\n    }\n\n    public virtual async Task Stop()\n    {\n        if (!WasStarted)\n            return;\n\n        IsAcceptingFrames = false;\n\n        //Stop the consumer thread.\n        BlockingCollection.CompleteAdding();\n\n        await _task;\n\n        WasStarted = false;\n    }\n\n\n    private async Task DisposeInternal()\n    {\n        if (WasStarted)\n            await Stop();\n\n        _task?.Dispose();\n        _task = null;\n\n        BlockingCollection?.Dispose();\n        BlockingCollection = null;\n    }\n\n    public virtual async ValueTask DisposeAsync()\n    {\n        await DisposeInternal();\n        GC.SuppressFinalize(this);\n    }\n        \n    public void Dispose()\n    {\n        DisposeInternal().Wait();\n        GC.SuppressFinalize(this);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/CachedCapture.cs",
    "content": "using System;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Capture;\n\ninternal class CachedCapture : ImageCapture\n{\n    #region Variables\n\n    private FileStream _fileStream;\n    private BufferedStream _bufferedStream;\n    private DeflateStream _compressStream;\n\n    private BitmapInfoHeader _infoHeader;\n    private long _byteLength;\n\n    #endregion\n\n    public override void Start(int delay, int left, int top, int width, int height, double scale, ProjectInfo project)\n    {\n        base.Start(delay, left, top, width, height, scale, project);\n\n        _infoHeader = new BitmapInfoHeader();\n        _infoHeader.biSize = (uint)Marshal.SizeOf(_infoHeader);\n        _infoHeader.biBitCount = 24; //Without alpha channel.\n        _infoHeader.biClrUsed = 0;\n        _infoHeader.biClrImportant = 0;\n        _infoHeader.biCompression = 0;\n        _infoHeader.biHeight = -StartHeight; //Negative, so the Y-axis will be positioned correctly.\n        _infoHeader.biWidth = StartWidth;\n        _infoHeader.biPlanes = 1;\n\n        //This was working with 32 bits: 3L * Width * Height;\n        _byteLength = (StartWidth * _infoHeader.biBitCount + 31) / 32 * 4 * StartHeight;\n\n        //Due to a strange behavior with the GetDiBits method while the cursor is IBeam, it's best to use 24 bits, to ignore the alpha values.\n        //This capture mode ignores the alpha value.\n        project.BitDepth = 24;\n\n        _fileStream = new FileStream(project.CachePath, FileMode.Create, FileAccess.Write, FileShare.None);\n        _bufferedStream = new BufferedStream(_fileStream, UserSettings.All.MemoryCacheSize * 1048576); //Each 1 MB has 1_048_576 bytes.\n        _compressStream = new DeflateStream(_bufferedStream, UserSettings.All.CaptureCompression, true);\n    }\n\n    public override int Capture(FrameInfo frame)\n    {\n        try\n        {\n            //var success = Native.BitBlt(CompatibleDeviceContext, 0, 0, Width, Height, WindowDeviceContext, Left, Top, Native.CopyPixelOperation.SourceCopy | Native.CopyPixelOperation.CaptureBlt);\n            var success = Gdi32.StretchBlt(CompatibleDeviceContext, 0, 0, StartWidth, StartHeight, WindowDeviceContext, Left, Top, Width, Height, CopyPixelOperations.SourceCopy | CopyPixelOperations.CaptureBlt);\n\n            if (!success)\n                return FrameCount;\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = _byteLength;\n            frame.Data = new byte[_byteLength];\n\n            if (Gdi32.GetDIBits(WindowDeviceContext, CompatibleBitmap, 0, (uint)StartHeight, frame.Data, ref _infoHeader, DibColorModes.RgbColors) == 0)\n                frame.FrameSkipped = true;\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n        }\n        catch (Exception)\n        {\n            //LogWriter.Log(ex, \"Impossible to get screenshot of the screen\");\n        }\n\n        return FrameCount;\n    }\n\n    public override int CaptureWithCursor(FrameInfo frame)\n    {\n        try\n        {\n            //var success = Native.BitBlt(CompatibleDeviceContext, 0, 0, Width, Height, WindowDeviceContext, Left, Top, Native.CopyPixelOperation.SourceCopy | Native.CopyPixelOperation.CaptureBlt);\n            var success = Gdi32.StretchBlt(CompatibleDeviceContext, 0, 0, StartWidth, StartHeight, WindowDeviceContext, Left, Top, Width, Height, CopyPixelOperations.SourceCopy | CopyPixelOperations.CaptureBlt);\n\n            if (!success)\n                return FrameCount;\n\n            #region Cursor\n\n            try\n            {\n                var cursorInfo = new CursorInfo();\n                cursorInfo.cbSize = Marshal.SizeOf(cursorInfo);\n\n                if (User32.GetCursorInfo(out cursorInfo))\n                {\n                    if (cursorInfo.flags == Native.Constants.CursorShowing)\n                    {\n                        var hicon = User32.CopyIcon(cursorInfo.hCursor);\n\n                        if (hicon != IntPtr.Zero)\n                        {\n                            if (User32.GetIconInfo(hicon, out var iconInfo))\n                            {\n                                frame.CursorX = cursorInfo.ptScreenPos.X - Left;\n                                frame.CursorY = cursorInfo.ptScreenPos.Y - Top;\n\n                                //If the cursor rate needs to be precisely captured.\n                                //https://source.winehq.org/source/dlls/user32/cursoricon.c#2325\n                                //int rate = 0, num = 0;\n                                //var ok1 = Native.GetCursorFrameInfo(cursorInfo.hCursor, IntPtr.Zero, 17, ref rate, ref num);\n\n                                //CursorStep\n                                var ok = User32.DrawIconEx(CompatibleDeviceContext, frame.CursorX - iconInfo.xHotspot, frame.CursorY - iconInfo.yHotspot, cursorInfo.hCursor, 0, 0, CursorStep, IntPtr.Zero, 0x0003);\n\n                                if (!ok)\n                                {\n                                    CursorStep = 0;\n                                    User32.DrawIconEx(CompatibleDeviceContext, frame.CursorX - iconInfo.xHotspot, frame.CursorY - iconInfo.yHotspot, cursorInfo.hCursor, 0, 0, CursorStep, IntPtr.Zero, 0x0003);\n                                }\n                                else\n                                    CursorStep++;\n\n                                //Set to fix all alpha bits back to 255.\n                                //frame.RemoveAnyTransparency = iconInfo.hbmMask != IntPtr.Zero;\n                            }\n\n                            Gdi32.DeleteObject(iconInfo.hbmColor);\n                            Gdi32.DeleteObject(iconInfo.hbmMask);\n                        }\n\n                        User32.DestroyIcon(hicon);\n                    }\n\n                    Gdi32.DeleteObject(cursorInfo.hCursor);\n                }\n            }\n            catch (Exception e)\n            {\n                //LogWriter.Log(e, \"Impossible to get the cursor\");\n            }\n\n            #endregion\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = _byteLength;\n            frame.Data = new byte[_byteLength];\n\n            if (Gdi32.GetDIBits(WindowDeviceContext, CompatibleBitmap, 0, (uint)StartHeight, frame.Data, ref _infoHeader, DibColorModes.RgbColors) == 0)\n                frame.FrameSkipped = true;\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n        }\n        catch (Exception e)\n        {\n            //LogWriter.Log(ex, \"Impossible to get the screenshot of the screen\");\n        }\n\n        return FrameCount;\n    }\n\n    public override void Save(FrameInfo info)\n    {\n        if (UserSettings.All.PreventBlackFrames && info.Data != null && !info.FrameSkipped && info.Data[0] == 0)\n        {\n            if (!info.Data.Any(a => a > 0))\n                info.FrameSkipped = true;\n        }\n\n        //If the frame skipped, just increase the delay to the previous frame.\n        if (info.FrameSkipped || info.Data == null)\n        {\n            info.Data = null;\n\n            //Pass the duration to the previous frame, if any.\n            if (Project.Frames.Count > 0)\n                Project.Frames[Project.Frames.Count - 1].Delay += info.Delay;\n\n            return;\n        }\n\n        _compressStream.WriteBytes(info.Data);\n        info.Data = null;\n\n        Project.Frames.Add(info);\n    }\n\n    public override async Task Stop()\n    {\n        if (!WasStarted)\n            return;\n\n        //Stop the recording first.\n        await base.Stop();\n\n        //Then close the streams.\n        //_compressStream.Flush();\n        await _compressStream.DisposeAsync();\n\n        await _bufferedStream.FlushAsync();\n        await _fileStream.FlushAsync();\n\n        await _bufferedStream.DisposeAsync();\n        await _fileStream.DisposeAsync();\n    }\n\n    [Obsolete(\"Only for test\")]\n    public void Other()\n    {\n        var hDc = User32.GetWindowDC(IntPtr.Zero);\n        var hMemDc = Gdi32.CreateCompatibleDC(hDc);\n\n        var bi = new BitmapInfoHeader();\n        bi.biSize = (uint)Marshal.SizeOf(bi);\n        bi.biBitCount = 24; //Creating RGB bitmap. The following three members don't matter  \n        bi.biClrUsed = 0;\n        bi.biClrImportant = 0;\n        bi.biCompression = 0;\n        bi.biHeight = Height;\n        bi.biWidth = Width;\n        bi.biPlanes = 1;\n\n        var cb = (int)(bi.biHeight * bi.biWidth * bi.biBitCount / 8); //8 is bits per byte.  \n        bi.biSizeImage = (uint)(((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8) * bi.biHeight);\n        //bi.biXPelsPerMeter = XPelsPerMeter;\n        //bi.biYPelsPerMeter = YPelsPerMeter;\n        bi.biXPelsPerMeter = 96;\n        bi.biYPelsPerMeter = 96;\n\n        var pBits = IntPtr.Zero;\n        //Allocate memory for bitmap bits  \n        var pBI = Kernel32.LocalAlloc((uint)LocalMemoryFlags.LPTR, new UIntPtr(bi.biSize));\n        // Not sure if this needed - simply trying to keep marshaller happy  \n        Marshal.StructureToPtr(bi, pBI, false);\n        //This will return IntPtr to actual DIB bits in pBits  \n        var hBmp = Gdi32.CreateDIBSection(hDc, ref pBI, 0, out pBits, IntPtr.Zero, 0);\n        //Marshall back - now we have BitmapInfoHeader correctly filled in Marshal.PtrToStructure(pBI, bi);\n\n        var biNew = (BitmapInfoHeader)Marshal.PtrToStructure(pBI, typeof(BitmapInfoHeader));\n        //Usual stuff  \n        var hOldBitmap = Gdi32.SelectObject(hMemDc, hBmp);\n        //Grab bitmap  \n        var nRet = Gdi32.BitBlt(hMemDc, 0, 0, bi.biWidth, bi.biHeight, hDc, Left, Top, CopyPixelOperations.SourceCopy | CopyPixelOperations.CaptureBlt);\n\n        // Allocate memory for a copy of bitmap bits  \n        var realBits = new byte[cb];\n        // And grab bits from DIBSestion data  \n        Marshal.Copy(pBits, realBits, 0, cb);\n\n        //This simply creates valid bitmap file header, so it can be saved to disk  \n        var bfh = new BitmapFileHeader();\n        bfh.bfSize = (uint)cb + 0x36; // Size of header + size of Native.BitmapInfoHeader size of bitmap bits\n        bfh.bfType = 0x4d42; //BM  \n        bfh.bfOffBits = 0x36; //  \n        var hdrSize = 14;\n        var header = new byte[hdrSize];\n\n        BitConverter.GetBytes(bfh.bfType).CopyTo(header, 0);\n        BitConverter.GetBytes(bfh.bfSize).CopyTo(header, 2);\n        BitConverter.GetBytes(bfh.bfOffBits).CopyTo(header, 10);\n        //Allocate enough memory for complete bitmap file  \n        var data = new byte[cb + bfh.bfOffBits];\n        //BITMAPFILEHEADER  \n        header.CopyTo(data, 0);\n\n        //BitmapInfoHeader  \n        header = new byte[Marshal.SizeOf(bi)];\n        var pHeader = Kernel32.LocalAlloc((uint)LocalMemoryFlags.LPTR, new UIntPtr((uint)Marshal.SizeOf(bi)));\n        Marshal.StructureToPtr(biNew, pHeader, false);\n        Marshal.Copy(pHeader, header, 0, Marshal.SizeOf(bi));\n        Kernel32.LocalFree(pHeader);\n        header.CopyTo(data, hdrSize);\n        //Bitmap bits  \n        realBits.CopyTo(data, (int)bfh.bfOffBits);\n\n        //Native.SelectObject(_compatibleDeviceContext, _oldBitmap);\n        //Native.DeleteObject(_compatibleBitmap);\n        //Native.DeleteDC(_compatibleDeviceContext);\n        //Native.ReleaseDC(_desktopWindow, _windowDeviceContext);\n\n        Gdi32.SelectObject(hMemDc, hOldBitmap);\n        Gdi32.DeleteObject(hBmp);\n        Gdi32.DeleteDC(hMemDc);\n        User32.ReleaseDC(IntPtr.Zero, hDc);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/DirectCachedCapture.cs",
    "content": "using System;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing SharpDX;\nusing SharpDX.Direct3D11;\nusing SharpDX.DXGI;\nusing SharpDX.Mathematics.Interop;\nusing MapFlags = SharpDX.Direct3D11.MapFlags;\n\nnamespace ScreenToGif.Capture;\n\n/// <summary>\n/// Frame capture using the DesktopDuplication API and memory cache.\n/// Adapted from:\n/// https://github.com/ajorkowski/VirtualSpace\n/// https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/DXGIDesktopDuplication\n///\n/// How to debug:\n/// https://walbourn.github.io/dxgi-debug-device/\n/// https://walbourn.github.io/direct3d-sdk-debug-layer-tricks/\n/// https://devblogs.microsoft.com/cppblog/visual-studio-2015-and-graphics-tools-for-windows-10/\n/// </summary>\ninternal class DirectCachedCapture : DirectImageCapture\n{\n    #region Variables\n\n    private FileStream _fileStream;\n    private BufferedStream _bufferedStream;\n    private DeflateStream _compressStream;\n\n    #endregion\n\n    public override void Start(int delay, int left, int top, int width, int height, double dpi, ProjectInfo project)\n    {\n        base.Start(delay, left, top, width, height, dpi, project);\n\n        _fileStream = new FileStream(project.CachePath, FileMode.Create, FileAccess.Write, FileShare.None);\n        _bufferedStream = new BufferedStream(_fileStream, UserSettings.All.MemoryCacheSize * 1048576); //Each 1 MB has 1_048_576 bytes.\n        _compressStream = new DeflateStream(_bufferedStream, UserSettings.All.CaptureCompression, true);\n    }\n\n\n    public override int Capture(FrameInfo frame)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            if (FrameCount == 0 && (res.Failure || resource == null))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Something on screen was moved or changed.\n            if (info.TotalMetadataBufferSize > 0)\n            {\n                //Copy resource into memory that can be accessed by the CPU.\n                using (var screenTexture = resource.QueryInterface<Texture2D>())\n                {\n                    #region Moved rectangles\n\n                    var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                    for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                    {\n                        //Crop the destination rectangle to the screen area rectangle.\n                        var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left - OffsetLeft);\n                        var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top - OffsetTop);\n                        var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            //Limit the source rectangle to the available size within the destination rectangle.\n                            var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                            var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0,\n                                new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                                StagingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                        }\n                    }\n\n                    #endregion\n\n                    #region Dirty rectangles\n\n                    var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                    for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                    {\n                        //Crop screen positions and size to frame sizes.\n                        var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), StagingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                    }\n\n                    #endregion\n                }\n            }\n\n            #endregion\n\n            #region Gets the image data\n\n            //Gets the staging texture as a stream.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                stream?.Dispose();\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext?.UnmapSubresource(StagingTexture, 0);\n\n            resource?.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n\n            if (IsAcceptingFrames)\n                Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override int CaptureWithCursor(FrameInfo frame)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if (FrameCount == 0 && info.LastMouseUpdateTime == 0 && (res.Failure || resource == null))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (FrameCount == 0 && info.TotalMetadataBufferSize == 0 && info.LastMouseUpdateTime > 0)\n            {\n                //Sometimes, the first frame has cursor info, but no screen changes.\n                GetCursor(null, info, frame);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Something on screen was moved or changed.\n            if (info.TotalMetadataBufferSize > 0)\n            {\n                //Copies the screen data into memory that can be accessed by the CPU.\n                using (var screenTexture = resource.QueryInterface<Texture2D>())\n                {\n                    #region Moved rectangles\n\n                    var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                    for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                    {\n                        //Crop the destination rectangle to the screen area rectangle.\n                        var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left - OffsetLeft);\n                        var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top - OffsetTop);\n                        var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            //Limit the source rectangle to the available size within the destination rectangle.\n                            var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                            var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0,\n                                new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                                BackingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                        }\n                    }\n\n                    #endregion\n\n                    #region Dirty rectangles\n\n                    var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                    for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                    {\n                        //Crop screen positions and size to frame sizes.\n                        var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n\n                        //int left, right, top, bottom;\n                        //switch (DisplayRotation)\n                        //{\n                        //    case DisplayModeRotation.Rotate90:\n                        //    {\n                        //        //TODO:\n                        //        left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        //        right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n                        //        top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        //        bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n\n                        //        //left = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n                        //        //right = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        //        //top = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        //        //bottom = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n\n                        //        break;\n                        //    }\n\n                        //    case DisplayModeRotation.Rotate180:\n                        //    {\n                        //        //TODO:\n                        //        left = Math.Max(dirtyRectangles[dirtyIndex].Top + OffsetTop, Top);\n                        //        right = Math.Min(dirtyRectangles[dirtyIndex].Bottom + OffsetTop, Top + Height);\n                        //        top = Math.Min(dirtyRectangles[dirtyIndex].Right + OffsetLeft, Left + Width);\n                        //        bottom = Math.Max(dirtyRectangles[dirtyIndex].Left + OffsetLeft, Left);\n                        //        break;\n                        //    }\n\n                        //    default:\n                        //    {\n                        //        //In this context, the screen positions are relative to the current screen, not to the whole set of screens (virtual space).\n                        //        left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        //        right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n                        //        top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        //        bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n                        //        break;\n                        //    }\n                        //}\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), BackingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                    }\n\n                    #endregion\n                }\n            }\n\n            if (info.TotalMetadataBufferSize > 0 || info.LastMouseUpdateTime > 0)\n            {\n                //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n                Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n                //Gets the cursor image and merges with the staging texture.\n                GetCursor(StagingTexture, info, frame);\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            #endregion\n\n            #region Gets the image data\n\n            //Gets the staging texture as a stream.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                stream?.Dispose();\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            //Sets the frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext?.UnmapSubresource(StagingTexture, 0);\n            stream.Dispose();\n            resource?.Dispose();\n\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n\n            if (IsAcceptingFrames)\n                Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override int ManualCapture(FrameInfo frame, bool showCursor = false)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(1000, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if (res.Failure || resource == null || (!showCursor && info.AccumulatedFrames == 0) || (showCursor && info.AccumulatedFrames == 0 && info.LastMouseUpdateTime <= LastProcessTime))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (showCursor && info.AccumulatedFrames == 0 && info.LastMouseUpdateTime > LastProcessTime)\n            {\n                //Gets the cursor shape if the screen hasn't changed in between, so the cursor will be available for the next frame.\n                GetCursor(null, info, frame);\n\n                resource.Dispose();\n                return FrameCount;\n\n                //TODO: if only the mouse changed, but there's no frame accumulated, but there's data in the texture from the previous frame, I need to merge with the cursor and add to the list.\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            //Copy resource into memory that can be accessed by the CPU.\n            using (var screenTexture = resource.QueryInterface<Texture2D>())\n            {\n                if (showCursor)\n                {\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(TrueLeft, TrueTop, 0, TrueRight, TrueBottom, 1), BackingTexture, 0);\n\n                    //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n                    Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n                    //Gets the cursor image and merges with the staging texture.\n                    GetCursor(StagingTexture, info, frame);\n                }\n                else\n                {\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(TrueLeft, TrueTop, 0, TrueRight, TrueBottom, 1), StagingTexture, 0);\n                }\n            }\n\n            //Get the desktop capture texture.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                stream?.Dispose();\n                resource.Dispose();\n                return FrameCount;\n            }\n\n            #region Get image data\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n            stream.Dispose();\n            resource.Dispose();\n\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n\n            if (IsAcceptingFrames)\n                Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n\n    public override void Save(FrameInfo info)\n    {\n        System.Diagnostics.Debug.WriteLine(\"Length:\" + info.Data.Length + \" \" + _fileStream.Length);\n\n        _compressStream.WriteBytes(info.Data);\n        _compressStream.Flush();\n\n        info.Data = null;\n\n        Project.Frames.Add(info);\n    }\n\n    public override async Task Stop()\n    {\n        if (!WasStarted)\n            return;\n\n        //Stop the recording first.\n        await base.Stop();\n\n        //Then close the streams.\n        //await _compressStream.FlushAsync();\n        await _compressStream.DisposeAsync();\n\n        await _bufferedStream.FlushAsync();\n        await _fileStream.FlushAsync();\n\n        await _bufferedStream.DisposeAsync();\n        await _fileStream.DisposeAsync();\n    }\n\n\n    public int Capture2(FrameInfo frame)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            //Somehow, it was not possible to retrieve the resource or any frame.\n            if (res.Failure || resource == null || info.AccumulatedFrames == 0)\n            {\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            //Copy resource into memory that can be accessed by the CPU.\n            using (var screenTexture = resource.QueryInterface<Texture2D>())\n            {\n                //Copies from the screen texture only the area which the user wants to capture.\n                Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(TrueLeft, TrueTop, 0, TrueRight, TrueBottom, 1), StagingTexture, 0);\n            }\n\n            //Get the desktop capture texture.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n                stream?.Dispose();\n                resource.Dispose();\n                return FrameCount;\n            }\n\n            #region Get image data\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n            resource.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public int CaptureWithCursor2(FrameInfo frame)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if (res.Failure || resource == null || (info.AccumulatedFrames == 0 && info.LastMouseUpdateTime <= LastProcessTime))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (info.AccumulatedFrames == 0 && info.LastMouseUpdateTime > LastProcessTime)\n            {\n                //Gets the cursor shape if the screen hasn't changed in between, so the cursor will be available for the next frame.\n                GetCursor(null, info, frame);\n\n                resource.Dispose();\n                return FrameCount;\n\n                //TODO: if only the mouse changed, but there's no frame accumulated, but there's data in the texture from the previous frame, I need to merge with the cursor and add to the list.\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            //Copy resource into memory that can be accessed by the CPU.\n            using (var screenTexture = resource.QueryInterface<Texture2D>())\n            {\n                //Copies from the screen texture only the area which the user wants to capture.\n                Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(TrueLeft, TrueTop, 0, TrueRight, TrueBottom, 1), BackingTexture, 0);\n\n                //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n                Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n                //Gets the cursor image and merges with the staging texture.\n                GetCursor(StagingTexture, info, frame);\n            }\n\n            //Get the desktop capture texture.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                stream?.Dispose();\n                resource.Dispose();\n                return FrameCount;\n            }\n\n            #region Get image data\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n            stream.Dispose();\n            resource.Dispose();\n\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n            Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/DirectChangedCachedCapture.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util;\nusing SharpDX;\nusing SharpDX.Direct3D11;\nusing SharpDX.DXGI;\nusing SharpDX.Mathematics.Interop;\nusing MapFlags = SharpDX.Direct3D11.MapFlags;\n\nnamespace ScreenToGif.Capture;\n\ninternal class DirectChangedCachedCapture : DirectCachedCapture\n{\n    public override int Capture(FrameInfo frame)\n    {\n        var res = new Result(-1);\n        var wasCaptured = false;\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            if (res.Failure || resource == null || info.TotalMetadataBufferSize == 0)\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Copy resource into memory that can be accessed by the CPU.\n            using (var screenTexture = resource.QueryInterface<Texture2D>())\n            {\n                #region Moved rectangles\n\n                var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                {\n                    //Crop the destination rectangle to the scree area rectangle.\n                    var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left);\n                    var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width);\n                    var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top);\n                    var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height);\n\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    if (right > left && bottom > top)\n                    {\n                        //Limit the source rectangle to the available size within the destination rectangle.\n                        var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                        var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                        Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                            StagingTexture, 0, left - Left, top - Top);\n                        wasCaptured = true;\n                    }\n                }\n\n                #endregion\n\n                #region Dirty rectangles\n\n                var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                {\n                    //Crop screen positions and size to frame sizes.\n                    var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left);\n                    var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width);\n                    var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top);\n                    var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height);\n\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    if (right > left && bottom > top)\n                    {\n                        Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), StagingTexture, 0, left - Left, top - Top);\n                        wasCaptured = true;\n                    }\n                }\n\n                #endregion\n\n                if (!wasCaptured)\n                {\n                    //Nothing was changed within the capture region, so ignore this frame.\n                    resource.Dispose();\n                    return FrameCount;\n                }\n            }\n\n            #endregion\n\n            #region Gets the image data\n\n            //Gets the staging texture as a stream.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                stream?.Dispose();\n                resource.Dispose();\n                return FrameCount;\n            }\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n            resource.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override int CaptureWithCursor(FrameInfo frame)\n    {\n        var res = new Result(-1);\n        var wasCaptured = false;\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if ((res.Failure || resource == null) && info.TotalMetadataBufferSize == 0 && info.LastMouseUpdateTime == 0)\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (FrameCount == 0 && info.TotalMetadataBufferSize == 0 && info.LastMouseUpdateTime > 0)\n            {\n                //Sometimes, the first frame has cursor info, but no screen changes.\n                GetCursor(null, info, frame);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Something on screen was moved or changed.\n            if (info.TotalMetadataBufferSize > 0 && resource != null)\n            {\n                //Copies the screen data into memory that can be accessed by the CPU.\n                using (var screenTexture = resource.QueryInterface<Texture2D>())\n                {\n                    #region Moved rectangles\n\n                    var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                    for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                    {\n                        //Crop the destination rectangle to the scree area rectangle.\n                        var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left);\n                        var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width);\n                        var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top);\n                        var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            //Limit the source rectangle to the available size within the destination rectangle.\n                            var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                            var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                                BackingTexture, 0, left - Left, top - Top);\n\n                            wasCaptured = true;\n                        }\n                    }\n\n                    #endregion\n\n                    #region Dirty rectangles\n\n                    var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                    for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                    {\n                        //Crop screen positions and size to frame sizes.\n                        var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left);\n                        var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width);\n                        var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top);\n                        var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), BackingTexture, 0, left - Left, top - Top);\n                            wasCaptured = true;\n                        }\n                    }\n\n                    #endregion\n                }\n            }\n\n            //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n            Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n            //Gets the cursor image and merges with the staging texture.\n            if (!GetCursor(StagingTexture, info, frame) && !wasCaptured)\n            {\n                //Nothing was changed within the capture region, so ignore this frame.\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            #endregion\n\n            #region Gets the image data\n\n            //Gets the staging texture as a stream.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None, out var stream);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                stream?.Dispose();\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            //Sets the frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.DataLength = stream.Length;\n            frame.Data = new byte[stream.Length];\n\n            //BGRA32 is 4 bytes.\n            for (var height = 0; height < Height; height++)\n            {\n                stream.Position = height * data.RowPitch;\n                Marshal.Copy(new IntPtr(stream.DataPointer.ToInt64() + height * data.RowPitch), frame.Data, height * Width * 4, Width * 4);\n            }\n\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n            stream.Dispose();\n            resource?.Dispose();\n\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n            Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/DirectChangedImageCapture.cs",
    "content": "using System;\nusing System.Drawing.Imaging;\nusing System.Runtime.InteropServices;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util;\nusing SharpDX;\nusing SharpDX.Direct3D11;\nusing SharpDX.DXGI;\nusing SharpDX.Mathematics.Interop;\nusing MapFlags = SharpDX.Direct3D11.MapFlags;\n\nnamespace ScreenToGif.Capture;\n\ninternal class DirectChangedImageCapture : DirectImageCapture\n{\n    public override int Capture(FrameInfo frame)\n    {\n        var res = new Result(-1);\n        var wasCaptured = false;\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            if (res.Failure || resource == null || info.TotalMetadataBufferSize == 0)\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Copy resource into memory that can be accessed by the CPU.\n            using (var screenTexture = resource.QueryInterface<Texture2D>())\n            {\n                #region Moved rectangles\n\n                var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                {\n                    //Crop the destination rectangle to the scree area rectangle.\n                    var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left);\n                    var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width);\n                    var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top);\n                    var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height);\n\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    if (right > left && bottom > top)\n                    {\n                        //Limit the source rectangle to the available size within the destination rectangle.\n                        var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                        var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                        Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                            StagingTexture, 0, left - Left, top - Top);\n                        wasCaptured = true;\n                    }\n                }\n\n                #endregion\n\n                #region Dirty rectangles\n\n                var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                {\n                    //Crop screen positions and size to frame sizes.\n                    var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left);\n                    var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width);\n                    var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top);\n                    var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height);\n\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    if (right > left && bottom > top)\n                    {\n                        Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), StagingTexture, 0, left - Left, top - Top);\n                        wasCaptured = true;\n                    }\n                }\n\n                #endregion\n\n                if (!wasCaptured)\n                {\n                    //Nothing was changed within the capture region, so ignore this frame.\n                    resource.Dispose();\n                    return FrameCount;\n                }\n            }\n\n            #endregion\n\n            #region Gets the image data\n\n            //Gets the staging texture as a stream.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            var bitmap = new System.Drawing.Bitmap(Width, Height, PixelFormat.Format32bppArgb);\n            var boundsRect = new System.Drawing.Rectangle(0, 0, Width, Height);\n\n            //Copy pixels from screen capture Texture to the GDI bitmap.\n            var mapDest = bitmap.LockBits(boundsRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);\n            var sourcePtr = data.DataPointer;\n            var destPtr = mapDest.Scan0;\n\n            for (var y = 0; y < Height; y++)\n            {\n                //Copy a single line.\n                Utilities.CopyMemory(destPtr, sourcePtr, Width * 4);\n\n                //Advance pointers.\n                sourcePtr = IntPtr.Add(sourcePtr, data.RowPitch);\n                destPtr = IntPtr.Add(destPtr, mapDest.Stride);\n            }\n\n            //Release source and dest locks.\n            bitmap.UnlockBits(mapDest);\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = bitmap;\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n            resource?.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            OnError.Invoke(ex);\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override int CaptureWithCursor(FrameInfo frame)\n    {\n        var res = new Result(-1);\n        var wasCaptured = false;\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if ((res.Failure || resource == null) && info.TotalMetadataBufferSize == 0 && info.LastMouseUpdateTime == 0)\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (FrameCount == 0 && info.TotalMetadataBufferSize == 0 && info.LastMouseUpdateTime > 0)\n            {\n                //Sometimes, the first frame has cursor info, but no screen changes.\n                GetCursor(null, info, frame);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Something on screen was moved or changed.\n            if (info.TotalMetadataBufferSize > 0 && resource != null)\n            {\n                //Copies the screen data into memory that can be accessed by the CPU.\n                using (var screenTexture = resource.QueryInterface<Texture2D>())\n                {\n                    #region Moved rectangles\n\n                    var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                    for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                    {\n                        //Crop the destination rectangle to the scree area rectangle.\n                        var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left);\n                        var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width);\n                        var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top);\n                        var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            //Limit the source rectangle to the available size within the destination rectangle.\n                            var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                            var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                                BackingTexture, 0, left - Left, top - Top);\n\n                            wasCaptured = true;\n                        }\n                    }\n\n                    #endregion\n\n                    #region Dirty rectangles\n\n                    var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                    for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                    {\n                        //Crop screen positions and size to frame sizes.\n                        var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left);\n                        var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width);\n                        var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top);\n                        var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), BackingTexture, 0, left - Left, top - Top);\n                            wasCaptured = true;\n                        }\n                    }\n\n                    #endregion\n                }\n            }\n\n            //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n            Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n            //Gets the cursor image and merges with the staging texture.\n            if (!GetCursor(StagingTexture, info, frame) && !wasCaptured)\n            {\n                //Nothing was changed within the capture region, so ignore this frame.\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            #endregion\n\n            #region Gets the image data\n\n            //Get the desktop capture texture.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            var bitmap = new System.Drawing.Bitmap(Width, Height, PixelFormat.Format32bppArgb);\n            var boundsRect = new System.Drawing.Rectangle(0, 0, Width, Height);\n\n            //Copy pixels from screen capture Texture to the GDI bitmap.\n            var mapDest = bitmap.LockBits(boundsRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);\n            var sourcePtr = data.DataPointer;\n            var destPtr = mapDest.Scan0;\n\n            for (var y = 0; y < Height; y++)\n            {\n                //Copy a single line.\n                Utilities.CopyMemory(destPtr, sourcePtr, Width * 4);\n\n                //Advance pointers.\n                sourcePtr = IntPtr.Add(sourcePtr, data.RowPitch);\n                destPtr = IntPtr.Add(destPtr, mapDest.Stride);\n            }\n\n            //Releases the source and dest locks.\n            bitmap.UnlockBits(mapDest);\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = bitmap;\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n            resource?.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n            OnError.Invoke(ex);\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/DirectImageCapture.cs",
    "content": "using System;\nusing System.Drawing.Imaging;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Exceptions;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing SharpDX;\nusing SharpDX.Direct3D;\nusing SharpDX.Direct3D11;\nusing SharpDX.DXGI;\nusing SharpDX.Mathematics.Interop;\nusing Device = SharpDX.Direct3D11.Device;\nusing MapFlags = SharpDX.Direct3D11.MapFlags;\n\nnamespace ScreenToGif.Capture;\n\n/// <summary>\n/// Frame capture using the DesktopDuplication API.\n/// Adapted from:\n/// https://github.com/ajorkowski/VirtualSpace\n/// https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/DXGIDesktopDuplication\n///\n/// How to debug:\n/// https://walbourn.github.io/dxgi-debug-device/\n/// https://walbourn.github.io/direct3d-sdk-debug-layer-tricks/\n/// https://devblogs.microsoft.com/cppblog/visual-studio-2015-and-graphics-tools-for-windows-10/\n/// </summary>\ninternal class DirectImageCapture : BaseCapture\n{\n    #region Variables\n\n    /// <summary>\n    /// The current device being duplicated.\n    /// </summary>\n    protected internal Device Device;\n\n    /// <summary>\n    /// The desktop duplication interface.\n    /// </summary>\n    protected internal OutputDuplication DuplicatedOutput;\n\n    /// <summary>\n    /// The rotation of the screen.\n    /// </summary>\n    protected internal DisplayModeRotation DisplayRotation;\n\n    /// <summary>\n    /// The texture used to copy the pixel data from the desktop to the destination image.\n    /// </summary>\n    protected internal Texture2D StagingTexture;\n\n    /// <summary>\n    /// The texture used exclusively to be a backing texture when capturing the cursor shape.\n    /// This texture will always hold only the desktop texture, without the cursor.\n    /// </summary>\n    protected internal Texture2D BackingTexture;\n\n    /// <summary>\n    /// The texture used exclusively to be a backing texture when capturing screens which are rotated.\n    /// </summary>\n    protected internal Texture2D TransformTexture;\n\n    /// <summary>\n    /// Texture used to merge the cursor with the background image (desktop).\n    /// </summary>\n    protected internal Texture2D CursorStagingTexture;\n\n    /// <summary>\n    /// The buffer that holds all pixel data of the cursor.\n    /// </summary>\n    protected internal byte[] CursorShapeBuffer;\n\n    /// <summary>\n    /// The details of the cursor.\n    /// </summary>\n    protected internal OutputDuplicatePointerShapeInformation CursorShapeInfo;\n\n    /// <summary>\n    /// The previous position of the mouse cursor.\n    /// </summary>\n    protected internal OutputDuplicatePointerPosition PreviousPosition;\n\n    /// <summary>\n    /// The latest time in which a frame or metadata was captured.\n    /// </summary>\n    protected internal long LastProcessTime = 0;\n\n    protected internal int OffsetLeft { get; set; }\n    protected internal int OffsetTop { get; set; }\n    protected internal int TrueLeft => Left + OffsetLeft;\n    protected internal int TrueRight => Left + OffsetLeft + Width;\n    protected internal int TrueTop => Top + OffsetTop;\n    protected internal int TrueBottom => Top + OffsetTop + Height;\n\n    /// <summary>\n    /// Flag that holds the information whether the previous capture had a major crash.\n    /// </summary>\n    protected internal bool MajorCrashHappened = false;\n\n    #endregion\n\n    public override void Start(int delay, int left, int top, int width, int height, double dpi, ProjectInfo project)\n    {\n        base.Start(delay, left, top, width, height, dpi, project);\n\n        //Only set as Started after actually finishing starting.\n        WasStarted = false;\n\n        Initialize();\n\n        WasStarted = true;\n    }\n\n    public override void ResetConfiguration()\n    {\n        DisposeInternal();\n        Initialize();\n    }\n\n    internal void Initialize()\n    {\n        MajorCrashHappened = false;\n\n#if DEBUG\n        Device = new Device(DriverType.Hardware, DeviceCreationFlags.Debug);\n\n        var debug = SharpDX.DXGI.InfoQueue.TryCreate();\n        debug?.SetBreakOnSeverity(DebugId.All, InformationQueueMessageSeverity.Corruption, true);\n        debug?.SetBreakOnSeverity(DebugId.All, InformationQueueMessageSeverity.Error, true);\n        debug?.SetBreakOnSeverity(DebugId.All, InformationQueueMessageSeverity.Warning, true);\n\n        var debug2 = DXGIDebug.TryCreate();\n        debug2?.ReportLiveObjects(DebugId.Dx, DebugRloFlags.Summary | DebugRloFlags.Detail);\n\n#else\n            Device = new Device(DriverType.Hardware, DeviceCreationFlags.VideoSupport);\n#endif\n\n        using (var multiThread = Device.QueryInterface<Multithread>())\n            multiThread.SetMultithreadProtected(true);\n\n        //Texture used to copy contents from the GPU to be accessible by the CPU.\n        StagingTexture = new Texture2D(Device, new Texture2DDescription\n        {\n            ArraySize = 1,\n            BindFlags = BindFlags.None,\n            CpuAccessFlags = CpuAccessFlags.Read,\n            Format = Format.B8G8R8A8_UNorm,\n            Width = Width,\n            Height = Height,\n            OptionFlags = ResourceOptionFlags.None,\n            MipLevels = 1,\n            SampleDescription = new SampleDescription(1, 0),\n            Usage = ResourceUsage.Staging\n        });\n\n        //Texture that is used to receive the pixel data from the GPU.\n        BackingTexture = new Texture2D(Device, new Texture2DDescription\n        {\n            ArraySize = 1,\n            BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,\n            CpuAccessFlags = CpuAccessFlags.None,\n            Format = Format.B8G8R8A8_UNorm,\n            Width = Width,\n            Height = Height,\n            OptionFlags = ResourceOptionFlags.None,\n            MipLevels = 1,\n            SampleDescription = new SampleDescription(1, 0),\n            Usage = ResourceUsage.Default\n        });\n\n        using (var factory = new Factory1())\n        {\n            //Get the Output1 based on the current capture region position.\n            using (var output1 = GetOutput(factory))\n            {\n                try\n                {\n                    //Make sure to run with the integrated graphics adapter if using a Microsoft hybrid system. https://stackoverflow.com/a/54196789/1735672\n                    DuplicatedOutput = output1.DuplicateOutput(Device);\n                }\n                catch (SharpDXException e) when (e.Descriptor == SharpDX.DXGI.ResultCode.NotCurrentlyAvailable)\n                {\n                    throw new Exception(\"Too many applications using the Desktop Duplication API. Please close one of the applications and try again.\", e);\n                }\n                catch (SharpDXException e) when (e.Descriptor == SharpDX.DXGI.ResultCode.Unsupported)\n                {\n                    throw new GraphicsConfigurationException(\"The Desktop Duplication API is not supported on this computer.\", e);\n                }\n                catch (SharpDXException e) when (e.Descriptor == SharpDX.DXGI.ResultCode.InvalidCall)\n                {\n                    throw new GraphicsConfigurationException(\"The Desktop Duplication API is not supported on this screen.\", e);\n                }\n                catch (SharpDXException e) when (e.Descriptor.NativeApiCode == \"E_INVALIDARG\")\n                {\n                    throw new GraphicsConfigurationException(\"Looks like that the Desktop Duplication API is not supported on this screen.\", e);\n                }\n            }\n        }\n    }\n\n    /// <summary>\n    /// Get the correct Output1 based on region to be captured.\n    /// </summary>\n    private Output1 GetOutput(Factory1 factory)\n    {\n        try\n        {\n            //Gets the output with the bigger area being intersected.\n            var output = factory.Adapters1.SelectMany(s => s.Outputs).FirstOrDefault(f => f.Description.DeviceName == DeviceName) ??\n                         factory.Adapters1.SelectMany(s => s.Outputs).OrderByDescending(f =>\n                         {\n                             var x = Math.Max(Left, f.Description.DesktopBounds.Left);\n                             var num1 = Math.Min(Left + Width, f.Description.DesktopBounds.Right);\n                             var y = Math.Max(Top, f.Description.DesktopBounds.Top);\n                             var num2 = Math.Min(Top + Height, f.Description.DesktopBounds.Bottom);\n\n                             if (num1 >= x && num2 >= y)\n                                 return num1 - x + num2 - y;\n\n                             return 0;\n                         }).FirstOrDefault();\n\n            if (output == null)\n                throw new Exception($\"Could not find a proper output device for the area of L: {Left}, T: {Top}, Width: {Width}, Height: {Height}.\");\n\n            //Position adjustments, so the correct region is captured.\n            OffsetLeft = output.Description.DesktopBounds.Left;\n            OffsetTop = output.Description.DesktopBounds.Top;\n            DisplayRotation = output.Description.Rotation;\n\n            if (DisplayRotation != DisplayModeRotation.Identity)\n            {\n                //Texture that is used to receive the pixel data from the GPU.\n                TransformTexture = new Texture2D(Device, new Texture2DDescription\n                {\n                    ArraySize = 1,\n                    BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,\n                    CpuAccessFlags = CpuAccessFlags.None,\n                    Format = Format.B8G8R8A8_UNorm,\n                    Width = Height,\n                    Height = Width,\n                    OptionFlags = ResourceOptionFlags.None,\n                    MipLevels = 1,\n                    SampleDescription = new SampleDescription(1, 0),\n                    Usage = ResourceUsage.Default\n                });\n            }\n\n            //Create textures in here, after detecting the orientation?\n\n            return output.QueryInterface<Output1>();\n        }\n        catch (SharpDXException ex)\n        {\n            throw new Exception(\"Could not find the specified output device.\", ex);\n        }\n    }\n\n\n    public override int Capture(FrameInfo frame)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            if (FrameCount == 0 && (res.Failure || resource == null))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Something on screen was moved or changed.\n            if (info.TotalMetadataBufferSize > 0)\n            {\n                //Copy resource into memory that can be accessed by the CPU.\n                using (var screenTexture = resource.QueryInterface<Texture2D>())\n                {\n                    #region Moved rectangles\n\n                    var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                    for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                    {\n                        //Crop the destination rectangle to the screen area rectangle.\n                        var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left - OffsetLeft);\n                        var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top - OffsetTop);\n                        var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            //Limit the source rectangle to the available size within the destination rectangle.\n                            var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                            var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0,\n                                new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                                StagingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                        }\n                    }\n\n                    #endregion\n\n                    #region Dirty rectangles\n\n                    var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                    for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                    {\n                        //Crop screen positions and size to frame sizes.\n                        var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), StagingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                    }\n\n                    #endregion\n                }\n            }\n\n            #endregion\n\n            #region Gets the image data\n\n            //Gets the staging texture as a stream.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            var bitmap = new System.Drawing.Bitmap(Width, Height, PixelFormat.Format32bppArgb);\n            var boundsRect = new System.Drawing.Rectangle(0, 0, Width, Height);\n\n            //Copy pixels from screen capture Texture to the GDI bitmap.\n            var mapDest = bitmap.LockBits(boundsRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);\n            var sourcePtr = data.DataPointer;\n            var destPtr = mapDest.Scan0;\n\n            for (var y = 0; y < Height; y++)\n            {\n                //Copy a single line.\n                Utilities.CopyMemory(destPtr, sourcePtr, Width * 4);\n\n                //Advance pointers.\n                sourcePtr = IntPtr.Add(sourcePtr, data.RowPitch);\n                destPtr = IntPtr.Add(destPtr, mapDest.Stride);\n            }\n\n            //Release source and dest locks.\n            bitmap.UnlockBits(mapDest);\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = bitmap;\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n            resource?.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n\n            if (IsAcceptingFrames)\n                Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override async Task<int> CaptureAsync(FrameInfo frame)\n    {\n        return await Task.Factory.StartNew(() => Capture(frame));\n    }\n\n    public override int CaptureWithCursor(FrameInfo frame)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(0, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if (FrameCount == 0 && info.LastMouseUpdateTime == 0 && (res.Failure || resource == null))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (FrameCount == 0 && info.TotalMetadataBufferSize == 0 && info.LastMouseUpdateTime > 0)\n            {\n                //Sometimes, the first frame has cursor info, but no screen changes.\n                GetCursor(null, info, frame);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            #region Process changes\n\n            //Something on screen was moved or changed.\n            if (info.TotalMetadataBufferSize > 0)\n            {\n                //Copies the screen data into memory that can be accessed by the CPU.\n                using (var screenTexture = resource.QueryInterface<Texture2D>())\n                {\n                    #region Moved rectangles\n\n                    var movedRectangles = new OutputDuplicateMoveRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameMoveRects(movedRectangles.Length, movedRectangles, out var movedRegionsLength);\n\n                    for (var movedIndex = 0; movedIndex < movedRegionsLength / Marshal.SizeOf(typeof(OutputDuplicateMoveRectangle)); movedIndex++)\n                    {\n                        //Crop the destination rectangle to the screen area rectangle.\n                        var left = Math.Max(movedRectangles[movedIndex].DestinationRect.Left, Left - OffsetLeft);\n                        var right = Math.Min(movedRectangles[movedIndex].DestinationRect.Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(movedRectangles[movedIndex].DestinationRect.Top, Top - OffsetTop);\n                        var bottom = Math.Min(movedRectangles[movedIndex].DestinationRect.Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                        {\n                            //Limit the source rectangle to the available size within the destination rectangle.\n                            var sourceWidth = movedRectangles[movedIndex].SourcePoint.X + (right - left);\n                            var sourceHeight = movedRectangles[movedIndex].SourcePoint.Y + (bottom - top);\n\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0,\n                                new ResourceRegion(movedRectangles[movedIndex].SourcePoint.X, movedRectangles[movedIndex].SourcePoint.Y, 0, sourceWidth, sourceHeight, 1),\n                                BackingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                        }\n                    }\n\n                    #endregion\n\n                    #region Dirty rectangles\n\n                    var dirtyRectangles = new RawRectangle[info.TotalMetadataBufferSize];\n                    DuplicatedOutput.GetFrameDirtyRects(dirtyRectangles.Length, dirtyRectangles, out var dirtyRegionsLength);\n\n                    for (var dirtyIndex = 0; dirtyIndex < dirtyRegionsLength / Marshal.SizeOf(typeof(RawRectangle)); dirtyIndex++)\n                    {\n                        //Crop screen positions and size to frame sizes.\n                        var left = Math.Max(dirtyRectangles[dirtyIndex].Left, Left - OffsetLeft);\n                        var right = Math.Min(dirtyRectangles[dirtyIndex].Right, Left + Width - OffsetLeft);\n                        var top = Math.Max(dirtyRectangles[dirtyIndex].Top, Top - OffsetTop);\n                        var bottom = Math.Min(dirtyRectangles[dirtyIndex].Bottom, Top + Height - OffsetTop);\n\n                        //Copies from the screen texture only the area which the user wants to capture.\n                        if (right > left && bottom > top)\n                            Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(left, top, 0, right, bottom, 1), BackingTexture, 0, left - (Left - OffsetLeft), top - (Top - OffsetTop));\n                    }\n\n                    #endregion\n                }\n            }\n\n            if (info.TotalMetadataBufferSize > 0 || info.LastMouseUpdateTime > 0)\n            {\n                //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n                Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n                //Gets the cursor image and merges with the staging texture.\n                GetCursor(StagingTexture, info, frame);\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            #endregion\n\n            #region Gets the image data\n\n            //Get the desktop capture texture.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None);\n\n            if (data.IsEmpty)\n            {\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                resource?.Dispose();\n                return FrameCount;\n            }\n\n            var bitmap = new System.Drawing.Bitmap(Width, Height, PixelFormat.Format32bppArgb);\n            var boundsRect = new System.Drawing.Rectangle(0, 0, Width, Height);\n\n            //Copy pixels from screen capture Texture to the GDI bitmap.\n            var mapDest = bitmap.LockBits(boundsRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);\n            var sourcePtr = data.DataPointer;\n            var destPtr = mapDest.Scan0;\n\n            for (var y = 0; y < Height; y++)\n            {\n                //Copy a single line.\n                Utilities.CopyMemory(destPtr, sourcePtr, Width * 4);\n\n                //Advance pointers.\n                sourcePtr = IntPtr.Add(sourcePtr, data.RowPitch);\n                destPtr = IntPtr.Add(destPtr, mapDest.Stride);\n            }\n\n            //Releases the source and dest locks.\n            bitmap.UnlockBits(mapDest);\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = bitmap;\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext?.UnmapSubresource(StagingTexture, 0);\n\n            resource?.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n\n            if (IsAcceptingFrames)\n                Application.Current.Dispatcher.Invoke(() => OnError.Invoke(ex));\n\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override async Task<int> CaptureWithCursorAsync(FrameInfo frame)\n    {\n        return await Task.Factory.StartNew(() => CaptureWithCursor(frame));\n    }\n\n    public override int ManualCapture(FrameInfo frame, bool showCursor = false)\n    {\n        var res = new Result(-1);\n\n        try\n        {\n            //Try to get the duplicated output frame within given time.\n            res = DuplicatedOutput.TryAcquireNextFrame(1000, out var info, out var resource);\n\n            //Checks how to proceed with the capture. It could have failed, or the screen, cursor or both could have been captured.\n            if (res.Failure || resource == null || (!showCursor && info.AccumulatedFrames == 0) || (showCursor && info.AccumulatedFrames == 0 && info.LastMouseUpdateTime <= LastProcessTime))\n            {\n                //Somehow, it was not possible to retrieve the resource, frame or metadata.\n                //frame.WasDropped = true;\n                //BlockingCollection.Add(frame);\n\n                resource?.Dispose();\n                return FrameCount;\n            }\n            else if (showCursor && info.AccumulatedFrames == 0 && info.LastMouseUpdateTime > LastProcessTime)\n            {\n                //Gets the cursor shape if the screen hasn't changed in between, so the cursor will be available for the next frame.\n                GetCursor(null, info, frame);\n\n                resource.Dispose();\n                return FrameCount;\n            }\n\n            //Saves the most recent capture time.\n            LastProcessTime = Math.Max(info.LastPresentTime, info.LastMouseUpdateTime);\n\n            //Copy resource into memory that can be accessed by the CPU.\n            using (var screenTexture = resource.QueryInterface<Texture2D>())\n            {\n                if (showCursor)\n                {\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(TrueLeft, TrueTop, 0, TrueRight, TrueBottom, 1), BackingTexture, 0);\n\n                    //Copy the captured desktop texture into a staging texture, in order to show the mouse cursor and not make the captured texture dirty with it.\n                    Device.ImmediateContext.CopyResource(BackingTexture, StagingTexture);\n\n                    //Gets the cursor image and merges with the staging texture.\n                    GetCursor(StagingTexture, info, frame);\n                }\n                else\n                {\n                    //Copies from the screen texture only the area which the user wants to capture.\n                    Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, new ResourceRegion(TrueLeft, TrueTop, 0, TrueRight, TrueBottom, 1), StagingTexture, 0);\n                }\n            }\n\n            //Get the desktop capture texture.\n            var data = Device.ImmediateContext.MapSubresource(StagingTexture, 0, MapMode.Read, MapFlags.None);\n\n            if (data.IsEmpty)\n            {\n                //frame.WasDropped = true;\n                //BlockingCollection.Add(frame);\n\n                Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n                resource.Dispose();\n                return FrameCount;\n            }\n\n            #region Get image data\n\n            var bitmap = new System.Drawing.Bitmap(Width, Height, PixelFormat.Format32bppArgb);\n            var boundsRect = new System.Drawing.Rectangle(0, 0, Width, Height);\n\n            //Copy pixels from screen capture Texture to the GDI bitmap.\n            var mapDest = bitmap.LockBits(boundsRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);\n            var sourcePtr = data.DataPointer;\n            var destPtr = mapDest.Scan0;\n\n            for (var y = 0; y < Height; y++)\n            {\n                //Copy a single line.\n                Utilities.CopyMemory(destPtr, sourcePtr, Width * 4);\n\n                //Advance pointers.\n                sourcePtr = IntPtr.Add(sourcePtr, data.RowPitch);\n                destPtr = IntPtr.Add(destPtr, mapDest.Stride);\n            }\n\n            //Release source and dest locks.\n            bitmap.UnlockBits(mapDest);\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = bitmap;\n            BlockingCollection.Add(frame);\n\n            #endregion\n\n            Device.ImmediateContext.UnmapSubresource(StagingTexture, 0);\n\n            resource.Dispose();\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code)\n        {\n            return FrameCount;\n        }\n        catch (SharpDXException se) when (se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceRemoved.Result.Code || se.ResultCode.Code == SharpDX.DXGI.ResultCode.DeviceReset.Result.Code)\n        {\n            //When the device gets lost or reset, the resources should be instantiated again.\n            DisposeInternal();\n            Initialize();\n\n            return FrameCount;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was not possible to finish capturing the frame with DirectX.\");\n\n            MajorCrashHappened = true;\n            OnError.Invoke(ex);\n            return FrameCount;\n        }\n        finally\n        {\n            try\n            {\n                //Only release the frame if there was a success in capturing it.\n                if (res.Success)\n                    DuplicatedOutput.ReleaseFrame();\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was not possible to release the frame.\");\n            }\n        }\n    }\n\n    public override async Task<int> ManualCaptureAsync(FrameInfo frame, bool showCursor = false)\n    {\n        return await Task.Factory.StartNew(() => ManualCapture(frame, showCursor));\n    }\n\n\n    protected internal bool GetCursor(Texture2D screenTexture, OutputDuplicateFrameInformation info, FrameInfo frame)\n    {\n        //Prepare buffer array to hold the cursor shape.\n        if (CursorShapeBuffer == null || info.PointerShapeBufferSize > CursorShapeBuffer.Length)\n            CursorShapeBuffer = new byte[info.PointerShapeBufferSize];\n\n        //If there's a cursor shape available to be captured.\n        if (info.PointerShapeBufferSize > 0)\n        {\n            //Pin the buffer in order to pass the address as parameter later.\n            var pinnedBuffer = GCHandle.Alloc(CursorShapeBuffer, GCHandleType.Pinned);\n            var cursorBufferAddress = pinnedBuffer.AddrOfPinnedObject();\n\n            //Load the cursor shape into the buffer.\n            DuplicatedOutput.GetFramePointerShape(info.PointerShapeBufferSize, cursorBufferAddress, out _, out CursorShapeInfo);\n\n            //If the cursor is monochrome, it will return the cursor shape twice, one is the mask.\n            if (CursorShapeInfo.Type == 1)\n                CursorShapeInfo.Height /= 2;\n\n            //The buffer must be unpinned, to free resources.\n            pinnedBuffer.Free();\n        }\n\n        //Store the current cursor position, if it was moved.\n        if (info.LastMouseUpdateTime != 0)\n            PreviousPosition = info.PointerPosition;\n\n        //TODO: In a future version, don't merge the cursor image in here, let the editor do that.\n        //Saves the position of the cursor, so the editor can add the mouse events overlay later.\n        frame.CursorX = PreviousPosition.Position.X - (Left - OffsetLeft);\n        frame.CursorY = PreviousPosition.Position.Y - (Top - OffsetTop);\n\n        //If the method is supposed to simply the get the cursor shape no shape was loaded before, there's nothing else to do.\n        //if (CursorShapeBuffer?.Length == 0 || (info.LastPresentTime == 0 && info.LastMouseUpdateTime == 0) || !info.PointerPosition.Visible)\n        if (screenTexture == null || CursorShapeBuffer?.Length == 0)// || !info.PointerPosition.Visible)\n        {\n            //FallbackCursorCapture(frame);\n\n            //if (CursorShapeBuffer != null)\n            return false;\n        }\n\n        //Don't let it bleed beyond the top-left corner, calculate the dimensions of the portion of the cursor that will appear.\n        var leftCut = frame.CursorX;\n        var topCut = frame.CursorY;\n        var rightCut = screenTexture.Description.Width - (frame.CursorX + CursorShapeInfo.Width);\n        var bottomCut = screenTexture.Description.Height - (frame.CursorY + CursorShapeInfo.Height);\n\n        //Adjust to the hotspot offset, so it's possible to add the highlight correctly later.\n        frame.CursorX += CursorShapeInfo.HotSpot.X;\n        frame.CursorY += CursorShapeInfo.HotSpot.Y;\n\n        //Don't try merging the textures if the cursor is out of bounds.\n        if (leftCut + CursorShapeInfo.Width < 1 || topCut + CursorShapeInfo.Height < 1 || rightCut + CursorShapeInfo.Width < 1 || bottomCut + CursorShapeInfo.Height < 1)\n            return false;\n\n        var cursorLeft = Math.Max(leftCut, 0);\n        var cursorTop = Math.Max(topCut, 0);\n        var cursorWidth = leftCut < 0 ? CursorShapeInfo.Width + leftCut : rightCut < 0 ? CursorShapeInfo.Width + rightCut : CursorShapeInfo.Width;\n        var cursorHeight = topCut < 0 ? CursorShapeInfo.Height + topCut : bottomCut < 0 ? CursorShapeInfo.Height + bottomCut : CursorShapeInfo.Height;\n\n        //The staging texture must be able to hold all pixels.\n        if (CursorStagingTexture == null || CursorStagingTexture.Description.Width != cursorWidth || CursorStagingTexture.Description.Height != cursorHeight)\n        {\n            //In order to change the size of the texture, I need to instantiate it again with the new size.\n            CursorStagingTexture?.Dispose();\n            CursorStagingTexture = new Texture2D(Device, new Texture2DDescription\n            {\n                ArraySize = 1,\n                BindFlags = BindFlags.None,\n                CpuAccessFlags = CpuAccessFlags.Write,\n                Height = cursorHeight,\n                Format = Format.B8G8R8A8_UNorm,\n                Width = cursorWidth,\n                MipLevels = 1,\n                OptionFlags = ResourceOptionFlags.None,\n                SampleDescription = new SampleDescription(1, 0),\n                Usage = ResourceUsage.Staging\n            });\n        }\n\n        //The region where the cursor is located is copied to the staging texture to act as the background when dealing with masks and transparency.\n        //The cutout must be the exact region needed and it can't overflow. It's not allowed to try to cut outside of the screenTexture region.\n        var region = new ResourceRegion\n        {\n            Left = cursorLeft,\n            Top = cursorTop,\n            Front = 0,\n            Right = cursorLeft + cursorWidth,\n            Bottom = cursorTop + cursorHeight,\n            Back = 1\n        };\n\n        //Copy from the screen the region in which the cursor is located.\n        Device.ImmediateContext.CopySubresourceRegion(screenTexture, 0, region, CursorStagingTexture, 0);\n\n        //Get cursor details and draw it to the staging texture.\n        DrawCursorShape(CursorStagingTexture, CursorShapeInfo, CursorShapeBuffer, leftCut < 0 ? leftCut * -1 : 0, topCut < 0 ? topCut * -1 : 0, cursorWidth, cursorHeight);\n\n        //Copy back the cursor texture to the screen texture.\n        Device.ImmediateContext.CopySubresourceRegion(CursorStagingTexture, 0, null, screenTexture, 0, cursorLeft, cursorTop);\n\n        return true;\n    }\n\n    private void DrawCursorShape(Texture2D texture, OutputDuplicatePointerShapeInformation info, byte[] buffer, int leftCut, int topCut, int cursorWidth, int cursorHeight)\n    {\n        using (var surface = texture.QueryInterface<Surface>())\n        {\n            //Maps the surface, indicating that the CPU needs access to the data.\n            var rect = surface.Map(SharpDX.DXGI.MapFlags.Write);\n\n            //Cursors can be divided into 3 types:\n            switch (info.Type)\n            {\n                //Masked monochrome, a cursor which reacts with the background.\n                case (int)OutputDuplicatePointerShapeType.Monochrome:\n                    DrawMonochromeCursor(leftCut, topCut, cursorWidth, cursorHeight, rect, info.Pitch, buffer, info.Height);\n                    break;\n\n                //Color, a colored cursor which supports transparency.\n                case (int)OutputDuplicatePointerShapeType.Color:\n                    DrawColorCursor(leftCut, topCut, cursorWidth, cursorHeight, rect, info.Pitch, buffer);\n                    break;\n\n                //Masked color, a mix of both previous types.\n                case (int)OutputDuplicatePointerShapeType.MaskedColor:\n                    DrawMaskedColorCursor(leftCut, topCut, cursorWidth, cursorHeight, rect, info.Pitch, buffer);\n                    break;\n            }\n\n            surface.Unmap();\n        }\n    }\n\n    private void DrawMonochromeCursor(int offsetX, int offsetY, int width, int height, DataRectangle rect, int pitch, byte[] buffer, int actualHeight)\n    {\n        for (var row = offsetY; row < height; row++)\n        {\n            //128 in binary.\n            byte mask = 0x80;\n\n            //Simulate the offset, adjusting the mask.\n            for (var off = 0; off < offsetX; off++)\n            {\n                if (mask == 0x01)\n                    mask = 0x80;\n                else\n                    mask = (byte)(mask >> 1);\n            }\n\n            for (var col = offsetX; col < width; col++)\n            {\n                var pos = (row - offsetY) * rect.Pitch + (col - offsetX) * 4;\n                var and = (buffer[row * pitch + col / 8] & mask) == mask; //Mask is take from the first half of the cursor image.\n                var xor = (buffer[row * pitch + col / 8 + actualHeight * pitch] & mask) == mask; //Mask is taken from the second half of the cursor image, hence the \"+ height * pitch\".\n\n                //Reads current pixel and applies AND and XOR. (AND/XOR ? White : Black)\n                Marshal.WriteByte(rect.DataPointer, pos, (byte)((Marshal.ReadByte(rect.DataPointer, pos) & (and ? 255 : 0)) ^ (xor ? 255 : 0)));\n                Marshal.WriteByte(rect.DataPointer, pos + 1, (byte)((Marshal.ReadByte(rect.DataPointer, pos + 1) & (and ? 255 : 0)) ^ (xor ? 255 : 0)));\n                Marshal.WriteByte(rect.DataPointer, pos + 2, (byte)((Marshal.ReadByte(rect.DataPointer, pos + 2) & (and ? 255 : 0)) ^ (xor ? 255 : 0)));\n                Marshal.WriteByte(rect.DataPointer, pos + 3, (byte)((Marshal.ReadByte(rect.DataPointer, pos + 3) & 255) ^ 0));\n\n                //Shifts the mask around until it reaches 1, then resets it back to 128.\n                if (mask == 0x01)\n                    mask = 0x80;\n                else\n                    mask = (byte)(mask >> 1);\n            }\n        }\n    }\n\n    private void DrawColorCursor(int offsetX, int offsetY, int width, int height, DataRectangle rect, int pitch, byte[] buffer)\n    {\n        for (var row = offsetY; row < height; row++)\n        {\n            for (var col = offsetX; col < width; col++)\n            {\n                var surfaceIndex = (row - offsetY) * rect.Pitch + (col - offsetX) * 4;\n                var bufferIndex = row * pitch + col * 4;\n                var alpha = buffer[bufferIndex + 3] + 1;\n\n                if (alpha == 1)\n                    continue;\n\n                //Premultiplied alpha values.\n                var invAlpha = 256 - alpha;\n                alpha += 1;\n\n                Marshal.WriteByte(rect.DataPointer, surfaceIndex, (byte)((alpha * buffer[bufferIndex] + invAlpha * Marshal.ReadByte(rect.DataPointer, surfaceIndex)) >> 8));\n                Marshal.WriteByte(rect.DataPointer, surfaceIndex + 1, (byte)((alpha * buffer[bufferIndex + 1] + invAlpha * Marshal.ReadByte(rect.DataPointer, surfaceIndex + 1)) >> 8));\n                Marshal.WriteByte(rect.DataPointer, surfaceIndex + 2, (byte)((alpha * buffer[bufferIndex + 2] + invAlpha * Marshal.ReadByte(rect.DataPointer, surfaceIndex + 2)) >> 8));\n            }\n        }\n    }\n\n    private void DrawMaskedColorCursor(int offsetX, int offsetY, int width, int height, DataRectangle rect, int pitch, byte[] buffer)\n    {\n        //ImageUtil.ImageMethods.SavePixelArrayToFile(buffer, width, height, 4, System.IO.Path.GetFullPath(\".\\\\MaskedColor.png\"));\n\n        for (var row = offsetY; row < height; row++)\n        {\n            for (var col = offsetX; col < width; col++)\n            {\n                var surfaceIndex = (row - offsetY) * rect.Pitch + (col - offsetX) * 4;\n                var bufferIndex = row * pitch + col * 4;\n                var maskFlag = buffer[bufferIndex + 3];\n\n                //Just copies the pixel color.\n                if (maskFlag == 0)\n                {\n                    Marshal.WriteByte(rect.DataPointer, surfaceIndex, buffer[bufferIndex]);\n                    Marshal.WriteByte(rect.DataPointer, surfaceIndex + 1, buffer[bufferIndex + 1]);\n                    Marshal.WriteByte(rect.DataPointer, surfaceIndex + 2, buffer[bufferIndex + 2]);\n                    return;\n                }\n\n                //Applies the XOR operation with the current color.\n                Marshal.WriteByte(rect.DataPointer, surfaceIndex, (byte)(buffer[bufferIndex] ^ Marshal.ReadByte(rect.DataPointer, surfaceIndex)));\n                Marshal.WriteByte(rect.DataPointer, surfaceIndex + 1, (byte)(buffer[bufferIndex + 1] ^ Marshal.ReadByte(rect.DataPointer, surfaceIndex + 1)));\n                Marshal.WriteByte(rect.DataPointer, surfaceIndex + 2, (byte)(buffer[bufferIndex + 2] ^ Marshal.ReadByte(rect.DataPointer, surfaceIndex + 2)));\n            }\n        }\n    }\n\n    public override void Save(FrameInfo frame)\n    {\n        frame.Image?.Save(frame.Path);\n        frame.Image?.Dispose();\n        frame.Image = null;\n\n        Project.Frames.Add(frame);\n    }\n\n    public override async Task Stop()\n    {\n        if (!WasStarted)\n            return;\n\n        DisposeInternal();\n\n        await base.Stop();\n    }\n\n    internal void DisposeInternal()\n    {\n        Device.Dispose();\n\n        if (MajorCrashHappened)\n            return;\n\n        BackingTexture.Dispose();\n        StagingTexture.Dispose();\n        DuplicatedOutput.Dispose();\n\n        CursorStagingTexture?.Dispose();\n    }\n\n\n    [Obsolete]\n    private void FallbackCursorCapture(FrameInfo frame)\n    {\n        //if (_justStarted && (CursorShapeBuffer?.Length ?? 0) == 0)\n        {\n            //_justStarted = false;\n\n            //https://stackoverflow.com/a/6374151/1735672\n            //Bitmap struct, is used to get the cursor shape when SharpDX fails to do so.\n            var infoHeader = new BitmapInfoHeader();\n            infoHeader.biSize = (uint)Marshal.SizeOf(infoHeader);\n            infoHeader.biBitCount = 32;\n            infoHeader.biClrUsed = 0;\n            infoHeader.biClrImportant = 0;\n            infoHeader.biCompression = 0;\n            infoHeader.biHeight = -Height; //Negative, so the Y-axis will be positioned correctly.\n            infoHeader.biWidth = Width;\n            infoHeader.biPlanes = 1;\n\n            try\n            {\n                var cursorInfo = new CursorInfo();\n                cursorInfo.cbSize = Marshal.SizeOf(cursorInfo);\n\n                if (!User32.GetCursorInfo(out cursorInfo))\n                    return;\n\n                if (cursorInfo.flags == Native.Constants.CursorShowing)\n                {\n                    var hicon = User32.CopyIcon(cursorInfo.hCursor);\n\n                    if (hicon != IntPtr.Zero)\n                    {\n                        if (User32.GetIconInfo(hicon, out var iconInfo))\n                        {\n                            frame.CursorX = cursorInfo.ptScreenPos.X - Left;\n                            frame.CursorY = cursorInfo.ptScreenPos.Y - Top;\n\n                            var bitmap = new Bitmap();\n                            var hndl = GCHandle.Alloc(bitmap, GCHandleType.Pinned);\n                            var ptrToBitmap = hndl.AddrOfPinnedObject();\n                            Gdi32.GetObject(iconInfo.hbmColor, Marshal.SizeOf<Bitmap>(), ptrToBitmap);\n                            bitmap = Marshal.PtrToStructure<Bitmap>(ptrToBitmap);\n                            hndl.Free();\n\n                            //https://microsoft.public.vc.mfc.narkive.com/H1CZeqUk/how-can-i-get-bitmapinfo-object-from-bitmap-or-hbitmap\n                            infoHeader.biHeight = bitmap.bmHeight;\n                            infoHeader.biWidth = bitmap.bmWidth;\n                            infoHeader.biBitCount = (ushort)bitmap.bmBitsPixel;\n\n                            var w = (bitmap.bmWidth * bitmap.bmBitsPixel + 31) / 8;\n                            CursorShapeBuffer = new byte[w * bitmap.bmHeight];\n\n                            var windowDeviceContext = User32.GetWindowDC(IntPtr.Zero);\n                            var compatibleBitmap = Gdi32.CreateCompatibleBitmap(windowDeviceContext, Width, Height);\n\n                            Gdi32.GetDIBits(windowDeviceContext, compatibleBitmap, 0, (uint)infoHeader.biHeight, CursorShapeBuffer, ref infoHeader, DibColorModes.RgbColors);\n\n                            //CursorShapeInfo = new OutputDuplicatePointerShapeInformation();\n                            //CursorShapeInfo.Type = (int)OutputDuplicatePointerShapeType.Color;\n                            //CursorShapeInfo.Width = bitmap.bmWidth;\n                            //CursorShapeInfo.Height = bitmap.bmHeight;\n                            //CursorShapeInfo.Pitch = w;\n                            //CursorShapeInfo.HotSpot = new RawPoint(0, 0);\n\n                            //if (frame.CursorX > 0 && frame.CursorY > 0)\n                            //    Native.DrawIconEx(_compatibleDeviceContext, frame.CursorX - iconInfo.xHotspot, frame.CursorY - iconInfo.yHotspot, cursorInfo.hCursor, 0, 0, 0, IntPtr.Zero, 0x0003);\n\n                            //Native.SelectObject(CompatibleDeviceContext, OldBitmap);\n                            //Native.DeleteObject(compatibleBitmap);\n                            //Native.DeleteDC(CompatibleDeviceContext);\n                            //Native.ReleaseDC(IntPtr.Zero, windowDeviceContext);\n                        }\n\n                        Gdi32.DeleteObject(iconInfo.hbmColor);\n                        Gdi32.DeleteObject(iconInfo.hbmMask);\n                    }\n\n                    User32.DestroyIcon(hicon);\n                }\n\n                Gdi32.DeleteObject(cursorInfo.hCursor);\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"Impossible to get the cursor\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/ICapture.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing ScreenToGif.Model;\n\nnamespace ScreenToGif.Capture;\n\ninternal interface ICapture : IAsyncDisposable, IDisposable\n{\n    bool WasStarted { get; set; }\n    int FrameCount { get; set; }\n    int MinimumDelay { get; set; }\n    int Left { get; set; }\n    int Top { get; set; }\n    int Width { get; set; }\n    int Height { get; set; }\n    string DeviceName { get; set; }\n    ProjectInfo Project { get; set; }\n\n    Action<Exception> OnError {get;set;}\n\n    void Start(int delay, int left, int top, int width, int height, double dpi, ProjectInfo project);\n    void ResetConfiguration();\n    int Capture(FrameInfo frame);\n    Task<int> CaptureAsync(FrameInfo frame);\n    int CaptureWithCursor(FrameInfo frame);\n    Task<int> CaptureWithCursorAsync(FrameInfo frame);\n    int ManualCapture(FrameInfo frame, bool showCursor = false);\n    Task<int> ManualCaptureAsync(FrameInfo frame, bool showCursor = false);\n    void Save(FrameInfo info);\n    Task Stop();\n}"
  },
  {
    "path": "ScreenToGif/Capture/ImageCapture.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing Image = System.Drawing.Image;\n\nnamespace ScreenToGif.Capture;\n\ninternal class ImageCapture : BaseCapture\n{\n    #region Variables\n\n    private readonly IntPtr _desktopWindow = IntPtr.Zero;\n    protected IntPtr WindowDeviceContext;\n    protected IntPtr CompatibleDeviceContext;\n    protected IntPtr CompatibleBitmap;\n    private IntPtr _oldBitmap;\n\n    protected int CursorStep { get; set; }\n\n    private CopyPixelOperations PixelOperations { get; set; }\n\n    #endregion\n\n    public override void Start(int delay, int left, int top, int width, int height, double scale, ProjectInfo project)\n    {\n        base.Start(delay, left, top, width, height, scale, project);\n\n        #region Pointers\n\n        //http://winprog.org/tutorial/bitmaps.html\n        //_desktopWindow = User32.GetDesktopWindow();\n        WindowDeviceContext = User32.GetWindowDC(_desktopWindow);\n        CompatibleDeviceContext = Gdi32.CreateCompatibleDC(WindowDeviceContext);\n        CompatibleBitmap = Gdi32.CreateCompatibleBitmap(WindowDeviceContext, Width, Height);\n        _oldBitmap = Gdi32.SelectObject(CompatibleDeviceContext, CompatibleBitmap);\n\n        #endregion\n\n        var pixelOp = CopyPixelOperations.SourceCopy;\n\n        //If not in a remote desktop connection or if the improvement was disabled, capture layered windows too.\n        if (!System.Windows.Forms.SystemInformation.TerminalServerSession || !UserSettings.All.RemoteImprovement)\n            pixelOp |= CopyPixelOperations.CaptureBlt;\n\n        PixelOperations = pixelOp;\n    }\n\n\n    public override int Capture(FrameInfo frame)\n    {\n        try\n        {\n            //var success = Native.BitBlt(CompatibleDeviceContext, 0, 0, Width, Height, WindowDeviceContext, Left, Top, Native.CopyPixelOperation.SourceCopy | Native.CopyPixelOperation.CaptureBlt);\n            var success = Gdi32.StretchBlt(CompatibleDeviceContext, 0, 0, StartWidth, StartHeight, WindowDeviceContext, Left, Top, Width, Height, PixelOperations);\n\n            if (!success)\n                return FrameCount;\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = Image.FromHbitmap(CompatibleBitmap);\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n        }\n        catch (Exception)\n        {\n            //LogWriter.Log(ex, \"Impossible to get the screenshot of the screen\");\n        }\n\n        return FrameCount;\n    }\n\n    public override async Task<int> CaptureAsync(FrameInfo frame)\n    {\n        return await Task.Factory.StartNew(() => Capture(frame));\n    }\n\n    public override int CaptureWithCursor(FrameInfo frame)\n    {\n        try\n        {\n            //var success = Native.BitBlt(CompatibleDeviceContext, 0, 0, Width, Height, WindowDeviceContext, Left, Top, CopyPixelOperation.SourceCopy | CopyPixelOperation.CaptureBlt);\n            var success = Gdi32.StretchBlt(CompatibleDeviceContext, 0, 0, StartWidth, StartHeight, WindowDeviceContext, Left, Top, Width, Height, PixelOperations);\n\n            if (!success)\n                return FrameCount;\n\n            #region Cursor\n\n            try\n            {\n                var cursorInfo = new CursorInfo();\n                cursorInfo.cbSize = Marshal.SizeOf(cursorInfo);\n\n                if (User32.GetCursorInfo(out cursorInfo))\n                {\n                    if (cursorInfo.flags == Native.Constants.CursorShowing)\n                    {\n                        var hicon = User32.CopyIcon(cursorInfo.hCursor);\n\n                        if (hicon != IntPtr.Zero)\n                        {\n                            if (User32.GetIconInfo(hicon, out var iconInfo))\n                            {\n                                frame.CursorX = cursorInfo.ptScreenPos.X - Left;\n                                frame.CursorY = cursorInfo.ptScreenPos.Y - Top;\n\n                                //(int)(SystemParameters.CursorHeight * Scale)\n                                //(int)(SystemParameters.CursorHeight * Scale)\n\n                                var ok = User32.DrawIconEx(CompatibleDeviceContext, frame.CursorX - iconInfo.xHotspot, frame.CursorY - iconInfo.yHotspot, cursorInfo.hCursor, 0, 0, CursorStep, IntPtr.Zero, 0x0003);\n\n                                if (!ok)\n                                {\n                                    CursorStep = 0;\n                                    User32.DrawIconEx(CompatibleDeviceContext, frame.CursorX - iconInfo.xHotspot, frame.CursorY - iconInfo.yHotspot, cursorInfo.hCursor, 0, 0, CursorStep, IntPtr.Zero, 0x0003);\n                                }\n                                else\n                                    CursorStep++;\n                            }\n\n                            Gdi32.DeleteObject(iconInfo.hbmColor);\n                            Gdi32.DeleteObject(iconInfo.hbmMask);\n                        }\n\n                        User32.DestroyIcon(hicon);\n                    }\n\n                    Gdi32.DeleteObject(cursorInfo.hCursor);\n                }\n            }\n            catch (Exception)\n            {\n                //LogWriter.Log(e, \"Impossible to get the cursor\");\n            }\n\n            #endregion\n\n            //Set frame details.\n            FrameCount++;\n            frame.Path = $\"{Project.FullPath}{FrameCount}.png\";\n            frame.Delay = FrameRate.GetMilliseconds();\n            frame.Image = Image.FromHbitmap(CompatibleBitmap);\n\n            if (IsAcceptingFrames)\n                BlockingCollection.Add(frame);\n        }\n        catch (Exception)\n        {\n            //LogWriter.Log(ex, \"Impossible to get the screenshot of the screen\");\n        }\n\n        return FrameCount;\n    }\n\n    public override async Task<int> CaptureWithCursorAsync(FrameInfo frame)\n    {\n        return await Task.Factory.StartNew(() => CaptureWithCursor(frame));\n    }\n\n\n    public override void Save(FrameInfo frame)\n    {\n        frame.Image.Save(frame.Path);\n        frame.Image.Dispose();\n        frame.Image = null;\n\n        Project.Frames.Add(frame);\n    }\n\n    public override async Task Stop()\n    {\n        if (!WasStarted)\n            return;\n\n        await base.Stop();\n\n        try\n        {\n            Gdi32.SelectObject(CompatibleDeviceContext, _oldBitmap);\n            Gdi32.DeleteObject(CompatibleBitmap);\n            Gdi32.DeleteDC(CompatibleDeviceContext);\n            User32.ReleaseDC(_desktopWindow, WindowDeviceContext);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to stop and clean resources used by the recording.\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Capture/RegionSelectHelper.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif.Capture;\n\ninternal static class RegionSelectHelper\n{\n    internal class Selection\n    {\n        public Monitor Monitor { get; set; }\n            \n        public Rect Region { get; set; }\n\n        public Selection(Monitor monitor, Rect region)\n        {\n            Monitor = monitor;\n            Region = region;\n        }\n    }\n\n    #region Properties\n\n    private static TaskCompletionSource<Selection> _taskCompletionSource;\n\n    private static readonly List<RegionSelector> Selectors = new();\n\n    internal static bool IsSelecting => Selectors.Any(a => a.IsVisible && a.IsActive);\n\n    #endregion\n\n    internal static Task<Selection> Select(ModeType mode, Rect previousRegion, Monitor currentMonitor, bool quickSelection = false)\n    {\n        _taskCompletionSource = new TaskCompletionSource<Selection>();\n\n        Selectors.Clear();\n\n        var monitors = MonitorHelper.AllMonitorsGranular();\n\n        //If in quick screen selection mode and there's just one screen, select that one.\n        if (quickSelection && mode == ModeType.Fullscreen && monitors.Count == 1)\n            return Task.FromResult(new Selection(monitors.FirstOrDefault(), monitors[0].Bounds));\n\n        foreach (var monitor in monitors)\n        {\n            var selector = new RegionSelector();\n            selector.Select(monitor, mode, monitor.Handle == currentMonitor?.Handle ? previousRegion : Rect.Empty, RegionSelected, RegionChanged, RegionGotHover, RegionAborted);\n\n            Selectors.Add(selector);\n        }\n\n        //Return only when the region gets selected.\n        return _taskCompletionSource.Task;\n    }\n\n    internal static void Abort()\n    {\n        RegionAborted();\n    }\n\n\n    private static void RegionSelected(Monitor monitor, Rect region)\n    {\n        foreach (var selector in Selectors)\n            selector.CancelSelection();\n\n        _taskCompletionSource.SetResult(new Selection(monitor, region));\n    }\n\n    private static void RegionChanged(Monitor monitor)\n    {\n        //When one monitor gets the focus, the other ones should be cleaned.\n        foreach (var selector in Selectors.Where(w => w.Monitor.Handle != monitor.Handle))\n            selector.ClearSelection();\n    }\n\n    private static void RegionGotHover(Monitor monitor)\n    {\n        //When one monitor gets the focus, the other ones should be cleaned.\n        foreach (var selector in Selectors.Where(w => w.Monitor.Handle != monitor.Handle))\n            selector.ClearHoverEffects();\n    }\n\n    private static void RegionAborted()\n    {\n        foreach (var selector in Selectors)\n            selector.CancelSelection();\n\n        _taskCompletionSource.SetResult(new Selection(null, Rect.Empty));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Cloud/CloudFactory.cs",
    "content": "using System;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.Cloud;\n\npublic class CloudFactory\n{\n    public static IUploader CreateCloud(UploadDestinations service)\n    {\n        switch (service)\n        {\n            case UploadDestinations.Imgur:\n                return new Imgur();\n            case UploadDestinations.Yandex:\n                return new YandexDisk();\n        }\n\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Cloud/Imgur.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.Models.Upload.Imgur;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.UploadPresets.History;\nusing ScreenToGif.ViewModel.UploadPresets.Imgur;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif.Cloud;\n\npublic class Imgur : IUploader\n{\n    public async Task<IHistory> UploadFileAsync(IUploadPreset preset, string path, CancellationToken cancellationToken, IProgress<double> progressCallback = null)\n    {\n        if (preset is not ImgurPreset imgurPreset)\n            throw new Exception(\"Imgur preset is null.\");\n\n        var args = new Dictionary<string, string>();\n        var headers = new NameValueCollection();\n\n        if (!preset.IsAnonymous)\n        {\n            if (!await IsAuthorized(imgurPreset))\n                throw new UploadException(\"It was not possible to get the authorization to upload to Imgur.\");\n\n            headers.Add(\"Authorization\", \"Bearer \" + imgurPreset.AccessToken);\n\n            if (imgurPreset.UploadToAlbum)\n            {\n                var album = string.IsNullOrWhiteSpace(imgurPreset.SelectedAlbum) || imgurPreset.SelectedAlbum == \"♥♦♣♠\" ?\n                    await AskForAlbum(imgurPreset) : imgurPreset.SelectedAlbum;\n\n                if (!string.IsNullOrEmpty(album))\n                    args.Add(\"album\", album);\n            }\n        }\n        else\n        {\n            headers.Add(\"Authorization\", \"Client-ID \" + Secret.ImgurId);\n        }\n\n        if (cancellationToken.IsCancellationRequested)\n            return null;\n\n        return await Upload(imgurPreset, path, args, headers);\n    }\n\n\n    public static string GetAuthorizationAdress()\n    {\n        var args = new Dictionary<string, string>\n        {\n            {\"client_id\", Secret.ImgurId},\n            {\"response_type\", \"pin\"}\n        };\n\n        return WebHelper.AppendQuery(\"https://api.imgur.com/oauth2/authorize\", args);\n    }\n\n    public static async Task<bool> GetTokens(ImgurPreset preset)\n    {\n        var args = new Dictionary<string, string>\n        {\n            {\"client_id\", Secret.ImgurId},\n            {\"client_secret\", Secret.ImgurSecret},\n            {\"grant_type\", \"pin\"},\n            {\"pin\", preset.OAuthToken}\n        };\n\n        return await GetTokens(preset, args);\n    }\n\n    public static async Task<bool> RefreshToken(ImgurPreset preset)\n    {\n        var args = new Dictionary<string, string>\n        {\n            {\"refresh_token\", preset.RefreshToken},\n            {\"client_id\", Secret.ImgurId},\n            {\"client_secret\", Secret.ImgurSecret},\n            {\"grant_type\", \"refresh_token\"}\n        };\n\n        return await GetTokens(preset, args);\n    }\n\n    public static bool IsAuthorizationExpired(ImgurPreset preset)\n    {\n        return DateTime.UtcNow > preset.ExpiryDate;\n    }\n\n    public static async Task<bool> IsAuthorized(ImgurPreset preset)\n    {\n        if (string.IsNullOrWhiteSpace(preset.RefreshToken))\n            return false;\n\n        if (!IsAuthorizationExpired(preset))\n            return true;\n\n        return await RefreshToken(preset);\n    }\n\n    public static async Task<List<ImgurAlbum>> GetAlbums(ImgurPreset preset)\n    {\n        if (!await IsAuthorized(preset))\n            return null;\n\n        var headers = new NameValueCollection\n        {\n            { \"Authorization\", \"Bearer \" + preset.AccessToken }\n        };\n\n        var response = await WebHelper.Get(\"https://api.imgur.com/3/account/me/albums\", headers);\n\n        var responseAux = Serializer.Deserialize<ImgurAlbumsResponse>(response);\n\n        if (responseAux == null || (!responseAux.Success && responseAux.Status != 200))\n            return null;\n\n        var list = responseAux.Data.Select(s => new ImgurAlbum(s)).ToList();\n\n        preset.Albums = new ArrayList(list);\n\n        return list;\n    }\n\n    public static async Task<string> AskForAlbum(ImgurPreset preset)\n    {\n        var albums = await GetAlbums(preset);\n\n        return Application.Current.Dispatcher.Invoke<string>(() => PickAlbumDialog.OkCancel(albums));\n    }\n\n\n    private static async Task<bool> GetTokens(ImgurPreset preset, Dictionary<string, string> args)\n    {\n        var response = await WebHelper.PostMultipart(\"https://api.imgur.com/oauth2/token\", args);\n\n        if (string.IsNullOrEmpty(response))\n            return false;\n\n        var token = Serializer.Deserialize<OAuth2Token>(response);\n\n        if (string.IsNullOrEmpty(token?.AccessToken))\n            return false;\n\n        preset.AccessToken = token.AccessToken;\n        preset.RefreshToken = token.RefreshToken;\n        preset.ExpiryDate = DateTime.UtcNow + TimeSpan.FromSeconds(token.ExpiresIn - 10);\n        return true;\n    }\n\n    private async Task<History> Upload(ImgurPreset preset, string path, Dictionary<string, string> args, NameValueCollection headers)\n    {\n        await using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))\n        {\n            var result = await WebHelper.SendFile(\"https://api.imgur.com/3/image\", stream, path, args, headers, \"image\");\n            var response = Serializer.Deserialize<ImgurUploadResponse>(result);\n\n            //Error when sending video.\n            //{\"data\":{\"errorCode\":null,\"ticket\":\"7234557b\"},\"success\":true,\"status\":200}\n            //{\"data\":{\"error\":\"No image data was sent to the upload api\",\"request\":\"\\/3\\/image\",\"method\":\"POST\"},\"success\":false,\"status\":400}\n\n            if (response == null || (!response.Success && response.Status != 200))\n            {\n                LogWriter.Log(\"It was not possible to upload to Imgur\", result);\n\n                return new ImgurHistory\n                {\n                    PresetName = preset.Title,\n                    DateInUtc = DateTime.UtcNow,\n                    Result = 400,\n                    Message = response?.Status + \" - \" + (response?.Data?.Error ?? result)\n                };\n            }\n\n            if (string.IsNullOrEmpty(response.Data?.Link))\n            {\n                LogWriter.Log(\"It was not possible to upload to Imgur\", result);\n\n                return new ImgurHistory\n                {\n                    PresetName = preset.Title,\n                    DateInUtc = DateTime.UtcNow,\n                    Result = 400,\n                    Message = \"Upload failed. The link was not provided.\"\n                };\n            }\n\n            var history = new ImgurHistory\n            {\n                PresetName = preset.Title,\n                DateInUtc = DateTime.UtcNow,\n                Result = 200,\n                Id = response.Data.Id,\n                Link = $\"https://imgur.com/{response.Data.Id}\",\n                DeletionLink = $\"https://imgur.com/delete/{response.Data.DeleteHash}\",\n                Mp4 = response.Data.Mp4,\n                Webm = response.Data.Webm,\n                Gifv = response.Data.Gifv,\n                Gif = response.Data.Link\n            };\n\n            return history;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Cloud/YandexDisk.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.Models.Upload.YandexDisk;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.UploadPresets.History;\nusing ScreenToGif.ViewModel.UploadPresets.Yandex;\n\nnamespace ScreenToGif.Cloud;\n\npublic class YandexDisk : IUploader\n{\n    public async Task<IHistory> UploadFileAsync(IUploadPreset preset, string path, CancellationToken cancellationToken, IProgress<double> progressCallback = null)\n    {\n        if (string.IsNullOrEmpty(path)) \n            throw new ArgumentException(nameof(path));\n\n        var fileName = Path.GetFileName(path);\n\n        var link = await GetAsync<Link>(preset as YandexPreset, \"https://cloud-api.yandex.net/v1/disk/resources/upload?path=app:/\" + fileName + \"&overwrite=true\", cancellationToken);\n            \n        if (string.IsNullOrEmpty(link?.Href)) \n            throw new UploadException(\"Unknown error\");\n\n        await using (var fileSteram = new FileStream(path, FileMode.Open, FileAccess.Read))\n        {\n            await PutAsync(preset as YandexPreset, link.Href, new StreamContent(fileSteram), cancellationToken);\n        }\n\n        var downloadLink = await GetAsync<Link>(preset as YandexPreset, \"https://cloud-api.yandex.net/v1/disk/resources/download?path=app:/\" + fileName, cancellationToken);\n\n        var history = new History\n        {\n            Type = preset.Type,\n            PresetName = preset.Title,\n            DateInUtc = DateTime.UtcNow,\n            Result = 200,\n            Link = downloadLink.Href\n        };\n            \n        return history;\n    }\n\n    private async Task<T> GetAsync<T>(YandexPreset preset, string url, CancellationToken cancellationToken)\n    {\n        var handler = new HttpClientHandler\n        {\n            Proxy = WebHelper.GetProxy(),\n            PreAuthenticate = true,\n            UseDefaultCredentials = false,\n        };\n\n        using (var client = new HttpClient(handler))\n        {\n            var request = new HttpRequestMessage(HttpMethod.Get, url)\n            {\n                Headers =\n                {\n                    {HttpRequestHeader.Authorization.ToString(), \"OAuth \" + preset.OAuthToken}\n                }\n            };\n\n            string responseBody;\n            using (var response = await client.SendAsync(request, cancellationToken))\n            {\n                responseBody = await response.Content.ReadAsStringAsync(cancellationToken);\n            }\n                \n            var errorDescriptor = Serializer.Deserialize<ErrorDescriptor>(responseBody);\n\n            if (errorDescriptor.Error != null)\n                throw new UploadException($\"{errorDescriptor.Error}, {errorDescriptor.Message}, {errorDescriptor.Description}\");\n\n            return Serializer.Deserialize<T>(responseBody);\n        }\n    }\n\n    private async Task PutAsync(YandexPreset preset, string url, HttpContent content, CancellationToken cancellationToken)\n    {\n        var handler = new HttpClientHandler\n        {\n            Proxy = WebHelper.GetProxy(),\n            PreAuthenticate = true,\n            UseDefaultCredentials = false,\n        };\n\n        using (var client = new HttpClient(handler))\n        {\n            var request = new HttpRequestMessage(HttpMethod.Put, url)\n            {\n                Headers =\n                {\n                    {HttpRequestHeader.Authorization.ToString(), \"OAuth \" + preset.OAuthToken}\n                },\n                Content = content\n            };\n\n            using (await client.SendAsync(request, cancellationToken))\n            { }\n        }\n    }\n\n    public static string GetAuthorizationAdress()\n    {\n        var args = new Dictionary<string, string>\n        {\n            {\"client_id\", Secret.YandexId},\n            {\"response_type\", \"token\"}\n        };\n\n        return WebHelper.AppendQuery($\"https://oauth.yandex.{(UserSettings.All.LanguageCode.StartsWith(\"ru\") ? \"ru\" : \"com\")}/authorize\", args);\n    }\n\n    public static bool IsAuthorized(YandexPreset preset)\n    {\n        return !string.IsNullOrWhiteSpace(preset.OAuthToken);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/AdornerControl.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// A content control that allows an adorner for the content to\n/// be defined in XAML.\n/// </summary>\npublic class AdornedControl : ContentControl\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty IsAdornerVisibleProperty = DependencyProperty.Register(\"IsAdornerVisible\", typeof(bool), typeof(AdornedControl),\n        new FrameworkPropertyMetadata(IsAdornerVisible_PropertyChanged));\n\n    public static readonly DependencyProperty AdornerContentProperty = DependencyProperty.Register(\"AdornerContent\", typeof(FrameworkElement), typeof(AdornedControl),\n        new FrameworkPropertyMetadata(AdornerContent_PropertyChanged));\n\n    public static readonly DependencyProperty HorizontalAdornerPlacementProperty = DependencyProperty.Register(\"HorizontalAdornerPlacement\", typeof(AdornerPlacement), typeof(AdornedControl),\n        new FrameworkPropertyMetadata(AdornerPlacement.Outside));\n\n    public static readonly DependencyProperty VerticalAdornerPlacementProperty = DependencyProperty.Register(\"VerticalAdornerPlacement\", typeof(AdornerPlacement), typeof(AdornedControl),\n        new FrameworkPropertyMetadata(AdornerPlacement.Outside));\n\n    public static readonly DependencyProperty AdornerOffsetXProperty = DependencyProperty.Register(\"AdornerOffsetX\", typeof(double), typeof(AdornedControl));\n\n    public static readonly DependencyProperty AdornerOffsetYProperty = DependencyProperty.Register(\"AdornerOffsetY\", typeof(double), typeof(AdornedControl));\n\n    #endregion Dependency Properties\n\n    #region Properties\n\n    /// <summary>\n    /// Used in XAML to define the UI content of the adorner.\n    /// </summary>\n    public FrameworkElement AdornerContent\n    {\n        get => (FrameworkElement)GetValue(AdornerContentProperty);\n        set => SetValue(AdornerContentProperty, value);\n    }\n\n    /// <summary>\n    /// Specifies the horizontal placement of the adorner relative to the adorned control.\n    /// </summary>\n    public AdornerPlacement HorizontalAdornerPlacement\n    {\n        get => (AdornerPlacement)GetValue(HorizontalAdornerPlacementProperty);\n        set => SetValue(HorizontalAdornerPlacementProperty, value);\n    }\n\n    /// <summary>\n    /// Specifies the vertical placement of the adorner relative to the adorned control.\n    /// </summary>\n    public AdornerPlacement VerticalAdornerPlacement\n    {\n        get => (AdornerPlacement)GetValue(VerticalAdornerPlacementProperty);\n        set => SetValue(VerticalAdornerPlacementProperty, value);\n    }\n\n    /// <summary>\n    /// X offset of the adorner.\n    /// </summary>\n    public double AdornerOffsetX\n    {\n        get => (double)GetValue(AdornerOffsetXProperty);\n        set => SetValue(AdornerOffsetXProperty, value);\n    }\n\n    /// <summary>\n    /// Y offset of the adorner.\n    /// </summary>\n    public double AdornerOffsetY\n    {\n        get => (double)GetValue(AdornerOffsetYProperty);\n        set => SetValue(AdornerOffsetYProperty, value);\n    }\n\n    #endregion\n\n    #region Commands\n\n    public static readonly RoutedCommand ShowAdornerCommand = new RoutedCommand(\"ShowAdorner\", typeof(AdornedControl));\n\n    public static readonly RoutedCommand HideAdornerCommand = new RoutedCommand(\"HideAdorner\", typeof(AdornedControl));\n\n    #endregion Commands\n\n    static AdornedControl()\n    {\n        CommandManager.RegisterClassCommandBinding(typeof(AdornedControl), ShowAdornerCommandBinding);\n        CommandManager.RegisterClassCommandBinding(typeof(AdornedControl), HideAdornerCommandBinding);\n    }\n\n    public AdornedControl()\n    {\n        Focusable = false; // By default don't want 'AdornedControl' to be focusable.\n\n        DataContextChanged += AdornedControl_DataContextChanged;\n    }\n\n    /// <summary>\n    /// Event raised when the DataContext of the adorned control changes.\n    /// </summary>\n    private void AdornedControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)\n    {\n        UpdateAdornerDataContext();\n    }\n\n    /// <summary>\n    /// Update the DataContext of the adorner from the adorned control.\n    /// </summary>\n    private void UpdateAdornerDataContext()\n    {\n        if (AdornerContent != null)\n            AdornerContent.DataContext = DataContext;\n    }\n\n    /// <summary>\n    /// Show the adorner.\n    /// </summary>\n    public void ShowAdorner()\n    {\n        IsAdornerVisible = true;\n    }\n\n    /// <summary>\n    /// Hide the adorner.\n    /// </summary>\n    public void HideAdorner()\n    {\n        IsAdornerVisible = false;\n    }\n\n    /// <summary>\n    /// Shows or hides the adorner.\n    /// Set to 'true' to show the adorner or 'false' to hide the adorner.\n    /// </summary>\n    public bool IsAdornerVisible\n    {\n        get => (bool)GetValue(IsAdornerVisibleProperty);\n        set => SetValue(IsAdornerVisibleProperty, value);\n    }\n\n    #region Private Data Members\n\n    /// <summary>\n    /// Command bindings.\n    /// </summary>\n    private static readonly CommandBinding ShowAdornerCommandBinding = new CommandBinding(ShowAdornerCommand, ShowAdornerCommand_Executed);\n    private static readonly CommandBinding HideAdornerCommandBinding = new CommandBinding(HideAdornerCommand, HideAdornerCommand_Executed);\n\n    /// <summary>\n    /// Caches the adorner layer.\n    /// </summary>\n    private AdornerLayer _adornerLayer = null;\n\n    /// <summary>\n    /// The actual adorner create to contain our 'adorner UI content'.\n    /// </summary>\n    private FrameworkElementAdorner _adorner = null;\n\n    #endregion\n\n    #region Private/Internal Functions\n\n    /// <summary>\n    /// Event raised when the Show command is executed.\n    /// </summary>\n    private static void ShowAdornerCommand_Executed(object target, ExecutedRoutedEventArgs e)\n    {\n        var c = (AdornedControl)target;\n        c.ShowAdorner();\n    }\n\n    /// <summary>\n    /// Event raised when the Hide command is executed.\n    /// </summary>\n    private static void HideAdornerCommand_Executed(object target, ExecutedRoutedEventArgs e)\n    {\n        var c = (AdornedControl)target;\n        c.HideAdorner();\n    }\n\n    /// <summary>\n    /// Event raised when the value of IsAdornerVisible has changed.\n    /// </summary>\n    private static void IsAdornerVisible_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var c = (AdornedControl)o;\n        c.ShowOrHideAdornerInternal();\n    }\n\n    /// <summary>\n    /// Event raised when the value of AdornerContent has changed.\n    /// </summary>\n    private static void AdornerContent_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var c = (AdornedControl)o;\n        c.ShowOrHideAdornerInternal();\n    }\n\n    /// <summary>\n    /// Internal method to show or hide the adorner based on the value of IsAdornerVisible.\n    /// </summary>\n    private void ShowOrHideAdornerInternal()\n    {\n        if (IsAdornerVisible)\n            ShowAdornerInternal();\n        else\n            HideAdornerInternal();\n    }\n\n    /// <summary>\n    /// Internal method to show the adorner.\n    /// </summary>\n    private void ShowAdornerInternal()\n    {\n        if (_adorner != null)\n        {\n            // Already adorned.\n            return;\n        }\n\n        if (AdornerContent == null) return;\n\n        if (_adornerLayer == null)\n            _adornerLayer = AdornerLayer.GetAdornerLayer(this);\n\n        if (_adornerLayer != null)\n        {\n            _adorner = new FrameworkElementAdorner(AdornerContent, this, HorizontalAdornerPlacement, VerticalAdornerPlacement, AdornerOffsetX, AdornerOffsetY);\n            _adornerLayer.Add(_adorner);\n\n            UpdateAdornerDataContext();\n        }\n    }\n\n    /// <summary>\n    /// Internal method to hide the adorner.\n    /// </summary>\n    private void HideAdornerInternal()\n    {\n        if (_adornerLayer == null || _adorner == null)\n        {\n            // Not already adorned.\n            return;\n        }\n\n        _adornerLayer.Remove(_adorner);\n        _adorner.DisconnectChild();\n\n        _adorner = null;\n        _adornerLayer = null;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/AttachmentListBoxItem.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Interop;\nusing System.Windows.Media.Imaging;\n\nnamespace ScreenToGif.Controls;\n\npublic class AttachmentListBoxItem : ListBoxItem\n{\n    #region Dependency Property\n\n    public static readonly DependencyProperty ShortNameProperty = DependencyProperty.Register(\"ShortName\", typeof(string), typeof(AttachmentListBoxItem),\n        new FrameworkPropertyMetadata(\"Something\", FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty AttachmentProperty = DependencyProperty.Register(\"Attachment\", typeof(string), typeof(AttachmentListBoxItem),\n        new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure, AttachmentChangedCallback));\n\n    public static readonly DependencyProperty FileIconProperty = DependencyProperty.Register(\"FileIcon\", typeof(BitmapSource), typeof(AttachmentListBoxItem));\n\n    #endregion\n\n    #region Property Accessor\n\n    [Bindable(true), Category(\"Common\")]\n    public string ShortName\n    {\n        get => (string)GetValue(ShortNameProperty);\n        private set => SetValue(ShortNameProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public string Attachment\n    {\n        get => (string)GetValue(AttachmentProperty);\n        private set => SetValue(AttachmentProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public BitmapSource FileIcon\n    {\n        get => (BitmapSource)GetValue(FileIconProperty);\n        private set => SetValue(FileIconProperty, value);\n    }\n\n    #endregion\n\n    static AttachmentListBoxItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(AttachmentListBoxItem), new FrameworkPropertyMetadata(typeof(AttachmentListBoxItem)));\n    }\n\n    public AttachmentListBoxItem(string attachment)\n    {\n        Attachment = attachment;\n    }\n\n    private static void AttachmentChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var item = d as AttachmentListBoxItem;\n\n        if (item == null)\n            return;\n\n        if (!File.Exists(item.Attachment)) return;\n\n        item.ShortName = Path.GetFileName(item.Attachment);\n\n        using (var icon = Icon.ExtractAssociatedIcon(item.Attachment))\n        {\n            if (icon == null)\n                return;\n\n            item.FileIcon = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());\n        }\n\n        GC.Collect(1);\n\n        item.UpdateLayout();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/AwareTabItem.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class AwareTabItem : TabItem\n{\n    #region Dependency Property\n\n    public static readonly DependencyProperty IsDarkProperty = DependencyProperty.Register(nameof(IsDark), typeof(bool), typeof(AwareTabItem),\n        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender, OnPropertyChanged));\n\n    public static readonly DependencyProperty ShowBackgroundProperty = DependencyProperty.Register(nameof(ShowBackground), typeof(bool), typeof(AwareTabItem),\n        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender, ShowBackground_OnPropertyChanged));\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(AwareTabItem));\n\n    #endregion\n\n    #region Property accessors\n\n    /// <summary>\n    /// True if the titlebar color is dark.\n    /// </summary>\n    [Bindable(true), Category(\"Appearance\")]\n    public bool IsDark\n    {\n        get => (bool)GetValue(IsDarkProperty);\n        set => SetValue(IsDarkProperty, value);\n    }\n\n    /// <summary>\n    /// True if should display the background of the tab while not selected.\n    /// </summary>\n    [Bindable(true), Category(\"Appearance\")]\n    public bool ShowBackground\n    {\n        get => (bool)GetValue(ShowBackgroundProperty);\n        set => SetValue(ShowBackgroundProperty, value);\n    }\n\n    /// <summary>\n    /// The icon of the tab.\n    /// </summary>\n    [Description(\"The icon of the tab.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    #endregion\n\n    static AwareTabItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(AwareTabItem), new FrameworkPropertyMetadata(typeof(AwareTabItem)));\n    }\n\n    /// <summary>\n    /// This method is called when any of our dependency properties change.\n    /// </summary>\n    /// <param name=\"d\">Dependency Object</param>\n    /// <param name=\"e\">EventArgs</param>\n    private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((AwareTabItem)d).IsDark = (bool)e.NewValue;\n    }\n\n    /// <summary>\n    /// This method is called when any of our dependency properties change.\n    /// </summary>\n    /// <param name=\"d\">Dependency Object</param>\n    /// <param name=\"e\">EventArgs</param>\n    private static void ShowBackground_OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((AwareTabItem)d).ShowBackground = (bool)e.NewValue;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/BaseRecorder.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Input;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Model;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// All recorders are derived from this class.\n/// </summary>\npublic class BaseRecorder : Window\n{\n    public static readonly DependencyProperty StageProperty = DependencyProperty.Register(nameof(Stage), typeof(RecorderStages), typeof(BaseRecorder), new FrameworkPropertyMetadata(RecorderStages.Stopped));\n    public static readonly DependencyProperty FrameCountProperty = DependencyProperty.Register(nameof(FrameCount), typeof(int), typeof(BaseRecorder), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsRender));\n    public static readonly DependencyProperty HasImpreciseCaptureProperty = DependencyProperty.Register(nameof(HasImpreciseCapture), typeof(bool), typeof(BaseRecorder), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    /// <summary>\n    /// The actual stage of the recorder.\n    /// </summary>\n    public RecorderStages Stage\n    {\n        get => (RecorderStages)GetValue(StageProperty);\n        set\n        {\n            SetValue(StageProperty, value);\n            CommandManager.InvalidateRequerySuggested();\n        }\n    }\n\n    /// <summary>\n    /// The frame count of the current recording.\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"The frame count of the current recording.\")]\n    public int FrameCount\n    {\n        get => (int)GetValue(FrameCountProperty);\n        set => SetValue(FrameCountProperty, value);\n    }\n\n    /// <summary>\n    /// The frame count of the current recording.\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"True if the recorder is unable to capture with precision.\")]\n    public bool HasImpreciseCapture\n    {\n        get => (bool)GetValue(HasImpreciseCaptureProperty);\n        set => SetValue(HasImpreciseCaptureProperty, value);\n    }\n\n    /// <summary>\n    /// The project information about the current recording.\n    /// </summary>\n    internal ProjectInfo Project { get; set; }\n}"
  },
  {
    "path": "ScreenToGif/Controls/BaseScreenRecorder.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing ScreenToGif.Capture;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Controls;\n\npublic class BaseScreenRecorder : BaseRecorder\n{\n    #region Variables\n\n    /// <summary>\n    /// The token in use to control the execution of the capture.\n    /// </summary>\n    private CancellationTokenSource _captureToken;\n\n    /// <summary>\n    /// Indicates when the user is mouse-clicking.\n    /// </summary>\n    internal MouseButtons RecordClicked = MouseButtons.None;\n\n    /// <summary>\n    /// Deals with all screen capture methods.\n    /// </summary>\n    internal ICapture Capture;\n\n    /// <summary>\n    /// Lists of pressed keys.\n    /// </summary>\n    internal readonly List<IKeyGesture> KeyList = new();\n\n    /// <summary>\n    /// Timer responsible for the forced clean up of the objects in memory.\n    /// </summary>\n    internal readonly System.Timers.Timer GarbageTimer = new System.Timers.Timer();\n\n    #endregion\n\n\n    public BaseScreenRecorder()\n    {\n        GarbageTimer.Interval = 3000;\n        GarbageTimer.Elapsed += GarbageTimer_Tick;\n    }\n\n\n    private void GarbageTimer_Tick(object sender, EventArgs e)\n    {\n        GC.Collect(2);\n    }\n\n\n    internal bool HasFixedDelay()\n    {\n        return UserSettings.All.CaptureFrequency != CaptureFrequencies.PerSecond || UserSettings.All.FixedFrameRate;\n    }\n\n    internal int GetFixedDelay()\n    {\n        switch (UserSettings.All.CaptureFrequency)\n        {\n            case CaptureFrequencies.Manual:\n                return UserSettings.All.PlaybackDelayManual;\n            case CaptureFrequencies.Interaction:\n                return UserSettings.All.PlaybackDelayInteraction;\n            case CaptureFrequencies.PerMinute:\n                return UserSettings.All.PlaybackDelayMinute;\n            case CaptureFrequencies.PerHour:\n                return UserSettings.All.PlaybackDelayHour;\n            default: //When the capture is 'PerSecond', the fixed delay is set to use the current framerate.\n                return 1000 / UserSettings.All.LatestFps;\n        }\n    }\n\n    internal int GetTriggerDelay()\n    {\n        switch (UserSettings.All.CaptureFrequency)\n        {\n            case CaptureFrequencies.Interaction:\n                return UserSettings.All.TriggerDelayInteraction;\n            case CaptureFrequencies.Manual:\n                return UserSettings.All.TriggerDelayManual;\n            default:\n                return 0;\n        }\n    }\n\n    internal int GetCaptureInterval()\n    {\n        switch (UserSettings.All.CaptureFrequency)\n        {\n            case CaptureFrequencies.PerHour: //15 frames per hour = 240,000 ms (240 sec, 4 min).\n                return (1000 * 60 * 60) / UserSettings.All.LatestFps;\n\n            case CaptureFrequencies.PerMinute: //15 frames per minute = 4,000 ms (4 sec).\n                return (1000 * 60) / UserSettings.All.LatestFps;\n\n            default: //PerSecond. 15 frames per second = 66 ms.\n                return 1000 / UserSettings.All.LatestFps;\n        }\n    }\n\n    internal ICapture GetDirectCapture()\n    {\n        if (UserSettings.All.OnlyCaptureChanges)\n            return UserSettings.All.UseMemoryCache ? (ICapture)new DirectChangedCachedCapture() : new DirectChangedImageCapture();\n\n        return UserSettings.All.UseMemoryCache ? new DirectCachedCapture() : new DirectImageCapture();\n    }\n\n\n    internal virtual void StartCapture()\n    {\n        FrameRate.Start(HasFixedDelay(), GetFixedDelay());\n        HasImpreciseCapture = false;\n\n        if (UserSettings.All.ForceGarbageCollection)\n            GarbageTimer.Start();\n\n        lock (UserSettings.Lock)\n        {\n            //Starts the capture.\n            _captureToken = new CancellationTokenSource();\n\n            Task.Run(() => PrepareCaptureLoop(GetCaptureInterval()), _captureToken.Token);\n        }\n    }\n\n    internal virtual void PauseCapture()\n    {\n        FrameRate.Stop();\n\n        StopInternalCapture();\n    }\n\n    internal virtual async Task StopCapture()\n    {\n        FrameRate.Stop();\n\n        StopInternalCapture();\n\n        if (Capture != null)\n            await Capture.Stop();\n\n        GarbageTimer.Stop();\n    }\n\n    private void StopInternalCapture()\n    {\n        if (_captureToken == null)\n            return;\n\n        _captureToken.Cancel();\n        _captureToken.Dispose();\n        _captureToken = null;\n    }\n\n    private void PrepareCaptureLoop(int interval)\n    {\n        using (var resolution = new TimerResolution(1))\n        {\n            if (!resolution.SuccessfullySetTargetResolution)\n            {\n                LogWriter.Log($\"Imprecise timer resolution... Target: {resolution.TargetResolution}, Current: {resolution.CurrentResolution}\");\n                Dispatcher.Invoke(() => HasImpreciseCapture = true);\n            }\n\n            if (UserSettings.All.ShowCursor)\n                CaptureWithCursor(interval);\n            else\n                CaptureWithoutCursor(interval);\n\n            Dispatcher.Invoke(() => HasImpreciseCapture = false);\n        }\n    }\n\n    private void CaptureWithCursor(int interval)\n    {\n        var sw = new Stopwatch();\n\n        while (_captureToken != null && !_captureToken.IsCancellationRequested)\n        {\n            sw.Restart();\n\n            //Capture frame.\n            var frame = new FrameInfo(RecordClicked, KeyList);\n            KeyList.Clear();\n\n            var frameCount = Capture.CaptureWithCursor(frame);\n            Dispatcher.Invoke(() => FrameCount = frameCount);\n\n            //If behind wait time, wait before capturing new frame.\n            if (sw.ElapsedMilliseconds >= interval)\n                continue;\n\n            while (sw.Elapsed.TotalMilliseconds < interval)\n                Thread.Sleep(1);\n\n            //SpinWait.SpinUntil(() => sw.ElapsedMilliseconds >= interval);\n        }\n\n        sw.Stop();\n    }\n\n    private void CaptureWithoutCursor(int interval)\n    {\n        var sw = new Stopwatch();\n\n        while (_captureToken != null && !_captureToken.IsCancellationRequested)\n        {\n            sw.Restart();\n\n            //Capture frame.\n            var frame = new FrameInfo(RecordClicked, KeyList);\n            KeyList.Clear();\n\n            var frameCount = Capture.Capture(frame);\n            Dispatcher.Invoke(() => FrameCount = frameCount);\n\n            //If behind wait time, wait before capturing new frame.\n            if (sw.ElapsedMilliseconds >= interval)\n                continue;\n\n            while (sw.Elapsed.TotalMilliseconds < interval)\n                Thread.Sleep(1);\n\n            //SpinWait.SpinUntil(() => sw.ElapsedMilliseconds >= interval);\n        }\n\n        sw.Stop();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/BaseWindow.cs",
    "content": "using System;\nusing System.Windows;\n\nnamespace ScreenToGif.Controls;\n\npublic class BaseWindow : Window\n{\n    public DateTime CreationIn { get; set; }\n    public DateTime NonMinimizedIn { get; set; }\n    public DateTime MinimizedIn { get; set; }\n\n    public BaseWindow()\n    {\n        NonMinimizedIn = CreationIn = DateTime.Now;\n    }\n\n    protected override void OnStateChanged(EventArgs e)\n    {\n        if (WindowState != WindowState.Minimized)\n            NonMinimizedIn = DateTime.Now;\n        else\n            MinimizedIn = DateTime.Now;\n\n        base.OnStateChanged(e);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/Card.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Controls;\n\npublic class Card : Button\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(Card));\n\n    public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register(nameof(Header), typeof(string), typeof(Card));\n\n    public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(nameof(Description), typeof(string), typeof(Card));\n\n    public static readonly DependencyProperty StatusProperty = DependencyProperty.Register(nameof(Status), typeof(ExtrasStatus), typeof(Card),\n        new PropertyMetadata(ExtrasStatus.Available));\n\n    #endregion\n\n    #region Property Accessors\n\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetValue(IconProperty, value);\n    }\n\n    public string Header\n    {\n        get => (string)GetValue(HeaderProperty);\n        set => SetValue(HeaderProperty, value);\n    }\n\n    public string Description\n    {\n        get => (string)GetValue(DescriptionProperty);\n        set => SetValue(DescriptionProperty, value);\n    }\n\n    public ExtrasStatus Status\n    {\n        get => (ExtrasStatus)GetValue(StatusProperty);\n        set => SetValue(StatusProperty, value);\n    }\n\n    #endregion\n\n    static Card()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(Card), new FrameworkPropertyMetadata(typeof(Card)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/CircularProgressBar.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\n\nnamespace ScreenToGif.Controls;\n\ninternal class CircularProgressBar : ProgressBar\n{\n    #region Variables and properties\n\n    private Path _pathRoot;\n    private PathFigure _pathFigure;\n    private ArcSegment _arcSegment;\n\n    public static readonly DependencyProperty PercentageProperty = DependencyProperty.Register(nameof(Percentage), typeof(double), typeof(CircularProgressBar), new PropertyMetadata(OnPercentageChanged));\n    public static readonly DependencyProperty StrokeThicknessProperty = DependencyProperty.Register(nameof(StrokeThickness), typeof(double), typeof(CircularProgressBar), new PropertyMetadata(5D, OnPropertyChanged));\n    public static readonly DependencyProperty SegmentColorProperty = DependencyProperty.Register(nameof(SegmentColor), typeof(Brush), typeof(CircularProgressBar), new PropertyMetadata(Brushes.Red));\n    public static readonly DependencyProperty RadiusProperty = DependencyProperty.Register(nameof(Radius), typeof(double), typeof(CircularProgressBar), new PropertyMetadata(25D, OnPropertyChanged));\n    public static readonly DependencyProperty AngleProperty = DependencyProperty.Register(nameof(Angle), typeof(double), typeof(CircularProgressBar), new PropertyMetadata(120D, OnPropertyChanged));\n    public static readonly DependencyProperty IsInvertedProperty = DependencyProperty.Register(nameof(IsInverted), typeof(bool), typeof(CircularProgressBar), new PropertyMetadata(false, OnPropertyChanged));\n\n    public double Radius\n    {\n        get => (double)GetValue(RadiusProperty);\n        set => SetValue(RadiusProperty, value);\n    }\n\n    public Brush SegmentColor\n    {\n        get => (Brush)GetValue(SegmentColorProperty);\n        set => SetValue(SegmentColorProperty, value);\n    }\n\n    public double StrokeThickness\n    {\n        get => (double)GetValue(StrokeThicknessProperty);\n        set => SetValue(StrokeThicknessProperty, value);\n    }\n\n    public double Percentage\n    {\n        get => (double)GetValue(PercentageProperty);\n        set => SetValue(PercentageProperty, value);\n    }\n\n    public double Angle\n    {\n        get => (double)GetValue(AngleProperty);\n        set => SetValue(AngleProperty, value);\n    }\n\n    public bool IsInverted\n    {\n        get => (bool)GetValue(IsInvertedProperty);\n        set => SetValue(IsInvertedProperty, value);\n    }\n\n    #endregion\n\n    static CircularProgressBar()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(CircularProgressBar), new FrameworkPropertyMetadata(typeof(CircularProgressBar)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        ValueChanged += CircularProgressBar_ValueChanged;\n\n        _pathRoot = Template.FindName(\"PathRoot\", this) as Path;\n        _pathFigure = Template.FindName(\"PathFigure\", this) as PathFigure;\n        _arcSegment = Template.FindName(\"ArcSegment\", this) as ArcSegment;\n\n        if (Math.Abs(Percentage) < 0.001)\n        {\n            if (IsInverted)\n                Percentage = Math.Abs(100F * (Value - 1) / (Maximum - Minimum) - 100F);\n            else\n                Percentage = (100F * Value) / (Maximum - Minimum);\n        }\n\n        Angle = (Percentage * 360) / 100;\n        RenderArc();\n    }\n\n    #region Events\n\n    private void CircularProgressBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)\n    {\n        if (IsInverted)\n        {\n            Percentage = Math.Abs((100F * (Value - 1)) / (Maximum - Minimum) - 100F);\n            return;\n        }\n\n        Percentage = (100F * Value) / (Maximum - Minimum);\n    }\n\n    private static void OnPercentageChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)\n    {\n        if (sender is CircularProgressBar circle)\n            circle.Angle = (circle.Percentage * 360) / 100;\n    }\n\n    private static void OnPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)\n    {\n        var circle = sender as CircularProgressBar;\n        circle?.RenderArc();\n    }\n\n    #endregion\n\n    #region Methods\n\n    public void RenderArc()\n    {\n        var startPoint = new Point(Radius, 0);\n        var endPoint = ComputeCartesianCoordinate(Angle, Radius);\n        endPoint.X += Radius;\n        endPoint.Y += Radius;\n\n        if (_pathRoot != null)\n        {\n            _pathRoot.Width = Radius * 2 + StrokeThickness;\n            _pathRoot.Height = Radius * 2 + StrokeThickness;\n            _pathRoot.Margin = new Thickness(StrokeThickness, StrokeThickness, 0, 0);\n        }\n\n        var largeArc = Angle > 180.0;\n\n        var outerArcSize = new Size(Radius, Radius);\n\n        if (_pathFigure != null)\n            _pathFigure.StartPoint = startPoint;\n\n        if (Math.Abs(startPoint.X - Math.Round(endPoint.X)) < 0.001 && Math.Abs(startPoint.Y - Math.Round(endPoint.Y)) < 0.001)\n            endPoint.X -= 0.01;\n\n        if (_arcSegment != null)\n        {\n            _arcSegment.Point = endPoint;\n            _arcSegment.Size = outerArcSize;\n            _arcSegment.IsLargeArc = largeArc;\n        }\n    }\n\n    private Point ComputeCartesianCoordinate(double angle, double radius)\n    {\n        //Convert to radians.\n        var angleRad = (Math.PI / 180.0) * (angle - 90);\n\n        var x = radius * Math.Cos(angleRad);\n        var y = radius * Math.Sin(angleRad);\n\n        return new Point(x, y);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/ColorBox.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Media;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif.Controls;\n\npublic class ColorBox : ButtonBase\n{\n    #region Properties\n\n    public static readonly DependencyProperty SelectedColorProperty = DependencyProperty.Register(nameof(SelectedColor), typeof(Color), typeof(ColorBox), new PropertyMetadata(default(Color), SelectedColor_Changed));\n    public static readonly DependencyProperty SelectedBrushProperty = DependencyProperty.Register(nameof(SelectedBrush), typeof(SolidColorBrush), typeof(ColorBox), new PropertyMetadata(default(SolidColorBrush)));\n    public static readonly DependencyProperty AllowTransparencyProperty = DependencyProperty.Register(nameof(AllowTransparency), typeof(bool), typeof(ColorBox), new PropertyMetadata(true));\n    public static readonly DependencyProperty IgnoreEventProperty = DependencyProperty.Register(nameof(IgnoreEvent), typeof(bool), typeof(ColorBox), new PropertyMetadata(false));\n\n    public Color SelectedColor\n    {\n        get => (Color) GetValue(SelectedColorProperty);\n        set => SetValue(SelectedColorProperty, value);\n    }\n\n    public SolidColorBrush SelectedBrush\n    {\n        get => (SolidColorBrush)GetValue(SelectedBrushProperty);\n        set => SetValue(SelectedBrushProperty, value);\n    }\n\n    public bool AllowTransparency\n    {\n        get => (bool)GetValue(AllowTransparencyProperty);\n        set => SetValue(AllowTransparencyProperty, value);\n    }\n\n    public bool IgnoreEvent\n    {\n        get => (bool)GetValue(IgnoreEventProperty);\n        set => SetValue(IgnoreEventProperty, value);\n    }\n\n    #endregion\n\n    static ColorBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorBox), new FrameworkPropertyMetadata(typeof(ColorBox)));\n    }\n\n    protected override void OnClick()\n    {\n        SelectColor();\n\n        base.OnClick();\n    }\n\n    private void SelectColor()\n    {\n        var colorPicker = new ColorSelector(SelectedColor, AllowTransparency);\n        var result = colorPicker.ShowDialog();\n\n        if (result.HasValue && result.Value)\n            SelectedColor = colorPicker.SelectedColor;\n    }\n\n    private static void SelectedColor_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is ColorBox box))\n            return;\n\n        box.SelectedBrush = new SolidColorBrush(box.SelectedColor);\n        box.RaiseColorChangedEvent();\n    }\n\n    #region Custom Events\n\n    public static readonly RoutedEvent ColorChangedEvent = EventManager.RegisterRoutedEvent(nameof(ColorChanged), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ColorBox));\n\n    public event RoutedEventHandler ColorChanged\n    {\n        add => AddHandler(ColorChangedEvent, value);\n        remove => RemoveHandler(ColorChangedEvent, value);\n    }\n\n    public void RaiseColorChangedEvent()\n    {\n        if (ColorChangedEvent == null || IgnoreEvent)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(ColorChangedEvent));\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/CroppingAdorner.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shapes;\n\nusing Point = System.Drawing.Point;\n\nnamespace ScreenToGif.Controls;\n\npublic class CroppingAdorner : Adorner\n{\n    #region Private variables\n\n    /// <summary>\n    /// The size of the Thumb in pixels.\n    /// </summary>\n    private const double ThumbWidth = 10;\n\n    /// <summary>\n    /// Rectangle Shape, visual aid for the cropping selection.\n    /// </summary>\n    private readonly PuncturedRect _cropMask;\n\n    /// <summary>\n    /// Canvas that holds the Thumb collection.\n    /// </summary>\n    private readonly Canvas _thumbCanvas;\n\n    /// <summary>\n    /// Corner Thumbs used to change the crop selection.\n    /// </summary>\n    private readonly Thumb _thumbTopLeft, _thumbTopRight, _thumbBottomLeft,\n        _thumbBottomRight, _thumbTop, _thumbLeft, _thumbBottom, _thumbRight, _thumbCenter;\n\n    /// <summary>\n    /// Stores and manages the adorner's visual children.\n    /// </summary>\n    private readonly VisualCollection _visualCollection;\n\n    /// <summary>\n    /// Screen DPI.\n    /// </summary>\n    private static readonly double DpiX, DpiY;\n\n    #endregion\n\n    #region Routed Events\n\n    public static readonly RoutedEvent CropChangedEvent = EventManager.RegisterRoutedEvent(\n        \"CropChanged\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CroppingAdorner));\n\n    public event RoutedEventHandler CropChanged\n    {\n        add => AddHandler(CropChangedEvent, value);\n        remove => RemoveHandler(CropChangedEvent, value);\n    }\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static DependencyProperty FillProperty = Shape.FillProperty.AddOwner(typeof(CroppingAdorner),\n        new FrameworkPropertyMetadata(new SolidColorBrush(Color.FromArgb(110, 0, 0, 0)), FillPropChanged));\n\n    public static readonly DependencyProperty ClipRectangleProperty = DependencyProperty.Register(\"ClipRectangle\", typeof(Rect), typeof(CroppingAdorner),\n        new FrameworkPropertyMetadata(new Rect(0, 0, 0, 0), ClipRectanglePropertyChanged));\n\n    public Brush Fill\n    {\n        get => (Brush)GetValue(FillProperty);\n        set => SetValue(FillProperty, value);\n    }\n\n    public Rect ClipRectangle\n    {\n        get => _cropMask.Interior;\n        set => SetValue(ClipRectangleProperty, value);\n    }\n\n    private static void FillPropChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is CroppingAdorner crp)\n            crp._cropMask.Fill = (Brush) e.NewValue;\n    }\n\n    private static void ClipRectanglePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is CroppingAdorner crp))\n            return;\n\n        crp._cropMask.Interior = (Rect)e.NewValue;\n        crp.SetThumbs(crp._cropMask.Interior);\n        crp.RaiseEvent(new RoutedEventArgs(CropChangedEvent, crp));\n    }\n\n    #endregion\n\n    #region Constructor\n\n    static CroppingAdorner()\n    {\n        using (var g = System.Drawing.Graphics.FromHwnd((IntPtr)0))\n        {\n            DpiX = g.DpiX;\n            DpiY = g.DpiY;\n        }\n    }\n\n    public CroppingAdorner(UIElement adornedElement, Rect rcInit)\n        : base(adornedElement)\n    {\n        _cropMask = new PuncturedRect\n        {\n            IsHitTestVisible = false,\n            Interior = rcInit,\n            Fill = Fill,\n            Focusable = true\n        };\n\n        _thumbCanvas = new Canvas\n        {\n            HorizontalAlignment = HorizontalAlignment.Stretch,\n            VerticalAlignment = VerticalAlignment.Stretch\n        };\n\n        _visualCollection = new VisualCollection(this) { _cropMask, _thumbCanvas };\n\n        BuildCorner(ref _thumbTop, Cursors.SizeNS);\n        BuildCorner(ref _thumbBottom, Cursors.SizeNS);\n        BuildCorner(ref _thumbLeft, Cursors.SizeWE);\n        BuildCorner(ref _thumbRight, Cursors.SizeWE);\n        BuildCorner(ref _thumbTopLeft, Cursors.SizeNWSE);\n        BuildCorner(ref _thumbTopRight, Cursors.SizeNESW);\n        BuildCorner(ref _thumbBottomLeft, Cursors.SizeNESW);\n        BuildCorner(ref _thumbBottomRight, Cursors.SizeNWSE);\n        BuildCenter(ref _thumbCenter);\n\n        _cropMask.PreviewKeyDown += CropMask_PreviewKeyDown;\n\n        //Cropping handlers.\n        _thumbBottomLeft.DragDelta += HandleBottomLeft;\n        _thumbBottomRight.DragDelta += HandleBottomRight;\n        _thumbTopLeft.DragDelta += HandleTopLeft;\n        _thumbTopRight.DragDelta += HandleTopRight;\n        _thumbTop.DragDelta += HandleTop;\n        _thumbBottom.DragDelta += HandleBottom;\n        _thumbRight.DragDelta += HandleRight;\n        _thumbLeft.DragDelta += HandleLeft;\n        _thumbCenter.DragDelta += HandleCenter;\n\n        //Clipping interior should be within the bounds of the adorned element.\n        if (adornedElement is FrameworkElement element)\n            element.SizeChanged += AdornedElement_SizeChanged;\n    }\n\n    private void CropMask_PreviewKeyDown(object sender, KeyEventArgs e)\n    {\n        //Control + Shift: Expand both ways.\n        if ((Keyboard.Modifiers & ModifierKeys.Control) != 0 && (Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n        {\n            switch (e.Key)\n            {\n                case Key.Up:\n                    HandleBottom(_thumbCenter, new DragDeltaEventArgs(0, 1));\n                    HandleTop(_thumbCenter, new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleBottom(_thumbCenter, new DragDeltaEventArgs(0, -1));\n                    HandleTop(_thumbCenter, new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleRight(_thumbCenter, new DragDeltaEventArgs(-1, 0));\n                    HandleLeft(_thumbCenter, new DragDeltaEventArgs(1, 0));\n                    break;\n                case Key.Right:\n                    HandleRight(_thumbCenter, new DragDeltaEventArgs(1, 0));\n                    HandleLeft(_thumbCenter, new DragDeltaEventArgs(-1, 0));\n                    break;\n            }\n\n            return;\n        }\n\n        //If the Shift key is pressed, the sizing mode is enabled (bottom right).\n        if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n        {\n            switch (e.Key)\n            {\n                case Key.Up:\n                    HandleBottom(_thumbCenter, new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleBottom(_thumbCenter, new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleRight(_thumbCenter, new DragDeltaEventArgs(-1, 0));\n                    break;\n                case Key.Right:\n                    HandleRight(_thumbCenter, new DragDeltaEventArgs(1, 0));\n                    break;\n            }\n\n            return;\n        }\n\n        //If the Control key is pressed, the sizing mode is enabled (top left).\n        if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)\n        {\n            switch (e.Key)\n            {\n                case Key.Up:\n                    HandleTop(_thumbCenter, new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleTop(_thumbCenter, new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleLeft(_thumbCenter, new DragDeltaEventArgs(-1, 0));\n                    break;\n                case Key.Right:\n                    HandleLeft(_thumbCenter, new DragDeltaEventArgs(1, 0));\n                    break;\n            }\n\n            return;\n        }\n\n        //If no other key is pressed, the movement mode is enabled.\n        switch (e.Key)\n        {\n            case Key.Up:\n                HandleCenter(_thumbCenter, new DragDeltaEventArgs(0, -1));\n                break;\n            case Key.Down:\n                HandleCenter(_thumbCenter, new DragDeltaEventArgs(0, 1));\n                break;\n            case Key.Left:\n                HandleCenter(_thumbCenter, new DragDeltaEventArgs(-1, 0));\n                break;\n            case Key.Right:\n                HandleCenter(_thumbCenter, new DragDeltaEventArgs(1, 0));\n                break;\n        }\n    }\n\n    #endregion\n\n    #region Thumb handlers\n\n    private void HandleThumb(double drcL, double drcT, double drcW, double drcH, double dx, double dy)\n    {\n        var interior = _cropMask.Interior;\n\n        if (interior.Width + drcW * dx < 0)\n            dx = -interior.Width / drcW;\n\n        if (interior.Height + drcH * dy < 0)\n            dy = -interior.Height / drcH;\n\n        interior = new Rect(interior.Left + drcL * dx,\n            interior.Top + drcT * dy,\n            interior.Width + drcW * dx,\n            interior.Height + drcH * dy);\n\n        //Minimum of 10x10.\n        if (interior.Width < 10)\n        {\n            if (interior.X + interior.Width > _cropMask.Exterior.Width)\n                interior.X = interior.Right - interior.Width;\n            else\n                interior.Width = 10;\n        }\n\n        if (interior.Height < 10)\n        {\n            if (interior.Y + interior.Height > _cropMask.Exterior.Height)\n                interior.Y = interior.Bottom - interior.Height;\n            else\n                interior.Height = 10;\n        }\n\n        _cropMask.Interior = interior;\n\n        SetThumbs(_cropMask.Interior);\n        RaiseEvent(new RoutedEventArgs(CropChangedEvent, this));\n\n        Keyboard.Focus(_cropMask);\n    }\n\n    //Cropping from the bottom-left.\n    private void HandleBottomLeft(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(1, 0, -1, 1, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the bottom-right.\n    private void HandleBottomRight(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(0, 0, 1, 1, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the top-right.\n    private void HandleTopRight(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(0, 1, 1, -1, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the top-left.\n    private void HandleTopLeft(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(1, 1, -1, -1, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the top.\n    private void HandleTop(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(0, 1, 0, -1, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the left.\n    private void HandleLeft(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(1, 0, -1, 0, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the right.\n    private void HandleRight(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(0, 0, 1, 0, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Cropping from the bottom.\n    private void HandleBottom(object sender, DragDeltaEventArgs args)\n    {\n        if (sender is Thumb)\n            HandleThumb(0, 0, 0, 1, args.HorizontalChange, args.VerticalChange);\n    }\n\n    //Dragging the cropping selection.\n    private void HandleCenter(object sender, DragDeltaEventArgs args)\n    {\n        if (!(sender is Thumb))\n            return;\n\n        //Creates a new Rect based on the drag.\n        var interior = new Rect(_cropMask.Interior.Left + args.HorizontalChange,\n            _cropMask.Interior.Top + args.VerticalChange,\n            _cropMask.Interior.Width, _cropMask.Interior.Height);\n\n        #region Limit the drag to inside the bounds\n\n        if (interior.Left < 0)\n            interior.X = 0;\n\n        if (interior.Top < 0)\n            interior.Y = 0;\n\n        if (interior.Right > _thumbCanvas.ActualWidth)\n            interior.X = _thumbCanvas.ActualWidth - interior.Width;\n\n        if (interior.Bottom > _thumbCanvas.ActualHeight)\n            interior.Y = _thumbCanvas.ActualHeight - interior.Height;\n\n        #endregion\n\n        _cropMask.Interior = interior;\n\n        SetThumbs(_cropMask.Interior);\n        RaiseEvent(new RoutedEventArgs(CropChangedEvent, this));\n\n        Keyboard.Focus(_cropMask);\n    }\n\n    #endregion\n\n    #region Other handlers\n\n    private void AdornedElement_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        if (!(sender is FrameworkElement element))\n            return;\n\n        var wasChanged = false;\n\n        double intLeft = ClipRectangle.Left, intTop = ClipRectangle.Top,\n            intWidth = ClipRectangle.Width, intHeight = ClipRectangle.Height;\n\n        if (ClipRectangle.Left > element.RenderSize.Width)\n        {\n            intLeft = element.RenderSize.Width;\n            intWidth = 0;\n            wasChanged = true;\n        }\n\n        if (ClipRectangle.Top > element.RenderSize.Height)\n        {\n            intTop = element.RenderSize.Height;\n            intHeight = 0;\n            wasChanged = true;\n        }\n\n        if (ClipRectangle.Right > element.RenderSize.Width)\n        {\n            intWidth = Math.Max(0, element.RenderSize.Width - intLeft);\n            wasChanged = true;\n        }\n\n        if (ClipRectangle.Bottom > element.RenderSize.Height)\n        {\n            intHeight = Math.Max(0, element.RenderSize.Height - intTop);\n            wasChanged = true;\n        }\n\n        if (wasChanged)\n            ClipRectangle = new Rect(intLeft, intTop, intWidth, intHeight);\n    }\n\n    #endregion\n\n    #region Arranging\n\n    protected override Size ArrangeOverride(Size finalSize)\n    {\n        var rcExterior = new Rect(0, 0, AdornedElement.RenderSize.Width, AdornedElement.RenderSize.Height);\n        _cropMask.Exterior = rcExterior;\n\n        var rcInterior = _cropMask.Interior;\n        _cropMask.Arrange(rcExterior);\n\n        SetThumbs(rcInterior);\n        _thumbCanvas.Arrange(rcExterior);\n        return finalSize;\n    }\n\n    #endregion\n\n    #region Public Methods\n\n    public BitmapSource CropImage()\n    {\n        var margin = AdornerMargin();\n        var rcInterior = _cropMask.Interior;\n\n        var pxFromSize = UnitsToPx(rcInterior.Width, rcInterior.Height);\n\n        //CroppedBitmap indexes from the upper left of the margin whereas RenderTargetBitmap renders the\n        //control exclusive of the margin.  Hence our need to take the margins into account here...\n\n        var pxFromPos = UnitsToPx(rcInterior.Left + margin.Left, rcInterior.Top + margin.Top);\n        var pxWhole = UnitsToPx(AdornedElement.RenderSize.Width + margin.Left, AdornedElement.RenderSize.Height + margin.Left);\n        pxFromSize.X = Math.Max(Math.Min(pxWhole.X - pxFromPos.X, pxFromSize.X), 0);\n        pxFromSize.Y = Math.Max(Math.Min(pxWhole.Y - pxFromPos.Y, pxFromSize.Y), 0);\n\n        if (pxFromSize.X == 0 || pxFromSize.Y == 0)\n            return null;\n\n        var rcFrom = new Int32Rect(pxFromPos.X, pxFromPos.Y, pxFromSize.X, pxFromSize.Y);\n\n        var rtb = new RenderTargetBitmap(pxWhole.X, pxWhole.Y, DpiX, DpiY, PixelFormats.Default);\n        rtb.Render(AdornedElement);\n\n        return new CroppedBitmap(rtb, rcFrom);\n    }\n\n    #endregion\n\n    #region Private Methods\n\n    private void SetThumbs(Rect rc)\n    {\n        SetPosition(_thumbBottomRight, rc.Right, rc.Bottom);\n        SetPosition(_thumbTopLeft, rc.Left, rc.Top);\n        SetPosition(_thumbTopRight, rc.Right, rc.Top);\n        SetPosition(_thumbBottomLeft, rc.Left, rc.Bottom);\n        SetPosition(_thumbTop, rc.Left + rc.Width / 2, rc.Top);\n        SetPosition(_thumbBottom, rc.Left + rc.Width / 2, rc.Bottom);\n        SetPosition(_thumbLeft, rc.Left, rc.Top + rc.Height / 2);\n        SetPosition(_thumbRight, rc.Right, rc.Top + rc.Height / 2);\n\n        //Central thumb, used to drag the whole cropping selection.\n        SetPosition(_thumbCenter, rc.Left + 5, rc.Top + 5);\n        _thumbCenter.Width = rc.Right - rc.Left;\n        _thumbCenter.Height = rc.Bottom - rc.Top;\n    }\n\n    private Thickness AdornerMargin()\n    {\n        var thick = new Thickness(0);\n\n        if (AdornedElement is FrameworkElement element)\n            thick = element.Margin;\n\n        return thick;\n    }\n\n    private void BuildCorner(ref Thumb thumb, Cursor cursor)\n    {\n        if (thumb != null) return;\n\n        thumb = new Thumb\n        {\n            Cursor = cursor,\n            Style = (Style)FindResource(\"ScrollBar.Thumb\"),\n            Width = ThumbWidth,\n            Height = ThumbWidth\n        };\n\n        _thumbCanvas.Children.Add(thumb);\n    }\n\n    private void BuildCenter(ref Thumb thumb)\n    {\n        if (thumb != null) return;\n\n        thumb = new Thumb\n        {\n            Style = (Style)FindResource(\"ThumbTranparent\"),\n        };\n\n        _thumbCanvas.Children.Add(thumb);\n    }\n\n    private Point UnitsToPx(double x, double y)\n    {\n        return new Point((int)(x * DpiX / 96), (int)(y * DpiY / 96));\n    }\n\n    private void SetPosition(Thumb thumb, double x, double y)\n    {\n        Canvas.SetTop(thumb, y - ThumbWidth / 2);\n        Canvas.SetLeft(thumb, x - ThumbWidth / 2);\n    }\n\n    #endregion\n\n    #region Visual Tree Override\n\n    // Override the VisualChildrenCount and GetVisualChild properties to interface with\n    // the adorner's visual collection.\n    protected override int VisualChildrenCount => _visualCollection.Count;\n\n    protected override Visual GetVisualChild(int index)\n    {\n        return _visualCollection[index];\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DataGridHeaderBorder.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// A Border used to provide the default look of DataGrid headers.\n/// When Background or BorderBrush are set, the rendering will revert back to the default Border implementation.\n/// </summary>\npublic sealed class DataGridHeaderBorder : Border\n{\n    static DataGridHeaderBorder()\n    {\n        //We always set this to true on these borders, so just default it to true here.\n        SnapsToDevicePixelsProperty.OverrideMetadata(typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(true));\n    }\n\n    #region Header Appearance Properties\n\n    /// <summary>\n    ///     Whether the hover look should be applied.\n    /// </summary>\n    public bool IsHovered\n    {\n        get => (bool)GetValue(IsHoveredProperty);\n        set => SetValue(IsHoveredProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for IsHovered.\n    /// </summary>\n    public static readonly DependencyProperty IsHoveredProperty =\n        DependencyProperty.Register(\"IsHovered\", typeof(bool), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    /// <summary>\n    ///     Whether the pressed look should be applied.\n    /// </summary>\n    public bool IsPressed\n    {\n        get => (bool)GetValue(IsPressedProperty);\n        set => SetValue(IsPressedProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for IsPressed.\n    /// </summary>\n    public static readonly DependencyProperty IsPressedProperty =\n        DependencyProperty.Register(\"IsPressed\", typeof(bool), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsArrange));\n\n    /// <summary>\n    ///     When false, will not apply the hover look even when IsHovered is true.\n    /// </summary>\n    public bool IsClickable\n    {\n        get => (bool)GetValue(IsClickableProperty);\n        set => SetValue(IsClickableProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for IsClickable.\n    /// </summary>\n    public static readonly DependencyProperty IsClickableProperty =\n        DependencyProperty.Register(\"IsClickable\", typeof(bool), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsArrange));\n\n    /// <summary>\n    ///     Whether to appear sorted.\n    /// </summary>\n    public ListSortDirection? SortDirection\n    {\n        get => (ListSortDirection?)GetValue(SortDirectionProperty);\n        set => SetValue(SortDirectionProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for SortDirection.\n    /// </summary>\n    public static readonly DependencyProperty SortDirectionProperty =\n        DependencyProperty.Register(\"SortDirection\", typeof(ListSortDirection?), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    /// <summary>\n    ///     Whether to appear selected.\n    /// </summary>\n    public bool IsSelected\n    {\n        get => (bool)GetValue(IsSelectedProperty);\n        set => SetValue(IsSelectedProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for IsSelected.\n    /// </summary>\n    public static readonly DependencyProperty IsSelectedProperty =\n        DependencyProperty.Register(\"IsSelected\", typeof(bool), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    /// <summary>\n    ///     Vertical = column header\n    ///     Horizontal = row header\n    /// </summary>\n    public Orientation Orientation\n    {\n        get => (Orientation)GetValue(OrientationProperty);\n        set => SetValue(OrientationProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for Orientation.\n    /// </summary>\n    public static readonly DependencyProperty OrientationProperty =\n        DependencyProperty.Register(\"Orientation\", typeof(Orientation), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(Orientation.Vertical, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    /// <summary>\n    ///     When there is a Background or BorderBrush, revert to the Border implementation.\n    /// </summary>\n    private bool UsingBorderImplementation => (Background != null) || (BorderBrush != null);\n\n    /// <summary>\n    ///     Property that indicates the brush to use when drawing separators between headers.\n    /// </summary>\n    public Brush SeparatorBrush\n    {\n        get => (Brush)GetValue(SeparatorBrushProperty);\n        set => SetValue(SeparatorBrushProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for SeparatorBrush.\n    /// </summary>\n    public static readonly DependencyProperty SeparatorBrushProperty =\n        DependencyProperty.Register(\"SeparatorBrush\", typeof(Brush), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(null));\n\n    /// <summary>\n    ///     Property that indicates the Visibility for the header separators.\n    /// </summary>\n    public Visibility SeparatorVisibility\n    {\n        get => (Visibility)GetValue(SeparatorVisibilityProperty);\n        set => SetValue(SeparatorVisibilityProperty, value);\n    }\n\n    /// <summary>\n    ///     DependencyProperty for SeparatorBrush.\n    /// </summary>\n    public static readonly DependencyProperty SeparatorVisibilityProperty =\n        DependencyProperty.Register(\"SeparatorVisibility\", typeof(Visibility), typeof(DataGridHeaderBorder), new FrameworkPropertyMetadata(Visibility.Visible));\n\n    #endregion\n\n    #region Layout\n\n    /// <summary>\n    /// Calculates the desired size of the element given the constraint.\n    /// </summary>\n    protected override Size MeasureOverride(Size constraint)\n    {\n        if (UsingBorderImplementation)\n        {\n            // Revert to the Border implementation\n            return base.MeasureOverride(constraint);\n        }\n\n        var child = Child;\n        if (child == null) return new Size();\n\n        // Use the public Padding property if it's set\n        var padding = Padding;\n        if (padding.Equals(new Thickness()))\n            padding = DefaultPadding;\n\n        var childWidth = constraint.Width;\n        var childHeight = constraint.Height;\n\n        // If there is an actual constraint, then reserve space for the chrome\n        if (!double.IsInfinity(childWidth))\n        {\n            childWidth = Math.Max(0.0, childWidth - padding.Left - padding.Right);\n        }\n\n        if (!double.IsInfinity(childHeight))\n        {\n            childHeight = Math.Max(0.0, childHeight - padding.Top - padding.Bottom);\n        }\n\n        child.Measure(new Size(childWidth, childHeight));\n        var desiredSize = child.DesiredSize;\n\n        // Add on the reserved space for the chrome\n        return new Size(desiredSize.Width + padding.Left + padding.Right, desiredSize.Height + padding.Top + padding.Bottom);\n    }\n\n    /// <summary>\n    ///     Positions children and returns the final size of the element.\n    /// </summary>\n    protected override Size ArrangeOverride(Size arrangeSize)\n    {\n        if (UsingBorderImplementation)\n        {\n            // Revert to the Border implementation\n            return base.ArrangeOverride(arrangeSize);\n        }\n\n        var child = Child;\n        if (child != null)\n        {\n            // Use the public Padding property if it's set\n            var padding = Padding;\n            if (padding.Equals(new Thickness()))\n            {\n                padding = DefaultPadding;\n            }\n\n            // Reserve space for the chrome\n            var childWidth = Math.Max(0.0, arrangeSize.Width - padding.Left - padding.Right);\n            var childHeight = Math.Max(0.0, arrangeSize.Height - padding.Top - padding.Bottom);\n\n            child.Arrange(new Rect(padding.Left, padding.Top, childWidth, childHeight));\n        }\n\n        return arrangeSize;\n    }\n\n    #endregion\n\n    #region Rendering\n\n    /// <summary>\n    ///     Returns a default padding for the various themes for use\n    ///     by measure and arrange.\n    /// </summary>\n    private Thickness DefaultPadding\n    {\n        get\n        {\n            var padding = new Thickness(3.0); // The default padding\n            var themePadding = ThemeDefaultPadding;\n            if (themePadding == null)\n            {\n                if (Orientation == Orientation.Vertical)\n                {\n                    // Reserve space to the right for the arrow\n                    padding.Right = 15.0;\n                }\n            }\n            else\n            {\n                padding = (Thickness)themePadding;\n            }\n\n            // When pressed, offset the child\n            if (IsPressed && IsClickable)\n            {\n                padding.Left += 1.0;\n                padding.Top += 1.0;\n                padding.Right -= 1.0;\n                padding.Bottom -= 1.0;\n            }\n\n            return padding;\n        }\n    }\n\n    /// <summary>\n    ///     Called when this element should re-render.\n    /// </summary>\n    protected override void OnRender(DrawingContext dc)\n    {\n        if (UsingBorderImplementation)\n        {\n            // Revert to the Border implementation\n            base.OnRender(dc);\n        }\n        else\n        {\n            RenderTheme(dc);\n        }\n    }\n\n    private static double Max0(double d)\n    {\n        return Math.Max(0.0, d);\n    }\n\n    #endregion\n\n    #region Freezable Cache\n\n    /// <summary>\n    /// Creates a cache of frozen Freezable resources for use across all instances of the border.\n    /// </summary>\n    private static void EnsureCache(int size)\n    {\n        // Quick check to avoid locking\n        if (_freezableCache == null)\n        {\n            lock (_cacheAccess)\n            {\n                // Re-check in case another thread created the cache\n                if (_freezableCache == null)\n                {\n                    _freezableCache = new List<Freezable>(size);\n                    for (var i = 0; i < size; i++)\n                    {\n                        _freezableCache.Add(null);\n                    }\n                }\n            }\n        }\n\n        Debug.Assert(_freezableCache.Count == size, \"The cache size does not match the requested amount.\");\n    }\n\n    /// <summary>\n    /// Releases all resources in the cache.\n    /// </summary>\n    private static void ReleaseCache()\n    {\n        // Avoid locking if necessary\n        if (_freezableCache != null)\n        {\n            lock (_cacheAccess)\n            {\n                // No need to re-check if non-null since it's OK to set it to null multiple times\n                _freezableCache = null;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Retrieves a cached resource.\n    /// </summary>\n    private static Freezable GetCachedFreezable(int index)\n    {\n        lock (_cacheAccess)\n        {\n            var freezable = _freezableCache[index];\n            Debug.Assert((freezable == null) || freezable.IsFrozen, \"Cached Freezables should have been frozen.\");\n            return freezable;\n        }\n    }\n\n    /// <summary>\n    /// Caches a resources.\n    /// </summary>\n    private static void CacheFreezable(Freezable freezable, int index)\n    {\n        Debug.Assert(freezable.IsFrozen, \"Cached Freezables should be frozen.\");\n\n        lock (_cacheAccess)\n        {\n            if (_freezableCache[index] != null)\n            {\n                _freezableCache[index] = freezable;\n            }\n        }\n    }\n\n    private static List<Freezable> _freezableCache;\n    private static readonly object _cacheAccess = new object();\n\n    #endregion\n\n    #region Theme Rendering\n\n    private Thickness? ThemeDefaultPadding\n    {\n        get\n        {\n            if (Orientation == Orientation.Vertical)\n            {\n                return new Thickness(5.0, 4.0, 5.0, 4.0);\n            }\n            return null;\n        }\n    }\n\n    private void RenderTheme(DrawingContext dc)\n    {\n        var size = RenderSize;\n        var horizontal = Orientation == Orientation.Horizontal;\n        var isClickable = IsClickable && IsEnabled;\n        var isHovered = isClickable && IsHovered;\n        var isPressed = isClickable && IsPressed;\n        var sortDirection = SortDirection;\n        var isSorted = sortDirection != null;\n        var isSelected = IsSelected;\n        var hasBevel = (!isHovered && !isPressed && !isSorted && !isSelected);\n\n        EnsureCache((int)AeroFreezables.NumFreezables);\n\n        if (horizontal)\n        {\n            // When horizontal, rotate the rendering by -90 degrees\n            var m1 = new Matrix();\n            m1.RotateAt(-90.0, 0.0, 0.0);\n            var m2 = new Matrix();\n            m2.Translate(0.0, size.Height);\n\n            var horizontalRotate = new MatrixTransform(m1 * m2);\n            horizontalRotate.Freeze();\n            dc.PushTransform(horizontalRotate);\n\n            var temp = size.Width;\n            size.Width = size.Height;\n            size.Height = temp;\n        }\n\n        if (hasBevel)\n        {\n            // This is a highlight that can be drawn by just filling the background with the color.\n            // It will be seen through the gab between the border and the background.\n            var bevel = (LinearGradientBrush)GetCachedFreezable((int)AeroFreezables.NormalBevel);\n            if (bevel == null)\n            {\n                bevel = new LinearGradientBrush();\n                bevel.StartPoint = new Point();\n                bevel.EndPoint = new Point(0.0, 1.0);\n                bevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF), 0.0));\n                bevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF), 0.4));\n                bevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xFC, 0xFC, 0xFD), 0.4));\n                bevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xFB, 0xFC, 0xFC), 1.0));\n                bevel.Freeze();\n\n                CacheFreezable(bevel, (int)AeroFreezables.NormalBevel);\n            }\n\n            dc.DrawRectangle(bevel, null, new Rect(0.0, 0.0, size.Width, size.Height));\n        }\n\n        // Fill the background\n        var backgroundType = AeroFreezables.NormalBackground;\n        if (isPressed)\n        {\n            backgroundType = AeroFreezables.PressedBackground;\n        }\n        else if (isHovered)\n        {\n            backgroundType = AeroFreezables.HoveredBackground;\n        }\n        else if (isSorted || isSelected)\n        {\n            backgroundType = AeroFreezables.SortedBackground;\n        }\n\n        var background = (LinearGradientBrush)GetCachedFreezable((int)backgroundType);\n        if (background == null)\n        {\n            background = new LinearGradientBrush();\n            background.StartPoint = new Point();\n            background.EndPoint = new Point(0.0, 1.0);\n\n            switch (backgroundType)\n            {\n                case AeroFreezables.NormalBackground:\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF), 0.0));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xF7, 0xF8, 0xFA), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xF1, 0xF2, 0xF4), 1.0));\n                    break;\n\n                case AeroFreezables.PressedBackground:\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xBC, 0xE4, 0xF9), 0.0));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xBC, 0xE4, 0xF9), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x8D, 0xD6, 0xF7), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x8A, 0xD1, 0xF5), 1.0));\n                    break;\n\n                case AeroFreezables.HoveredBackground:\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xE3, 0xF7, 0xFF), 0.0));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xE3, 0xF7, 0xFF), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xBD, 0xED, 0xFF), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xB7, 0xE7, 0xFB), 1.0));\n                    break;\n\n                case AeroFreezables.SortedBackground:\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xF2, 0xF9, 0xFC), 0.0));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xF2, 0xF9, 0xFC), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xE1, 0xF1, 0xF9), 0.4));\n                    background.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xD8, 0xEC, 0xF6), 1.0));\n                    break;\n            }\n\n            background.Freeze();\n\n            CacheFreezable(background, (int)backgroundType);\n        }\n\n        dc.DrawRectangle(background, null, new Rect(0.0, 0.0, size.Width, size.Height));\n\n        if (size.Width >= 2.0)\n        {\n            // Draw the borders on the sides\n            var sideType = AeroFreezables.NormalSides;\n            if (isPressed)\n            {\n                sideType = AeroFreezables.PressedSides;\n            }\n            else if (isHovered)\n            {\n                sideType = AeroFreezables.HoveredSides;\n            }\n            else if (isSorted || isSelected)\n            {\n                sideType = AeroFreezables.SortedSides;\n            }\n\n            if (SeparatorVisibility == Visibility.Visible)\n            {\n                Brush sideBrush;\n                if (SeparatorBrush != null)\n                {\n                    sideBrush = SeparatorBrush;\n                }\n                else\n                {\n                    sideBrush = (Brush)GetCachedFreezable((int)sideType);\n                    if (sideBrush == null)\n                    {\n                        LinearGradientBrush lgBrush = null;\n                        if (sideType != AeroFreezables.SortedSides)\n                        {\n                            lgBrush = new LinearGradientBrush();\n                            lgBrush.StartPoint = new Point();\n                            lgBrush.EndPoint = new Point(0.0, 1.0);\n                            sideBrush = lgBrush;\n                        }\n\n                        switch (sideType)\n                        {\n                            case AeroFreezables.NormalSides:\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xF2, 0xF2, 0xF2), 0.0));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xEF, 0xEF, 0xEF), 0.4));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xE7, 0xE8, 0xEA), 0.4));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xDE, 0xDF, 0xE1), 1.0));\n                                break;\n\n                            case AeroFreezables.PressedSides:\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x7A, 0x9E, 0xB1), 0.0));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x7A, 0x9E, 0xB1), 0.4));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x50, 0x91, 0xAF), 0.4));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x4D, 0x8D, 0xAD), 1.0));\n                                break;\n\n                            case AeroFreezables.HoveredSides:\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x88, 0xCB, 0xEB), 0.0));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x88, 0xCB, 0xEB), 0.4));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x69, 0xBB, 0xE3), 0.4));\n                                lgBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x69, 0xBB, 0xE3), 1.0));\n                                break;\n\n                            case AeroFreezables.SortedSides:\n                                sideBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0x96, 0xD9, 0xF9));\n                                break;\n                        }\n\n                        sideBrush.Freeze();\n\n                        CacheFreezable(sideBrush, (int)sideType);\n                    }\n                }\n\n                dc.DrawRectangle(sideBrush, null, new Rect(0.0, 0.0, 1.0, Max0(size.Height - 0.95)));\n                dc.DrawRectangle(sideBrush, null, new Rect(size.Width - 1.0, 0.0, 1.0, Max0(size.Height - 0.95)));\n            }\n        }\n\n        if (isPressed && (size.Width >= 4.0) && (size.Height >= 4.0))\n        {\n            // When pressed, there are added borders on the left and top\n            var topBrush = (LinearGradientBrush)GetCachedFreezable((int)AeroFreezables.PressedTop);\n            if (topBrush == null)\n            {\n                topBrush = new LinearGradientBrush();\n                topBrush.StartPoint = new Point();\n                topBrush.EndPoint = new Point(0.0, 1.0);\n                topBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x86, 0xA3, 0xB2), 0.0));\n                topBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x86, 0xA3, 0xB2), 0.1));\n                topBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xAA, 0xCE, 0xE1), 0.9));\n                topBrush.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xAA, 0xCE, 0xE1), 1.0));\n                topBrush.Freeze();\n\n                CacheFreezable(topBrush, (int)AeroFreezables.PressedTop);\n            }\n\n            dc.DrawRectangle(topBrush, null, new Rect(0.0, 0.0, size.Width, 2.0));\n\n            var pressedBevel = (LinearGradientBrush)GetCachedFreezable((int)AeroFreezables.PressedBevel);\n            if (pressedBevel == null)\n            {\n                pressedBevel = new LinearGradientBrush();\n                pressedBevel.StartPoint = new Point();\n                pressedBevel.EndPoint = new Point(0.0, 1.0);\n                pressedBevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xA2, 0xCB, 0xE0), 0.0));\n                pressedBevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xA2, 0xCB, 0xE0), 0.4));\n                pressedBevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x72, 0xBC, 0xDF), 0.4));\n                pressedBevel.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x6E, 0xB8, 0xDC), 1.0));\n                pressedBevel.Freeze();\n\n                CacheFreezable(pressedBevel, (int)AeroFreezables.PressedBevel);\n            }\n\n            dc.DrawRectangle(pressedBevel, null, new Rect(1.0, 0.0, 1.0, size.Height - 0.95));\n            dc.DrawRectangle(pressedBevel, null, new Rect(size.Width - 2.0, 0.0, 1.0, size.Height - 0.95));\n        }\n\n        if (size.Height >= 2.0)\n        {\n            // Draw the bottom border\n            var bottomType = AeroFreezables.NormalBottom;\n            if (isPressed)\n            {\n                bottomType = AeroFreezables.PressedOrHoveredBottom;\n            }\n            else if (isHovered)\n            {\n                bottomType = AeroFreezables.PressedOrHoveredBottom;\n            }\n            else if (isSorted || isSelected)\n            {\n                bottomType = AeroFreezables.SortedBottom;\n            }\n\n            var bottomBrush = (SolidColorBrush)GetCachedFreezable((int)bottomType);\n            if (bottomBrush == null)\n            {\n                switch (bottomType)\n                {\n                    case AeroFreezables.NormalBottom:\n                        bottomBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0xD5, 0xD5, 0xD5));\n                        break;\n\n                    case AeroFreezables.PressedOrHoveredBottom:\n                        bottomBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0x93, 0xC9, 0xE3));\n                        break;\n\n                    case AeroFreezables.SortedBottom:\n                        bottomBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0x96, 0xD9, 0xF9));\n                        break;\n                }\n\n                bottomBrush.Freeze();\n\n                CacheFreezable(bottomBrush, (int)bottomType);\n            }\n\n            dc.DrawRectangle(bottomBrush, null, new Rect(0.0, size.Height - 1.0, size.Width, 1.0));\n        }\n\n        if (isSorted && (size.Width > 14.0) && (size.Height > 10.0))\n        {\n            // Draw the sort arrow\n            var positionTransform = new TranslateTransform((size.Width - 8.0) * 0.5, 1.0);\n            positionTransform.Freeze();\n            dc.PushTransform(positionTransform);\n\n            var ascending = (sortDirection == ListSortDirection.Ascending);\n            var arrowGeometry = (PathGeometry)GetCachedFreezable(ascending ? (int)AeroFreezables.ArrowUpGeometry : (int)AeroFreezables.ArrowDownGeometry);\n            if (arrowGeometry == null)\n            {\n                arrowGeometry = new PathGeometry();\n                var arrowFigure = new PathFigure();\n\n                if (ascending)\n                {\n                    arrowFigure.StartPoint = new Point(0.0, 4.0);\n\n                    var line = new LineSegment(new Point(4.0, 0.0), false);\n                    line.Freeze();\n                    arrowFigure.Segments.Add(line);\n\n                    line = new LineSegment(new Point(8.0, 4.0), false);\n                    line.Freeze();\n                    arrowFigure.Segments.Add(line);\n                }\n                else\n                {\n                    arrowFigure.StartPoint = new Point(0.0, 0.0);\n\n                    var line = new LineSegment(new Point(8.0, 0.0), false);\n                    line.Freeze();\n                    arrowFigure.Segments.Add(line);\n\n                    line = new LineSegment(new Point(4.0, 4.0), false);\n                    line.Freeze();\n                    arrowFigure.Segments.Add(line);\n                }\n\n                arrowFigure.IsClosed = true;\n                arrowFigure.Freeze();\n\n                arrowGeometry.Figures.Add(arrowFigure);\n                arrowGeometry.Freeze();\n\n                CacheFreezable(arrowGeometry, ascending ? (int)AeroFreezables.ArrowUpGeometry : (int)AeroFreezables.ArrowDownGeometry);\n            }\n\n            // Draw two arrows, one inset in the other. This is to achieve a double gradient over both the border and the fill.\n            var arrowBorder = (LinearGradientBrush)GetCachedFreezable((int)AeroFreezables.ArrowBorder);\n            if (arrowBorder == null)\n            {\n                arrowBorder = new LinearGradientBrush();\n                arrowBorder.StartPoint = new Point();\n                arrowBorder.EndPoint = new Point(1.0, 1.0);\n                arrowBorder.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x3C, 0x5E, 0x72), 0.0));\n                arrowBorder.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x3C, 0x5E, 0x72), 0.1));\n                arrowBorder.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xC3, 0xE4, 0xF5), 1.0));\n                arrowBorder.Freeze();\n                CacheFreezable(arrowBorder, (int)AeroFreezables.ArrowBorder);\n            }\n\n            dc.DrawGeometry(arrowBorder, null, arrowGeometry);\n\n            var arrowFill = (LinearGradientBrush)GetCachedFreezable((int)AeroFreezables.ArrowFill);\n            if (arrowFill == null)\n            {\n                arrowFill = new LinearGradientBrush();\n                arrowFill.StartPoint = new Point();\n                arrowFill.EndPoint = new Point(1.0, 1.0);\n                arrowFill.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x61, 0x96, 0xB6), 0.0));\n                arrowFill.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0x61, 0x96, 0xB6), 0.1));\n                arrowFill.GradientStops.Add(new GradientStop(Color.FromArgb(0xFF, 0xCA, 0xE6, 0xF5), 1.0));\n                arrowFill.Freeze();\n                CacheFreezable(arrowFill, (int)AeroFreezables.ArrowFill);\n            }\n\n            // Inset the fill arrow inside the border arrow\n            var arrowScale = (ScaleTransform)GetCachedFreezable((int)AeroFreezables.ArrowFillScale);\n            if (arrowScale == null)\n            {\n                arrowScale = new ScaleTransform(0.75, 0.75, 3.5, 4.0);\n                arrowScale.Freeze();\n                CacheFreezable(arrowScale, (int)AeroFreezables.ArrowFillScale);\n            }\n\n            dc.PushTransform(arrowScale);\n\n            dc.DrawGeometry(arrowFill, null, arrowGeometry);\n\n            dc.Pop(); // Scale Transform\n            dc.Pop(); // Position Transform\n        }\n\n        if (horizontal)\n        {\n            dc.Pop(); // Horizontal Rotate\n        }\n    }\n\n    private enum AeroFreezables : int\n    {\n        NormalBevel,\n        NormalBackground,\n        PressedBackground,\n        HoveredBackground,\n        SortedBackground,\n        PressedTop,\n        NormalSides,\n        PressedSides,\n        HoveredSides,\n        SortedSides,\n        PressedBevel,\n        NormalBottom,\n        PressedOrHoveredBottom,\n        SortedBottom,\n        ArrowBorder,\n        ArrowFill,\n        ArrowFillScale,\n        ArrowUpGeometry,\n        ArrowDownGeometry,\n        NumFreezables\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DecimalBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\npublic class DecimalBox : ExtendedTextBox\n{\n    #region Variables\n\n    private bool _ignore;\n    private string _baseFormat = \"{0:###,###,###,###,##0.\";\n    private string _format = \"{0:###,###,###,###,##0.00}\";\n\n    #endregion\n\n    #region Dependency Property\n\n    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(decimal), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(decimal.MaxValue, OnMaximumPropertyChanged));\n\n    public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(nameof(Value), typeof(decimal), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(0M, OnValuePropertyChanged));\n\n    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(decimal), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(0M, OnMinimumPropertyChanged));\n\n    public static readonly DependencyProperty DecimalsProperty = DependencyProperty.Register(nameof(Decimals), typeof(int), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(2, OnDecimalsPropertyChanged));\n\n    public static readonly DependencyProperty StepProperty = DependencyProperty.Register(nameof(StepValue), typeof(decimal), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(1M));\n\n    public static readonly DependencyProperty UpdateOnInputProperty = DependencyProperty.Register(nameof(UpdateOnInput), typeof(bool), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(false, OnUpdateOnInputPropertyChanged));\n\n    public static readonly DependencyProperty DefaultValueIfEmptyProperty = DependencyProperty.Register(nameof(DefaultValueIfEmpty), typeof(decimal), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(0M));\n\n    public static readonly DependencyProperty EmptyIfValueProperty = DependencyProperty.Register(nameof(EmptyIfValue), typeof(decimal), typeof(DecimalBox),\n        new FrameworkPropertyMetadata(decimal.MinValue));\n\n    public static readonly DependencyProperty ScaleProperty = DependencyProperty.Register(nameof(Scale), typeof(decimal), typeof(DecimalBox),\n        new PropertyMetadata(1M, OnScalePropertyChanged));\n\n    #endregion\n\n    #region Properties\n\n    [Bindable(true), Category(\"Common\")]\n    public decimal Maximum\n    {\n        get => (decimal)GetValue(MaximumProperty);\n        set => SetValue(MaximumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public decimal Value\n    {\n        get => (decimal)GetValue(ValueProperty);\n        set => SetValue(ValueProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public decimal Minimum\n    {\n        get => (decimal)GetValue(MinimumProperty);\n        set => SetValue(MinimumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int Decimals\n    {\n        get => (int)GetValue(DecimalsProperty);\n        set => SetValue(DecimalsProperty, value);\n    }\n\n    /// <summary>\n    /// The Increment/Decrement value.\n    /// </summary>\n    [Description(\"The Increment/Decrement value.\")]\n    public decimal StepValue\n    {\n        get => (decimal)GetValue(StepProperty);\n        set => SetValue(StepProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool UpdateOnInput\n    {\n        get => (bool)GetValue(UpdateOnInputProperty);\n        set => SetValue(UpdateOnInputProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public decimal DefaultValueIfEmpty\n    {\n        get => (decimal)GetValue(DefaultValueIfEmptyProperty);\n        set => SetValue(DefaultValueIfEmptyProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public decimal EmptyIfValue\n    {\n        get => (decimal)GetValue(EmptyIfValueProperty);\n        set => SetValue(EmptyIfValueProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public decimal Scale\n    {\n        get => (decimal)GetValue(ScaleProperty);\n        set => SetValue(ScaleProperty, value);\n    }\n\n    #endregion\n\n    #region Properties Changed\n\n    private static void OnMaximumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DecimalBox decimalBox))\n            return;\n\n        if (decimalBox.Value > decimalBox.Maximum)\n            decimalBox.Value = decimalBox.Maximum;\n    }\n\n    private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DecimalBox decimalBox))\n            return;\n\n        if (decimalBox.Value > decimalBox.Maximum)\n            decimalBox.Value = decimalBox.Maximum;\n\n        else if (decimalBox.Value < decimalBox.Minimum)\n            decimalBox.Value = decimalBox.Minimum;\n\n        decimalBox.Value = Math.Round(decimalBox.Value, decimalBox.Decimals);\n\n        if (!decimalBox._ignore)\n        {\n            var value = string.Format(CultureInfo.CurrentCulture, decimalBox._format, decimalBox.Value * decimalBox.Scale);\n\n            if (!string.Equals(decimalBox.Text, value))\n                decimalBox.Text = (decimalBox.EmptyIfValue == decimalBox.Value ? \"\" : value);\n        }\n\n        decimalBox.RaiseValueChangedEvent();\n    }\n\n    private static void OnMinimumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DecimalBox decimalBox))\n            return;\n\n        if (decimalBox.Value < decimalBox.Minimum)\n            decimalBox.Value = decimalBox.Minimum;\n    }\n\n    private static void OnDecimalsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DecimalBox decimalBox))\n            return;\n\n        decimalBox._format = decimalBox._baseFormat + \"\".PadRight(decimalBox.Decimals, '0') + \"}\";\n\n        decimalBox.Value = Math.Round(decimalBox.Value, decimalBox.Decimals);\n    }\n\n    private static void OnUpdateOnInputPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((DecimalBox)d).UpdateOnInput = (bool)e.NewValue;\n    }\n\n    private static void OnScalePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DecimalBox decimalBox)) return;\n\n        //The scale value dictates the value being displayed.\n        //For example, The value 600 and the scale 1.25 should display the text 750.\n        //Text = Value * Scale.\n\n        var scaled = decimalBox.Value * decimalBox.Scale;\n        decimalBox.Text = scaled == decimalBox.EmptyIfValue ? \"\" : string.Format(CultureInfo.CurrentCulture, decimalBox._format, decimalBox.Value * decimalBox.Scale);\n    }\n\n    #endregion\n\n    #region Custom Events\n\n    public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent(\"ValueChanged\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DecimalBox));\n\n    /// <summary>\n    /// Event raised when the numeric value is changed.\n    /// </summary>\n    public event RoutedEventHandler ValueChanged\n    {\n        add => AddHandler(ValueChangedEvent, value);\n        remove => RemoveHandler(ValueChangedEvent, value);\n    }\n\n    public void RaiseValueChangedEvent()\n    {\n        if (ValueChangedEvent == null)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(ValueChangedEvent));\n    }\n\n    #endregion\n\n    static DecimalBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DecimalBox), new FrameworkPropertyMetadata(typeof(DecimalBox)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        AddHandler(DataObject.PastingEvent, new DataObjectPastingEventHandler(OnPasting));\n\n        _format = _baseFormat + \"\".PadRight(Decimals, '0') + \"}\";\n    }\n\n    protected override void OnInitialized(EventArgs e)\n    {\n        base.OnInitialized(e);\n\n        Text = Value == EmptyIfValue ? \"\" : string.Format(CultureInfo.CurrentCulture, _format, Value);\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        //Only sets the focus if not clicking on the Up/Down buttons of a IntegerUpDown.\n        if (e.OriginalSource is TextBlock || e.OriginalSource is Border)\n            return;\n\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        if (e.Source is DecimalBox)\n            SelectAll();\n    }\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        if (string.IsNullOrEmpty(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        if (!IsEntryAllowed(this, e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewTextInput(e);\n    }\n\n    protected override void OnTextChanged(TextChangedEventArgs e)\n    {\n        if (!UpdateOnInput || _ignore || string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            return;\n\n        _ignore = true;\n\n        Value = Math.Round(Convert.ToDecimal(Text, CultureInfo.CurrentCulture) / Scale, Decimals);\n\n        _ignore = false;\n\n        base.OnTextChanged(e);\n    }\n\n    protected override void OnLostFocus(RoutedEventArgs e)\n    {\n        base.OnLostFocus(e);\n\n        if (!UpdateOnInput)\n        {\n            if (string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            {\n                Value = DefaultValueIfEmpty;\n                return;\n            }\n\n            _ignore = true;\n\n            Value = Convert.ToDecimal(Text, CultureInfo.CurrentCulture);\n            Text = EmptyIfValue == Value ? \"\" : string.Format(CultureInfo.CurrentCulture, _format, Value);\n\n            _ignore = false;\n            return;\n        }\n\n        Text = Value == EmptyIfValue ? \"\" : string.Format(CultureInfo.CurrentCulture, _format, Value);\n    }\n\n    protected override void OnKeyDown(KeyEventArgs e)\n    {\n        if (e.Key == Key.Enter || e.Key == Key.Return)\n        {\n            e.Handled = true;\n            MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n        }\n\n        base.OnKeyDown(e);\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        base.OnMouseWheel(e);\n\n        if (!IsKeyboardFocusWithin)\n            return;\n\n        var step = Keyboard.Modifiers == (ModifierKeys.Shift | ModifierKeys.Control)\n            ? 50 : Keyboard.Modifiers == ModifierKeys.Shift\n                ? 10 : Keyboard.Modifiers == ModifierKeys.Control\n                    ? 5 : StepValue;\n\n        if (e.Delta > 0)\n            Value += step;\n        else\n            Value -= step;\n\n        e.Handled = true;\n    }\n\n    #endregion\n\n    #region Base Properties Changed\n\n    private void OnPasting(object sender, DataObjectPastingEventArgs e)\n    {\n        if (e.DataObject.GetDataPresent(typeof(string)))\n        {\n            var text = e.DataObject.GetData(typeof(string)) as string;\n\n            if (!IsTextAllowed(text))\n                e.CancelCommand();\n        }\n        else\n        {\n            e.CancelCommand();\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private bool IsEntryAllowed(TextBox textBox, string text)\n    {\n        //Digits, points or commas.\n        var regex = new Regex(@\"^[0-9]|\\.|\\,$\"); //TODO: Support for multiple cultures.\n\n        //Checks if it's a valid char based on the context.\n        return regex.IsMatch(text) && IsEntryAllowedInContext(textBox, text);\n    }\n\n    private bool IsEntryAllowedInContext(TextBox textBox, string next)\n    {\n        //if number, allow.\n        if (char.IsNumber(next.ToCharArray().FirstOrDefault()))\n            return true;\n\n        #region Thousands\n\n        var thousands = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator;\n        var thousandsChar = thousands.ToCharArray().FirstOrDefault();\n        var decimals = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;\n        var decimalsChar = decimals.ToCharArray().FirstOrDefault();\n\n        if (next.Equals(thousands))\n        {\n            var textAux = textBox.Text;\n\n            if (!string.IsNullOrEmpty(textBox.SelectedText))\n                textAux = textAux.Replace(textBox.SelectedText, \"\");\n\n            var before = textAux.Substring(0, textBox.SelectionStart);\n            var after = textAux.Substring(textBox.SelectionStart);\n\n            //If there's no text, is not allowed to add a thousand separator.\n            if (string.IsNullOrEmpty(after + before)) \n                return false;\n\n            //Before the carret.\n            if (!string.IsNullOrEmpty(before))\n            {\n                //You can't add a thousand separator after the decimal.\n                if (before.Contains(decimals)) \n                    return false;\n\n                //Check the previous usage of a thousand separator.\n                if (before.Contains(thousands))\n                {\n                    var split = before.Split(thousandsChar);\n\n                    //You can't add a thousand separators closer than 3 chars from each other.\n                    if (split.Last().Length != 3) \n                        return false;\n                }\n            }\n\n            //After the carret.\n            if (!string.IsNullOrEmpty(after))\n            {\n                var split = after.Split(thousandsChar, decimalsChar);\n\n                //You can't add a thousand separators closer than 3 chars from another separator, decimal or thousands.\n                if (split.First().Length != 3) \n                    return true;\n            }\n\n            return false;\n        }\n\n        #endregion\n\n        #region Decimal\n\n        if (next.Equals(decimals))\n            return !textBox.Text.Any(x => x.Equals(decimalsChar));\n            \n        #endregion\n\n        return true;\n    }\n\n    private bool IsTextAllowed(string text)\n    {\n        return decimal.TryParse(text, out decimal _);\n\n        //var regex = new Regex(@\"^((\\d+)|(\\d{1,3}(\\.\\d{3})+)|(\\d{1,3}(\\.\\d{3})(\\,\\d{3})+))((\\,\\d{4})|(\\,\\d{3})|(\\,\\d{2})|(\\,\\d{1})|(\\,))?$\", RegexOptions.CultureInvariant);\n        //return regex.IsMatch(text);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DecimalUpDown.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls.Primitives;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Decimal only control with up and down buttons to change the value.\n/// </summary>\npublic class DecimalUpDown : DecimalBox\n{\n    #region Variables\n\n    private RepeatButton _upButton;\n    private RepeatButton _downButton;\n\n    #endregion\n\n    static DecimalUpDown()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DecimalUpDown), new FrameworkPropertyMetadata(typeof(DecimalUpDown)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        //Internal controls.\n        _upButton = Template.FindName(\"UpButton\", this) as RepeatButton;\n        _downButton = Template.FindName(\"DownButton\", this) as RepeatButton;\n\n        if (_upButton != null)\n            _upButton.Click += UpButton_Click;\n\n        if (_downButton != null)\n            _downButton.Click += DownButton_Click;\n    }\n\n    #region Event Handlers\n\n    private void DownButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Value > Minimum)\n            Value -= StepValue;\n    }\n\n    private void UpButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Value < Maximum)\n            Value += StepValue;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DisplayTimer.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Threading;\n\nnamespace ScreenToGif.Controls;\n\npublic class DisplayTimer : Control\n{\n    private DispatcherTimer _timer = null;\n    private Stopwatch _watch = null;\n\n\n    public static readonly DependencyPropertyKey ElapsedPropertyKey = DependencyProperty.RegisterReadOnly(nameof(Elapsed), typeof(TimeSpan), typeof(DisplayTimer), new PropertyMetadata(TimeSpan.Zero));\n\n    public static readonly DependencyProperty ElapsedProperty = ElapsedPropertyKey.DependencyProperty;\n\n    public static readonly DependencyPropertyKey IsRunningPropertyKey = DependencyProperty.RegisterReadOnly(nameof(IsRunning), typeof(bool), typeof(DisplayTimer), new PropertyMetadata(default(bool)));\n\n    public static readonly DependencyProperty IsRunningProperty = IsRunningPropertyKey.DependencyProperty;\n\n    public static readonly DependencyPropertyKey IsPausedPropertyKey = DependencyProperty.RegisterReadOnly(nameof(IsPaused), typeof(bool), typeof(DisplayTimer), new PropertyMetadata(default(bool)));\n\n    public static readonly DependencyProperty IsPausedProperty = IsPausedPropertyKey.DependencyProperty;\n\n    public static readonly DependencyPropertyKey IsNegativePropertyKey = DependencyProperty.RegisterReadOnly(nameof(IsNegative), typeof(bool), typeof(DisplayTimer), new PropertyMetadata(default(bool)));\n\n    public static readonly DependencyProperty IsNegativeProperty = IsNegativePropertyKey.DependencyProperty;\n\n\n    public static readonly DependencyProperty CornerRadiusProperty = DependencyProperty.Register(nameof(CornerRadius), typeof(CornerRadius), typeof(DisplayTimer), new PropertyMetadata(default(CornerRadius)));\n\n    public static readonly DependencyProperty CapturedCountProperty = DependencyProperty.Register(nameof(CapturedCount), typeof(int), typeof(DisplayTimer), new PropertyMetadata(0));\n\n    public static readonly DependencyProperty ManuallyCapturedCountProperty = DependencyProperty.Register(nameof(ManuallyCapturedCount), typeof(int), typeof(DisplayTimer), new PropertyMetadata(0));\n\n    public static readonly DependencyProperty IsImpreciseCaptureProperty = DependencyProperty.Register(nameof(IsImpreciseCapture), typeof(bool), typeof(DisplayTimer), new PropertyMetadata(false));\n\n\n    public TimeSpan Elapsed\n    {\n        get => (TimeSpan)GetValue(ElapsedProperty);\n        protected set => SetValue(ElapsedPropertyKey, value);\n    }\n\n    public bool IsRunning\n    {\n        get => (bool)GetValue(IsRunningProperty);\n        protected set => SetValue(IsRunningPropertyKey, value);\n    }\n\n    public bool IsPaused\n    {\n        get => (bool)GetValue(IsPausedProperty);\n        protected set => SetValue(IsPausedPropertyKey, value);\n    }\n        \n    public bool IsNegative\n    {\n        get => (bool)GetValue(IsNegativeProperty);\n        protected set => SetValue(IsNegativePropertyKey, value);\n    }\n\n\n\n    public CornerRadius CornerRadius\n    {\n        get => (CornerRadius)GetValue(CornerRadiusProperty);\n        set => SetValue(CornerRadiusProperty, value);\n    }\n\n    public int CapturedCount\n    {\n        get => (int)GetValue(CapturedCountProperty);\n        set => SetValue(CapturedCountProperty, value);\n    }\n\n    public int ManuallyCapturedCount\n    {\n        get => (int)GetValue(ManuallyCapturedCountProperty);\n        set => SetValue(ManuallyCapturedCountProperty, value);\n    }\n        \n    public bool IsImpreciseCapture\n    {\n        get => (bool)GetValue(IsImpreciseCaptureProperty);\n        set => SetValue(IsImpreciseCaptureProperty, value);\n    }\n\n\n    static DisplayTimer()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DisplayTimer), new FrameworkPropertyMetadata(typeof(DisplayTimer)));\n    }\n\n    ~DisplayTimer()\n    {\n        _timer?.Stop();\n    }\n\n\n    private void SyncElapsed()\n    {\n        Elapsed = _watch.Elapsed;\n    }\n\n    public void Start()\n    {\n        IsRunning = true;\n        IsPaused = false;\n        IsNegative = false;\n\n        if (_timer != null)\n        {\n            _watch.Start();\n            _timer.Start();\n            return;\n        }\n\n        _watch = new Stopwatch();\n        _timer = new DispatcherTimer(new TimeSpan(0, 0, 0, 0, 100), DispatcherPriority.Background, (sender, args) => { SyncElapsed(); }, Dispatcher.CurrentDispatcher);\n        SyncElapsed();\n        _watch.Start();\n        _timer.Start();\n    }\n\n    public void Pause()\n    {\n        if (!IsRunning)\n            return;\n\n        _watch.Stop();\n        _timer.Stop();\n        IsRunning = false;\n        IsPaused = true;\n    }\n\n    public void Stop()\n    {\n        _watch?.Stop();\n        _timer?.Stop();\n\n        _watch = null;\n        _timer = null;\n\n        ManuallyCapturedCount = 0;\n        Elapsed = TimeSpan.Zero;\n        IsRunning = false;\n        IsPaused = false;\n    }\n\n    public void Reset()\n    {\n        _watch.Stop();\n        _timer?.Stop();\n        IsRunning = false;\n        IsPaused = false;\n        ManuallyCapturedCount = 0;\n        Elapsed = TimeSpan.Zero;\n\n        Start();\n    }\n\n    public void SetElapsed(int seconds)\n    {\n        if (IsRunning)\n            return;\n\n        Elapsed = new TimeSpan(0, 0, 0, seconds);\n        IsNegative = Elapsed < TimeSpan.Zero;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/DoubleBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\npublic class DoubleBox : ExtendedTextBox\n{\n    #region Variables\n\n    private bool _ignore;\n    private string _baseFormat = \"{0:###,###,###,###,##0.\";\n    private string _format = \"{0:###,###,###,###,##0.00}\";\n\n    #endregion\n\n    #region Dependency Property\n\n    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(double), typeof(DoubleBox),\n        new FrameworkPropertyMetadata(double.MaxValue, OnMaximumPropertyChanged));\n\n    public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(nameof(Value), typeof(double), typeof(DoubleBox),\n        new FrameworkPropertyMetadata(0D, OnValuePropertyChanged));\n\n    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(double), typeof(DoubleBox),\n        new FrameworkPropertyMetadata(0D, OnMinimumPropertyChanged));\n\n    public static readonly DependencyProperty DecimalsProperty = DependencyProperty.Register(nameof(Decimals), typeof(int), typeof(DoubleBox),\n        new FrameworkPropertyMetadata(2, OnDecimalsPropertyChanged));\n\n    public static readonly DependencyProperty StepProperty = DependencyProperty.Register(nameof(StepValue), typeof(double), typeof(DoubleBox), \n        new FrameworkPropertyMetadata(1D));\n\n    public static readonly DependencyProperty UpdateOnInputProperty = DependencyProperty.Register(nameof(UpdateOnInput), typeof(bool), typeof(DoubleBox),\n        new FrameworkPropertyMetadata(false, OnUpdateOnInputPropertyChanged));\n\n    public static readonly DependencyProperty DefaultValueIfEmptyProperty = DependencyProperty.Register(nameof(DefaultValueIfEmpty), typeof(double), typeof(DoubleBox),\n        new FrameworkPropertyMetadata(0D));\n\n    public static readonly DependencyProperty ScaleProperty = DependencyProperty.Register(nameof(Scale), typeof(double), typeof(DoubleBox),\n        new PropertyMetadata(1D, OnScalePropertyChanged));\n\n    #endregion\n\n    #region Properties\n\n    [Bindable(true), Category(\"Common\")]\n    public double Maximum\n    {\n        get => (double)GetValue(MaximumProperty);\n        set => SetValue(MaximumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public double Value\n    {\n        get => (double)GetValue(ValueProperty);\n        set => SetValue(ValueProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public double Minimum\n    {\n        get => (double)GetValue(MinimumProperty);\n        set => SetValue(MinimumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int Decimals\n    {\n        get => (int)GetValue(DecimalsProperty);\n        set => SetValue(DecimalsProperty, value);\n    }\n\n    /// <summary>\n    /// The Increment/Decrement value.\n    /// </summary>\n    [Description(\"The Increment/Decrement value.\")]\n    public double StepValue\n    {\n        get => (double)GetValue(StepProperty);\n        set => SetValue(StepProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool UpdateOnInput\n    {\n        get => (bool)GetValue(UpdateOnInputProperty);\n        set => SetValue(UpdateOnInputProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public double DefaultValueIfEmpty\n    {\n        get => (double)GetValue(DefaultValueIfEmptyProperty);\n        set => SetValue(DefaultValueIfEmptyProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public double Scale\n    {\n        get => (double)GetValue(ScaleProperty);\n        set => SetValue(ScaleProperty, value);\n    }\n\n    #endregion\n\n    #region Properties Changed\n\n    private static void OnMaximumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DoubleBox doubleBox))\n            return;\n\n        if (doubleBox.Value > doubleBox.Maximum)\n            doubleBox.Value = doubleBox.Maximum;\n    }\n\n    private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DoubleBox doubleBox))\n            return;\n\n        if (doubleBox.Value > doubleBox.Maximum)\n            doubleBox.Value = doubleBox.Maximum;\n\n        else if (doubleBox.Value < doubleBox.Minimum)\n            doubleBox.Value = doubleBox.Minimum;\n\n        doubleBox.Value = Math.Round(doubleBox.Value, doubleBox.Decimals);\n\n        if (!doubleBox._ignore)\n        {\n            var value = string.Format(CultureInfo.CurrentCulture, doubleBox._format, doubleBox.Value * doubleBox.Scale);\n\n            if (!string.Equals(doubleBox.Text, value))\n                doubleBox.Text = value;\n        }\n\n        doubleBox.RaiseValueChangedEvent();\n    }\n\n    private static void OnMinimumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DoubleBox doubleBox))\n            return;\n\n        if (doubleBox.Value < doubleBox.Minimum)\n            doubleBox.Value = doubleBox.Minimum;\n    }\n\n    private static void OnDecimalsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DoubleBox doubleBox))\n            return;\n\n        doubleBox._format = doubleBox._baseFormat + \"\".PadRight(doubleBox.Decimals, '0') + \"}\";\n\n        doubleBox.Value = Math.Round(doubleBox.Value, doubleBox.Decimals);\n    }\n\n    private static void OnUpdateOnInputPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((DoubleBox)d).UpdateOnInput = (bool)e.NewValue;\n    }\n\n    private static void OnScalePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is DoubleBox doubleBox)) return;\n\n        //The scale value dictates the value being displayed.\n        //For example, The value 600 and the scale 1.25 should display the text 750.\n        //Text = Value * Scale.\n\n        doubleBox.Text = string.Format(CultureInfo.CurrentCulture, doubleBox._format, doubleBox.Value * doubleBox.Scale);\n    }\n\n    #endregion\n\n    #region Custom Events\n\n    public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent(\"ValueChanged\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(DoubleBox));\n\n    /// <summary>\n    /// Event raised when the numeric value is changed.\n    /// </summary>\n    public event RoutedEventHandler ValueChanged\n    {\n        add => AddHandler(ValueChangedEvent, value);\n        remove => RemoveHandler(ValueChangedEvent, value);\n    }\n\n    public void RaiseValueChangedEvent()\n    {\n        if (ValueChangedEvent == null)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(ValueChangedEvent));\n    }\n\n    #endregion\n\n    static DoubleBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DoubleBox), new FrameworkPropertyMetadata(typeof(DoubleBox)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        AddHandler(DataObject.PastingEvent, new DataObjectPastingEventHandler(OnPasting));\n\n        _format = _baseFormat + \"\".PadRight(Decimals, '0') + \"}\";\n    }\n\n    protected override void OnInitialized(EventArgs e)\n    {\n        base.OnInitialized(e);\n\n        Text = string.Format(CultureInfo.CurrentCulture, _format, Value);\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        //Only sets the focus if not clicking on the Up/Down buttons of a IntegerUpDown.\n        if (e.OriginalSource is TextBlock || e.OriginalSource is Border)\n            return;\n\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        if (e.Source is DoubleBox)\n            SelectAll();\n    }\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        if (string.IsNullOrEmpty(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        if (!IsEntryAllowed(this, e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewTextInput(e);\n    }\n\n    protected override void OnTextChanged(TextChangedEventArgs e)\n    {\n        if (!UpdateOnInput || _ignore)\n            return;\n\n        if (string.IsNullOrEmpty(Text)) return;\n        if (!IsTextAllowed(Text)) return;\n\n        _ignore = true;\n\n        Value = Math.Round(Convert.ToDouble(Text, CultureInfo.CurrentCulture) / Scale, Decimals);\n\n        _ignore = false;\n\n        base.OnTextChanged(e);\n    }\n\n    protected override void OnLostFocus(RoutedEventArgs e)\n    {\n        base.OnLostFocus(e);\n\n        if (!UpdateOnInput)\n        {\n            if (string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            {\n                Value = DefaultValueIfEmpty;\n                return;\n            }\n\n            _ignore = true;\n\n            Value = Convert.ToDouble(Text, CultureInfo.CurrentCulture);\n            Text = string.Format(CultureInfo.CurrentCulture, _format, Value);\n\n            _ignore = false;\n            return;\n        }\n\n        Text = string.Format(CultureInfo.CurrentCulture, _format, Value);\n    }\n\n    protected override void OnKeyDown(KeyEventArgs e)\n    {\n        if (e.Key == Key.Enter || e.Key == Key.Return)\n        {\n            e.Handled = true;\n            MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n        }\n\n        base.OnKeyDown(e);\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        base.OnMouseWheel(e);\n\n        if (!IsKeyboardFocusWithin)\n            return;\n\n        var step = Keyboard.Modifiers == (ModifierKeys.Shift | ModifierKeys.Control)\n            ? 50 : Keyboard.Modifiers == ModifierKeys.Shift\n                ? 10 : Keyboard.Modifiers == ModifierKeys.Control\n                    ? 5 : StepValue;\n\n        if (e.Delta > 0)\n            Value += step;\n        else\n            Value -= step;\n\n        e.Handled = true;\n    }\n\n    #endregion\n\n    #region Base Properties Changed\n\n    private void OnPasting(object sender, DataObjectPastingEventArgs e)\n    {\n        if (e.DataObject.GetDataPresent(typeof(string)))\n        {\n            var text = e.DataObject.GetData(typeof(string)) as string;\n\n            if (!IsTextAllowed(text))\n                e.CancelCommand();\n        }\n        else\n        {\n            e.CancelCommand();\n        }\n    }\n        \n    #endregion\n\n    #region Methods\n\n    private bool IsEntryAllowed(TextBox textBox, string text)\n    {\n        //Digits, points or commas.\n        var regex = new Regex(@\"^[0-9]|\\.|\\,$\"); //TODO: Support for multiple cultures.\n\n        //Checks if it's a valid char based on the context.\n        return regex.IsMatch(text) && IsEntryAllowedInContext(textBox, text);\n    }\n\n    private bool IsEntryAllowedInContext(TextBox textBox, string next)\n    {\n        //if number, allow.\n        if (char.IsNumber(next.ToCharArray().FirstOrDefault()))\n            return true;\n\n        #region Thousands\n\n        var thousands = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator;\n        var thousandsChar = thousands.ToCharArray().FirstOrDefault();\n        var decimals = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;\n        var decimalsChar = decimals.ToCharArray().FirstOrDefault();\n\n        if (next.Equals(thousands))\n        {\n            var textAux = textBox.Text;\n\n            if (!string.IsNullOrEmpty(textBox.SelectedText))\n                textAux = textAux.Replace(textBox.SelectedText, \"\");\n\n            var before = textAux.Substring(0, textBox.SelectionStart);\n            var after = textAux.Substring(textBox.SelectionStart);\n\n            //If there's no text, is not allowed to add a thousand separator.\n            if (string.IsNullOrEmpty(after + before)) return false;\n\n            //Before the carret.\n            if (!string.IsNullOrEmpty(before))\n            {\n                //You can't add a thousand separator after the decimal.\n                if (before.Contains(decimals)) return false;\n\n                //Check the previous usage of a thousand separator.\n                if (before.Contains(thousands))\n                {\n                    var split = before.Split(thousandsChar);\n\n                    //You can't add a thousand separators closer than 3 chars from each other.\n                    if (split.Last().Length != 3) return false;\n                }\n            }\n\n            //After the carret.\n            if (!string.IsNullOrEmpty(after))\n            {\n                var split = after.Split(thousandsChar, decimalsChar);\n\n                //You can't add a thousand separators closer than 3 chars from another separator, decimal or thousands.\n                if (split.First().Length != 3) return true;\n            }\n\n            return false;\n        }\n\n        #endregion\n\n        #region Decimal\n\n        if (next.Equals(decimals))\n        {\n            return !textBox.Text.Any(x => x.Equals(decimalsChar));\n        }\n\n        #endregion\n\n        return true;\n    }\n\n    private bool IsTextAllowed(string text)\n    {\n        return double.TryParse(text, out double result);\n\n        //var regex = new Regex(@\"^((\\d+)|(\\d{1,3}(\\.\\d{3})+)|(\\d{1,3}(\\.\\d{3})(\\,\\d{3})+))((\\,\\d{4})|(\\,\\d{3})|(\\,\\d{2})|(\\,\\d{1})|(\\,))?$\", RegexOptions.CultureInvariant);\n        //return regex.IsMatch(text);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DoubleUpDown.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls.Primitives;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Double only control with up and down buttons to change the value.\n/// </summary>\npublic class DoubleUpDown : DoubleBox\n{\n    #region Variables\n\n    private RepeatButton _upButton;\n    private RepeatButton _downButton;\n\n    #endregion\n\n    static DoubleUpDown()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DoubleUpDown), new FrameworkPropertyMetadata(typeof(DoubleUpDown)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        //Internal controls.\n        _upButton = Template.FindName(\"UpButton\", this) as RepeatButton;\n        _downButton = Template.FindName(\"DownButton\", this) as RepeatButton;\n\n        if (_upButton != null)\n            _upButton.Click += UpButton_Click;\n\n        if (_downButton != null)\n            _downButton.Click += DownButton_Click;\n    }\n\n    #region Event Handlers\n\n    private void DownButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Value > Minimum)\n            Value -= StepValue;\n    }\n\n    private void UpButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Value < Maximum)\n            Value += StepValue;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DragScrollGrid.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Scroll by Drag Grid\n/// TODO: Make a grid that reacts to the drag sideway to increase or decrease a number.\n/// </summary>\npublic class DragScrollGrid : Grid\n{\n    #region Variables\n\n    private Point _lastPosition;\n\n    public static readonly DependencyProperty IsDraggableProperty;\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// If true, will enable the value increase/decrease by sideway drag.\n    /// </summary>\n    public bool IsDraggable\n    {\n        get => (bool)GetValue(IsDraggableProperty);\n        set => SetValue(IsDraggableProperty, value);\n    }\n\n    #endregion\n\n    static DragScrollGrid()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DragScrollGrid), new FrameworkPropertyMetadata(typeof(DragScrollGrid)));\n\n        IsDraggableProperty = DependencyProperty.Register(\"IsDraggable\", typeof(bool), typeof(DragScrollGrid), new PropertyMetadata(false));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        MouseDown += DragScrollGrid_MouseDown;\n        MouseMove += DragScrollGrid_MouseMove;\n        MouseUp += DragScrollGrid_MouseUp;\n    }\n\n    #region Events\n\n    private void DragScrollGrid_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)\n    {\n        Mouse.Capture(this);\n        Cursor = Cursors.ScrollWE;\n    }\n\n    private void DragScrollGrid_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)\n    {\n        if (!IsMouseCaptured) return;\n        if ((int)_lastPosition.X == (int)e.GetPosition(this).X) return;\n\n        if (_lastPosition.X > e.GetPosition(this).X)\n        {\n            //To the Left.\n            //Value--;\n        }\n\n        //To the right.\n        //Value++;\n    }\n\n    private void DragScrollGrid_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)\n    {\n        ReleaseMouseCapture();\n        Cursor = Cursors.Arrow;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DrawingCanvas.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Ink;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing ScreenToGif.Controls.Shapes;\nusing ScreenToGif.Domain.Events;\n\nnamespace ScreenToGif.Controls;\n\ninternal class DrawingCanvas : Control\n{\n    internal enum DrawingModes\n    {\n        None = 0,\n        Ink,\n        Select,\n        EraseByPoint,\n        EraseByObject,\n        Shape\n    }\n\n    internal enum Shapes\n    {\n        Rectangle,\n        Ellipse,\n        Triangle,\n        Arrow,\n        Line,\n    }\n\n\n    #region Variables\n\n    private Canvas _mainCanvas;\n    private InkCanvas _mainInkCanvas;\n\n    private AdornerLayer _adornerLayer;\n\n    /// <summary>\n    /// The start point for the drag operation.\n    /// </summary>\n    private Point _startPoint;\n\n    /// <summary>\n    /// The list of currently selected shapes. All selected shapes will have their own element adorner.\n    /// </summary>\n    private readonly List<Shape> _selectedShapes = new List<Shape>();\n\n    /// <summary>\n    /// The current shape being drawn.\n    /// </summary>\n    private Shape _currentShape;\n\n    /// <summary>\n    /// The most distant point within the shape's boundary for the resize operation.\n    /// </summary>\n    private Point _mostDistantPoint;\n\n    /// <summary>\n    /// The less distant point (current point) within the shape's boundary for the resize operation.\n    /// </summary>\n    private Point _currentPoint;\n\n    /// <summary>\n    /// Horizontal orientation of the resize operation.\n    /// </summary>\n    private bool _isRightToLeft;\n\n    /// <summary>\n    /// Vertical orientation of the resize operation.\n    /// </summary>\n    private bool _isBottomToTop;\n\n    #endregion\n\n    #region Dependency properties\n\n    internal static readonly DependencyProperty DrawingModeProperty = DependencyProperty.Register(nameof(DrawingMode), typeof(DrawingModes), typeof(DrawingCanvas), new PropertyMetadata(default(DrawingModes), DrawingMode_PropertyChanged));\n\n    internal static readonly DependencyProperty CurrentShapeProperty = DependencyProperty.Register(nameof(CurrentShape), typeof(Shapes), typeof(DrawingCanvas), new PropertyMetadata(default(Shapes)));\n\n    internal static readonly DependencyProperty SelectionProperty = DependencyProperty.Register(nameof(Selection), typeof(Rect), typeof(DrawingCanvas), new PropertyMetadata(default(Rect)));\n\n    internal static readonly DependencyProperty RenderRegionProperty = DependencyProperty.Register(nameof(RenderRegion), typeof(Rect), typeof(DrawingCanvas), new PropertyMetadata(default(Rect)));\n\n    internal static readonly DependencyProperty IsDrawingProperty = DependencyProperty.Register(nameof(IsDrawing), typeof(bool), typeof(DrawingCanvas), new PropertyMetadata(false));\n\n    internal static readonly DependencyProperty ControlsZIndexProperty = DependencyProperty.Register(nameof(ControlsZIndex), typeof(long), typeof(DrawingCanvas), new PropertyMetadata(1L));\n\n\n    internal static readonly DependencyProperty StrokeThicknessProperty = DependencyProperty.Register(nameof(StrokeThickness), typeof(double), typeof(DrawingCanvas), new PropertyMetadata(2d, Visual_PropertyChanged));\n\n    internal static readonly DependencyProperty StrokeProperty = DependencyProperty.Register(nameof(Stroke), typeof(Brush), typeof(DrawingCanvas), new PropertyMetadata(Brushes.Black, Visual_PropertyChanged));\n\n    internal static readonly DependencyProperty FillProperty = DependencyProperty.Register(nameof(Fill), typeof(Brush), typeof(DrawingCanvas), new PropertyMetadata(Brushes.Transparent, Visual_PropertyChanged));\n\n    internal static readonly DependencyProperty RadiusProperty = DependencyProperty.Register(nameof(Radius), typeof(double), typeof(DrawingCanvas),\n        new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.AffectsRender, Visual_PropertyChanged));\n\n    public static readonly DependencyProperty StrokeDashArrayProperty = DependencyProperty.Register(nameof(StrokeDashArray), typeof(DoubleCollection), typeof(DrawingCanvas),\n        new FrameworkPropertyMetadata(new DoubleCollection(), FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender, Visual_PropertyChanged));\n\n    #endregion\n\n    #region Properties\n\n    internal DrawingModes DrawingMode\n    {\n        get => (DrawingModes)GetValue(DrawingModeProperty);\n        set => SetValue(DrawingModeProperty, value);\n    }\n\n    internal Shapes CurrentShape\n    {\n        get => (Shapes)GetValue(CurrentShapeProperty);\n        set => SetValue(CurrentShapeProperty, value);\n    }\n\n    internal Rect Selection\n    {\n        get => (Rect)GetValue(SelectionProperty);\n        set => SetValue(SelectionProperty, value);\n    }\n\n    internal Rect RenderRegion\n    {\n        get => (Rect)GetValue(RenderRegionProperty);\n        set => SetValue(RenderRegionProperty, value);\n    }\n\n    internal bool IsDrawing\n    {\n        get => (bool)GetValue(IsDrawingProperty);\n        set => SetValue(IsDrawingProperty, value);\n    }\n\n    internal long ControlsZIndex\n    {\n        get => (long)GetValue(ControlsZIndexProperty);\n        set => SetValue(ControlsZIndexProperty, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double StrokeThickness\n    {\n        get => (double)GetValue(StrokeThicknessProperty);\n        set => SetValue(StrokeThicknessProperty, value);\n    }\n\n    public Brush Stroke\n    {\n        get => (Brush)GetValue(StrokeProperty);\n        set => SetValue(StrokeProperty, value);\n    }\n\n    public Brush Fill\n    {\n        get => (Brush)GetValue(FillProperty);\n        set => SetValue(FillProperty, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double Radius\n    {\n        get => (double)GetValue(RadiusProperty);\n        set => SetValue(RadiusProperty, value);\n    }\n\n    public DoubleCollection StrokeDashArray\n    {\n        get => (DoubleCollection)GetValue(StrokeDashArrayProperty);\n        set => SetValue(StrokeDashArrayProperty, value);\n    }\n\n    public int ShapesCount => _mainCanvas?.Children.Count ?? 0;\n\n    #endregion\n\n    static DrawingCanvas()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DrawingCanvas), new FrameworkPropertyMetadata(typeof(DrawingCanvas)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _mainCanvas = Template.FindName(\"MainCanvas\", this) as Canvas;\n        _mainInkCanvas = Template.FindName(\"MainInkCanvas\", this) as InkCanvas;\n\n        if (_mainInkCanvas != null)\n        {\n            _mainInkCanvas.PreviewMouseLeftButtonDown += MainInkCanvas_MouseLeftButtonDown;\n            _mainInkCanvas.StrokeCollected += MainInkCanvas_StrokeCollected;\n        }\n\n        _adornerLayer = AdornerLayer.GetAdornerLayer(this);\n    }\n\n    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        Keyboard.Focus(this);\n\n        _startPoint = e.GetPosition(this);\n\n        switch (DrawingMode)\n        {\n            case DrawingModes.Select:\n            {\n                if ((Keyboard.Modifiers & ModifierKeys.Control) == 0)\n                {\n                    RemoveAllAdorners();\n                    _selectedShapes.Clear();\n                }\n\n                //When the user clicks exactly on top of a shape, it will be selected.\n                var hitTest = _mainCanvas.Children.OfType<Shape>().Where(w => w.Tag == null).FirstOrDefault(f => f.RenderedGeometry.FillContains(e.GetPosition(f)));\n\n                if (hitTest != null)\n                {\n                    SelectShape(hitTest);\n                }\n                else\n                {\n                    //Starts drawing selection retangle.\n                    Selection = new Rect(_startPoint, new Size(0, 0));\n\n                    CaptureMouse();\n                }\n\n                break;\n            }\n            case DrawingModes.Shape:\n            {\n                RemoveAllAdorners();\n\n                RenderRegion = new Rect(_startPoint, new Size(0, 0));\n                IsDrawing = true;\n\n                CaptureMouse();\n\n                CalculateOrientation(_startPoint, _startPoint);\n                RenderShape();\n\n                break;\n            }\n        }\n\n        e.Handled = true;\n        base.OnMouseLeftButtonDown(e);\n    }\n\n    protected override void OnMouseMove(MouseEventArgs e)\n    {\n        if (!IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed)\n            return;\n\n        if (DrawingMode == DrawingModes.Select && ((_selectedShapes?.Count ?? 0) == 0 || (Keyboard.Modifiers & ModifierKeys.Control) != 0))\n        {\n            var current = GetBoundedCoordinates(e);\n\n            Selection = new Rect(Math.Min(current.X, _startPoint.X), Math.Min(current.Y, _startPoint.Y), Math.Abs(current.X - _startPoint.X), Math.Abs(current.Y - _startPoint.Y));\n        }\n        else if (DrawingMode == DrawingModes.Shape)\n        {\n            var current = GetBoundedCoordinates(e);\n\n            RenderRegion = Rect.Inflate(new Rect(Math.Min(current.X, _startPoint.X), Math.Min(current.Y, _startPoint.Y), Math.Abs(current.X - _startPoint.X), Math.Abs(current.Y - _startPoint.Y)), -0.6d, -0.6d);\n\n            CalculateOrientation(_startPoint, current);\n            RenderShape();\n        }\n\n        base.OnMouseMove(e);\n    }\n\n    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)\n    {\n        if (DrawingMode == DrawingModes.Select)\n        {\n            if ((Keyboard.Modifiers & ModifierKeys.Control) == 0)\n            {\n                RemoveAllAdorners();\n                _selectedShapes.Clear();\n            }\n\n            var selectedShapes = GetSelectedShapes(_mainCanvas, new RectangleGeometry(Selection)); //_mainCanvas.Children.OfType<Shape>().Where(w => Selection.Contains(w.)).ToList();\n\n            if (selectedShapes.Any())\n            {\n                foreach (var shape in selectedShapes)\n                    SelectShape(shape);\n            }\n\n            Selection = Rect.Empty;\n            ReleaseMouseCapture();\n        }\n        else if (DrawingMode == DrawingModes.Shape)\n        {\n            ReleaseMouseCapture();\n\n            RenderShape();\n            RemoveIfTooSmall();\n\n            IsDrawing = false;\n\n            _selectedShapes?.Clear();\n            SelectShape(_currentShape);\n\n            _currentShape = null;\n        }\n\n        base.OnMouseLeftButtonUp(e);\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        switch (e.Key)\n        {\n            case Key.Back:\n            case Key.Delete:\n                RemoveAllAdorners();\n                RemoveAllSelectedShapes();\n\n                if (_selectedShapes.Count > 0)\n                    e.Handled = true;\n                break;\n\n            //TODO: Cntrl + C, Ctrl + V,\n        }\n\n        base.OnPreviewKeyDown(e);\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        double step;\n\n        switch (Keyboard.Modifiers)\n        {\n            case ModifierKeys.Alt:\n                step = 90;\n                break;\n            case ModifierKeys.Control:\n                step = 1;\n                break;\n            case ModifierKeys.Shift:\n                step = 20;\n                break;\n            default:\n                return;\n        }\n\n        RotateAllSelectedShapes(e.Delta > 0 ? step : step * -1);\n\n        base.OnMouseWheel(e);\n    }\n\n    #endregion\n\n    #region Methods\n\n    private Point GetBoundedCoordinates(MouseEventArgs e)\n    {\n        var current = e.GetPosition(this);\n\n        if (current.X < -1)\n            current.X = -1;\n\n        if (current.Y < -1)\n            current.Y = -1;\n\n        if (current.X > ActualWidth)\n            current.X = ActualWidth;\n\n        if (current.Y > ActualHeight)\n            current.Y = ActualHeight;\n\n        return current;\n    }\n\n    private void RemoveAllAdorners()\n    {\n        if (_selectedShapes == null)\n            return;\n\n        foreach (var shape in _selectedShapes.Where(w => w != null))\n        {\n            foreach (var adorner in _adornerLayer?.GetAdorners(shape)?.OfType<ElementAdorner>() ?? new List<ElementAdorner>())\n                _adornerLayer?.Remove(adorner);\n        }\n    }\n\n    private void RemoveAllSelectedShapes()\n    {\n        if (_selectedShapes == null)\n            return;\n\n        foreach (var shape in _selectedShapes)\n            _mainCanvas.Children.Remove(shape);\n\n        _selectedShapes.Clear();\n    }\n\n    private void RotateAllSelectedShapes(double angleDifference)\n    {\n        if (_selectedShapes == null)\n            return;\n\n        foreach (var shape in _selectedShapes)\n            if (_adornerLayer.GetAdorners(shape)?[0] is ElementAdorner ad)\n                ad.Angle += angleDifference;\n    }\n\n    private void CalculateOrientation(Point start, Point current)\n    {\n        _isBottomToTop = start.Y < current.Y;\n        _isRightToLeft = start.X < current.X;\n        _mostDistantPoint = start;\n        _currentPoint = current;\n    }\n\n    private void RenderShape()\n    {\n        if (RenderRegion.IsEmpty)\n        {\n            if (_currentShape != null)\n                _mainCanvas.Children.Remove(_currentShape);\n\n            return;\n        }\n\n        if (_currentShape != null)\n        {\n            Canvas.SetTop(_currentShape, RenderRegion.Top);\n            Canvas.SetLeft(_currentShape, RenderRegion.Left);\n            _currentShape.Width = RenderRegion.Width;\n            _currentShape.Height = RenderRegion.Height;\n\n            if (_currentShape is Arrow arrow)\n            {\n                arrow.X1 = RenderRegion.Left - _mostDistantPoint.X;\n                arrow.X2 = RenderRegion.Left - Math.Abs(_isRightToLeft ? _mostDistantPoint.X - _currentPoint.X : _currentPoint.X - _mostDistantPoint.X);\n                arrow.Y1 = RenderRegion.Top - _mostDistantPoint.Y;\n                arrow.Y2 = RenderRegion.Top - Math.Abs(_mostDistantPoint.Y - _currentPoint.Y);\n            }\n            return;\n        }\n\n        switch (CurrentShape)\n        {\n            case Shapes.Rectangle:\n                _currentShape = new Rectangle\n                {\n                    Width = RenderRegion.Width,\n                    Height = RenderRegion.Height,\n                    Stroke = Stroke,\n                    StrokeThickness = StrokeThickness,\n                    StrokeDashArray = StrokeDashArray,\n                    Fill = Fill,\n                    RadiusX = Radius,\n                    RadiusY = Radius\n                };\n                break;\n            case Shapes.Ellipse:\n                _currentShape = new Ellipse\n                {\n                    Width = RenderRegion.Width,\n                    Height = RenderRegion.Height,\n                    Stroke = Stroke,\n                    StrokeThickness = StrokeThickness,\n                    StrokeDashArray = StrokeDashArray,\n                    Fill = Fill,\n                };\n                break;\n            case Shapes.Triangle:\n                _currentShape = new Triangle\n                {\n                    Width = RenderRegion.Width,\n                    Height = RenderRegion.Height,\n                    Stroke = Stroke,\n                    StrokeThickness = StrokeThickness,\n                    StrokeDashArray = StrokeDashArray,\n                    Fill = Fill,\n                    //RadiusX = Radius,\n                    //RadiusY = Radius\n                };\n                break;\n            case Shapes.Arrow:\n                _currentShape = new Arrow\n                {\n                    Width = RenderRegion.Width,\n                    Height = RenderRegion.Height,\n                    Stroke = Stroke,\n                    StrokeThickness = StrokeThickness,\n                    StrokeDashArray = StrokeDashArray,\n                    Fill = Fill,\n                    Stretch = Stretch.Fill,\n                    HeadHeight = 10,\n                    HeadWidth = 10,\n                    X1 = RenderRegion.Left - _mostDistantPoint.X,\n                    X2 = RenderRegion.Left - Math.Abs(_isRightToLeft ? _mostDistantPoint.X - _currentPoint.X : _currentPoint.X - _mostDistantPoint.X),\n                    Y1 = RenderRegion.Top - _mostDistantPoint.Y,\n                    Y2 = RenderRegion.Top - Math.Abs(_mostDistantPoint.Y - _currentPoint.Y)\n                };\n                break;\n        }\n\n        if (_currentShape == null)\n            return;\n\n        _mainCanvas.Children.Add(_currentShape);\n\n        Canvas.SetLeft(_currentShape, RenderRegion.Left);\n        Canvas.SetTop(_currentShape, RenderRegion.Top);\n        Panel.SetZIndex(_currentShape, _mainCanvas.Children.OfType<Shape>().Where(w => w.Tag == null).Max(Panel.GetZIndex) + 1);\n    }\n\n    private void RemoveIfTooSmall()\n    {\n        if (!(RenderRegion.Width + RenderRegion.Height < 10))\n            return;\n\n        _mainCanvas.Children.Remove(_currentShape);\n    }\n\n    private List<Shape> GetSelectedShapes(Visual element, Geometry geometry)\n    {\n        var shapes = new List<Shape>();\n\n        VisualTreeHelper.HitTest(element, null, result =>\n            {\n                if (result.VisualHit is Shape shape && shape.Tag == null)\n                    shapes.Add(shape);\n\n                return HitTestResultBehavior.Continue;\n            },\n            new GeometryHitTestParameters(geometry));\n\n        return shapes;\n    }\n\n    private void SelectShape(Shape shape)\n    {\n        if (shape == null)\n            return;\n\n        if (!_selectedShapes.Contains(shape))\n            _selectedShapes.Add(shape);\n\n        AdjustDepth();\n\n        var adorner = new ElementAdorner(shape, true, true, true, _mainCanvas, _startPoint);\n        adorner.Manipulated += Adorner_Manipulated;\n        adorner.RotationResetRequested += Adorner_RotationResetRequested;\n        adorner.Removed += Adorner_Removed;\n        adorner.MouseLeftButtonDown += Adorner_MouseLeftButtonDown;\n        _adornerLayer.Add(adorner);\n    }\n\n    private void DeselectShape(Shape shape)\n    {\n        if (shape == null)\n            return;\n\n        if (!_selectedShapes.Contains(shape))\n            return;\n\n        _selectedShapes.Remove(shape);\n\n        foreach (var adorner in _adornerLayer?.GetAdorners(shape)?.OfType<ElementAdorner>() ?? new List<ElementAdorner>())\n            _adornerLayer?.Remove(adorner);\n    }\n\n    private void AdjustDepth()\n    {\n        //0 = Further behind.\n        //999 = Further in front.\n        var indexes = _mainCanvas.Children.OfType<Shape>().Where(w => w.Tag == null).Select(Panel.GetZIndex).OrderBy(o => o).ToList();\n\n        if (indexes.Count == 0)\n            return;\n\n        //Make all shapes go 1 step behind.\n        foreach (var shape in _mainCanvas.Children.OfType<Shape>().Where(w => w.Tag == null))\n            Panel.SetZIndex(shape, indexes.IndexOf(Panel.GetZIndex(shape)));\n\n        //In order to show the selected shapes in front, the Z order should be greater than the rest of the shapes.\n        var max = _mainCanvas.Children.OfType<Shape>().Where(w => w.Tag == null).Max(Panel.GetZIndex);\n\n        //Make all selected shapes go 1 step to the front, making sure to respect the current Z order.\n        foreach (var shape in _selectedShapes.OrderBy(Panel.GetZIndex))\n            Panel.SetZIndex(shape, ++max);\n\n        //All design controls should be at the top.\n        ControlsZIndex = ++max;\n    }\n\n    public void DeselectAll()\n    {\n        RemoveAllAdorners();\n\n        _selectedShapes?.Clear();\n    }\n\n    public void RemoveAllShapes()\n    {\n        DeselectAll();\n\n        _mainCanvas.Children.Clear();\n    }\n\n    #endregion\n\n    #region Events\n\n    private static void DrawingMode_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not DrawingCanvas canvas || canvas._mainInkCanvas == null)\n            return;\n\n        canvas._mainInkCanvas.Visibility = canvas.DrawingMode == DrawingModes.Ink ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    private static void Visual_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not DrawingCanvas canvas)\n            return;\n\n        if (canvas._mainInkCanvas != null)\n        {\n            canvas._mainInkCanvas.DefaultDrawingAttributes = new DrawingAttributes\n            {\n                Color = canvas.Stroke is SolidColorBrush color ? color.Color : Colors.Black,\n                Height = Math.Max(canvas.StrokeThickness, 1),\n                Width = Math.Max(canvas.StrokeThickness, 1),\n            };\n        }\n\n        if (canvas._selectedShapes == null)\n            return;\n\n        //Change the settings of the selected shapes.\n        foreach (var shape in canvas._selectedShapes)\n        {\n            shape.Stroke = canvas.Stroke;\n            shape.StrokeThickness = canvas.StrokeThickness;\n            shape.StrokeDashArray = canvas.StrokeDashArray;\n            shape.Fill = canvas.Fill;\n\n            if (shape is Rectangle rect)\n                rect.RadiusX = rect.RadiusY = canvas.Radius;\n        }\n    }\n\n    private void Adorner_Manipulated(object sender, ManipulatedEventArgs args)\n    {\n        if (sender is not ElementAdorner adorner)\n            return;\n\n        foreach (var shape in _selectedShapes)\n        {\n            if (Equals(shape, adorner.AdornedElement)) continue;\n\n            if (_adornerLayer.GetAdorners(shape)?[0] is ElementAdorner ad)\n                ad.Angle += args.AngleDifference;\n\n            if (Math.Abs(args.HeightDifference) > 0.1 && shape.ActualHeight + args.HeightDifference > 10 && shape.ActualHeight + args.HeightDifference <= _mainCanvas.ActualHeight)\n                shape.Height += args.HeightDifference;\n            //shape.Height = shape.ActualHeight + args.HeightDifference;\n\n            if (Math.Abs(args.WidthDifference) > 0.1 && shape.ActualWidth + args.WidthDifference > 10 && shape.ActualWidth + args.WidthDifference <= _mainCanvas.ActualWidth)\n                shape.Width += args.WidthDifference;\n            //shape.Width = shape.ActualWidth + args.WidthDifference;\n\n            if (Canvas.GetTop(shape) + args.TopDifference >= 0 && Canvas.GetTop(shape) + args.TopDifference + shape.ActualHeight < _mainCanvas.ActualHeight)\n                Canvas.SetTop(shape, Canvas.GetTop(shape) + args.TopDifference);\n\n            if (Canvas.GetLeft(shape) + args.LeftDifference >= 0 && Canvas.GetLeft(shape) + args.LeftDifference + shape.ActualWidth < _mainCanvas.ActualWidth)\n                Canvas.SetLeft(shape, Canvas.GetLeft(shape) + args.LeftDifference);\n        }\n    }\n\n    private void Adorner_RotationResetRequested(object sender, RoutedEventArgs e)\n    {\n        if (sender is not ElementAdorner adorner)\n            return;\n\n        foreach (var shape in _selectedShapes)\n        {\n            if (_adornerLayer.GetAdorners(shape)?[0] is ElementAdorner ad)\n                ad.Angle = 0;\n        }\n    }\n\n    private void Adorner_Removed(object sender, RoutedEventArgs e)\n    {\n        RemoveAllAdorners();\n        RemoveAllSelectedShapes();\n    }\n\n    private void Adorner_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if ((Keyboard.Modifiers & ModifierKeys.Control) == 0)\n            return;\n\n        var adorner = sender as ElementAdorner;\n        var shape = adorner?.AdornedElement as Shape;\n\n        if (_selectedShapes.Contains(shape))\n            DeselectShape(shape);\n    }\n\n    private void MainInkCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        RemoveAllAdorners();\n        _selectedShapes.Clear();\n    }\n\n    private void MainInkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)\n    {\n        foreach (var stroke in _mainInkCanvas.Strokes)\n        {\n            if (stroke.GetBounds().Width < 12 || stroke.GetBounds().Height < 12)\n                continue;\n\n            var shape = new Polyline\n            {\n                Stroke = new SolidColorBrush(stroke.DrawingAttributes.Color),\n                StrokeThickness = StrokeThickness, //How? These strokes can receive pressure info.\n                StrokeDashArray = StrokeDashArray,\n                FillRule = FillRule.EvenOdd,\n                Stretch = Stretch.Fill\n            };\n\n            var points = new PointCollection();\n            var minTop = stroke.StylusPoints.Min(m => m.Y);\n            var minLeft = stroke.StylusPoints.Min(m => m.X);\n\n            foreach (var point in stroke.StylusPoints)\n            {\n                var x = point.X - minLeft;\n                var y = point.Y - minTop;\n\n                points.Add(new Point(x, y));\n            }\n\n            shape.Points = points;\n\n            _mainCanvas.Children.Add(shape);\n            SelectShape(shape);\n\n            Canvas.SetLeft(shape, minLeft);\n            Canvas.SetTop(shape, minTop);\n\n            AdjustDepth();\n        }\n\n        _mainInkCanvas.Strokes.Clear();\n\n        Keyboard.Focus(this);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/DropDownButton.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// A non-editable ComboBox style.\n/// </summary>\npublic class DropDownButton : ComboBox\n{\n    #region Variables\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(DropDownButton));\n    public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(nameof(Description), typeof(string), typeof(DropDownButton), new FrameworkPropertyMetadata());\n    public static readonly DependencyProperty MaxSizeProperty = DependencyProperty.Register(nameof(MaxSize), typeof(double), typeof(DropDownButton), new FrameworkPropertyMetadata(26.0));\n    public static readonly DependencyProperty IsVerticalProperty = DependencyProperty.Register(nameof(IsVertical), typeof(bool), typeof(DropDownButton), new FrameworkPropertyMetadata(false));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The icon of the button.\n    /// </summary>\n    [Description(\"The icon of the DropDownButton.\"), Category(\"Common\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\"), Category(\"Common\")]\n    public double MaxSize\n    {\n        get => (double)GetValue(MaxSizeProperty);\n        set => SetCurrentValue(MaxSizeProperty, value);\n    }\n\n    /// <summary>\n    /// The text of the control.\n    /// </summary>\n    [Description(\"The text of the control.\"), Category(\"Common\")]\n    public string Description\n    {\n        get => (string)GetValue(DescriptionProperty);\n        set => SetCurrentValue(DescriptionProperty, value);\n    }\n\n    /// <summary>\n    /// True if vertical style.\n    /// </summary>\n    [Description(\"True if vertical style.\"), Category(\"Common\")]\n    public bool IsVertical\n    {\n        get => (bool)GetValue(IsVerticalProperty);\n        set => SetCurrentValue(IsVerticalProperty, value);\n    }\n\n    #endregion\n\n    static DropDownButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(DropDownButton), new FrameworkPropertyMetadata(typeof(DropDownButton)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/DynamicGrid.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\npublic class DynamicGrid : Grid\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty FirstColumnProperty = DependencyProperty.Register(nameof(FirstColumn), typeof(int), typeof(DynamicGrid),\n        new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsMeasure), ValidateFirstColumn);\n\n    public static readonly DependencyProperty ColumnsProperty = DependencyProperty.Register(nameof(Columns), typeof(int), typeof(DynamicGrid), new\n        FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsMeasure), ValidateColumns);\n\n    public static readonly DependencyProperty RowsProperty = DependencyProperty.Register(nameof(Rows), typeof(int), typeof(DynamicGrid),\n        new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsMeasure), ValidateRows);\n\n    public static readonly DependencyProperty IsReversedProperty = DependencyProperty.Register(nameof(IsReversed), typeof(bool), typeof(DynamicGrid),\n        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));\n\n    #endregion\n\n    #region Properties\n\n    ///<summary>Gets or sets the number of leading blank cells in the first row of the grid.  </summary>\n    ///<returns>The number of empty cells that are in the first row of the grid. The default is 0.</returns>\n    public int FirstColumn\n    {\n        get => (int)GetValue(FirstColumnProperty);\n        set => SetValue(FirstColumnProperty, value);\n    }\n\n    /// <summary>Gets or sets the number of columns that are in the grid.  </summary>\n    /// <returns>The number of columns that are in the grid. The default is 0. </returns>\n    public int Columns\n    {\n        get => (int)GetValue(ColumnsProperty);\n        set => SetValue(ColumnsProperty, value);\n    }\n\n    /// <summary>Gets or sets the number of rows that are in the grid.  </summary>\n    /// <returns>The number of rows that are in the grid. The default is 0.</returns>\n    public int Rows\n    {\n        get => (int)GetValue(RowsProperty);\n        set => SetValue(RowsProperty, value);\n    }\n\n    public bool IsReversed\n    {\n        get => (bool)GetValue(IsReversedProperty);\n        set => SetValue(IsReversedProperty, value);\n    }\n\n    #endregion\n\n    #region Coerce\n\n    private static bool ValidateFirstColumn(object o)\n    {\n        return (int)o >= 0;\n    }\n\n    private static bool ValidateRows(object o)\n    {\n        return (int)o >= 0;\n    }\n\n    private static bool ValidateColumns(object o)\n    {\n        return (int)o >= 0;\n    }\n\n    #endregion\n\n    protected override Size MeasureOverride(Size constraint)\n    {\n        UpdateComputedValues();\n\n        RowDefinitions.Clear();\n        ColumnDefinitions.Clear();\n\n        for (var i = 0; i < Rows; i++)\n            RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });\n\n        for (var i = 0; i < Columns; i++)\n            ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });\n\n        var count = 0;\n        for (var r = 0; r < Rows; r++)\n        for (var c = 0; c < Columns; c++)\n        {\n            if (count > Children.Count - 1)\n                continue;\n\n            Children[count].Measure(constraint);\n\n            if (RowDefinitions[r].MinHeight < Children[count].DesiredSize.Height)\n                RowDefinitions[r].MinHeight = Children[count].DesiredSize.Height;\n\n            if (ColumnDefinitions[c].MinWidth < Children[count].DesiredSize.Width)\n                ColumnDefinitions[c].MinWidth = Children[count].DesiredSize.Width + 6;\n\n            SetColumn(Children[count], c);\n            SetRow(Children[count], r);\n            count++;\n        }\n            \n        return base.MeasureOverride(constraint);\n    }\n\n    //protected Size ArrangeOverride2(Size arrangeSize)\n    //{\n    //    var finalRect = new Rect(0.0, 0.0, arrangeSize.Width / Columns, arrangeSize.Height / Rows);\n    //    var width = finalRect.Width;\n    //    var num = arrangeSize.Width - 1.0;\n\n    //    finalRect.X += finalRect.Width * FirstColumn;\n\n    //    if (IsReversed)\n    //    {\n    //        for (var i = InternalChildren.Count - 1; i >= 0; i--)\n    //        {\n    //            InternalChildren[i].Arrange(finalRect);\n\n    //            if (InternalChildren[i].Visibility != Visibility.Collapsed)\n    //            {\n    //                finalRect.X += width;\n\n    //                if (finalRect.X >= num)\n    //                {\n    //                    finalRect.Y += finalRect.Height;\n    //                    finalRect.X = 0.0;\n    //                }\n    //            }\n    //        }\n\n    //        return arrangeSize;\n    //    }\n\n    //    foreach (UIElement internalChild in InternalChildren)\n    //    {\n    //        internalChild.Arrange(finalRect);\n\n    //        if (internalChild.Visibility != Visibility.Collapsed)\n    //        {\n    //            finalRect.X += width;\n\n    //            if (finalRect.X >= num)\n    //            {\n    //                finalRect.Y += finalRect.Height;\n    //                finalRect.X = 0.0;\n    //            }\n    //        }\n    //    }\n\n    //    return arrangeSize;\n    //}\n\n    private void UpdateComputedValues()\n    {\n        if (FirstColumn >= Columns)\n            FirstColumn = 0;\n\n        if (Rows != 0 && Columns != 0)\n            return;\n\n        var num = 0;\n        var index = 0;\n\n        for (var count = InternalChildren.Count; index < count; ++index)\n        {\n            if (InternalChildren[index].Visibility != Visibility.Collapsed)\n                ++num;\n        }\n\n        if (num == 0)\n            num = 1;\n\n        if (Rows == 0)\n        {\n            if (Columns > 0)\n            {\n                Rows = (num + FirstColumn + (Columns - 1)) / Columns;\n            }\n            else\n            {\n                Rows = (int)Math.Sqrt(num);\n\n                if (Rows * Rows < num)\n                    Rows = Rows + 1;\n\n                Columns = Rows;\n            }\n        }\n        else\n        {\n            if (Columns != 0)\n                return;\n\n            Columns = (num + (Rows - 1)) / Rows;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ElementAdorner.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing ScreenToGif.Domain.Events;\n\nnamespace ScreenToGif.Controls;\n\ninternal class ElementAdorner : Adorner\n{\n    #region Dependency properties\n\n    public static readonly DependencyProperty AngleProperty = DependencyProperty.Register(\"Angle\", typeof(double), typeof(ElementAdorner), new PropertyMetadata(0d, Angle_PropertyChanged));\n\n    private static void Angle_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var adorner = d as ElementAdorner;\n\n        if (adorner == null || !adorner.CanRotate)\n            return;\n\n        //adorner._adornedElement.RenderTransformOrigin = new Point(0.5, 0.5);\n        adorner._adornedElement.RenderTransform = new RotateTransform(adorner.Angle);\n        //adorner._rotationThumb.Angle = adorner.Angle;\n    }\n\n    public double Angle\n    {\n        get => (double)GetValue(AngleProperty);\n        set => SetValue(AngleProperty, value);\n    }\n\n    #endregion\n\n    #region Variables and Properties\n\n    private readonly VisualCollection _visualChildren;\n    private readonly FrameworkElement _adornedElement;\n    private readonly FrameworkElement _parent;\n\n    /// <summary>\n    /// The rectangle that surrounds the adorned element.\n    /// </summary>\n    private Rectangle _borderRectangle;\n\n    /// <summary>\n    /// Resizing adorner uses Thumbs for visual elements.\n    /// The Thumbs have built-in mouse input handling.\n    /// </summary>\n    private readonly Thumb _topLeft, _topRight, _bottomLeft, _bottomRight, _middleBottom, _middleTop, _leftMiddle, _rightMiddle;\n\n    /// <summary>\n    /// The thumb that allows the rotation of the adorned element.\n    /// </summary>\n    private Thumb _rotationThumb;\n\n    private Vector _startVector;\n    private Point _centerPoint;\n    private double _startAngle;\n\n    /// <summary>\n    /// The start point for the drag operation.\n    /// </summary>\n    internal Point StartPoint { get; set; }\n\n    internal bool CanMove { get; set; }\n\n    internal bool CanResize { get; set; }\n\n    internal bool CanRotate { get; set; }\n\n    #endregion\n\n    public ElementAdorner(FrameworkElement adornedElement, bool canMove, bool canResize, bool canRotate, FrameworkElement parent, Point startPoint) : base(adornedElement)\n    {\n        #region Properties\n\n        _visualChildren = new VisualCollection(this);\n        _adornedElement = adornedElement;\n        _parent = parent ?? _adornedElement?.Parent as FrameworkElement;\n        StartPoint = startPoint;\n\n        CanMove = canMove;\n        CanResize = canResize;\n        CanRotate = canRotate;\n\n        #endregion\n\n        #region Refresh size\n\n        if (double.IsNaN(_adornedElement.Width))\n        {\n            _adornedElement.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n            _adornedElement.Arrange(new Rect(Canvas.GetLeft(_adornedElement), Canvas.GetTop(_adornedElement), _adornedElement.DesiredSize.Width, _adornedElement.DesiredSize.Height));\n        }\n\n        #endregion\n\n        #region Build inner elements\n\n        //Creates the dashed rectangle around the adorned element.\n        BuildAdornerBorder();\n\n        if (CanMove)\n        {\n            //Allows the drag operation to move the adorned object.\n            _borderRectangle.PreviewMouseLeftButtonDown += AdornedElement_PreviewMouseLeftButtonDown;\n            _borderRectangle.MouseMove += AdornedElement_MouseMove;\n            _borderRectangle.MouseUp += AdornedElement_MouseUp;\n        }\n\n        if (CanResize)\n        {\n            //Call a helper method to initialize the Thumbs with a customized cursors.\n            BuildAdornerThumb(ref _topLeft, Cursors.SizeNWSE);\n            BuildAdornerThumb(ref _topRight, Cursors.SizeNESW);\n            BuildAdornerThumb(ref _bottomLeft, Cursors.SizeNESW);\n            BuildAdornerThumb(ref _bottomRight, Cursors.SizeNWSE);\n\n            BuildAdornerThumb(ref _middleBottom, Cursors.SizeNS);\n            BuildAdornerThumb(ref _middleTop, Cursors.SizeNS);\n            BuildAdornerThumb(ref _leftMiddle, Cursors.SizeWE);\n            BuildAdornerThumb(ref _rightMiddle, Cursors.SizeWE);\n\n            //Add handlers for resizing • Corners\n            _bottomLeft.DragDelta += HandleBottomLeft;\n            _bottomRight.DragDelta += HandleBottomRight;\n            _topLeft.DragDelta += HandleTopLeft;\n            _topRight.DragDelta += HandleTopRight;\n\n            //Add handlers for resizing • Sides\n            _middleBottom.DragDelta += HandleBottom;\n            _middleTop.DragDelta += HandleTop;\n            _leftMiddle.DragDelta += HandleLeft;\n            _rightMiddle.DragDelta += HandleRight;\n        }\n\n        if (CanRotate)\n        {\n            //Creates the thumb that allows the rotation of the adorned element.\n            BuildAdornerRotator();\n        }\n\n        #endregion\n    }\n\n    #region Overrides\n\n    /// <summary>\n    ///  Arrange the Adorners.\n    /// </summary>\n    /// <param name=\"finalSize\">The final Size</param>\n    /// <returns>The final size</returns>\n    protected override Size ArrangeOverride(Size finalSize)\n    {\n        // desiredWidth and desiredHeight are the width and height of the element that's being adorned.\n        // These will be used to place the ResizingAdorner at the corners of the adorned element.\n        var desiredWidth = AdornedElement.DesiredSize.Width;\n        var desiredHeight = AdornedElement.DesiredSize.Height;\n\n        // adornerWidth & adornerHeight are used for placement as well.\n        var adornerWidth = this.DesiredSize.Width;\n        var adornerHeight = this.DesiredSize.Height;\n\n        _topLeft.Arrange(new Rect(-adornerWidth / 2, -adornerHeight / 2, adornerWidth, adornerHeight));\n        _topRight.Arrange(new Rect(adornerWidth / 2, -adornerHeight / 2, adornerWidth, adornerHeight));\n        _bottomLeft.Arrange(new Rect(-adornerWidth / 2, adornerHeight / 2, adornerWidth, adornerHeight));\n        _bottomRight.Arrange(new Rect(adornerWidth / 2, adornerHeight / 2, adornerWidth, adornerHeight));\n\n        _middleBottom.Arrange(new Rect(0, adornerHeight / 2, adornerWidth, adornerHeight));\n        _middleTop.Arrange(new Rect(0, -adornerHeight / 2, adornerWidth, adornerHeight));\n        _leftMiddle.Arrange(new Rect(-adornerWidth / 2, 0, adornerWidth, adornerHeight));\n        _rightMiddle.Arrange(new Rect(adornerWidth / 2, 0, adornerWidth, adornerHeight));\n\n        //var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        //_borderRectangle.Arrange(new Rect(0, 0, adornerWidth * zoomFactor, adornerHeight * zoomFactor));\n        _borderRectangle.Arrange(new Rect(0, 0, adornerWidth, adornerHeight));\n\n        _rotationThumb.Arrange(new Rect(0, (-adornerHeight / 2) - 15, adornerWidth, adornerHeight));\n\n        return finalSize;\n    }\n\n    /// <summary>\n    /// Override the VisualChildrenCount and GetVisualChild properties to interface with the adorner's visual collection.\n    /// </summary>\n    protected override int VisualChildrenCount => _visualChildren.Count;\n\n    /// <summary>\n    /// Gets the VisualChildren at given position.\n    /// </summary>\n    /// <param name=\"index\">The Index to look for.</param>\n    /// <returns>The VisualChildren</returns>\n    protected override Visual GetVisualChild(int index)\n    {\n        return _visualChildren[index];\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        //Propagate the event to the parent control.\n        var args = new KeyEventArgs(e.KeyboardDevice, e.InputSource, e.Timestamp, e.Key)\n        {\n            RoutedEvent = e.RoutedEvent,\n            Source = e.Source,\n        };\n        _parent.RaiseEvent(args);\n\n        base.OnPreviewKeyDown(e);\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        //Propagate the event to the parent control.\n        var args = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)\n        {\n            RoutedEvent = e.RoutedEvent,\n            Source = this,\n        };\n        _parent.RaiseEvent(args);\n\n        base.OnMouseWheel(e);\n    }\n\n    #endregion\n\n    #region Events\n\n    public static readonly RoutedEvent ManipulatedEvent = EventManager.RegisterRoutedEvent(\"Manipulated\", RoutingStrategy.Bubble, typeof(ManipulatedEventHandler), typeof(ElementAdorner));\n\n    public static readonly RoutedEvent RotationResetRequestedEvent = EventManager.RegisterRoutedEvent(\"RotationResetRequested\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ElementAdorner));\n\n    public static readonly RoutedEvent DuplicatedEvent = EventManager.RegisterRoutedEvent(\"Duplicated\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ElementAdorner));\n\n    public static readonly RoutedEvent RemovedEvent = EventManager.RegisterRoutedEvent(\"Removed\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ElementAdorner));\n\n    public event ManipulatedEventHandler Manipulated\n    {\n        add => AddHandler(ManipulatedEvent, value);\n        remove => RemoveHandler(ManipulatedEvent, value);\n    }\n\n    public event RoutedEventHandler RotationResetRequested\n    {\n        add => AddHandler(RotationResetRequestedEvent, value);\n        remove => RemoveHandler(RotationResetRequestedEvent, value);\n    }\n\n    public event RoutedEventHandler Duplicated\n    {\n        add => AddHandler(DuplicatedEvent, value);\n        remove => RemoveHandler(DuplicatedEvent, value);\n    }\n\n    public event RoutedEventHandler Removed\n    {\n        add => AddHandler(RemovedEvent, value);\n        remove => RemoveHandler(RemovedEvent, value);\n    }\n\n    void RaiseManipulatedEvent(double angleDiff)\n    {\n        if (ManipulatedEvent == null)\n            return;\n\n        RaiseEvent(new ManipulatedEventArgs(ManipulatedEvent, angleDiff, 0, 0, 0, 0));\n    }\n\n    void RaiseManipulatedEvent(double widthDiff, double heightDiff, double topDiff = 0, double leftDiff = 0)\n    {\n        if (ManipulatedEvent == null || (Math.Abs(widthDiff) < 0.001 && Math.Abs(heightDiff) < 0.001 && Math.Abs(leftDiff) < 0.001 && Math.Abs(topDiff) < 0.001))\n            return;\n\n        RaiseEvent(new ManipulatedEventArgs(ManipulatedEvent, widthDiff, heightDiff, topDiff, leftDiff));\n    }\n\n    void RaiseRotationResetRequestedEvent()\n    {\n        if (RotationResetRequestedEvent == null)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(RotationResetRequestedEvent));\n    }\n\n    void RaiseDuplicatedEvent()\n    {\n        if (DuplicatedEvent == null)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(DuplicatedEvent));\n    }\n\n    void RaiseRemovedEvent()\n    {\n        if (RemovedEvent == null)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(RemovedEvent));\n    }\n\n    #endregion\n\n    #region Methods\n\n    /// <summary>\n    /// Creates the dashed border around the adorned element.\n    /// </summary>\n    private void BuildAdornerBorder()\n    {\n        var resetMenu = new ExtendedMenuItem { Header = \"Reset rotation\", Icon = TryFindResource(\"Vector.Repeat\") as Brush };\n        resetMenu.SetResourceReference(HeaderedItemsControl.HeaderProperty, \"S.Shapes.Shapes.ResetRotatio\");\n\n        //var duplicateMenu = new ImageMenuItem { Header = \"Duplicate\", Image = TryFindResource(\"Vector.Copy\") as Canvas };\n\n        var removeMenu = new ExtendedMenuItem { Header = \"Remove\", Icon = TryFindResource(\"Vector.Cancel\") as Brush };\n        removeMenu.SetResourceReference(HeaderedItemsControl.HeaderProperty, \"S.Shapes.Shapes.Remove\");\n\n        resetMenu.Click += (sender, args) => RaiseRotationResetRequestedEvent();\n        //duplicateMenu.Click += (sender, args) => RaiseDuplicatedEvent();\n        removeMenu.Click += (sender, args) => RaiseRemovedEvent();\n\n        _borderRectangle = new Rectangle\n        {\n            Stroke = new SolidColorBrush(Color.FromRgb(171, 171, 171)),\n            StrokeThickness = 1,\n            Fill = Brushes.Transparent,\n            StrokeDashArray = new DoubleCollection { 5 },\n            Cursor = Cursors.SizeAll,\n            UseLayoutRounding = true,\n            SnapsToDevicePixels = true,\n            ContextMenu = new ContextMenu { Items = { resetMenu, removeMenu } }\n        };\n\n        _visualChildren.Add(_borderRectangle);\n    }\n\n    /// <summary>\n    /// Instantiates the corner Thumbs, setting the Cursor property, some appearance properties, and add the elements to the visual tree.\n    /// </summary>\n    /// <param name=\"thumb\">The Thumb to Instantiate.</param>\n    /// <param name=\"cursor\">The custom cursor.</param>\n    private void BuildAdornerThumb(ref Thumb thumb, Cursor cursor)\n    {\n        if (thumb != null) return;\n\n        thumb = new Thumb\n        {\n            Cursor = cursor,\n            Height = 10,\n            Width = 10,\n            Style = (Style)FindResource(\"ScrollBar.Thumb\"),\n        };\n\n        _visualChildren.Add(thumb);\n    }\n\n    /// <summary>\n    /// Creates the element that allows the adorned element to be rotated.\n    /// </summary>\n    private void BuildAdornerRotator()\n    {\n        _rotationThumb = new Thumb\n        {\n            Height = 10,\n            Width = 10,\n            Cursor = Cursors.SizeAll,\n            Style = FindResource(\"Style.Thumb.Ellipse\") as Style\n        };\n\n        _rotationThumb.DragStarted += RotationThumb_DragStarted;\n        _rotationThumb.DragDelta += RotationThumb_DragDelta;\n\n        _adornedElement.RenderTransformOrigin = new Point(0.5, 0.5);\n\n        if (_adornedElement.RenderTransform is RotateTransform transform)\n            Angle = transform.Angle;\n\n        _visualChildren.Add(_rotationThumb);\n    }\n\n    private void AfterManipulation()\n    {\n        InvalidateVisual();\n        UpdateLayout();\n    }\n\n    #endregion\n\n    #region Events\n\n    private void AdornedElement_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (_parent == null)\n            return;\n\n        if (_borderRectangle.CaptureMouse())\n            StartPoint = e.GetPosition(_parent);\n    }\n\n    private void AdornedElement_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (_parent == null || e.LeftButton != MouseButtonState.Pressed)\n            return;\n\n        _borderRectangle.MouseMove -= AdornedElement_MouseMove;\n\n        var currentPosition = e.GetPosition(_parent);\n\n        var x = Canvas.GetLeft(_adornedElement) + (currentPosition.X - StartPoint.X);\n        var y = Canvas.GetTop(_adornedElement) + (currentPosition.Y - StartPoint.Y);\n\n        if (x < -1)\n            x = -1;\n\n        if (y < -1)\n            y = -1;\n\n        if (x + _adornedElement.DesiredSize.Width > _parent.ActualWidth + 1)\n            x = _parent.ActualWidth + 1 - _adornedElement.DesiredSize.Width;\n\n        if (y + _adornedElement.DesiredSize.Height > _parent.ActualHeight + 1)\n            y = _parent.ActualHeight + 1 - _adornedElement.DesiredSize.Height;\n\n        RaiseManipulatedEvent(0, 0, y - Canvas.GetTop(_adornedElement), x - Canvas.GetLeft(_adornedElement));\n\n        Canvas.SetLeft(_adornedElement, x);\n        Canvas.SetTop(_adornedElement, y);\n\n        StartPoint = currentPosition;\n        e.Handled = true;\n\n        _borderRectangle.MouseMove += AdornedElement_MouseMove;\n\n        AfterManipulation();\n    }\n\n    private void AdornedElement_MouseUp(object sender, MouseButtonEventArgs mouseButtonEventArgs)\n    {\n        _borderRectangle?.ReleaseMouseCapture();\n    }\n\n    ///<summary>\n    ///Handler for resizing from the top-left.\n    ///</summary>\n    private void HandleTopLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(_adornedElement.DesiredSize.Width - e.HorizontalChange, 10);\n        var left = Canvas.GetLeft(_adornedElement) - (width - _adornedElement.DesiredSize.Width);\n        var height = Math.Max(_adornedElement.DesiredSize.Height - e.VerticalChange, 10);\n        var top = Canvas.GetTop(_adornedElement) - (height - _adornedElement.DesiredSize.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        RaiseManipulatedEvent(width - _adornedElement.Width, height - _adornedElement.Height, top - Canvas.GetTop(_adornedElement), left - Canvas.GetLeft(_adornedElement));\n\n        Canvas.SetLeft(_adornedElement, left);\n        Canvas.SetTop(_adornedElement, top);\n        _adornedElement.Height = height;\n        _adornedElement.Width = width;\n\n        //TODO: Maybe trap mouse while dragging with ClipCursor(ref r);\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the top-right.\n    /// </summary>\n    private void HandleTopRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(_adornedElement.DesiredSize.Width + e.HorizontalChange, 10);\n        var height = Math.Max(_adornedElement.DesiredSize.Height - e.VerticalChange, 10);\n        var top = Canvas.GetTop(_adornedElement) - (height - _adornedElement.DesiredSize.Height);\n        var left = Canvas.GetLeft(_adornedElement);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (left + width > _parent.ActualWidth)\n            width = _parent.ActualWidth - left;\n\n        RaiseManipulatedEvent(width - _adornedElement.Width, height - _adornedElement.Height, top - Canvas.GetTop(_adornedElement));\n\n        Canvas.SetTop(_adornedElement, top);\n        _adornedElement.Height = height;\n        _adornedElement.Width = width;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the bottom-left.\n    /// </summary>\n    private void HandleBottomLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(_adornedElement.DesiredSize.Width - e.HorizontalChange, 10);\n        var left = Canvas.GetLeft(_adornedElement) - (width - _adornedElement.DesiredSize.Width);\n        var height = Math.Max(_adornedElement.DesiredSize.Height + e.VerticalChange, 10);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        if (Canvas.GetLeft(_adornedElement) + width > _parent.ActualWidth)\n            width = _parent.ActualWidth - Canvas.GetLeft(_adornedElement);\n\n        if (Canvas.GetTop(_adornedElement) + height > _parent.ActualHeight)\n            height = _parent.ActualHeight - Canvas.GetTop(_adornedElement);\n\n        RaiseManipulatedEvent(width - _adornedElement.Width, height - _adornedElement.Height, 0, left - Canvas.GetLeft(_adornedElement));\n\n        Canvas.SetLeft(_adornedElement, left);\n        _adornedElement.Height = height;\n        _adornedElement.Width = width;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-right.\n    /// </summary>\n    private void HandleBottomRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(_adornedElement.DesiredSize.Width + e.HorizontalChange, 10);\n        var height = Math.Max(_adornedElement.DesiredSize.Height + e.VerticalChange, 10);\n        var top = Canvas.GetTop(_adornedElement);\n        var left = Canvas.GetLeft(_adornedElement);\n\n        if (left + width > _parent.ActualWidth)\n            width = _parent.ActualWidth - left;\n\n        if (top + height > _parent.ActualHeight)\n            height = _parent.ActualHeight - top;\n\n        RaiseManipulatedEvent(width - _adornedElement.Width, height - _adornedElement.Height);\n\n        _adornedElement.Height = height;\n        _adornedElement.Width = width;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the left-middle.\n    /// </summary>\n    private void HandleLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(_adornedElement.DesiredSize.Width - e.HorizontalChange, 10);\n        var left = Canvas.GetLeft(_adornedElement) - (width - _adornedElement.DesiredSize.Width);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        RaiseManipulatedEvent(width - _adornedElement.Width, 0, 0, left - Canvas.GetLeft(_adornedElement));\n\n        Canvas.SetLeft(_adornedElement, left);\n        _adornedElement.Width = width;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the top-middle.\n    /// </summary>\n    private void HandleTop(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(_adornedElement.DesiredSize.Height - e.VerticalChange, 10);\n        var top = Canvas.GetTop(_adornedElement) - (height - _adornedElement.DesiredSize.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        RaiseManipulatedEvent(0, height - _adornedElement.Height, top - Canvas.GetTop(_adornedElement));\n\n        Canvas.SetTop(_adornedElement, top);\n        _adornedElement.Height = height;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the right-middle.\n    /// </summary>\n    private void HandleRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(_adornedElement.DesiredSize.Width + e.HorizontalChange, 10);\n\n        if (Canvas.GetLeft(_adornedElement) + width > _parent.ActualWidth)\n            width = _parent.ActualWidth - Canvas.GetLeft(_adornedElement);\n\n        RaiseManipulatedEvent(width - _adornedElement.Width, 0);\n\n        _adornedElement.Width = width;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-middle.\n    /// </summary>\n    private void HandleBottom(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(_adornedElement.DesiredSize.Height + e.VerticalChange, 10);\n\n        if (Canvas.GetTop(_adornedElement) + height > _parent.ActualHeight)\n            height = _parent.ActualHeight - Canvas.GetTop(_adornedElement);\n\n        RaiseManipulatedEvent(0, height - _adornedElement.Height);\n\n        _adornedElement.Height = height;\n\n        AfterManipulation();\n    }\n\n    /// <summary>\n    /// Handler for the start of the drag operation of the thumb that allows the rotation of the shape.\n    /// </summary>\n    private void RotationThumb_DragStarted(object sender, DragStartedEventArgs e)\n    {\n        if (_adornedElement == null || _parent == null)\n            return;\n\n        _centerPoint = _adornedElement.TranslatePoint(new Point(_adornedElement.ActualWidth * _adornedElement.RenderTransformOrigin.X, _adornedElement.ActualHeight * _adornedElement.RenderTransformOrigin.Y), _parent);\n        _startVector = Point.Subtract(Mouse.GetPosition(_parent), _centerPoint);\n\n        _startAngle = Angle;\n    }\n\n    /// <summary>\n    /// Handler for the drag operation of the thumb that allows the rotation of the shape.\n    /// </summary>\n    private void RotationThumb_DragDelta(object sender, DragDeltaEventArgs e)\n    {\n        if (_adornedElement == null || _parent == null)\n            return;\n\n        var deltaVector = Point.Subtract(Mouse.GetPosition(_parent), _centerPoint);\n        var angle = Vector.AngleBetween(_startVector, deltaVector);\n        var newAngle = _startAngle + Math.Round(angle, 0);\n\n        RaiseManipulatedEvent(newAngle - Angle);\n\n        Angle = newAngle;\n\n        _adornedElement.InvalidateMeasure();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/EncoderListViewItem.cs",
    "content": "using System;\nusing System.Collections.Specialized;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing System.Threading;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.ImageUtil;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Windows.Other;\nusing Clipboard = System.Windows.Clipboard;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// ListViewItem used by the Encoder window.\n/// </summary>\npublic class EncoderListViewItem : ListViewItem\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(EncoderListViewItem));\n\n    public static readonly DependencyProperty PercentageProperty = DependencyProperty.Register(nameof(Percentage), typeof(double), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(0.0));\n\n    public static readonly DependencyProperty CurrentFrameProperty = DependencyProperty.Register(nameof(CurrentFrame), typeof(int), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(1));\n\n    public static readonly DependencyProperty FrameCountProperty = DependencyProperty.Register(nameof(FrameCount), typeof(int), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(0));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty IdProperty = DependencyProperty.Register(nameof(Id), typeof(int), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(-1));\n\n    public static readonly DependencyProperty TokenSourceProperty = DependencyProperty.Register(nameof(TokenSource), typeof(CancellationTokenSource), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty IsIndeterminateProperty = DependencyProperty.Register(nameof(IsIndeterminate), typeof(bool), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty StatusProperty = DependencyProperty.Register(nameof(Status), typeof(EncodingStatus), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(EncodingStatus.Processing));\n\n    public static readonly DependencyProperty OutputTypeProperty = DependencyProperty.Register(nameof(OutputType), typeof(ExportFormats), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(ExportFormats.Gif));\n\n    public static readonly DependencyProperty SizeInBytesProperty = DependencyProperty.Register(nameof(SizeInBytes), typeof(long), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(0L));\n\n    public static readonly DependencyProperty OutputPathProperty = DependencyProperty.Register(nameof(OutputPath), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty OutputFilenameProperty = DependencyProperty.Register(nameof(OutputFilename), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(OutputFilename_PropertyChanged));\n\n    public static readonly DependencyProperty SavedToDiskProperty = DependencyProperty.Register(nameof(SavedToDisk), typeof(bool), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty AreMultipleFilesProperty = DependencyProperty.Register(nameof(AreMultipleFiles), typeof(bool), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty ExceptionProperty = DependencyProperty.Register(nameof(Exception), typeof(Exception), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n\n    public static readonly DependencyProperty UploadedProperty = DependencyProperty.Register(nameof(Uploaded), typeof(bool), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty UploadLinkProperty = DependencyProperty.Register(nameof(UploadLink), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty UploadLinkDisplayProperty = DependencyProperty.Register(nameof(UploadLinkDisplay), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty DeletionLinkProperty = DependencyProperty.Register(nameof(DeletionLink), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty UploadTaskExceptionProperty = DependencyProperty.Register(nameof(UploadTaskException), typeof(Exception), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(null));\n\n\n    public static readonly DependencyProperty CopiedToClipboardProperty = DependencyProperty.Register(nameof(CopiedToClipboard), typeof(bool), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty CopyTaskExceptionProperty = DependencyProperty.Register(nameof(CopyTaskException), typeof(Exception), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(null));\n\n\n    public static readonly DependencyProperty CommandExecutedProperty = DependencyProperty.Register(nameof(CommandExecuted), typeof(bool), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty CommandTaskExceptionProperty = DependencyProperty.Register(nameof(CommandTaskException), typeof(Exception), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(null));\n\n    public static readonly DependencyProperty CommandProperty = DependencyProperty.Register(nameof(Command), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(null));\n\n    public static readonly DependencyProperty CommandOutputProperty = DependencyProperty.Register(nameof(CommandOutput), typeof(string), typeof(EncoderListViewItem),\n        new FrameworkPropertyMetadata(null));\n\n\n    public static readonly DependencyProperty TotalTimeProperty = DependencyProperty.Register(nameof(TotalTime), typeof(TimeSpan), typeof(EncoderListViewItem),\n        new PropertyMetadata(TimeSpan.Zero));\n\n    public static readonly DependencyProperty TimeToAnalyzeProperty = DependencyProperty.Register(nameof(TimeToAnalyze), typeof(TimeSpan), typeof(EncoderListViewItem),\n        new PropertyMetadata(TimeSpan.Zero, TimeSpan_PropertyChanged));\n\n    public static readonly DependencyProperty TimeToEncodeProperty = DependencyProperty.Register(nameof(TimeToEncode), typeof(TimeSpan), typeof(EncoderListViewItem),\n        new PropertyMetadata(TimeSpan.Zero, TimeSpan_PropertyChanged));\n\n    public static readonly DependencyProperty TimeToUploadProperty = DependencyProperty.Register(nameof(TimeToUpload), typeof(TimeSpan), typeof(EncoderListViewItem),\n        new PropertyMetadata(TimeSpan.Zero, TimeSpan_PropertyChanged));\n\n    public static readonly DependencyProperty TimeToCopyProperty = DependencyProperty.Register(nameof(TimeToCopy), typeof(TimeSpan), typeof(EncoderListViewItem),\n        new PropertyMetadata(TimeSpan.Zero, TimeSpan_PropertyChanged));\n\n    public static readonly DependencyProperty TimeToExecuteProperty = DependencyProperty.Register(nameof(TimeToExecute), typeof(TimeSpan), typeof(EncoderListViewItem),\n        new PropertyMetadata(TimeSpan.Zero, TimeSpan_PropertyChanged));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The icon of the ListViewItem.\n    /// </summary>\n    [Description(\"The icon of the ListViewItem.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The encoding percentage.\n    /// </summary>\n    [Description(\"The encoding percentage.\")]\n    public double Percentage\n    {\n        get => (double)GetValue(PercentageProperty);\n        set => SetCurrentValue(PercentageProperty, value);\n    }\n\n    /// <summary>\n    /// The current frame being processed.\n    /// </summary>\n    [Description(\"The frame count.\")]\n    public int CurrentFrame\n    {\n        get => (int)GetValue(CurrentFrameProperty);\n        set\n        {\n            SetCurrentValue(CurrentFrameProperty, value);\n\n            if (CurrentFrame == 0)\n            {\n                Percentage = 0;\n                return;\n            }\n\n            // 100% = FrameCount\n            // 100% * CurrentFrame / FrameCount = Actual Percentage\n            Percentage = Math.Round(CurrentFrame * 100.0 / FrameCount, 1, MidpointRounding.AwayFromZero);\n        }\n    }\n\n    /// <summary>\n    /// The frame count.\n    /// </summary>\n    [Description(\"The frame count.\")]\n    public int FrameCount\n    {\n        get => (int)GetValue(FrameCountProperty);\n        set => SetCurrentValue(FrameCountProperty, value);\n    }\n\n    /// <summary>\n    /// The description of the item.\n    /// </summary>\n    [Description(\"The description of the item.\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The ID of the Task.\n    /// </summary>\n    [Description(\"The ID of the Task.\")]\n    public int Id\n    {\n        get => (int)GetValue(IdProperty);\n        set => SetCurrentValue(IdProperty, value);\n    }\n\n    /// <summary>\n    /// The Cancellation Token Source.\n    /// </summary>\n    [Description(\"The Cancellation Token Source.\")]\n    public CancellationTokenSource TokenSource\n    {\n        get => (CancellationTokenSource)GetValue(TokenSourceProperty);\n        set => SetCurrentValue(TokenSourceProperty, value);\n    }\n\n    /// <summary>\n    /// The state of the progress bar.\n    /// </summary>\n    [Description(\"The state of the progress bar.\")]\n    public bool IsIndeterminate\n    {\n        get => (bool)GetValue(IsIndeterminateProperty);\n        set => SetCurrentValue(IsIndeterminateProperty, value);\n    }\n\n    /// <summary>\n    /// The status of the encoding.\n    /// </summary>\n    [Description(\"The status of the encoding.\")]\n    public EncodingStatus Status\n    {\n        get => (EncodingStatus)GetValue(StatusProperty);\n        set => SetCurrentValue(StatusProperty, value);\n    }\n\n    /// <summary>\n    /// The size of the output file in bytes.\n    /// </summary>\n    [Description(\"The size of the output file in bytes.\")]\n    public long SizeInBytes\n    {\n        get => (long)GetValue(SizeInBytesProperty);\n        set => SetCurrentValue(SizeInBytesProperty, value);\n    }\n\n    /// <summary>\n    /// The filename of the output file.\n    /// </summary>\n    [Description(\"The filename of the output file.\")]\n    public string OutputFilename\n    {\n        get => (string)GetValue(OutputFilenameProperty);\n        set => SetCurrentValue(OutputFilenameProperty, value);\n    }\n\n    /// <summary>\n    /// The path of the output file.\n    /// </summary>\n    [Description(\"The path of the output file.\")]\n    public string OutputPath\n    {\n        get => (string)GetValue(OutputPathProperty);\n        set => SetCurrentValue(OutputPathProperty, value);\n    }\n\n    /// <summary>\n    /// True if the outfile file was saved to disk.\n    /// </summary>\n    [Description(\"True if the outfile file was saved to disk.\")]\n    public bool SavedToDisk\n    {\n        get => (bool)GetValue(SavedToDiskProperty);\n        set => SetCurrentValue(SavedToDiskProperty, value);\n    }\n\n    /// <summary>\n    /// True if the exporter exported multiple files.\n    /// </summary>\n    [Description(\"True if the exporter exported multiple files.\")]\n    public bool AreMultipleFiles\n    {\n        get => (bool)GetValue(AreMultipleFilesProperty);\n        set => SetCurrentValue(AreMultipleFilesProperty, value);\n    }\n\n    /// <summary>\n    /// The type of the output.\n    /// </summary>\n    [Description(\"The type of the output.\")]\n    public ExportFormats OutputType\n    {\n        get => (ExportFormats)GetValue(OutputTypeProperty);\n        set => SetCurrentValue(OutputTypeProperty, value);\n    }\n\n    /// <summary>\n    /// The exception of the encoding.\n    /// </summary>\n    [Description(\"The exception of the encoding.\")]\n    public Exception Exception\n    {\n        get => (Exception)GetValue(ExceptionProperty);\n        set => SetCurrentValue(ExceptionProperty, value);\n    }\n\n    /// <summary>\n    /// True if the outfile file was uploaded.\n    /// </summary>\n    [Description(\"True if the outfile file was uploaded.\")]\n    public bool Uploaded\n    {\n        get => (bool)GetValue(UploadedProperty);\n        set => SetCurrentValue(UploadedProperty, value);\n    }\n\n    /// <summary>\n    /// The link to the uploaded file.\n    /// </summary>\n    [Description(\"The link to the uploaded file.\")]\n    public string UploadLink\n    {\n        get => (string)GetValue(UploadLinkProperty);\n        set => SetCurrentValue(UploadLinkProperty, value);\n    }\n\n    /// <summary>\n    /// The link to the uploaded file (without the http).\n    /// </summary>\n    [Description(\"The link to the uploaded file (without the http).\")]\n    public string UploadLinkDisplay\n    {\n        get => (string)GetValue(UploadLinkDisplayProperty);\n        set => SetCurrentValue(UploadLinkDisplayProperty, value);\n    }\n\n    /// <summary>\n    /// The link to delete the uploaded file.\n    /// </summary>\n    [Description(\"The link to delete the uploaded file.\")]\n    public string DeletionLink\n    {\n        get => (string)GetValue(DeletionLinkProperty);\n        set => SetCurrentValue(DeletionLinkProperty, value);\n    }\n\n    /// <summary>\n    /// The exception detail about the upload task.\n    /// </summary>\n    [Description(\"The exception detail about the upload task.\")]\n    public Exception UploadTaskException\n    {\n        get => (Exception)GetValue(UploadTaskExceptionProperty);\n        set => SetCurrentValue(UploadTaskExceptionProperty, value);\n    }\n\n\n\n    /// <summary>\n    /// True if the outfile file was copied to the clipboard.\n    /// </summary>\n    [Description(\"True if the outfile file was copied to the clipboard.\")]\n    public bool CopiedToClipboard\n    {\n        get => (bool)GetValue(CopiedToClipboardProperty);\n        set => SetCurrentValue(CopiedToClipboardProperty, value);\n    }\n\n    /// <summary>\n    /// The exception detail about the copy task.\n    /// </summary>\n    [Description(\"The exception detail about the copy task.\")]\n    public Exception CopyTaskException\n    {\n        get => (Exception)GetValue(CopyTaskExceptionProperty);\n        set => SetCurrentValue(CopyTaskExceptionProperty, value);\n    }\n\n\n\n    /// <summary>\n    /// True if the post encoding commands were executed.\n    /// </summary>\n    [Description(\"True if the post encoding commands were executed.\")]\n    public bool CommandExecuted\n    {\n        get => (bool)GetValue(CommandExecutedProperty);\n        set => SetCurrentValue(CommandExecutedProperty, value);\n    }\n\n    /// <summary>\n    /// The exception detail about the post encoding command task.\n    /// </summary>\n    [Description(\"The exception detail about the post encoding command task.\")]\n    public Exception CommandTaskException\n    {\n        get => (Exception)GetValue(CommandTaskExceptionProperty);\n        set => SetCurrentValue(CommandTaskExceptionProperty, value);\n    }\n\n    /// <summary>\n    /// The command that was executed.\n    /// </summary>\n    [Description(\"The command that was executed.\")]\n    public string Command\n    {\n        get => (string)GetValue(CommandProperty);\n        set => SetCurrentValue(CommandProperty, value);\n    }\n\n    /// <summary>\n    /// The output from the post encoding commands.\n    /// </summary>\n    [Description(\"The output from the post encoding commands.\")]\n    public string CommandOutput\n    {\n        get => (string)GetValue(CommandOutputProperty);\n        set => SetCurrentValue(CommandOutputProperty, value);\n    }\n\n\n    /// <summary>\n    /// The total time to finish the process.\n    /// </summary>\n    [Description(\"The total time to finish the process.\")]\n    public TimeSpan TotalTime\n    {\n        get => (TimeSpan)GetValue(TotalTimeProperty);\n        set => SetValue(TotalTimeProperty, value);\n    }\n\n    /// <summary>\n    /// The time it took to analyze the frames.\n    /// </summary>\n    [Description(\"The time it took to analyze the frames.\")]\n    public TimeSpan TimeToAnalyze\n    {\n        get => (TimeSpan)GetValue(TimeToAnalyzeProperty);\n        set => SetValue(TimeToAnalyzeProperty, value);\n    }\n\n    /// <summary>\n    /// The time it took to encode the frames.\n    /// </summary>\n    [Description(\"The time it took to encode the frames.\")]\n    public TimeSpan TimeToEncode\n    {\n        get => (TimeSpan)GetValue(TimeToEncodeProperty);\n        set => SetValue(TimeToEncodeProperty, value);\n    }\n\n    /// <summary>\n    /// The time it took to upload the file.\n    /// </summary>\n    [Description(\"The time it took to upload the file.\")]\n    public TimeSpan TimeToUpload\n    {\n        get => (TimeSpan)GetValue(TimeToUploadProperty);\n        set => SetValue(TimeToUploadProperty, value);\n    }\n\n    /// <summary>\n    /// The time it took to copy the file.\n    /// </summary>\n    [Description(\"The time it took to copy the file.\")]\n    public TimeSpan TimeToCopy\n    {\n        get => (TimeSpan)GetValue(TimeToCopyProperty);\n        set => SetValue(TimeToCopyProperty, value);\n    }\n\n    /// <summary>\n    /// The time it took to execute the post encoding commands.\n    /// </summary>\n    [Description(\"The time it took to execute the post encoding commands.\")]\n    public TimeSpan TimeToExecute\n    {\n        get => (TimeSpan)GetValue(TimeToExecuteProperty);\n        set => SetValue(TimeToExecuteProperty, value);\n    }\n\n    #endregion\n\n    #region Custom Events\n\n    public static readonly RoutedEvent CancelClickedEvent = EventManager.RegisterRoutedEvent(\"CancelClicked\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(EncoderListViewItem));\n\n    public static readonly RoutedEvent OpenFileClickedEvent = EventManager.RegisterRoutedEvent(\"OpenFileClicked\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(EncoderListViewItem));\n\n    public static readonly RoutedEvent ExploreFolderClickedEvent = EventManager.RegisterRoutedEvent(\"ExploreFolderClicked\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(EncoderListViewItem));\n\n    /// <summary>\n    /// Event raised when the user clicks on the cancel button.\n    /// </summary>\n    public event RoutedEventHandler CancelClicked\n    {\n        add => AddHandler(CancelClickedEvent, value);\n        remove => RemoveHandler(CancelClickedEvent, value);\n    }\n\n    /// <summary>\n    /// Event raised when the user clicks on the \"Open file\" button.\n    /// </summary>\n    public event RoutedEventHandler OpenFileClicked\n    {\n        add => AddHandler(OpenFileClickedEvent, value);\n        remove => RemoveHandler(OpenFileClickedEvent, value);\n    }\n\n    /// <summary>\n    /// Event raised when the user clicks on the \"Explore folder\" button.\n    /// </summary>\n    public event RoutedEventHandler ExploreFolderClicked\n    {\n        add => AddHandler(ExploreFolderClickedEvent, value);\n        remove => RemoveHandler(ExploreFolderClickedEvent, value);\n    }\n\n    public void RaiseCancelClickedEvent()\n    {\n        if (CancelClickedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(CancelClickedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    public void RaiseOpenFileClickedEvent()\n    {\n        if (OpenFileClickedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(OpenFileClickedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    public void RaiseExploreFolderClickedEvent()\n    {\n        if (ExploreFolderClickedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(ExploreFolderClickedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    #endregion\n\n    static EncoderListViewItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(EncoderListViewItem), new FrameworkPropertyMetadata(typeof(EncoderListViewItem)));\n    }\n\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        var cancelButton = Template.FindName(\"CancelButton\", this) as ExtendedButton;\n\n        var copyFailedHyperlink = Template.FindName(\"CopyFailedHyperlink\", this) as Hyperlink;\n        var executedHyperlink = Template.FindName(\"ExecutedHyperlink\", this) as Hyperlink;\n        var executionFailedHyperlink = Template.FindName(\"ExecutionFailedHyperlink\", this) as Hyperlink;\n        var uploadHyperlink = Template.FindName(\"UploadHyperlink\", this) as Hyperlink;\n        var uploadFailedHyperlink = Template.FindName(\"UploadFailedHyperlink\", this) as Hyperlink;\n\n        var fileButton = Template.FindName(\"FileButton\", this) as ExtendedButton;\n        var folderButton = Template.FindName(\"FolderButton\", this) as ExtendedButton;\n        var detailsButton = Template.FindName(\"DetailsButton\", this) as ExtendedButton;\n        var copyMenu = Template.FindName(\"CopyMenuItem\", this) as ExtendedMenuItem;\n        var copyImageMenu = Template.FindName(\"CopyImageMenuItem\", this) as ExtendedMenuItem;\n        var copyFilenameMenu = Template.FindName(\"CopyFilenameMenuItem\", this) as ExtendedMenuItem;\n        var copyFolderMenu = Template.FindName(\"CopyFolderMenuItem\", this) as ExtendedMenuItem;\n        var copyLinkMenu = Template.FindName(\"CopyLinkMenuItem\", this) as ExtendedMenuItem;\n\n        if (cancelButton != null)\n            cancelButton.Click += (s, a) => RaiseCancelClickedEvent();\n\n        //Copy failed.\n        if (copyFailedHyperlink != null)\n            copyFailedHyperlink.Click += (s, a) =>\n            {\n                if (CopyTaskException == null) return;\n\n                var viewer = new ExceptionViewer(CopyTaskException);\n                viewer.ShowDialog();\n            };\n\n        //Command executed.\n        if (executedHyperlink != null)\n            executedHyperlink.Click += (s, a) =>\n            {\n                var dialog = new TextDialog { Command = Command, Output = CommandOutput };\n                dialog.ShowDialog();\n            };\n\n        //Command execution failed.\n        if (executionFailedHyperlink != null)\n            executionFailedHyperlink.Click += (s, a) =>\n            {\n                if (CommandTaskException == null) return;\n\n                var viewer = new ExceptionViewer(CommandTaskException);\n                viewer.ShowDialog();\n            };\n\n        //Upload done.\n        if (uploadHyperlink != null)\n            uploadHyperlink.Click += (s, a) =>\n            {\n                try\n                {\n                    if (string.IsNullOrWhiteSpace(UploadLink))\n                        return;\n\n                    ProcessHelper.StartWithShell(Keyboard.Modifiers != ModifierKeys.Control || string.IsNullOrWhiteSpace(DeletionLink) ? UploadLink : DeletionLink);\n                }\n                catch (Exception e)\n                {\n                    LogWriter.Log(e, \"Error while opening the upload link\");\n                }\n            };\n\n        //Upload failed.\n        if (uploadFailedHyperlink != null)\n            uploadFailedHyperlink.Click += (s, a) =>\n            {\n                if (UploadTaskException == null) return;\n\n                var viewer = new ExceptionViewer(UploadTaskException);\n                viewer.ShowDialog();\n            };\n\n        //Open file.\n        if (fileButton != null)\n            fileButton.Click += (s, a) =>\n            {\n                RaiseOpenFileClickedEvent();\n\n                try\n                {\n                    if (!string.IsNullOrWhiteSpace(OutputFilename) && File.Exists(OutputFilename))\n                        ProcessHelper.StartWithShell(OutputFilename);\n                }\n                catch (Exception ex)\n                {\n                    Dialog.Ok(\"Open File\", \"Error while opening the file\", ex.Message);\n                }\n            };\n\n        //Open folder.\n        if (folderButton != null)\n            folderButton.Click += (s, a) =>\n            {\n                RaiseExploreFolderClickedEvent();\n\n                try\n                {\n                    if (!string.IsNullOrWhiteSpace(OutputFilename) && Directory.Exists(OutputPath))\n                        Process.Start(\"explorer.exe\", $\"/select,\\\"{OutputFilename.Replace(\"/\", \"\\\\\")}\\\"\");\n                }\n                catch (Exception ex)\n                {\n                    Dialog.Ok(\"Explore Folder\", \"Error while opening the folder\", ex.Message);\n                }\n            };\n\n        //Details. Usually when something wrong happens.\n        if (detailsButton != null)\n            detailsButton.Click += (s, a) =>\n            {\n                if (Exception == null) return;\n\n                var viewer = new ExceptionViewer(Exception);\n                viewer.ShowDialog();\n            };\n\n        //Copy (as image and text).\n        if (copyMenu != null)\n            copyMenu.Click += (s, a) =>\n            {\n                if (string.IsNullOrWhiteSpace(OutputFilename))\n                    return;\n\n                var data = new DataObject();\n                data.SetFileDropList(new StringCollection { OutputFilename });\n\n                SetClipboard(data);\n            };\n\n        //Copy as image.\n        if (copyImageMenu != null)\n            copyImageMenu.Click += (s, a) =>\n            {\n                if (string.IsNullOrWhiteSpace(OutputFilename))\n                    return;\n\n                var data = new DataObject();\n                data.SetImage(OutputFilename.SourceFrom());\n\n                SetClipboard(data);\n            };\n\n        //Copy full path.\n        if (copyFilenameMenu != null)\n            copyFilenameMenu.Click += (s, a) =>\n            {\n                if (string.IsNullOrWhiteSpace(OutputFilename))\n                    return;\n\n                var data = new DataObject();\n                data.SetText(OutputFilename, TextDataFormat.Text);\n\n                SetClipboard(data);\n            };\n\n        //Copy folder path.\n        if (copyFolderMenu != null)\n            copyFolderMenu.Click += (s, a) =>\n            {\n                if (string.IsNullOrWhiteSpace(OutputPath))\n                    return;\n\n                var data = new DataObject();\n                data.SetText(OutputPath, TextDataFormat.Text);\n\n                SetClipboard(data);\n            };\n\n        // Copy link\n        if (copyLinkMenu != null)\n        {\n            copyLinkMenu.Click += (s, a) =>\n            {\n                if (string.IsNullOrWhiteSpace(UploadLink))\n                    return;\n\n                var data = new DataObject();\n                data.SetText(UploadLink, TextDataFormat.Text);\n\n                SetClipboard(data);\n            };\n        }\n    }\n\n\n    private static void OutputFilename_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is EncoderListViewItem item))\n            return;\n\n        item.OutputPath = Path.GetDirectoryName(item.OutputFilename);\n    }\n\n    private static void TimeSpan_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is EncoderListViewItem item))\n            return;\n\n        item.TotalTime = item.TimeToAnalyze + item.TimeToEncode + item.TimeToUpload + item.TimeToCopy + item.TimeToExecute;\n    }\n\n\n    private void SetClipboard(DataObject data)\n    {\n        //It tries to set the data to the clipboard 10 times before failing it to do so.\n        //This issue may happen if the clipboard is opened by any clipboard manager.\n        for (var i = 0; i < 10; i++)\n        {\n            try\n            {\n                Clipboard.SetDataObject(data, true);\n                break;\n            }\n            catch (COMException ex)\n            {\n                if ((uint)ex.ErrorCode != 0x800401D0) //CLIPBRD_E_CANT_OPEN\n                    throw;\n            }\n\n            Thread.Sleep(100);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExListViewItem.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExListViewItem : ListViewItem\n{\n    public static readonly DependencyProperty IsPressedProperty = DependencyProperty.Register(nameof(IsPressed), typeof(bool), typeof(ExListViewItem), new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExListViewItem), new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExListViewItem), new FrameworkPropertyMetadata(26.0));\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExListViewItem), new FrameworkPropertyMetadata(26.0));\n\n    public bool IsPressed\n    {\n        get => (bool)GetValue(IsPressedProperty);\n        set => SetValue(IsPressedProperty, value);\n    }\n\n    /// <summary>\n    /// The icon of the radio button.\n    /// </summary>\n    [Description(\"The icon of the radio button.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n    \n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    static ExListViewItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExListViewItem), new FrameworkPropertyMetadata(typeof(ExListViewItem)));\n    }\n\n    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        base.OnMouseLeftButtonDown(e);\n\n        if (IsEnabled)\n        {\n            IsPressed = true;\n            CaptureMouse();\n            e.Handled = true;\n        }\n    }\n\n    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)\n    {\n        base.OnMouseLeftButtonUp(e);\n\n        if (IsMouseCaptured)\n            ReleaseMouseCapture();\n        \n        IsPressed = false;\n    }\n\n    protected override void OnLostMouseCapture(MouseEventArgs e)\n    {\n        base.OnLostMouseCapture(e);\n        IsPressed = false;\n    }\n\n    protected override void OnMouseLeave(MouseEventArgs e)\n    {\n        base.OnMouseLeave(e);\n\n        // Optional: if you want press to cancel when leaving the item\n        if (IsMouseCaptured && !Mouse.LeftButton.HasFlag(MouseButtonState.Pressed))\n            IsPressed = false;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExWindow.cs",
    "content": "using ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Shell;\n\nnamespace ScreenToGif.Controls;\n\n[TemplatePart(Name = NonClientAreaElementId, Type = typeof(UIElement))]\n[TemplatePart(Name = MinimizeButtonId, Type = typeof(Button))]\n[TemplatePart(Name = MaximizeButtonId, Type = typeof(Button))]\n[TemplatePart(Name = RestoreButtonId, Type = typeof(Button))]\n[TemplatePart(Name = CloseButtonId, Type = typeof(Button))]\npublic class ExWindow : Window\n{\n    private const string NonClientAreaElementId = \"NonClientAreaElement\";\n    private const string MinimizeButtonId = \"MinimizeButton\";\n    private const string MaximizeButtonId = \"MaximizeButton\";\n    private const string RestoreButtonId = \"RestoreButton\";\n    private const string CloseButtonId = \"CloseButton\";\n\n    private UIElement _nonClientAreaElement;\n    private Button _minimizeButton;\n    private Button _maximizeButton;\n    private Button _restoreButton;\n    private Button _closeButton;\n\n    public static readonly DependencyProperty ExtendIntoTitleBarProperty = DependencyProperty.Register(nameof(ExtendIntoTitleBar), typeof(bool), typeof(ExWindow), new PropertyMetadata(false));\n    public static readonly DependencyProperty ShowCustomCaptionButtonsProperty = DependencyProperty.Register(nameof(ShowCustomCaptionButtons), typeof(bool), typeof(ExWindow), new PropertyMetadata(true, ShowCustomCaptionButtons_PropertyChanged));\n    public static readonly DependencyPropertyKey WillRenderCustomCaptionButtonsProperty = DependencyProperty.RegisterReadOnly(nameof(WillRenderCustomCaptionButtons), typeof(bool), typeof(ExWindow), new PropertyMetadata(false));\n    public static readonly DependencyProperty ShowMinimizeButtonProperty = DependencyProperty.Register(nameof(ShowMinimizeButton), typeof(bool), typeof(ExWindow), new PropertyMetadata(true, ShowMinimizeButton_PropertyChanged));\n    public static readonly DependencyProperty ShowMaximizeButtonProperty = DependencyProperty.Register(nameof(ShowMaximizeButton), typeof(bool), typeof(ExWindow), new PropertyMetadata(true, ShowMaximizeButton_PropertyChanged));\n\n    public bool ExtendIntoTitleBar\n    {\n        get => (bool)GetValue(ExtendIntoTitleBarProperty);\n        set => SetValue(ExtendIntoTitleBarProperty, value);\n    }\n\n    public bool ShowCustomCaptionButtons\n    {\n        get => (bool)GetValue(ShowCustomCaptionButtonsProperty);\n        set => SetValue(ShowCustomCaptionButtonsProperty, value);\n    }\n\n    public bool WillRenderCustomCaptionButtons\n    {\n        get => (bool)GetValue(WillRenderCustomCaptionButtonsProperty.DependencyProperty);\n        private set => SetValue(WillRenderCustomCaptionButtonsProperty, value);\n    }\n\n    public bool ShowMinimizeButton\n    {\n        get => (bool)GetValue(ShowMinimizeButtonProperty);\n        set => SetValue(ShowMinimizeButtonProperty, value);\n    }\n\n    public bool ShowMaximizeButton\n    {\n        get => (bool)GetValue(ShowMaximizeButtonProperty);\n        set => SetValue(ShowMaximizeButtonProperty, value);\n    }\n\n    static ExWindow()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExWindow), new FrameworkPropertyMetadata(typeof(ExWindow)));\n    }\n\n    public ExWindow()\n    {\n        WillRenderCustomCaptionButtons = ShowCustomCaptionButtons;\n\n        var chrome = new WindowChrome\n        {\n            CaptionHeight = 32,\n            ResizeBorderThickness = SystemParameters.WindowResizeBorderThickness,\n            UseAeroCaptionButtons = !WillRenderCustomCaptionButtons,\n            GlassFrameThickness = new Thickness(-1),\n            NonClientFrameEdges = !WillRenderCustomCaptionButtons || ResizeMode == ResizeMode.NoResize ? NonClientFrameEdges.Right | NonClientFrameEdges.Left : NonClientFrameEdges.None\n        };\n\n        WindowChrome.SetWindowChrome(this, chrome);\n    }\n\n    protected override void OnSourceInitialized(EventArgs e)\n    {\n        base.OnSourceInitialized(e);\n\n        this.GetHwndSource()?.AddHook(Window_Hook);\n    }\n\n    public override void OnApplyTemplate()\n    {\n        _nonClientAreaElement = GetTemplateChild(NonClientAreaElementId) as UIElement;\n        _minimizeButton = GetTemplateChild(MinimizeButtonId) as Button;\n        _maximizeButton = GetTemplateChild(MaximizeButtonId) as Button;\n        _restoreButton = GetTemplateChild(RestoreButtonId) as Button;\n        _closeButton = GetTemplateChild(CloseButtonId) as Button;\n\n        RegisterBaseCommands();\n\n        base.OnApplyTemplate();\n\n        this.SetResizeMode();\n    }\n\n    protected void RegisterBaseCommands()\n    {\n        CommandBindings.Add(new CommandBinding(SystemCommands.MinimizeWindowCommand, (_, _) => SystemCommands.MinimizeWindow(this), (_, args) => args.CanExecute = ShowMinimizeButton));\n        CommandBindings.Add(new CommandBinding(SystemCommands.MaximizeWindowCommand, (_, _) => SystemCommands.MaximizeWindow(this), (_, args) => args.CanExecute = ShowMaximizeButton));\n        CommandBindings.Add(new CommandBinding(SystemCommands.RestoreWindowCommand, (_, _) => SystemCommands.RestoreWindow(this), (_, args) => args.CanExecute = ShowMaximizeButton));\n        CommandBindings.Add(new CommandBinding(SystemCommands.CloseWindowCommand, (_, _) => SystemCommands.CloseWindow(this)));\n    }\n\n    private nint Window_Hook(nint hwnd, int msg, nint wparam, nint lparam, ref bool handled)\n    {\n        switch ((WindowsMessages)msg)\n        {\n            case WindowsMessages.NonClientHitTest:\n            {\n                try\n                {\n                    //Works around a Logitech mouse driver bug, code from https://developercommunity.visualstudio.com/content/problem/167357/overflow-exception-in-windowchrome.html\n                    var _ = lparam.ToInt32();\n                }\n                catch (OverflowException)\n                {\n                    handled = true;\n                }\n\n                if (!ShowCustomCaptionButtons || !ExtendIntoTitleBar || !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 22000) || !ShowMaximizeButton || ResizeMode is ResizeMode.NoResize or ResizeMode.CanMinimize)\n                    return nint.Zero;\n\n                var x = lparam.ToInt32() & 0xffff;\n                var y = lparam.ToInt32() >> 16;\n\n                var button = WindowState == WindowState.Maximized ? _restoreButton : _maximizeButton;\n\n                if (button.HitTestElement(x, y))\n                {\n                    button.SetCurrentValue(BackgroundProperty, FindResource(\"Element.Background.Hover\"));\n\n                    handled = true;\n                    return (nint)HitTestTargets.MaximizeButton; //new nint((int)HitTestTargets.MaximizeButton);\n                }\n\n                button.ClearValue(BackgroundProperty);\n\n                break;\n            }\n\n            case WindowsMessages.NonClientLeftButtonDown:\n            {\n                if (!ShowCustomCaptionButtons || !ExtendIntoTitleBar || !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 22000) || !ShowMaximizeButton || ResizeMode is ResizeMode.NoResize or ResizeMode.CanMinimize)\n                    return nint.Zero;\n\n                //This is necessary in order to change the background color for the maximize/restore button, since the HitTest is handled above.\n                var x = lparam.ToInt32() & 0xffff;\n                var y = lparam.ToInt32() >> 16;\n\n                var button = WindowState == WindowState.Maximized ? _restoreButton : _maximizeButton;\n\n                if (button.HitTestElement(x, y))\n                {\n                    button.SetCurrentValue(BackgroundProperty, FindResource(\"Element.Background.Pressed\"));\n\n                    //Without this, the button click near the bottom border would not work and it would display a ghost button nearby.\n                    handled = true;\n                }\n                else\n                    button.ClearValue(BackgroundProperty);\n\n                break;\n            }\n\n            case WindowsMessages.NonClientLeftButtonUp:\n            {\n                if (!ShowCustomCaptionButtons || !ExtendIntoTitleBar || !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 22000) || !ShowMaximizeButton || ResizeMode is ResizeMode.NoResize or ResizeMode.CanMinimize)\n                    return nint.Zero;\n\n                //This is necessary in order to change the background color for the maximize/restore button, since the HitTest is handled above.\n                var x = lparam.ToInt32() & 0xffff;\n                var y = lparam.ToInt32() >> 16;\n\n                var button = WindowState == WindowState.Maximized ? _restoreButton : _maximizeButton;\n\n                if (button.HitTestElement(x, y))\n                {\n                    button.SetCurrentValue(BackgroundProperty, FindResource(\"Element.Background.Pressed\"));\n\n                    //Without this, the button click near the bottom border would not work and it would display a ghost button nearby.\n                    button.Command.Execute(null);\n                    handled = true;\n                }\n                else\n                    button.ClearValue(BackgroundProperty);\n\n                break;\n            }\n\n            case WindowsMessages.GetMinMaxInfo:\n            {\n                var info = (MinMaxInfo)Marshal.PtrToStructure(lparam, typeof(MinMaxInfo))!;\n                var monitor = WindowHelper.NearestMonitorForWindow(hwnd);\n\n                if (monitor != nint.Zero)\n                {\n                    var monitorInfo = new MonitorInfoEx();\n                    User32.GetMonitorInfo(new HandleRef(this, monitor), monitorInfo);\n\n                    var rcWorkArea = monitorInfo.Work;\n                    var rcMonitorArea = monitorInfo.Monitor;\n\n                    //TODO: Possible issue with multi monitor setups?\n                    info.MaxPosition.X = Math.Abs(rcWorkArea.Left - rcMonitorArea.Left) - 1;\n                    info.MaxPosition.Y = Math.Abs(rcWorkArea.Top - rcMonitorArea.Top) - 1;\n                    info.MaxSize.X = Math.Abs(rcWorkArea.Right - rcWorkArea.Left + 2);\n                    info.MaxSize.Y = Math.Abs(rcWorkArea.Bottom - rcWorkArea.Top + 2);\n                }\n\n                Marshal.StructureToPtr(info, lparam, true);\n\n                break;\n            }\n\n            //case WindowsMessages.WindowPositionChanged:\n            //{\n            //    BorderThickness = WindowState == WindowState.Maximized ? new Thickness(0) : new Thickness(1);\n            //    break;\n            //}\n        }\n\n        return nint.Zero;\n    }\n\n    private static void ShowCustomCaptionButtons_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not ExWindow window)\n            return;\n\n        window.WillRenderCustomCaptionButtons = window.ShowCustomCaptionButtons;\n\n        WindowChrome.GetWindowChrome(window).UseAeroCaptionButtons = !window.WillRenderCustomCaptionButtons;\n        WindowChrome.GetWindowChrome(window).NonClientFrameEdges = !window.WillRenderCustomCaptionButtons ? NonClientFrameEdges.Right | NonClientFrameEdges.Left : NonClientFrameEdges.None;\n    }\n\n    private static void ShowMinimizeButton_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not ExWindow window)\n            return;\n\n        if (window.ShowMinimizeButton)\n            window.EnableMinimize();\n        else\n            window.DisableMinimize();\n    }\n\n    private static void ShowMaximizeButton_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not ExWindow window)\n            return;\n\n        if (window.ShowMaximizeButton)\n            window.EnableMaximize();\n        else\n            window.DisableMaximize();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedButton.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedButton : Button\n{\n    #region Variables\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExtendedButton));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(ExtendedButton));\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExtendedButton), new FrameworkPropertyMetadata(double.NaN));\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExtendedButton), new FrameworkPropertyMetadata(double.NaN));\n\n    public static readonly DependencyProperty KeyGestureProperty = DependencyProperty.Register(nameof(KeyGesture), typeof(string), typeof(ExtendedButton), new FrameworkPropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping), typeof(ExtendedButton), new FrameworkPropertyMetadata(TextWrapping.NoWrap,\n        FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The icon of the button as a brush.\n    /// </summary>\n    [Description(\"The icon of the button as a brush.\"), Category(\"Common\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The text of the button.\n    /// </summary>\n    [Description(\"The text of the button.\"), Category(\"Common\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The height of the button content.\n    /// </summary>\n    [Description(\"The height of the button content.\"), Category(\"Common\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The width of the button content.\n    /// </summary>\n    [Description(\"The width of the button content.\"), Category(\"Common\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The KeyGesture of the button.\n    /// </summary>\n    [Description(\"The KeyGesture of the button.\"), Category(\"Common\")]\n    public string KeyGesture\n    {\n        get => (string)GetValue(KeyGestureProperty);\n        set => SetCurrentValue(KeyGestureProperty, value);\n    }\n\n    /// <summary>\n    /// The TextWrapping property controls whether or not text wraps \n    /// when it reaches the flow edge of its containing block box. \n    /// </summary>\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    #endregion\n\n    static ExtendedButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedButton), new FrameworkPropertyMetadata(typeof(ExtendedButton)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedCheckBox.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedCheckBox : CheckBox\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string),\n        typeof(ExtendedCheckBox), new PropertyMetadata());\n\n    public static readonly DependencyProperty InfoProperty = DependencyProperty.Register(nameof(Info), typeof(string),\n        typeof(ExtendedCheckBox), new PropertyMetadata());\n\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping),\n        typeof(ExtendedCheckBox), new PropertyMetadata(TextWrapping.Wrap));\n\n    public static readonly DependencyProperty UncheckOnDisableProperty = DependencyProperty.Register(nameof(UncheckOnDisable), typeof(bool),\n        typeof(ExtendedCheckBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty IsSmallProperty = DependencyProperty.Register(nameof(IsSmall), typeof(bool),\n        typeof(ExtendedCheckBox), new PropertyMetadata(false));\n\n    #endregion\n\n    #region Properties\n\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    public string Info\n    {\n        get => (string)GetValue(InfoProperty);\n        set => SetValue(InfoProperty, value);\n    }\n\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    public bool UncheckOnDisable\n    {\n        get => (bool)GetValue(UncheckOnDisableProperty);\n        set => SetValue(UncheckOnDisableProperty, value);\n    }\n\n    public bool IsSmall\n    {\n        get => (bool)GetValue(IsSmallProperty);\n        set => SetValue(IsSmallProperty, value);\n    }\n\n    #endregion\n\n    #region Custom Events\n\n    public static readonly RoutedEvent CheckedChangedEvent = EventManager.RegisterRoutedEvent(nameof(CheckedChanged), RoutingStrategy.Bubble,\n        typeof(RoutedEventHandler), typeof(ExtendedCheckBox));\n\n    public event RoutedEventHandler CheckedChanged\n    {\n        add => AddHandler(CheckedChangedEvent, value);\n        remove => RemoveHandler(CheckedChangedEvent, value);\n    }\n\n    public void RaiseCheckedChangedEvent()\n    {\n        if (CheckedChangedEvent == null) return;\n\n        var newEventArgs = new RoutedEventArgs(CheckedChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    #endregion\n\n    static ExtendedCheckBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedCheckBox), new FrameworkPropertyMetadata(typeof(ExtendedCheckBox)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        Checked += (sender, args) => RaiseCheckedChangedEvent();\n        Unchecked += (sender, args) => RaiseCheckedChangedEvent();\n\n        if (UncheckOnDisable)\n            IsEnabledChanged += (sender, args) =>\n            {\n                if (!IsEnabled)\n                    IsChecked = false;\n            };\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedComboBox.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedComboBox : ComboBox\n{\n    public static readonly DependencyProperty SelectionItemBoxProperty = DependencyProperty.Register(nameof(SelectionItemBox), typeof(object), typeof(ExtendedComboBox), new PropertyMetadata(default(object)));\n        \n    public static readonly DependencyProperty SelectionItemBoxTemplateProperty = DependencyProperty.Register(nameof(SelectionItemBoxTemplate), typeof(DataTemplate), typeof(ExtendedComboBox), new PropertyMetadata(default(DataTemplate)));\n\n    public static readonly DependencyProperty EmptyItemProperty = DependencyProperty.Register(nameof(EmptyItem), typeof(object), typeof(ExtendedComboBox), new PropertyMetadata(default(object)));\n        \n    public static readonly DependencyProperty NoSelectionItemProperty = DependencyProperty.Register(nameof(NoSelectionItem), typeof(object), typeof(ExtendedComboBox), new PropertyMetadata(default(object)));\n\n\n    public object SelectionItemBox\n    {\n        get => GetValue(SelectionItemBoxProperty);\n        set => SetValue(SelectionItemBoxProperty, value);\n    }\n\n    public DataTemplate SelectionItemBoxTemplate\n    {\n        get => (DataTemplate) GetValue(SelectionItemBoxTemplateProperty);\n        set => SetValue(SelectionItemBoxTemplateProperty, value);\n    }\n\n    public object EmptyItem\n    {\n        get => GetValue(EmptyItemProperty);\n        set => SetValue(EmptyItemProperty, value);\n    }\n\n    public object NoSelectionItem\n    {\n        get => GetValue(NoSelectionItemProperty);\n        set => SetValue(NoSelectionItemProperty, value);\n    }\n        \n\n    static ExtendedComboBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedComboBox), new FrameworkPropertyMetadata(typeof(ExtendedComboBox)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedListBoxItem.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// ListBoxItem used by the languages listBox.\n/// </summary>\npublic class ExtendedListBoxItem : ListBoxItem\n{\n    #region Variables\n\n    public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(nameof(Image), typeof(UIElement), typeof(ExtendedListBoxItem));\n        \n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExtendedListBoxItem));\n        \n    public static readonly DependencyProperty MainAuthorProperty = DependencyProperty.Register(nameof(MainAuthor), typeof(string), typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(\"\"));\n        \n    public static readonly DependencyProperty AuthorProperty = DependencyProperty.Register(nameof(Author), typeof(string), typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(20d));\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(20d));\n        \n    public static readonly DependencyProperty IndexProperty = DependencyProperty.Register(nameof(Index), typeof(int), typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(0));\n        \n    public static readonly DependencyProperty ShowMarkOnSelectionProperty = DependencyProperty.Register(nameof(ShowMarkOnSelection), typeof(bool), typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(true));\n        \n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The Image of the ListBoxItem.\n    /// </summary>\n    [Description(\"The Image of the ListBoxItem.\")]\n    public UIElement Image\n    {\n        get => (UIElement)GetValue(ImageProperty);\n        set => SetCurrentValue(ImageProperty, value);\n    }\n\n    /// <summary>\n    /// The icon of the ListBoxItem as a Brush.\n    /// </summary>\n    [Description(\"The icon of the ListBoxItem as a Brush.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The author of the ListBoxItem.\n    /// </summary>\n    [Description(\"The main author of the ListBoxItem.\")]\n    public string MainAuthor\n    {\n        get => (string)GetValue(MainAuthorProperty);\n        set => SetCurrentValue(MainAuthorProperty, value);\n    }\n\n    /// <summary>\n    /// The author of the ListBoxItem.\n    /// </summary>\n    [Description(\"The author of the ListBoxItem.\")]\n    public string Author\n    {\n        get => (string)GetValue(AuthorProperty);\n        set => SetCurrentValue(AuthorProperty, value);\n    }\n\n    /// <summary>\n    /// The height of the icon.\n    /// </summary>\n    [Description(\"The height of the icon.\"), Category(\"Common\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The width of the icon.\n    /// </summary>\n    [Description(\"The width of the icon.\"), Category(\"Common\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The index of the item on the list. Must be manually set.\n    /// </summary>\n    [Description(\"The index of the item on the list. Must be manually set.\")]\n    public int Index\n    {\n        get => (int)GetValue(IndexProperty);\n        set => SetCurrentValue(IndexProperty, value);\n    }\n\n    /// <summary>\n    /// True if the item must show the checkmark on selection.\n    /// </summary>\n    [Description(\"True if the item must show the checkmark on selection.\")]\n    public bool ShowMarkOnSelection\n    {\n        get => (bool)GetValue(ShowMarkOnSelectionProperty);\n        set => SetCurrentValue(ShowMarkOnSelectionProperty, value);\n    }\n\n    #endregion\n\n    static ExtendedListBoxItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedListBoxItem), new FrameworkPropertyMetadata(typeof(ExtendedListBoxItem)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedMenuItem.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// MenuItem with an image to the left.\n/// </summary>\npublic class ExtendedMenuItem : MenuItem\n{\n    #region Variables\n\n    public new static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(Icon_Changed));\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(16d));\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(16d));\n\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(TextWrapping.NoWrap,\n        FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty HasIconProperty = DependencyProperty.Register(nameof(HasIcon), typeof(bool), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty DarkModeProperty = DependencyProperty.Register(nameof(DarkMode), typeof(bool), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty IsOverNonClientAreaProperty = DependencyProperty.Register(nameof(IsOverNonClientArea), typeof(bool), typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(false));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The icon of the button as a Brush.\n    /// </summary>\n    [Description(\"The icon of the button as a Brush.\")]\n    public new Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set\n        {\n            SetCurrentValue(IconProperty, value);\n            SetCurrentValue(HasIconProperty, value != null);\n        }\n    }\n\n    /// <summary>\n    /// The height of the button content.\n    /// </summary>\n    [Description(\"The height of the button content.\"), Category(\"Common\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The width of the button content.\n    /// </summary>\n    [Description(\"The width of the button content.\"), Category(\"Common\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetCurrentValue(TextWrappingProperty, value);\n    }\n\n    /// <summary>\n    /// True if the menu item contains an icon.\n    /// </summary>\n    [Description(\"True if the menu item contains an icon.\")]\n    public bool HasIcon\n    {\n        get => (bool)GetValue(HasIconProperty);\n        set => SetCurrentValue(HasIconProperty, value);\n    }\n\n    /// <summary>\n    /// True if the menu should adjust itself for dark mode.\n    /// </summary>\n    [Description(\"True if the menu should adjust itself for dark mode.\")]\n    public bool DarkMode\n    {\n        get => (bool)GetValue(DarkModeProperty);\n        set => SetCurrentValue(DarkModeProperty, value);\n    }\n\n    /// <summary>\n    /// True if the button is being drawn on top of the non client area.\n    /// </summary>\n    [Description(\"True if the button is being drawn on top of the non client area.\")]\n    public bool IsOverNonClientArea\n    {\n        get => (bool)GetValue(IsOverNonClientAreaProperty);\n        set => SetCurrentValue(IsOverNonClientAreaProperty, value);\n    }\n\n    #endregion\n\n    #region Property Changed\n\n    private static void Icon_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((ExtendedMenuItem)d).HasIcon = e.NewValue != null;\n    }\n\n    #endregion\n\n    static ExtendedMenuItem()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedMenuItem), new FrameworkPropertyMetadata(typeof(ExtendedMenuItem)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedProgressBar.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedProgressBar : ProgressBar\n{\n    public enum ProgressState\n    {\n        Primary,\n        Info,\n        Warning,\n        Danger\n    }\n\n    public static readonly DependencyProperty StateProperty = DependencyProperty.Register(nameof(State), typeof(ProgressState), typeof(ExtendedProgressBar), new PropertyMetadata(ProgressState.Primary));\n    public static readonly DependencyProperty ShowPercentageProperty = DependencyProperty.Register(nameof(ShowPercentage), typeof(bool), typeof(ExtendedProgressBar), new PropertyMetadata(default(bool)));\n\n    public ProgressState State\n    {\n        get => (ProgressState)GetValue(StateProperty);\n        set => SetValue(StateProperty, value);\n    }\n\n    public bool ShowPercentage\n    {\n        get => (bool) GetValue(ShowPercentageProperty);\n        set => SetValue(ShowPercentageProperty, value);\n    }\n\n    static ExtendedProgressBar()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedProgressBar), new FrameworkPropertyMetadata(typeof(ExtendedProgressBar)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedRadioButton.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedRadioButton : RadioButton\n{\n    #region Variables\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExtendedRadioButton), new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(ExtendedRadioButton), new FrameworkPropertyMetadata());\n        \n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExtendedRadioButton), new FrameworkPropertyMetadata(26.0));\n        \n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExtendedRadioButton), new FrameworkPropertyMetadata(26.0));\n        \n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping), typeof(ExtendedRadioButton), new FrameworkPropertyMetadata(TextWrapping.NoWrap,\n        FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The icon of the radio button.\n    /// </summary>\n    [Description(\"The icon of the radio button.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The text of the button.\n    /// </summary>\n    [Description(\"The text of the button.\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The TextWrapping property controls whether or not text wraps \n    /// when it reaches the flow edge of its containing block box. \n    /// </summary>\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    #endregion\n\n    static ExtendedRadioButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedRadioButton), new FrameworkPropertyMetadata(typeof(ExtendedRadioButton)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedRepeatButton.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedRepeatButton : RepeatButton\n{\n    #region Variables\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExtendedRepeatButton));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(ExtendedRepeatButton), new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExtendedRepeatButton), new FrameworkPropertyMetadata(double.NaN));\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExtendedRepeatButton), new FrameworkPropertyMetadata(double.NaN));\n\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping), typeof(ExtendedRepeatButton), new FrameworkPropertyMetadata(TextWrapping.NoWrap,\n        FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The icon of the button as a brush.\n    /// </summary>\n    [Description(\"The icon of the button as a brush.\"), Category(\"Common\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The text of the button.\n    /// </summary>\n    [Description(\"The text of the button.\"), Category(\"Common\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The height of the button content.\n    /// </summary>\n    [Description(\"The height of the button content.\"), Category(\"Common\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The width of the button content.\n    /// </summary>\n    [Description(\"The width of the button content.\"), Category(\"Common\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The TextWrapping property controls whether or not text wraps \n    /// when it reaches the flow edge of its containing block box. \n    /// </summary>\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    #endregion\n\n    static ExtendedRepeatButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedRepeatButton), new FrameworkPropertyMetadata(typeof(ExtendedRepeatButton)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedSlider.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\ninternal class ExtendedSlider : Slider\n{\n    public static readonly DependencyProperty ShowNumbersProperty = DependencyProperty.Register(nameof(ShowNumbers), typeof(bool), typeof(ExtendedSlider), new PropertyMetadata(default(bool)));\n\n    public bool ShowNumbers\n    {\n        get => (bool) GetValue(ShowNumbersProperty);\n        set => SetValue(ShowNumbersProperty, value);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedTextBox.cs",
    "content": "using System.ComponentModel;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedTextBox : TextBox\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty AllowSpacingyProperty = DependencyProperty.Register(nameof(AllowSpacing), typeof(bool), typeof(ExtendedTextBox), new PropertyMetadata(true));\n\n    public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register(nameof(Watermark), typeof(string), typeof(ExtendedTextBox), new PropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty IsObligatoryProperty = DependencyProperty.Register(nameof(IsObligatory), typeof(bool), typeof(ExtendedTextBox));\n        \n    public static readonly DependencyProperty AllowedCharactersProperty = DependencyProperty.Register(nameof(AllowedCharacters), typeof(string), typeof(ExtendedTextBox));\n\n    #endregion\n\n    #region Properties\n\n    [Bindable(true), Category(\"Common\")]\n    public bool AllowSpacing\n    {\n        get => (bool)GetValue(AllowSpacingyProperty);\n        set => SetValue(AllowSpacingyProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public string Watermark\n    {\n        get => (string)GetValue(WatermarkProperty);\n        set => SetValue(WatermarkProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool IsObligatory\n    {\n        get => (bool)GetValue(IsObligatoryProperty);\n        set => SetValue(IsObligatoryProperty, value);\n    }\n\n    /// <summary>\n    /// When this property has any character, the input text will be only accepted if the character is present in the list of allowed chars.\n    /// </summary>\n    [Bindable(true), Category(\"Common\")]\n    public string AllowedCharacters\n    {\n        get => (string)GetValue(AllowedCharactersProperty);\n        set => SetValue(AllowedCharactersProperty, value);\n    }\n\n    #endregion\n\n    static ExtendedTextBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedTextBox), new FrameworkPropertyMetadata(typeof(ExtendedTextBox)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        AddHandler(DataObject.PastingEvent, new DataObjectPastingEventHandler(OnPasting));\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        if (!AllowSpacing && e.Key == Key.Space)\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewKeyDown(e);\n    }\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        if (!string.IsNullOrWhiteSpace(AllowedCharacters) && !IsEntryAllowed(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewTextInput(e);\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n\n        if (UserSettings.All.TripleClickSelection && e.ClickCount == 3)\n            SelectAll();\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        if (!UserSettings.All.TripleClickSelection)\n            SelectAll();\n    }\n\n    private void OnPasting(object sender, DataObjectPastingEventArgs e)\n    {\n        if (e.DataObject.GetDataPresent(typeof(string)))\n        {\n            var text = e.DataObject.GetData(typeof(string)) as string;\n\n            if (!string.IsNullOrWhiteSpace(AllowedCharacters) && !IsTextAllowed(text))\n                e.CancelCommand();\n\n            return;\n        }\n\n        e.CancelCommand();\n    }\n\n    private bool IsEntryAllowed(string text)\n    {\n        //Only the allowed chars.\n        var regex = new Regex($\"^[{AllowedCharacters.Replace(\"-\", @\"\\-\")}]+$\");\n\n        //Checks if it's a valid char based on the context.\n        return regex.IsMatch(text);\n    }\n\n    private bool IsTextAllowed(string text)\n    {\n        return Regex.IsMatch(text, $\"^[{AllowedCharacters.Replace(\"-\", @\"\\-\") + (AllowSpacing ? \" \" : \"\")})]+$\");\n    }\n\n    public bool IsNullOrWhiteSpace()\n    {\n        return string.IsNullOrWhiteSpace(Text);\n    }\n\n    public bool IsNullOrEmpty()\n    {\n        return string.IsNullOrEmpty(Text);\n    }\n\n    public string Trim()\n    {\n        return Text.Trim();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedToggleButton.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// A toggle button with a image inside.\n/// </summary>\npublic class ExtendedToggleButton : ToggleButton\n{\n    #region Variables\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(\"Button\"));\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata());\n\n    public static readonly DependencyProperty KeyGestureProperty = DependencyProperty.Register(nameof(KeyGesture), typeof(string), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(double.NaN));\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(double.NaN));\n\n    /// <summary>\n    /// DependencyProperty for <see cref=\"TextWrapping\" /> property.\n    /// </summary>\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping), typeof(ExtendedToggleButton),\n        new FrameworkPropertyMetadata(TextWrapping.NoWrap, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty DarkModeProperty = DependencyProperty.Register(nameof(DarkMode), typeof(bool), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty IsOverNonClientAreaProperty = DependencyProperty.Register(nameof(IsOverNonClientArea), typeof(bool), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty IsImportantProperty = DependencyProperty.Register(nameof(IsImportant), typeof(bool), typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(false));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The text of the button.\n    /// </summary>\n    [Description(\"The text of the button.\"), Category(\"Common\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The icon of the radio button.\n    /// </summary>\n    [Description(\"The icon of the toggle button.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The KeyGesture of the button.\n    /// </summary>\n    [Description(\"The KeyGesture of the button.\"), Category(\"Common\")]\n    public string KeyGesture\n    {\n        get => (string)GetValue(KeyGestureProperty);\n        set => SetCurrentValue(KeyGestureProperty, value);\n    }\n\n    /// <summary>\n    /// The height of the button content.\n    /// </summary>\n    [Description(\"The height of the button content.\"), Category(\"Common\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The width of the button content.\n    /// </summary>\n    [Description(\"The width of the button content.\"), Category(\"Common\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The TextWrapping property controls whether or not text wraps\n    /// when it reaches the flow edge of its containing block box.\n    /// </summary>\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    /// <summary>\n    /// True if the button should adjust itself for dark mode.\n    /// </summary>\n    [Description(\"True if the button should adjust itself for dark mode.\")]\n    public bool DarkMode\n    {\n        get => (bool)GetValue(DarkModeProperty);\n        set => SetCurrentValue(DarkModeProperty, value);\n    }\n\n    /// <summary>\n    /// True if the button is being drawn on top of the non client area.\n    /// </summary>\n    [Description(\"True if the button is being drawn on top of the non client area.\")]\n    public bool IsOverNonClientArea\n    {\n        get => (bool)GetValue(IsOverNonClientAreaProperty);\n        set => SetCurrentValue(IsOverNonClientAreaProperty, value);\n    }\n\n    /// <summary>\n    /// True if the button should be displayed with a warning color.\n    /// </summary>\n    [Description(\"True if the button should be displayed with a warning color.\")]\n    public bool IsImportant\n    {\n        get => (bool)GetValue(IsImportantProperty);\n        set => SetCurrentValue(IsImportantProperty, value);\n    }\n\n    #endregion\n\n    static ExtendedToggleButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ExtendedToggleButton), new FrameworkPropertyMetadata(typeof(ExtendedToggleButton)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/ExtendedUniformGrid.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls.Primitives;\n\nnamespace ScreenToGif.Controls;\n\npublic class ExtendedUniformGrid : UniformGrid\n{\n    public static readonly DependencyProperty IsReversedProperty = DependencyProperty.Register(nameof(IsReversed), typeof(bool), typeof(ExtendedUniformGrid),\n        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));\n\n    //private static void IsReversed_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    //{\n    //    if (!(o is ExtendedUniformGrid grid))\n    //        return;\n    //}\n\n    public bool IsReversed\n    {\n        get => (bool)GetValue(IsReversedProperty);\n        set => SetValue(IsReversedProperty, value);\n    }\n\n    protected override Size MeasureOverride(Size constraint)\n    {\n        UpdateComputedValues();\n\n        var availableSize = new Size(constraint.Width / Columns, constraint.Height / Rows);\n        var num1 = 0.0;\n        var num2 = 0.0;\n\n        if (IsReversed)\n        {\n            for (var i = InternalChildren.Count - 1; i >= 0; i--)\n            {\n                var internalChild = InternalChildren[i];\n                internalChild.Measure(availableSize);\n                var desiredSize = internalChild.DesiredSize;\n\n                if (num1 < desiredSize.Width)\n                    num1 = desiredSize.Width;\n\n                if (num2 < desiredSize.Height)\n                    num2 = desiredSize.Height;\n            }\n\n            return new Size(num1 * Columns, num2 * Rows);\n        }\n\n        var index = 0;\n\n        for (var count = InternalChildren.Count; index < count; ++index)\n        {\n            var internalChild = InternalChildren[index];\n            internalChild.Measure(availableSize);\n            var desiredSize = internalChild.DesiredSize;\n\n            if (num1 < desiredSize.Width)\n                num1 = desiredSize.Width;\n\n            if (num2 < desiredSize.Height)\n                num2 = desiredSize.Height;\n        }\n\n        return new Size(num1 * Columns, num2 * Rows);\n    }\n\n    protected override Size ArrangeOverride(Size arrangeSize)\n    {\n        var finalRect = new Rect(0.0, 0.0, arrangeSize.Width / Columns, arrangeSize.Height / Rows);\n        var width = finalRect.Width;\n        var num = arrangeSize.Width - 1.0;\n\n        finalRect.X += finalRect.Width * FirstColumn;\n\n        if (IsReversed)\n        {\n            for (var i = InternalChildren.Count - 1; i >= 0; i--)\n            {\n                InternalChildren[i].Arrange(finalRect);\n\n                if (InternalChildren[i].Visibility != Visibility.Collapsed)\n                {\n                    finalRect.X += width;\n\n                    if (finalRect.X >= num)\n                    {\n                        finalRect.Y += finalRect.Height;\n                        finalRect.X = 0.0;\n                    }\n                }\n            }\n\n            return arrangeSize;\n        }\n\n        foreach (UIElement internalChild in InternalChildren)\n        {\n            internalChild.Arrange(finalRect);\n\n            if (internalChild.Visibility != Visibility.Collapsed)\n            {\n                finalRect.X += width;\n\n                if (finalRect.X >= num)\n                {\n                    finalRect.Y += finalRect.Height;\n                    finalRect.X = 0.0;\n                }\n            }\n        }\n\n        return arrangeSize;\n    }\n\n    private void UpdateComputedValues()\n    {\n        if (FirstColumn >= Columns)\n            FirstColumn = 0;\n\n        if (Rows != 0 && Columns != 0)\n            return;\n\n        var num = 0;\n        var index = 0;\n\n        for (var count = InternalChildren.Count; index < count; ++index)\n        {\n            if (InternalChildren[index].Visibility != Visibility.Collapsed)\n                ++num;\n        }\n\n        if (num == 0)\n            num = 1;\n\n        if (Rows == 0)\n        {\n            if (Columns > 0)\n            {\n                Rows = (num + FirstColumn + (Columns - 1)) / Columns;\n            }\n            else\n            {\n                Rows = (int)Math.Sqrt(num);\n\n                if (Rows * Rows < num)\n                    Rows = Rows + 1;\n\n                Columns = Rows;\n            }\n        }\n        else\n        {\n            if (Columns != 0)\n                return;\n\n            Columns = (num + (Rows - 1)) / Rows;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/FolderSelector.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows.Forms;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Folder selector, vista-style.\n/// </summary>\n/// <remarks>\n/// Source:\n/// https://www.magnumdb.com/search?q=IShellItem\n/// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ifiledialog\n/// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/ne-shobjidl_core-_fileopendialogoptions\n/// https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/ne-shobjidl_core-sigdn\n/// </remarks>\ninternal class FolderSelector\n{\n    #region Native\n\n    #region Constants\n\n    /// <summary>\n    /// Present an Open dialog that offers a choice of folders rather than files.\n    /// </summary>\n    public const uint DialogPickFolders = 0x00000020;\n\n    /// <summary>\n    /// Ensures that returned items are file system items (SFGAO_FILESYSTEM).\n    /// Note that this does not apply to items returned by IFileDialog::GetCurrentSelection.\n    /// </summary>\n    public const uint DialogForceFileSystem = 0x00000040;\n\n    /// <summary>\n    /// Do not check for situations that would prevent an application from opening the selected file, such as sharing violations or access denied errors.\n    /// </summary>\n    public const uint DialogNoValidade = 0x00000100;\n\n    /// <summary>\n    /// Do not test whether creation of the item as specified in the Save dialog will be successful.\n    /// If this flag is not set, the calling application must handle errors, such as denial of access, discovered when the item is created.\n    /// </summary>\n    public const uint DialogNoTestFileCreate = 0x00010000;\n\n    /// <summary>\n    /// Do not add the item being opened or saved to the recent documents list (SHAddToRecentDocs).\n    /// </summary>\n    public const uint DialogDontAddToRecent = 0x02000000;\n\n    /// <summary>\n    /// Ok return status.\n    /// </summary>\n    public const uint StatusOk = 0x0000;\n\n    /// <summary>\n    /// Returns the item's file system path, if it has one. Only items that report SFGAO_FILESYSTEM have a file system path.\n    /// When an item does not have a file system path, a call to IShellItem::GetDisplayName on that item will fail.\n    /// In UI this name is suitable for display to the user in some cases, but note that it might not be specified for all items.\n    /// </summary>\n    public const uint DisplayFileSysPath = 0x80058000;\n\n    #endregion\n\n    #region COM Imports\n\n    [ComImport, ClassInterface(ClassInterfaceType.None), TypeLibType(TypeLibTypeFlags.FCanCreate), Guid(\"DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7\")]\n    internal class FileOpenDialogRCW { }\n\n    [ComImport, Guid(\"42F85136-DB7E-439C-85F1-E4075D135FC8\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    internal interface IFileDialog\n    {\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), PreserveSig]\n        uint Show([In, Optional] IntPtr hwndOwner); //IModalWindow \n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr rgFilterSpec);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetFileTypeIndex([In] uint iFileType);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetFileTypeIndex(out uint piFileType);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint Advise([In, MarshalAs(UnmanagedType.Interface)] IntPtr pfde, out uint pdwCookie);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint Unadvise([In] uint dwCookie);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetOptions([In] uint fos);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetOptions(out uint fos);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszName);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetTitle([In, MarshalAs(UnmanagedType.LPWStr)] string pszTitle);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetOkButtonLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszText);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetFileNameLabel([In, MarshalAs(UnmanagedType.LPWStr)] string pszLabel);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, uint fdap);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetDefaultExtension([In, MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint Close([MarshalAs(UnmanagedType.Error)] uint hr);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetClientGuid([In] ref Guid guid);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint ClearClientData();\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter);\n    }\n\n    [ComImport, Guid(\"43826D1E-E718-42EE-BC55-A1E261C37BFE\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    internal interface IShellItem\n    {\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint BindToHandler([In] IntPtr pbc, [In] ref Guid rbhid, [In] ref Guid riid, [Out, MarshalAs(UnmanagedType.Interface)] out IntPtr ppvOut);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetDisplayName([In] uint sigdnName, out IntPtr ppszName);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs);\n\n        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]\n        uint Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder);\n    }\n\n    #endregion\n\n    [DllImport(\"shell32.dll\", CharSet = CharSet.Unicode, SetLastError = true)]\n    internal static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IntPtr pbc, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out IShellItem ppv);\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// Gets or sets the descriptive text displayed above the tree view control in the dialog box.\n    /// </summary>\n    public string Description { get; set; }\n\n    /// <summary>\n    /// Gets or sets the selected folder path.\n    /// If some path is set before opening the dialog, that path is used as a folder that is always\n    /// selected when the dialog is opened, regardless of previous user action.\n    /// </summary>\n    public string SelectedPath { get; set; }\n\n    /// <summary>\n    /// Default folder to be used if no recent folder available.\n    /// </summary>\n    public string DefaultFolder { get; set; }\n\n    #endregion\n        \n    public bool ShowDialog(IWin32Window owner = null)\n    {\n        //ReSharper disable once SuspiciousTypeConversion.Global\n        var frm = (IFileDialog) new FileOpenDialogRCW();\n            \n        //Set folder picker options.\n        frm.GetOptions(out var options);\n        options |= DialogPickFolders | DialogForceFileSystem | DialogNoValidade | DialogNoTestFileCreate | DialogDontAddToRecent;\n        frm.SetOptions(options);\n            \n        if (!string.IsNullOrWhiteSpace(Description))\n            frm.SetTitle(Description);\n\n        if (SelectedPath != null)\n        {\n            //IShellItem\n            var riid = new Guid(\"43826D1E-E718-42EE-BC55-A1E261C37BFE\");\n\n            if (SHCreateItemFromParsingName(SelectedPath, IntPtr.Zero, ref riid, out var directoryShellItem) == StatusOk)\n                frm.SetFolder(directoryShellItem);\n        }\n\n        if (DefaultFolder != null)\n        {\n            //IShellItem\n            var riid = new Guid(\"43826D1E-E718-42EE-BC55-A1E261C37BFE\");\n\n            if (SHCreateItemFromParsingName(DefaultFolder, IntPtr.Zero, ref riid, out var directoryShellItem) == StatusOk)\n                frm.SetDefaultFolder(directoryShellItem);\n        }\n\n        if (frm.Show(owner?.Handle ?? IntPtr.Zero) != StatusOk || frm.GetResult(out var shellItem) != StatusOk || shellItem.GetDisplayName(DisplayFileSysPath, out var pszString) != StatusOk || pszString == IntPtr.Zero)\n            return false;\n            \n        try\n        {\n            SelectedPath = Marshal.PtrToStringAuto(pszString);\n            return true;\n        }\n        finally\n        {\n            Marshal.FreeCoTaskMem(pszString);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/FrameViewer.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media.Imaging;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Frame viewer that works with a WriteableBitmap.\n/// </summary>\npublic class FrameViewer : Control\n{\n    //UI\n    //Image scale difference with screen scale.\n    //Zoom.\n    //Mouse and keyboard events.\n    //Check if rendering works.\n        \n    #region Properties\n\n    public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(nameof(Source), typeof(WriteableBitmap), typeof(FrameViewer), \n        new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, Source_PropertyChanged));\n\n    public static readonly DependencyProperty ZoomProperty = DependencyProperty.Register(nameof(Zoom), typeof(double), typeof(FrameViewer), \n        new FrameworkPropertyMetadata(1d, FrameworkPropertyMetadataOptions.AffectsRender, Zoom_PropertyChanged));\n\n\n    /// <summary>\n    /// The source image.\n    /// </summary>\n    [Description(\"The source image.\")]\n    public WriteableBitmap Source\n    {\n        get => (WriteableBitmap)GetValue(SourceProperty);\n        set => SetValue(SourceProperty, value);\n    }\n\n    /// <summary>\n    /// The zoom level of the image.\n    /// </summary>\n    [Description(\"The zoom level of the image.\")]\n    public double Zoom\n    {\n        get => (double)GetValue(ZoomProperty);\n        set => SetCurrentValue(ZoomProperty, value);\n    }\n\n\n\n    #endregion\n\n    static FrameViewer()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(FrameViewer), new FrameworkPropertyMetadata(typeof(FrameViewer)));\n    }\n\n\n    private static void Source_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        //When the image source changes, the UI needs to be adjusted somewhow.\n    }\n\n    private static void Zoom_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/FrameworkElementAdorner.cs",
    "content": "using System.Collections;\nusing System.Windows;\nusing System.Windows.Documents;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// This class is an adorner that allows a FrameworkElement derived class to adorn another FrameworkElement. From \n/// </summary>\npublic class FrameworkElementAdorner : Adorner\n{\n    #region Variables and Properties\n\n    /// <summary>\n    /// The framework element that is the adorner. \n    /// </summary>\n    private readonly FrameworkElement _child;\n\n    /// <summary>\n    /// Placement of the child.\n    /// </summary>\n    private readonly AdornerPlacement _horizontalAdornerPlacement = AdornerPlacement.Inside;\n    private readonly AdornerPlacement _verticalAdornerPlacement = AdornerPlacement.Inside;\n\n    /// <summary>\n    /// Offset of the child.\n    /// </summary>\n    private readonly double _offsetX = 0.0;\n    private readonly double _offsetY = 0.0;\n\n    /// <summary>\n    /// Position of the child (when not set to NaN).\n    /// </summary>\n    public double PositionX { get; set; } = double.NaN;\n\n    public double PositionY { get; set; } = double.NaN;\n\n    #endregion\n\n    public FrameworkElementAdorner(FrameworkElement adornerChildElement, FrameworkElement adornedElement)\n        : base(adornedElement)\n    {\n        _child = adornerChildElement;\n\n        AddLogicalChild(adornerChildElement);\n        AddVisualChild(adornerChildElement);\n    }\n\n    public FrameworkElementAdorner(FrameworkElement adornerChildElement, FrameworkElement adornedElement, AdornerPlacement horizontalAdornerPlacement, AdornerPlacement verticalAdornerPlacement, double offsetX, double offsetY)\n        : base(adornedElement)\n    {\n        _child = adornerChildElement;\n        _horizontalAdornerPlacement = horizontalAdornerPlacement;\n        _verticalAdornerPlacement = verticalAdornerPlacement;\n        _offsetX = offsetX;\n        _offsetY = offsetY;\n\n        adornedElement.SizeChanged += AdornedElement_SizeChanged;\n\n        AddLogicalChild(adornerChildElement);\n        AddVisualChild(adornerChildElement);\n    }\n\n    /// <summary>\n    /// Event raised when the adorned control's size has changed.\n    /// </summary>\n    private void AdornedElement_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        InvalidateMeasure();\n    }\n\n    #region Overrides\n\n    protected override Size MeasureOverride(Size constraint)\n    {\n        _child.Measure(constraint);\n        return _child.DesiredSize;\n    }\n\n    protected override Size ArrangeOverride(Size finalSize)\n    {\n        var x = PositionX;\n\n        if (double.IsNaN(x))\n            x = DetermineX();\n\n        var y = PositionY;\n\n        if (double.IsNaN(y))\n            y = DetermineY();\n\n        var adornerWidth = DetermineWidth();\n        var adornerHeight = DetermineHeight();\n        _child.Arrange(new Rect(x, y, adornerWidth, adornerHeight));\n        return finalSize;\n    }\n\n    protected override int VisualChildrenCount { get; } = 1;\n\n    protected override Visual GetVisualChild(int index)\n    {\n        return _child;\n    }\n\n    protected override IEnumerator LogicalChildren\n    {\n        get\n        {\n            var list = new ArrayList { _child };\n\n            return (IEnumerator)list.GetEnumerator();\n        }\n    }\n        \n    /// <summary>\n    /// Override AdornedElement from base class for less type-checking.\n    /// </summary>\n    public new FrameworkElement AdornedElement => (FrameworkElement)base.AdornedElement;\n\n    #endregion\n\n    #region Methods\n\n    /// <summary>\n    /// Determine the X coordinate of the child.\n    /// </summary>\n    private double DetermineX()\n    {\n        switch (_child.HorizontalAlignment)\n        {\n            case HorizontalAlignment.Left:\n            {\n                if (_horizontalAdornerPlacement == AdornerPlacement.Outside)\n                    return -_child.DesiredSize.Width + _offsetX;\n\n                return _offsetX;\n            }\n            case HorizontalAlignment.Right:\n            {\n                if (_horizontalAdornerPlacement == AdornerPlacement.Outside)\n                {\n                    var adornedWidth = AdornedElement.ActualWidth;\n                    return adornedWidth + _offsetX;\n                }\n                else\n                {\n                    var adornerWidth = _child.DesiredSize.Width;\n                    var adornedWidth = AdornedElement.ActualWidth;\n                    var x = adornedWidth - adornerWidth;\n                    return x + _offsetX;\n                }\n            }\n            case HorizontalAlignment.Center:\n            {\n                var adornerWidth = _child.DesiredSize.Width;\n                var adornedWidth = AdornedElement.ActualWidth;\n                var x = (adornedWidth / 2) - (adornerWidth / 2);\n                return x + _offsetX;\n            }\n\n            case HorizontalAlignment.Stretch:\n                return 0.0;\n        }\n\n        return 0.0;\n    }\n\n    /// <summary>\n    /// Determine the Y coordinate of the child.\n    /// </summary>\n    private double DetermineY()\n    {\n        switch (_child.VerticalAlignment)\n        {\n            case VerticalAlignment.Top:\n            {\n                if (_verticalAdornerPlacement == AdornerPlacement.Outside)\n                    return -_child.DesiredSize.Height + _offsetY;\n\n                return _offsetY;\n            }\n\n            case VerticalAlignment.Bottom:\n            {\n                if (_verticalAdornerPlacement == AdornerPlacement.Outside)\n                {\n                    var adornedHeight = AdornedElement.ActualHeight;\n                    return adornedHeight + _offsetY;\n                }\n                else\n                {\n                    var adornerHeight = _child.DesiredSize.Height;\n                    var adornedHeight = AdornedElement.ActualHeight;\n                    var x = adornedHeight - adornerHeight;\n                    return x + _offsetY;\n                }\n            }\n\n            case VerticalAlignment.Center:\n            {\n                var adornerHeight = _child.DesiredSize.Height;\n                var adornedHeight = AdornedElement.ActualHeight;\n                var x = (adornedHeight / 2) - (adornerHeight / 2);\n                return x + _offsetY;\n            }\n\n            case VerticalAlignment.Stretch:\n                return 0.0;\n        }\n\n        return 0.0;\n    }\n\n    /// <summary>\n    /// Determine the width of the child.\n    /// </summary>\n    private double DetermineWidth()\n    {\n        if (!double.IsNaN(PositionX))\n            return _child.DesiredSize.Width;\n\n        switch (_child.HorizontalAlignment)\n        {\n            case HorizontalAlignment.Left:\n                return _child.DesiredSize.Width;\n            case HorizontalAlignment.Right:\n                return _child.DesiredSize.Width;\n            case HorizontalAlignment.Center:\n                return _child.DesiredSize.Width;\n            case HorizontalAlignment.Stretch:\n                return AdornedElement.ActualWidth;\n        }\n\n        return 0.0;\n    }\n\n    /// <summary>\n    /// Determine the height of the child.\n    /// </summary>\n    private double DetermineHeight()\n    {\n        if (!double.IsNaN(PositionY))\n            return _child.DesiredSize.Height;\n\n        switch (_child.VerticalAlignment)\n        {\n            case VerticalAlignment.Top:\n                return _child.DesiredSize.Height;\n            case VerticalAlignment.Bottom:\n                return _child.DesiredSize.Height;\n            case VerticalAlignment.Center:\n                return _child.DesiredSize.Height;\n            case VerticalAlignment.Stretch:\n                return AdornedElement.ActualHeight;\n        }\n\n        return 0.0;\n    }\n\n    /// <summary>\n    /// Disconnect the child element from the visual tree so that it may be reused later.\n    /// </summary>\n    public void DisconnectChild()\n    {\n        RemoveLogicalChild(_child);\n        RemoveVisualChild(_child);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/HeaderedTooltip.cs",
    "content": "using System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Markup;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n[ContentProperty(\"Inlines\")]\n[TemplatePart(Name = \"PART_InlinesPresenter\", Type = typeof(TextBlock))]\npublic class HeaderedTooltip : ToolTip\n{\n    #region Variables\n\n    public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register(nameof(Header), typeof(string), typeof(HeaderedTooltip), new FrameworkPropertyMetadata(\"Header\"));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(HeaderedTooltip), new FrameworkPropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty TextAlignmentProperty = DependencyProperty.Register(nameof(TextAlignment), typeof(TextAlignment),\n        typeof(HeaderedTooltip), new FrameworkPropertyMetadata(TextAlignment.Left));\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(HeaderedTooltip));\n\n    public static readonly DependencyProperty MaxSizeProperty = DependencyProperty.Register(nameof(MaxSize), typeof(double), typeof(HeaderedTooltip), new FrameworkPropertyMetadata(14.0));\n\n    private Collection<Inline> _inlines = new Collection<Inline>();\n    private TextBlock _inlinesPresenter = null;\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The header of the tooltip.\n    /// </summary>\n    [Description(\"The header of the tooltip.\")]\n    public string Header\n    {\n        get => (string)GetValue(HeaderProperty);\n        set => SetCurrentValue(HeaderProperty, value);\n    }\n\n    /// <summary>\n    /// The text of the description.\n    /// </summary>\n    [Description(\"The text of the description.\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetCurrentValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The text alignment of the description.\n    /// </summary>\n    [Description(\"The text alignment of the description.\")]\n    public TextAlignment TextAlignment\n    {\n        get => (TextAlignment)GetValue(TextAlignmentProperty);\n        set => SetCurrentValue(TextAlignmentProperty, value);\n    }\n\n    /// <summary>\n    /// The icon of the Tooltip.\n    /// </summary>\n    [Description(\"The icon of the Tooltip.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Description(\"The maximum size of the image.\")]\n    public double MaxSize\n    {\n        get => (double)GetValue(MaxSizeProperty);\n        set => SetCurrentValue(MaxSizeProperty, value);\n    }\n\n    public Collection<Inline> Inlines\n    {\n        get => _inlines;\n        set\n        {\n            _inlines = value;\n\n            UpdateInlines();\n        }\n    }\n\n    #endregion\n\n    static HeaderedTooltip()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(HeaderedTooltip), new FrameworkPropertyMetadata(typeof(HeaderedTooltip)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.ApplyTemplate();\n\n        _inlinesPresenter = GetTemplateChild(\"PART_InlinesPresenter\") as TextBlock;\n\n        if (_inlinesPresenter == null || !Inlines.Any())\n            return;\n\n        Text = \"\";\n\n        var targetInlines = _inlinesPresenter.Inlines;\n\n        foreach (var inline in Inlines) \n            targetInlines.Add(inline);\n    }\n\n    public void Clear()\n    {\n        Text = \"\";\n        Inlines.Clear();\n    }\n\n    public void UpdateInlines()\n    {\n        if (_inlinesPresenter == null)\n            return;\n\n        _inlinesPresenter.Inlines.Clear();\n        _inlinesPresenter.Inlines.AddRange(Inlines);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/HexadecimalBox.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\npublic class HexadecimalBox : ExtendedTextBox\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty RedProperty = DependencyProperty.Register(\"Red\", typeof(int), typeof(HexadecimalBox), new PropertyMetadata(0, Value_PropertyChanged));\n\n    public static readonly DependencyProperty GreenProperty = DependencyProperty.Register(\"Green\", typeof(int), typeof(HexadecimalBox), new PropertyMetadata(0, Value_PropertyChanged));\n\n    public static readonly DependencyProperty BlueProperty = DependencyProperty.Register(\"Blue\", typeof(int), typeof(HexadecimalBox), new PropertyMetadata(0, Value_PropertyChanged));\n\n    public static readonly DependencyProperty AlphaProperty = DependencyProperty.Register(\"Alpha\", typeof(int), typeof(HexadecimalBox), new PropertyMetadata(255, Value_PropertyChanged));\n\n    public static readonly DependencyProperty DisplayGlyphProperty = DependencyProperty.Register(\"DisplayGlyph\", typeof(bool), typeof(HexadecimalBox), new PropertyMetadata(true));\n\n    public static readonly DependencyProperty DisplayAlphaProperty = DependencyProperty.Register(\"DisplayAlpha\", typeof(bool), typeof(HexadecimalBox), new PropertyMetadata(true));\n\n    public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent(\"ValueChanged\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(HexadecimalBox));\n\n    #endregion\n\n    #region Properties\n\n    public int Red\n    {\n        get => (int)GetValue(RedProperty);\n        set => SetValue(RedProperty, value);\n    }\n\n    public int Blue\n    {\n        get => (int)GetValue(BlueProperty);\n        set => SetValue(BlueProperty, value);\n    }\n\n    public int Green\n    {\n        get => (int)GetValue(GreenProperty);\n        set => SetValue(GreenProperty, value);\n    }\n\n    public int Alpha\n    {\n        get => (int)GetValue(AlphaProperty);\n        set => SetValue(AlphaProperty, value);\n    }\n\n    public bool DisplayGlyph\n    {\n        get => (bool)GetValue(DisplayGlyphProperty);\n        set => SetValue(DisplayGlyphProperty, value);\n    }\n\n    public bool DisplayAlpha\n    {\n        get => (bool)GetValue(DisplayAlphaProperty);\n        set => SetValue(DisplayAlphaProperty, value);\n    }\n\n    public event RoutedEventHandler ValueChanged\n    {\n        add => AddHandler(ValueChangedEvent, value);\n        remove => RemoveHandler(ValueChangedEvent, value);\n    }\n\n    #endregion\n\n    private static void Value_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var hexaBox = o as HexadecimalBox;\n\n        if (hexaBox == null)\n            return;\n\n        hexaBox.RaiseValueChangedEvent();\n\n        hexaBox.Text = $\"{(hexaBox.DisplayGlyph ? \"#\" : \"\")}{(hexaBox.DisplayAlpha ? hexaBox.Alpha.ToString(\"X2\") : \"\")}{hexaBox.Red:X2}{hexaBox.Green:X2}{hexaBox.Blue:X2}\";\n    }\n\n    static HexadecimalBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(HexadecimalBox), new FrameworkPropertyMetadata(typeof(HexadecimalBox)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        AddHandler(DataObject.PastingEvent, new DataObjectPastingEventHandler(OnPasting));\n\n        Text = $\"{(DisplayGlyph ? \"#\" : \"\")}{(DisplayAlpha ? Alpha.ToString(\"X2\") : \"\")}{Red:X2}{Green:X2}{Blue:X2}\";\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        SelectAll();\n    }\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        if (string.IsNullOrEmpty(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        if (!IsEntryAllowed(this, e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewTextInput(e);\n    }\n\n    protected override void OnTextChanged(TextChangedEventArgs e)\n    {\n        if (string.IsNullOrEmpty(Text)) return;\n\n        if (!IsTextAllowed(Text)) return;\n\n        base.OnTextChanged(e);\n    }\n\n    protected override void OnLostFocus(RoutedEventArgs e)\n    {\n        base.OnLostFocus(e);\n\n        if (string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n        {\n            Alpha = 255;\n            Red = 0;\n            Green = 0;\n            Blue = 0;\n\n            Text = $\"{(DisplayGlyph ? \"#\" : \"\")}{(DisplayAlpha ? Alpha.ToString(\"X2\") : \"\")}{Red:X2}{Green:X2}{Blue:X2}\";\n            return;\n        }\n\n        #region Try parse\n\n        try\n        {\n            var source = Text.Replace(\"#\", \"\");\n\n            switch (source.Length)\n            {\n                case 2:\n                    Alpha = 255;\n                    Blue = Green = Red = Convert.ToInt32(source.Substring(0, 2), 16);\n                    break;\n                case 4:\n                    Alpha = Convert.ToInt32(source.Substring(0, 2), 16);\n                    Blue = Green = Red = Convert.ToInt32(source.Substring(2, 2), 16);\n                    break;\n                case 6:\n                    Alpha = 255;\n                    Red = Convert.ToInt32(source.Substring(0, 2), 16);\n                    Green = Convert.ToInt32(source.Substring(2, 2), 16);\n                    Blue = Convert.ToInt32(source.Substring(4, 2), 16);\n                    break;\n                case 8:\n                    Alpha = Convert.ToInt32(source.Substring(0, 2), 16);\n                    Red = Convert.ToInt32(source.Substring(2, 2), 16);\n                    Green = Convert.ToInt32(source.Substring(4, 2), 16);\n                    Blue = Convert.ToInt32(source.Substring(6, 2), 16);\n                    break;\n            }\n        }\n        catch\n        {}\n\n        #endregion\n\n        Text = $\"{(DisplayGlyph ? \"#\" : \"\")}{(DisplayAlpha ? Alpha.ToString(\"X2\") : \"\")}{Red:X2}{Green:X2}{Blue:X2}\";\n    }\n\n    #endregion\n\n    #region Base Properties Changed\n\n    private void OnPasting(object sender, DataObjectPastingEventArgs e)\n    {\n        if (e.DataObject.GetDataPresent(typeof(string)))\n        {\n            var text = e.DataObject.GetData(typeof(string)) as string;\n\n            if (!IsTextAllowed(text))\n                e.CancelCommand();\n        }\n        else\n        {\n            e.CancelCommand();\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    void RaiseValueChangedEvent()\n    {\n        var newEventArgs = new RoutedEventArgs(ValueChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    private bool IsEntryAllowed(TextBox textBox, string text)\n    {\n        //Digits, points or commas.\n        var regex = new Regex(@\"^#|[0-9]|[A-F]|$\");\n\n        //Checks if it's a valid char based on the context.\n        return regex.IsMatch(text) && IsEntryAllowedInContext(textBox, text);\n    }\n\n    private bool IsEntryAllowedInContext(TextBox textBox, string next)\n    {\n        if (textBox.Text.Replace(\"#\", \"\").Length > 7 && textBox.SelectionLength == 0)\n            return false;\n\n        var nChar = next.ToCharArray().FirstOrDefault();\n\n        if (char.IsNumber(nChar) || (nChar >= 97 && nChar <= 102)) //0 to 9, A to F\n        {\n            if (textBox.Text.Contains(\"#\") && textBox.SelectionStart == 0)\n                return false;\n\n            return true;\n        }\n\n        if (nChar == '#')\n        {\n            if (textBox.Text.Any(x => x.Equals('#')))\n                return false;\n\n            if (textBox.SelectionStart != 0)\n                return false;\n\n            return true;\n        }\n\n        return true;\n    }\n\n    private bool IsTextAllowed(string text)\n    {\n        //Allows: #FF, #FF11, #FF1122, #FF112233\n        return Regex.IsMatch(text, @\"^#{0,1}(([0-9a-fA-F]{2}){1,4})$\");\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/HideableTabControl.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Basic class of a Hideable TabControl.\n/// </summary>\npublic class HideableTabControl : TabControl\n{\n    #region Variables\n\n    private Button _hideButton;\n    private ExtendedMenuItem _extrasMenuItem;\n    private TabPanel _tabPanel;\n    private Border _border;\n    private ExtendedToggleButton _notificationButton;\n    private NotificationBox _notificationBox;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static DependencyProperty OptionsCommandProperty = DependencyProperty.Register(\"OptionsCommand\", typeof(ICommand), typeof(HideableTabControl), new PropertyMetadata(null));\n\n    public static DependencyProperty FeedbackCommandProperty = DependencyProperty.Register(\"FeedbackCommand\", typeof(ICommand), typeof(HideableTabControl), new PropertyMetadata(null));\n\n    public static DependencyProperty TroubleshootCommandProperty = DependencyProperty.Register(\"TroubleshootCommand\", typeof(ICommand), typeof(HideableTabControl), new PropertyMetadata(null));\n\n    public static DependencyProperty HelpCommandProperty = DependencyProperty.Register(\"HelpCommand\", typeof(ICommand), typeof(HideableTabControl), new PropertyMetadata(null));\n\n    #endregion\n\n    #region Properties\n\n    public ICommand OptionsCommand\n    {\n        get => (ICommand)GetValue(OptionsCommandProperty);\n        set => SetValue(OptionsCommandProperty, value);\n    }\n\n    public ICommand FeedbackCommand\n    {\n        get => (ICommand)GetValue(FeedbackCommandProperty);\n        set => SetValue(FeedbackCommandProperty, value);\n    }\n\n    public ICommand TroubleshootCommand\n    {\n        get => (ICommand)GetValue(TroubleshootCommandProperty);\n        set => SetValue(TroubleshootCommandProperty, value);\n    }\n\n    public ICommand HelpCommand\n    {\n        get => (ICommand)GetValue(HelpCommandProperty);\n        set => SetValue(HelpCommandProperty, value);\n    }\n\n    #endregion\n\n    static HideableTabControl()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(HideableTabControl), new FrameworkPropertyMetadata(typeof(HideableTabControl)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _tabPanel = Template.FindName(\"TabPanel\", this) as TabPanel;\n        _border = Template.FindName(\"ContentBorder\", this) as Border;\n\n        _notificationButton = Template.FindName(\"NotificationsButton\", this) as ExtendedToggleButton;\n        _notificationBox = Template.FindName(\"NotificationBox\", this) as NotificationBox;\n        _extrasMenuItem = Template.FindName(\"ExtrasMenuItem\", this) as ExtendedMenuItem;\n\n        _hideButton = Template.FindName(\"HideGridButton\", this) as Button;\n\n        //Hide button.\n        if (_hideButton != null)\n            _hideButton.Click += HideButton_Clicked;\n\n        //Show tab (if hidden).\n        if (_tabPanel != null)\n        {\n            foreach (TabItem tabItem in _tabPanel.Children)\n                tabItem.PreviewMouseDown += TabItem_PreviewMouseDown;\n\n            _tabPanel.PreviewMouseWheel += TabControl_PreviewMouseWheel;\n        }\n\n        if (_notificationButton != null)\n            _notificationButton.Checked += NotificationButton_Checked;\n\n        UpdateVisual();\n        AnimateOrNot();\n    }\n\n    #region Events\n\n    private void TabControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        if (e.Delta > 0)\n        {\n            if (SelectedIndex < Items.Count - 1)\n                SelectedIndex++;\n            else\n                SelectedIndex = 0;\n        }\n        else\n        {\n\n            if (SelectedIndex > 0)\n                SelectedIndex--;\n            else\n                SelectedIndex = Items.Count - 1;\n        }\n\n        if (!_tabPanel.Children[SelectedIndex].IsEnabled)\n        {\n            if (_tabPanel.Children.OfType<TabItem>().All(x => !x.IsEnabled))\n            {\n                SelectedIndex = -1;\n                return;\n            }\n\n            TabControl_PreviewMouseWheel(sender, e);\n        }\n\n        TabItem_PreviewMouseDown(sender, null);\n        ChangeVisibility();\n    }\n\n    private void TabItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)\n    {\n        if (sender is TabItem selected)\n            selected.IsSelected = true;\n\n        if (Math.Abs(_border.ActualHeight - 100) < 0)\n            return;\n\n        var animation = new DoubleAnimation(_border.ActualHeight, 100, new Duration(new TimeSpan(0, 0, 0, 1)))\n        {\n            EasingFunction = new PowerEase { Power = 8 }\n        };\n        _border.BeginAnimation(HeightProperty, animation);\n\n        var opacityAnimation = new DoubleAnimation(_border.Opacity, 1, new Duration(new TimeSpan(0, 0, 0, 1)))\n        {\n            EasingFunction = new PowerEase { Power = 8 }\n        };\n        _border.BeginAnimation(OpacityProperty, opacityAnimation);\n\n        var visibilityAnimation = new ObjectAnimationUsingKeyFrames();\n        visibilityAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame(Visibility.Visible, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5))));\n        _hideButton.BeginAnimation(VisibilityProperty, visibilityAnimation);\n\n        //Margin = 5,5,0,-1\n        var marginAnimation = new ThicknessAnimation(_tabPanel.Margin, new Thickness(5, 5, 0, -1), new Duration(new TimeSpan(0, 0, 0, 0, 1)))\n        {\n            EasingFunction = new PowerEase { Power = 8 }\n        };\n        _tabPanel.BeginAnimation(MarginProperty, marginAnimation);\n    }\n\n    private void HideButton_Clicked(object sender, RoutedEventArgs routedEventArgs)\n    {\n        //ActualHeight = 0\n        var animation = new DoubleAnimation(_border.ActualHeight, 0, new Duration(new TimeSpan(0, 0, 0, 1)))\n        {\n            EasingFunction = new PowerEase { Power = 8 }\n        };\n        _border.BeginAnimation(HeightProperty, animation);\n\n        //Opacity = 0\n        var opacityAnimation = new DoubleAnimation(_border.Opacity, 0, new Duration(new TimeSpan(0, 0, 0, 1)))\n        {\n            EasingFunction = new PowerEase { Power = 8 }\n        };\n        _border.BeginAnimation(OpacityProperty, opacityAnimation);\n\n        //SelectedItem = null\n        var objectAnimation = new ObjectAnimationUsingKeyFrames();\n        objectAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame(null, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));\n        BeginAnimation(SelectedItemProperty, objectAnimation);\n\n        //Visibility = Visibility.Collapsed\n        var visibilityAnimation = new ObjectAnimationUsingKeyFrames();\n        visibilityAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame(Visibility.Collapsed, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));\n        _hideButton.BeginAnimation(VisibilityProperty, visibilityAnimation);\n\n        //Margin = 5,5,0,5\n        var marginAnimation = new ThicknessAnimation(_tabPanel.Margin, new Thickness(5, 5, 0, 5), new Duration(new TimeSpan(0, 0, 0, 0, 1)))\n        {\n            EasingFunction = new PowerEase { Power = 8 }\n        };\n        _tabPanel.BeginAnimation(MarginProperty, marginAnimation);\n    }\n\n    private void NotificationButton_Checked(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (_notificationButton.FindResource(\"NotificationStoryboard\") is Storyboard story)\n            story.Stop();\n    }\n\n    #endregion\n\n\n    /// <summary>\n    /// Changes the visibility of the Content.\n    /// </summary>\n    /// <param name=\"visible\">True to show the Content.</param>\n    public void ChangeVisibility(bool visible = true)\n    {\n        _border.Visibility = visible ? Visibility.Visible : Visibility.Collapsed;\n        _hideButton.Visibility = visible ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public void UpdateVisual(bool isActivated = true)\n    {\n        //Shows only a white foreground when:\n\n        //var color = Glass.GlassColor;\n        //var ness = Glass.GlassColor.GetBrightness();\n        //var aa = color.ConvertRgbToHsv();\n\n        //var darkForeground = !SystemParameters.IsGlassEnabled || !Other.IsGlassSupported() || Glass.GlassColor.GetBrightness() > 973 || !isActivated;\n        var darkForeground = !SystemParameters.IsGlassEnabled || !isActivated;\n        //var darkForeground = !SystemParameters.IsGlassEnabled || !Other.IsWin8OrHigher() || aa.V > 0.5 || !isActivated;\n        var showBackground = true;// !Other.IsGlassSupported();\n\n        //Console.WriteLine(\"!IsGlassEnabled: \" + !SystemParameters.IsGlassEnabled);\n        //Console.WriteLine(\"!UsesColor: \" + !Glass.UsesColor);\n        //Console.WriteLine(\"GlassColorBrightness <= 137: \" + (Glass.GlassColor.GetBrightness() <= 137));\n        //Console.WriteLine(\"!IsWin8: \" + !Other.IsWin8OrHigher());\n        //Console.WriteLine(\"IsActivated: \" + isActivated);\n        //Console.WriteLine(\"IsDark: \" + isDark);\n\n        //Update each tab.\n        if (_tabPanel != null)\n            foreach (var tab in _tabPanel.Children.OfType<AwareTabItem>())\n            {\n                //To force the change.\n                if (tab.IsDark == !darkForeground)\n                    tab.IsDark = !tab.IsDark;\n\n                if (tab.ShowBackground == showBackground)\n                    tab.ShowBackground = !tab.ShowBackground;\n\n                tab.IsDark = !darkForeground;\n                tab.ShowBackground = showBackground;\n            }\n\n        //Update the buttons.\n        if (_notificationButton != null)\n        {\n            _notificationButton.DarkMode = !darkForeground;\n            _notificationButton.IsOverNonClientArea = UserSettings.All.EditorExtendChrome;\n        }\n\n        if (_extrasMenuItem != null)\n        {\n            _extrasMenuItem.DarkMode = !darkForeground;\n            _extrasMenuItem.IsOverNonClientArea = UserSettings.All.EditorExtendChrome;\n        }\n    }\n\n\n    public void UpdateNotifications(int? id = null)\n    {\n        _notificationBox?.UpdateNotification(id);\n\n        AnimateOrNot();\n    }\n\n    public EncoderListViewItem AddEncoding(int id, bool isActive = false)\n    {\n        //Display the popup (if the editor is active) and animate the button.\n        if (isActive)\n            _notificationButton.IsChecked = true;\n\n        AnimateOrNot(true);\n\n        return _notificationBox.AddEncoding(id);\n    }\n\n    public void UpdateEncoding(int? id = null, bool onlyStatus = false)\n    {\n        if (!onlyStatus)\n            _notificationBox?.UpdateEncoding(id);\n\n        AnimateOrNot();\n    }\n\n    public EncoderListViewItem RemoveEncoding(int id)\n    {\n        try\n        {\n            return _notificationBox.RemoveEncoding(id);\n        }\n        finally\n        {\n            AnimateOrNot();\n        }\n    }\n\n    private void AnimateOrNot(bool add = false)\n    {\n        var story = _notificationButton.FindResource(\"NotificationStoryboard\") as Storyboard;\n\n        if (story != null)\n        {\n            story.Stop();\n\n            //Blink the button when an encoding is added.\n            if (add)\n                story.Begin();\n        }\n\n        var anyProcessing = EncodingManager.Encodings.Any(s => s.Status == EncodingStatus.Processing);\n        var anyCompleted = EncodingManager.Encodings.Any(s => s.Status == EncodingStatus.Completed);\n        var anyFaulty = EncodingManager.Encodings.Any(s => s.Status == EncodingStatus.Error);\n\n        _notificationButton.Icon = anyProcessing ? FindResource(\"Vector.Progress\") as Brush :\n            anyCompleted ? FindResource(\"Vector.Ok.Round\") as Brush :\n            anyFaulty ? FindResource(\"Vector.Cancel.Round\") as Brush : _notificationButton.Icon;\n        _notificationButton.IsImportant = anyProcessing;\n        _notificationButton.SetResourceReference(ExtendedToggleButton.TextProperty, anyProcessing ? \"S.Encoder.Encoding\" : anyCompleted ? \"S.Encoder.Completed\" : anyFaulty? \"S.Encoder.Error\" : \"S.Notifications\");\n\n        if (anyProcessing || anyCompleted || anyFaulty)\n            return;\n\n        //Animate the button for notifications, when there are no encodings.\n        var most = NotificationManager.Notifications.Select(s => s.Kind).OrderByDescending(a => (int)a).FirstOrDefault();\n\n        _notificationButton.Icon = TryFindResource(StatusBand.KindToString(most)) as Brush;\n        _notificationButton.IsImportant = most != StatusType.None;\n        _notificationButton.SetResourceReference(ExtendedToggleButton.TextProperty, \"S.Notifications\");\n\n        if(story != null)\n        {\n            story.Stop();\n\n            if (most != StatusType.None)\n                story.Begin();\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/InkCanvasExtended.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Ink;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\n/// <inheritdoc />\n/// <summary>\n/// InkCanvasControl class extending the InkCanvas class\n/// </summary>\npublic class InkCanvasExtended : InkCanvas\n{\n    /// <summary>\n    /// Gets or set the eraser shape\n    /// </summary>\n    public new StylusShape EraserShapeDependency\n    {\n        get => (StylusShape) GetValue(EraserShapeProperty);\n        set => SetValue(EraserShapeProperty, value);\n    }\n\n    // Using a DependencyProperty as the backing store for EraserShape.  \n    // This enables animation, styling, binding, etc...\n    public static readonly DependencyProperty EraserShapeProperty = DependencyProperty.Register(nameof(EraserShapeDependency), typeof(StylusShape), typeof(InkCanvasExtended), \n        new UIPropertyMetadata(new RectangleStylusShape(10, 10), OnEraserShapePropertyChanged));\n\n    public InkCanvasExtended()\n    {\n        SetEnabledGestures([ApplicationGesture.NoGesture]);\n    }\n\n    /// <summary>\n    /// Event to handle the property change\n    /// </summary>\n    /// <param name=\"d\">dependency object</param>\n    /// <param name=\"e\">event args</param>\n    private static void OnEraserShapePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not InkCanvasExtended canvas)\n            return;\n\n        canvas.EraserShape = (StylusShape) e.NewValue;\n        canvas.RenderTransform = new MatrixTransform();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/IntegerBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\npublic class IntegerBox : ExtendedTextBox\n{\n    private static bool _ignore;\n\n    /// <summary>\n    /// To avoid losing decimals.\n    /// </summary>\n    public bool UseTemporary;\n    public double Temporary;\n\n    /// <summary>\n    /// True if it's necessary to prevent the value changed event from firing.\n    /// </summary>\n    public bool IgnoreValueChanged { get; set; }\n\n    #region Dependency Property\n\n    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(int.MaxValue, OnMaximumPropertyChanged));\n\n    public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(nameof(Value), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(0, OnValuePropertyChanged));\n\n    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(0, OnMinimumPropertyChanged));\n\n    public static readonly DependencyProperty StepProperty = DependencyProperty.Register(nameof(StepValue), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(1));\n\n    public static readonly DependencyProperty OffsetProperty = DependencyProperty.Register(nameof(Offset), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(0, OnOffsetPropertyChanged));\n\n    public static readonly DependencyProperty ScaleProperty = DependencyProperty.Register(nameof(Scale), typeof(double), typeof(IntegerBox),\n        new PropertyMetadata(1d, OnScalePropertyChanged));\n\n    public static readonly DependencyProperty UpdateOnInputProperty = DependencyProperty.Register(nameof(UpdateOnInput), typeof(bool), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(false, OnUpdateOnInputPropertyChanged));\n\n    public static readonly DependencyProperty DefaultValueIfEmptyProperty = DependencyProperty.Register(nameof(DefaultValueIfEmpty), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(0));\n\n    public static readonly DependencyProperty EmptyIfValueEmptyProperty = DependencyProperty.Register(nameof(EmptyIfValue), typeof(int), typeof(IntegerBox),\n        new FrameworkPropertyMetadata(int.MinValue));\n\n    public static readonly DependencyProperty PropagateWheelEventProperty = DependencyProperty.Register(nameof(PropagateWheelEvent), typeof(bool), typeof(IntegerBox), new PropertyMetadata(default(bool)));\n        \n    #endregion\n\n    #region Property Accessor\n\n    [Bindable(true), Category(\"Common\")]\n    public int Maximum\n    {\n        get => (int)GetValue(MaximumProperty);\n        set => SetValue(MaximumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int Value\n    {\n        get => (int)GetValue(ValueProperty);\n        set => SetValue(ValueProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int Minimum\n    {\n        get => (int)GetValue(MinimumProperty);\n        set => SetValue(MinimumProperty, value);\n    }\n\n    /// <summary>\n    /// The Increment/Decrement value.\n    /// </summary>\n    [Description(\"The Increment/Decrement value.\")]\n    public int StepValue\n    {\n        get => (int)GetValue(StepProperty);\n        set => SetValue(StepProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int Offset\n    {\n        get => (int)GetValue(OffsetProperty);\n        set => SetValue(OffsetProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public double Scale\n    {\n        get => (double)GetValue(ScaleProperty);\n        set => SetValue(ScaleProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool UpdateOnInput\n    {\n        get => (bool)GetValue(UpdateOnInputProperty);\n        set => SetValue(UpdateOnInputProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int DefaultValueIfEmpty\n    {\n        get => (int)GetValue(DefaultValueIfEmptyProperty);\n        set => SetValue(DefaultValueIfEmptyProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int EmptyIfValue\n    {\n        get => (int)GetValue(EmptyIfValueEmptyProperty);\n        set => SetValue(EmptyIfValueEmptyProperty, value);\n    }\n\n    /// <summary>\n    /// True if the wheel events should not be set as handled.\n    /// </summary>\n    [Bindable(true), Category(\"Behavior\")]\n    public bool PropagateWheelEvent\n    {\n        get => (bool)GetValue(PropagateWheelEventProperty);\n        set => SetValue(PropagateWheelEventProperty, value);\n    }\n\n    #endregion\n\n    #region Properties Changed\n\n    private static void OnMaximumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var intBox = d as IntegerBox;\n\n        if (intBox?.Value + intBox?.Offset > intBox?.Maximum)\n            intBox.Value = intBox.Maximum + intBox.Offset;\n    }\n\n    private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is IntegerBox box) || _ignore) \n            return;\n\n        _ignore = true;\n\n        if (box.Value + box.Offset > box.Maximum)\n        {\n            box.UseTemporary = false;\n            box.Temporary = (box.Maximum / box.Scale) + box.Offset;\n            box.Value = box.Maximum + box.Offset;\n        }\n\n        if (box.Value + box.Offset < box.Minimum)\n        {\n            box.UseTemporary = false;\n            box.Temporary = (box.Minimum / box.Scale) + box.Offset;\n            box.Value = box.Minimum + box.Offset;\n        }\n\n        _ignore = false;\n\n        var value = ((int)Math.Round(((box.UseTemporary ? box.Temporary : box.Value) - box.Offset) * box.Scale, MidpointRounding.ToEven));\n        var stringValue = value == box.EmptyIfValue ? \"\" : value.ToString();\n\n        if (!string.Equals(box.Text, stringValue))\n            box.Text = stringValue;\n\n        if (!box.IgnoreValueChanged)\n            box.RaiseValueChangedEvent();\n    }\n\n    private static void OnMinimumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var intBox = d as IntegerBox;\n\n        if (intBox?.Value + intBox?.Offset < intBox?.Minimum)\n            intBox.Value = intBox.Minimum + intBox.Offset;\n    }\n\n    private static void OnUpdateOnInputPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((IntegerBox)d).UpdateOnInput = (bool)e.NewValue;\n    }\n\n    private static void OnOffsetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is IntegerBox box)) \n            return;\n\n        //The offset value dictates the value being displayed.\n        //For example, The value 600 and the Offset 20 should display the text 580.\n        //Text = Value - Offset.\n\n        var value = ((int)Math.Round((box.Value - box.Offset) * box.Scale));\n        box.Text = value == box.EmptyIfValue ? \"\" : value.ToString();\n    }\n\n    private static void OnScalePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is IntegerBox box)) \n            return;\n\n        //The scale value dictates the value being displayed.\n        //For example, The value 600 and the scale 1.25 should display the text 750.\n        //Text = Value * Scale.\n\n        var value = ((int)Math.Round((box.Value - box.Offset) * box.Scale));\n        box.Text = value == box.EmptyIfValue ? \"\" : value.ToString();\n    }\n\n    #endregion\n\n    static IntegerBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerBox), new FrameworkPropertyMetadata(typeof(IntegerBox)));\n    }\n\n    #region Custom Events\n\n    /// <summary>\n    /// Create a custom routed event by first registering a RoutedEventID, this event uses the bubbling routing strategy.\n    /// </summary>\n    public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent(\"ValueChanged\", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(IntegerBox));\n\n    /// <summary>\n    /// Event raised when the numeric value is changed.\n    /// </summary>\n    public event RoutedEventHandler ValueChanged\n    {\n        add => AddHandler(ValueChangedEvent, value);\n        remove => RemoveHandler(ValueChangedEvent, value);\n    }\n\n    public void RaiseValueChangedEvent()\n    {\n        if (ValueChangedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(ValueChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    #endregion\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        AddHandler(DataObject.PastingEvent, new DataObjectPastingEventHandler(OnPasting));\n    }\n\n    protected override void OnInitialized(EventArgs e)\n    {\n        base.OnInitialized(e);\n\n        var value = ((int)((Value - Offset) * Scale));\n        Text = value == EmptyIfValue ? \"\" : value.ToString();\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        if (e.Source is IntegerBox)\n            SelectAll();\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        //Only sets the focus if not clicking on the Up/Down buttons of a IntegerUpDown.\n        if (e.OriginalSource is TextBlock || e.OriginalSource is Border)\n            return;\n\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n    }\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        if (string.IsNullOrEmpty(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        if (!IsEntryAllowed(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewTextInput(e);\n    }\n\n    protected override void OnTextChanged(TextChangedEventArgs e)\n    {\n        if (!UpdateOnInput || string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            return;\n\n        //The offset value dictates the value being displayed.\n        //For example, The value 600 and the Offset 20 should display the text 580.\n        //Value = (Text + Offset) * Scale.\n\n        Temporary = Convert.ToInt32(Text, CultureInfo.CurrentUICulture) / Scale + Offset;\n        Value = (int)Temporary;\n\n        base.OnTextChanged(e);\n    }\n\n    protected override void OnLostFocus(RoutedEventArgs e)\n    {\n        base.OnLostFocus(e);\n\n        if (!UpdateOnInput)\n        {\n            if (string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            {\n                Value = DefaultValueIfEmpty;\n                return;\n            }\n\n            //The offset value dictates the value being displayed.\n            //For example, The value 600 and the Offset 20 should display the text 580.\n            //Value = Text + Offset.\n            UseTemporary = true;\n            Temporary = Convert.ToInt32(Text, CultureInfo.CurrentUICulture) / Scale + Offset;\n            Value = (int)Math.Round(Temporary);\n            UseTemporary = false;\n            return;\n        }\n\n        //The offset value dictates the value being displayed.\n        //For example, The value 600 and the Offset 20 should display the text 580.\n        //Text = Value - Offset.\n\n        var value =((int)((Value - Offset) * Scale));\n        Text = value == EmptyIfValue ? \"\" : value.ToString();\n    }\n\n    protected override void OnKeyDown(KeyEventArgs e)\n    {\n        if (e.Key == Key.Enter || e.Key == Key.Return)\n        {\n            e.Handled = true;\n            MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n        }\n\n        base.OnKeyDown(e);\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        base.OnMouseWheel(e);\n\n        if (!IsKeyboardFocusWithin)\n            return;\n            \n        var step = Keyboard.Modifiers == (ModifierKeys.Shift | ModifierKeys.Control)\n            ? 50 : Keyboard.Modifiers == ModifierKeys.Shift\n                ? 10 : Keyboard.Modifiers == ModifierKeys.Control\n                    ? 5 : StepValue;\n\n        Value = e.Delta > 0 ? \n            Math.Min(Maximum + Offset, Value + step) : \n            Math.Max(Minimum + Offset, Value - step);\n\n        e.Handled = !PropagateWheelEvent;\n    }\n\n    #endregion\n\n    #region Base Properties Changed\n\n    private void OnPasting(object sender, DataObjectPastingEventArgs e)\n    {\n        if (e.DataObject.GetDataPresent(typeof(string)))\n        {\n            var text = e.DataObject.GetData(typeof(string)) as string;\n\n            if (!IsTextAllowed(text))\n                e.CancelCommand();\n        }\n        else\n        {\n            e.CancelCommand();\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private bool IsEntryAllowed(string text)\n    {\n        //Only numbers.\n        var regex = new Regex(@\"^-|[0-9]$\");\n\n        //Checks if it's a valid char based on the context.\n        return regex.IsMatch(text);\n    }\n\n    private bool IsTextAllowed(string text)\n    {\n        return Minimum < 0 ? Regex.IsMatch(text, @\"^[-]?(?:[0-9]{1,9})?$\") : Regex.IsMatch(text, @\"^(?:[0-9]{1,9})?$\");\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/IntegerUpDown.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls.Primitives;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Integer only control with up and down buttons to change the value.\n/// </summary>\npublic class IntegerUpDown : IntegerBox\n{\n    #region Variables\n\n    private RepeatButton _upButton;\n    private RepeatButton _downButton;\n\n    #endregion\n\n    static IntegerUpDown()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerUpDown), new FrameworkPropertyMetadata(typeof(IntegerUpDown)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _upButton = Template.FindName(\"UpButton\", this) as RepeatButton;\n        _downButton = Template.FindName(\"DownButton\", this) as RepeatButton;\n\n        if (_upButton != null)\n            _upButton.Click += UpButton_Click;\n\n        if (_downButton != null)\n            _downButton.Click += DownButton_Click;\n    }\n\n    #region Event Handlers\n\n    private void DownButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Value > Minimum)\n            Value -= StepValue;\n    }\n\n    private void UpButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Value < Maximum)\n            Value += StepValue;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/Items/EncoderItem.cs",
    "content": "using System;\nusing System.Windows;\n\nnamespace ScreenToGif.Controls.Items;\n\npublic class EncoderItem : GenericItem\n{\n    public static readonly DependencyProperty EncoderTypeProperty = DependencyProperty.Register(nameof(EncoderType), typeof(Enum), typeof(EncoderItem), \n        new PropertyMetadata(default(Enum)));\n\n    public Enum EncoderType\n    {\n        get => (Enum) GetValue(EncoderTypeProperty);\n        set => SetValue(EncoderTypeProperty, value);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/Items/ExportItem.cs",
    "content": "using System.Windows;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Controls.Items;\n\npublic class ExportItem : GenericItem\n{\n    public static readonly DependencyProperty ExportTypeProperty = DependencyProperty.Register(nameof(ExportType), typeof(string), typeof(ExportItem),\n        new PropertyMetadata(default(string)));\n\n    public static readonly DependencyProperty FileTypeProperty = DependencyProperty.Register(nameof(FileType), typeof(ExportFormats), typeof(ExportItem), \n        new PropertyMetadata(default(ExportFormats)));\n\n        \n    public string ExportType\n    {\n        get => (string) GetValue(ExportTypeProperty);\n        set => SetValue(ExportTypeProperty, value);\n    }\n\n    public ExportFormats FileType\n    {\n        get => (ExportFormats) GetValue(FileTypeProperty);\n        set => SetValue(FileTypeProperty, value);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/Items/GenericItem.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Controls.Items;\n\npublic class GenericItem : FrameworkElement\n{\n    public static readonly DependencyProperty ImageIdProperty = DependencyProperty.Register(nameof(ImageId), typeof(string), typeof(GenericItem), new PropertyMetadata(default(string)));\n\n    public static readonly DependencyProperty TitleProperty = DependencyProperty.Register(nameof(Title), typeof(string), typeof(GenericItem), new PropertyMetadata(default(string)));\n\n    public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(nameof(Description), typeof(string), typeof(GenericItem), new PropertyMetadata(default(string)));\n        \n    public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(nameof(Value), typeof(object), typeof(GenericItem), new PropertyMetadata(default(object)));\n\n    public string ImageId\n    {\n        get => (string)GetValue(ImageIdProperty);\n        set => SetValue(ImageIdProperty, value);\n    }\n\n    public string Title\n    {\n        get => (string)GetValue(TitleProperty);\n        set => SetValue(TitleProperty, value);\n    }\n\n    public string Description\n    {\n        get => (string)GetValue(DescriptionProperty);\n        set => SetValue(DescriptionProperty, value);\n    }\n\n    public object Value\n    {\n        get => (object)GetValue(ValueProperty);\n        set => SetValue(ValueProperty, value);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/Items/QuantizationMethodItem.cs",
    "content": "using System.Windows;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Controls.Items;\n\npublic class QuantizationMethodItem : GenericItem\n{\n    public static readonly DependencyProperty QuantizationTypeProperty = DependencyProperty.Register(nameof(QuantizationType), typeof(ColorQuantizationTypes), typeof(QuantizationMethodItem), \n        new PropertyMetadata(default(ColorQuantizationTypes)));\n        \n    public ColorQuantizationTypes QuantizationType\n    {\n        get => (ColorQuantizationTypes) GetValue(QuantizationTypeProperty);\n        set => SetValue(QuantizationTypeProperty, value);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/KeyBox.cs",
    "content": "using ScreenToGif.Util.Helpers;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing KeyEventArgs = System.Windows.Input.KeyEventArgs;\n\nnamespace ScreenToGif.Controls;\n\npublic class KeyBox : ContentControl\n{\n    #region Variable\n\n    private bool _finished;\n    private bool _ignore;\n    private Key _previousKey;\n    private ModifierKeys _previousModifier;\n    private ExtendedButton _removeButton;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty ModifierKeysProperty = DependencyProperty.Register(nameof(ModifierKeys), typeof(ModifierKeys), typeof(KeyBox),\n        new PropertyMetadata(ModifierKeys.None, Keys_PropertyChanged));\n\n    public static readonly DependencyProperty MainKeyProperty = DependencyProperty.Register(nameof(MainKey), typeof(Key?), typeof(KeyBox), new PropertyMetadata(null, Keys_PropertyChanged));\n\n    public static readonly DependencyProperty AllowAllKeysProperty = DependencyProperty.Register(nameof(AllowAllKeys), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty IsControlDownProperty = DependencyProperty.Register(nameof(IsControlDown), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty IsShiftDownProperty = DependencyProperty.Register(nameof(IsShiftDown), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty IsAltDownProperty = DependencyProperty.Register(nameof(IsAltDown), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty IsWindowsDownProperty = DependencyProperty.Register(nameof(IsWindowsDown), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(KeyBox), new PropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty IsSelectionFinishedProperty = DependencyProperty.Register(nameof(IsSelectionFinished), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty CanRemoveProperty = DependencyProperty.Register(nameof(CanRemove), typeof(bool), typeof(KeyBox), new PropertyMetadata(true));\n\n    public static readonly DependencyProperty DisplayNoneProperty = DependencyProperty.Register(nameof(DisplayNone), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty OnlyModifiersProperty = DependencyProperty.Register(nameof(OnlyModifiers), typeof(bool), typeof(KeyBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty IsSingleLetterLowerCaseProperty = DependencyProperty.Register(nameof(IsSingleLetterLowerCase), typeof(bool), typeof(KeyBox), new PropertyMetadata(false, Keys_PropertyChanged));\n\n    public static readonly RoutedEvent KeyChangedEvent = EventManager.RegisterRoutedEvent(\"KeyChanged\", RoutingStrategy.Bubble, typeof(KeyChangedEventHandler), typeof(KeyBox));\n\n    #endregion\n\n    #region Properties\n\n    public ModifierKeys ModifierKeys\n    {\n        get => (ModifierKeys)GetValue(ModifierKeysProperty);\n        set => SetValue(ModifierKeysProperty, value);\n    }\n\n    public Key? MainKey\n    {\n        get => (Key?)GetValue(MainKeyProperty);\n        set => SetValue(MainKeyProperty, value);\n    }\n\n    public bool AllowAllKeys\n    {\n        get => (bool)GetValue(AllowAllKeysProperty);\n        set => SetValue(AllowAllKeysProperty, value);\n    }\n\n    public bool IsControlDown\n    {\n        get => (bool)GetValue(IsControlDownProperty);\n        set => SetValue(IsControlDownProperty, value);\n    }\n\n    public bool IsShiftDown\n    {\n        get => (bool)GetValue(IsShiftDownProperty);\n        set => SetValue(IsShiftDownProperty, value);\n    }\n\n    public bool IsAltDown\n    {\n        get => (bool)GetValue(IsAltDownProperty);\n        set => SetValue(IsAltDownProperty, value);\n    }\n\n    public bool IsWindowsDown\n    {\n        get => (bool)GetValue(IsWindowsDownProperty);\n        set => SetValue(IsWindowsDownProperty, value);\n    }\n\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    public bool IsSelectionFinished\n    {\n        get => (bool)GetValue(IsSelectionFinishedProperty);\n        set => SetValue(IsSelectionFinishedProperty, value);\n    }\n\n    public bool CanRemove\n    {\n        get => (bool)GetValue(CanRemoveProperty);\n        set => SetValue(CanRemoveProperty, value);\n    }\n\n    public bool DisplayNone\n    {\n        get => (bool)GetValue(DisplayNoneProperty);\n        set => SetValue(DisplayNoneProperty, value);\n    }\n\n    public bool OnlyModifiers\n    {\n        get => (bool)GetValue(OnlyModifiersProperty);\n        set => SetValue(OnlyModifiersProperty, value);\n    }\n\n    public bool IsSingleLetterLowerCase\n    {\n        get => (bool)GetValue(IsSingleLetterLowerCaseProperty);\n        set => SetValue(IsSingleLetterLowerCaseProperty, value);\n    }\n\n    public event KeyChangedEventHandler KeyChanged\n    {\n        add => AddHandler(KeyChangedEvent, value);\n        remove => RemoveHandler(KeyChangedEvent, value);\n    }\n       \n    #endregion\n\n    #region Events\n\n    private static void Keys_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        if (o is not KeyBox box)\n            return;\n\n        if (box.OnlyModifiers && box.ModifierKeys != ModifierKeys.None)\n        {\n            box.Text = KeyHelper.GetSelectKeyText(box.ModifierKeys);\n            box.IsSelectionFinished = true;\n            return;\n        }\n\n        if (box.MainKey == null)\n            return;\n\n        box.Text = KeyHelper.GetSelectKeyText(box.MainKey ?? Key.None, box.ModifierKeys, !(box.IsSingleLetterLowerCase && box.ModifierKeys == ModifierKeys.None), !box.DisplayNone);\n        box.IsSelectionFinished = true;\n    }\n\n    public bool RaiseKeyChangedEvent()\n    {\n        var changedArgs = new KeyChangedEventArgs(KeyChangedEvent, _previousModifier, _previousKey);\n        RaiseEvent(changedArgs);\n\n        return changedArgs.Cancel;\n    }\n\n    #endregion\n\n    static KeyBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(KeyBox), new FrameworkPropertyMetadata(typeof(KeyBox)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _removeButton = Template.FindName(\"RemoveButton\", this) as ExtendedButton;\n\n        if (_removeButton != null)\n            _removeButton.Click += (sender, args) =>\n            {\n                MainKey = Key.None;\n                ModifierKeys = ModifierKeys.None;\n\n                RaiseKeyChangedEvent();\n\n                _previousKey = Key.None;\n                _previousModifier = ModifierKeys.None;\n                IsSelectionFinished = true;\n            };\n\n        _previousModifier = ModifierKeys;\n        _previousKey = MainKey ?? Key.None;\n    }\n\n    protected override void OnMouseDown(MouseButtonEventArgs e)\n    {\n        Focus();\n        Keyboard.Focus(this);\n\n        e.Handled = true;\n        base.OnMouseDown(e);\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        //If not all keys are allowed, enter or tab keys presses moves the focus.\n        if (!AllowAllKeys && (e.Key == Key.Enter || e.Key == Key.Tab))\n        {\n            MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n            return;\n        }\n\n        //Clear current values.\n        IsSelectionFinished = false;\n        ModifierKeys = ModifierKeys.None;\n        MainKey = null; // Key.None;\n        Text = \"\"; \n        _finished = false;\n        _ignore = false;\n\n        //Check the modifiers.\n        IsControlDown = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);\n        IsAltDown = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt);\n        IsShiftDown = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);\n\n        if (AllowAllKeys)\n            IsWindowsDown = Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin);\n\n        if (OnlyModifiers)\n        {\n            ModifierKeys = Keyboard.Modifiers;\n            MainKey = null;\n            _finished = true;\n            return;\n        }\n\n        var key = e.Key != Key.System ? e.Key : e.SystemKey;\n\n        //Accept or ignore new values.\n        if (AllowAllKeys)\n        {\n            //More than one modifier key without any other key. Invalid combination.\n            if (new[] { IsControlDown, IsAltDown, IsShiftDown, IsWindowsDown }.Count(x => x) > 1 && (((int)key >= 116 && (int)key <= 121) || (int)key == 70 || (int)key == 71))\n                _ignore = true;\n            else if (key > 0 && (int)key < 172)\n            {\n                //Cancel to OemClear.\n                ModifierKeys = Keyboard.Modifiers;\n                MainKey = key;\n\n                //TODO:\n                if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && (key == Key.LeftCtrl || key == Key.RightCtrl))\n                {\n                    IsControlDown = false;\n                    ModifierKeys = ModifierKeys.None;\n                }\n                else if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && (key == Key.LeftAlt || key == Key.RightAlt))\n                {\n                    IsAltDown = false;\n                    ModifierKeys = ModifierKeys.None;\n                }\n                else if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift && (key == Key.LeftShift || key == Key.RightShift))\n                {\n                    IsShiftDown = false;\n                    ModifierKeys = ModifierKeys.None;\n                }\n                else if ((Keyboard.Modifiers & ModifierKeys.Windows) == ModifierKeys.Windows && (key == Key.LWin || key == Key.RWin))\n                {\n                    IsWindowsDown = false;\n                    ModifierKeys = ModifierKeys.None;\n                }\n\n                _finished = true;\n            }\n        }\n        else\n        {\n            //If any modifier.\n            if (IsControlDown || IsAltDown || IsShiftDown || IsWindowsDown)\n            {\n                if (((int)key > 33 && (int)key < 114) || ((int)key >139 && (int)key < 155))\n                {\n                    //D0 to F24 and Oem1 to OemBackslash. Valid combinations.\n                    ModifierKeys = Keyboard.Modifiers;\n                    MainKey = key;\n                    _finished = true;\n                }\n                else\n                {\n                    //Anything else. Invalid combinations.\n                    _ignore = true;\n                }\n            }\n            else\n            {\n                if ((int)key > 89 && (int)key < 114)\n                {\n                    //F1 to F24. Valid single keys.\n                    ModifierKeys = Keyboard.Modifiers;\n                    MainKey = key;\n                    _finished = true;\n                }\n                else\n                {\n                    //Anything else. Invalid single keys.\n                    _ignore = true;\n                }\n            }\n        }\n\n        e.Handled = true;\n        base.OnPreviewKeyDown(e);\n    }\n\n    protected override void OnPreviewKeyUp(KeyEventArgs e)\n    {\n        if (e.Key is Key.Enter or Key.Tab && !AllowAllKeys)\n            return;\n\n        if (e.Key == Key.PrintScreen && !OnlyModifiers)\n        {\n            ModifierKeys = Keyboard.Modifiers;\n            MainKey = e.Key;\n            _finished = true;\n        }\n\n        if (_finished)\n        {\n            //If the values are not accepted.\n            if (RaiseKeyChangedEvent())\n            {\n                IsControlDown = ModifierKeys.HasFlag(ModifierKeys.Control);\n                IsAltDown = ModifierKeys.HasFlag(ModifierKeys.Alt);\n                IsShiftDown = ModifierKeys.HasFlag(ModifierKeys.Shift);\n\n                if (AllowAllKeys)\n                    IsWindowsDown = ModifierKeys.HasFlag(ModifierKeys.Windows);\n\n                return;\n            }\n\n            _previousKey = MainKey ?? Key.None;\n            _previousModifier = ModifierKeys;\n            IsSelectionFinished = true;\n            return;\n        }\n\n        //If a invalid key combination is set, return to previous value.\n        if (_ignore)\n        {\n            MainKey = _previousKey;\n            ModifierKeys = _previousModifier;\n            IsControlDown = ModifierKeys.HasFlag(ModifierKeys.Control);\n            IsAltDown = ModifierKeys.HasFlag(ModifierKeys.Alt);\n            IsShiftDown = ModifierKeys.HasFlag(ModifierKeys.Shift);\n            IsWindowsDown = ModifierKeys.HasFlag(ModifierKeys.Windows);\n            return;\n        }\n\n        IsControlDown = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);\n        IsAltDown = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt);\n        IsShiftDown = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);\n\n        if (AllowAllKeys)\n            IsWindowsDown = Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin);\n\n        MainKey = null;\n\n        base.OnPreviewKeyUp(e);\n    }\n\n    #endregion\n}\n\npublic delegate void KeyChangedEventHandler(object sender, KeyChangedEventArgs e);\n\npublic class KeyChangedEventArgs : RoutedEventArgs\n{\n    public bool Cancel { get; set; }\n\n    public ModifierKeys PreviousModifiers { get; set; }\n    public Key PreviousKey { get; set; }\n    public ModifierKeys CurrentModifiers { get; set; }\n    public Key CurrentKey { get; set; }\n\n    public KeyChangedEventArgs(RoutedEvent routedEvent, ModifierKeys previousMod, Key previousKey, ModifierKeys currentMod, Key currentKey)\n    {\n        RoutedEvent = routedEvent;\n        PreviousModifiers = previousMod;\n        PreviousKey = previousKey;\n        CurrentModifiers = currentMod;\n        CurrentKey = currentKey;\n    }\n\n    public KeyChangedEventArgs(RoutedEvent routedEvent, ModifierKeys previousMod, Key previousKey)\n    {\n        RoutedEvent = routedEvent;\n        PreviousModifiers = previousMod;\n        PreviousKey = previousKey;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/LabelSeparator.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\npublic class LabelSeparator : Control\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\"Text\", typeof(string), typeof(LabelSeparator), \n        new PropertyMetadata(string.Empty));\n\n    public static readonly DependencyProperty TextRightProperty = DependencyProperty.Register(\"TextRight\", typeof(string), typeof(LabelSeparator),\n        new PropertyMetadata(string.Empty));\n\n    public static readonly DependencyProperty TextAlignmentProperty = DependencyProperty.Register(\"TextAlignment\", typeof(TextAlignment), typeof(LabelSeparator), \n        new PropertyMetadata(TextAlignment.Left));\n\n    #endregion\n\n    #region Properties\n\n    public string Text\n    {\n        get => (string) GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    public string TextRight\n    {\n        get => (string)GetValue(TextRightProperty);\n        set => SetValue(TextRightProperty, value);\n    }\n\n    public TextAlignment TextAlignment\n    {\n        get => (TextAlignment)GetValue(TextAlignmentProperty);\n        set => SetValue(TextAlignmentProperty, value);\n    }\n\n    #endregion\n\n    static LabelSeparator()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(LabelSeparator), new FrameworkPropertyMetadata(typeof(LabelSeparator)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/LightWindow.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Interop;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Native.External;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Light Window used by some recorder windows.\n/// </summary>\npublic class LightWindow : BaseScreenRecorder\n{\n    private HwndSource _hwndSource;\n\n    public DisplayTimer DisplayTimer = null;\n\n    #region Dependency Property\n\n    public static readonly DependencyProperty ChildProperty = DependencyProperty.Register(nameof(Child), typeof(UIElement), typeof(LightWindow),\n        new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty MaxSizeProperty = DependencyProperty.Register(nameof(MaxSize), typeof(double), typeof(LightWindow),\n        new FrameworkPropertyMetadata(26.0, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty MinimizeVisibilityProperty = DependencyProperty.Register(nameof(MinimizeVisibility), typeof(Visibility), typeof(LightWindow),\n        new FrameworkPropertyMetadata(Visibility.Visible, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty IsRecordingProperty = DependencyProperty.Register(nameof(IsRecording), typeof(bool), typeof(LightWindow),\n        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty IsThinProperty = DependencyProperty.Register(nameof(IsThin), typeof(bool), typeof(LightWindow),\n        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty IsFollowingProperty = DependencyProperty.Register(nameof(IsFollowing), typeof(bool), typeof(LightWindow), \n        new PropertyMetadata(false, IsFollowing_PropertyChanged));\n\n    #endregion\n\n    #region Property Accessor\n\n    /// <summary>\n    /// The Image of the caption bar.\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"The Image of the caption bar.\")]\n    public UIElement Child\n    {\n        get => (UIElement)GetValue(ChildProperty);\n        set => SetCurrentValue(ChildProperty, value);\n    }\n\n    /// <summary>\n    /// The maximum size of the image.\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"The maximum size of the image.\")]\n    public double MaxSize\n    {\n        get => (double)GetValue(MaxSizeProperty);\n        set => SetCurrentValue(MaxSizeProperty, value);\n    }\n\n    /// <summary>\n    /// Minimize button visibility.\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"Minimize button visibility.\")]\n    public Visibility MinimizeVisibility\n    {\n        get => (Visibility)GetValue(MinimizeVisibilityProperty);\n        set => SetCurrentValue(MinimizeVisibilityProperty, value);\n    }\n\n    /// <summary>\n    /// If in recording mode.\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"If in recording mode.\")]\n    public bool IsRecording\n    {\n        get => (bool)GetValue(IsRecordingProperty);\n        set => SetCurrentValue(IsRecordingProperty, value);\n    }\n\n    /// <summary>\n    /// Thin mode (hides the title bar).\n    /// </summary>\n    [Bindable(true), Category(\"Common\"), Description(\"Thin mode (hides the title bar).\")]\n    public bool IsThin\n    {\n        get => (bool)GetValue(IsThinProperty);\n        set => SetCurrentValue(IsThinProperty, value);\n    }\n\n    /// <summary>\n    /// True if the window should follow the mouse cursor.\n    /// </summary>\n    public bool IsFollowing\n    {\n        get => (bool)GetValue(IsFollowingProperty);\n        set => SetValue(IsFollowingProperty, value);\n    }\n\n    #endregion\n\n\n    static LightWindow()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(LightWindow), new FrameworkPropertyMetadata(typeof(LightWindow)));\n    }\n\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        DisplayTimer = GetTemplateChild(\"DisplayTimer\") as DisplayTimer;\n\n        if (GetTemplateChild(\"MinimizeButton\") is ExtendedButton minimizeButton)\n            minimizeButton.Click += MinimizeClick;\n\n        if (GetTemplateChild(\"CloseButton\") is ExtendedButton closeButton)\n            closeButton.Click += CloseClick;\n\n        if (GetTemplateChild(\"TopGrid\") is Grid topGrid)\n            topGrid.MouseLeftButtonDown += TopGrid_MouseLeftButtonDown;\n\n        if (GetTemplateChild(\"MainGrid\") is Grid resizeGrid)\n        {\n            foreach (var element in resizeGrid.Children.OfType<Rectangle>())\n            {\n                element.PreviewMouseDown += ResizeRectangle_PreviewMouseDown;\n                element.PreviewStylusButtonDown += ResizeRectangle_PreviewStylusButtonDown;\n            }\n        }\n\n        base.OnApplyTemplate();\n    }\n\n    protected override void OnInitialized(EventArgs e)\n    {\n        SourceInitialized += Window_SourceInitialized;\n\n        base.OnInitialized(e);\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void ResizeWindow(ResizeDirection direction)\n    {\n        User32.SendMessage(_hwndSource.Handle, 0x112, (IntPtr)(61440 + direction), IntPtr.Zero);\n    }\n\n    internal void HideInternals()\n    {\n        if (GetTemplateChild(\"MainBorder\") is Border border)\n            border.Visibility = Visibility.Hidden;\n    }\n\n    internal void ShowInternals()\n    {\n        if (GetTemplateChild(\"MainBorder\") is Border border)\n            border.Visibility = Visibility.Visible;\n    }\n        \n    internal virtual void OnFollowingChanged() \n    { }\n\n    #endregion\n\n    #region Events\n\n    private void Window_SourceInitialized(object sender, EventArgs e)\n    {\n        _hwndSource = (HwndSource)PresentationSource.FromVisual(this);\n    }\n\n    private void MinimizeClick(object sender, RoutedEventArgs e)\n    {\n        WindowState = WindowState.Minimized;\n    }\n\n    private void RestoreClick(object sender, RoutedEventArgs e)\n    {\n        if (WindowState == WindowState.Normal)\n        {\n            WindowState = WindowState.Maximized;\n\n            if (sender is ExtendedButton button) \n                button.Icon = FindResource(\"Vector.Restore\") as Brush;\n        }\n        else\n        {\n            WindowState = WindowState.Normal;\n\n            if (sender is ExtendedButton button) \n                button.Icon = FindResource(\"Vector.Maximize\") as Brush;\n        }\n    }\n\n    private void CloseClick(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    private void TopGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Mouse.LeftButton == MouseButtonState.Pressed)\n            DragMove();\n    }\n\n    private void ResizeRectangle_PreviewMouseDown(object sender, MouseButtonEventArgs e)\n    {\n        if (e.ChangedButton != MouseButton.Left)\n            return;\n\n        if (sender is not Rectangle rectangle)\n            return;\n\n        switch (rectangle.Name)\n        {\n            case \"TopRectangle\":\n                ResizeWindow(ResizeDirection.Top);\n                break;\n            case \"BottomRectangle\":\n                ResizeWindow(ResizeDirection.Bottom);\n                break;\n            case \"LeftRectangle\":\n                ResizeWindow(ResizeDirection.Left);\n                break;\n            case \"RightRectangle\":\n                ResizeWindow(ResizeDirection.Right);\n                break;\n            case \"TopLeftRectangle\":\n                ResizeWindow(ResizeDirection.TopLeft);\n                break;\n            case \"TopRightRectangle\":\n                ResizeWindow(ResizeDirection.TopRight);\n                break;\n            case \"BottomLeftRectangle\":\n                ResizeWindow(ResizeDirection.BottomLeft);\n                break;\n            case \"BottomRightRectangle\":\n                ResizeWindow(ResizeDirection.BottomRight);\n                break;\n        }\n    }\n\n    private void ResizeRectangle_PreviewStylusButtonDown(object sender, StylusButtonEventArgs e)\n    {\n        if (sender is not Rectangle rectangle)\n            return;\n\n        switch (rectangle.Name)\n        {\n            case \"TopRectangle\":\n                ResizeWindow(ResizeDirection.Top);\n                break;\n            case \"BottomRectangle\":\n                ResizeWindow(ResizeDirection.Bottom);\n                break;\n            case \"LeftRectangle\":\n                ResizeWindow(ResizeDirection.Left);\n                break;\n            case \"RightRectangle\":\n                ResizeWindow(ResizeDirection.Right);\n                break;\n            case \"TopLeftRectangle\":\n                ResizeWindow(ResizeDirection.TopLeft);\n                break;\n            case \"TopRightRectangle\":\n                ResizeWindow(ResizeDirection.TopRight);\n                break;\n            case \"BottomLeftRectangle\":\n                ResizeWindow(ResizeDirection.BottomLeft);\n                break;\n            case \"BottomRightRectangle\":\n                ResizeWindow(ResizeDirection.BottomRight);\n                break;\n        }\n    }\n\n    private static void IsFollowing_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not LightWindow win)\n            return;\n\n        win.OnFollowingChanged();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/MoveResizeControl.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class MoveResizeControl : ContentControl\n{\n    #region Variables\n\n    /// <summary>\n    /// Resizing adorner uses Thumbs for visual elements.  \n    /// The Thumbs have built-in mouse input handling.\n    /// </summary>\n    private Thumb _topLeft, _topRight, _bottomLeft, _bottomRight, _top, _bottom, _left, _right;\n\n    /// <summary>\n    /// The selection rectangle, used to drag the selection Rect elsewhere.\n    /// </summary>\n    private Border _border;\n\n    /// <summary>\n    /// The start point for the drag operation.\n    /// </summary>\n    private Point _startPoint;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty CanMoveProperty = DependencyProperty.Register(\"CanMove\", typeof(bool), typeof(MoveResizeControl), new PropertyMetadata(true));\n\n    public static readonly DependencyProperty CanResizeProperty = DependencyProperty.Register(\"CanResize\", typeof(bool), typeof(MoveResizeControl), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty SelectedProperty = DependencyProperty.Register(\"Selected\", typeof(Rect), typeof(MoveResizeControl), new PropertyMetadata(new Rect(-1, -1, 0, 0), Selected_PropertyChanged));\n\n    public static readonly DependencyProperty LeftProperty = DependencyProperty.Register(\"Left\", typeof(double), typeof(MoveResizeControl), new PropertyMetadata(-1d, Left_PropertyChanged));\n\n    public static readonly DependencyProperty TopProperty = DependencyProperty.Register(\"Top\", typeof(double), typeof(MoveResizeControl), new PropertyMetadata(-1d, Top_PropertyChanged));\n\n    public static readonly DependencyProperty RestrictMovementProperty = DependencyProperty.Register(\"RestrictMovement\", typeof(bool), typeof(MoveResizeControl), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty ContentScaleProperty = DependencyProperty.Register(\"ContentScale\", typeof(double), typeof(MoveResizeControl), new PropertyMetadata(1d, ContentScale_PropertyChanged));\n\n    #endregion\n\n    #region Properties\n\n    public bool CanMove\n    {\n        get => (bool) GetValue(CanMoveProperty);\n        set => SetValue(CanMoveProperty, value);\n    }\n\n    public bool CanResize\n    {\n        get => (bool)GetValue(CanResizeProperty);\n        set => SetValue(CanResizeProperty, value);\n    }\n\n    public Rect Selected\n    {\n        get => (Rect)GetValue(SelectedProperty);\n        set => SetValue(SelectedProperty, value);\n    }\n\n    public double Left\n    {\n        get => (double)GetValue(LeftProperty);\n        set => SetValue(LeftProperty, value);\n    }\n\n    public double Top\n    {\n        get => (double)GetValue(TopProperty);\n        set => SetValue(TopProperty, value);\n    }\n\n    public bool RestrictMovement\n    {\n        get => (bool)GetValue(RestrictMovementProperty);\n        set => SetValue(RestrictMovementProperty, value);\n    }\n\n    public double ContentScale\n    {\n        get => (double)GetValue(ContentScaleProperty);\n        set => SetValue(ContentScaleProperty, value);\n    }\n\n    #endregion\n\n    static MoveResizeControl()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(MoveResizeControl), new FrameworkPropertyMetadata(typeof(MoveResizeControl)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _topLeft = Template.FindName(\"TopLeftThumb\", this) as Thumb;\n        _topRight = Template.FindName(\"TopRightThumb\", this) as Thumb;\n        _bottomLeft = Template.FindName(\"BottomLeftThumb\", this) as Thumb;\n        _bottomRight = Template.FindName(\"BottomRightThumb\", this) as Thumb;\n\n        _top = Template.FindName(\"TopThumb\", this) as Thumb;\n        _bottom = Template.FindName(\"BottomThumb\", this) as Thumb;\n        _left = Template.FindName(\"LeftThumb\", this) as Thumb;\n        _right = Template.FindName(\"RightThumb\", this) as Thumb;\n\n        _border = Template.FindName(\"SelectBorder\", this) as Border;\n\n        if (_topLeft == null || _topRight == null || _bottomLeft == null || _bottomRight == null ||\n            _top == null || _bottom == null || _left == null || _right == null || _border == null)\n            return;\n\n        //Adjust the size of the element based on the content.\n        //if (Math.Abs(Selected.Width) < 0.001 || Math.Abs(Selected.Height) < 0.001)\n        //{\n        //    var control = Content as FrameworkElement;\n\n        //    control?.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        //    control?.Arrange(new Rect(control.DesiredSize));\n\n        //    if (control != null && Math.Abs(control.ActualHeight) > 0.001 && Math.Abs(control.ActualWidth) > 0.001)\n        //        Selected = new Rect(Selected.X, Selected.Y, control.ActualWidth, control.ActualHeight);\n        //}\n\n        AdjustThumbs();\n\n        //Add handlers for resizing • Corners.\n        _topLeft.DragDelta += HandleTopLeft;\n        _topRight.DragDelta += HandleTopRight;\n        _bottomLeft.DragDelta += HandleBottomLeft;\n        _bottomRight.DragDelta += HandleBottomRight;\n\n        //Add handlers for resizing • Sides.\n        _top.DragDelta += HandleTop;\n        _bottom.DragDelta += HandleBottom;\n        _left.DragDelta += HandleLeft;\n        _right.DragDelta += HandleRight;\n\n        //Drag to move.\n        _border.MouseLeftButtonDown += Rectangle_MouseLeftButtonDown;\n        _border.MouseMove += Rectangle_MouseMove;\n        _border.MouseLeftButtonUp += Rectangle_MouseLeftButtonUp;\n\n        //Detect text updates.\n        var textBlock = Content as TextBlock;\n\n        //Size down too.\n        if (textBlock != null)\n            textBlock.LayoutUpdated += (sender, args) => AdjustContent();\n    }\n\n    protected override void OnChildDesiredSizeChanged(UIElement child)\n    {\n        AdjustContent();\n\n        base.OnChildDesiredSizeChanged(child);\n    }\n\n    protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)\n    {\n        AdjustContent();\n\n        base.OnVisualChildrenChanged(visualAdded, visualRemoved);\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void AdjustThumbs()\n    {\n        if (_topLeft == null)\n            return;\n\n        //Top left.\n        Canvas.SetLeft(_topLeft, Selected.Left - _topLeft.Width / 2d);\n        Canvas.SetTop(_topLeft, Selected.Top - _topLeft.Height / 2d);\n\n        //Top right.\n        Canvas.SetLeft(_topRight, Selected.Right - _topRight.Width / 2d);\n        Canvas.SetTop(_topRight, Selected.Top - _topRight.Height / 2d);\n\n        //Bottom left.\n        Canvas.SetLeft(_bottomLeft, Selected.Left - _bottomLeft.Width / 2d);\n        Canvas.SetTop(_bottomLeft, Selected.Bottom - _bottomLeft.Height / 2d);\n\n        //Bottom right.\n        Canvas.SetLeft(_bottomRight, Selected.Right - _bottomRight.Width / 2d);\n        Canvas.SetTop(_bottomRight, Selected.Bottom - _bottomRight.Height / 2d);\n\n        //Top.\n        Canvas.SetLeft(_top, Selected.Left + Selected.Width / 2d - _top.Width / 2d);\n        Canvas.SetTop(_top, Selected.Top - _top.Height / 2d);\n\n        //Left.\n        Canvas.SetLeft(_left, Selected.Left - _left.Width / 2d);\n        Canvas.SetTop(_left, Selected.Top + Selected.Height / 2d - _left.Height / 2d);\n\n        //Right.\n        Canvas.SetLeft(_right, Selected.Right - _right.Width / 2d);\n        Canvas.SetTop(_right, Selected.Top + Selected.Height / 2d - _right.Height / 2d);\n\n        //Bottom.\n        Canvas.SetLeft(_bottom, Selected.Left + Selected.Width / 2d - _bottom.Width / 2d);\n        Canvas.SetTop(_bottom, Selected.Bottom - _bottom.Height / 2d);\n    }\n\n    public void AdjustContent()\n    {\n        var control = Content as FrameworkElement;\n\n        if (control == null || !IsLoaded)\n            return;\n\n        control.LayoutTransform = new ScaleTransform(ContentScale, ContentScale, 0.5, 0.5);\n\n        control.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        control.Arrange(new Rect(control.DesiredSize));\n\n        if (Math.Abs(control.ActualHeight) > 0.001 && Math.Abs(control.ActualWidth) > 0.001)\n            Selected = new Rect(Selected.X, Selected.Y, control.ActualWidth * ContentScale, control.ActualHeight * ContentScale);\n    }\n\n    #endregion\n\n    #region Events\n\n    private static void Selected_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var control = o as MoveResizeControl;\n\n        if (control == null)\n            return;\n\n        control.Left = control.Selected.Left;\n        control.Top = control.Selected.Top;\n\n        control.AdjustThumbs();\n    }\n\n    private static void Left_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var control = o as MoveResizeControl;\n\n        if (control == null)\n            return;\n\n        control.Selected = new Rect(control.Left, control.Selected.Top, control.Selected.Width, control.Selected.Height);\n    }\n\n    private static void Top_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var control = o as MoveResizeControl;\n\n        if (control == null)\n            return;\n\n        control.Selected = new Rect(control.Selected.Left, control.Top, control.Selected.Width, control.Selected.Height);\n    }\n\n    private static void ContentScale_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs d)\n    {\n        var control = o as MoveResizeControl;\n\n        control?.AdjustContent();\n    }\n\n    private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        _startPoint = e.GetPosition(this);\n\n        _border.CaptureMouse();\n\n        e.Handled = true;\n    }\n\n    private void Rectangle_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (!_border.IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed) return;\n\n        _border.MouseMove -= Rectangle_MouseMove;\n\n        var currentPosition = e.GetPosition(this);\n\n        var x = Selected.X + (currentPosition.X - _startPoint.X);\n        var y = Selected.Y + (currentPosition.Y - _startPoint.Y);\n\n        if (RestrictMovement)\n        {\n            if (x < 0)\n                x = 0;\n\n            if (y < 0)\n                y = 0;\n\n            if (x + Selected.Width > ActualWidth)\n                x = ActualWidth - Selected.Width;\n\n            if (y + Selected.Height > ActualHeight)\n                y = ActualHeight - Selected.Height;\n        }\n        else\n        {\n            if (x < Selected.Width * -0.9)\n                x = Selected.Width * -0.9;\n\n            if (y < Selected.Height * -0.9)\n                y = Selected.Height * -0.9;\n\n            if (x + Selected.Width > ActualWidth + Selected.Width * 0.9)\n                x = ActualWidth - Selected.Width + Selected.Width * 0.9;\n\n            if (y + Selected.Height > ActualHeight + Selected.Height * 0.9)\n                y = ActualHeight - Selected.Height + Selected.Height * 0.9;\n        }\n\n        Selected = new Rect(x, y, Selected.Width, Selected.Height);\n\n        _startPoint = currentPosition;\n        e.Handled = true;\n\n        AdjustThumbs();\n\n        _border.MouseMove += Rectangle_MouseMove;\n    }\n\n    private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        if (_border.IsMouseCaptured)\n            _border.ReleaseMouseCapture();\n\n        AdjustThumbs();\n\n        e.Handled = true;\n    }\n\n    ///<summary>\n    ///Handler for resizing from the top-left.\n    ///</summary>\n    private void HandleTopLeft(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        Selected = new Rect(left, top, width, height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the top-right.\n    /// </summary>\n    private void HandleTopRight(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        Selected = new Rect(Selected.Left, top, width, height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the bottom-left.\n    /// </summary>\n    private void HandleBottomLeft(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(left, Selected.Top, width, height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-right.\n    /// </summary>\n    private void HandleBottomRight(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(Selected.Left, Selected.Top, width, height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the left-middle.\n    /// </summary>\n    private void HandleLeft(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        Selected = new Rect(left, Selected.Top, width, Selected.Height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the top-middle.\n    /// </summary>\n    private void HandleTop(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        Selected = new Rect(Selected.Left, top, Selected.Width, height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the right-middle.\n    /// </summary>\n    private void HandleRight(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        Selected = new Rect(Selected.Left, Selected.Top, width, Selected.Height);\n\n        AdjustThumbs();\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-middle.\n    /// </summary>\n    private void HandleBottom(object sender, DragDeltaEventArgs e)\n    {\n        var hitThumb = sender as Thumb;\n\n        if (hitThumb == null) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(Selected.Left, Selected.Top, Selected.Width, height);\n\n        AdjustThumbs();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/NotificationBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Markup;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Controls;\n\n[DefaultProperty(\"Items\")]\n[ContentProperty(\"Items\")]\npublic class NotificationBox : ItemsControl\n{\n    #region Variables\n\n    /// <summary>\n    /// The start point of the dragging operation.\n    /// </summary>\n    private Point _dragStart = new Point(0, 0);\n\n    private Hyperlink _notificationHyperlink;\n    private Hyperlink _encodingHyperlink;\n    private ScrollViewer _mainScrollViewer;\n\n    #endregion\n\n    #region Properties\n\n    public static readonly DependencyProperty HasAnyNotificationProperty = DependencyProperty.Register(nameof(HasAnyNotification), typeof(bool), typeof(NotificationBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty HasAnyEncodingProperty = DependencyProperty.Register(nameof(HasAnyEncoding), typeof(bool), typeof(NotificationBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty HasAnyActiveEncodingProperty = DependencyProperty.Register(nameof(HasAnyActiveEncoding), typeof(bool), typeof(NotificationBox), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty OnlyDisplayListProperty = DependencyProperty.Register(nameof(OnlyDisplayList), typeof(bool), typeof(NotificationBox), new PropertyMetadata(false));\n\n\n    public bool HasAnyNotification\n    {\n        get => (bool) GetValue(HasAnyNotificationProperty);\n        set => SetValue(HasAnyNotificationProperty, value);\n    }\n\n    public bool HasAnyEncoding\n    {\n        get => (bool)GetValue(HasAnyEncodingProperty);\n        set => SetValue(HasAnyEncodingProperty, value);\n    }\n\n    public bool HasAnyActiveEncoding\n    {\n        get => (bool)GetValue(HasAnyActiveEncodingProperty);\n        set => SetValue(HasAnyActiveEncodingProperty, value);\n    }\n\n    public bool OnlyDisplayList\n    {\n        get => (bool)GetValue(OnlyDisplayListProperty);\n        set => SetValue(OnlyDisplayListProperty, value);\n    }\n\n    #endregion\n\n\n    static NotificationBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(NotificationBox), new FrameworkPropertyMetadata(typeof(NotificationBox)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _notificationHyperlink = GetTemplateChild(\"NotificationHyperlink\") as Hyperlink;\n        _encodingHyperlink = GetTemplateChild(\"EncodingHyperlink\") as Hyperlink;\n        _mainScrollViewer = GetTemplateChild(\"MainScrollViewer\") as ScrollViewer;\n\n        IsVisibleChanged += (sender, args) =>\n        {\n            if (!IsLoaded || !IsVisible)\n                return;\n\n            CheckIfFileExist();\n        };\n\n        if (_notificationHyperlink != null)\n            _notificationHyperlink.Click += NotificationHyperlink_Click;\n\n        if (_encodingHyperlink != null)\n            _encodingHyperlink.Click += EncodingHyperlink_Click;\n\n        UpdateNotification();\n        UpdateEncoding();\n    }\n\n    #region Events\n\n    private void Encoding_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        //Don't start the drag and drop if the user clicks on some button on the encoder.\n        if (!(sender is EncoderListViewItem item) || e.OriginalSource is Run || VisualHelper.HasParent<ExtendedButton>(e.OriginalSource as Visual, typeof(EncoderListViewItem), true))\n            return;\n\n        item.CaptureMouse();\n        _dragStart = e.GetPosition(null);\n    }\n\n    private void Encoding_MouseMove(object sender, MouseEventArgs e)\n    {\n        var diff = _dragStart - e.GetPosition(null);\n\n        if (e.LeftButton != MouseButtonState.Pressed || !(Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance) ||\n            !(Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)) return;\n\n        if (!(sender is EncoderListViewItem enc) || enc.Status != EncodingStatus.Completed || !File.Exists(enc.OutputFilename) || !enc.IsMouseCaptured)\n            return;\n\n        //To support multiple files in drag, use ListBox or ListView and get the selected items:\n        //var files = ListView.SelectedItems.OfType<EncoderListViewItem>().Where(y => y.Status == Status.Completed && File.Exists(y.OutputFilename)).Select(x => x.OutputFilename).ToArray();\n\n        DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, new[] { enc.OutputFilename }), Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl) ? DragDropEffects.Copy : DragDropEffects.Move);\n    }\n\n    private void Encoding_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        var item = sender as UIElement;\n        item?.ReleaseMouseCapture();\n    }\n\n    private void CancelEncoding_Clicked(object sender, RoutedEventArgs args)\n    {\n        if (!(sender is EncoderListViewItem item))\n            return;\n\n        if (item.Status != EncodingStatus.Processing)\n            EncodingManager.RemoveEncodings(item.Id);\n        else if (!item.TokenSource.IsCancellationRequested)\n            item.TokenSource.Cancel();\n    }\n\n    private void RemoveNotification_Click(object sender, RoutedEventArgs args)\n    {\n        if (!(sender is StatusBand band))\n            return;\n\n        NotificationManager.RemoveNotification(band.Id);\n    }\n\n    private void NotificationHyperlink_Click(object sender, RoutedEventArgs args)\n    {\n        NotificationManager.RemoveAllNotifications();\n    }\n\n    private void EncodingHyperlink_Click(object sender, RoutedEventArgs args)\n    {\n        EncodingManager.RemoveFinishedEncodings();\n    }\n\n    #endregion\n\n    #region UI manipulation\n\n    public void UpdateNotification(int? id = null)\n    {\n        var evergreen = id.HasValue ? NotificationManager.Notifications.Where(w => w.Id == id.Value).ToList() : NotificationManager.Notifications;\n        var dirty = id.HasValue ? Items.OfType<StatusBand>().Where(w => w.Id == id).ToList() : Items.OfType<StatusBand>().ToList();\n\n        //Add items.\n        var include = evergreen.Where(w => dirty.All(a => a.Id != w.Id)).ToList();\n\n        foreach (var item in include)\n        {\n            var not = new StatusBand\n            {\n                Id = item.Id,\n                Text = item.Text,\n                Type = item.Kind,\n                Action = item.Action,\n                IsLink = item.Action != null,\n                Visibility = Visibility.Visible\n            };\n            not.Dismissed += RemoveNotification_Click;\n\n            Items.Add(not);\n        }\n\n        //Remove items that dont exist anymore.\n        var remove = dirty.Where(w => evergreen.All(a => a.Id != w.Id)).ToList();\n\n        foreach (var item in remove)\n        {\n            item.Dismissed -= RemoveNotification_Click;\n\n            Items.Remove(item);\n        }\n\n        //Update others.\n        var update = evergreen.Where(w => dirty.Any(a => a.Id == w.Id)).ToList();\n\n        foreach (var item in update)\n        {\n            var actual = Items.OfType<StatusBand>().FirstOrDefault(w => w.Id == item.Id);\n\n            if (actual == null)\n                continue;\n\n            actual.Text = item.Text;\n            //TODO: Should this exist?\n        }\n\n        CommandManager.InvalidateRequerySuggested();\n        GC.Collect();\n\n        HasAnyNotification = Items.OfType<StatusBand>().Any();\n    }\n\n    public EncoderListViewItem AddEncoding(int id)\n    {\n        var item = EncodingManager.Encodings.FirstOrDefault(w => w.Id == id);\n\n        if (item == null)\n            return null;\n\n        //Check if the enoder item was added before, during initialization.\n        if (Items.OfType<EncoderListViewItem>().Any(a => a.Id == id))\n            return null;\n\n        var enc = new EncoderListViewItem\n        {\n            Id = item.Id,\n            OutputType = item.OutputType,\n            Text = item.Text,\n            Status = item.Status,\n            CurrentFrame = item.CurrentFrame,\n            FrameCount = item.FrameCount,\n            TokenSource = item.TokenSource,\n\n            //These following properties are only available if an IEncoding window is opened after an encoding was already inserted.\n            IsIndeterminate = item.IsIndeterminate,\n            SizeInBytes = item.SizeInBytes,\n            OutputFilename = item.OutputFilename,\n            SavedToDisk = item.SavedToDisk,\n\n            Uploaded = item.Uploaded,\n            UploadLink = item.UploadLink,\n            UploadLinkDisplay = item.UploadLinkDisplay,\n            DeletionLink = item.DeletionLink,\n            Exception = item.Exception,\n\n            CommandExecuted = item.CommandExecuted,\n            Command = item.Command,\n            CommandOutput = item.CommandOutput,\n            CommandTaskException = item.CommandTaskException,\n\n            CopiedToClipboard = item.CopiedToClipboard,\n            CopyTaskException = item.CopyTaskException,\n\n            TimeToAnalyze = item.TimeToAnalyze,\n            TimeToEncode = item.TimeToEncode,\n            TimeToUpload = item.TimeToUpload,\n            TimeToCopy = item.TimeToCopy,\n            TimeToExecute = item.TimeToExecute,\n        };\n        enc.CancelClicked += CancelEncoding_Clicked;\n        enc.PreviewMouseLeftButtonDown += Encoding_PreviewMouseLeftButtonDown;\n        enc.PreviewMouseLeftButtonUp += Encoding_PreviewMouseLeftButtonUp;\n        enc.MouseMove += Encoding_MouseMove;\n\n        Items.Add(enc);\n\n        _mainScrollViewer?.ScrollToBottom();\n\n        HasAnyEncoding = Items.OfType<EncoderListViewItem>().Any();\n        HasAnyActiveEncoding = Items.OfType<EncoderListViewItem>().Any(a => a.Status == EncodingStatus.Processing);\n\n        return enc;\n    }\n\n    public void UpdateEncoding(int? id = null)\n    {\n        var evergreen = id.HasValue ? EncodingManager.Encodings.Where(w => w.Id == id.Value).ToList() : EncodingManager.Encodings;\n        var dirty = id.HasValue ? Items.OfType<EncoderListViewItem>().Where(w => w.Id == id).ToList() : Items.OfType<EncoderListViewItem>().ToList();\n\n        //Add items.\n        var include = evergreen.Where(w => dirty.All(a => a.Id != w.Id)).ToList();\n\n        foreach (var item in include)\n        {\n            var enc = new EncoderListViewItem\n            {\n                Id = item.Id,\n                OutputType = item.OutputType,\n                Text = item.Text,\n                Status = item.Status,\n                CurrentFrame = item.CurrentFrame,\n                FrameCount = item.FrameCount,\n                TokenSource = item.TokenSource,\n\n                //These following properties are only available if an IEncoding window is opened after an encoding was already inserted.\n                IsIndeterminate = item.IsIndeterminate,\n                SizeInBytes = item.SizeInBytes,\n                OutputFilename = item.OutputFilename,\n                SavedToDisk = item.SavedToDisk,\n\n                Uploaded = item.Uploaded,\n                UploadLink = item.UploadLink,\n                UploadLinkDisplay = item.UploadLinkDisplay,\n                DeletionLink = item.DeletionLink,\n                Exception = item.Exception,\n\n                CommandExecuted = item.CommandExecuted,\n                Command = item.Command,\n                CommandOutput = item.CommandOutput,\n                CommandTaskException = item.CommandTaskException,\n\n                CopiedToClipboard = item.CopiedToClipboard,\n                CopyTaskException = item.CopyTaskException,\n\n                TimeToAnalyze = item.TimeToAnalyze,\n                TimeToEncode = item.TimeToEncode,\n                TimeToUpload = item.TimeToUpload,\n                TimeToCopy = item.TimeToCopy,\n                TimeToExecute = item.TimeToExecute,\n            };\n            enc.CancelClicked += CancelEncoding_Clicked;\n            enc.PreviewMouseLeftButtonDown += Encoding_PreviewMouseLeftButtonDown;\n            enc.PreviewMouseLeftButtonUp += Encoding_PreviewMouseLeftButtonUp;\n            enc.MouseMove += Encoding_MouseMove;\n\n            EncodingManager.ViewList.Add(enc);\n            Items.Add(enc);\n        }\n\n        //Remove items that dont exist anymore.\n        var remove = dirty.Where(w => evergreen.All(a => a.Id != w.Id)).ToList();\n\n        foreach (var item in remove)\n        {\n            item.CancelClicked -= CancelEncoding_Clicked;\n            item.PreviewMouseLeftButtonDown -= Encoding_PreviewMouseLeftButtonDown;\n            item.PreviewMouseLeftButtonUp -= Encoding_PreviewMouseLeftButtonUp;\n            item.MouseMove -= Encoding_MouseMove;\n\n            EncodingManager.ViewList.Remove(item);\n            Items.Remove(item);\n        }\n\n        //Update others.\n        var update = evergreen.Where(w => dirty.Any(a => a.Id == w.Id)).ToList();\n\n        foreach (var item in update)\n        {\n            //var current = EncodingManager.Encodings.FirstOrDefault(w => w.Id == item.Id);\n            var actual = Items.OfType<EncoderListViewItem>().FirstOrDefault(w => w.Id == item.Id);\n\n            if (actual == null)\n                continue;\n\n            actual.Text = item.Text;\n            actual.Status = item.Status;\n            actual.IsIndeterminate = item.IsIndeterminate;\n            actual.CurrentFrame = item.CurrentFrame;\n            actual.FrameCount = item.FrameCount;\n            actual.SizeInBytes = item.SizeInBytes;\n            actual.OutputFilename = item.OutputFilename;\n            actual.SavedToDisk = item.SavedToDisk;\n            actual.Exception = item.Exception;\n\n            actual.Uploaded = item.Uploaded;\n            actual.UploadLink = item.UploadLink;\n            actual.UploadLinkDisplay = item.UploadLinkDisplay;\n            actual.DeletionLink = item.DeletionLink;\n\n            actual.CommandExecuted = item.CommandExecuted;\n            actual.Command = item.Command;\n            actual.CommandOutput = item.CommandOutput;\n            actual.CommandTaskException = item.CommandTaskException;\n\n            actual.CopiedToClipboard = item.CopiedToClipboard;\n            actual.CopyTaskException = item.CopyTaskException;\n\n            actual.TimeToAnalyze = item.TimeToAnalyze;\n            actual.TimeToEncode = item.TimeToEncode;\n            actual.TimeToUpload = item.TimeToUpload;\n            actual.TimeToCopy = item.TimeToCopy;\n            actual.TimeToExecute = item.TimeToExecute;\n        }\n\n        CommandManager.InvalidateRequerySuggested();\n        GC.Collect();\n\n        HasAnyEncoding = Items.OfType<EncoderListViewItem>().Any();\n        HasAnyActiveEncoding = Items.OfType<EncoderListViewItem>().Any(a => a.Status == EncodingStatus.Processing);\n    }\n\n    public EncoderListViewItem RemoveEncoding(int id)\n    {\n        //Removes encoding.\n        var item = EncodingManager.Encodings.FirstOrDefault(w => w.Id == id);\n\n        if (item != null)\n            Items.Remove(item);\n\n        //Removes view.\n        var enc = Items.OfType<EncoderListViewItem>().FirstOrDefault(w => w.Id == id);\n\n        if (enc == null)\n            return null;\n\n        enc.CancelClicked -= CancelEncoding_Clicked;\n        enc.PreviewMouseLeftButtonDown -= Encoding_PreviewMouseLeftButtonDown;\n        enc.PreviewMouseLeftButtonUp -= Encoding_PreviewMouseLeftButtonUp;\n        enc.MouseMove -= Encoding_MouseMove;\n\n        EncodingManager.ViewList.Remove(enc);\n        Items.Remove(enc);\n\n        HasAnyEncoding = Items.OfType<EncoderListViewItem>().Any();\n        HasAnyActiveEncoding = Items.OfType<EncoderListViewItem>().Any(a => a.Status == EncodingStatus.Processing);\n\n        return enc;\n    }\n\n    public void CheckIfFileExist()\n    {\n        foreach (var item in EncodingManager.Encodings.Where(item => item.Status == EncodingStatus.Completed || item.Status == EncodingStatus.FileDeletedOrMoved))\n        {\n            if (!File.Exists(item.OutputFilename) && !item.AreMultipleFiles)\n                EncodingManager.Update(item.Id, EncodingStatus.FileDeletedOrMoved);\n            else if (item.Status == EncodingStatus.FileDeletedOrMoved)\n                EncodingManager.Update(item.Id, EncodingStatus.Completed, item.OutputFilename);\n        }\n    }\n\n    /// <summary>\n    /// Removes all views from this instance.\n    /// This method is used when the encoder window closes and needs to remove the references from the manager.\n    /// </summary>\n    public void RemoveAllViews()\n    {\n        var list = Items.OfType<EncoderListViewItem>().ToList();\n\n        foreach (var enc in list)\n        {\n            enc.CancelClicked -= CancelEncoding_Clicked;\n            enc.PreviewMouseLeftButtonDown -= Encoding_PreviewMouseLeftButtonDown;\n            enc.MouseMove -= Encoding_MouseMove;\n\n            EncodingManager.ViewList.Remove(enc);\n            Items.Remove(enc);\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/NotifyIcon.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Interop;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.ImageUtil;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing Other = ScreenToGif.Util.Other;\n\nnamespace ScreenToGif.Controls;\n\ninternal class NotifyIcon : FrameworkElement, IDisposable\n{\n    #region Variables\n\n    private Icon _icon;\n\n    /// <summary>\n    /// Represents the current icon data.\n    /// </summary>\n    private NotifyIconData _iconData;\n\n    /// <summary>\n    /// Receives messages from the taskbar icon.\n    /// </summary>\n    private readonly WindowMessageSink _messageSink;\n\n    #endregion\n\n    #region Dependencies\n\n    public static readonly DependencyProperty IconSourceProperty = DependencyProperty.Register(nameof(IconSource), typeof(ImageSource), typeof(NotifyIcon), new FrameworkPropertyMetadata(null, IconSourcePropertyChanged));\n\n    public static readonly DependencyProperty NotifyToolTipProperty = DependencyProperty.Register(nameof(NotifyToolTip), typeof(UIElement), typeof(NotifyIcon), new FrameworkPropertyMetadata(null, ToolTipPropertyChanged));\n\n    public static readonly DependencyProperty NotifyToolTipTextProperty = DependencyProperty.Register(nameof(NotifyToolTipText), typeof(string), typeof(NotifyIcon), new FrameworkPropertyMetadata(string.Empty, ToolTipTextPropertyChanged));\n\n    private static readonly DependencyPropertyKey NotifyToolTipElementPropertyKey = DependencyProperty.RegisterReadOnly(nameof(NotifyToolTipElement), typeof(ToolTip), typeof(NotifyIcon), new FrameworkPropertyMetadata(null));\n\n    public static readonly DependencyProperty NotifyToolTipElementProperty = NotifyToolTipElementPropertyKey.DependencyProperty;\n\n    private static readonly DependencyProperty LeftClickCommandProperty = DependencyProperty.Register(nameof(LeftClickCommand), typeof(ICommand), typeof(NotifyIcon), new FrameworkPropertyMetadata(null));\n\n    private static readonly DependencyProperty LeftDoubleClickCommandProperty = DependencyProperty.Register(nameof(LeftDoubleClickCommand), typeof(ICommand), typeof(NotifyIcon), new FrameworkPropertyMetadata(null));\n\n    private static readonly DependencyProperty MiddleClickCommandProperty = DependencyProperty.Register(nameof(MiddleClickCommand), typeof(ICommand), typeof(NotifyIcon), new FrameworkPropertyMetadata(null));\n\n    public static readonly RoutedEvent TrayMouseMoveEvent = EventManager.RegisterRoutedEvent(nameof(TrayMouseMove), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayLeftMouseDownEvent = EventManager.RegisterRoutedEvent(nameof(TrayLeftMouseDown), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayRightMouseDownEvent = EventManager.RegisterRoutedEvent(nameof(TrayRightMouseDown), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayMiddleMouseDownEvent = EventManager.RegisterRoutedEvent(nameof(TrayMiddleMouseDown), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayLeftMouseUpEvent = EventManager.RegisterRoutedEvent(nameof(TrayLeftMouseUp), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayRightMouseUpEvent = EventManager.RegisterRoutedEvent(nameof(TrayRightMouseUp), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayMiddleMouseUpEvent = EventManager.RegisterRoutedEvent(nameof(TrayMiddleMouseUp), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayMouseDoubleClickEvent = EventManager.RegisterRoutedEvent(nameof(TrayMouseDoubleClick), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent PreviewTrayContextMenuOpenEvent = EventManager.RegisterRoutedEvent(nameof(PreviewTrayContextMenuOpen), RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent TrayContextMenuOpenEvent = EventManager.RegisterRoutedEvent(nameof(TrayContextMenuOpen), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent PreviewToolTipOpenEvent = EventManager.RegisterRoutedEvent(nameof(PreviewToolTipOpen), RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent ToolTipOpenEvent = EventManager.RegisterRoutedEvent(nameof(ToolTipOpen), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent PreviewToolTipCloseEvent = EventManager.RegisterRoutedEvent(nameof(PreviewToolTipClose), RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    public static readonly RoutedEvent ToolTipCloseEvent = EventManager.RegisterRoutedEvent(nameof(ToolTipClose), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NotifyIcon));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// Indicates whether the taskbar icon has been created or not.\n    /// </summary>\n    public bool IsTaskbarIconCreated { get; private set; }\n\n    /// <summary>\n    /// Checks whether a non-tooltip popup is currently opened.\n    /// </summary>\n    private bool IsPopupOpen => ContextMenu?.IsOpen ?? false;\n\n    public bool IsDisposed { get; private set; }\n\n    [Browsable(false)]\n    public Icon Icon\n    {\n        get => _icon;\n        set\n        {\n            _icon = value;\n            _iconData.IconHandle = value == null ? IntPtr.Zero : (_icon?.Handle ?? IntPtr.Zero);\n\n            NotifyIconHelper.WriteIconData(ref _iconData, NotifyCommands.Modify, IconDataMembers.Icon);\n        }\n    }\n\n    public ImageSource IconSource\n    {\n        get => (ImageSource)GetValue(IconSourceProperty);\n        set => SetValue(IconSourceProperty, value);\n    }\n\n    public string NotifyToolTipText\n    {\n        get => (string)GetValue(NotifyToolTipTextProperty);\n        set => SetValue(NotifyToolTipTextProperty, value);\n    }\n\n    public UIElement? NotifyToolTip\n    {\n        get => (UIElement)GetValue(NotifyToolTipProperty);\n        set => SetValue(NotifyToolTipProperty, value);\n    }\n\n    [Bindable(true)]\n    public ToolTip? NotifyToolTipElement => (ToolTip)GetValue(NotifyToolTipElementProperty);\n\n    public ICommand LeftClickCommand\n    {\n        get => (ICommand)GetValue(LeftClickCommandProperty);\n        set => SetValue(LeftClickCommandProperty, value);\n    }\n\n    public ICommand LeftDoubleClickCommand\n    {\n        get => (ICommand)GetValue(LeftDoubleClickCommandProperty);\n        set => SetValue(LeftDoubleClickCommandProperty, value);\n    }\n\n    public ICommand MiddleClickCommand\n    {\n        get => (ICommand)GetValue(MiddleClickCommandProperty);\n        set => SetValue(MiddleClickCommandProperty, value);\n    }\n\n    public event RoutedEventHandler TrayMouseMove\n    {\n        add => AddHandler(TrayMouseMoveEvent, value);\n        remove => RemoveHandler(TrayMouseMoveEvent, value);\n    }\n\n    public event RoutedEventHandler TrayLeftMouseDown\n    {\n        add => AddHandler(TrayLeftMouseDownEvent, value);\n        remove => RemoveHandler(TrayLeftMouseDownEvent, value);\n    }\n\n    public event RoutedEventHandler TrayRightMouseDown\n    {\n        add => AddHandler(TrayRightMouseDownEvent, value);\n        remove => RemoveHandler(TrayRightMouseDownEvent, value);\n    }\n\n    public event RoutedEventHandler TrayMiddleMouseDown\n    {\n        add => AddHandler(TrayMiddleMouseDownEvent, value);\n        remove => RemoveHandler(TrayMiddleMouseDownEvent, value);\n    }\n\n    public event RoutedEventHandler TrayLeftMouseUp\n    {\n        add => AddHandler(TrayLeftMouseUpEvent, value);\n        remove => RemoveHandler(TrayLeftMouseUpEvent, value);\n    }\n\n    public event RoutedEventHandler TrayRightMouseUp\n    {\n        add => AddHandler(TrayRightMouseUpEvent, value);\n        remove => RemoveHandler(TrayRightMouseUpEvent, value);\n    }\n\n    public event RoutedEventHandler TrayMiddleMouseUp\n    {\n        add => AddHandler(TrayMiddleMouseUpEvent, value);\n        remove => RemoveHandler(TrayMiddleMouseUpEvent, value);\n    }\n\n    public event RoutedEventHandler TrayMouseDoubleClick\n    {\n        add => AddHandler(TrayMouseDoubleClickEvent, value);\n        remove => RemoveHandler(TrayMouseDoubleClickEvent, value);\n    }\n\n    public event RoutedEventHandler PreviewTrayContextMenuOpen\n    {\n        add => AddHandler(PreviewTrayContextMenuOpenEvent, value);\n        remove => RemoveHandler(PreviewTrayContextMenuOpenEvent, value);\n    }\n\n    public event RoutedEventHandler TrayContextMenuOpen\n    {\n        add => AddHandler(TrayContextMenuOpenEvent, value);\n        remove => RemoveHandler(TrayContextMenuOpenEvent, value);\n    }\n\n    public event RoutedEventHandler PreviewToolTipOpen\n    {\n        add => AddHandler(PreviewToolTipOpenEvent, value);\n        remove => RemoveHandler(PreviewToolTipOpenEvent, value);\n    }\n\n    public event RoutedEventHandler ToolTipOpen\n    {\n        add => AddHandler(ToolTipOpenEvent, value);\n        remove => RemoveHandler(ToolTipOpenEvent, value);\n    }\n\n    public event RoutedEventHandler PreviewToolTipClose\n    {\n        add => AddHandler(PreviewToolTipCloseEvent, value);\n        remove => RemoveHandler(PreviewToolTipCloseEvent, value);\n    }\n\n    public event RoutedEventHandler ToolTipClose\n    {\n        add => AddHandler(ToolTipCloseEvent, value);\n        remove => RemoveHandler(ToolTipCloseEvent, value);\n    }\n\n    #endregion\n\n    #region Property Changes\n\n    private static void VisibilityPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var control = o as NotifyIcon;\n        var newValue = (Visibility)e.NewValue;\n\n        if (control == null)\n            return;\n\n        if (newValue == Visibility.Visible)\n            control.CreateTaskbarIcon();\n        else\n            control.RemoveTaskbarIcon();\n    }\n\n    private static void DataContextPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        if (o is not NotifyIcon control)\n            return;\n\n        control.UpdateDataContext(control.NotifyToolTipElement, e.OldValue, e.NewValue);\n        control.UpdateDataContext(control.ContextMenu, e.OldValue, e.NewValue);\n    }\n\n    private static void ContextMenuPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var control = o as NotifyIcon;\n\n        if (e.NewValue is not ContextMenu newValue)\n            return;\n\n        control?.UpdateDataContext(newValue, null, control.DataContext);\n    }\n\n    private static void IconSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var owner = d as NotifyIcon;\n        var value = (ImageSource)e.NewValue;\n\n        if (owner != null && value != null && !VisualHelper.IsInDesignMode())\n            owner.Icon = value.ToIcon();\n    }\n\n    private static void ToolTipPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not NotifyIcon owner)\n            return;\n\n        //owner.CreateCustomToolTip();\n        owner.WriteToolTipSettings();\n    }\n\n    private static void ToolTipTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not NotifyIcon owner)\n            return;\n\n        //if (owner.NotifyToolTip == null)\n        //{\n        //    //Create or just update the tooltip.\n        //    if (owner.NotifyToolTipElement == null)\n        //        owner.CreateCustomToolTip();\n        //    else\n        //        owner.NotifyToolTipElement.Content = e.NewValue;\n        //}\n\n        owner.WriteToolTipSettings();\n    }\n\n    #endregion\n\n    static NotifyIcon()\n    {\n        VisibilityProperty.OverrideMetadata(typeof(NotifyIcon), new PropertyMetadata(Visibility.Visible, VisibilityPropertyChanged));\n        DataContextProperty.OverrideMetadata(typeof(NotifyIcon), new FrameworkPropertyMetadata(DataContextPropertyChanged));\n        ContextMenuProperty.OverrideMetadata(typeof(NotifyIcon), new FrameworkPropertyMetadata(ContextMenuPropertyChanged));\n    }\n\n    public NotifyIcon()\n    {\n        _messageSink = new WindowMessageSink();\n\n        _iconData = NotifyIconData.CreateDefault(_messageSink.MessageWindowHandle);\n\n        _messageSink.MouseEventReceived += OnMouseEvent;\n        _messageSink.TaskbarCreated += OnTaskbarCreated;\n        _messageSink.ChangeToolTipStateRequest += OnToolTipChange;\n\n        if (Application.Current != null)\n            Application.Current.Exit += OnExit;\n    }\n\n    #region Methods\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        RefreshVisual();\n    }\n\n    private void CreateTaskbarIcon()\n    {\n        lock (this)\n        {\n            if (IsTaskbarIconCreated)\n                return;\n\n            _iconData.VersionOrTimeout = (uint)NotifyIconVersions.Vista;\n            _iconData.ValidMembers = IconDataMembers.Icon | IconDataMembers.Tip | IconDataMembers.Message;\n            _iconData.ToolTipText = NotifyToolTipText;\n\n            var status = Shell32.Shell_NotifyIcon(NotifyCommands.Add, ref _iconData);\n\n            if (!status)\n                return;\n\n            IsTaskbarIconCreated = true;\n        }\n    }\n\n    private void RemoveTaskbarIcon()\n    {\n        lock (this)\n        {\n            if (!IsTaskbarIconCreated)\n                return;\n\n            NotifyIconHelper.WriteIconData(ref _iconData, NotifyCommands.Delete, IconDataMembers.Message);\n            IsTaskbarIconCreated = false;\n        }\n    }\n\n    public PointW GetDeviceCoordinates(PointW point)\n    {\n        var dpi = Other.ScaleOfSystem();\n        return new PointW { X = (int)(point.X / dpi), Y = (int)(point.Y / dpi) };\n    }\n\n    private void ShowContextMenu(PointW cursorPosition)\n    {\n        if (IsDisposed)\n            return;\n\n        var args = new RoutedEventArgs { RoutedEvent = PreviewTrayContextMenuOpenEvent };\n        RaiseEvent(args);\n            \n        if (args.Handled || ContextMenu == null)\n            return;\n\n        ContextMenu.Placement = PlacementMode.AbsolutePoint;\n        ContextMenu.HorizontalOffset = cursorPosition.X;\n        ContextMenu.VerticalOffset = cursorPosition.Y;\n        ContextMenu.IsOpen = true;\n\n        //Gets the handle from the context menu or from the message sink.\n        var handle = ((HwndSource)PresentationSource.FromVisual(ContextMenu))?.Handle ?? _messageSink.MessageWindowHandle;\n\n        //This makes sure that the context menu can close if lost focus.\n        User32.SetForegroundWindow(handle);\n\n        RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayContextMenuOpenEvent });\n    }\n\n    private void UpdateDataContext(FrameworkElement target, object oldDataContextValue, object newDataContextValue)\n    {\n        if (target == null || target.IsDataContextDataBound()) return;\n\n        //if the target's data context is the NotifyIcon's old DataContext or the NotifyIcon itself, update it.\n        if (ReferenceEquals(this, target.DataContext) || Equals(oldDataContextValue, target.DataContext))\n            target.DataContext = newDataContextValue ?? this;\n    }\n\n    private void CreateCustomToolTip()\n    {\n        var tt = NotifyToolTip as ToolTip;\n\n        if (tt == null && NotifyToolTip != null)\n        {\n            tt = new ToolTip\n            {\n                Placement = PlacementMode.Mouse,\n                HasDropShadow = false,\n                BorderThickness = new Thickness(0),\n                Background = System.Windows.Media.Brushes.Transparent,\n                StaysOpen = true,\n                Content = NotifyToolTip\n            };\n        }\n        else if (tt == null && !string.IsNullOrEmpty(NotifyToolTipText))\n        {\n            tt = new ToolTip { Content = NotifyToolTipText };\n        }\n\n        if (tt != null)\n            UpdateDataContext(tt, null, DataContext);\n\n        //Store a reference to the used tooltip.\n        //SetValue(NotifyToolTipElementPropertyKey, tt);\n    }\n\n    private void WriteToolTipSettings()\n    {\n        lock (this)\n        {\n            _iconData.ToolTipText = NotifyToolTipText;\n            \n            Shell32.Shell_NotifyIcon(NotifyCommands.Modify, ref _iconData);\n        }\n    }\n\n    public void RefreshVisual()\n    {\n        if (ContextMenu == null)\n            return;\n\n        foreach (var menuItem in ContextMenu.Items.OfType<ExtendedMenuItem>())\n        {\n            menuItem.Foreground = TryFindResource(\"Element.Foreground.Medium\") as SolidColorBrush;\n\n            if (menuItem.Name == \"ExitButton\")\n                menuItem.Icon = TryFindResource(\"Vector.Close\") as System.Windows.Media.Brush;\n        }\n            \n        if (NotifyToolTipElement != null)\n        {\n            //For some reason, the context menu of the systray icon is not updating its style.\n            NotifyToolTipElement.Background = ContextMenu.Background = TryFindResource(\"Element.Background\") as SolidColorBrush;\n\n            NotifyToolTipElement.SetValue(TextBlock.ForegroundProperty, TryFindResource(\"Element.Foreground.Medium\") as SolidColorBrush);\n            NotifyToolTipElement.InvalidateVisual();\n        }\n    }\n\n    #endregion\n\n    #region Events\n\n    protected override void OnInitialized(EventArgs e)\n    {\n        if (Visibility == Visibility.Visible)\n            CreateTaskbarIcon();\n\n        base.OnInitialized(e);\n    }\n\n    private void OnMouseEvent(MouseEventType type)\n    {\n        if (IsDisposed)\n            return;\n\n        switch (type)\n        {\n            case MouseEventType.MouseMove:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayMouseMoveEvent });\n                return;\n            case MouseEventType.IconLeftMouseDown:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayLeftMouseDownEvent });\n                break;\n            case MouseEventType.IconRightMouseDown:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayRightMouseDownEvent });\n                break;\n            case MouseEventType.IconMiddleMouseDown:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayMiddleMouseDownEvent });\n                break;\n            case MouseEventType.IconLeftMouseUp:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayLeftMouseUpEvent });\n                LeftClickCommand?.Execute(this);\n                break;\n            case MouseEventType.IconRightMouseUp:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayRightMouseUpEvent });\n                break;\n            case MouseEventType.IconMiddleMouseUp:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayMiddleMouseUpEvent });\n                MiddleClickCommand?.Execute(this);\n                break;\n            case MouseEventType.IconLeftDoubleClick:\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = TrayMouseDoubleClickEvent });\n                LeftDoubleClickCommand?.Execute(this);\n                break;\n            default:\n                throw new ArgumentOutOfRangeException(nameof(type), \"Missing handler for mouse event flag: \" + type);\n        }\n\n        var cursorPosition = new PointW();\n        User32.GetPhysicalCursorPos(ref cursorPosition);\n\n        cursorPosition = GetDeviceCoordinates(cursorPosition);\n\n        if (type == MouseEventType.IconRightMouseUp)\n            ShowContextMenu(cursorPosition);\n    }\n\n    private void OnTaskbarCreated()\n    {\n        IsTaskbarIconCreated = false;\n\n        CreateTaskbarIcon();\n    }\n\n    private void OnToolTipChange(bool visible)\n    {\n        if (NotifyToolTipElement == null) \n            return;\n\n        if (visible)\n        {\n            if (IsPopupOpen)\n                return;\n\n            var args = new RoutedEventArgs { RoutedEvent = PreviewToolTipOpenEvent };\n            RaiseEvent(args);\n\n            if (args.Handled)\n                return;\n\n            try\n            {\n                NotifyToolTipElement.IsOpen = true;\n\n                NotifyToolTip?.RaiseEvent(new RoutedEventArgs { RoutedEvent = ToolTipOpenEvent });\n                RaiseEvent(new RoutedEventArgs { RoutedEvent = ToolTipOpenEvent });\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"Trying to open system tray popup\");\n            }\n        }\n        else\n        {\n            var args = new RoutedEventArgs { RoutedEvent = PreviewToolTipCloseEvent };\n            RaiseEvent(args);\n\n            if (args.Handled) \n                return;\n\n            NotifyToolTip?.RaiseEvent(new RoutedEventArgs { RoutedEvent = ToolTipCloseEvent });\n\n            NotifyToolTipElement.IsOpen = false;\n\n            RaiseEvent(new RoutedEventArgs { RoutedEvent = ToolTipCloseEvent });\n        }\n    }\n\n    private void OnExit(object sender, EventArgs e)\n    {\n        Dispose();\n    }\n\n    #endregion\n\n    #region Disposing\n\n    public void Dispose()\n    {\n        Dispose(true);\n\n        //Avoid disposing twice.\n        GC.SuppressFinalize(this);\n    }\n\n    private void Dispose(bool disposing)\n    {\n        if (IsDisposed || !disposing) return;\n\n        lock (this)\n        {\n            IsDisposed = true;\n\n            if (Application.Current != null)\n                Application.Current.Exit -= OnExit;\n\n            _messageSink.Dispose();\n\n            RemoveTaskbarIcon();\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/NullableIntegerBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\npublic class NullableIntegerBox : ExtendedTextBox\n{\n    private static bool _ignore;\n\n    /// <summary>\n    /// To avoid losing decimals.\n    /// </summary>\n    public bool UseTemporary;\n    public double Temporary;\n\n    /// <summary>\n    /// True if it's necessary to prevent the value changed event from firing.\n    /// </summary>\n    public bool IgnoreValueChanged { get; set; }\n\n    #region Dependency Property\n\n    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(int), typeof(NullableIntegerBox),\n        new FrameworkPropertyMetadata(int.MaxValue, OnMaximumPropertyChanged));\n\n    public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(nameof(Value), typeof(int?), typeof(NullableIntegerBox),\n        new FrameworkPropertyMetadata(0, OnValuePropertyChanged));\n\n    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(int), typeof(NullableIntegerBox),\n        new FrameworkPropertyMetadata(0, OnMinimumPropertyChanged));\n\n    public static readonly DependencyProperty StepProperty = DependencyProperty.Register(nameof(StepValue), typeof(int), typeof(NullableIntegerBox),\n        new FrameworkPropertyMetadata(1));\n\n    public static readonly DependencyProperty UpdateOnInputProperty = DependencyProperty.Register(nameof(UpdateOnInput), typeof(bool), typeof(NullableIntegerBox),\n        new FrameworkPropertyMetadata(false, OnUpdateOnInputPropertyChanged));\n\n    public static readonly DependencyProperty DefaultValueIfEmptyProperty = DependencyProperty.Register(nameof(DefaultValueIfEmpty), typeof(int?), typeof(NullableIntegerBox),\n        new FrameworkPropertyMetadata(null));\n\n    public static readonly DependencyProperty PropagateWheelEventProperty = DependencyProperty.Register(nameof(PropagateWheelEvent), typeof(bool), typeof(NullableIntegerBox), new PropertyMetadata(default(bool)));\n        \n    #endregion\n\n    #region Property Accessor\n\n    [Bindable(true), Category(\"Common\")]\n    public int Maximum\n    {\n        get => (int)GetValue(MaximumProperty);\n        set => SetValue(MaximumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int? Value\n    {\n        get => (int?)GetValue(ValueProperty);\n        set => SetValue(ValueProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int Minimum\n    {\n        get => (int)GetValue(MinimumProperty);\n        set => SetValue(MinimumProperty, value);\n    }\n\n    /// <summary>\n    /// The Increment/Decrement value.\n    /// </summary>\n    [Description(\"The Increment/Decrement value.\")]\n    public int StepValue\n    {\n        get => (int)GetValue(StepProperty);\n        set => SetValue(StepProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool UpdateOnInput\n    {\n        get => (bool)GetValue(UpdateOnInputProperty);\n        set => SetValue(UpdateOnInputProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public int? DefaultValueIfEmpty\n    {\n        get => (int?)GetValue(DefaultValueIfEmptyProperty);\n        set => SetValue(DefaultValueIfEmptyProperty, value);\n    }\n\n    /// <summary>\n    /// True if the wheel events should not be set as handled.\n    /// </summary>\n    [Bindable(true), Category(\"Behavior\")]\n    public bool PropagateWheelEvent\n    {\n        get => (bool)GetValue(PropagateWheelEventProperty);\n        set => SetValue(PropagateWheelEventProperty, value);\n    }\n\n    #endregion\n\n    #region Properties Changed\n\n    private static void OnMaximumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var intBox = d as NullableIntegerBox;\n\n        if (intBox?.Value > intBox?.Maximum)\n            intBox.Value = intBox.Maximum;\n    }\n\n    private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not NullableIntegerBox box || _ignore) \n            return;\n\n        _ignore = true;\n\n        if (box.Value > box.Maximum)\n        {\n            box.UseTemporary = false;\n            box.Temporary = box.Maximum;\n            box.Value = box.Maximum;\n        }\n\n        if (box.Value < box.Minimum)\n        {\n            box.UseTemporary = false;\n            box.Temporary = box.Minimum;\n            box.Value = box.Minimum;\n        }\n\n        _ignore = false;\n\n        var value = box.Value.ToString();\n\n        if (!string.Equals(box.Text, value))\n            box.Text = value;\n\n        if (!box.IgnoreValueChanged)\n            box.RaiseValueChangedEvent();\n    }\n\n    private static void OnMinimumPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var intBox = d as NullableIntegerBox;\n\n        if (intBox?.Value < intBox?.Minimum)\n            intBox.Value = intBox.Minimum;\n    }\n\n    private static void OnUpdateOnInputPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        ((NullableIntegerBox)d).UpdateOnInput = (bool)e.NewValue;\n    }\n\n    #endregion\n\n    static NullableIntegerBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(NullableIntegerBox), new FrameworkPropertyMetadata(typeof(NullableIntegerBox)));\n    }\n\n    #region Custom Events\n\n    /// <summary>\n    /// Create a custom routed event by first registering a RoutedEventID, this event uses the bubbling routing strategy.\n    /// </summary>\n    public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent(nameof(ValueChanged), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(NullableIntegerBox));\n\n    /// <summary>\n    /// Event raised when the numeric value is changed.\n    /// </summary>\n    public event RoutedEventHandler ValueChanged\n    {\n        add => AddHandler(ValueChangedEvent, value);\n        remove => RemoveHandler(ValueChangedEvent, value);\n    }\n\n    public void RaiseValueChangedEvent()\n    {\n        if (ValueChangedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(ValueChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    #endregion\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        AddHandler(DataObject.PastingEvent, new DataObjectPastingEventHandler(OnPasting));\n    }\n\n    protected override void OnInitialized(EventArgs e)\n    {\n        base.OnInitialized(e);\n\n        Text = Value.ToString();\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        if (e.Source is NullableIntegerBox)\n            SelectAll();\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        //Only sets the focus if not clicking on the Up/Down buttons of a IntegerUpDown.\n        if (e.OriginalSource is TextBlock or Border)\n            return;\n\n        if (IsKeyboardFocusWithin)\n            return;\n\n        e.Handled = true;\n        Focus();\n    }\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        if (string.IsNullOrEmpty(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        if (!IsEntryAllowed(e.Text))\n        {\n            e.Handled = true;\n            return;\n        }\n\n        base.OnPreviewTextInput(e);\n    }\n\n    protected override void OnTextChanged(TextChangedEventArgs e)\n    {\n        if (!UpdateOnInput || string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            return;\n            \n        Value = int.TryParse(Text, out var value) ? value : new int?();\n\n        base.OnTextChanged(e);\n    }\n\n    protected override void OnLostFocus(RoutedEventArgs e)\n    {\n        base.OnLostFocus(e);\n\n        if (!UpdateOnInput)\n        {\n            if (string.IsNullOrEmpty(Text) || !IsTextAllowed(Text))\n            {\n                Value = DefaultValueIfEmpty;\n                return;\n            }\n\n            Value = int.TryParse(Text, out var value) ? value : new int?();\n            return;\n        }\n            \n        Text = Value.ToString();\n    }\n\n    protected override void OnKeyDown(KeyEventArgs e)\n    {\n        if (e.Key is Key.Enter or Key.Return)\n        {\n            e.Handled = true;\n            MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n        }\n\n        base.OnKeyDown(e);\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        base.OnMouseWheel(e);\n\n        var step = Keyboard.Modifiers switch\n        {\n            ModifierKeys.Shift | ModifierKeys.Control => 50,\n            ModifierKeys.Shift => 10,\n            ModifierKeys.Control => 5,\n            _ => StepValue\n        };\n\n        Value = e.Delta > 0 ? \n            Math.Min(Maximum, (Value ?? 0) + step) : \n            Math.Max(Minimum, (Value ?? 0) - step);\n\n        e.Handled = !PropagateWheelEvent;\n    }\n\n    #endregion\n\n    #region Base Properties Changed\n\n    private void OnPasting(object sender, DataObjectPastingEventArgs e)\n    {\n        if (e.DataObject.GetDataPresent(typeof(string)))\n        {\n            var text = e.DataObject.GetData(typeof(string)) as string;\n\n            if (!IsTextAllowed(text))\n                e.CancelCommand();\n        }\n        else\n        {\n            e.CancelCommand();\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private bool IsEntryAllowed(string text)\n    {\n        //Only numbers.\n        var regex = new Regex(@\"^-|[0-9]$\");\n\n        //Checks if it's a valid char based on the context.\n        return regex.IsMatch(text);\n    }\n\n    private bool IsTextAllowed(string text)\n    {\n        return Minimum < 0 ? Regex.IsMatch(text, @\"^[-]?(?:[0-9]{1,9})?$\") : Regex.IsMatch(text, @\"^(?:[0-9]{1,9})?$\");\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/NullableIntegerUpDown.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls.Primitives;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Integer only control with up and down buttons to change the value.\n/// </summary>\npublic class NullableIntegerUpDown : NullableIntegerBox\n{\n    #region Variables\n\n    private RepeatButton _upButton;\n    private RepeatButton _downButton;\n\n    #endregion\n\n    static NullableIntegerUpDown()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(NullableIntegerUpDown), new FrameworkPropertyMetadata(typeof(NullableIntegerUpDown)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _upButton = Template.FindName(\"UpButton\", this) as RepeatButton;\n        _downButton = Template.FindName(\"DownButton\", this) as RepeatButton;\n\n        if (_upButton != null)\n            _upButton.Click += UpButton_Click;\n\n        if (_downButton != null)\n            _downButton.Click += DownButton_Click;\n    }\n\n    #region Event Handlers\n\n    private void DownButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (!Value.HasValue)\n        {\n            Value = Minimum;\n            return;\n        }\n\n        if (Value > Minimum)\n            Value -= StepValue;\n    }\n\n    private void UpButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (!Value.HasValue)\n        {\n            Value = Minimum;\n            return;\n        }\n\n        if (Value < Maximum)\n            Value += StepValue;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/PuncturedRect.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\n\nnamespace ScreenToGif.Controls;\n\npublic class PuncturedRect : Shape\n{\n    #region Dependency properties\n\n    public static readonly DependencyProperty InteriorProperty = DependencyProperty.Register(\"Interior\", typeof(Rect), typeof(FrameworkElement),\n        new FrameworkPropertyMetadata(new Rect(0, 0, 0, 0), FrameworkPropertyMetadataOptions.AffectsRender, null, CoerceRectInterior, false), null);\n\n    public static readonly DependencyProperty ExteriorProperty = DependencyProperty.Register(\"Exterior\", typeof(Rect), typeof(FrameworkElement),\n        new FrameworkPropertyMetadata(new Rect(0, 0, double.MaxValue, double.MaxValue),\n            FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange |\n            FrameworkPropertyMetadataOptions.AffectsParentMeasure | FrameworkPropertyMetadataOptions.AffectsParentArrange |\n            FrameworkPropertyMetadataOptions.AffectsRender, null, null, false), null);\n\n    public Rect Interior\n    {\n        get => (Rect)GetValue(InteriorProperty);\n        set => SetValue(InteriorProperty, value);\n    }\n\n    public Rect Exterior\n    {\n        get => (Rect)GetValue(ExteriorProperty);\n        set => SetValue(ExteriorProperty, value);\n    }\n\n    #endregion\n\n    private static object CoerceRectInterior(DependencyObject d, object value)\n    {\n        var pr = (PuncturedRect)d;\n        var rcExterior = pr.Exterior;\n        var rcProposed = (Rect)value;\n            \n        if (rcExterior.Width <= 0 || rcExterior.Height <= 0)\n            return rcExterior;\n\n        var left = Math.Max(rcProposed.Left, rcExterior.Left);\n        var top = Math.Max(rcProposed.Top, rcExterior.Top);\n        var width = Math.Min(rcProposed.Right, rcExterior.Right) - left;\n        var height = Math.Min(rcProposed.Bottom, rcExterior.Bottom) - top;\n\n        return new Rect(left, top, width, height);\n    }\n\n    #region Override\n\n    protected override Geometry DefiningGeometry\n    {\n        get\n        {\n            var pthfExt = new PathFigure {StartPoint = Exterior.TopLeft};\n            pthfExt.Segments.Add(new LineSegment(Exterior.TopRight, false));\n            pthfExt.Segments.Add(new LineSegment(Exterior.BottomRight, false));\n            pthfExt.Segments.Add(new LineSegment(Exterior.BottomLeft, false));\n            pthfExt.Segments.Add(new LineSegment(Exterior.TopLeft, false));\n\n            var pthgExt = new PathGeometry();\n            pthgExt.Figures.Add(pthfExt);\n\n            var rectIntSect = Rect.Intersect(Exterior, Interior);\n\t\t\t\t\n            var pthfInt = new PathFigure {StartPoint = rectIntSect.TopLeft};\n            pthfInt.Segments.Add(new LineSegment(rectIntSect.TopRight, false));\n            pthfInt.Segments.Add(new LineSegment(rectIntSect.BottomRight, false));\n            pthfInt.Segments.Add(new LineSegment(rectIntSect.BottomLeft, false));\n            pthfInt.Segments.Add(new LineSegment(rectIntSect.TopLeft, false));\n\n            var pthgInt = new PathGeometry();\n            pthgInt.Figures.Add(pthfInt);\n                \n            var cmbg = new CombinedGeometry(GeometryCombineMode.Exclude, pthgExt, pthgInt);\n            return cmbg;\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/RadialPanel.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Controls;\n\n///<summary>\n///A panel that organizes it's inner elements in a circular fashion.\n///</summary>\npublic class RadialPanel : Panel\n{\n    /// <summary>\n    /// Measure each children and give as much room as they want.\n    /// </summary>\n    protected override Size MeasureOverride(Size availableSize)\n    {\n        foreach (UIElement elem in Children)\n        {\n            //Give Infinite size as the available size for all the children.\n            elem.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        }\n\n        return base.MeasureOverride(availableSize);\n    }\n\n    /// <summary>\n    /// Arrange all children based on the geometric equations for the circle.\n    /// </summary>\n    protected override Size ArrangeOverride(Size finalSize)\n    {\n        if (Children.Count == 0)\n            return finalSize;\n\n        var angle = 0d;\n\n        //Degrees converted to Radian by multiplying with PI/180\n        var incrementalAngularSpace = (360.0 / Children.Count) * (Math.PI / 180);\n\n        //An approximate radii based on the available size , obviusly a better approach is needed here.\n        var radiusX = finalSize.Width / 2.4;\n        var radiusY = finalSize.Height / 2.4;\n\n        foreach (UIElement elem in Children)\n        {\n            //Calculate the point on the circle for the element.\n            var childPoint = new Point(Math.Cos(angle) * radiusX, -Math.Sin(angle) * radiusY);\n\n            //Offsetting the point to the available rectangular area which is FinalSize.\n            var actualChildPoint = new Point(finalSize.Width / 2 + childPoint.X - elem.DesiredSize.Width / 2, finalSize.Height / 2 + childPoint.Y - elem.DesiredSize.Height / 2);\n\n            //Call Arrange method on the child element by giving the calculated point as the placementPoint.\n            elem.Arrange(new Rect(actualChildPoint.X, actualChildPoint.Y, elem.DesiredSize.Width, elem.DesiredSize.Height));\n\n            //Calculate the new _angle for the next element.\n            angle += incrementalAngularSpace;\n        }\n\n        return finalSize;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/RangeSlider.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// Range Slider control.\n/// </summary>\npublic class RangeSlider : Control\n{\n    #region Variables\n\n    private Slider _lowerSlider;\n    private Slider _upperSlider;\n    private Border _progressBorder;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(double), typeof(RangeSlider), \n        new FrameworkPropertyMetadata(0d));\n\n    public static readonly DependencyProperty LowerValueProperty = DependencyProperty.Register(nameof(LowerValue), typeof(double), typeof(RangeSlider), \n        new FrameworkPropertyMetadata(10d, LowerValue_PropertyChanged));\n\n    public static readonly DependencyProperty UpperValueProperty = DependencyProperty.Register(nameof(UpperValue), typeof(double), typeof(RangeSlider), \n        new FrameworkPropertyMetadata(90d, UpperValue_PropertyChanged));\n\n    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(double), typeof(RangeSlider), \n        new FrameworkPropertyMetadata(100d));\n\n    public static readonly DependencyProperty DisableLowerValueProperty = DependencyProperty.Register(nameof(DisableLowerValue), typeof(bool), typeof(RangeSlider), \n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty TickPlacementProperty = DependencyProperty.Register(nameof(TickPlacement), typeof(TickPlacement), typeof(RangeSlider), \n        new FrameworkPropertyMetadata(TickPlacement.None));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// Minimum value of the slider.\n    /// </summary>\n    public double Minimum\n    {\n        get => (double)GetValue(MinimumProperty);\n        set => SetValue(MinimumProperty, value);\n    }\n\n    /// <summary>\n    /// Maximum value of the slider.\n    /// </summary>\n    public double Maximum\n    {\n        get => (double)GetValue(MaximumProperty);\n        set => SetValue(MaximumProperty, value);\n    }\n\n    /// <summary>\n    /// Value of the lower Thumb.\n    /// </summary>\n    public double LowerValue\n    {\n        get => (double)GetValue(LowerValueProperty);\n        set => SetValue(LowerValueProperty, value);\n    }\n\n    /// <summary>\n    /// Value of the upper Thumb.\n    /// </summary>\n    public double UpperValue\n    {\n        get => (double)GetValue(UpperValueProperty);\n        set => SetValue(UpperValueProperty, value);\n    }\n\n    /// <summary>\n    /// True to disable the range of the slider.\n    /// </summary>\n    public bool DisableLowerValue\n    {\n        get => (bool)GetValue(DisableLowerValueProperty);\n        set\n        {\n            SetValue(DisableLowerValueProperty, value);\n\n            LowerValue = Minimum;\n\n            if (_lowerSlider != null)\n                _lowerSlider.Visibility = DisableLowerValue ? Visibility.Collapsed : Visibility.Visible;\n        }\n    }\n\n    /// <summary>\n    /// The Tick placement position.\n    /// </summary>\n    public TickPlacement TickPlacement\n    {\n        get => (TickPlacement)GetValue(TickPlacementProperty);\n        set => SetValue(TickPlacementProperty, value);\n    }\n\n    #endregion\n\n    #region Property Changed\n\n    private static void LowerValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is RangeSlider range))\n            return;\n\n        if (range.LowerValue < range.Minimum)\n            range.LowerValue = range.Minimum;\n\n        if (range.LowerValue > range.UpperValue)\n            range.UpperValue = range.LowerValue;\n\n        range.RaiseLowerValueChangedEvent();\n    }\n\n    private static void UpperValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is RangeSlider range))\n            return;\n\n        if (range.UpperValue > range.Maximum)\n            range.UpperValue = range.Maximum;\n\n        if (range.LowerValue > range.UpperValue)\n            range.LowerValue = range.UpperValue;\n\n        range.RaiseUpperValueChangedEvent();\n    }\n\n    #endregion\n\n    #region Custom Events\n\n    public static readonly RoutedEvent LowerValueChangedEvent = EventManager.RegisterRoutedEvent(nameof(LowerValueChanged), RoutingStrategy.Bubble, \n        typeof(RoutedEventHandler), typeof(RangeSlider));\n\n    public static readonly RoutedEvent UpperValueChangedEvent = EventManager.RegisterRoutedEvent(nameof(UpperValueChanged), RoutingStrategy.Bubble, \n        typeof(RoutedEventHandler), typeof(RangeSlider));\n\n    public event RoutedEventHandler LowerValueChanged\n    {\n        add => AddHandler(LowerValueChangedEvent, value);\n        remove => RemoveHandler(LowerValueChangedEvent, value);\n    }\n\n    public event RoutedEventHandler UpperValueChanged\n    {\n        add => AddHandler(UpperValueChangedEvent, value);\n        remove => RemoveHandler(UpperValueChangedEvent, value);\n    }\n\n    public void RaiseLowerValueChangedEvent()\n    {\n        if (LowerValueChangedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(LowerValueChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    public void RaiseUpperValueChangedEvent()\n    {\n        if (UpperValueChangedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(UpperValueChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    #endregion\n\n    static RangeSlider()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(RangeSlider), new FrameworkPropertyMetadata(typeof(RangeSlider)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        LayoutUpdated += RangeSlider_LayoutUpdated;\n        _lowerSlider = Template.FindName(\"LowerSlider\", this) as Slider;\n        _upperSlider = Template.FindName(\"UpperSlider\", this) as Slider;\n        _progressBorder = Template.FindName(\"ProgressBorder\", this) as Border;\n\n        if (_lowerSlider != null)\n        {\n            _lowerSlider.Value = LowerValue;\n            _lowerSlider.PreviewMouseUp += LowerSlider_MouseUp;\n        }\n\n        if (_upperSlider != null)\n        {\n            _upperSlider.Value = UpperValue;\n            _upperSlider.PreviewMouseUp += UpperSlider_PreviewMouseUp;\n        }\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        switch (e.Key)\n        {\n            case Key.Up:\n            {\n                e.Handled = true;\n                UpperValue += 1;\n                break;\n            }\n            case Key.Down:\n            {\n                e.Handled = true;\n                UpperValue -= 1;\n                break;\n            }\n\n            case Key.Right:\n            {\n                e.Handled = true;\n                LowerValue += 1;\n                break;\n            }\n            case Key.Left:\n            {\n                e.Handled = true;\n                LowerValue -= 1;\n                break;\n            }\n        }\n\n        base.OnKeyDown(e);\n    }\n\n    private void SetProgressBorder()\n    {\n        if (Maximum - Minimum < 1)\n            return;\n\n        var lowerPoint = ActualWidth * (LowerValue - Minimum) / (Maximum - Minimum);\n        var upperPoint = ActualWidth * (UpperValue - Minimum) / (Maximum - Minimum);\n        upperPoint = ActualWidth - upperPoint;\n\n        _progressBorder.Margin = new Thickness(lowerPoint, 0, upperPoint, 0);\n    }\n\n    #region Event Handlers\n\n    private void UpperSlider_PreviewMouseUp(object sender, MouseButtonEventArgs e)\n    {\n        UpperValue = Math.Max(_upperSlider.Value, _lowerSlider.Value);\n        SetProgressBorder();\n    }\n\n    private void LowerSlider_MouseUp(object sender, MouseButtonEventArgs e)\n    {\n        LowerValue = Math.Min(_upperSlider.Value, _lowerSlider.Value);\n        SetProgressBorder();\n    }\n\n    private void RangeSlider_LayoutUpdated(object sender, EventArgs e)\n    {\n        SetProgressBorder();\n    }\n        \n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/ResizingAdorner.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// The Resizing Adorner controls. https://social.msdn.microsoft.com/Forums/vstudio/en-US/274bc547-dadf-42b5-b3f1-6d29407f9e79/resize-adorner-scale-problem?forum=wpf\n/// </summary>\npublic class ResizingAdorner : Adorner\n{\n    #region Variables\n\n    /// <summary>\n    /// Resizing adorner uses Thumbs for visual elements.  \n    /// The Thumbs have built-in mouse input handling.\n    /// </summary>\n    private readonly Thumb _topLeft, _topRight, _bottomLeft, _bottomRight, _middleBottom, _middleTop, _leftMiddle, _rightMiddle;\n\n    /// <summary>\n    /// The dashed border.\n    /// </summary>\n    private Rectangle _rectangle;\n\n    /// <summary>\n    /// To store and manage the adorner's visual children.\n    /// </summary>\n    readonly VisualCollection _visualChildren;\n\n    /// <summary>\n    /// The current adorned element.\n    /// </summary>\n    private UIElement _adornedElement;\n\n    /// <summary>\n    /// The parent of the element.\n    /// </summary>\n    private readonly UIElement _parent;\n\n    /// <summary>\n    /// The latest position of the element. Used by the drag operation.\n    /// </summary>\n    private Point _lastestPosition;\n\n    #endregion\n\n    /// <summary>\n    /// Initialize the ResizingAdorner.\n    /// </summary>\n    /// <param name=\"adornedElement\">The element to be adorned.</param>\n    /// <param name=\"isMovable\">True if it's available the drag to move action.</param>\n    /// <param name=\"parent\">The parent of the element.</param>\n    /// <param name=\"startPosition\">The start position of the first click.</param>\n    public ResizingAdorner(UIElement adornedElement, bool isMovable = true, UIElement parent = null, Point? startPosition = null)\n        : base(adornedElement)\n    {\n        _visualChildren = new VisualCollection(this);\n\n        #region Default values\n\n        _adornedElement = adornedElement;\n        _parent = parent ?? (_adornedElement as FrameworkElement)?.Parent as UIElement;\n\n        if (startPosition.HasValue)\n            _lastestPosition = startPosition.Value;\n\n        #endregion\n\n        //Creates the dashed rectangle around the adorned element.\n        BuildAdornerBorder();\n\n        //Call a helper method to initialize the Thumbs with a customized cursors.\n        BuildAdornerCorner(ref _topLeft, Cursors.SizeNWSE);\n        BuildAdornerCorner(ref _topRight, Cursors.SizeNESW);\n        BuildAdornerCorner(ref _bottomLeft, Cursors.SizeNESW);\n        BuildAdornerCorner(ref _bottomRight, Cursors.SizeNWSE);\n\n        BuildAdornerCorner(ref _middleBottom, Cursors.SizeNS);\n        BuildAdornerCorner(ref _middleTop, Cursors.SizeNS);\n        BuildAdornerCorner(ref _leftMiddle, Cursors.SizeWE);\n        BuildAdornerCorner(ref _rightMiddle, Cursors.SizeWE);\n\n        //Drag to move.\n        if (isMovable)\n        {\n            _adornedElement.PreviewMouseLeftButtonDown += AdornedElement_PreviewMouseLeftButtonDown;\n            _adornedElement.MouseMove += AdornedElement_MouseMove;\n            _adornedElement.MouseUp += AdornedElement_MouseUp;\n        }\n\n        //Add handlers for resizing • Corners\n        _bottomLeft.DragDelta += HandleBottomLeft;\n        _bottomRight.DragDelta += HandleBottomRight;\n        _topLeft.DragDelta += HandleTopLeft;\n        _topRight.DragDelta += HandleTopRight;\n\n        //Add handlers for resizing • Sides\n        _middleBottom.DragDelta += HandleBottomMiddle;\n        _middleTop.DragDelta += HandleTopMiddle;\n        _leftMiddle.DragDelta += HandleLeftMiddle;\n        _rightMiddle.DragDelta += HandleRightMiddle;\n    }\n\n    private void AdornedElement_MouseUp(object sender, MouseButtonEventArgs mouseButtonEventArgs)\n    {\n        _adornedElement?.ReleaseMouseCapture();\n    }\n\n    private void AdornedElement_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (_parent == null)\n            return;\n\n        if (_adornedElement is Image && e.LeftButton == MouseButtonState.Pressed)\n        {\n            _adornedElement.MouseMove -= AdornedElement_MouseMove;\n\n            var currentPosition = e.GetPosition(_parent);\n\n            Canvas.SetLeft(_adornedElement, Canvas.GetLeft(_adornedElement) + (currentPosition.X - _lastestPosition.X));\n            Canvas.SetTop(_adornedElement, Canvas.GetTop(_adornedElement) + (currentPosition.Y - _lastestPosition.Y));\n\n            _lastestPosition = currentPosition;\n\n            _adornedElement.MouseMove += AdornedElement_MouseMove;\n        }\n    }\n\n    private void AdornedElement_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (_parent == null)\n            return;\n\n        if (_adornedElement is Image && _adornedElement.CaptureMouse())\n            _lastestPosition = e.GetPosition(_parent);\n    }\n\n    #region DragDelta Event Handlers\n\n    /// <summary>\n    /// Handler for resizing from the bottom-right.\n    /// </summary>\n    private void HandleBottomRight(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        // Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        // Change the size by the amount the user drags the mouse, as long as it's larger \n        // than the width or height of an adorner, respectively.\n        adornedElement.Width = Math.Max(adornedElement.Width + args.HorizontalChange / zoomFactor, hitThumb.DesiredSize.Width);\n        adornedElement.Height = Math.Max(adornedElement.Height + args.VerticalChange / zoomFactor, hitThumb.DesiredSize.Height);\n\n        //Adjust canvas size.\n        if (adornedElement.Parent is FrameworkElement canvas)\n        {\n            //Right.\n            var elementLeft = Canvas.GetLeft(adornedElement);\n            var elementRight = elementLeft + adornedElement.Width;\n\n            if (elementRight > canvas.Width)\n                canvas.Width = elementRight;\n\n            //Bottom.\n            var elementTop = Canvas.GetTop(adornedElement);\n            var elementBottom = elementTop + adornedElement.Height;\n\n            if (elementBottom > canvas.Height)\n                canvas.Height = elementBottom;\n        }\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the top-right.\n    /// </summary>\n    private void HandleTopRight(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n\n        // Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        //Change the size by the amount the user drags the mouse, as long as it's larger than the width or height of an adorner, respectively.\n        adornedElement.Width = Math.Max(adornedElement.Width + args.HorizontalChange / zoomFactor, hitThumb.DesiredSize.Width);\n        \n        var heightOld = adornedElement.Height;\n        var heightNew = Math.Max(adornedElement.Height - args.VerticalChange, hitThumb.DesiredSize.Height);\n        var topOld = Canvas.GetTop(adornedElement);\n        adornedElement.Height = heightNew;\n\n        Canvas.SetTop(adornedElement, topOld - (heightNew - heightOld));\n\n        //Adjust Canvas Right.\n        var elementLeft = Canvas.GetLeft(adornedElement);\n        var elementRight = elementLeft + adornedElement.Width;\n\n        if (adornedElement.Parent is FrameworkElement canvas && elementRight > canvas.Width)\n            canvas.Width = elementRight;\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the top-left.\n    /// </summary>\n    private void HandleTopLeft(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n\n        //Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        //Change the size by the amount the user drags the mouse, as long as it's larger than the width or height of an adorner, respectively.\n        var widthOld = adornedElement.Width;\n        var widthNew = Math.Max(adornedElement.Width - args.HorizontalChange / zoomFactor, hitThumb.DesiredSize.Width);\n        var leftOld = Canvas.GetLeft(adornedElement);\n\n        adornedElement.Width = widthNew;\n        Canvas.SetLeft(adornedElement, leftOld - (widthNew - widthOld));\n\n        var heightOld = adornedElement.Height;\n        var heightNew = Math.Max(adornedElement.Height - args.VerticalChange / zoomFactor, hitThumb.DesiredSize.Height);\n        var topOld = Canvas.GetTop(adornedElement);\n\n        adornedElement.Height = heightNew;\n        Canvas.SetTop(adornedElement, topOld - (heightNew - heightOld));\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the bottom-left.\n    /// </summary>\n    private void HandleBottomLeft(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n\n        //Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        //Change the size by the amount the user drags the mouse, as long as it's larger than the width or height of an adorner, respectively.\n        adornedElement.Height = Math.Max(adornedElement.Height + args.VerticalChange /zoomFactor, hitThumb.DesiredSize.Height);\n\n        var widthOld = adornedElement.Width;\n        var widthNew = Math.Max(adornedElement.Width - args.HorizontalChange / zoomFactor, hitThumb.DesiredSize.Width);\n        var leftOld = Canvas.GetLeft(adornedElement);\n\n        adornedElement.Width = widthNew;\n        Canvas.SetLeft(adornedElement, leftOld - (widthNew - widthOld));\n\n        //Adjust Canvas Bottom.\n        var elementTop = Canvas.GetTop(adornedElement);\n        var elementBottom = elementTop + adornedElement.Height;\n\n        if (adornedElement.Parent is FrameworkElement canvas && elementBottom > canvas.Height)\n            canvas.Height = elementBottom;\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-middle.\n    /// </summary>\n    private void HandleBottomMiddle(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n        \n        // Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n        \n        //Change the size by the amount the user drags the mouse, as long as it's larger than the height of an adorner.\n        adornedElement.Height = Math.Max(adornedElement.Height + args.VerticalChange / zoomFactor, hitThumb.DesiredSize.Height);\n\n        //Adjust Canvas Bottom.\n        var elementTop = Canvas.GetTop(adornedElement);\n        var elementBottom = elementTop + adornedElement.Height;\n\n        if (adornedElement.Parent is FrameworkElement canvas && elementBottom > canvas.Height)\n            canvas.Height = elementBottom;\n    }\n\n    /// <summary>\n    /// Handler for resizing from the top-middle.\n    /// </summary>\n    private void HandleTopMiddle(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n\n        // Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        // Change the size by the amount the user drags the mouse, as long as it's larger than the height of an adorner.\n        var heightOld = adornedElement.Height;\n        var heightNew = Math.Max(adornedElement.Height - args.VerticalChange / zoomFactor, hitThumb.DesiredSize.Height);\n        var topOld = Canvas.GetTop(adornedElement);\n\n        adornedElement.Height = heightNew;\n        Canvas.SetTop(adornedElement, topOld - (heightNew - heightOld));\n    }\n\n    /// <summary>\n    /// Handler for resizing from the left-middle.\n    /// </summary>\n    private void HandleLeftMiddle(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n\n        // Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        // Change the size by the amount the user drags the mouse, as long as it's larger than the height of an adorner.\n        var widthOld = adornedElement.Width;\n        var widthNew = Math.Max(adornedElement.Width - args.HorizontalChange / zoomFactor, hitThumb.DesiredSize.Width);\n        var leftOld = Canvas.GetLeft(adornedElement);\n\n        adornedElement.Width = widthNew;\n        Canvas.SetLeft(adornedElement, leftOld - (widthNew - widthOld));\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the right-middle.\n    /// </summary>\n    private void HandleRightMiddle(object sender, DragDeltaEventArgs args)\n    {\n        if (AdornedElement is not FrameworkElement adornedElement || sender is not Thumb hitThumb)\n            return;\n        \n        //Ensure that the Width and Height are properly initialized after the resize.\n        EnforceSize(adornedElement);\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        //Change the size by the amount the user drags the mouse, as long as it's larger than the width of the adorner.\n        adornedElement.Width = Math.Max(adornedElement.Width + args.HorizontalChange / zoomFactor, hitThumb.DesiredSize.Width);\n\n        //Adjust Canvas Right.\n        var elementLeft = Canvas.GetLeft(adornedElement);\n        var elementRight = elementLeft + adornedElement.Width;\n\n        if (adornedElement.Parent is FrameworkElement canvas && elementRight > canvas.Width)\n            canvas.Width = elementRight;\n    }\n\n    #endregion\n\n    #region Private Methods\n\n    /// <summary>\n    ///  Arrange the Adorners.\n    /// </summary>\n    /// <param name=\"finalSize\">The final Size</param>\n    /// <returns>The final size</returns>\n    protected override Size ArrangeOverride(Size finalSize)\n    {\n        //Width and height of the element that's being adorned. \n        var desiredWidth = AdornedElement.DesiredSize.Width;\n        var desiredHeight = AdornedElement.DesiredSize.Height;\n\n        _topLeft.Arrange(new Rect(-desiredWidth / 2, -desiredHeight / 2, desiredWidth, desiredHeight));\n        _topRight.Arrange(new Rect(desiredWidth / 2, -desiredHeight / 2, desiredWidth, desiredHeight));\n        _bottomLeft.Arrange(new Rect(-desiredWidth / 2, desiredHeight / 2, desiredWidth, desiredHeight));\n        _bottomRight.Arrange(new Rect(desiredWidth / 2, desiredHeight / 2, desiredWidth, desiredHeight));\n\n        _middleBottom.Arrange(new Rect(0, desiredHeight / 2, desiredWidth, desiredHeight));\n        _middleTop.Arrange(new Rect(0, -desiredHeight / 2, desiredWidth, desiredHeight));\n        _leftMiddle.Arrange(new Rect(-desiredWidth / 2, 0, desiredWidth, desiredHeight));\n        _rightMiddle.Arrange(new Rect(desiredWidth / 2, 0, desiredWidth, desiredHeight));\n\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        _rectangle.Arrange(new Rect(0, 0, desiredWidth * zoomFactor, desiredHeight * zoomFactor));\n\n        return finalSize;\n    }\n\n    /// <summary>\n    /// Instantiates the corner Thumbs, setting the Cursor property, \n    /// some appearance properties, and add the elements to the visual tree.\n    /// </summary>\n    /// <param name=\"cornerThumb\">The Thumb to Instantiate.</param>\n    /// <param name=\"customizedCursor\">The custom cursor.</param>\n    private void BuildAdornerCorner(ref Thumb cornerThumb, Cursor customizedCursor)\n    {\n        if (cornerThumb != null)\n            return;\n\n        cornerThumb = new Thumb { Cursor = customizedCursor };\n        cornerThumb.Height = cornerThumb.Width = 10;\n        cornerThumb.Style = (Style)FindResource(\"ScrollBar.Thumb\");\n\n        _visualChildren.Add(cornerThumb);\n    }\n\n    /// <summary>\n    /// Creates the dashed border around the adorned element.\n    /// </summary>\n    private void BuildAdornerBorder()\n    {\n        _rectangle = new Rectangle();\n        _rectangle.StrokeDashArray.Add(5);\n        _rectangle.Stroke = new SolidColorBrush(Color.FromRgb(171, 171, 171));\n        _rectangle.StrokeThickness = 1;\n\n        _visualChildren.Add(_rectangle);\n    }\n\n    // This method ensures that the Widths and Heights are initialized.  Sizing to content produces\n    // Width and Height values of Double.NaN.  Because this Adorner explicitly resizes, the Width and Height\n    // need to be set first.  It also sets the maximum size of the adorned element.\n    private void EnforceSize(FrameworkElement adornedElement)\n    {\n        if (adornedElement.Width.Equals(Double.NaN))\n            adornedElement.Width = adornedElement.DesiredSize.Width;\n\n        if (adornedElement.Height.Equals(Double.NaN))\n            adornedElement.Height = adornedElement.DesiredSize.Height;\n\n        //if (adornedElement.Parent is FrameworkElement parent)\n        //{\n        //    adornedElement.MaxHeight = parent.ActualHeight;\n        //    adornedElement.MaxWidth = parent.ActualWidth;\n        //}\n    }\n\n    // Override the VisualChildrenCount and GetVisualChild properties to interface with \n    // the adorner's visual collection.\n    protected override int VisualChildrenCount => _visualChildren.Count;\n\n    /// <summary>\n    /// Gets the VisualChildren at given position.\n    /// </summary>\n    /// <param name=\"index\">The Index to look for.</param>\n    /// <returns>The VisualChildren</returns>\n    protected override Visual GetVisualChild(int index)\n    {\n        return _visualChildren[index];\n    }\n\n    #endregion\n\n    private double GetCanvasZoom(Visual referenceVisual)\n    {\n        if (referenceVisual is Canvas canvas1)\n            return canvas1.LayoutTransform.Value.M11;\n\n        var parent = VisualTreeHelper.GetParent(referenceVisual) as Visual;\n\n        if (parent is Canvas canvas2)\n            return canvas2.LayoutTransform.Value.M11;\n\n        return 1;\n    }\n\n    public override GeneralTransform GetDesiredTransform(GeneralTransform transform)\n    {\n        var zoomFactor = GetCanvasZoom(AdornedElement);\n\n        _topLeft.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _topRight.RenderTransformOrigin = new Point(0.5, 0.5);\n        _topRight.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _topRight.RenderTransformOrigin = new Point(0.5, 0.5);\n        _bottomLeft.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _bottomLeft.RenderTransformOrigin = new Point(0.5, 0.5);\n        _bottomRight.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _bottomRight.RenderTransformOrigin = new Point(0.5, 0.5);\n\n        _middleBottom.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _middleBottom.RenderTransformOrigin = new Point(0.5, 0.5);\n        _middleTop.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _middleTop.RenderTransformOrigin = new Point(0.5, 0.5);\n        _rightMiddle.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _rightMiddle.RenderTransformOrigin = new Point(0.5, 0.5);\n        _leftMiddle.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        _leftMiddle.RenderTransformOrigin = new Point(0.5, 0.5);\n        _rectangle.RenderTransform = new ScaleTransform(1 / zoomFactor, 1 / zoomFactor);\n        //_rectangle.RenderTransformOrigin = new Point(0.5, 0.5);\n\n        return base.GetDesiredTransform(transform);\n    }\n\n    public void Destroy()\n    {\n        _adornedElement.PreviewMouseLeftButtonDown -= AdornedElement_PreviewMouseLeftButtonDown;\n        _adornedElement.MouseMove -= AdornedElement_MouseMove;\n        _adornedElement.MouseUp -= AdornedElement_MouseUp;\n\n        _adornedElement = null;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/SelectControl.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shapes;\nusing Microsoft.Win32;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Controls;\n\npublic class SelectControl : Control\n{\n    #region Variables\n\n    /// <summary>\n    /// Resizing adorner uses Thumbs for visual elements.\n    /// The Thumbs have built-in mouse input handling.\n    /// </summary>\n    private Thumb _topLeft, _topRight, _bottomLeft, _bottomRight, _top, _bottom, _left, _right;\n\n    /// <summary>\n    /// The selection rectangle, used to drag the selection Rect elsewhere.\n    /// </summary>\n    private Rectangle _rectangle;\n\n    /// <summary>\n    /// The grid that holds the three buttons to control the selection.\n    /// </summary>\n    private ExtendedUniformGrid _statusControlGrid;\n\n    /// <summary>\n    /// The pre-calculated size of the horizontal and vertical versions of the status control grid.\n    /// </summary>\n    private Size _statusHorizontalSize, _statusVerticalSize;\n\n    /// <summary>\n    /// The grids that holds the zoomed image and size info.\n    /// </summary>\n    private Grid _zoomGrid, _sizeGrid;\n\n    //private readonly RegionMagnifier _regionMagnifier;\n\n    /// <summary>\n    /// The zoomed image.\n    /// </summary>\n    private Image _croppedImage;\n\n    /// <summary>\n    /// The textblock that lies at the bottom of the zoom view.\n    /// </summary>\n    private TextBlock _zoomTextBlock;\n\n    /// <summary>\n    /// The main canvas, the root element.\n    /// </summary>\n    private Canvas _mainCanvas;\n\n    /// <summary>\n    /// Status control buttons.\n    /// </summary>\n    private ExtendedButton _acceptButton, _retryButton, _cancelButton;\n\n    ///// <summary>\n    ///// The texblock that shows the size of the selection.\n    ///// </summary>\n    //private TextBlock _sizeTextBlock, _sizeNativeTextBlock;\n\n    ///// <summary>\n    ///// The grid that holds the sizing controls.\n    ///// </summary>\n    //private Grid _rectGrid;\n\n    ///// <summary>\n    ///// The button that closes the sizing widget.\n    ///// </summary>\n    //private ImageButton _closeRectButton;\n\n    ///// <summary>\n    ///// The grid that enables the movement of the sizing widget.\n    ///// </summary>\n    //private Grid _moveSizeWidgetGrid;\n\n    /// <summary>\n    /// The start point for the drag operation.\n    /// </summary>\n    private Point _startPoint;\n\n    /// <summary>\n    /// Blind spots for the ZoomView. If the cursor is on top of any of this spots, the zoom view should not appear.\n    /// </summary>\n    private readonly List<Rect> _blindSpots = new List<Rect>();\n\n    /// <summary>\n    /// The latest window that contains the mouse cursor on top of it.\n    /// </summary>\n    private DetectedRegion _hitTestWindow;\n\n    /// <summary>\n    /// True when this control is ready to process mouse input when using the Screen/Window selection mode.\n    /// This was added because the event MouseMove was being fired before the method that adjusts the other controls finished. (TL;DR It was a race condition)\n    /// </summary>\n    private bool _ready;\n\n    /// <summary>\n    /// True if the hover focus was changed to this selector.\n    /// Other selectors must lose the hover focus.\n    /// This makes the zoom view to be hidden everywhere else.\n    /// </summary>\n    private bool _wasHoverFocusChanged;\n\n    public List<DetectedRegion> Windows = new List<DetectedRegion>();\n\n    public BitmapSource BackImage;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty ParentLeftProperty = DependencyProperty.Register(nameof(ParentLeft), typeof(double), typeof(SelectControl), new PropertyMetadata(0d));\n\n    public static readonly DependencyProperty ParentTopProperty = DependencyProperty.Register(nameof(ParentTop), typeof(double), typeof(SelectControl), new PropertyMetadata(0d));\n\n    public static readonly DependencyProperty IsPickingRegionProperty = DependencyProperty.Register(nameof(IsPickingRegion), typeof(bool), typeof(SelectControl), new PropertyMetadata(true));\n\n    public static readonly DependencyProperty SelectedProperty = DependencyProperty.Register(nameof(Selected), typeof(Rect), typeof(SelectControl), new PropertyMetadata(Rect.Empty, Selected_PropertyChanged));\n\n    public static readonly DependencyProperty NonExpandedSelectionProperty = DependencyProperty.Register(nameof(NonExpandedSelection), typeof(Rect), typeof(SelectControl), new PropertyMetadata(Rect.Empty));\n\n    public static readonly DependencyProperty NonExpandedNativeSelectionProperty = DependencyProperty.Register(nameof(NonExpandedNativeSelection), typeof(Rect), typeof(SelectControl), new PropertyMetadata(Rect.Empty));\n\n    public static readonly DependencyProperty FinishedSelectionProperty = DependencyProperty.Register(nameof(FinishedSelection), typeof(bool), typeof(SelectControl), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty ModeProperty = DependencyProperty.Register(nameof(Mode), typeof(ModeType), typeof(SelectControl), new PropertyMetadata(ModeType.Region));\n\n    public static readonly DependencyProperty ScaleProperty = DependencyProperty.Register(nameof(Scale), typeof(double), typeof(SelectControl), new PropertyMetadata(1d));\n\n    public static readonly DependencyProperty EmbeddedModeProperty = DependencyProperty.Register(nameof(EmbeddedMode), typeof(bool), typeof(SelectControl), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty AnimateBorderProperty = DependencyProperty.Register(nameof(AnimateBorder), typeof(bool), typeof(SelectControl), new PropertyMetadata(false));\n\n\n    public static readonly RoutedEvent MouseHoveringEvent = EventManager.RegisterRoutedEvent(nameof(MouseHovering), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControl));\n\n    public static readonly RoutedEvent SelectionAcceptedEvent = EventManager.RegisterRoutedEvent(nameof(SelectionAccepted), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControl));\n\n    public static readonly RoutedEvent SelectionChangedEvent = EventManager.RegisterRoutedEvent(nameof(SelectionChanged), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControl));\n\n    public static readonly RoutedEvent SelectionCanceledEvent = EventManager.RegisterRoutedEvent(nameof(SelectionCanceled), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControl));\n\n    #endregion\n\n    #region Properties\n\n    public double ParentLeft\n    {\n        get => (double)GetValue(ParentLeftProperty);\n        set => SetValue(ParentLeftProperty, value);\n    }\n\n    public double ParentTop\n    {\n        get => (double)GetValue(ParentTopProperty);\n        set => SetValue(ParentTopProperty, value);\n    }\n\n    public bool IsPickingRegion\n    {\n        get => (bool)GetValue(IsPickingRegionProperty);\n        set => SetValue(IsPickingRegionProperty, value);\n    }\n\n    public Rect Selected\n    {\n        get => (Rect)GetValue(SelectedProperty);\n        set => SetValue(SelectedProperty, value);\n    }\n\n    public Rect NonExpandedSelection\n    {\n        get => (Rect)GetValue(NonExpandedSelectionProperty);\n        set => SetValue(NonExpandedSelectionProperty, value);\n    }\n\n    public Rect NonExpandedNativeSelection\n    {\n        get => (Rect)GetValue(NonExpandedNativeSelectionProperty);\n        set => SetValue(NonExpandedNativeSelectionProperty, value);\n    }\n\n    public bool FinishedSelection\n    {\n        get => (bool)GetValue(FinishedSelectionProperty);\n        set => SetValue(FinishedSelectionProperty, value);\n    }\n\n    public ModeType Mode\n    {\n        get => (ModeType)GetValue(ModeProperty);\n        set => SetValue(ModeProperty, value);\n    }\n\n    public double Scale\n    {\n        get => (double)GetValue(ScaleProperty);\n        set => SetValue(ScaleProperty, value);\n    }\n\n    public bool EmbeddedMode\n    {\n        get => (bool)GetValue(EmbeddedModeProperty);\n        set => SetValue(EmbeddedModeProperty, value);\n    }\n\n    public bool AnimateBorder\n    {\n        get => (bool)GetValue(AnimateBorderProperty);\n        set => SetValue(AnimateBorderProperty, value);\n    }\n\n\n    public event RoutedEventHandler MouseHovering\n    {\n        add => AddHandler(MouseHoveringEvent, value);\n        remove => RemoveHandler(MouseHoveringEvent, value);\n    }\n\n    public event RoutedEventHandler SelectionAccepted\n    {\n        add => AddHandler(SelectionAcceptedEvent, value);\n        remove => RemoveHandler(SelectionAcceptedEvent, value);\n    }\n\n    public event RoutedEventHandler SelectionChanged\n    {\n        add => AddHandler(SelectionChangedEvent, value);\n        remove => RemoveHandler(SelectionChangedEvent, value);\n    }\n\n    public event RoutedEventHandler SelectionCanceled\n    {\n        add => AddHandler(SelectionCanceledEvent, value);\n        remove => RemoveHandler(SelectionCanceledEvent, value);\n    }\n\n    #endregion\n\n    static SelectControl()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(SelectControl), new FrameworkPropertyMetadata(typeof(SelectControl)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _mainCanvas = Template.FindName(\"MainCanvas\", this) as Canvas;\n\n        _topLeft = Template.FindName(\"TopLeftThumb\", this) as Thumb;\n        _topRight = Template.FindName(\"TopRightThumb\", this) as Thumb;\n        _bottomLeft = Template.FindName(\"BottomLeftThumb\", this) as Thumb;\n        _bottomRight = Template.FindName(\"BottomRightThumb\", this) as Thumb;\n\n        _top = Template.FindName(\"TopThumb\", this) as Thumb;\n        _bottom = Template.FindName(\"BottomThumb\", this) as Thumb;\n        _left = Template.FindName(\"LeftThumb\", this) as Thumb;\n        _right = Template.FindName(\"RightThumb\", this) as Thumb;\n\n        _rectangle = Template.FindName(\"SelectRectangle\", this) as Rectangle;\n        _statusControlGrid = Template.FindName(\"StatusControlGrid\", this) as ExtendedUniformGrid;\n        _acceptButton = Template.FindName(\"AcceptButton\", this) as ExtendedButton;\n        _retryButton = Template.FindName(\"RetryButton\", this) as ExtendedButton;\n        _cancelButton = Template.FindName(\"CancelButton\", this) as ExtendedButton;\n\n        _zoomGrid = Template.FindName(\"ZoomGrid\", this) as Grid;\n        _croppedImage = Template.FindName(\"CroppedImage\", this) as Image;\n        _zoomTextBlock = Template.FindName(\"ZoomTextBlock\", this) as TextBlock;\n        _sizeGrid = Template.FindName(\"SizeGrid\", this) as Grid;\n        //_sizeTextBlock = Template.FindName(\"SizeTextBlock\", this) as TextBlock;\n        //_sizeNativeTextBlock = Template.FindName(\"NativeSizeTextBlock\", this) as TextBlock;\n\n        //_rectGrid = Template.FindName(\"RectGrid\", this) as Grid;\n        //_closeRectButton = Template.FindName(\"CloseSizeWidgetButton\", this) as ImageButton;\n        //_moveSizeWidgetGrid = Template.FindName(\"MoveSizeWidgetGrid\", this) as Grid;\n\n        Loaded += Control_Loaded;\n        Unloaded += Control_Unloaded;\n        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;\n\n        //Add handlers for resizing • Corners.\n        _topLeft.DragDelta += HandleTopLeft;\n        _topRight.DragDelta += HandleTopRight;\n        _bottomLeft.DragDelta += HandleBottomLeft;\n        _bottomRight.DragDelta += HandleBottomRight;\n\n        //Add handlers for resizing • Sides.\n        _top.DragDelta += HandleTop;\n        _bottom.DragDelta += HandleBottom;\n        _left.DragDelta += HandleLeft;\n        _right.DragDelta += HandleRight;\n\n        //Drag to move.\n        _rectangle.MouseLeftButtonDown += Rectangle_MouseLeftButtonDown;\n        _rectangle.MouseMove += Rectangle_MouseMove;\n        _rectangle.MouseLeftButtonUp += Rectangle_MouseLeftButtonUp;\n\n        _acceptButton.Click += (sender, e) => { Accept(); };\n        _retryButton.Click += (sender, e) => { Retry(); };\n        _cancelButton.Click += (sender, e) => { Cancel(); };\n\n        //Replace with singleton property.\n        //if (_regionMagnifier == null)\n        //_regionMagnifier = new RegionMagnifier();\n\n        //Enable sizing controls.\n        //if (!EmbeddedMode)\n        //{\n        //    _sizeTextBlock.PreviewMouseLeftButtonDown += SizeTextBlock_MouseUp;\n        //    _sizeTextBlock.IsHitTestVisible = true;\n        //    _sizeTextBlock.Cursor = Cursors.Hand;\n        //}\n    }\n\n    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        _startPoint = e.GetPosition(this);\n\n        if (Mode == ModeType.Region)\n        {\n            Selected = new Rect(e.GetPosition(this), new Size(0, 0));\n            FinishedSelection = false;\n\n            CaptureMouse();\n\n            AdjustStatusControls();\n            AdjustFlowControls();\n            DetectBlindSpots();\n        }\n        else\n        {\n            if (Selected.Width > 0 && Selected.Height > 0)\n            {\n                if (Mode == ModeType.Window && _hitTestWindow != null)\n                    User32.SetForegroundWindow(_hitTestWindow.Handle);\n\n                Selected = Selected.Offset(-1);\n                RaiseAcceptedEvent();\n            }\n        }\n\n        e.Handled = true;\n        base.OnMouseLeftButtonDown(e);\n    }\n\n    protected override void OnMouseRightButtonDown(MouseButtonEventArgs e)\n    {\n        if (Mode == ModeType.Region)\n            Retry();\n\n        e.Handled = true;\n        base.OnMouseLeftButtonDown(e);\n    }\n\n    protected override void OnMouseMove(MouseEventArgs e)\n    {\n        if (Mode == ModeType.Region)\n        {\n            var current = e.GetPosition(this);\n\n            AdjustZoomView(current);\n\n            if (!IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed)\n                return;\n\n            // Move 1 pixel to current the position of the selection to the cursor.\n            current.X++;\n            current.Y++;\n\n            if (current.X < -1)\n                current.X = -1;\n\n            if (current.Y < -1)\n                current.Y = -1;\n\n            if (current.X > ActualWidth)\n                current.X = ActualWidth;\n\n            if (current.Y > ActualHeight)\n                current.Y = ActualHeight;\n\n            Selected = new Rect(Math.Min(current.X, _startPoint.X), Math.Min(current.Y, _startPoint.Y), Math.Abs(current.X - _startPoint.X), Math.Abs(current.Y - _startPoint.Y));\n\n            AdjustInfo(current);\n        }\n        else if (_ready)\n        {\n            var current = e.GetPosition(this);\n\n            _hitTestWindow = Windows.FirstOrDefault(x => x.Bounds.Contains(current));\n            Selected = _hitTestWindow?.Bounds ?? Rect.Empty;\n\n            AdjustInfo(current);\n        }\n\n        base.OnMouseMove(e);\n    }\n\n    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)\n    {\n        if (Mode == ModeType.Region)\n        {\n            ReleaseMouseCapture();\n\n            if (Selected.Width < 30 || Selected.Height < 30)\n            {\n                OnMouseRightButtonDown(e);\n                return;\n            }\n\n            FinishedSelection = true;\n\n            AdjustThumbs();\n            AdjustStatusControls(e.GetPosition(this));\n            AdjustFlowControls();\n            DetectBlindSpots();\n        }\n\n        //e.Handled = true;\n        base.OnMouseLeftButtonUp(e);\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        //Apparently, this event is not triggered.\n        if (e.Key == Key.Escape)\n            Cancel();\n\n        if (e.Key == Key.Enter || e.Key == Key.Return)\n            Accept();\n\n        e.Handled = true;\n        base.OnPreviewKeyDown(e);\n\n        if (Mode != ModeType.Region || Selected.IsEmpty)\n            return;\n\n        var step = (Keyboard.Modifiers & ModifierKeys.Alt) != 0 ? 5 : 1;\n        var key = e.Key == Key.System ? e.SystemKey : e.Key;\n\n        //Control + Shift: Expand both ways.\n        if ((Keyboard.Modifiers & ModifierKeys.Control) != 0 && (Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n        {\n            switch (key)\n            {\n                case Key.Up:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, step));\n                    HandleTop(_top, new DragDeltaEventArgs(0, -step));\n                    break;\n                case Key.Down:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, -step));\n                    HandleTop(_top, new DragDeltaEventArgs(0, step));\n                    break;\n                case Key.Left:\n                    HandleRight(_right, new DragDeltaEventArgs(-step, 0));\n                    HandleLeft(_left, new DragDeltaEventArgs(step, 0));\n                    break;\n                case Key.Right:\n                    HandleRight(_right, new DragDeltaEventArgs(step, 0));\n                    HandleLeft(_left, new DragDeltaEventArgs(-step, 0));\n                    break;\n            }\n        }\n        else if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0) //If the Shift key is pressed, the sizing mode is enabled (bottom right).\n        {\n            switch (key)\n            {\n                case Key.Up:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, -step));\n                    break;\n                case Key.Down:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, step));\n                    break;\n                case Key.Left:\n                    HandleRight(_right, new DragDeltaEventArgs(-step, 0));\n                    break;\n                case Key.Right:\n                    HandleRight(_right, new DragDeltaEventArgs(step, 0));\n                    break;\n            }\n        }\n        else if ((Keyboard.Modifiers & ModifierKeys.Control) != 0) //If the Control key is pressed, the sizing mode is enabled (top left).\n        {\n            switch (key)\n            {\n                case Key.Up:\n                    HandleTop(_top, new DragDeltaEventArgs(0, -step));\n                    break;\n                case Key.Down:\n                    HandleTop(_top, new DragDeltaEventArgs(0, step));\n                    break;\n                case Key.Left:\n                    HandleLeft(_left, new DragDeltaEventArgs(-step, 0));\n                    break;\n                case Key.Right:\n                    HandleLeft(_left, new DragDeltaEventArgs(step, 0));\n                    break;\n            }\n        }\n        else\n        {\n            switch (key) //If no other key is pressed, the movement mode is enabled.\n            {\n                case Key.Up:\n                    HandleCenter(new DragDeltaEventArgs(0, -step));\n                    break;\n                case Key.Down:\n                    HandleCenter(new DragDeltaEventArgs(0, step));\n                    break;\n                case Key.Left:\n                    HandleCenter(new DragDeltaEventArgs(-step, 0));\n                    break;\n                case Key.Right:\n                    HandleCenter(new DragDeltaEventArgs(step, 0));\n                    break;\n            }\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void AdjustSelection()\n    {\n        //If already opened with a region selected, treat as \"already selected\".\n        if (Selected == Rect.Empty)\n            return;\n\n        FinishedSelection = true;\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        AdjustFlowControls();\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    private void AdjustThumbs()\n    {\n        //Top left.\n        Canvas.SetLeft(_topLeft, Selected.Left - _topLeft.Width / 2);\n        Canvas.SetTop(_topLeft, Selected.Top - _topLeft.Height / 2);\n\n        //Top right.\n        Canvas.SetLeft(_topRight, Selected.Right - _topRight.Width / 2);\n        Canvas.SetTop(_topRight, Selected.Top - _topRight.Height / 2);\n\n        //Bottom left.\n        Canvas.SetLeft(_bottomLeft, Selected.Left - _bottomLeft.Width / 2);\n        Canvas.SetTop(_bottomLeft, Selected.Bottom - _bottomLeft.Height / 2);\n\n        //Bottom right.\n        Canvas.SetLeft(_bottomRight, Selected.Right - _bottomRight.Width / 2);\n        Canvas.SetTop(_bottomRight, Selected.Bottom - _bottomRight.Height / 2);\n\n        //Top.\n        Canvas.SetLeft(_top, Selected.Left + Selected.Width / 2 - _top.Width / 2);\n        Canvas.SetTop(_top, Selected.Top - _top.Height / 2);\n\n        //Left.\n        Canvas.SetLeft(_left, Selected.Left - _left.Width / 2);\n        Canvas.SetTop(_left, Selected.Top + Selected.Height / 2 - _left.Height / 2);\n\n        //Right.\n        Canvas.SetLeft(_right, Selected.Right - _right.Width / 2);\n        Canvas.SetTop(_right, Selected.Top + Selected.Height / 2 - _right.Height / 2);\n\n        //Bottom.\n        Canvas.SetLeft(_bottom, Selected.Left + Selected.Width / 2 - _bottom.Width / 2);\n        Canvas.SetTop(_bottom, Selected.Bottom - _bottom.Height / 2);\n    }\n\n    private void AdjustZoomView(Point point)\n    {\n        //_bottom.IsVisible\n        if (BackImage == null || Mode != ModeType.Region || !UserSettings.All.Magnifier || (Selected.Width > 10 && Selected.Height > 10 && Selected.Offset(5).Contains(point)) || _blindSpots.Any(x => x.Contains(point)))\n        {\n            _zoomGrid.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        //If this selector got the hover, the other selectors must hide their zoom views.\n        if (!_wasHoverFocusChanged)\n        {\n            _wasHoverFocusChanged = true;\n            RaiseMouseHoveringEvent();\n        }\n\n        var scaledPoint = point.Scale(Scale);\n        var scaledSize = (int)Math.Round(15 * Scale, MidpointRounding.AwayFromZero);\n\n        try\n        {\n            //When using multiple monitors, the mouse cursor can paqss to another screen. This makes sure that to only get a valid screen position.\n            if (scaledPoint.X < 0 || scaledPoint.Y < 0 || scaledPoint.X + scaledSize > BackImage.PixelWidth || scaledPoint.Y + scaledSize > BackImage.PixelHeight)\n            {\n                _zoomGrid.Visibility = Visibility.Hidden;\n                return;\n            }\n\n            //The image is already 7 pixels offset of the current position.\n            _croppedImage.Source = new CroppedBitmap(BackImage, new Int32Rect((int)scaledPoint.X, (int)scaledPoint.Y, scaledSize, scaledSize));\n        }\n        catch (Exception)\n        { }\n\n        var left = point.X + 20;\n        var top = point.Y - _zoomGrid.ActualHeight - 20;\n\n        //Right overflow, adjust to the left.\n        if (ActualWidth - point.X < _zoomGrid.ActualWidth + 20)\n            left = point.X - _zoomGrid.ActualWidth - 20;\n\n        //Top overflow, adjust to the bottom.\n        if (point.Y - _zoomGrid.ActualHeight - 20 < 0)\n            top = point.Y + 20;\n\n        Canvas.SetLeft(_zoomGrid, left);\n        Canvas.SetTop(_zoomGrid, top);\n\n        _zoomTextBlock.Text = $\"X: {Math.Round(point.X + ParentLeft, 2)} ◇ Y: {Math.Round(point.Y + ParentTop, 2)}\";\n        _zoomGrid.Visibility = Visibility.Visible;\n    }\n\n    private void AdjustZoomViewDetached(Point point)\n    {\n        //If it should not display the zoom view.\n        if (BackImage == null || Mode != ModeType.Region || !UserSettings.All.Magnifier || (Selected.Width > 10 && Selected.Height > 10 && Selected.Offset(5).Contains(point)) || _blindSpots.Any(x => x.Contains(point)))\n        {\n            //_regionMagnifier.Hide();\n            return;\n        }\n\n        //If this selector got the hover, the other selectors must hide their zoom views.\n        if (!_wasHoverFocusChanged)\n        {\n            _wasHoverFocusChanged = true;\n            RaiseMouseHoveringEvent();\n        }\n\n        #region Get the zoommed-in part of the image\n\n        //var scaledPoint = point.Scale(Scale);\n        //var scaledSize = (int)Math.Round(15 * Scale, MidpointRounding.AwayFromZero);\n\n        try\n        {\n            //The image is already 7 pixels offset of the current position.\n            //_regionMagnifier.Image = new CroppedBitmap(BackImage, new Int32Rect((int)scaledPoint.X, (int)scaledPoint.Y, scaledSize, scaledSize));\n        }\n        catch (Exception)\n        { }\n\n        #endregion\n\n        //if (!_regionMagnifier.IsVisible)\n        //    _regionMagnifier.Show();\n\n        #region Reposition the zoom view\n\n        //var left = point.X + 20;\n        //var top = point.Y - _regionMagnifier.ActualHeight - 20;\n\n        ////Right overflow, adjust to the left.\n        //if (ActualWidth - point.X < _regionMagnifier.ActualWidth + 20)\n        //    left = point.X - _regionMagnifier.ActualWidth - 20;\n\n        ////Top overflow, adjust to the bottom.\n        //if (point.Y - _regionMagnifier.ActualHeight - 20 < 0)\n        //    top = point.Y + 20;\n\n        //_regionMagnifier.Left = left + ParentLeft;\n        //_regionMagnifier.Top = top + ParentTop;\n        //_regionMagnifier.LeftPosition = point.X + ParentLeft;\n        //_regionMagnifier.TopPosition = point.Y + ParentTop;\n\n        #endregion\n    }\n\n    private void AdjustStatusControls(Point? point = null)\n    {\n        if (_statusControlGrid == null)\n            return;\n\n        if (!FinishedSelection || EmbeddedMode)\n        {\n            _statusControlGrid.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        //Show the controls always closest to the given point, if there's no space on the current monitor,\n        //try finding the second closest point, or else show inside the selection rectangle.\n\n        if (!point.HasValue)\n            return;\n\n        //var absolutePoint = new Point(point.Value.X, point.Value.Y);\n\n        //If there's no space at the sides, show inside the rectangle.\n        if (Selected.Width > ActualWidth - _statusVerticalSize.Width * 2 && Selected.Height > ActualHeight - _statusHorizontalSize.Height * 2)\n        {\n            _statusControlGrid.Rows = 1;\n            _statusControlGrid.Columns = 3;\n            _statusControlGrid.IsReversed = false;\n            _statusControlGrid.UpdateLayout();\n\n            Canvas.SetLeft(_statusControlGrid, Selected.Left + Selected.Width / 2 - _statusControlGrid.ActualWidth / 2);\n            Canvas.SetTop(_statusControlGrid, Selected.Top + Selected.Height / 2 - _statusControlGrid.ActualHeight / 2);\n        }\n        else\n        {\n            //Out of 4 Points, get the one that is closest to the current mouse position.\n            var distances = new[] { (Selected.TopLeft - point.Value).Length, (Selected.TopRight - point.Value).Length, (Selected.BottomLeft - point.Value).Length, (Selected.BottomRight - point.Value).Length };\n            var index = Array.IndexOf(distances, distances.Min());\n\n            const int margin = 10;\n\n            var canTopLeft = Selected.Top > _statusHorizontalSize.Height + margin || Selected.Left > _statusVerticalSize.Width + margin;\n            var canBottomLeft = ActualHeight - Selected.Bottom > _statusHorizontalSize.Height + margin || Selected.Left > _statusVerticalSize.Width + margin;\n\n            switch (index)\n            {\n                case 0: //Top Left.\n                    if (Selected.Top > _statusHorizontalSize.Height + margin)\n                    {\n                        //On top.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top - _statusControlGrid.ActualHeight - margin);\n                        break;\n                    }\n                    else if (Selected.Left > _statusVerticalSize.Width + margin)\n                    {\n                        //To the left.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left - _statusControlGrid.ActualWidth - margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && canBottomLeft)\n                        goto case 2; //Bottom left.\n                    else\n                        goto case 1; //Top right.\n\n                case 1: //Top Right.\n                    if (Selected.Top > _statusHorizontalSize.Height + margin)\n                    {\n                        //On top.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right - _statusControlGrid.ActualWidth);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top - _statusControlGrid.ActualHeight - margin);\n                        break;\n                    }\n                    else if (ActualWidth - Selected.Right > _statusVerticalSize.Width + margin)\n                    {\n                        //To the right.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right + margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && !canTopLeft)\n                        goto case 3; //Bottom right.\n                    else\n                        goto case 0; //Top left.\n\n                case 2: //Bottom Left.\n                    if (ActualHeight - Selected.Bottom > _statusHorizontalSize.Height + margin)\n                    {\n                        //On the bottom.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left.Clamp(0, ActualWidth - _statusControlGrid.ActualWidth));\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom + margin);\n                        break;\n                    }\n                    else if (Selected.Left > _statusVerticalSize.Width + margin)\n                    {\n                        //To the left.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left - _statusControlGrid.ActualWidth - margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom - _statusControlGrid.ActualHeight);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && canTopLeft)\n                        goto case 0; //Top left.\n                    else\n                        goto case 3; //Bottom right.\n\n                case 3: //Bottom Right.\n                    if (ActualHeight - Selected.Bottom > _statusHorizontalSize.Height + margin)\n                    {\n                        //On the bottom.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, (Selected.Right - _statusControlGrid.ActualWidth).Clamp(0, ActualWidth - _statusControlGrid.ActualWidth));\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom + margin);\n                        break;\n                    }\n                    else if (ActualWidth - Selected.Right > _statusVerticalSize.Width + margin)\n                    {\n                        //To the right.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right + margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom - _statusControlGrid.ActualHeight);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && !canBottomLeft)\n                        goto case 1; //Top right.\n                    else\n                        goto case 2; //Bottom left.\n            }\n        }\n\n        _statusControlGrid.Visibility = Visibility.Visible;\n    }\n\n    private void AdjustFlowControls()\n    {\n        if (_mainCanvas == null)\n            return;\n\n        foreach (var button in _mainCanvas.Children.OfType<ExtendedButton>())\n            button.Visibility = FinishedSelection ? Visibility.Hidden : Visibility.Visible;\n    }\n\n    private void AdjustInfo(Point? point = null)\n    {\n        if (_sizeGrid == null)\n            return;\n\n        if (point == null || Selected.IsEmpty || Selected.Width < _sizeGrid.ActualWidth || Selected.Height < _sizeGrid.ActualHeight)\n        {\n            _sizeGrid.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        //Out of 4 Points, get the one that is farthest from the current mouse position.\n        var distances = new[] { (Selected.TopLeft - point.Value).Length, (Selected.TopRight - point.Value).Length, (Selected.BottomLeft - point.Value).Length, (Selected.BottomRight - point.Value).Length };\n        var index = Array.IndexOf(distances, distances.Max());\n\n        switch (index)\n        {\n            case 0:\n                Canvas.SetTop(_sizeGrid, Selected.Top);\n                Canvas.SetLeft(_sizeGrid, Selected.Left);\n                break;\n            case 1:\n                Canvas.SetTop(_sizeGrid, Selected.Top);\n                Canvas.SetLeft(_sizeGrid, Selected.Right - _sizeGrid.ActualWidth);\n                break;\n            case 2:\n                Canvas.SetTop(_sizeGrid, Selected.Bottom - _sizeGrid.ActualHeight);\n                Canvas.SetLeft(_sizeGrid, Selected.Left);\n                break;\n            case 3:\n                Canvas.SetTop(_sizeGrid, Selected.Bottom - _sizeGrid.ActualHeight);\n                Canvas.SetLeft(_sizeGrid, Selected.Right - _sizeGrid.ActualWidth);\n                break;\n        }\n\n        _sizeGrid.Visibility = Visibility.Visible;\n    }\n\n    private void DetectBlindSpots()\n    {\n        _blindSpots.Clear();\n\n        if (Mode != ModeType.Region || !UserSettings.All.Magnifier)\n            return;\n\n        //If nothing selected, only the Close button will appear.\n        if (Selected.IsEmpty) // || !FinishedSelection)\n        {\n            _blindSpots.Add(new Rect(new Point(ActualWidth - 40, 0), new Size(40, 40)));\n            return;\n        }\n\n        if (_statusControlGrid.Visibility == Visibility.Visible)\n            _blindSpots.Add(new Rect(new Point(Canvas.GetLeft(_statusControlGrid), Canvas.GetTop(_statusControlGrid)), new Size(_statusControlGrid.ActualWidth, _statusControlGrid.ActualHeight)));\n    }\n\n\n    internal void Accept()\n    {\n        if (!FinishedSelection)\n            return;\n\n        //Selected = Selected.Offset(-1);\n        RaiseAcceptedEvent();\n    }\n\n    public void Retry()\n    {\n        Selected = Rect.Empty;\n\n        FinishedSelection = false;\n\n        AdjustStatusControls();\n        AdjustFlowControls();\n        DetectBlindSpots();\n        AdjustInfo();\n    }\n\n    public void Cancel()\n    {\n        Selected = Rect.Empty;\n\n        FinishedSelection = false;\n\n        AdjustStatusControls();\n        DetectBlindSpots();\n        RaiseCanceledEvent();\n    }\n\n    public void HideZoom()\n    {\n        _wasHoverFocusChanged = false;\n        _zoomGrid.Visibility = Visibility.Hidden;\n        //_regionMagnifier.Hide();\n    }\n\n\n    public void RaiseMouseHoveringEvent()\n    {\n        if (MouseHoveringEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(MouseHoveringEvent));\n    }\n\n    public void RaiseAcceptedEvent()\n    {\n        if (SelectionAcceptedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SelectionAcceptedEvent));\n    }\n\n    public void RaiseChangedEvent()\n    {\n        if (SelectionChangedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SelectionChangedEvent));\n    }\n\n    public void RaiseCanceledEvent()\n    {\n        if (SelectionCanceledEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SelectionCanceledEvent));\n    }\n\n    private void CalculateStatusGridSizes()\n    {\n        _statusControlGrid.Rows = 3;\n        _statusControlGrid.Columns = 1;\n        _statusControlGrid.UpdateLayout();\n\n        _statusVerticalSize = new Size(_statusControlGrid.ActualWidth, _statusControlGrid.ActualHeight);\n\n        _statusControlGrid.Rows = 1;\n        _statusControlGrid.Columns = 3;\n        _statusControlGrid.UpdateLayout();\n\n        _statusHorizontalSize = new Size(_statusControlGrid.ActualWidth, _statusControlGrid.ActualHeight);\n    }\n\n    #endregion\n\n    #region Events\n\n    public void Control_Loaded(object o, RoutedEventArgs routedEventArgs)\n    {\n        _ready = false;\n\n        Keyboard.Focus(this);\n\n        _blindSpots.Clear();\n\n        if (EmbeddedMode)\n        {\n            var viewBox = new Viewbox\n            {\n                Height = Height,\n                Width = Width,\n                Stretch = Stretch.Uniform,\n                StretchDirection = StretchDirection.Both,\n                Tag = \"T\",\n                ClipToBounds = true,\n                IsHitTestVisible = false,\n                Child = new TextPath\n                {\n                    IsHitTestVisible = false,\n                    Text = LocalizationHelper.Get(\"S.Recorder.SelectArea.Embedded\"),\n                    Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                    Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                    StrokeThickness = 1.6,\n                    FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                    FontSize = 80,\n                    FontWeight = FontWeights.SemiBold,\n                    Margin = new Thickness(80),\n                    VerticalAlignment = VerticalAlignment.Stretch,\n                    HorizontalAlignment = HorizontalAlignment.Stretch,\n                    ClipToBounds = true\n                }\n            };\n\n            _mainCanvas.Children.Insert(0, viewBox);\n\n            Canvas.SetLeft(viewBox, 0);\n            Canvas.SetTop(viewBox, 0);\n            Panel.SetZIndex(viewBox, 0);\n\n            AdjustSelection();\n            return;\n        }\n\n        if (IsMouseOver)\n            AdjustZoomView(Mouse.GetPosition(this));\n\n        CalculateStatusGridSizes();\n\n        #region Close button\n\n        //Close button.\n        var button = new ExtendedButton\n        {\n            Name = \"CancelButton\",\n            Width = 40,\n            Height = 40,\n            ContentHeight = 25,\n            ContentWidth = 25,\n            ToolTip = LocalizationHelper.Get(\"S.Recorder.CancelSelection\"),\n            Icon = TryFindResource(\"Vector.Cancel\") as Brush,\n            Style = TryFindResource(\"Style.Button.NoText.White\") as Style,\n            Cursor = Cursors.Arrow,\n            Tag = \"T\"\n        };\n\n        button.Click += (sender, e) => { Cancel(); };\n\n        _mainCanvas.Children.Add(button);\n\n        Canvas.SetLeft(button, ActualWidth - 40);\n        Canvas.SetTop(button, 0);\n        Panel.SetZIndex(button, 8);\n\n        _blindSpots.Add(new Rect(new Point(ActualWidth - 40, 0), new Size(40, 40)));\n\n        #endregion\n\n        if (Mode == ModeType.Fullscreen)\n        {\n            var viewBox = new Viewbox\n            {\n                Height = ActualHeight,\n                Width = ActualWidth,\n                Stretch = Stretch.Uniform,\n                Tag = \"T\",\n                IsHitTestVisible = false,\n                Child = new TextPath\n                {\n                    IsHitTestVisible = false,\n                    Text = \"👆 \" + LocalizationHelper.Get(\"S.Recorder.SelectScreen\"),\n                    Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                    Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                    StrokeThickness = 3,\n                    FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                    FontSize = 72,\n                    FontWeight = FontWeights.SemiBold,\n                    Margin = new Thickness(50)\n                }\n            };\n\n            _mainCanvas.Children.Insert(0, viewBox);\n\n            Canvas.SetLeft(viewBox, 0);\n            Canvas.SetTop(viewBox, 0);\n            Panel.SetZIndex(viewBox, 0);\n        }\n        else if (Mode == ModeType.Window)\n        {\n            foreach (var window in Windows)\n            {\n                var border = new Border\n                {\n                    Tag = \"T\",\n                    ClipToBounds = true,\n                    IsHitTestVisible = false,\n                    Height = window.Bounds.Height,\n                    Width = window.Bounds.Width,\n                    Child = new Viewbox\n                    {\n                        Stretch = Stretch.Uniform,\n                        StretchDirection = StretchDirection.Both,\n                        VerticalAlignment = VerticalAlignment.Center,\n                        Child = new TextPath\n                        {\n                            IsHitTestVisible = false,\n                            Text = window.Bounds.Width < 400 || window.Bounds.Height < 100 ? \"👆\" : \"👆 \" + LocalizationHelper.Get(\"S.Recorder.SelectWindow\"),\n                            Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                            Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                            StrokeThickness = 3,\n                            FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                            FontSize = 80,\n                            FontWeight = FontWeights.SemiBold,\n                            Margin = new Thickness(20),\n                            VerticalAlignment = VerticalAlignment.Stretch,\n                            HorizontalAlignment = HorizontalAlignment.Stretch,\n                        }\n                    }\n                };\n\n                border.UpdateLayout();\n\n                var top = Windows.Where(x => x.Order < window.Order).Select(x => x.Bounds).ToList();\n                var geo = new RectangleGeometry { Rect = new Rect(new Size(window.Bounds.Width, window.Bounds.Height)) }.GetFlattenedPathGeometry(0, ToleranceType.Absolute);\n\n                if (top.Any())\n                {\n                    foreach (var region in top)\n                    {\n                        geo = Geometry.Combine(geo, new RectangleGeometry { Rect = new Rect(new Point(region.X - window.Bounds.X, region.Y - window.Bounds.Y), new Size(region.Width, region.Height)) },\n                            GeometryCombineMode.Exclude, Transform.Identity);\n                    }\n\n                    border.Clip = geo;\n                }\n\n                _mainCanvas.Children.Insert(0, border);\n\n                Canvas.SetLeft(border, window.Bounds.Left);\n                Canvas.SetTop(border, window.Bounds.Top);\n                Panel.SetZIndex(border, 0);\n            }\n        }\n        else\n        {\n            var viewBox = new Viewbox\n            {\n                Height = ActualHeight,\n                Width = ActualWidth,\n                Stretch = Stretch.Uniform,\n                StretchDirection = StretchDirection.Both,\n                Tag = \"T\",\n                ClipToBounds = true,\n                IsHitTestVisible = false,\n                Child = new TextPath\n                {\n                    IsHitTestVisible = false,\n                    Text = LocalizationHelper.Get(\"S.Recorder.SelectArea\"),\n                    Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                    Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                    StrokeThickness = 3,\n                    FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                    FontSize = 80,\n                    FontWeight = FontWeights.SemiBold,\n                    Margin = new Thickness(80),\n                    VerticalAlignment = VerticalAlignment.Stretch,\n                    HorizontalAlignment = HorizontalAlignment.Stretch,\n                    ClipToBounds = true\n                }\n            };\n\n            _mainCanvas.Children.Insert(0, viewBox);\n\n            Canvas.SetLeft(viewBox, 0);\n            Canvas.SetTop(viewBox, 0);\n            Panel.SetZIndex(viewBox, 0);\n        }\n\n        AdjustSelection();\n\n        _ready = true;\n\n        //Triggers the mouse event to detect the mouse hit at start.\n        OnMouseMove(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left));\n    }\n\n    private void SystemEvents_DisplaySettingsChanged(object o, EventArgs eventArgs)\n    {\n        Scale = this.Scale();\n    }\n\n    private void Control_Unloaded(object sender, RoutedEventArgs e)\n    {\n        SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged;\n\n        if (_mainCanvas == null)\n            return;\n\n        var list = _mainCanvas.Children.OfType<FrameworkElement>().Where(x => x.Tag as string == \"T\").ToList();\n\n        foreach (var element in list)\n            _mainCanvas.Children.Remove(element);\n\n        //_regionMagnifier.Close();\n    }\n\n\n    private static void Selected_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(o is SelectControl control))\n            return;\n\n        //If nothing selected, simply ignore.\n        if (control.Selected.IsEmpty)\n        {\n            control.NonExpandedSelection = control.Selected;\n            control.NonExpandedNativeSelection = control.Selected;\n            return;\n        }\n\n        //In a predetermined selection mode (window or screen)\n        if (control.Mode == ModeType.Fullscreen || control.Mode == ModeType.Window)\n        {\n            control.NonExpandedSelection = control.Selected.Offset(0); //In this case Offset is just rounding the selection points.\n            control.NonExpandedNativeSelection = control.Selected.Scale(control.Scale);\n            control.RaiseChangedEvent();\n            return;\n        }\n\n        #region Region selection mode\n\n        //For way too small regions, avoid applying the offset. That would throw an exception.\n        if (control.Selected.Width < 5 || control.Selected.Height < 5)\n        {\n            control.NonExpandedSelection = control.Selected;\n            control.NonExpandedNativeSelection = control.Selected;\n            return;\n        }\n\n        control.NonExpandedSelection = control.Selected.Offset(1);\n        control.NonExpandedNativeSelection = control.Selected.Scale(control.Scale).Offset(MathExtensions.RoundUpValue(control.Scale));\n        control.RaiseChangedEvent();\n\n        #endregion\n    }\n\n    private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Mode != ModeType.Region)\n            return;\n\n        _startPoint = e.GetPosition(this);\n\n        _rectangle.CaptureMouse();\n\n        FinishedSelection = false;\n\n        AdjustStatusControls();\n        DetectBlindSpots();\n        AdjustInfo();\n\n        RaiseChangedEvent(); //Check if makes sense.\n\n        e.Handled = true;\n    }\n\n    private void Rectangle_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (Mode != ModeType.Region || !_rectangle.IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed)\n            return;\n\n        //A quick double click will fire this event, when it should fire the OnMouseLeftButtonUp.\n        if (Selected.IsEmpty || Selected.Width < 10 || Selected.Height < 10)\n            return;\n\n        _rectangle.MouseMove -= Rectangle_MouseMove;\n\n        var currentPosition = e.GetPosition(this);\n\n        var x = Selected.X + (currentPosition.X - _startPoint.X);\n        var y = Selected.Y + (currentPosition.Y - _startPoint.Y);\n\n        if (x < -1)\n            x = -1;\n\n        if (y < -1)\n            y = -1;\n\n        if (x + Selected.Width > ActualWidth + 1)\n            x = ActualWidth + 1 - Selected.Width;\n\n        if (y + Selected.Height > ActualHeight + 1)\n            y = ActualHeight + 1 - Selected.Height;\n\n        Selected = new Rect(x, y, Selected.Width, Selected.Height);\n\n        _startPoint = currentPosition;\n        e.Handled = true;\n\n        AdjustInfo();\n\n        _rectangle.MouseMove += Rectangle_MouseMove;\n        _zoomGrid.Visibility = Visibility.Collapsed;\n    }\n\n    private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        if (Mode != ModeType.Region)\n            return;\n\n        if (_rectangle.IsMouseCaptured)\n            _rectangle?.ReleaseMouseCapture();\n\n        //A quick double quick will fire this event, when it should fire the OnMouseLeftButtonUp.\n        if (Selected.IsEmpty || Selected.Width < 10 || Selected.Height < 10)\n            return;\n\n        FinishedSelection = true;\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n        AdjustZoomView(point);\n\n        e.Handled = true;\n    }\n\n    private void SizeTextBlock_MouseUp(object sender, MouseButtonEventArgs e)\n    {\n        //Open dialog asking for left/top/width/height.\n        //_rectGrid.Visibility = Visibility.Visible;\n    }\n\n\n    ///<summary>\n    ///Handler for resizing from the top-left.\n    ///</summary>\n    private void HandleTopLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        Selected = new Rect(left, top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the top-right.\n    /// </summary>\n    private void HandleTopRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        Selected = new Rect(Selected.Left, top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the bottom-left.\n    /// </summary>\n    private void HandleBottomLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(left, Selected.Top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-right.\n    /// </summary>\n    private void HandleBottomRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(Selected.Left, Selected.Top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the left-middle.\n    /// </summary>\n    private void HandleLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        Selected = new Rect(left, Selected.Top, width, Selected.Height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the top-middle.\n    /// </summary>\n    private void HandleTop(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        Selected = new Rect(Selected.Left, top, Selected.Width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the right-middle.\n    /// </summary>\n    private void HandleRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        Selected = new Rect(Selected.Left, Selected.Top, width, Selected.Height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        DetectBlindSpots();\n        AdjustStatusControls(point);\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-middle.\n    /// </summary>\n    private void HandleBottom(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(Selected.Left, Selected.Top, Selected.Width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for moving the selection.\n    /// </summary>\n    private void HandleCenter(DragDeltaEventArgs e)\n    {\n        e.Handled = true;\n\n        var sel = new Rect(Selected.Left + e.HorizontalChange, Selected.Top + e.VerticalChange, Selected.Width, Selected.Height);\n\n        #region Limit the drag to inside the bounds\n\n        if (sel.Left < 0)\n            sel.X = 0;\n\n        if (sel.Top < 0)\n            sel.Y = 0;\n\n        if (sel.Right > ActualWidth)\n            sel.X = ActualWidth - sel.Width;\n\n        if (sel.Bottom > ActualHeight)\n            sel.Y = ActualHeight - sel.Height;\n\n        #endregion\n\n        Selected = new Rect(sel.Left, sel.Top, sel.Width, sel.Height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/SelectControlOld.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shapes;\nusing Microsoft.Win32;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Controls;\n\npublic class SelectControlOld : Control\n{\n    #region Variables\n\n    /// <summary>\n    /// Resizing adorner uses Thumbs for visual elements.\n    /// The Thumbs have built-in mouse input handling.\n    /// </summary>\n    private Thumb _topLeft, _topRight, _bottomLeft, _bottomRight, _top, _bottom, _left, _right;\n\n    /// <summary>\n    /// The selection rectangle, used to drag the selection Rect elsewhere.\n    /// </summary>\n    private Rectangle _rectangle;\n\n    /// <summary>\n    /// The grid that holds the three buttons to control the selection.\n    /// </summary>\n    private ExtendedUniformGrid _statusControlGrid;\n\n    /// <summary>\n    /// The pre-calculated size of the horizontal and vertical versions of the status control grid.\n    /// </summary>\n    private Size _statusHorizontalSize, _statusVerticalSize;\n\n    /// <summary>\n    /// The grid that holds the zoomed image.\n    /// </summary>\n    private Grid _zoomGrid;\n\n    /// <summary>\n    /// The zoomed image.\n    /// </summary>\n    private Image _croppedImage;\n\n    /// <summary>\n    /// The textblock that lies at the bottom of the zoom view.\n    /// </summary>\n    private TextBlock _zoomTextBlock;\n\n    /// <summary>\n    /// The main canvas, the root element.\n    /// </summary>\n    private Canvas _mainCanvas;\n\n    /// <summary>\n    /// Status control buttons.\n    /// </summary>\n    private ExtendedButton _acceptButton, _retryButton, _cancelButton;\n\n    /// <summary>\n    /// The texblock that shows the size of the selection.\n    /// </summary>\n    private TextBlock _sizeTextBlock;\n\n    /// <summary>\n    /// The grid that holds the sizing controls.\n    /// </summary>\n    private Grid _rectGrid;\n\n    /// <summary>\n    /// The button that closes the sizing widget.\n    /// </summary>\n    private ExtendedButton _closeRectButton;\n\n    /// <summary>\n    /// The grid that enables the movement of the sizing widget.\n    /// </summary>\n    private Grid _moveSizeWidgetGrid;\n\n    /// <summary>\n    /// The start point for the drag operation.\n    /// </summary>\n    private Point _startPoint;\n\n    /// <summary>\n    /// Blind spots for the ZoomView. If the cursor is on top of any of this spots, the zoom view should not appear.\n    /// </summary>\n    private readonly List<Rect> _blindSpots = new List<Rect>();\n\n    /// <summary>\n    /// The latest window that contains the mouse cursor on top of it.\n    /// </summary>\n    private DetectedRegion _hitTestWindow;\n\n    /// <summary>\n    /// True when this control is ready to process mouse input when using the Screen/Window selection mode.\n    /// This was added because the event MouseMove was being fired before the method that adjusts the other controls finished. (TL;DR It was a race condition)\n    /// </summary>\n    private bool _ready;\n\n    public List<DetectedRegion> Windows = new();\n\n    public List<Monitor> Monitors = new();\n\n    public BitmapSource BackImage;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty IsPickingRegionProperty = DependencyProperty.Register(nameof(IsPickingRegion), typeof(bool), typeof(SelectControlOld), new PropertyMetadata(true));\n\n    public static readonly DependencyProperty SelectedProperty = DependencyProperty.Register(nameof(Selected), typeof(Rect), typeof(SelectControlOld), new PropertyMetadata(Rect.Empty, Selected_PropertyChanged));\n\n    public static readonly DependencyProperty NonExpandedSelectionProperty = DependencyProperty.Register(nameof(NonExpandedSelection), typeof(Rect), typeof(SelectControlOld), new PropertyMetadata(Rect.Empty));\n\n    public static readonly DependencyProperty FinishedSelectionProperty = DependencyProperty.Register(nameof(FinishedSelection), typeof(bool), typeof(SelectControlOld), new PropertyMetadata(false));\n\n    public static readonly DependencyProperty ModeProperty = DependencyProperty.Register(nameof(Mode), typeof(ModeType), typeof(SelectControlOld), new PropertyMetadata(ModeType.Region, Mode_Changed));\n\n    public static readonly DependencyProperty ScaleProperty = DependencyProperty.Register(nameof(Scale), typeof(double), typeof(SelectControlOld), new PropertyMetadata(1d, Mode_Changed));\n\n    public static readonly DependencyProperty EmbeddedModeProperty = DependencyProperty.Register(nameof(EmbeddedMode), typeof(bool), typeof(SelectControlOld), new PropertyMetadata(false));\n\n    public static readonly RoutedEvent SelectionAcceptedEvent = EventManager.RegisterRoutedEvent(nameof(SelectionAccepted), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControlOld));\n\n    public static readonly RoutedEvent SelectionChangedEvent = EventManager.RegisterRoutedEvent(nameof(SelectionChanged), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControlOld));\n\n    public static readonly RoutedEvent SelectionCanceledEvent = EventManager.RegisterRoutedEvent(nameof(SelectionCanceled), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SelectControlOld));\n\n    #endregion\n\n    #region Properties\n\n    public bool IsPickingRegion\n    {\n        get => (bool)GetValue(IsPickingRegionProperty);\n        set => SetValue(IsPickingRegionProperty, value);\n    }\n\n    public Rect Selected\n    {\n        get => (Rect)GetValue(SelectedProperty);\n        set => SetValue(SelectedProperty, value);\n    }\n\n    public Rect NonExpandedSelection\n    {\n        get => (Rect)GetValue(NonExpandedSelectionProperty);\n        set => SetValue(NonExpandedSelectionProperty, value);\n    }\n\n    public bool FinishedSelection\n    {\n        get => (bool)GetValue(FinishedSelectionProperty);\n        set => SetValue(FinishedSelectionProperty, value);\n    }\n\n    public ModeType Mode\n    {\n        get => (ModeType)GetValue(ModeProperty);\n        set => SetValue(ModeProperty, value);\n    }\n\n    public double Scale\n    {\n        get => (double)GetValue(ScaleProperty);\n        set => SetValue(ScaleProperty, value);\n    }\n\n    public bool EmbeddedMode\n    {\n        get => (bool)GetValue(EmbeddedModeProperty);\n        set => SetValue(EmbeddedModeProperty, value);\n    }\n\n\n    public event RoutedEventHandler SelectionAccepted\n    {\n        add => AddHandler(SelectionAcceptedEvent, value);\n        remove => RemoveHandler(SelectionAcceptedEvent, value);\n    }\n\n    public event RoutedEventHandler SelectionChanged\n    {\n        add => AddHandler(SelectionChangedEvent, value);\n        remove => RemoveHandler(SelectionChangedEvent, value);\n    }\n\n    public event RoutedEventHandler SelectionCanceled\n    {\n        add => AddHandler(SelectionCanceledEvent, value);\n        remove => RemoveHandler(SelectionCanceledEvent, value);\n    }\n\n    #endregion\n\n    static SelectControlOld()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(SelectControlOld), new FrameworkPropertyMetadata(typeof(SelectControlOld)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _mainCanvas = Template.FindName(\"MainCanvas\", this) as Canvas;\n\n        _topLeft = Template.FindName(\"TopLeftThumb\", this) as Thumb;\n        _topRight = Template.FindName(\"TopRightThumb\", this) as Thumb;\n        _bottomLeft = Template.FindName(\"BottomLeftThumb\", this) as Thumb;\n        _bottomRight = Template.FindName(\"BottomRightThumb\", this) as Thumb;\n\n        _top = Template.FindName(\"TopThumb\", this) as Thumb;\n        _bottom = Template.FindName(\"BottomThumb\", this) as Thumb;\n        _left = Template.FindName(\"LeftThumb\", this) as Thumb;\n        _right = Template.FindName(\"RightThumb\", this) as Thumb;\n\n        _rectangle = Template.FindName(\"SelectRectangle\", this) as Rectangle;\n        _statusControlGrid = Template.FindName(\"StatusControlGrid\", this) as ExtendedUniformGrid;\n        _acceptButton = Template.FindName(\"AcceptButton\", this) as ExtendedButton;\n        _retryButton = Template.FindName(\"RetryButton\", this) as ExtendedButton;\n        _cancelButton = Template.FindName(\"CancelButton\", this) as ExtendedButton;\n\n        _zoomGrid = Template.FindName(\"ZoomGrid\", this) as Grid;\n        _croppedImage = Template.FindName(\"CroppedImage\", this) as Image;\n        _zoomTextBlock = Template.FindName(\"ZoomTextBlock\", this) as TextBlock;\n        _sizeTextBlock = Template.FindName(\"SizeTextBlock\", this) as TextBlock;\n        //_rectGrid = Template.FindName(\"RectGrid\", this) as Grid;\n        //_closeRectButton = Template.FindName(\"CloseSizeWidgetButton\", this) as ImageButton;\n        //_moveSizeWidgetGrid = Template.FindName(\"MoveSizeWidgetGrid\", this) as Grid;\n\n        //if (_topLeft == null || _topRight == null || _bottomLeft == null || _bottomRight == null ||\n        //    _top == null || _bottom == null || _left == null || _right == null || _rectangle == null || _mainCanvas == null || _zoomGrid == null || _croppedImage == null)\n        //    return;\n\n        Loaded += OnLoaded;\n        Unloaded += OnUnloaded;\n        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;\n\n        //Add handlers for resizing • Corners.\n        _topLeft.DragDelta += HandleTopLeft;\n        _topRight.DragDelta += HandleTopRight;\n        _bottomLeft.DragDelta += HandleBottomLeft;\n        _bottomRight.DragDelta += HandleBottomRight;\n\n        //Add handlers for resizing • Sides.\n        _top.DragDelta += HandleTop;\n        _bottom.DragDelta += HandleBottom;\n        _left.DragDelta += HandleLeft;\n        _right.DragDelta += HandleRight;\n\n        //Drag to move.\n        _rectangle.MouseLeftButtonDown += Rectangle_MouseLeftButtonDown;\n        _rectangle.MouseMove += Rectangle_MouseMove;\n        _rectangle.MouseLeftButtonUp += Rectangle_MouseLeftButtonUp;\n\n        //if (_acceptButton == null || _retryButton == null || _cancelButton == null)\n        //    return;\n\n        _acceptButton.Click += (sender, e) => { Accept(); };\n        _retryButton.Click += (sender, e) => { Retry(); };\n        _cancelButton.Click += (sender, e) => { Cancel(); };\n\n        //Enable sizing controls.\n        //if (!EmbeddedMode)\n        //{\n        //    _sizeTextBlock.PreviewMouseLeftButtonDown += SizeTextBlock_MouseUp;\n        //    _sizeTextBlock.IsHitTestVisible = true;\n        //    _sizeTextBlock.Cursor = Cursors.Hand;\n        //}\n\n        Monitors = MonitorHelper.AllMonitorsScaled(Scale, true);\n    }\n\n    private void SystemEvents_DisplaySettingsChanged(object o, EventArgs eventArgs)\n    {\n        Scale = this.Scale();\n\n        Monitors = MonitorHelper.AllMonitorsScaled(Scale, true);\n\n        //TODO: Adjust the selection and the UI when this happens.\n    }\n\n    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        _startPoint = e.GetPosition(this);\n\n        if (Mode == ModeType.Region)\n        {\n            Selected = new Rect(e.GetPosition(this), new Size(0, 0));\n            FinishedSelection = false;\n\n            CaptureMouse();\n\n            AdjustStatusControls();\n            AdjustFlowControls();\n            DetectBlindSpots();\n        }\n        else\n        {\n            if (Mode == ModeType.Window && _hitTestWindow != null)\n                User32.SetForegroundWindow(_hitTestWindow.Handle);\n\n            if (Selected.Width > 0 && Selected.Height > 0)\n                RaiseAcceptedEvent();\n        }\n\n        e.Handled = true;\n        base.OnMouseLeftButtonDown(e);\n    }\n\n    protected override void OnMouseRightButtonDown(MouseButtonEventArgs e)\n    {\n        if (Mode == ModeType.Region)\n            Retry();\n\n        e.Handled = true;\n        base.OnMouseLeftButtonDown(e);\n    }\n\n    protected override void OnMouseMove(MouseEventArgs e)\n    {\n        if (Mode == ModeType.Region)\n        {\n            var current = e.GetPosition(this);\n\n            AdjustZoomView(current);\n\n            if (!IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed)\n                return;\n\n            if (current.X < -1)\n                current.X = -1;\n\n            if (current.Y < -1)\n                current.Y = -1;\n\n            if (current.X > ActualWidth)\n                current.X = ActualWidth;\n\n            if (current.Y > ActualHeight)\n                current.Y = ActualHeight;\n\n            Selected = new Rect(Math.Min(current.X, _startPoint.X), Math.Min(current.Y, _startPoint.Y), Math.Abs(current.X - _startPoint.X), Math.Abs(current.Y - _startPoint.Y));\n\n            AdjustInfo(current);\n        }\n        else if (_ready)\n        {\n            var current = e.GetPosition(this);\n\n            _hitTestWindow = Windows.FirstOrDefault(x => x.Bounds.Contains(current));\n            Selected = _hitTestWindow?.Bounds ?? Rect.Empty;\n\n            AdjustInfo(current);\n        }\n\n        base.OnMouseMove(e);\n    }\n\n    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)\n    {\n        if (Mode == ModeType.Region)\n        {\n            ReleaseMouseCapture();\n\n            if (Selected.Width < 10 || Selected.Height < 10)\n            {\n                OnMouseRightButtonDown(e);\n                return;\n            }\n\n            FinishedSelection = true;\n\n            AdjustThumbs();\n            AdjustStatusControls(e.GetPosition(this));\n            AdjustFlowControls();\n            DetectBlindSpots();\n        }\n\n        //e.Handled = true;\n        base.OnMouseLeftButtonUp(e);\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        //Apparently, this event is not triggered.\n        if (e.Key == Key.Escape)\n            Cancel();\n\n        if (e.Key == Key.Enter || e.Key == Key.Return)\n            Accept();\n\n        e.Handled = true;\n        base.OnPreviewKeyDown(e);\n\n        if (Mode != ModeType.Region || Selected.IsEmpty)\n            return;\n\n        //Control + Shift: Expand both ways.\n        if ((Keyboard.Modifiers & ModifierKeys.Control) != 0 && (Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n        {\n            switch (e.Key)\n            {\n                case Key.Up:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, 1));\n                    HandleTop(_top, new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, -1));\n                    HandleTop(_top, new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleRight(_right, new DragDeltaEventArgs(-1, 0));\n                    HandleLeft(_left, new DragDeltaEventArgs(1, 0));\n                    break;\n                case Key.Right:\n                    HandleRight(_right, new DragDeltaEventArgs(1, 0));\n                    HandleLeft(_left, new DragDeltaEventArgs(-1, 0));\n                    break;\n            }\n        }\n        else if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0) //If the Shift key is pressed, the sizing mode is enabled (bottom right).\n        {\n            switch (e.Key)\n            {\n                case Key.Up:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleBottom(_bottom, new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleRight(_right, new DragDeltaEventArgs(-1, 0));\n                    break;\n                case Key.Right:\n                    HandleRight(_right, new DragDeltaEventArgs(1, 0));\n                    break;\n            }\n        }\n        else if ((Keyboard.Modifiers & ModifierKeys.Control) != 0) //If the Control key is pressed, the sizing mode is enabled (top left).\n        {\n            switch (e.Key)\n            {\n                case Key.Up:\n                    HandleTop(_top, new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleTop(_top, new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleLeft(_left, new DragDeltaEventArgs(-1, 0));\n                    break;\n                case Key.Right:\n                    HandleLeft(_left, new DragDeltaEventArgs(1, 0));\n                    break;\n            }\n        }\n        else\n        {\n            switch (e.Key) //If no other key is pressed, the movement mode is enabled.\n            {\n                case Key.Up:\n                    HandleCenter(new DragDeltaEventArgs(0, -1));\n                    break;\n                case Key.Down:\n                    HandleCenter(new DragDeltaEventArgs(0, 1));\n                    break;\n                case Key.Left:\n                    HandleCenter(new DragDeltaEventArgs(-1, 0));\n                    break;\n                case Key.Right:\n                    HandleCenter(new DragDeltaEventArgs(1, 0));\n                    break;\n            }\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void AdjustSelection()\n    {\n        //If already opened with a region selected, treat as \"already selected\".\n        if (Selected == Rect.Empty) return;\n\n        FinishedSelection = true;\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        AdjustFlowControls();\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    private void AdjustThumbs()\n    {\n        //Top left.\n        Canvas.SetLeft(_topLeft, Selected.Left - _topLeft.Width / 2);\n        Canvas.SetTop(_topLeft, Selected.Top - _topLeft.Height / 2);\n\n        //Top right.\n        Canvas.SetLeft(_topRight, Selected.Right - _topRight.Width / 2);\n        Canvas.SetTop(_topRight, Selected.Top - _topRight.Height / 2);\n\n        //Bottom left.\n        Canvas.SetLeft(_bottomLeft, Selected.Left - _bottomLeft.Width / 2);\n        Canvas.SetTop(_bottomLeft, Selected.Bottom - _bottomLeft.Height / 2);\n\n        //Bottom right.\n        Canvas.SetLeft(_bottomRight, Selected.Right - _bottomRight.Width / 2);\n        Canvas.SetTop(_bottomRight, Selected.Bottom - _bottomRight.Height / 2);\n\n        //Top.\n        Canvas.SetLeft(_top, Selected.Left + Selected.Width / 2 - _top.Width / 2);\n        Canvas.SetTop(_top, Selected.Top - _top.Height / 2);\n\n        //Left.\n        Canvas.SetLeft(_left, Selected.Left - _left.Width / 2);\n        Canvas.SetTop(_left, Selected.Top + Selected.Height / 2 - _left.Height / 2);\n\n        //Right.\n        Canvas.SetLeft(_right, Selected.Right - _right.Width / 2);\n        Canvas.SetTop(_right, Selected.Top + Selected.Height / 2 - _right.Height / 2);\n\n        //Bottom.\n        Canvas.SetLeft(_bottom, Selected.Left + Selected.Width / 2 - _bottom.Width / 2);\n        Canvas.SetTop(_bottom, Selected.Bottom - _bottom.Height / 2);\n    }\n\n    private void AdjustZoomView(Point point)\n    {\n        if (BackImage == null || Mode != ModeType.Region || !UserSettings.All.Magnifier || (_bottom.IsVisible && Selected.Contains(point)) || _blindSpots.Any(x => x.Contains(point)))\n        {\n            _zoomGrid.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        var monitor = Monitors.FirstOrDefault(x => x.Bounds.Contains(point));\n\n        if (monitor == null)\n        {\n            _zoomGrid.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        var scaledPoint = point.Scale(Scale);\n        var scaledSize = (int)Math.Round(15 * Scale, MidpointRounding.AwayFromZero);\n\n        try\n        {\n            //The image is already 7 pixels offset of the current position.\n            _croppedImage.Source = new CroppedBitmap(BackImage, new Int32Rect((int)scaledPoint.X, (int)scaledPoint.Y, scaledSize, scaledSize));\n        }\n        catch (Exception)\n        { }\n\n        var left = point.X + 20;\n        var top = point.Y - _zoomGrid.ActualHeight - 20;\n\n        //Right overflow, adjust to the left.\n        if (monitor.Bounds.Right - point.X < _zoomGrid.ActualWidth + 20)\n            left = point.X - _zoomGrid.ActualWidth - 20;\n\n        //Top overflow, adjust to the bottom.\n        if (point.Y - _zoomGrid.ActualHeight - 20 < monitor.Bounds.Top)\n            top = point.Y + 20;\n\n        Canvas.SetLeft(_zoomGrid, left);\n        Canvas.SetTop(_zoomGrid, top);\n\n        _zoomTextBlock.Text = $\"X: {scaledPoint.X + SystemParameters.VirtualScreenLeft} ◇ Y: {scaledPoint.Y + SystemParameters.VirtualScreenTop}\";\n\n        _zoomGrid.Visibility = Visibility.Visible;\n    }\n\n    private void AdjustStatusControls(Point? point = null)\n    {\n        if (_statusControlGrid == null)\n            return;\n\n        if (!FinishedSelection || EmbeddedMode)\n        {\n            _statusControlGrid.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        //Show the controls always closest to the given point, if there's no space on the current monitor,\n        //try finding the second closest point, or else show inside the selection rectangle.\n\n        if (!point.HasValue)\n            return;\n\n        //If the main monitor is not the most left / top one, the bounds of monitors left to / above the main monitor are negative,\n        //But the cursor point is always starting from 0,0\n        //So, the cursor point may not fall into any monitor bounds (exceed the maximum right / bottom coordinate)\n        //As a result, convert the cursor point into the same axis of monitors by plusing the negative left / top coordinate\n        //double minimumMonitorTop = Monitors.Min(x => x.Bounds.Top);\n        //double minimumMonitorLeft = Monitors.Min(x => x.Bounds.Left);\n\n        var absolutePoint = new Point(point.Value.X, point.Value.Y);\n\n        var monitor = Monitors.FirstOrDefault(x => x.Bounds.Contains(absolutePoint));\n\n        if (monitor == null)\n            return;\n\n        //If there's no space at the sides, show inside the rectangle.\n        if (Selected.Width > monitor.Bounds.Width - _statusVerticalSize.Width * 2 && Selected.Height > monitor.Bounds.Height - _statusHorizontalSize.Height * 2)\n        {\n            _statusControlGrid.Rows = 1;\n            _statusControlGrid.Columns = 3;\n            _statusControlGrid.IsReversed = false;\n            _statusControlGrid.UpdateLayout();\n\n            Canvas.SetLeft(_statusControlGrid, Selected.Left + Selected.Width / 2 - _statusControlGrid.ActualWidth / 2);\n            Canvas.SetTop(_statusControlGrid, Selected.Top + Selected.Height / 2 - _statusControlGrid.ActualHeight / 2);\n        }\n        else\n        {\n            //Out of 4 Points, get the one that is closest to the current mouse position.\n            var distances = new[] { (Selected.TopLeft - point.Value).Length, (Selected.TopRight - point.Value).Length, (Selected.BottomLeft - point.Value).Length, (Selected.BottomRight - point.Value).Length };\n            var index = Array.IndexOf(distances, distances.Min());\n\n            const int margin = 10;\n\n            var canTopLeft = Selected.Top - monitor.Bounds.Top > _statusHorizontalSize.Height + margin || Selected.Left - monitor.Bounds.Left > _statusVerticalSize.Width + margin;\n            var canBottomLeft = monitor.Bounds.Bottom - Selected.Bottom > _statusHorizontalSize.Height + margin || Selected.Left - monitor.Bounds.Left > _statusVerticalSize.Width + margin;\n\n            switch (index)\n            {\n                case 0: //Top Left.\n                    if (Selected.Top - monitor.Bounds.Top > _statusHorizontalSize.Height + margin)\n                    {\n                        //On top.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top - _statusControlGrid.ActualHeight - margin);\n                        break;\n                    }\n                    else if (Selected.Left - monitor.Bounds.Left > _statusVerticalSize.Width + margin)\n                    {\n                        //To the left.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left - _statusControlGrid.ActualWidth - margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && canBottomLeft)\n                        goto case 2; //Bottom left.\n                    else\n                        goto case 1; //Top right.\n\n                case 1: //Top Right.\n                    if (Selected.Top - monitor.Bounds.Top > _statusHorizontalSize.Height + margin)\n                    {\n                        //On top.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right - _statusControlGrid.ActualWidth);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top - _statusControlGrid.ActualHeight - margin);\n                        break;\n                    }\n                    else if (monitor.Bounds.Right - Selected.Right > _statusVerticalSize.Width + margin)\n                    {\n                        //To the right.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right + margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Top);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && canTopLeft)\n                        goto case 3; //Bottom right.\n                    else\n                        goto case 0; //Top left.\n\n                case 2: //Bottom Left.\n                    if (monitor.Bounds.Bottom - Selected.Bottom > _statusHorizontalSize.Height + margin)\n                    {\n                        //On the bottom.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = false;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left);\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom + margin);\n                        break;\n                    }\n                    else if (Selected.Left - monitor.Bounds.Left > _statusVerticalSize.Width + margin)\n                    {\n                        //To the left.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Left - _statusControlGrid.ActualWidth - margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom - _statusControlGrid.ActualHeight);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && canTopLeft)\n                        goto case 0; //Top left.\n                    else\n                        goto case 3; //Bottom right.\n\n                case 3: //Bottom Right.\n                    if (monitor.Bounds.Bottom - Selected.Bottom > _statusHorizontalSize.Height + margin)\n                    {\n                        //On the bottom.\n                        _statusControlGrid.Rows = 1;\n                        _statusControlGrid.Columns = 3;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right - _statusControlGrid.ActualWidth);\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom + margin);\n                        break;\n                    }\n                    else if (monitor.Bounds.Right - Selected.Right > _statusVerticalSize.Width + margin)\n                    {\n                        //To the right.\n                        _statusControlGrid.Rows = 3;\n                        _statusControlGrid.Columns = 1;\n                        _statusControlGrid.IsReversed = true;\n                        _statusControlGrid.UpdateLayout();\n\n                        Canvas.SetLeft(_statusControlGrid, Selected.Right + margin);\n                        Canvas.SetTop(_statusControlGrid, Selected.Bottom - _statusControlGrid.ActualHeight);\n                        break;\n                    }\n\n                    if (Selected.Width > Selected.Height && canBottomLeft)\n                        goto case 1; //Top right.\n                    else\n                        goto case 2; //Bottom left.\n            }\n        }\n\n        _statusControlGrid.Visibility = Visibility.Visible;\n    }\n\n    private void AdjustFlowControls()\n    {\n        if (_mainCanvas == null)\n            return;\n\n        foreach (var button in _mainCanvas.Children.OfType<ExtendedButton>())\n            button.Visibility = FinishedSelection ? Visibility.Hidden : Visibility.Visible;\n    }\n\n    private void AdjustInfo(Point? point = null)\n    {\n        if (_sizeTextBlock == null)\n            return;\n\n        if (point == null || Selected.IsEmpty || Selected.Width < _sizeTextBlock.ActualWidth || Selected.Height < _sizeTextBlock.ActualHeight)\n        {\n            _sizeTextBlock.Visibility = Visibility.Hidden;\n            return;\n        }\n\n        //Out of 4 Points, get the one that is farthest from the current mouse position.\n        var distances = new[] { (Selected.TopLeft - point.Value).Length, (Selected.TopRight - point.Value).Length, (Selected.BottomLeft - point.Value).Length, (Selected.BottomRight - point.Value).Length };\n        var index = Array.IndexOf(distances, distances.Max());\n\n        switch (index)\n        {\n            case 0:\n                Canvas.SetTop(_sizeTextBlock, Selected.Top);\n                Canvas.SetLeft(_sizeTextBlock, Selected.Left);\n                break;\n            case 1:\n                Canvas.SetTop(_sizeTextBlock, Selected.Top);\n                Canvas.SetLeft(_sizeTextBlock, Selected.Right - _sizeTextBlock.ActualWidth);\n                break;\n            case 2:\n                Canvas.SetTop(_sizeTextBlock, Selected.Bottom - _sizeTextBlock.ActualHeight);\n                Canvas.SetLeft(_sizeTextBlock, Selected.Left);\n                break;\n            case 3:\n                Canvas.SetTop(_sizeTextBlock, Selected.Bottom - _sizeTextBlock.ActualHeight);\n                Canvas.SetLeft(_sizeTextBlock, Selected.Right - _sizeTextBlock.ActualWidth);\n                break;\n        }\n\n        _sizeTextBlock.Visibility = Visibility.Visible;\n    }\n\n    private void DetectBlindSpots()\n    {\n        _blindSpots.Clear();\n\n        if (Mode != ModeType.Region || !UserSettings.All.Magnifier)\n            return;\n\n        //If nothing selected, only the Close button will appear.\n        if (Selected.IsEmpty)// || !FinishedSelection)\n        {\n            foreach (var monitor in Monitors)\n                _blindSpots.Add(new Rect(new Point(monitor.Bounds.Right - 40, monitor.Bounds.Top), new Size(40, 40)));\n\n            return;\n        }\n\n        if (_statusControlGrid.Visibility == Visibility.Visible)\n            _blindSpots.Add(new Rect(new Point(Canvas.GetLeft(_statusControlGrid), Canvas.GetTop(_statusControlGrid)), new Size(_statusControlGrid.ActualWidth, _statusControlGrid.ActualHeight)));\n    }\n\n    internal void Accept()\n    {\n        if (!FinishedSelection)\n            return;\n\n        RaiseAcceptedEvent();\n    }\n\n    public void Retry()\n    {\n        Selected = Rect.Empty;\n\n        FinishedSelection = false;\n\n        AdjustMode();\n        AdjustStatusControls();\n        AdjustFlowControls();\n        DetectBlindSpots();\n        AdjustInfo();\n    }\n\n    public void Cancel()\n    {\n        Selected = Rect.Empty;\n\n        FinishedSelection = false;\n\n        AdjustStatusControls();\n        DetectBlindSpots();\n        RaiseCanceledEvent();\n    }\n\n    public void RaiseAcceptedEvent()\n    {\n        if (SelectionAcceptedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SelectionAcceptedEvent));\n    }\n\n    public void RaiseChangedEvent()\n    {\n        if (SelectionChangedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SelectionChangedEvent));\n    }\n\n    public void RaiseCanceledEvent()\n    {\n        if (SelectionCanceledEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SelectionCanceledEvent));\n    }\n\n    public void AdjustMode()\n    {\n        if (Mode == ModeType.Window)\n            Windows = WindowHelper.EnumerateWindows(Scale).AdjustPosition(SystemParameters.VirtualScreenLeft, SystemParameters.VirtualScreenTop);\n        else if (Mode == ModeType.Fullscreen)\n            Windows = MonitorHelper.AllMonitorsScaled(Scale, true).Select(x => new DetectedRegion(x.Handle, x.Bounds.Offset(-1), x.Name)).ToList();\n        else\n            Windows.Clear();\n    }\n\n    private void CalculateStatusGridSizes()\n    {\n        _statusControlGrid.Rows = 3;\n        _statusControlGrid.Columns = 1;\n        _statusControlGrid.UpdateLayout();\n\n        _statusVerticalSize = new Size(_statusControlGrid.ActualWidth, _statusControlGrid.ActualHeight);\n\n        _statusControlGrid.Rows = 1;\n        _statusControlGrid.Columns = 3;\n        _statusControlGrid.UpdateLayout();\n\n        _statusHorizontalSize = new Size(_statusControlGrid.ActualWidth, _statusControlGrid.ActualHeight);\n    }\n\n    #endregion\n\n    #region Events\n\n    public void OnLoaded(object o, RoutedEventArgs routedEventArgs)\n    {\n        _ready = false;\n\n        Keyboard.Focus(this);\n\n        _blindSpots.Clear();\n\n        if (EmbeddedMode)\n        {\n            var viewBox = new Viewbox\n            {\n                Height = Height,\n                Width = Width,\n                Stretch = Stretch.Uniform,\n                StretchDirection = StretchDirection.Both,\n                Tag = \"T\",\n                ClipToBounds = true,\n                IsHitTestVisible = false,\n                Child = new TextPath\n                {\n                    IsHitTestVisible = false,\n                    Text = LocalizationHelper.Get(\"S.Recorder.SelectArea.Embedded\"),\n                    Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                    Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                    StrokeThickness = 1.6,\n                    FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                    FontSize = 80,\n                    FontWeight = FontWeights.SemiBold,\n                    Margin = new Thickness(80),\n                    VerticalAlignment = VerticalAlignment.Stretch,\n                    HorizontalAlignment = HorizontalAlignment.Stretch,\n                    ClipToBounds = true\n                }\n            };\n\n            _mainCanvas.Children.Insert(0, viewBox);\n\n            Canvas.SetLeft(viewBox, 0);\n            Canvas.SetTop(viewBox, 0);\n            Panel.SetZIndex(viewBox, 0);\n\n            AdjustSelection();\n            return;\n        }\n\n        AdjustZoomView(Mouse.GetPosition(this));\n\n        CalculateStatusGridSizes();\n\n        #region For each monitor\n\n        foreach (var monitor in Monitors)\n        {\n            //Close button.\n            var button = new ExtendedButton\n            {\n                Name = \"CancelButton\",\n                Width = 40,\n                Height = 40,\n                ContentHeight = 25,\n                ContentWidth = 25,\n                ToolTip = LocalizationHelper.Get(\"S.Recorder.CancelSelection\"),\n                Icon = TryFindResource(\"Vector.Cancel\") as Brush,\n                Style = TryFindResource(\"Style.Button.NoText.White\") as Style,\n                Cursor = Cursors.Arrow,\n                Tag = \"T\"\n            };\n\n            button.Click += (sender, e) => { Cancel(); };\n\n            _mainCanvas.Children.Add(button);\n\n            Canvas.SetLeft(button, monitor.Bounds.Right - 40);\n            Canvas.SetTop(button, monitor.Bounds.Top);\n            Panel.SetZIndex(button, 8);\n\n            _blindSpots.Add(new Rect(new Point(monitor.Bounds.Right - 40, monitor.Bounds.Top), new Size(40, 40)));\n        }\n\n        #endregion\n\n        if (Mode == ModeType.Fullscreen)\n        {\n            foreach (var monitor in Monitors)\n            {\n                var viewBox = new Viewbox\n                {\n                    Height = monitor.Bounds.Height,\n                    Width = monitor.Bounds.Width,\n                    Stretch = Stretch.Uniform,\n                    Tag = \"T\",\n                    IsHitTestVisible = false,\n                    Child = new TextPath\n                    {\n                        IsHitTestVisible = false,\n                        Text = \"👆 \" + LocalizationHelper.Get(\"S.Recorder.SelectScreen\"),\n                        Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                        Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                        StrokeThickness = 1.6,\n                        FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                        FontSize = 80,\n                        FontWeight = FontWeights.SemiBold,\n                        Margin = new Thickness(50)\n                    }\n                };\n\n                _mainCanvas.Children.Insert(0, viewBox);\n\n                Canvas.SetLeft(viewBox, monitor.Bounds.Left);\n                Canvas.SetTop(viewBox, monitor.Bounds.Top);\n                Panel.SetZIndex(viewBox, 0);\n            }\n        }\n        else if (Mode == ModeType.Window)\n        {\n            foreach (var window in Windows)\n            {\n                var border = new Border\n                {\n                    Tag = \"T\",\n                    ClipToBounds = true,\n                    IsHitTestVisible = false,\n                    Height = window.Bounds.Height,\n                    Width = window.Bounds.Width,\n                    Child = new Viewbox\n                    {\n                        Stretch = Stretch.Uniform,\n                        StretchDirection = StretchDirection.Both,\n                        VerticalAlignment = VerticalAlignment.Center,\n                        Child = new TextPath\n                        {\n                            IsHitTestVisible = false,\n                            Text = window.Bounds.Width < 400 || window.Bounds.Height < 100 ? \"👆\" : \"👆 \" + LocalizationHelper.Get(\"S.Recorder.SelectWindow\"),\n                            Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                            Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                            StrokeThickness = 1.6,\n                            FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                            FontSize = 80,\n                            FontWeight = FontWeights.SemiBold,\n                            Margin = new Thickness(20),\n                            VerticalAlignment = VerticalAlignment.Stretch,\n                            HorizontalAlignment = HorizontalAlignment.Stretch,\n                        }\n                    }\n                };\n\n                var viewBox = new Viewbox\n                {\n                    Height = window.Bounds.Height,\n                    Width = window.Bounds.Width,\n                    Stretch = Stretch.Uniform,\n                    StretchDirection = StretchDirection.Both,\n                    Tag = \"T\",\n                    ClipToBounds = true,\n                    IsHitTestVisible = false,\n                    VerticalAlignment = VerticalAlignment.Center,\n                    Child = new TextPath\n                    {\n                        IsHitTestVisible = false,\n                        Text = window.Bounds.Width < 400 || window.Bounds.Height < 100 ? \"👆\" : \"👆 \" + LocalizationHelper.Get(\"S.Recorder.SelectWindow\"),\n                        Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                        Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                        StrokeThickness = 1.6,\n                        FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                        FontSize = 80,\n                        FontWeight = FontWeights.SemiBold,\n                        Margin = new Thickness(20),\n                        VerticalAlignment = VerticalAlignment.Stretch,\n                        HorizontalAlignment = HorizontalAlignment.Stretch,\n                        ClipToBounds = true,\n                    }\n                    //Child = new Border\n                    //{\n                    //    Background = PickBrush(),\n                    //    Margin = new Thickness(20),\n                    //    ClipToBounds = true,\n                    //    VerticalAlignment = VerticalAlignment.Bottom,\n                    //    HorizontalAlignment = HorizontalAlignment.Stretch,\n                    //    Child = new TextPath\n                    //    {\n                    //        IsHitTestVisible = false,\n                    //        Text = window.Bounds.Width < 400 || window.Bounds.Height < 100 ? \"👆\"\n                    //            : \"👆 \" + this.TextResource(\"S.Recorder.SelectWindow\"),\n                    //        Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                    //        Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                    //        StrokeThickness = 1.6,\n                    //        FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                    //        FontSize = 80,\n                    //        FontWeight = FontWeights.SemiBold,\n                    //        Margin = new Thickness(20),\n                    //        VerticalAlignment = VerticalAlignment.Bottom,\n                    //        HorizontalAlignment = HorizontalAlignment.Stretch,\n                    //        ClipToBounds = true,\n                    //    }\n                    //}\n                };\n\n                border.UpdateLayout();\n\n                var top = Windows.Where(x => x.Order < window.Order).Select(x => x.Bounds).ToList();\n                var geo = new RectangleGeometry { Rect = new Rect(new Size(window.Bounds.Width, window.Bounds.Height)) }.GetFlattenedPathGeometry(0, ToleranceType.Absolute);\n\n                if (top.Any())\n                {\n                    foreach (var region in top)\n                    {\n                        geo = Geometry.Combine(geo, new RectangleGeometry { Rect = new Rect(new Point(region.X - window.Bounds.X, region.Y - window.Bounds.Y), new Size(region.Width, region.Height)) },\n                            GeometryCombineMode.Exclude, viewBox.RenderTransform);\n                    }\n\n                    border.Clip = geo;\n                }\n\n                _mainCanvas.Children.Insert(0, border);\n\n                Canvas.SetLeft(border, window.Bounds.Left);\n                Canvas.SetTop(border, window.Bounds.Top);\n                Panel.SetZIndex(border, 0);\n            }\n        }\n        else\n        {\n            foreach (var monitor in Monitors)\n            {\n                var viewBox = new Viewbox\n                {\n                    Height = monitor.Bounds.Height,\n                    Width = monitor.Bounds.Width,\n                    Stretch = Stretch.Uniform,\n                    StretchDirection = StretchDirection.Both,\n                    Tag = \"T\",\n                    ClipToBounds = true,\n                    IsHitTestVisible = false,\n                    Child = new TextPath\n                    {\n                        IsHitTestVisible = false,\n                        Text = LocalizationHelper.Get(\"S.Recorder.SelectArea\"),\n                        Fill = new SolidColorBrush(Color.FromArgb(200, 0, 0, 0)),\n                        Stroke = new SolidColorBrush(Color.FromArgb(200, 255, 255, 255)),\n                        StrokeThickness = 1.6,\n                        FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n                        FontSize = 80,\n                        FontWeight = FontWeights.SemiBold,\n                        Margin = new Thickness(80),\n                        VerticalAlignment = VerticalAlignment.Stretch,\n                        HorizontalAlignment = HorizontalAlignment.Stretch,\n                        ClipToBounds = true\n                    }\n                };\n\n                _mainCanvas.Children.Insert(0, viewBox);\n\n                Canvas.SetLeft(viewBox, monitor.Bounds.Left);\n                Canvas.SetTop(viewBox, monitor.Bounds.Top);\n                Panel.SetZIndex(viewBox, 0);\n            }\n        }\n\n        AdjustSelection();\n\n        _ready = true;\n    }\n\n    private void OnUnloaded(object sender, RoutedEventArgs e)\n    {\n        SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged;\n\n        if (_mainCanvas == null)\n            return;\n\n        var list = _mainCanvas.Children.OfType<FrameworkElement>().Where(x => x.Tag as string == \"T\").ToList();\n\n        foreach (var element in list)\n            _mainCanvas.Children.Remove(element);\n    }\n\n    private static void Selected_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(o is SelectControlOld control))\n            return;\n\n        var rounded = MathExtensions.RoundUpValue(control.Scale);\n\n        var width = Math.Round(control.Selected.Size.Width * control.Scale, MidpointRounding.AwayFromZero) - rounded * 2;\n        var height = Math.Round(control.Selected.Size.Height * control.Scale, MidpointRounding.AwayFromZero) - rounded * 2;\n\n        if (control.Selected.IsEmpty || height <= 0 || width <= 0)\n        {\n            control.NonExpandedSelection = control.Selected;\n            return;\n        }\n\n        control.NonExpandedSelection = new Rect(control.Selected.TopLeft, control.Selected.Size).Scale(control.Scale).Offset(rounded);\n\n        control.RaiseChangedEvent(); //Check if makes sense.\n    }\n\n    private static void Mode_Changed(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        var control = o as SelectControlOld;\n\n        control?.AdjustMode();\n    }\n\n    private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Mode != ModeType.Region)\n            return;\n\n        _startPoint = e.GetPosition(this);\n\n        _rectangle.CaptureMouse();\n\n        FinishedSelection = false;\n\n        AdjustStatusControls();\n        DetectBlindSpots();\n        AdjustInfo();\n\n        RaiseChangedEvent(); //Check if makes sense.\n\n        e.Handled = true;\n    }\n\n    private void Rectangle_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (Mode != ModeType.Region || !_rectangle.IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed) return;\n\n        //A quick double click will fire this event, when it should fire the OnMouseLeftButtonUp.\n        if (Selected.IsEmpty || Selected.Width < 10 || Selected.Height < 10)\n            return;\n\n        _rectangle.MouseMove -= Rectangle_MouseMove;\n\n        var currentPosition = e.GetPosition(this);\n\n        var x = Selected.X + (currentPosition.X - _startPoint.X);\n        var y = Selected.Y + (currentPosition.Y - _startPoint.Y);\n\n        if (x < -1)\n            x = -1;\n\n        if (y < -1)\n            y = -1;\n\n        if (x + Selected.Width > ActualWidth + 1)\n            x = ActualWidth + 1 - Selected.Width;\n\n        if (y + Selected.Height > ActualHeight + 1)\n            y = ActualHeight + 1 - Selected.Height;\n\n        Selected = new Rect(x, y, Selected.Width, Selected.Height);\n\n        _startPoint = currentPosition;\n        e.Handled = true;\n\n        AdjustInfo();\n\n        _rectangle.MouseMove += Rectangle_MouseMove;\n    }\n\n    private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        if (Mode != ModeType.Region)\n            return;\n\n        if (_rectangle.IsMouseCaptured)\n            _rectangle?.ReleaseMouseCapture();\n\n        //A quick double quick will fire this event, when it should fire the OnMouseLeftButtonUp.\n        if (Selected.IsEmpty || Selected.Width < 10 || Selected.Height < 10)\n            return;\n\n        FinishedSelection = true;\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n\n        e.Handled = true;\n    }\n\n    private void SizeTextBlock_MouseUp(object sender, MouseButtonEventArgs e)\n    {\n        //Open dialog asking for left/top/width/height.\n        _rectGrid.Visibility = Visibility.Visible;\n    }\n\n    ///<summary>\n    ///Handler for resizing from the top-left.\n    ///</summary>\n    private void HandleTopLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        Selected = new Rect(left, top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the top-right.\n    /// </summary>\n    private void HandleTopRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        Selected = new Rect(Selected.Left, top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the bottom-left.\n    /// </summary>\n    private void HandleBottomLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(left, Selected.Top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-right.\n    /// </summary>\n    private void HandleBottomRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(Selected.Left, Selected.Top, width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the left-middle.\n    /// </summary>\n    private void HandleLeft(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width - e.HorizontalChange, 10);\n        var left = Selected.Left - (width - Selected.Width);\n\n        if (left < 0)\n        {\n            width -= left * -1;\n            left = 0;\n        }\n\n        Selected = new Rect(left, Selected.Top, width, Selected.Height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the top-middle.\n    /// </summary>\n    private void HandleTop(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(Selected.Height - e.VerticalChange, 10);\n        var top = Selected.Top - (height - Selected.Height);\n\n        if (top < 0)\n        {\n            height -= top * -1;\n            top = 0;\n        }\n\n        Selected = new Rect(Selected.Left, top, Selected.Width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    ///  Handler for resizing from the right-middle.\n    /// </summary>\n    private void HandleRight(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var width = Math.Max(Selected.Width + e.HorizontalChange, 10);\n\n        if (Selected.Left + width > ActualWidth)\n            width = ActualWidth - Selected.Left;\n\n        Selected = new Rect(Selected.Left, Selected.Top, width, Selected.Height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        DetectBlindSpots();\n        AdjustStatusControls(point);\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for resizing from the bottom-middle.\n    /// </summary>\n    private void HandleBottom(object sender, DragDeltaEventArgs e)\n    {\n        if (!(sender is Thumb)) return;\n\n        e.Handled = true;\n\n        //Change the size by the amount the user drags the cursor.\n        var height = Math.Max(Selected.Height + e.VerticalChange, 10);\n\n        if (Selected.Top + height > ActualHeight)\n            height = ActualHeight - Selected.Top;\n\n        Selected = new Rect(Selected.Left, Selected.Top, Selected.Width, height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    /// <summary>\n    /// Handler for moving the selection.\n    /// </summary>\n    private void HandleCenter(DragDeltaEventArgs e)\n    {\n        e.Handled = true;\n\n        var sel = new Rect(Selected.Left + e.HorizontalChange, Selected.Top + e.VerticalChange, Selected.Width, Selected.Height);\n\n        #region Limit the drag to inside the bounds\n\n        if (sel.Left < 0)\n            sel.X = 0;\n\n        if (sel.Top < 0)\n            sel.Y = 0;\n\n        if (sel.Right > ActualWidth)\n            sel.X = ActualWidth - sel.Width;\n\n        if (sel.Bottom > ActualHeight)\n            sel.Y = ActualHeight - sel.Height;\n\n        #endregion\n\n        Selected = new Rect(sel.Left, sel.Top, sel.Width, sel.Height);\n\n        var point = Mouse.GetPosition(this);\n\n        AdjustThumbs();\n        AdjustStatusControls(point);\n        DetectBlindSpots();\n        AdjustInfo(point);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/Shapes/Arrow.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\n\nnamespace ScreenToGif.Controls.Shapes;\n\npublic sealed class Arrow : Shape\n{\n    #region Dependency Properties\n\n    public static readonly DependencyProperty X1Property = DependencyProperty.Register(\"X1\", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty Y1Property = DependencyProperty.Register(\"Y1\", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty X2Property = DependencyProperty.Register(\"X2\", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty Y2Property = DependencyProperty.Register(\"Y2\", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty HeadWidthProperty = DependencyProperty.Register(\"HeadWidth\", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty HeadHeightProperty = DependencyProperty.Register(\"HeadHeight\", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure)); \n\n    #endregion\n\n    #region Properties\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double X1\n    {\n        get => (double)GetValue(X1Property);\n        set => SetValue(X1Property, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double Y1\n    {\n        get => (double)GetValue(Y1Property);\n        set => SetValue(Y1Property, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double X2\n    {\n        get => (double)GetValue(X2Property);\n        set => SetValue(X2Property, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double Y2\n    {\n        get => (double)GetValue(Y2Property);\n        set => SetValue(Y2Property, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double HeadWidth\n    {\n        get => (double)GetValue(HeadWidthProperty);\n        set => SetValue(HeadWidthProperty, value);\n    }\n\n    [TypeConverter(typeof(LengthConverter))]\n    public double HeadHeight\n    {\n        get => (double)GetValue(HeadHeightProperty);\n        set => SetValue(HeadHeightProperty, value);\n    }\n\n    #endregion\n\n    #region Overrides\n\n    protected override Geometry DefiningGeometry\n    {\n        get\n        {\n            //var vector = new Point(X2, Y2) - new Point(X1, Y1);\n            //var angle = Vector.AngleBetween(new Vector(1, 0), vector);\n            var geometry = new StreamGeometry();\n            var width = (double.IsNaN(Width) ? ActualWidth : Width) - StrokeThickness;\n            var height = (double.IsNaN(Height) ? ActualHeight : Height) - StrokeThickness;\n\n            using (var sgc = geometry.Open())\n            {\n                //TODO: Add StrokeThickness / 2d to top left\n                sgc.BeginFigure(new Point(width * 0.6898, height * 0.4), true, true);\n                sgc.LineTo(new Point(width * 0, height * 0.4), true, true);\n                sgc.LineTo(new Point(width * 0, height * 0.65), true, true);\n                sgc.LineTo(new Point(width * 0.6898, height * 0.65), true, true);\n                sgc.LineTo(new Point(width * 0.3684, height * 1), true, true);\n                sgc.LineTo(new Point(width * 0.6608, height * 1), true, true);\n                sgc.LineTo(new Point(width * 1, height * 0.5), true, true);\n                sgc.LineTo(new Point(width * 0.6608, height * 0), true, true);\n                sgc.LineTo(new Point(width * 0.3684, height * 0), true, true);\n            }\n\n            //geometry.Transform = new RotateTransform(angle, (Math.Abs(X1) - Math.Abs(X2)) / 2, (Math.Abs(Y1) - Math.Abs(Y2)) / 2);\n            geometry.Freeze();\n\n            return geometry;\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/Shapes/Triangle.cs",
    "content": "using System.Globalization;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\n\nnamespace ScreenToGif.Controls.Shapes;\n\ninternal class Triangle : Shape\n{\n    protected override Geometry DefiningGeometry => Geometry.Parse($\"M {(Width/2d).ToString(CultureInfo.InvariantCulture)},{(StrokeThickness / 2d).ToString(CultureInfo.InvariantCulture)} \" +\n                                                                   $\"L{(Width - (StrokeThickness / 2d)).ToString(CultureInfo.InvariantCulture)},{(Height - (StrokeThickness / 2d)).ToString(CultureInfo.InvariantCulture)} \" +\n                                                                   $\"L {(StrokeThickness / 2d).ToString(CultureInfo.InvariantCulture)},{(Height - (StrokeThickness / 2d)).ToString(CultureInfo.InvariantCulture)} z\");\n}"
  },
  {
    "path": "ScreenToGif/Controls/SpectrumSlider.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Controls;\n//Bug: If the user drags quickly the Thumb and release afterwards, the OnAfterSelection event is not triggered.\n\n#region SpectrumSlider\n\n/// <summary>\n/// Spectrum Slider.\n/// </summary>\npublic class SpectrumSlider : Slider\n{\n    #region Private Fields\n\n    private ColorThumb _colorThumb;\n    private Rectangle _spectrumRectangle;\n    private LinearGradientBrush _pickerBrush;\n\n    public delegate void AfterSelectingEventHandler();\n\n    public event AfterSelectingEventHandler AfterSelecting;\n\n    #endregion\n\n    #region Properties\n\n    public static readonly DependencyProperty SelectedColorProperty = DependencyProperty.Register(nameof(SelectedColor), typeof(Color), typeof(SpectrumSlider), new PropertyMetadata(Colors.Transparent));\n    public static readonly DependencyProperty IsAlphaSpectrumProperty = DependencyProperty.Register(nameof(IsAlphaSpectrum), typeof(bool), typeof(SpectrumSlider), new PropertyMetadata(false));\n    public static readonly DependencyProperty SpectrumColorProperty = DependencyProperty.Register(nameof(SpectrumColor), typeof(Color), typeof(SpectrumSlider), new PropertyMetadata(default(Color), SpectrumColor_ChangedCallback));\n\n    /// <summary>\n    /// Current selected Color.\n    /// </summary>\n    public Color SelectedColor\n    {\n        get => (Color)GetValue(SelectedColorProperty);\n        set => SetValue(SelectedColorProperty, value);\n    }\n\n    /// <summary>\n    /// True if the spectrum will display the same color but under different alpha values.\n    /// </summary>\n    public bool IsAlphaSpectrum\n    {\n        get => (bool)GetValue(IsAlphaSpectrumProperty);\n        set => SetValue(IsAlphaSpectrumProperty, value);\n    }\n\n    /// <summary>\n    /// The color used by the alpha sectrum.\n    /// </summary>\n    public Color SpectrumColor\n    {\n        get => (Color)GetValue(SpectrumColorProperty);\n        set => SetValue(SpectrumColorProperty, value);\n    }\n\n    #endregion\n\n    static SpectrumSlider()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(SpectrumSlider), new FrameworkPropertyMetadata(typeof(SpectrumSlider)));\n    }\n\n    #region Overrides\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _spectrumRectangle = GetTemplateChild(\"PART_SpectrumDisplay\") as Rectangle;\n        _colorThumb = GetTemplateChild(\"Thumb\") as ColorThumb;\n\n        if (_colorThumb != null)\n        {\n            _colorThumb.PreviewMouseLeftButtonUp += ColorThumb_MouseLeftButtonUp;\n            _colorThumb.MouseEnter += ColorThumb_MouseEnter;\n        }\n\n        UpdateColorSpectrum();\n\n        OnValueChanged(double.NaN, Value);\n    }\n\n    protected override void OnValueChanged(double oldValue, double newValue)\n    {\n        base.OnValueChanged(oldValue, newValue);\n\n        SetValue(SelectedColorProperty, ColorExtensions.HsvToRgb(newValue, 1, 1, 255));\n    }\n\n    #endregion\n\n    #region Events\n\n    private void ColorThumb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        AfterSelecting?.Invoke();\n    }\n\n    private void ColorThumb_MouseEnter(object sender, MouseEventArgs e)\n    {\n        if (e.LeftButton == MouseButtonState.Pressed && e.MouseDevice.Captured == null)\n        {\n            //https://social.msdn.microsoft.com/Forums/vstudio/en-US/5fa7cbc2-c99f-4b71-b46c-f156bdf0a75a/making-the-slider-slide-with-one-click-anywhere-on-the-slider?forum=wpf\n            //The left button is pressed on mouse enter, but the mouse isn't captured, so the thumb\n            //must have been moved under the mouse in response to a click on the track thanks to IsMoveToPointEnabled.\n\n            //Generate a MouseLeftButtonDown event.\n            _colorThumb.RaiseEvent(new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left)\n            {\n                RoutedEvent = MouseLeftButtonDownEvent\n            });\n        }\n    }\n\n    private static void SpectrumColor_ChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var box = d as SpectrumSlider;\n        box?.UpdateColorSpectrum();            \n    }\n\n    #endregion\n\n    #region Private Methods\n\n    private void UpdateColorSpectrum()\n    {\n        if (_spectrumRectangle == null)\n            return;\n\n        _pickerBrush = new LinearGradientBrush\n        {\n            StartPoint = new Point(0.5, 0),\n            EndPoint = new Point(0.5, 1),\n            ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation\n        };\n\n        var colorsList = IsAlphaSpectrum ? ColorExtensions.GenerateAlphaSpectrum(SpectrumColor) : ColorExtensions.GenerateHsvSpectrum(40);\n        var stopIncrement = 1d / colorsList.Count;\n        var isDecimal = stopIncrement % 1 > 0;\n\n        for (var i = 0; i < (isDecimal ? colorsList.Count - 1 : colorsList.Count); i++)\n            _pickerBrush.GradientStops.Add(new GradientStop(colorsList[i], i * stopIncrement));\n\n        if (isDecimal)\n            _pickerBrush.GradientStops.Add(new GradientStop(colorsList[colorsList.Count - 1], 1d));\n\n        _spectrumRectangle.Fill = _pickerBrush;\n    }\n\n    #endregion\n}\n\n#endregion\n\n#region HsvColor\n\n/// <summary>\n/// Describes a color in terms of Hue, Saturation, and Value (brightness)\n/// </summary>\ninternal struct HsvColor\n{\n    public double H;\n    public double S;\n    public double V;\n\n    public HsvColor(double h, double s, double v)\n    {\n        H = h;\n        S = s;\n        V = v;\n    }\n}\n\n#endregion\n\n#region ColorThumb\n\n/// <summary>\n/// The Thumb of the Spectrum Slider.\n/// </summary>\npublic class ColorThumb : Thumb\n{\n    static ColorThumb()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorThumb), new FrameworkPropertyMetadata(typeof(ColorThumb)));\n    }\n\n    public static readonly DependencyProperty ThumbColorProperty = DependencyProperty.Register(nameof(ThumbColor), typeof(Color), typeof(ColorThumb), new FrameworkPropertyMetadata(Colors.Transparent));\n    public static readonly DependencyProperty PointerOutlineThicknessProperty = DependencyProperty.Register(nameof(PointerOutlineThickness), typeof(double), typeof(ColorThumb), new FrameworkPropertyMetadata(1.0));\n    public static readonly DependencyProperty PointerOutlineBrushProperty = DependencyProperty.Register(nameof(PointerOutlineBrush), typeof(Brush), typeof(ColorThumb), new FrameworkPropertyMetadata(null));\n\n    /// <summary>\n    /// The color of the Thumb.\n    /// </summary>\n    public Color ThumbColor\n    {\n        get => (Color)GetValue(ThumbColorProperty);\n        set => SetValue(ThumbColorProperty, value);\n    }\n\n    public double PointerOutlineThickness\n    {\n        get => (double)GetValue(PointerOutlineThicknessProperty);\n        set => SetValue(PointerOutlineThicknessProperty, value);\n    }\n\n    public Brush PointerOutlineBrush\n    {\n        get => (Brush)GetValue(PointerOutlineBrushProperty);\n        set => SetValue(PointerOutlineBrushProperty, value);\n    }\n}\n\n#endregion"
  },
  {
    "path": "ScreenToGif/Controls/SplitButton.cs",
    "content": "using System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Controls;\n\npublic class SplitButton : ItemsControl\n{\n    #region Variables\n\n    private ExtendedButton _internalButton;\n    private Popup _mainPopup;\n\n    private ExtendedMenuItem _current;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(SplitButton), new PropertyMetadata(\"\"));\n\n    public static readonly DependencyProperty IconProperty = DependencyProperty.Register(nameof(Icon), typeof(Brush), typeof(SplitButton));\n\n    public static readonly DependencyProperty ContentHeightProperty = DependencyProperty.Register(nameof(ContentHeight), typeof(double), typeof(SplitButton), new FrameworkPropertyMetadata(16d));\n\n    public static readonly DependencyProperty ContentWidthProperty = DependencyProperty.Register(nameof(ContentWidth), typeof(double), typeof(SplitButton), new FrameworkPropertyMetadata(16d));\n\n    public static readonly DependencyProperty SelectedIndexProperty = DependencyProperty.Register(nameof(SelectedIndex), typeof(int), typeof(SplitButton), new FrameworkPropertyMetadata(0,\n        FrameworkPropertyMetadataOptions.AffectsRender, SelectedIndex_ChangedCallback));\n\n    public static readonly DependencyProperty CommandProperty = DependencyProperty.Register(nameof(Command), typeof(ICommand), typeof(SplitButton), new FrameworkPropertyMetadata(null));\n        \n    public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register(nameof(CommandParameter), typeof(object), typeof(SplitButton), new FrameworkPropertyMetadata(null));\n\n    public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(nameof(TextWrapping), typeof(TextWrapping), typeof(SplitButton), new FrameworkPropertyMetadata(TextWrapping.NoWrap,\n        FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsRender));\n\n    #endregion\n\n    #region Properties\n\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    /// <summary>\n    /// The icon of the button as a Brush\n    /// </summary>\n    [Description(\"The icon of the button as a Brush.\")]\n    public Brush Icon\n    {\n        get => (Brush)GetValue(IconProperty);\n        set => SetCurrentValue(IconProperty, value);\n    }\n\n    /// <summary>\n    /// The height of the button content.\n    /// </summary>\n    [Description(\"The height of the button content.\"), Category(\"Common\")]\n    public double ContentHeight\n    {\n        get => (double)GetValue(ContentHeightProperty);\n        set => SetCurrentValue(ContentHeightProperty, value);\n    }\n\n    /// <summary>\n    /// The width of the button content.\n    /// </summary>\n    [Description(\"The width of the button content.\"), Category(\"Common\")]\n    public double ContentWidth\n    {\n        get => (double)GetValue(ContentWidthProperty);\n        set => SetCurrentValue(ContentWidthProperty, value);\n    }\n\n    /// <summary>\n    /// The index of selected item.\n    /// </summary>\n    [Description(\"The index of selected item.\"), Category(\"Common\")]\n    public int SelectedIndex\n    {\n        get => (int)GetValue(SelectedIndexProperty);\n        set => SetCurrentValue(SelectedIndexProperty, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the command associated with the menu item.\n    /// </summary>\n    [Category(\"Action\")]\n    public ICommand Command\n    {\n        get => (ICommand) GetValue(CommandProperty);\n        set => SetValue(CommandProperty, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the parameter to pass to the <see cref=\"Command\"/> property.\n    /// </summary>\n    [Category(\"Action\")]\n    public object CommandParameter\n    {\n        get => GetValue(CommandParameterProperty);\n        set => SetValue(CommandParameterProperty, value);\n    }\n\n    public TextWrapping TextWrapping\n    {\n        get => (TextWrapping)GetValue(TextWrappingProperty);\n        set => SetValue(TextWrappingProperty, value);\n    }\n\n    #endregion\n\n\n    static SplitButton()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(SplitButton), new FrameworkPropertyMetadata(typeof(SplitButton)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _internalButton = Template.FindName(\"ActionButton\", this) as ExtendedButton;\n        _mainPopup = Template.FindName(\"Popup\", this) as Popup;\n\n        PrepareMainAction(this);\n\n        //Raises the click event.\n        _internalButton.Click += (sender, args) => _current?.RaiseEvent(new RoutedEventArgs(MenuItem.ClickEvent));\n\n        //Close on click.\n        foreach (var item in Items.OfType<ExtendedMenuItem>().ToList())\n            item.Click += (sender, args) =>\n            {\n                _mainPopup.IsOpen = false;\n\n                if (!(sender is ExtendedMenuItem menu))\n                    return;\n\n                var index = Items.OfType<ExtendedMenuItem>().Where(w => (w.Tag as string) != \"I\").ToList().IndexOf(menu);\n\n                if (index != -1)\n                    SelectedIndex = index;\n            };\n    }\n\n\n    private static void SelectedIndex_ChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(o is SplitButton split) || !split.IsLoaded)\n            return;\n\n        split.PrepareMainAction(split);\n    }\n\n    private void PrepareMainAction(SplitButton split)\n    {\n        if (split.SelectedIndex < 0)\n            return;\n\n        //Ignore children with the Tag == \"I\".\n        var list = split.Items.OfType<ExtendedMenuItem>().Where(w => (w.Tag as string) != \"I\").ToList();\n\n        if (split.SelectedIndex > list.Count - 1)\n        {\n            split.SelectedIndex = list.Count - 1;\n            return;\n        }\n\n        //I'm using the Tag property to store the resource ID.\n        if (list[split.SelectedIndex].Tag is string reference)\n            split.SetResourceReference(TextProperty, reference);\n        else\n            split.Text = list[split.SelectedIndex].Header as string;\n\n        split.Icon = list[split.SelectedIndex].Icon;\n        split.Command = list[split.SelectedIndex].Command;\n            \n        _current = list[split.SelectedIndex];\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/StatusBand.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Media.Animation;\nusing ScreenToGif.Domain.Enums;\nusing Button = System.Windows.Controls.Button;\nusing Control = System.Windows.Controls.Control;\n\nnamespace ScreenToGif.Controls;\n\npublic class StatusBand : Control\n{\n    #region Variables\n\n    private Grid _warningGrid;\n    private Button _suppressButton;\n\n    #endregion\n\n    #region Dependency Properties/Events\n\n    public static readonly DependencyProperty IdProperty = DependencyProperty.Register(nameof(Id), typeof(int), typeof(StatusBand), new FrameworkPropertyMetadata(0));\n\n    public static readonly DependencyProperty TypeProperty = DependencyProperty.Register(nameof(Type), typeof(StatusType), typeof(StatusBand), new FrameworkPropertyMetadata(StatusType.None));\n\n    public static readonly DependencyProperty ReasonProperty = DependencyProperty.Register(nameof(Reason), typeof(StatusReasons), typeof(StatusBand), new FrameworkPropertyMetadata(StatusReasons.None));\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(StatusBand));\n\n    public static readonly DependencyProperty IsLinkProperty = DependencyProperty.Register(nameof(IsLink), typeof(bool), typeof(StatusBand), new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty StartingProperty = DependencyProperty.Register(nameof(Starting), typeof(bool), typeof(StatusBand), new PropertyMetadata(default(bool)));\n\n    public static readonly RoutedEvent DismissedEvent = EventManager.RegisterRoutedEvent(nameof(Dismissed), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(StatusBand));\n\n    #endregion\n\n    #region Properties\n\n    [Bindable(true), Category(\"Common\")]\n    public int Id\n    {\n        get => (int)GetValue(IdProperty);\n        set => SetValue(IdProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public StatusType Type\n    {\n        get => (StatusType)GetValue(TypeProperty);\n        set => SetValue(TypeProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public StatusReasons Reason\n    {\n        get => (StatusReasons)GetValue(ReasonProperty);\n        set => SetValue(ReasonProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool IsLink\n    {\n        get => (bool)GetValue(IsLinkProperty);\n        set => SetValue(IsLinkProperty, value);\n    }\n\n    /// <summary>\n    /// True if started to display the message.\n    /// </summary>\n    [Bindable(true), Category(\"Common\")]\n    public bool Starting\n    {\n        get => (bool)GetValue(StartingProperty);\n        set => SetValue(StartingProperty, value);\n    }\n\n    /// <summary>\n    /// Event raised when the StatusBand gets dismissed/suppressed.\n    /// </summary>\n    public event RoutedEventHandler Dismissed\n    {\n        add => AddHandler(DismissedEvent, value);\n        remove => RemoveHandler(DismissedEvent, value);\n    }\n\n    public Action Action { get; set; }\n\n    #endregion\n\n    static StatusBand()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(StatusBand), new FrameworkPropertyMetadata(typeof(StatusBand)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        _warningGrid = GetTemplateChild(\"WarningGrid\") as Grid;\n        var link = GetTemplateChild(\"MainHyperlink\") as Hyperlink;\n        _suppressButton = GetTemplateChild(\"SuppressButton\") as ExtendedButton;\n\n        if (_suppressButton != null)\n            _suppressButton.Click += SuppressButton_Click;\n\n        if (Action != null && link != null)\n            link.Click += (sender, args) => Action.Invoke();\n\n        base.OnApplyTemplate();\n    }\n\n    #region Methods\n\n    public void Show(StatusType type, string text, Action action = null)\n    {\n        Action = action;\n\n        //Collapsed-by-default elements do not apply templates.\n        //http://stackoverflow.com/a/2115873/1735672\n        //So it's necessary to do this here.\n        ApplyTemplate();\n\n        Starting = true;\n        Type = type;\n        Text = text;\n        IsLink = action != null;\n\n        if (_warningGrid?.FindResource(\"ShowWarningStoryboard\") is Storyboard show)\n            BeginStoryboard(show);\n    }\n\n    public void Update(string text, Action action = null)\n    {\n        Show(StatusType.Update, text, action);\n    }\n\n    public void Info(string text, Action action = null)\n    {\n        Show(StatusType.Info, text, action);\n    }\n\n    public void Warning(string text, Action action = null)\n    {\n        Show(StatusType.Warning, text, action);\n    }\n\n    public void Error(string text, Action action = null)\n    {\n        Show(StatusType.Error, text, action);\n    }\n\n    public void Hide()\n    {\n        Starting = false;\n\n        if (_warningGrid?.Visibility == Visibility.Collapsed)\n            return;\n\n        if (_warningGrid?.FindResource(\"HideWarningStoryboard\") is Storyboard hide)\n            BeginStoryboard(hide);\n\n        RaiseDismissedEvent();\n    }\n\n    public void RaiseDismissedEvent()\n    {\n        if (DismissedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(DismissedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    public static string KindToString(StatusType kind)\n    {\n        return \"Vector.\" + (kind == StatusType.None ? \"Tag\" : kind == StatusType.Info ? \"Info\" : kind == StatusType.Update ? \"Synchronize\" : kind == StatusType.Warning ? \"Warning\" : \"Cancel.Round\");\n    }\n\n    #endregion\n\n    private void SuppressButton_Click(object sender, RoutedEventArgs e)\n    {\n        Hide();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/StatusList.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Controls;\n\npublic class StatusList : StackPanel\n{\n    #region Dependency Properties/Events\n\n    public static readonly DependencyProperty MaxBandsProperty = DependencyProperty.Register(\"MaxBands\", typeof(int), typeof(StatusBand),\n        new FrameworkPropertyMetadata(5));\n\n    #endregion\n\n    #region Properties\n\n    [Bindable(true), Category(\"Common\")]\n    public int MaxBands\n    {\n        get => (int)GetValue(MaxBandsProperty);\n        set => SetValue(MaxBandsProperty, value);\n    }\n\n    #endregion\n\n    private void Add(StatusType type, string text, StatusReasons reason, Action action = null)\n    {\n        var current = Children.OfType<StatusBand>().FirstOrDefault(x => x.Type == type && x.Text == text);\n\n        if (current != null)\n            Children.Remove(current);\n\n        var band = new StatusBand { Reason = reason };\n        band.Dismissed += (_, _) => Children.Remove(band);\n\n        if (Children.Count >= MaxBands)\n            Children.RemoveAt(0);\n\n        Children.Add(band);\n\n        switch (type)\n        {\n            case StatusType.Info:\n                band.Info(text, action);\n                break;\n            case StatusType.Warning:\n                band.Warning(text, action);\n                break;\n            case StatusType.Error:\n                band.Error(text, action);\n                break;\n        }\n    }\n\n    public void Info(string text, StatusReasons reason = StatusReasons.None, Action action = null)\n    {\n        Add(StatusType.Info, text, reason, action);\n    }\n\n    public void Warning(string text, StatusReasons reason = StatusReasons.InvalidState, Action action = null)\n    {\n        Add(StatusType.Warning, text, reason, action);\n    }\n\n    public void Error(string text, StatusReasons reason, Action action = null)\n    {\n        Add(StatusType.Error, text, reason, action);\n    }\n\n    public void Remove(StatusType type, StatusReasons? reason = null)\n    {\n        var list = Children.OfType<StatusBand>().Where(x => x.Type == type && (!reason.HasValue || x.Reason == reason)).ToList();\n\n        foreach (var band in list)\n            Children.Remove(band);\n    }\n\n    public void Clear()\n    {\n        Children.Clear();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/TextPath.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Documents;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Controls;\n\n/// <inheritdoc />\n/// <summary>\n/// This class generates a Geometry from a block of text in a specific font, weight, etc. and renders it to WPF as a shape.\n/// </summary>\npublic class TextPath : Shape\n{\n    /// <summary>\n    /// Data member that holds the generated geometry\n    /// </summary>\n    private Geometry _textGeometry;\n    private Pen _pen;\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\"Text\", typeof(string), typeof(TextPath), new FrameworkPropertyMetadata(string.Empty,\n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));\n\n    public static readonly DependencyProperty OriginPointProperty = DependencyProperty.Register(\"Origin\", typeof(Point), typeof(TextPath), new FrameworkPropertyMetadata(new Point(0.5, 0.5),\n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty FontFamilyProperty = TextElement.FontFamilyProperty.AddOwner(typeof(TextPath), new FrameworkPropertyMetadata(SystemFonts.MessageFontFamily, \n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));\n\n    public static readonly DependencyProperty FontSizeProperty = TextElement.FontSizeProperty.AddOwner(typeof(TextPath), new FrameworkPropertyMetadata(SystemFonts.MessageFontSize, \n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));\n\n    public static readonly DependencyProperty FontStretchProperty = TextElement.FontStretchProperty.AddOwner(typeof(TextPath), new FrameworkPropertyMetadata(TextElement.FontStretchProperty.DefaultMetadata.DefaultValue, \n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));\n\n    public static readonly DependencyProperty FontStyleProperty = TextElement.FontStyleProperty.AddOwner(typeof(TextPath), new FrameworkPropertyMetadata(SystemFonts.MessageFontStyle, \n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));\n\n    public static readonly DependencyProperty FontWeightProperty = TextElement.FontWeightProperty.AddOwner(typeof(TextPath), new FrameworkPropertyMetadata(SystemFonts.MessageFontWeight, \n        FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));\n\n    #endregion\n\n    #region Property Accessors\n\n    [Bindable(true), Category(\"Appearance\")]\n    [TypeConverter(typeof(PointConverter))]\n    public Point Origin\n    {\n        get => (Point)GetValue(OriginPointProperty);\n        set => SetValue(OriginPointProperty, value);\n    }\n\n    [Bindable(true), Category(\"Appearance\")]\n    [Localizability(LocalizationCategory.Font)]\n    [TypeConverter(typeof(FontFamilyConverter))]\n    public FontFamily FontFamily\n    {\n        get => (FontFamily)GetValue(FontFamilyProperty);\n        set => SetValue(FontFamilyProperty, value);\n    }\n\n    [Bindable(true), Category(\"Appearance\")]\n    [TypeConverter(typeof(FontSizeConverter))]\n    [Localizability(LocalizationCategory.None)]\n    public double FontSize\n    {\n        get => (double)GetValue(FontSizeProperty);\n        set => SetValue(FontSizeProperty, value);\n    }\n\n    [Bindable(true), Category(\"Appearance\")]\n    [TypeConverter(typeof(FontStretchConverter))]\n    public FontStretch FontStretch\n    {\n        get => (FontStretch)GetValue(FontStretchProperty);\n        set => SetValue(FontStretchProperty, value);\n    }\n\n    [Bindable(true), Category(\"Appearance\")]\n    [TypeConverter(typeof(FontStyleConverter))]\n    public FontStyle FontStyle\n    {\n        get => (FontStyle)GetValue(FontStyleProperty);\n        set => SetValue(FontStyleProperty, value);\n    }\n\n    [Bindable(true), Category(\"Appearance\")]\n    [TypeConverter(typeof(FontWeightConverter))]\n    public FontWeight FontWeight\n    {\n        get => (FontWeight)GetValue(FontWeightProperty);\n        set => SetValue(FontWeightProperty, value);\n    }\n\n    [Bindable(true), Category(\"Appearance\")]\n    public string Text\n    {\n        get => (string)GetValue(TextProperty);\n        set => SetValue(TextProperty, value);\n    }\n\n    #endregion\n\n    /// <inheritdoc />\n    /// <summary>\n    /// This method is called to retrieve the geometry that defines the shape.\n    /// </summary>\n    protected override Geometry DefiningGeometry => _textGeometry ?? Geometry.Empty;\n\n    protected override void OnRender(DrawingContext drawingContext)\n    {\n        try\n        {\n            _textGeometry.Transform = new TranslateTransform(-_textGeometry.Bounds.X, -_textGeometry.Bounds.Y + 1);\n        }\n        catch (Exception)\n        {}\n\n        //If the outline of the text should not be rendered outside, use the base OnRender method.\n        if (!UserSettings.All.DrawOutlineOutside)\n        {\n            base.OnRender(drawingContext);\n            return;\n        }\n\n        //This code will draw the outline outside the text.          \n        drawingContext.DrawGeometry(null, _pen, _textGeometry);\n        drawingContext.DrawGeometry(Fill, null, _textGeometry);\n    }\n\n    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)\n    {\n        if (!IsVisible)\n        {\n            base.OnPropertyChanged(e);\n            return;\n        }\n\n        try\n        {\n            _textGeometry = new FormattedText(Text ?? \"\", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight,\n                new Typeface(FontFamily, FontStyle, FontWeight, FontStretch), FontSize, Brushes.Black, VisualTreeHelper.GetDpi(this).PixelsPerDip).BuildGeometry(Origin);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to build text geometry.\");\n\n            try\n            {\n                _textGeometry = new FormattedText(Text ?? \"\", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight,\n                    new Typeface(new FontFamily(\"Arial\"), FontStyle, FontWeight, FontStretch), FontSize, Brushes.Black, VisualTreeHelper.GetDpi(this).PixelsPerDip).BuildGeometry(Origin);\n            }\n            catch (Exception ex2)\n            {\n                LogWriter.Log(ex2, \"Impossible to build text geometry with default font.\");\n            }\n        }\n\n        _pen = new Pen(Stroke, StrokeThickness)\n        {\n            DashCap = PenLineCap.Round,\n            EndLineCap = PenLineCap.Round,\n            LineJoin = PenLineJoin.Round,\n            StartLineCap = PenLineCap.Round,\n            MiterLimit = StrokeMiterLimit\n        };\n\n        InvalidateVisual();\n\n        base.OnPropertyChanged(e);\n    }\n        \n    protected override Size MeasureOverride(Size constraint)\n    {\n        var definingGeometry = DefiningGeometry;\n        var dashStyle = (DashStyle)null;\n\n        if (_pen != null)\n        {\n            dashStyle = _pen.DashStyle;\n\n            if (dashStyle != null)\n                _pen.DashStyle = null;\n        }\n\n        var renderBounds = definingGeometry.GetRenderBounds(_pen);\n\n        if (dashStyle != null)\n            _pen.DashStyle = dashStyle;\n\n        return new Size(Math.Max(renderBounds.Right - renderBounds.X, 0.0), Math.Max(MinHeight, Math.Max(renderBounds.Bottom - renderBounds.Y + 1, 0.0)));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Controls/TimeBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Controls;\n\npublic class TimeBox : ExtendedTextBox\n{\n    private bool _ignore = false;\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty SelectedProperty = DependencyProperty.Register(nameof(Selected), typeof(TimeSpan?), typeof(TimeBox),\n        new FrameworkPropertyMetadata(null, Selected_PropertyChanged));\n\n    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(TimeSpan?), typeof(TimeBox),\n        new FrameworkPropertyMetadata(new TimeSpan(0, 23, 59, 59, 999), Maximum_PropertyChanged));\n\n    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(TimeSpan?), typeof(TimeBox),\n        new FrameworkPropertyMetadata(TimeSpan.Zero, Minimum_PropertyChanged));\n\n    public static readonly DependencyProperty AvoidScrollProperty = DependencyProperty.Register(nameof(AvoidScroll), typeof(bool), typeof(TimeBox),\n        new FrameworkPropertyMetadata(false));\n\n    public static readonly DependencyProperty DisplaySecondsProperty = DependencyProperty.Register(nameof(DisplaySeconds), typeof(bool), typeof(TimeBox),\n        new FrameworkPropertyMetadata(true));\n\n    public static readonly DependencyProperty DisplayMillisecondsProperty = DependencyProperty.Register(nameof(DisplayMilliseconds), typeof(bool), typeof(TimeBox),\n        new FrameworkPropertyMetadata(true));\n\n    public static readonly DependencyProperty DisplayEmptyAsMidnightProperty = DependencyProperty.Register(nameof(DisplayEmptyAsMidnight), typeof(bool), typeof(TimeBox),\n        new FrameworkPropertyMetadata(false));\n\n    #endregion\n\n    #region Property Accessor\n\n    [Bindable(true), Category(\"Common\")]\n    public TimeSpan? Selected\n    {\n        get => (TimeSpan?)GetValue(SelectedProperty);\n        set => SetValue(SelectedProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public TimeSpan? Maximum\n    {\n        get => (TimeSpan?)GetValue(MaximumProperty);\n        set => SetValue(MaximumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public TimeSpan? Minimum\n    {\n        get => (TimeSpan?)GetValue(MinimumProperty);\n        set => SetValue(MinimumProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool AvoidScroll\n    {\n        get => (bool)GetValue(AvoidScrollProperty);\n        set => SetValue(AvoidScrollProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool DisplaySeconds\n    {\n        get => (bool)GetValue(DisplaySecondsProperty);\n        set => SetValue(DisplaySecondsProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool DisplayMilliseconds\n    {\n        get => (bool)GetValue(DisplayMillisecondsProperty);\n        set => SetValue(DisplayMillisecondsProperty, value);\n    }\n\n    [Bindable(true), Category(\"Common\")]\n    public bool DisplayEmptyAsMidnight\n    {\n        get => (bool)GetValue(DisplayEmptyAsMidnightProperty);\n        set => SetValue(DisplayEmptyAsMidnightProperty, value);\n    }\n\n    protected string Format => \"hh':'mm\" + (DisplaySeconds ? \"':'ss\" + (DisplayMilliseconds ? \"'.'fff\" : \"\") : \"\");\n\n    #endregion\n\n    #region Property Changed\n\n    private static void Selected_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is TimeBox timeBox) || timeBox._ignore)\n            return;\n\n        if (timeBox.Selected > timeBox.Maximum)\n        {\n            timeBox.Tag = timeBox.Maximum;\n            timeBox.Selected = timeBox.Maximum;\n        }\n        else if (timeBox.Selected < timeBox.Minimum)\n        {\n            timeBox.Tag = timeBox.Minimum;\n            timeBox.Selected = timeBox.Minimum;\n        }\n\n        timeBox.Text = timeBox.Selected?.ToString(timeBox.Format, CultureInfo.InvariantCulture) ?? \"\";\n    }\n\n    private static void Maximum_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var timeBox = d as TimeBox;\n\n        if (!(timeBox?.Tag is TimeSpan selected))\n            return;\n\n        if (selected > timeBox.Maximum)\n        {\n            timeBox.Tag = timeBox.Maximum;\n            timeBox.Selected = timeBox.Maximum;\n        }\n    }\n\n    private static void Minimum_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        var timeBox = d as TimeBox;\n\n        if (!(timeBox?.Tag is TimeSpan selected))\n            return;\n\n        if (selected < timeBox.Minimum)\n        {\n            timeBox.Tag = timeBox.Minimum;\n            timeBox.Selected = timeBox.Minimum;\n        }\n    }\n\n    #endregion\n\n    static TimeBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(TimeBox), new FrameworkPropertyMetadata(typeof(TimeBox)));\n    }\n\n    #region Overrides\n\n    protected override void OnPreviewTextInput(TextCompositionEventArgs e)\n    {\n        base.OnPreviewTextInput(e);\n\n        if (_ignore)\n            return;\n\n        if (SelectionLength > 0)\n        {\n            e.Handled = false;\n            return;\n        }\n\n        if (Text.Length + e.Text.Length < 2)\n            return;\n\n        #region Hour 01\n\n        if (Text.Length == 1)\n        {\n            //Text property is old. In order to test, add new characters right now.\n            Text += e.TextComposition.Text;\n\n            //Validate if it's a valid hour value (0 - 23).\n            if (int.TryParse(Text.Substring(0, 2), out var hour))\n            {\n                if (hour > 23)\n                    Text = \"23\";\n\n                Select(Text.Length, 0);\n                e.Handled = true;\n            }\n\n            return;\n        }\n\n        #endregion\n\n        #region Minute 01:02\n\n        if (Text.Length == 4)\n        {\n            Text += e.TextComposition.Text;\n\n            //Validate if it's a valid minute value (0 - 59).\n            if (int.TryParse(Text.Substring(3, 2), out var minute))\n            {\n                if (minute > 59)\n                    Text = Text.Substring(0, 3) + \"59\";\n\n                Select(Text.Length, 0);\n                e.Handled = true;\n            }\n\n            return;\n        }\n\n        #endregion\n\n        if (!DisplaySeconds && Text.Length > 4)\n        {\n            UpdateSource();\n\n            if (!e.Handled)\n                MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n\n            e.Handled = true;\n            return;\n        }\n\n        #region Second 01:02:03\n\n        if (Text.Length == 7)\n        {\n            Text = Text.Insert(SelectionStart, e.TextComposition.Text);\n\n            //Validate if it's a valid seconds value (0 to 59).\n            if (int.TryParse(Text.Substring(6, 2), out var second))\n            {\n                if (second > 59)\n                    Text = Text.Substring(0, 6) + \"59\";\n\n                e.Handled = true;\n            }\n        }\n\n        #endregion\n\n        #region Millisecond 01:02:03.004\n\n        if (Text.Length == 11)\n        {\n            Text = Text.Insert(SelectionStart, e.TextComposition.Text);\n\n            //SelectionStart = 7;\n            //SelectionLength = 0;\n        }\n\n        #endregion\n\n        //Don't let the user add more numbers if the maximum length will be surpassed.\n        if (Text.Length > (DisplayMilliseconds ? 11 : 6))\n        {\n            UpdateSource();\n\n            if (!e.Handled)\n                MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n\n            e.Handled = true;\n        }\n    }\n\n    protected override void OnPreviewKeyDown(KeyEventArgs e)\n    {\n        base.OnPreviewKeyDown(e);\n\n        #region Navigation or selection\n\n        if (e.Key == Key.Enter || e.Key == Key.Return || e.Key == Key.Tab || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Escape || e.Key == Key.Home || e.Key == Key.End)\n        {\n            e.Handled = false;\n            return;\n        }\n\n        #endregion\n\n        if (IsReadOnly)\n        {\n            e.Handled = true;\n            return;\n        }\n\n        #region Remove\n\n        if (e.Key == Key.Back || e.Key == Key.Delete)\n        {\n            if (SelectionLength == Text.Length || Text.Length == 1 && (SelectionStart == 0 && e.Key == Key.Delete || SelectionStart == 1 && e.Key == Key.Back))\n            {\n                Text = \"\";\n                RaiseEvent(new RoutedEventArgs(TextChangedEvent));\n                UpdateSource();\n            }\n\n            e.Handled = false;\n            return;\n        }\n\n        #endregion\n\n        #region Colon (:) and period (.)\n\n        if ((e.Key == Key.OemQuestion || e.Key == Key.OemPeriod) && (Keyboard.Modifiers & ModifierKeys.Control) == 0)\n        {\n            var separatorSelected = Text.Substring(SelectionStart, SelectionLength).Contains(\":\") || Text.Substring(SelectionStart, SelectionLength).Contains(\".\");\n\n            //Let it add a separator if in the right position.\n            if (SelectionStart == 2 || SelectionStart == 5 && DisplaySeconds || SelectionStart == 8 || separatorSelected)\n            {\n                e.Handled = false;\n                return;\n            }\n\n            if (Text.Length > 8)\n            {\n                e.Handled = true;\n                return;\n            }\n\n            #region Adds the hour, minute, second and millisecond\n\n            //1 --> 01:\n            //0 --> 01:\n            if (Text.Length == 1)\n                Text = \"0\" + (Text.Equals(\"0\") ? \"1\" : Text) + \":\";\n\n            //01:2 --> 01:02:\n            //01:0 --> 01:01:\n            else if (Text.Length == 4)\n                Text = Text.Substring(0, 3) + \"0\" + (Text.Substring(3, 1).Equals(\"0\") ? \"1\" : Text.Substring(3, 1)) + (DisplaySeconds ? \":\" : \"\");\n\n            //01:02:5 --> 01:02:05\n            //01:02:0 --> 01:02:00\n            else if (Text.Length == 7)\n                Text = Text.Substring(0, 6) + \"0\" + Text.Substring(6, 1);\n\n            //01:02:03.5 --> 01:02:03.005\n            //01:02:03.0 --> 01:02:03.000\n            else if (Text.Length == 10)\n                Text = Text.Substring(0, 9) + Text.Substring(6, 1).PadLeft(3, '0');\n\n            #endregion\n\n            SelectionStart = Text.Length;\n            e.Handled = true;\n            return;\n        }\n\n        #endregion\n\n        #region Numeric\n\n        if (e.Key >= Key.D0 && e.Key <= Key.D9 || e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)\n        {\n            //01\n            if (Text.Length - SelectionLength == 2)\n            {\n                Text = Text + \":\";\n                Select(Text.Length, 0);\n            }\n\n            //01:02\n            if (Text.Length - SelectionLength == 5 && DisplaySeconds)\n            {\n                Text = Text + \":\";\n                Select(Text.Length, 0);\n            }\n\n            //01:02:03\n            if (Text.Length - SelectionLength == 8 && DisplayMilliseconds)\n            {\n                Text = Text + \".\";\n                Select(Text.Length, 0);\n            }\n\n            e.Handled = false;\n            return;\n        }\n\n        #endregion\n\n        #region Value Navigation\n\n        if (Keyboard.Modifiers == ModifierKeys.Control)\n        {\n            //System's actions. Ignore.\n            if (e.Key == Key.A || e.Key == Key.X || e.Key == Key.C || e.Key == Key.V)\n            {\n                e.Handled = false;\n                return;\n            }\n\n            //Now or maximum.\n            if (e.Key == Key.OemSemicolon || e.Key == Key.Oem2)\n            {\n                //Text = DateTime.Now.TimeOfDay.ToString(Format);\n                Selected = Maximum ?? DateTime.Now.TimeOfDay;\n                SelectAll();\n                return;\n            }\n\n            //Increase or decrease.\n            if (e.Key == Key.OemComma || e.Key == Key.Decimal)\n            {\n                Change(Selected, -1, TimeSpan.FromMinutes(1));\n\n                //Text = string.IsNullOrWhiteSpace(Text) ? DateTime.Now.TimeOfDay.ToString(Format) : Text;\n\n                ////Previous minute.\n                //if (TimeSpan.TryParse(Text, out var aux))\n                //{\n                //    if (aux - TimeSpan.FromMinutes(1) < (Minimum ?? TimeSpan.Zero)) //Deal with milliseconds...\n                //    {\n                //        aux = Maximum ?? new TimeSpan(0, 23, 59, 59, 999);\n                //        Text = aux.ToString(Format);\n                //    }\n                //    else\n                //        Text = aux.Add(TimeSpan.FromMinutes(-1)).ToString(Format);\n                //}\n            }\n            else if (e.Key == Key.OemPeriod)\n            {\n                Change(Selected, 1, TimeSpan.FromMinutes(1));\n\n                //Text = string.IsNullOrWhiteSpace(Text) ? DateTime.Now.TimeOfDay.ToString(Format) : Text;\n\n                ////Next minute.\n                //if (TimeSpan.TryParse(Text, out var aux))\n                //{\n                //    if (aux + TimeSpan.FromMinutes(1) > (Maximum ?? new TimeSpan(0, 23, 59, 59, 999))) //Deal with milliseconds...\n                //    {\n                //        aux = Minimum ?? TimeSpan.Zero;\n                //        Text = aux.ToString(Format);\n                //    }\n                //    else\n                //        Text = aux.Add(TimeSpan.FromMinutes(1)).ToString(Format);\n                //}\n            }\n\n            //UpdateSource();\n        }\n\n        #endregion\n    }\n\n    protected override void OnGotFocus(RoutedEventArgs e)\n    {\n        base.OnGotFocus(e);\n\n        SelectAll();\n    }\n\n    protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e)\n    {\n        if (e.NewFocus == e.OldFocus)\n            return;\n\n        //Validate on LostFocus.\n        if (!TimeSpan.TryParse(Text, out var aux))\n        {\n            Selected = null;\n        }\n        else\n        {\n            //If the TryParse converted a single digit group to days, transform it to hours.\n            if (aux.Days > 0 && aux.Days < 24 && aux.Minutes == 0 && aux.Seconds == 0)\n                aux = new TimeSpan(aux.Days, 0, 0);\n\n            Selected = aux;\n        }\n\n        UpdateSource();\n\n        base.OnPreviewLostKeyboardFocus(e);\n    }\n\n    protected override void OnLostKeyboardFocus(KeyboardFocusChangedEventArgs e)\n    {\n        //Validate on LostFocus.\n        if (!TimeSpan.TryParse(Text, out var aux))\n        {\n            Selected = null;\n        }\n        else\n        {\n            //If the TryParse converted a single digit group to days, transform it to hours.\n            if (aux.Days > 0 && aux.Days < 24 && aux.Minutes == 0 && aux.Seconds == 0)\n                aux = new TimeSpan(aux.Days, 0, 0);\n\n            Selected = aux;\n        }\n\n        UpdateSource();\n\n        base.OnLostKeyboardFocus(e);\n    }\n\n    protected override void OnLostFocus(RoutedEventArgs e)\n    {\n        //Validate on LostFocus.\n        if (!TimeSpan.TryParse(Text, out var aux))\n        {\n            Selected = null;\n        }\n        else\n        {\n            //If the TryParse converted a single digit group to days, transform it to hours.\n            if (aux.Days > 0 && aux.Days < 24 && aux.Minutes == 0 && aux.Seconds == 0)\n                aux = new TimeSpan(aux.Days, 0, 0);\n\n            Selected = aux;\n        }\n\n        UpdateSource();\n\n        base.OnLostFocus(e);\n    }\n\n    protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)\n    {\n        if (!IsKeyboardFocusWithin)\n        {\n            e.Handled = true;\n            Focus();\n        }\n    }\n\n    protected override void OnMouseWheel(MouseWheelEventArgs e)\n    {\n        if (IsReadOnly || AvoidScroll || !IsFocused)\n        {\n            base.OnMouseWheel(e);\n            return;\n        }\n\n        switch (Keyboard.Modifiers)\n        {\n            case ModifierKeys.Control: //Milliseconds.\n            {\n                if (!DisplayMilliseconds)\n                    return;\n\n                Selected = Change(Selected, e.Delta, new TimeSpan(0, 0, 0, 0, 100));\n                break;\n            }\n\n            case ModifierKeys.None: //Seconds.\n            {\n                if (!DisplaySeconds)\n                    return;\n\n                Selected = Change(Selected, e.Delta, new TimeSpan(0, 0, 1));\n                break;\n            }\n\n            case ModifierKeys.Shift: //Minutes.\n            {\n                Selected = Change(Selected, e.Delta, new TimeSpan(0, 1, 0));\n                break;\n            }\n\n            case ModifierKeys.Shift | ModifierKeys.Control: //Hours.\n            {\n                Selected = Change(Selected, e.Delta, new TimeSpan(1, 0, 0));\n                break;\n            }\n        }\n\n        e.Handled = true;\n        base.OnMouseWheel(e);\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void UpdateSource()\n    {\n        var prop = GetBindingExpression(TextProperty);\n\n        prop?.UpdateSource();\n    }\n\n    private TimeSpan Change(TimeSpan? current, int delta, TimeSpan amount)\n    {\n        return delta > 0 ? current?.Add(amount) ?? Maximum ?? new TimeSpan(0, 23, 59, 59, 999) :\n            current?.Subtract(amount) ?? Minimum ?? new TimeSpan(0, 0, 0);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/WebcamControl.xaml",
    "content": "﻿<UserControl x:Class=\"ScreenToGif.Controls.WebcamControl\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:ScreenToGif.Controls\" mc:Ignorable=\"d\" \n             d:DesignWidth=\"400\" d:DesignHeight=\"200\"\n             Loaded=\"WebcamControl_OnLoaded\" Unloaded=\"UserControl_Unloaded\"/>"
  },
  {
    "path": "ScreenToGif/Controls/WebcamControl.xaml.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing ScreenToGif.Util;\nusing ScreenToGif.Webcam.DirectX;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif.Controls;\n\npublic partial class WebcamControl : UserControl\n{\n    #region Variables\n\n    public CaptureWebcam Capture { get; set; }\n\n    public Filter VideoDevice { get; set; }\n\n    #endregion\n\n    #region Properties\n\n    public int VideoWidth => Capture?.Width ?? -1;\n\n    public int VideoHeight => Capture?.Height ?? -1;\n\n    #endregion\n\n    public WebcamControl()\n    {\n        InitializeComponent();\n    }\n\n    #region Private Methods\n\n    private bool IsInDesignMode()\n    {\n        return DesignerProperties.GetIsInDesignMode(this);\n    }\n\n    private double Scale()\n    {\n        var source = PresentationSource.FromVisual(this);\n\n        if (source?.CompositionTarget != null)\n            return source.CompositionTarget.TransformToDevice.M11;\n\n        return 1d;\n    }\n\n    #endregion\n\n    #region Public Methods\n\n    public void Refresh()\n    {\n        try\n        {\n            //To change the video device, a dispose is needed.\n            if (Capture != null)\n            {\n                Capture.Dispose();\n                Capture = null;\n            }\n\n            //Create capture object.\n            if (VideoDevice != null)\n            {\n                Capture = new CaptureWebcam(VideoDevice) { PreviewWindow = this, Scale = Scale() };\n                Capture.StartPreview();\n\n                //Width = Height * ((double)Capture.Width / (double)Capture.Height);\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to access the webcam feed.\");\n            ErrorDialog.Ok(\"ScreenToGif\", \"It was not possible to access the webcam's feed\", e.Message, e);\n        }\n    }\n\n    public void Unload()\n    {\n        if (Capture != null)\n        {\n            Capture.StopPreview();\n            Capture.Dispose();\n        }\n\n        VideoDevice = null;\n\n        GC.Collect();\n    }\n\n    #endregion\n\n    #region Events\n\n    private void WebcamControl_OnLoaded(object sender, RoutedEventArgs e)\n    {\n        //Don't show the feed if in design mode.\n        if (IsInDesignMode())\n            return;\n\n        Refresh();\n    }\n\n    private void UserControl_Unloaded(object sender, RoutedEventArgs e)\n    {\n        Unload();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Controls/ZoomBox.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\n\nnamespace ScreenToGif.Controls;\n\n/// <summary>\n/// A zoomable control.\n/// http://www.codeproject.com/Articles/97871/WPF-simple-zoom-and-drag-support-in-a-ScrollViewer\n/// http://www.codeproject.com/Articles/85603/A-WPF-custom-control-for-zooming-and-panning\n/// </summary>\n[TemplatePart(Name = \"ScrollViewer\", Type = typeof(ScrollViewer))]\npublic class ZoomBox : Control\n{\n    #region Variables\n\n    private Point? _lastCenterPositionOnTarget;\n    private Point? _lastMousePositionOnTarget;\n    private Point? _lastDragPoint;\n\n    private ScrollViewer _scrollViewer;\n    private ScaleTransform _scaleTransform;\n    private Grid _grid;\n\n    private double _previousZoom = 1d;\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.Register(\"ImageSource\", typeof(string), typeof(ZoomBox),\n        new FrameworkPropertyMetadata(ImageSource_PropertyChanged));\n\n    public static readonly DependencyProperty ZoomProperty = DependencyProperty.Register(\"Zoom\", typeof(double), typeof(ZoomBox),\n        new FrameworkPropertyMetadata(1.0, FrameworkPropertyMetadataOptions.AffectsRender, Zoom_PropertyChanged));\n\n    public static readonly DependencyProperty ImageScaleProperty = DependencyProperty.Register(\"ImageScale\", typeof(double), typeof(ZoomBox),\n        new FrameworkPropertyMetadata(0.1, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty PixelSizeProperty = DependencyProperty.Register(\"PixelSize\", typeof(Size), typeof(ZoomBox),\n        new FrameworkPropertyMetadata(new Size(0, 0), FrameworkPropertyMetadataOptions.AffectsRender));\n\n    public static readonly DependencyProperty FitImageProperty = DependencyProperty.Register(\"FitImage\", typeof(bool), typeof(ZoomBox),\n        new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender));\n\n    #endregion\n\n    #region Properties\n\n    /// <summary>\n    /// The image source.\n    /// </summary>\n    [Description(\"The image source.\")]\n    public string ImageSource\n    {\n        get => (string)GetValue(ImageSourceProperty);\n        set => SetValue(ImageSourceProperty, value);\n    }\n\n    /// <summary>\n    /// The zoom level of the control.\n    /// </summary>\n    [Description(\"The zoom level of the control.\")]\n    public double Zoom\n    {\n        get => (double)GetValue(ZoomProperty);\n        set => SetCurrentValue(ZoomProperty, value);\n    }\n\n    /// <summary>\n    /// The scale (dpi/96) of the screen.\n    /// </summary>\n    [Description(\"The zoom level of the control.\")]\n    public double ImageScale\n    {\n        get => (double)GetValue(ImageScaleProperty);\n        set => SetCurrentValue(ImageScaleProperty, value);\n    }\n\n    /// <summary>\n    /// The pixel size of the image, independently of DPI.\n    /// </summary>\n    [Description(\"The pixel size of the image, independently of DPI.\")]\n    public Size PixelSize\n    {\n        get => (Size)GetValue(PixelSizeProperty);\n        set => SetCurrentValue(PixelSizeProperty, value);\n    }\n\n    /// <summary>\n    /// Decides if it should fit the image on start.\n    /// </summary>\n    [Description(\"Decides if it should fit the image on start.\")]\n    public bool FitImage\n    {\n        get => (bool)GetValue(FitImageProperty);\n        set => SetCurrentValue(FitImageProperty, value);\n    }\n\n    /// <summary>\n    /// The DPI of the image.\n    /// </summary>\n    public double ImageDpi { get; set; }\n\n    /// <summary>\n    /// The amount of scale of the image x the visuals. \n    /// (Dpi of the images compared with the dpi of the UIElements).\n    /// </summary>\n    public double ScaleDiff { get; set; }\n\n    #endregion\n\n    #region Custom Events\n\n    /// <summary>\n    /// Create a custom routed event by first registering a RoutedEventID, this event uses the bubbling routing strategy.\n    /// </summary>\n    public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent(\"ValueChanged\", RoutingStrategy.Bubble,\n        typeof(RoutedEventHandler), typeof(ZoomBox));\n\n    /// <summary>\n    /// Event raised when the numeric value is changed.\n    /// </summary>\n    public event RoutedEventHandler ValueChanged\n    {\n        add => AddHandler(ValueChangedEvent, value);\n        remove => RemoveHandler(ValueChangedEvent, value);\n    }\n\n    public void RaiseValueChangedEvent()\n    {\n        if (ValueChangedEvent == null || !IsLoaded)\n            return;\n\n        var newEventArgs = new RoutedEventArgs(ValueChangedEvent);\n        RaiseEvent(newEventArgs);\n    }\n\n    #endregion\n\n    static ZoomBox()\n    {\n        DefaultStyleKeyProperty.OverrideMetadata(typeof(ZoomBox), new FrameworkPropertyMetadata(typeof(ZoomBox)));\n    }\n\n    public override void OnApplyTemplate()\n    {\n        base.OnApplyTemplate();\n\n        _scrollViewer = GetTemplateChild(\"ScrollViewer\") as ScrollViewer;\n        _scaleTransform = GetTemplateChild(\"ScaleTransform\") as ScaleTransform;\n        _grid = GetTemplateChild(\"Grid\") as Grid;\n\n        if (_scrollViewer != null)\n        {\n            _scrollViewer.ScrollChanged += OnScrollViewerScrollChanged;\n            _scrollViewer.MouseLeftButtonUp += OnMouseLeftButtonUp;\n            _scrollViewer.PreviewMouseLeftButtonUp += OnMouseLeftButtonUp;\n            _scrollViewer.PreviewMouseRightButtonUp += OnPreviewMouseRightButtonUp;\n            _scrollViewer.PreviewMouseWheel += OnPreviewMouseWheel;\n\n            _scrollViewer.PreviewMouseLeftButtonDown += OnMouseLeftButtonDown;\n            _scrollViewer.MouseMove += OnMouseMove;\n        }\n    }\n\n    #region Events\n\n    private static void ImageSource_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is ZoomBox zoomBox))\n            return;\n\n        zoomBox.ImageSource = e.NewValue as string;\n    }\n\n    private static void Zoom_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is ZoomBox box))\n            return;\n\n        if (!(e.NewValue is double value))\n            return;\n\n        //Maximum and minimum.\n        if (value < 0.1)\n            box.Zoom = 0.1;\n        if (value > 5.0)\n            box.Zoom = 5;\n\n        box.RefreshImage();\n    }\n\n    private static void ImageScale_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (!(d is ZoomBox box))\n            return;\n\n        box.RefreshImage();\n    }\n\n    private void OnPreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        if (Keyboard.IsKeyDown(Key.RightCtrl) || Keyboard.IsKeyDown(Key.LeftCtrl))\n            Reset();\n    }\n\n    private void OnMouseMove(object sender, MouseEventArgs e)\n    {\n        if (!_lastDragPoint.HasValue)\n            return;\n\n        var posNow = e.GetPosition(_scrollViewer);\n\n        var dX = posNow.X - _lastDragPoint.Value.X;\n        var dY = posNow.Y - _lastDragPoint.Value.Y;\n\n        _lastDragPoint = posNow;\n\n        _scrollViewer.ScrollToHorizontalOffset(_scrollViewer.HorizontalOffset - dX);\n        _scrollViewer.ScrollToVerticalOffset(_scrollViewer.VerticalOffset - dY);\n    }\n\n    private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        var mousePos = e.GetPosition(_scrollViewer);\n\n        if (mousePos.X <= _scrollViewer.ViewportWidth && mousePos.Y < _scrollViewer.ViewportHeight) //make sure we still can use the scrollbars\n        {\n            _scrollViewer.Cursor = Cursors.Hand;\n            _lastDragPoint = mousePos;\n            Mouse.Capture(_scrollViewer);\n        }\n    }\n\n    private void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        _scrollViewer.Cursor = Cursors.Arrow;\n        _scrollViewer.ReleaseMouseCapture();\n        _lastDragPoint = null;\n    }\n\n    private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        _lastMousePositionOnTarget = e.GetPosition(_grid);\n\n        switch (Keyboard.Modifiers)\n        {\n            case ModifierKeys.Control:\n\n                #region Zoom\n\n                if (e.Delta > 0)\n                {\n                    if (Zoom < 5.0)\n                        Zoom += 0.1;\n                }\n                if (e.Delta < 0)\n                {\n                    if (Zoom > 0.2)\n                        Zoom -= 0.1;\n                }\n\n                var centerOfViewport = new Point(_scrollViewer.ViewportWidth / 2, _scrollViewer.ViewportHeight / 2);\n                _lastCenterPositionOnTarget = _scrollViewer.TranslatePoint(centerOfViewport, _grid);\n\n                #endregion\n\n                break;\n\n            case ModifierKeys.Alt:\n\n                var verDelta = e.Delta > 0 ? -10.5 : 10.5;\n                _scrollViewer.ScrollToVerticalOffset(_scrollViewer.VerticalOffset + verDelta);\n\n                break;\n\n            case ModifierKeys.Shift:\n\n                var horDelta = e.Delta > 0 ? -10.5 : 10.5;\n                _scrollViewer.ScrollToHorizontalOffset(_scrollViewer.HorizontalOffset + horDelta);\n\n                break;\n        }\n\n        e.Handled = true;\n    }\n\n    private void OnScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)\n    {\n        if (Math.Abs(e.ExtentHeightChange) < 0.01 && Math.Abs(e.ExtentWidthChange) < 0.01)\n            return;\n\n        Point? targetBefore = null;\n        Point? targetNow = null;\n\n        if (!_lastMousePositionOnTarget.HasValue)\n        {\n            if (_lastCenterPositionOnTarget.HasValue)\n            {\n                var centerOfViewport = new Point(_scrollViewer.ViewportWidth / 2, _scrollViewer.ViewportHeight / 2);\n                var centerOfTargetNow = _scrollViewer.TranslatePoint(centerOfViewport, _grid);\n\n                targetBefore = _lastCenterPositionOnTarget;\n                targetNow = centerOfTargetNow;\n            }\n        }\n        else\n        {\n            targetBefore = _lastMousePositionOnTarget;\n            targetNow = Mouse.GetPosition(_grid);\n\n            _lastMousePositionOnTarget = null;\n        }\n\n        if (!targetBefore.HasValue)\n            return;\n\n        var dXInTargetPixels = targetNow.Value.X - targetBefore.Value.X;\n        var dYInTargetPixels = targetNow.Value.Y - targetBefore.Value.Y;\n\n        var multiplicatorX = e.ExtentWidth / _grid.ActualWidth;\n        var multiplicatorY = e.ExtentHeight / _grid.ActualHeight;\n\n        var newOffsetX = _scrollViewer.HorizontalOffset - dXInTargetPixels * multiplicatorX;\n        var newOffsetY = _scrollViewer.VerticalOffset - dYInTargetPixels * multiplicatorY;\n\n        if (double.IsNaN(newOffsetX) || double.IsNaN(newOffsetY))\n            return;\n\n        _scrollViewer.ScrollToHorizontalOffset(newOffsetX);\n        _scrollViewer.ScrollToVerticalOffset(newOffsetY);\n    }\n\n    #endregion\n\n    public void LoadFromPath(string path)\n    {\n        ImageSource = path;\n\n        using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnDemand;\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n\n            PixelSize = new Size(bitmapImage.PixelWidth, bitmapImage.PixelHeight);\n            ImageScale = Math.Round(bitmapImage.DpiX / 96d, 2);\n        }\n\n        RefreshImage();\n    }\n\n    public void RefreshImage()\n    {\n        //ImageScale = ImageSource.ScaleOf();\n\n        //Calculates how much bigger or smaller the image should be presented, based on the window and image scale (DPI/96).\n        ImageDpi = ImageScale * 96d;\n        ScaleDiff = this.Scale() / ImageScale;\n\n        //Apply the zoom, with the scale difference.\n        if (_scaleTransform != null)\n        {\n            _scaleTransform.ScaleX = Zoom / ScaleDiff;\n            _scaleTransform.ScaleY = Zoom / ScaleDiff;\n        }\n\n        //Raise event.\n        RaiseValueChangedEvent();\n    }\n\n    /// <summary>\n    /// Resets the Scale and Position of the Child element.\n    /// </summary>\n    public void Reset()\n    {\n        //Resets the zoom.\n        Zoom = 1;\n\n        //Resets the position.\n        //var tt = GetTranslateTransform(_child);\n        //tt.X = 0.0;\n        //tt.Y = 0.0;\n    }\n\n    /// <summary>\n    /// Save the current zoom level.\n    /// </summary>\n    public void SaveCurrentZoom()\n    {\n        _previousZoom = Zoom;\n    }\n\n    /// <summary>\n    /// Returns to the previously saved zoom level.\n    /// </summary>\n    public void RestoreSavedZoom()\n    {\n        //Resets the zoom.\n        Zoom = _previousZoom;\n    }\n\n    /// <summary>\n    /// Removes the image.\n    /// </summary>\n    public void Clear()\n    {\n        ImageSource = null;\n        GC.Collect(1);\n    }\n\n    /// <summary>\n    /// Gets the ScrollViewer.\n    /// </summary>\n    /// <returns>A ScrollViewer.</returns>\n    public ScrollViewer GetScrollViewer()\n    {\n        return _scrollViewer;\n    }\n\n    /// <summary>\n    /// Gets how the element is displayed, base on current screen DPI versus image DPI.\n    /// </summary>\n    /// <returns>The actual size * the scale of the element.</returns>\n    public Size GetElementSize(bool noScalling = false)\n    {\n        if (_scrollViewer.Content is not FrameworkElement image)\n            return new Size(Math.Max(ActualWidth, 0), Math.Max(ActualHeight, 0));\n\n        var scaleX = noScalling ? 1 : _scaleTransform.ScaleX;\n        var scaleY = noScalling ? 1 : _scaleTransform.ScaleY;\n\n        return new Size(image.ActualWidth * scaleX, image.ActualHeight * scaleY);\n    }\n\n    /// <summary>\n    /// Gets the actual image size.\n    /// </summary>\n    /// <returns>The actual image size.</returns>\n    public Size GetImageSize()\n    {\n        if (_scrollViewer.Content is not FrameworkElement image)\n            return new Size(Math.Max(ActualWidth, 0), Math.Max(ActualHeight, 0));\n\n        //Ignore scale transform?\n        return new Size(image.ActualWidth * ImageScale, image.ActualHeight * ImageScale);\n    }\n\n    public Size MeasureImageSizeAtZoom100(string path)\n    {\n        var image = path.SourceFrom();\n        var imageScale = Math.Round(image.DpiX / 96d, 2);\n        var scaleDiff = this.Scale() / imageScale;\n        //var size = new Size(image.Width * imageScale, image.Height * imageScale);\n\n        return new Size(image.Width * 1d / scaleDiff, image.Height * 1d / scaleDiff);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Docs/Documentation.md",
    "content": "﻿## ScreenToGif Developer Documentation\n\nWould you like to help build this developer documentation? \n\n### Sections\n\nFrom an user perspective, the app is divided into two main parts, the recorders and the editor."
  },
  {
    "path": "ScreenToGif/ImageUtil/ImageMethods.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Codification;\nusing ScreenToGif.Util.Codification.Gif.Decoder;\nusing ScreenToGif.Util.Codification.Gif.LegacyEncoder;\nusing ScreenToGif.Util.Extensions;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Resources;\nusing Image = System.Drawing.Image;\nusing PixelFormat = System.Windows.Media.PixelFormat;\nusing Size = System.Drawing.Size;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.ImageUtil;\n\n/// <summary>\n/// Image algorithms.\n/// </summary>\npublic static class ImageMethods\n{\n    #region Gif transparency\n\n    /// <summary>\n    /// Gets the project, scans the each image in the list, replacing the color with a color that will be treated as transparent by the encoder.\n    /// </summary>\n    /// <param name=\"project\">The exported project.</param>\n    /// <param name=\"source\">The color that will be converted to the chroma key, which in turn will be treated as transparent. If null, takes all colors with transparency and convert to the chroma.</param>\n    /// <param name=\"chroma\">The color that will be treated as transparent.</param>\n    /// <param name=\"taskId\">The id of the encoding task.</param>\n    /// <param name=\"tokenSource\">The cancellation token source.</param>\n    /// <returns>The export project, with the images already scanned and altered.</returns>\n    public static ExportProject PaintAndCutForTransparency(ExportProject project, System.Windows.Media.Color? source, System.Windows.Media.Color chroma, int taskId, CancellationTokenSource tokenSource)\n    {\n        using (var oldStream = new FileStream(project.ChunkPath, FileMode.Open, FileAccess.Read, FileShare.Read))\n        {\n            using (var newStream = new FileStream(project.NewChunkPath, FileMode.Create, FileAccess.Write, FileShare.None))\n            {\n                for (var index = 0; index < project.Frames.Count; index++)\n                {\n                    #region Cancellation\n\n                    if (tokenSource.Token.IsCancellationRequested)\n                    {\n                        EncodingManager.Update(taskId, EncodingStatus.Canceled);\n                        break;\n                    }\n\n                    #endregion\n\n                    #region For each frame\n\n                    EncodingManager.Update(taskId, index);\n\n                    //var watch = Stopwatch.StartNew();\n\n                    #region Get image info\n\n                    oldStream.Position = project.Frames[index].DataPosition;\n                    var pixels = oldStream.ReadBytes((int)project.Frames[index].DataLength);\n\n                    var startY = new bool[project.Frames[index].Rect.Height];\n                    var startX = new bool[project.Frames[index].Rect.Width];\n\n                    var height = project.Frames[index].Rect.Height;\n                    var width = project.Frames[index].Rect.Width;\n                    var blockCount = project.Frames[index].ImageDepth / 8;\n\n                    #endregion\n\n                    //Console.WriteLine(\"Info: \" + watch.Elapsed);\n\n                    //Only use Parallel if the image is big enough.\n                    if (width * height > 150000)\n                    {\n                        #region Parallel loop\n\n                        //x - width - sides\n                        Parallel.For(0, pixels.Length / blockCount, i =>\n                        {\n                            i *= blockCount;\n\n                            //Replace all transparent color to a transparent version of the chroma key.\n                            //Replace all colors that match the source color with a transparent version of the chroma key.\n                            if ((!source.HasValue && pixels[i + 3] == 0) || (source.HasValue && pixels[i] == source.Value.B && pixels[i + 1] == source.Value.G && pixels[i + 2] == source.Value.R))\n                            {\n                                pixels[i] = chroma.B;\n                                pixels[i + 1] = chroma.G;\n                                pixels[i + 2] = chroma.R;\n                                pixels[i + 3] = 0;\n                            }\n                            else\n                            {\n                                var y = i / blockCount / width;\n                                var x = i / blockCount - (y * width);\n\n                                //var current = (y * image1.Width + x) * blockCount == i;\n\n                                startX[x] = true;\n                                startY[y] = true;\n                            }\n                        });\n\n                        #endregion\n                    }\n                    else\n                    {\n                        #region Sequential loop\n\n                        for (var i = 0; i < pixels.Length; i += blockCount)\n                        {\n                            //Replace all transparent color to a transparent version of the chroma key.\n                            //Replace all colors that match the source color with a transparent version of the chroma key.\n\n                            if ((!source.HasValue && pixels[i + 3] == 0) || (source.HasValue && pixels[i] == source.Value.B && pixels[i + 1] == source.Value.G && pixels[i + 2] == source.Value.R))\n                            {\n                                pixels[i] = chroma.B;\n                                pixels[i + 1] = chroma.G;\n                                pixels[i + 2] = chroma.R;\n                                pixels[i + 3] = 0;\n                            }\n                            else\n                            {\n                                //Actual content, that should be ignored.\n                                var y = i / blockCount / width;\n                                var x = i / blockCount - (y * width);\n\n                                //var current = (y * image1.Width + x) * blockCount == i;\n\n                                startX[x] = true;\n                                startY[y] = true;\n                            }\n                        }\n\n                        #endregion\n                    }\n\n                    //Console.WriteLine(\"Change: \" + watch.Elapsed);\n\n                    //First frame gets ignored.\n                    if (index == 0)\n                    {\n                        project.Frames[index].DataPosition = newStream.Position;\n                        project.Frames[index].DataLength = pixels.LongLength;\n\n                        newStream.WriteBytes(pixels);\n                        continue;\n                    }\n\n                    #region Verify positions\n\n                    var firstX = startX.ToList().FindIndex(x => x);\n                    var lastX = startX.ToList().FindLastIndex(x => x);\n\n                    if (firstX == -1)\n                        firstX = 0;\n                    if (lastX == -1)\n                        lastX = width;\n\n                    var firstY = startY.ToList().FindIndex(x => x);\n                    var lastY = startY.ToList().FindLastIndex(x => x);\n\n                    if (lastY == -1)\n                        lastY = height;\n                    if (firstY == -1)\n                        firstY = 0;\n\n                    if (lastX < firstX)\n                    {\n                        var aux = lastX;\n                        lastX = firstX;\n                        firstX = aux;\n                    }\n\n                    if (lastY < firstY)\n                    {\n                        var aux = lastY;\n                        lastY = firstY;\n                        firstY = aux;\n                    }\n\n                    #endregion\n\n                    #region Get the Width and Height\n\n                    var heightCut = Math.Abs(lastY - firstY);\n                    var widthCut = Math.Abs(lastX - firstX);\n\n                    //If nothing changed, shift the delay.\n                    if (heightCut + widthCut == height + width)\n                    {\n                        //TODO: Maximum of 2 bytes, 255 x 100: 25.500 ms\n                        project.Frames[index].Rect = new Int32Rect(0, 0, 0, 0);\n                        project.Frames[index].DataPosition = newStream.Position;\n                        project.Frames[index].DataLength = 0;\n\n                        GC.Collect(1);\n                        continue;\n                    }\n\n                    if (heightCut != height)\n                        heightCut++;\n\n                    if (widthCut != width)\n                        widthCut++;\n\n                    project.Frames[index].Rect = new Int32Rect(firstX, firstY, widthCut, heightCut);\n\n                    #endregion\n\n                    #region Crop and save\n\n                    var newPixels = CropImageArray(pixels, width, 32, project.Frames[index].Rect);\n\n                    project.Frames[index].DataPosition = newStream.Position;\n                    project.Frames[index].DataLength = newPixels.LongLength;\n\n                    newStream.WriteBytes(newPixels);\n\n                    #endregion\n\n                    //Console.WriteLine(\"Save: \" + watch.Elapsed);\n                    //Console.WriteLine();\n\n                    GC.Collect(1);\n\n                    #endregion\n                }\n            }\n        }\n\n        EncodingManager.Update(taskId, LocalizationHelper.Get(\"S.Encoder.SavingAnalysis\"), true);\n\n        //Detect any empty frame.\n        for (var index = project.Frames.Count - 1; index >= 0; index--)\n        {\n            if (project.Frames[index].DataLength == 0)\n                project.Frames[index - 1].Delay += project.Frames[index].Delay;\n        }\n\n        //Replaces the chunk file.\n        File.Delete(project.ChunkPath);\n        File.Move(project.NewChunkPath, project.ChunkPath);\n\n        return project;\n    }\n\n    /// <summary>\n    /// Analyzes all frames (from the end to the start) and paints all unchanged pixels with a given color,\n    /// after, it cuts the image to reduce filesize.\n    /// </summary>\n    /// <param name=\"project\">The project with frames to analyze.</param>\n    /// <param name=\"chroma\">The color to paint the unchanged pixels.</param>\n    /// <param name=\"taskId\">The Id of the current Task.</param>\n    /// <param name=\"tokenSource\">The cancellation token source.</param>\n    /// <returns>The project containing all frames and its cut points.</returns>\n    public static ExportProject PaintTransparentAndCut(ExportProject project, System.Windows.Media.Color chroma, int taskId, CancellationTokenSource tokenSource)\n    {\n        using (var oldStream = new FileStream(project.ChunkPath, FileMode.Open, FileAccess.Read, FileShare.Read))\n        {\n            using (var newFileStream = new FileStream(project.NewChunkPath, FileMode.Create, FileAccess.Write, FileShare.None))\n            {\n                using (var newStream = new BufferedStream(newFileStream, 100 * 1048576)) //Each 1 MB has 1_048_576 bytes.\n                {\n                    for (var index = project.Frames.Count - 1; index > 0; index--)\n                    {\n                        #region Cancellation\n\n                        if (tokenSource.Token.IsCancellationRequested)\n                        {\n                            EncodingManager.Update(taskId, EncodingStatus.Canceled);\n                            break;\n                        }\n\n                        #endregion\n\n                        #region For each frame, from the end to the start\n\n                        EncodingManager.Update(taskId, project.Frames.Count - index - 1);\n\n                        //var watch = Stopwatch.StartNew();\n\n                        #region Get image info\n\n                        oldStream.Position = project.Frames[index - 1].DataPosition;\n                        var image1 = oldStream.ReadBytes((int)project.Frames[index - 1].DataLength); //Previous image.\n                        oldStream.Position = project.Frames[index].DataPosition;\n                        var image2 = oldStream.ReadBytes((int)project.Frames[index].DataLength); //Current image.\n\n                        var startY = new bool[project.Frames[index - 1].Rect.Height];\n                        var startX = new bool[project.Frames[index - 1].Rect.Width];\n\n                        var height = project.Frames[index - 1].Rect.Height;\n                        var width = project.Frames[index - 1].Rect.Width;\n                        var blockCount = project.Frames[index - 1].ImageDepth / 8;\n\n                        #endregion\n\n                        //Console.WriteLine(\"Info: \" + watch.Elapsed);\n\n                        //Only use Parallel if the image is big enough.\n                        if (width * height > 150000)\n                        {\n                            #region Parallel Loop\n\n                            //x - width - sides\n                            Parallel.For(0, image1.Length / blockCount, i =>\n                            {\n                                i *= blockCount;\n\n                                if (image1[i] != image2[i] || image1[i + 1] != image2[i + 1] || image1[i + 2] != image2[i + 2])\n                                {\n                                    //Different pixels should remain.\n                                    var y = i / blockCount / width;\n                                    var x = i / blockCount - (y * width);\n\n                                    //image2[i + 3] = 255; When saving frames with transparency without the 'Enable transparency' ticked, the pixels that changed should be set to opaque.\n\n                                    startX[x] = true;\n                                    startY[y] = true;\n                                }\n                                else\n                                {\n                                    image2[i] = chroma.B;\n                                    image2[i + 1] = chroma.G;\n                                    image2[i + 2] = chroma.R;\n                                    image2[i + 3] = 0;\n                                }\n                            });\n\n                            #endregion\n                        }\n                        else\n                        {\n                            #region Sequential loop\n\n                            for (var i = 0; i < image1.Length; i += blockCount)\n                            {\n                                if (image1[i] != image2[i] || image1[i + 1] != image2[i + 1] || image1[i + 2] != image2[i + 2])\n                                {\n                                    //Different pixels should remain.\n                                    var y = i / blockCount / width;\n                                    var x = i / blockCount - (y * width);\n\n                                    //image2[i + 3] = 255; When saving frames with transparency without the 'Enable transparency' ticked, the pixels that changed should be set to opaque.\n\n                                    startX[x] = true;\n                                    startY[y] = true;\n                                }\n                                else\n                                {\n                                    image2[i] = chroma.B;\n                                    image2[i + 1] = chroma.G;\n                                    image2[i + 2] = chroma.R;\n                                    image2[i + 3] = 0;\n                                }\n                            }\n\n                            #endregion\n                        }\n\n                        //Console.WriteLine(\"Change: \" + watch.Elapsed);\n\n                        #region Verify positions\n\n                        var firstX = startX.ToList().FindIndex(x => x);\n                        var lastX = startX.ToList().FindLastIndex(x => x);\n\n                        if (firstX == -1)\n                            firstX = 0;\n                        if (lastX == -1)\n                            lastX = width;\n\n                        var firstY = startY.ToList().FindIndex(x => x);\n                        var lastY = startY.ToList().FindLastIndex(x => x);\n\n                        if (lastY == -1)\n                            lastY = height;\n                        if (firstY == -1)\n                            firstY = 0;\n\n                        if (lastX < firstX)\n                        {\n                            var aux = lastX;\n                            lastX = firstX;\n                            firstX = aux;\n                        }\n\n                        if (lastY < firstY)\n                        {\n                            var aux = lastY;\n                            lastY = firstY;\n                            firstY = aux;\n                        }\n\n                        #endregion\n\n                        #region Get the Width and Height\n\n                        var heightCut = Math.Abs(lastY - firstY);\n                        var widthCut = Math.Abs(lastX - firstX);\n\n                        //If nothing changed, shift the delay.\n                        if (heightCut + widthCut == height + width)\n                        {\n                            //TODO: Maximum of 2 bytes, 255 x 100: 25.500 ms\n                            project.Frames[index - 1].Delay += project.Frames[index].Delay;\n                            project.Frames[index].Rect = new Int32Rect(0, 0, 0, 0);\n                            project.Frames[index].DataPosition = newStream.Position;\n                            project.Frames[index].DataLength = 0;\n\n                            GC.Collect(1);\n                            continue;\n                        }\n\n                        if (heightCut != height)\n                            heightCut++;\n\n                        if (widthCut != width)\n                            widthCut++;\n\n                        project.Frames[index].Rect = new Int32Rect(firstX, firstY, widthCut, heightCut);\n\n                        #endregion\n\n                        #region Crop and save\n\n                        var newPixels = CropImageArray(image2, width, 32, project.Frames[index].Rect);\n\n                        //Writes to the buffer from end to start. Since I have the position, it does not matter.\n                        project.Frames[index].DataPosition = newStream.Position;\n                        project.Frames[index].DataLength = newPixels.LongLength;\n\n                        newStream.WriteBytes(newPixels);\n\n                        #endregion\n\n                        //SavePixelArrayToFile(newPixels, project.Frames[index].Rect.Width, project.Frames[index].Rect.Height, 4, project.ChunkPath + index + \".png\");\n\n                        //Console.WriteLine(\"Save: \" + watch.Elapsed);\n                        //Console.WriteLine();\n\n                        GC.Collect(1);\n\n                        #endregion\n                    }\n\n                    EncodingManager.Update(taskId, LocalizationHelper.Get(\"S.Encoder.SavingAnalysis\"), true);\n\n                    #region Write the first frame\n\n                    oldStream.Position = project.Frames[0].DataPosition;\n                    var firstFrame = oldStream.ReadBytes((int)project.Frames[0].DataLength);\n\n                    project.Frames[0].DataPosition = newStream.Position;\n                    project.Frames[0].DataLength = firstFrame.LongLength;\n\n                    //SavePixelArrayToFile(firstFrame, project.Frames[0].Rect.Width, project.Frames[0].Rect.Height, 4, project.ChunkPath + 0 + \".png\");\n\n                    newStream.WriteBytes(firstFrame);\n\n                    #endregion\n                }\n            }\n        }\n\n        //Detect the data position of each frame.\n        //for (var index = 1; index < project.Frames.Count - 1; index++)\n        //    project.Frames[index].DataPosition = project.Frames[index - 1].DataLength + project.Frames[index - 1].DataPosition;\n\n        //Replaces the chunk file.\n        File.Delete(project.ChunkPath);\n        File.Move(project.NewChunkPath, project.ChunkPath);\n\n        return project;\n    }\n\n    /// <summary>\n    /// Analyzes all frames (from the end to the start) and paints all unchanged pixels with a given color,\n    /// after, it cuts the image to reduce filesize.\n    /// </summary>\n    /// <param name=\"project\">The project with frames to analyze.</param>\n    /// <param name=\"taskId\">The Id of the Task.</param>\n    /// <param name=\"tokenSource\">The cancellation token source.</param>\n    /// <returns>The project containing all frames and its cut points.</returns>\n    public static ExportProject CutUnchanged(ExportProject project, int taskId, CancellationTokenSource tokenSource)\n    {\n        using (var oldStream = new FileStream(project.ChunkPath, FileMode.Open, FileAccess.Read, FileShare.Read))\n        {\n            using (var newStream = new FileStream(project.NewChunkPath, FileMode.Create, FileAccess.Write, FileShare.None))\n            {\n                for (var index = project.Frames.Count - 1; index > 0; index--)\n                {\n                    #region Cancellation\n\n                    if (tokenSource.Token.IsCancellationRequested)\n                    {\n                        EncodingManager.Update(taskId, EncodingStatus.Canceled);\n                        break;\n                    }\n\n                    #endregion\n\n                    #region For each frame, from the end to the start\n\n                    EncodingManager.Update(taskId, project.Frames.Count - index - 1);\n\n                    //var watch = Stopwatch.StartNew();\n\n                    #region Get image info\n\n                    oldStream.Position = project.Frames[index - 1].DataPosition;\n                    var image1 = oldStream.ReadBytes((int)project.Frames[index - 1].DataLength); //Previous image.\n                    oldStream.Position = project.Frames[index].DataPosition;\n                    var image2 = oldStream.ReadBytes((int)project.Frames[index].DataLength); //Current image.\n\n                    var startY = new bool[project.Frames[index - 1].Rect.Height];\n                    var startX = new bool[project.Frames[index - 1].Rect.Width];\n\n                    var height = project.Frames[index - 1].Rect.Height;\n                    var width = project.Frames[index - 1].Rect.Width;\n                    var blockCount = project.Frames[index - 1].ImageDepth / 8;\n\n                    #endregion\n\n                    //Console.WriteLine(\"Info: \" + watch.Elapsed);\n\n                    //Only use Parallel if the image is big enough.\n                    if (width * height > 150000)\n                    {\n                        #region Parallel Loop\n\n                        //x - width - sides\n                        Parallel.For(0, image1.Length / blockCount, i =>\n                        {\n                            i *= blockCount;\n\n                            if (image1[i] != image2[i] || image1[i + 1] != image2[i + 1] || image1[i + 2] != image2[i + 2])\n                            {\n                                //Different pixels should remain.\n                                var y = i / blockCount / width;\n                                var x = i / blockCount - (y * width);\n\n                                //var current = (y * image1.Width + x) * blockCount == i;\n\n                                startX[x] = true;\n                                startY[y] = true;\n                            }\n                        });\n\n                        #endregion\n                    }\n                    else\n                    {\n                        #region Sequential loop\n\n                        for (var i = 0; i < image1.Length; i += blockCount)\n                        {\n                            if (image1[i] != image2[i] || image1[i + 1] != image2[i + 1] || image1[i + 2] != image2[i + 2])\n                            {\n                                //Different pixels should remain.\n                                var y = i / blockCount / width;\n                                var x = i / blockCount - (y * width);\n\n                                //var current = (y * image1.Width + x) * blockCount == i;\n\n                                startX[x] = true;\n                                startY[y] = true;\n                            }\n                        }\n\n                        #endregion\n                    }\n\n                    //Console.WriteLine(\"Change: \" + watch.Elapsed);\n\n                    #region Verify positions\n\n                    var firstX = startX.ToList().FindIndex(x => x);\n                    var lastX = startX.ToList().FindLastIndex(x => x);\n\n                    if (firstX == -1)\n                        firstX = 0;\n                    if (lastX == -1)\n                        lastX = width;\n\n                    var firstY = startY.ToList().FindIndex(x => x);\n                    var lastY = startY.ToList().FindLastIndex(x => x);\n\n                    if (lastY == -1)\n                        lastY = height;\n                    if (firstY == -1)\n                        firstY = 0;\n\n                    if (lastX < firstX)\n                    {\n                        var aux = lastX;\n                        lastX = firstX;\n                        firstX = aux;\n                    }\n\n                    if (lastY < firstY)\n                    {\n                        var aux = lastY;\n                        lastY = firstY;\n                        firstY = aux;\n                    }\n\n                    #endregion\n\n                    #region Get the Width and Height\n\n                    var heightCut = Math.Abs(lastY - firstY);\n                    var widthCut = Math.Abs(lastX - firstX);\n\n                    //If nothing changed, shift the delay.\n                    if (heightCut + widthCut == height + width)\n                    {\n                        //TODO: Maximum of 2 bytes, 255 x 100: 25.500 ms\n                        project.Frames[index - 1].Delay += project.Frames[index].Delay;\n                        project.Frames[index].Rect = new Int32Rect(0, 0, 0, 0);\n                        project.Frames[index].DataPosition = newStream.Position;\n                        project.Frames[index].DataLength = 0;\n\n                        GC.Collect(1);\n                        continue;\n                    }\n\n                    if (heightCut != height)\n                        heightCut++;\n\n                    if (widthCut != width)\n                        widthCut++;\n\n                    project.Frames[index].Rect = new Int32Rect(firstX, firstY, widthCut, heightCut);\n\n                    #endregion\n\n                    #region Crop and save\n\n                    var newPixels = CropImageArray(image2, width, 32, project.Frames[index].Rect);\n\n                    //Writes to the buffer from end to start. Since I have the position, it does not matter.\n                    project.Frames[index].DataPosition = newStream.Position;\n                    project.Frames[index].DataLength = newPixels.LongLength;\n\n                    newStream.WriteBytes(newPixels);\n\n                    #endregion\n\n                    //Console.WriteLine(\"Save: \" + watch.Elapsed);\n                    //Console.WriteLine();\n\n                    GC.Collect(1);\n\n                    #endregion\n                }\n\n                EncodingManager.Update(taskId, LocalizationHelper.Get(\"S.Encoder.SavingAnalysis\"), true);\n\n                #region Write the first frame\n\n                oldStream.Position = project.Frames[0].DataPosition;\n                var firstFrame = oldStream.ReadBytes((int)project.Frames[0].DataLength);\n\n                project.Frames[0].DataPosition = newStream.Position;\n                project.Frames[0].DataLength = firstFrame.LongLength;\n\n                newStream.WriteBytes(firstFrame);\n\n                #endregion\n            }\n        }\n\n        //Detect the data position of each frame.\n        //for (var index = 1; index < project.Frames.Count - 1; index++)\n        //    project.Frames[index].DataPosition = project.Frames[index - 1].DataLength + project.Frames[index - 1].DataPosition;\n\n        //Replaces the chunk file.\n        File.Delete(project.ChunkPath);\n        File.Move(project.NewChunkPath, project.ChunkPath);\n\n        return project;\n    }\n\n\n    public static List<IFrame> PaintTransparentAndCut(List<IFrame> listToEncode, System.Windows.Media.Color transparent, int taskId, CancellationTokenSource tokenSource)\n    {\n        //First frame rect.\n        var size = listToEncode[0].Path.ScaledSize();\n        listToEncode[0].Rect = new Int32Rect(0, 0, (int)size.Width, (int)size.Height);\n\n        //End to start FOR\n        for (var index = listToEncode.Count - 1; index > 0; index--)\n        {\n            #region Cancellation\n\n            if (tokenSource.Token.IsCancellationRequested)\n            {\n                EncodingManager.Update(taskId, EncodingStatus.Canceled);\n                break;\n            }\n\n            #endregion\n\n            #region For each Frame, from the end to the start\n\n            EncodingManager.Update(taskId, listToEncode.Count - index - 1);\n\n            //var watch = Stopwatch.StartNew();\n\n            #region Get Image Info\n\n            var imageAux1 = listToEncode[index - 1].Path.SourceFrom();\n            var imageAux2 = listToEncode[index].Path.SourceFrom();\n\n            var startY = new bool[imageAux1.PixelHeight];\n            var startX = new bool[imageAux1.PixelWidth];\n\n            var image1 = new PixelUtil(imageAux1); //Previous image\n            var image2 = new PixelUtil(imageAux2); //Actual image\n\n            image1.LockBits();\n            image2.LockBits();\n\n            var height = imageAux1.PixelHeight;\n            var width = imageAux1.PixelWidth;\n            var blockCount = image1.Depth / 8;\n\n            #endregion\n\n            //Console.WriteLine(\"Lock: \" + watch.Elapsed);\n\n            //Only use Parallel if the image is big enough.\n            if (width * height > 150000)\n            {\n                #region Parallel Loop\n\n                //x - width - sides\n                Parallel.For(0, image1.Pixels.Length / blockCount, i =>\n                {\n                    i = i * blockCount;\n\n                    if (image1.Pixels[i] != image2.Pixels[i] || image1.Pixels[i + 1] != image2.Pixels[i + 1] || image1.Pixels[i + 2] != image2.Pixels[i + 2])\n                    {\n                        var y = i / blockCount / image1.Width;\n                        var x = i / blockCount - (y * image1.Width);\n\n                        //var current = (y * image1.Width + x) * blockCount == i;\n\n                        startX[x] = true;\n                        startY[y] = true;\n                    }\n                    else\n                    {\n                        image2.Pixels[i] = transparent.B;\n                        image2.Pixels[i + 1] = transparent.G;\n                        image2.Pixels[i + 2] = transparent.R;\n\n                        if (blockCount == 4)\n                            image2.Pixels[i + 3] = transparent.A; //255;\n                    }\n                });\n\n                #endregion\n            }\n            else\n            {\n                #region Sequential loop\n\n                for (var i = 0; i < image1.Pixels.Length; i += blockCount)\n                {\n                    if (image1.Pixels[i] != image2.Pixels[i] || image1.Pixels[i + 1] != image2.Pixels[i + 1] || image1.Pixels[i + 2] != image2.Pixels[i + 2])\n                    {\n                        var y = i / blockCount / image1.Width;\n                        var x = i / blockCount - (y * image1.Width);\n\n                        //var current = (y * image1.Width + x) * blockCount == i;\n\n                        startX[x] = true;\n                        startY[y] = true;\n                    }\n                    else\n                    {\n                        image2.Pixels[i] = transparent.B;\n                        image2.Pixels[i + 1] = transparent.G;\n                        image2.Pixels[i + 2] = transparent.R;\n\n                        if (blockCount == 4)\n                            image2.Pixels[i + 3] = transparent.A; //255;\n                    }\n                }\n\n                #endregion\n            }\n\n            //Console.WriteLine(\"Change: \" + watch.Elapsed);\n\n            image1.UnlockBitsWithoutCommit();\n\n            //Console.WriteLine(\"Unlock: \" + watch.Elapsed);\n\n            #region Verify positions\n\n            var firstX = startX.ToList().FindIndex(x => x);\n            var lastX = startX.ToList().FindLastIndex(x => x);\n\n            if (firstX == -1)\n                firstX = 0;\n            if (lastX == -1)\n                lastX = imageAux1.PixelWidth;\n\n            var firstY = startY.ToList().FindIndex(x => x);\n            var lastY = startY.ToList().FindLastIndex(x => x);\n\n            if (lastY == -1)\n                lastY = imageAux1.PixelHeight;\n            if (firstY == -1)\n                firstY = 0;\n\n            if (lastX < firstX)\n            {\n                var aux = lastX;\n                lastX = firstX;\n                firstX = aux;\n            }\n\n            if (lastY < firstY)\n            {\n                var aux = lastY;\n                lastY = firstY;\n                firstY = aux;\n            }\n\n            #endregion\n\n            #region Get the Width and Height\n\n            var heightCut = Math.Abs(lastY - firstY);\n            var widthCut = Math.Abs(lastX - firstX);\n\n            //If nothing changed, shift the delay.\n            if (heightCut + widthCut == height + width)\n            {\n                //TODO: Maximum of 2 bytes, 255 x 100: 25.500 ms\n                listToEncode[index - 1].Delay += listToEncode[index].Delay;\n                listToEncode[index].Rect = new Int32Rect(0, 0, 0, 0);\n\n                GC.Collect(1);\n                continue;\n            }\n\n            if (heightCut != height)\n                heightCut++;\n\n            if (widthCut != width)\n                widthCut++;\n\n            listToEncode[index].Rect = new Int32Rect(firstX, firstY, widthCut, heightCut);\n\n            #endregion\n\n            #region Update Image\n\n            using (var fileStream = new FileStream(listToEncode[index].Path, FileMode.Create))\n            {\n                BitmapEncoder encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(image2.UnlockBitsAndCrop(new Int32Rect(firstX, firstY, widthCut, heightCut))));\n                encoder.Save(fileStream);\n            }\n\n            imageAux1 = null;\n            imageAux2 = null;\n\n            #endregion\n\n            //Console.WriteLine(\"Save: \" + watch.Elapsed);\n            //Console.WriteLine();\n\n            GC.Collect(1);\n\n            #endregion\n        }\n\n        return listToEncode;\n    }\n\n    public static List<IFrame> CutUnchanged(List<IFrame> listToEncode, int id, CancellationTokenSource tokenSource)\n    {\n        //First frame rect.\n        var size = listToEncode[0].Path.ScaledSize();\n        listToEncode[0].Rect = new Int32Rect(0, 0, (int)size.Width, (int)size.Height);\n\n        //End to start FOR\n        for (var index = listToEncode.Count - 1; index > 0; index--)\n        {\n            #region Cancellation\n\n            if (tokenSource.Token.IsCancellationRequested)\n            {\n                EncodingManager.Update(id, EncodingStatus.Canceled);\n                break;\n            }\n\n            #endregion\n\n            #region For each Frame, from the end to the start\n\n            EncodingManager.Update(id, listToEncode.Count - index - 1);\n\n            #region Get Image Info\n\n            var imageAux1 = listToEncode[index - 1].Path.From();\n            var imageAux2 = listToEncode[index].Path.From();\n\n            var startY = new bool[imageAux1.Height];\n            var startX = new bool[imageAux1.Width];\n\n            var image1 = new PixelUtilOld(imageAux1); //Previous image\n            var image2 = new PixelUtilOld(imageAux2); //Actual image\n\n            image1.LockBits();\n            image2.LockBits();\n\n            var height = imageAux1.Height;\n            var width = imageAux1.Width;\n\n            #endregion\n\n            //Only use Parallel if the image is big enough.\n            if (width * height > 150000)\n            {\n                #region Parallel Loop\n\n                //x - width - sides\n                Parallel.For(0, width, x =>\n                {\n                    //y - height - up/down\n                    for (var y = 0; y < height; y++)\n                    {\n                        if (image1.GetPixel(x, y) != image2.GetPixel(x, y))\n                        {\n                            #region Get the Changed Pixels\n\n                            startX[x] = true;\n                            startY[y] = true;\n\n                            #endregion\n                        }\n                    }\n                }); //SPEEEEEED, a lot!\n\n                #endregion\n            }\n            else\n            {\n                #region Sequential Loop\n\n                //x - width - sides\n                for (var x = 0; x < width; x++)\n                {\n                    //y - height - up/down\n                    for (var y = 0; y < height; y++)\n                    {\n                        #region For each Pixel\n\n                        if (image1.GetPixel(x, y) == image2.GetPixel(x, y)) continue;\n\n                        #region Get the Changed Pixels\n\n                        startX[x] = true;\n                        startY[y] = true;\n\n                        #endregion\n\n                        #endregion\n                    }\n                }\n\n                #endregion\n            }\n\n            image1.UnlockBits();\n            image2.UnlockBits();\n\n            #region Verify positions\n\n            var firstX = startX.ToList().FindIndex(x => x);\n            var lastX = startX.ToList().FindLastIndex(x => x);\n\n            if (firstX == -1)\n                firstX = 0;\n\n            if (lastX == -1)\n                lastX = imageAux1.Width;\n\n            var firstY = startY.ToList().FindIndex(x => x);\n            var lastY = startY.ToList().FindLastIndex(x => x);\n\n            if (lastY == -1)\n                lastY = imageAux1.Height;\n\n            if (firstY == -1)\n                firstY = 0;\n\n            if (lastX < firstX)\n            {\n                var aux = lastX;\n                lastX = firstX;\n                firstX = aux;\n            }\n\n            if (lastY < firstY)\n            {\n                var aux = lastY;\n                lastY = firstY;\n                firstY = aux;\n            }\n\n            #endregion\n\n            #region Get the Width and Height\n\n            var heightCut = Math.Abs(lastY - firstY);\n            var widthCut = Math.Abs(lastX - firstX);\n\n            //If nothing changed, shift the delay.\n            if (heightCut + widthCut == height + width)\n            {\n                listToEncode[index - 1].Delay += listToEncode[index].Delay;\n                listToEncode[index].Rect = new Int32Rect(0, 0, 0, 0);\n\n                GC.Collect(1);\n                continue;\n            }\n\n            if (heightCut != height)\n            {\n                heightCut++;\n            }\n\n            if (widthCut != width)\n            {\n                widthCut++;\n            }\n\n            listToEncode[index].Rect = new Int32Rect(firstX, firstY, widthCut, heightCut);\n\n            #endregion\n\n            #region Update Image Info and Save\n\n            //Cut the images and get the new values.\n            var imageSave2 = new Bitmap(imageAux2.Clone(new Rectangle(firstX, firstY, widthCut, heightCut), imageAux2.PixelFormat));\n\n            imageAux2.Dispose();\n            imageAux1.Dispose();\n\n            imageSave2.Save(listToEncode[index].Path);\n\n            #endregion\n\n            GC.Collect(1);\n\n            #endregion\n        }\n\n        return listToEncode;\n    }\n\n\n    /// <summary>\n    /// Calculates the difference between one given frame and another.\n    /// </summary>\n    /// <param name=\"first\">The first frame to compare.</param>\n    /// <param name=\"second\">The second frame to compare.</param>\n    /// <returns>The similarity between the two frames in percentage.</returns>\n    public static decimal CalculateDifference(IFrame first, IFrame second)\n    {\n        using var imageAux1 = first.Path.From();\n        using var imageAux2 = second.Path.From();\n\n        #region Get Image Info\n\n        var height = imageAux1.Height;\n        var width = imageAux1.Width;\n        var pixelCount = height * width;\n\n        #endregion\n\n        var changedPixelCount = EnumerateIndexOfNonEqualPixels(imageAux1, imageAux2).AsParallel().Count();\n\n        return MathExtensions.CrossMultiplication((decimal)pixelCount, pixelCount - changedPixelCount, null);\n    }\n\n    private static IEnumerable<int> EnumerateIndexOfNonEqualPixels(Bitmap imageAux1, Bitmap imageAux2)\n    {\n        if (imageAux1.PixelFormat != imageAux2.PixelFormat)\n        {\n            throw new ArgumentException(\"Images need to have same PixelFormat.\");\n        }\n\n        if(Image.GetPixelFormatSize(imageAux1.PixelFormat) > 32)\n        {\n            throw new ArgumentException(\"PixelFormat not supported.\");\n        }\n\n        var height = imageAux1.Height;\n        var width = imageAux1.Width;\n\n        var lineBuffer1 = new int[width];\n        var lineBuffer2 = new int[width];\n        var format = System.Drawing.Imaging.PixelFormat.Format32bppArgb;\n\n        for (int y = 0; y < height; y++)\n        {\n            PixelUtilOld.ReadLine(imageAux1, format, y, lineBuffer1);\n            PixelUtilOld.ReadLine(imageAux2, format, y, lineBuffer2);\n\n            for (int x = 0; x < width; x++)\n            {\n                if (lineBuffer1[x] != lineBuffer2[x])\n                    yield return x + y * width;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Color distance calculation.\n    /// https://www.compuphase.com/cmetric.htm\n    /// </summary>\n    public static double ColorDistance(Color e1, Color e2)\n    {\n        var rmean = (e1.R + (long)e2.R) / 2;\n        var r = e1.R - (long)e2.R;\n        var g = e1.G - (long)e2.G;\n        var b = e1.B - (long)e2.B;\n\n        return Math.Sqrt((((512 + rmean) * r * r) >> 8) + 4 * g * g + (((767 - rmean) * b * b) >> 8));\n    }\n\n    public static double ColorDistance(byte b1, byte g1, byte r1, byte b2, byte g2, byte r2)\n    {\n        var rMean = (r1 + (long)r2) / 2;\n        var r = r1 - (long)r2;\n        var g = g1 - (long)g2;\n        var b = b1 - (long)b2;\n\n        return Math.Sqrt((((512 + rMean) * r * r) >> 8) + 4 * g * g + (((767 - rMean) * b * b) >> 8));\n    }\n\n    #endregion\n\n    #region Import From Gif\n\n    public static BitmapDecoder GetDecoder(string fileName, out GifFile gifFile)\n    {\n        gifFile = null;\n        BitmapDecoder decoder = null;\n\n        using (var stream = new FileStream(fileName, FileMode.Open))\n        {\n            stream.Position = 0;\n            decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);\n\n            if (decoder is GifBitmapDecoder)// && !CanReadNativeMetadata(decoder))\n            {\n                stream.Position = 0;\n                gifFile = GifFile.ReadGifFile(stream, true);\n            }\n\n            //if (decoder == null)\n            //    throw new InvalidOperationException(\"Can't get a decoder from the source.\");\n        }\n\n        return decoder;\n    }\n\n    private static bool CanReadNativeMetadata(BitmapDecoder decoder)\n    {\n        try\n        {\n            var m = decoder.Metadata;\n            return m != null;\n        }\n        catch\n        {\n            return false;\n        }\n    }\n\n    public static System.Drawing.Size GetFullSize(BitmapDecoder decoder, GifFile gifMetadata)\n    {\n        if (gifMetadata != null)\n        {\n            var lsd = gifMetadata.Header.LogicalScreenDescriptor;\n            return new System.Drawing.Size(lsd.Width, lsd.Height);\n        }\n\n        var width = decoder.Metadata.GetQueryOrDefault(\"/logscrdesc/Width\", 0);\n        var height = decoder.Metadata.GetQueryOrDefault(\"/logscrdesc/Height\", 0);\n        return new System.Drawing.Size(width, height);\n    }\n\n    private static T GetQueryOrDefault<T>(this BitmapMetadata metadata, string query, T defaultValue)\n    {\n        if (metadata.ContainsQuery(query))\n            return (T)Convert.ChangeType(metadata.GetQuery(query), typeof(T));\n\n        return defaultValue;\n    }\n\n    public static FrameMetadata GetFrameMetadata(BitmapDecoder decoder, GifFile gifMetadata, int frameIndex)\n    {\n        if (gifMetadata != null && gifMetadata.Frames.Count > frameIndex)\n            return GetFrameMetadata(gifMetadata.Frames[frameIndex]);\n\n        return GetFrameMetadata(decoder.Frames[frameIndex]);\n    }\n\n    private static FrameMetadata GetFrameMetadata(BitmapFrame frame)\n    {\n        var metadata = (BitmapMetadata)frame.Metadata;\n        var delay = TimeSpan.FromMilliseconds(100);\n        var metadataDelay = metadata.GetQueryOrDefault(\"/grctlext/Delay\", 10);\n\n        if (metadataDelay != 0)\n            delay = TimeSpan.FromMilliseconds(metadataDelay * 10);\n\n        var disposalMethod = (FrameDisposalMethod)metadata.GetQueryOrDefault(\"/grctlext/Disposal\", 0);\n\n        var frameMetadata = new FrameMetadata\n        {\n            Left = metadata.GetQueryOrDefault(\"/imgdesc/Left\", 0),\n            Top = metadata.GetQueryOrDefault(\"/imgdesc/Top\", 0),\n            Width = metadata.GetQueryOrDefault(\"/imgdesc/Width\", frame.PixelWidth),\n            Height = metadata.GetQueryOrDefault(\"/imgdesc/Height\", frame.PixelHeight),\n            Delay = delay,\n            DisposalMethod = disposalMethod\n        };\n\n        return frameMetadata;\n    }\n\n    private static FrameMetadata GetFrameMetadata(GifFrame gifMetadata)\n    {\n        var d = gifMetadata.Descriptor;\n\n        var frameMetadata = new FrameMetadata\n        {\n            Left = d.Left,\n            Top = d.Top,\n            Width = d.Width,\n            Height = d.Height,\n            Delay = TimeSpan.FromMilliseconds(100),\n            DisposalMethod = FrameDisposalMethod.None\n        };\n\n        var control = gifMetadata.Extensions.OfType<GifGraphicControlExtension>().FirstOrDefault();\n\n        if (control == null)\n            return frameMetadata;\n\n        if (control.Delay != 0)\n            frameMetadata.Delay = TimeSpan.FromMilliseconds(control.Delay);\n\n        frameMetadata.DisposalMethod = (FrameDisposalMethod) control.DisposalMethod;\n\n        return frameMetadata;\n    }\n\n    public static BitmapSource MakeFrame(System.Drawing.Size fullSize, BitmapSource rawFrame, FrameMetadata metadata, BitmapSource baseFrame, double? forceDpi = null)\n    {\n        //I removed this so I could save as Pbgra32.\n        //if (baseFrame == null && IsFullFrame(metadata, fullSize))\n        //{\n        //    //No previous image to combine with, and same size as the full image, so just return as is.\n        //    return rawFrame;\n        //}\n\n        var visual = new DrawingVisual();\n        using (var context = visual.RenderOpen())\n        {\n            if (baseFrame != null)\n            {\n                var fullRect = new Rect(0, 0, fullSize.Width, fullSize.Height);\n                context.DrawImage(baseFrame, fullRect);\n            }\n\n            var rect = new Rect(metadata.Left, metadata.Top, metadata.Width, metadata.Height);\n            context.DrawImage(rawFrame, rect);\n        }\n\n        var bitmap = new RenderTargetBitmap(fullSize.Width, fullSize.Height, forceDpi ?? rawFrame.DpiX, forceDpi ?? rawFrame.DpiY, PixelFormats.Pbgra32);\n        bitmap.Render(visual);\n\n        if (bitmap.CanFreeze && !bitmap.IsFrozen)\n            bitmap.Freeze();\n\n        return bitmap;\n    }\n\n    public static bool IsFullFrame(FrameMetadata metadata, System.Drawing.Size fullSize)\n    {\n        return metadata.Left == 0 && metadata.Top == 0 && metadata.Width == fullSize.Width && metadata.Height == fullSize.Height;\n    }\n\n    public static BitmapSource ClearArea(BitmapSource frame, FrameMetadata metadata, double? forcedDpi = null)\n    {\n        var visual = new DrawingVisual();\n        using (var context = visual.RenderOpen())\n        {\n            var fullRect = new Rect(0, 0, frame.PixelWidth, frame.PixelHeight);\n            var clearRect = new Rect(metadata.Left, metadata.Top, metadata.Width, metadata.Height);\n            var clip = Geometry.Combine(new RectangleGeometry(fullRect), new RectangleGeometry(clearRect), GeometryCombineMode.Exclude, null);\n\n            context.PushClip(clip);\n            context.DrawImage(frame, fullRect);\n        }\n\n        var bitmap = new RenderTargetBitmap(frame.PixelWidth, frame.PixelHeight, forcedDpi ?? frame.DpiX, forcedDpi ?? frame.DpiY, PixelFormats.Pbgra32);\n        bitmap.Render(visual);\n\n        if (bitmap.CanFreeze && !bitmap.IsFrozen)\n            bitmap.Freeze();\n\n        return bitmap;\n    }\n\n    /// <summary>\n    /// Return frame(s) as list of binary from jpeg, png, bmp or gif image file\n    /// </summary>\n    /// <param name=\"fileName\">image file name</param>\n    /// <returns>System.Collections.Generic.List of byte</returns>\n    [Obsolete]\n    public static List<Bitmap> GetFrames(string fileName)\n    {\n        var tmpFrames = new List<byte[]>();\n\n        // Check the image format to determine what format\n        // the image will be saved to the memory stream in\n        var guidToImageFormatMap = new Dictionary<Guid, ImageFormat>()\n        {\n            {ImageFormat.Bmp.Guid,  ImageFormat.Bmp},\n            {ImageFormat.Gif.Guid,  ImageFormat.Png},\n            {ImageFormat.Icon.Guid, ImageFormat.Png},\n            {ImageFormat.Jpeg.Guid, ImageFormat.Jpeg},\n            {ImageFormat.Png.Guid,  ImageFormat.Png}\n        };\n\n        using (var gifImg = Image.FromFile(fileName, true))\n        {\n            var imageGuid = gifImg.RawFormat.Guid;\n\n            var imageFormat = (from pair in guidToImageFormatMap where imageGuid == pair.Key select pair.Value).FirstOrDefault();\n\n            if (imageFormat == null)\n                throw new NoNullAllowedException(\"Unable to determine image format\");\n\n            //Get the frame count\n            var dimension = new FrameDimension(gifImg.FrameDimensionsList[0]);\n            var frameCount = gifImg.GetFrameCount(dimension);\n\n            //Step through each frame\n            for (var i = 0; i < frameCount; i++)\n            {\n                //Set the active frame of the image and then\n                gifImg.SelectActiveFrame(dimension, i);\n\n                //write the bytes to the tmpFrames array\n                using (var ms = new MemoryStream())\n                {\n                    gifImg.Save(ms, imageFormat);\n                    tmpFrames.Add(ms.ToArray());\n                }\n            }\n\n            //Get list of frame(s) from image file.\n            var myBitmaps = new List<Bitmap>();\n\n            foreach (var item in tmpFrames)\n            {\n                var tmpBitmap = ConvertBytesToImage(item);\n\n                if (tmpBitmap != null)\n                {\n                    myBitmaps.Add(tmpBitmap);\n                }\n            }\n\n            return myBitmaps;\n        }\n    }\n\n    /// <summary>\n    /// Convert bytes to Bitamp\n    /// </summary>\n    /// <param name=\"imageBytes\">Image in a byte type</param>\n    /// <returns>System.Drawing.Bitmap</returns>\n    private static Bitmap ConvertBytesToImage(byte[] imageBytes)\n    {\n        if (imageBytes == null || imageBytes.Length == 0)\n            return null;\n\n        //Read bytes into a MemoryStream\n        using (var ms = new MemoryStream(imageBytes))\n        {\n            //Recreate the frame from the MemoryStream\n            using (var bmp = new Bitmap(ms))\n                return (Bitmap)bmp.Clone();\n        }\n    }\n\n    #endregion\n\n    #region Create and Save Images\n\n    /// <summary>\n    /// Creates a solid color BitmapSource.\n    /// </summary>\n    /// <param name=\"color\">The Background color.</param>\n    /// <param name=\"width\">The Width of the image.</param>\n    /// <param name=\"height\">The Height of the image.</param>\n    /// <param name=\"dpi\">The dpi of the image.</param>\n    /// <param name=\"pixelFormat\">The PixelFormat.</param>\n    /// <returns>A BitmapSource of the given parameters.</returns>\n    public static BitmapSource CreateEmtpyBitmapSource(System.Windows.Media.Color color, int width, int height, double dpi, PixelFormat pixelFormat)\n    {\n        var rawStride = (width * pixelFormat.BitsPerPixel + 7) / 8;\n        var rawImage = new byte[rawStride * height];\n\n        var colors = new List<System.Windows.Media.Color> { color };\n        var myPalette = new BitmapPalette(colors);\n\n        return BitmapSource.Create(width, height, dpi, dpi, pixelFormat, myPalette, rawImage, rawStride);\n    }\n\n    /// <summary>\n    /// Converts a BitmapSource to a BitmapImage.\n    /// </summary>\n    /// <typeparam name=\"T\">A BitmapEncoder derived class.</typeparam>\n    /// <param name=\"bitmapSource\">The source to convert.</param>\n    /// <returns>A converted BitmapImage.</returns>\n    private static BitmapImage GetBitmapImage<T>(BitmapSource bitmapSource) where T : BitmapEncoder, new()\n    {\n        var frame = BitmapFrame.Create(bitmapSource);\n        var encoder = new T();\n        encoder.Frames.Add(frame);\n\n        var bitmapImage = new BitmapImage();\n        bool isCreated;\n\n        try\n        {\n            using (var ms = new MemoryStream())\n            {\n                encoder.Save(ms);\n\n                bitmapImage.BeginInit();\n                bitmapImage.StreamSource = ms;\n                bitmapImage.EndInit();\n                isCreated = true;\n            }\n        }\n        catch\n        {\n            isCreated = false;\n        }\n\n        return isCreated ? bitmapImage : null;\n    }\n\n    public static BitmapSource FromArray(List<byte> data, int w, int h, int ch)\n    {\n        var format = PixelFormats.Default;\n\n        if (ch == 1)\n            format = PixelFormats.Gray8; //Grey scale image 0-255.\n        else if (ch == 3)\n            format = PixelFormats.Bgr24; //RGB.\n        else if (ch == 4)\n            format = PixelFormats.Bgr32; //RGB + alpha.\n\n        for (var i = data.Count - 1; i < w * h * ch; i++)\n            data.Add(0);\n\n        var wbm = new WriteableBitmap(w, h, 96, 96, format, null);\n        wbm.WritePixels(new Int32Rect(0, 0, w, h), data.ToArray(), ch * w, 0);\n\n        return wbm;\n    }\n\n    public static void SavePixelArrayToFile(byte[] pixels, int width, int height, int channels, string filePath)\n    {\n        //var img = BitmapSource.Create(project.Frames[index].Rect.Width, project.Frames[index].Rect.Height, 96, 96, PixelFormats.Bgra32, null, newPixels, 4 * project.Frames[index].Rect.Width);\n\n        //using (var stream = new FileStream(project.ChunkPath + index + \".png\", FileMode.Create))\n        //{\n        //    var encoder = new PngBitmapEncoder();\n        //    encoder.Frames.Add(BitmapFrame.Create(img));\n        //    encoder.Save(stream);\n        //    stream.Close();\n        //}\n\n        using (var fileStream = new FileStream(filePath, FileMode.Create))\n        {\n            BitmapEncoder encoder = new PngBitmapEncoder();\n            encoder.Frames.Add(BitmapFrame.Create(FromArray(pixels.ToList(), width, height, channels)));\n            encoder.Save(fileStream);\n        }\n    }\n\n    #endregion\n\n    #region Edit Images\n\n    public static byte[] CropImageArray(byte[] pixels, int sourceWidth, int bitsPerPixel, Int32Rect rect)\n    {\n        var blockSize = bitsPerPixel / 8;\n        var outputPixels = new byte[rect.Width * rect.Height * blockSize];\n\n        //Create the array of bytes.\n        for (var line = 0; line <= rect.Height - 1; line++)\n        {\n            var sourceIndex = ((rect.Y + line) * sourceWidth + rect.X) * blockSize;\n            var destinationIndex = line * rect.Width * blockSize;\n\n            Array.Copy(pixels, sourceIndex, outputPixels, destinationIndex, rect.Width * blockSize);\n        }\n\n        return outputPixels;\n    }\n\n    /// <summary>\n    /// Resizes the given image.\n    /// </summary>\n    /// <param name=\"source\">The image source.</param>\n    /// <param name=\"width\">The width of the image.</param>\n    /// <param name=\"height\">The height of the image.</param>\n    /// <param name=\"margin\">Cut margin.</param>\n    /// <param name=\"dpi\">The DPI of the image.</param>\n    /// <param name=\"scalingQuality\">Scaling Quality to use when resizing. <seealso cref=\"System.Windows.Media.BitmapScalingMode\"/></param>\n    /// <returns>A resized ImageSource</returns>\n    public static BitmapFrame ResizeImage(BitmapImage source, int width, int height, int margin = 0, double dpi = 96d, BitmapScalingMode scalingQuality = BitmapScalingMode.Unspecified)\n    {\n        var scale = dpi / 96d;\n\n        var drawingVisual = new DrawingVisual();\n        using (var drawingContext = drawingVisual.RenderOpen())\n        {\n            if (scalingQuality != BitmapScalingMode.Unspecified)\n            {\n                var dg = new DrawingGroup();\n                using (var context = dg.Open())\n                {\n                    RenderOptions.SetBitmapScalingMode(dg, scalingQuality);\n                    context.DrawImage(source, new Rect(0, 0, width / scale, height / scale));\n                }\n\n                drawingContext.DrawDrawing(dg);\n            }\n            else\n            {\n                drawingContext.DrawImage(source, new Rect(0, 0, width / scale, height / scale));\n            }\n        }\n\n        //(int)Math.Round(width * scale)\n\n        var resizedImage = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Pbgra32);\n        resizedImage.Render(drawingVisual);\n\n        return BitmapFrame.Create(resizedImage);\n    }\n\n    /// <summary>\n    /// Applies the pixelate effect in given frame.\n    /// </summary>\n    /// <param name=\"image\">The image to pixelate.</param>\n    /// <param name=\"rectX\">The X-axis threshold of the area to pixelate.</param>\n    /// <param name=\"rectY\">The Y-axis threshold of the area to pixelate.</param>\n    /// <param name=\"width\">The X-axis threshold of the area to pixelate.</param>\n    /// <param name=\"height\">The Y-axis threshold of the area to pixelate.</param>\n    /// <param name=\"pixelateSize\">The size of the pixel.</param>\n    /// <param name=\"opacityPower\">Determinies how strong the opacity multiplier should be.</param>\n    /// <param name=\"opacityDistance\">Determines how far the opacity should start/end being smaller than 1 (based on the opacity power too).</param>\n    /// <param name=\"useMedian\">Calculate the median color of the pixel block.</param>\n    /// <param name=\"inverted\">Apply the effect to the inverted region of the selection.</param>\n    /// <returns>A pixelated BitmapSource.</returns>\n    internal static BitmapSource Pixelate(BitmapSource image, int rectX, int rectY, int width, int height, int pixelateSize, double opacityPower, int opacityDistance, bool useMedian, bool inverted)\n    {\n        var pixelUtil = new PixelUtil(image);\n        pixelUtil.LockBits();\n\n        var startX = inverted ? 0 : rectX;\n        var startY = inverted ? 0 : rectY;\n        var endX = inverted ? image.PixelWidth : rectX + width;\n        var endY = inverted ? image.PixelHeight : rectY + height;\n\n        //Loop through all the blocks that should be pixelated.\n        for (var xx = startX; xx < endX; xx += pixelateSize)\n        {\n            for (var yy = startY; yy < endY; yy += pixelateSize)\n            {\n                //Ignore non selected parts of the image.\n                if (inverted && xx > rectX && xx < rectX + width && yy > rectY && yy < rectY + height)\n                    continue;\n\n                var offsetX = pixelateSize / 2;\n                var offsetY = pixelateSize / 2;\n\n                if (xx + offsetX > image.PixelWidth)\n                    offsetX = image.PixelWidth;\n\n                if (yy + offsetY > image.PixelHeight)\n                    offsetY = image.PixelHeight;\n\n                //Get the pixel color in the center of the soon to be pixelated area.\n                var changed = useMedian ? pixelUtil.GetMedianColor(xx, yy, offsetX, offsetY) : pixelUtil.GetPixel(xx + offsetX, yy + offsetY);\n\n                //For each pixel in the pixelate size, set it to the center color.\n                for (var x = xx; x < xx + pixelateSize && x < image.PixelWidth; x++)\n                {\n                    for (var y = yy; y < yy + pixelateSize && y < image.PixelHeight; y++)\n                    {\n                        //Ignore non selected parts of the image.\n                        if (!inverted && (x < rectX || x > rectX + width || y < rectY || y > rectY + height))\n                            continue;\n\n                        if (inverted && x > rectX && x < rectX + width && y > rectY && y < rectY + height)\n                            continue;\n\n                        if (opacityDistance > 0)\n                        {\n                            var opacity = CalculateOpacity(inverted, x, y, rectX, rectY, width, height, opacityDistance, opacityPower);\n\n                            pixelUtil.SetAndBlendPixel(x, y, changed, opacity);\n                            continue;\n                        }\n\n                        pixelUtil.SetPixel(x, y, changed);\n                    }\n                }\n            }\n        }\n\n        return pixelUtil.UnlockBits();\n    }\n\n    /// <summary>\n    /// Applies the pixelate effect in given frame.\n    /// </summary>\n    /// <param name=\"image\">The image to apply blur.</param>\n    /// <param name=\"rectX\">The X-axis threshold of the area to apply blur.</param>\n    /// <param name=\"rectY\">The Y-axis threshold of the area to apply blur.</param>\n    /// <param name=\"width\">The X-axis threshold of the area to apply blur.</param>\n    /// <param name=\"height\">The Y-axis threshold of the area to apply blur.</param>\n    /// <param name=\"blurLevel\">The level of blur.</param>\n    /// <param name=\"opacityPower\">Determinies how strong the opacity multiplier should be.</param>\n    /// <param name=\"opacityDistance\">Determines how far the opacity should start/end being smaller than 1 (based on the opacity power too).</param>\n    /// <param name=\"inverted\">Apply the effect to the inverted region of the selection.</param>\n    /// <returns>A pixelated BitmapSource.</returns>\n    internal static BitmapSource Blur(BitmapSource image, int rectX, int rectY, int width, int height, int blurLevel, double opacityPower, int opacityDistance, bool inverted)\n    {\n        var pixelUtil = new PixelUtil(image);\n        pixelUtil.LockBits();\n\n        var startX = inverted ? 0 : rectX;\n        var startY = inverted ? 0 : rectY;\n        var endX = inverted ? image.PixelWidth : rectX + width;\n        var endY = inverted ? image.PixelHeight : rectY + height;\n\n        Parallel.For(startX, pixelUtil.Pixels.Length / pixelUtil.ChannelsPerPixel, i =>\n        {\n            i *= pixelUtil.ChannelsPerPixel;\n\n            var y = i / pixelUtil.ChannelsPerPixel / image.PixelWidth;\n            var x = i / pixelUtil.ChannelsPerPixel - (y * image.PixelWidth);\n\n            //Ignore non selected parts of the image.\n            if (!inverted && (x < startX || x > endX || y < startY || y > endY))\n                return;\n\n            if (inverted && x > rectX && x < rectX + width && y > rectY && y < rectY + height)\n                return;\n\n            //Apply the blur\n            int avgR = 0, avgG = 0, avgB = 0, avgA = 0;\n            var blurPixelCount = 0;\n\n            //Get the average of the colors in the block.\n            for (var xx = x; xx < x + blurLevel && xx < image.PixelWidth; xx++)\n            {\n                for (var yy = y; yy < y + blurLevel && yy < image.PixelHeight; yy++)\n                {\n                    var pixel = pixelUtil.GetPixel(xx, yy);\n\n                    avgB += pixel.B;\n                    avgG += pixel.G;\n                    avgR += pixel.R;\n                    avgA += pixel.A;\n\n                    blurPixelCount++;\n                }\n            }\n\n            if (blurPixelCount > 0)\n            {\n                avgR /= blurPixelCount;\n                avgG /= blurPixelCount;\n                avgB /= blurPixelCount;\n                avgA /= blurPixelCount;\n            }\n\n            //Apply the average to the block.\n            for (var xx = x; xx < x + blurLevel && xx < image.PixelWidth; xx++)\n            {\n                for (var yy = y; yy < y + blurLevel && yy < image.PixelHeight; yy++)\n                {\n                    //Ignore non selected parts of the image.\n                    if (!inverted && (xx < rectX || xx > rectX + width || yy < rectY || yy > rectY + height))\n                        continue;\n\n                    if (inverted && xx > rectX && xx < rectX + width && yy > rectY && yy < rectY + height)\n                        continue;\n\n                    if (opacityDistance > 0)\n                    {\n                        var opacity = CalculateOpacity(inverted, xx, yy, rectX, rectY, width, height, opacityDistance, opacityPower);\n\n                        pixelUtil.SetAndBlendPixel(xx, yy, (byte)avgB, (byte)avgG, (byte)avgR, (byte)avgA, opacity);\n                        continue;\n                    }\n\n                    pixelUtil.SetPixel(xx, yy, (byte)avgB, (byte)avgG, (byte)avgR, (byte)avgA);\n                }\n            }\n        });\n\n        #region Non parallel\n\n        //for (var xx = startX; xx < endX; xx++)\n        //{\n        //    for (var yy = startY; yy < endY; yy++)\n        //    {\n        //        //Ignore non selected parts of the image.\n        //        if (inverted && xx > rectX && xx < rectX + width && yy > rectY && yy < rectY + height)\n        //            continue;\n\n        //        int avgR = 0, avgG = 0, avgB = 0, avgA = 0;\n        //        var blurPixelCount = 0;\n\n        //        //Get the average of the colors in the block.\n        //        for (var x = xx; x < xx + blurLevel && x < image.PixelWidth; x++)\n        //        {\n        //            for (var y = yy; y < yy + blurLevel && y < image.PixelHeight; y++)\n        //            {\n        //                var pixel = pixelUtil.GetPixel(x, y);\n\n        //                avgB += pixel.B;\n        //                avgG += pixel.G;\n        //                avgR += pixel.R;\n        //                avgA += pixel.A;\n\n        //                blurPixelCount++;\n        //            }\n        //        }\n\n        //        avgR /= blurPixelCount;\n        //        avgG /= blurPixelCount;\n        //        avgB /= blurPixelCount;\n        //        avgA /= blurPixelCount;\n\n        //        //Apply the average to the block.\n        //        for (var x = xx; x < xx + blurLevel && x < image.PixelWidth; x++)\n        //        {\n        //            for (var y = yy; y < yy + blurLevel && y < image.PixelHeight; y++)\n        //            {\n        //                //Ignore non selected parts of the image.\n        //                if (!inverted && (x < rectX || x > rectX + width || y < rectY || y > rectY + height))\n        //                    continue;\n\n        //                if (inverted && x > rectX && x < rectX + width && y > rectY && y < rectY + height)\n        //                    continue;\n\n        //                if (opacityDistance > 0)\n        //                {\n        //                    var opacity = CalculateOpacity(inverted, x, y, rectX, rectY, width, height, opacityDistance, opacityPower);\n\n        //                    pixelUtil.SetAndBlendPixel(x, y, (byte)avgB, (byte)avgG, (byte)avgR, (byte)avgA, opacity);\n        //                    continue;\n        //                }\n\n        //                pixelUtil.SetPixel(x, y, (byte)avgB, (byte)avgG, (byte)avgR, (byte)avgA);\n        //            }\n        //        }\n        //    }\n        //}\n\n        #endregion\n\n        return pixelUtil.UnlockBits();\n    }\n\n    /// <summary>\n    /// Darkens or lightens the given frame.\n    /// </summary>\n    /// <param name=\"image\">The image to have the lightness altered.</param>\n    /// <param name=\"rectX\">The X-axis threshold of the area to be altered.</param>\n    /// <param name=\"rectY\">The Y-axis threshold of the area to be altered.</param>\n    /// <param name=\"width\">The X-axis threshold of the area to be altered.</param>\n    /// <param name=\"height\">The Y-axis threshold of the area to alter lightness.</param>\n    /// <param name=\"isDarken\">True if the images should be darkened, else lightened.</param>\n    /// <param name=\"lightnessLevel\">The level of lightness.</param>\n    /// <param name=\"opacityPower\">Determinies how strong the opacity multiplier should be.</param>\n    /// <param name=\"opacityDistance\">Determines how far the opacity should start/end being smaller than 1 (based on the opacity power too).</param>\n    /// <param name=\"inverted\">Apply the effect to the inverted region of the selection.</param>\n    /// <returns>A lightness altered BitmapSource.</returns>\n    internal static BitmapSource Lightness(BitmapSource image, int rectX, int rectY, int width, int height, bool isDarken, double lightnessLevel, double opacityPower, int opacityDistance, bool inverted)\n    {\n        var pixelUtil = new PixelUtil(image);\n        pixelUtil.LockBits();\n\n        var startX = inverted ? 0 : rectX;\n        var startY = inverted ? 0 : rectY;\n        var endX = inverted ? image.PixelWidth : rectX + width;\n        var endY = inverted ? image.PixelHeight : rectY + height;\n\n        Parallel.For(startX, pixelUtil.Pixels.Length / pixelUtil.ChannelsPerPixel, i =>\n        {\n            i *= pixelUtil.ChannelsPerPixel;\n\n            var y = i / pixelUtil.ChannelsPerPixel / image.PixelWidth;\n            var x = i / pixelUtil.ChannelsPerPixel - (y * image.PixelWidth);\n\n            //Ignore non selected parts of the image.\n            if (!inverted && (x < startX || x > endX || y < startY || y > endY))\n                return;\n\n            if (inverted && x > rectX && x < rectX + width && y > rectY && y < rectY + height)\n                return;\n\n            //Apply smoothness.\n            var original = pixelUtil.GetPixel(x, y);\n            var changed = ChangeColorBrightness(original, lightnessLevel / 100d * (isDarken ? -1 : 1));\n\n            if (opacityDistance > 0)\n            {\n                var opacity = CalculateOpacity(inverted, x, y, rectX, rectY, width, height, opacityDistance, opacityPower);\n\n                pixelUtil.SetAndBlendPixel(x, y, changed, opacity);\n                return;\n            }\n\n            pixelUtil.SetPixel(x, y, changed);\n        });\n\n        #region Non parallel\n\n        //for (var xx = startX; xx < endX; xx++)\n        //{\n        //    for (var yy = startY; yy < endY; yy++)\n        //    {\n        //        //Ignore non selected parts of the image.\n        //        if (inverted && xx > rectX && xx < rectX + width && yy > rectY && yy < rectY + height)\n        //            continue;\n\n        //        //Apply smoothness.\n        //        var original = pixelUtil.GetPixel(xx, yy);\n        //        var changed = ChangeColorBrightness(original, lightnessLevel / 100d * (isDarken ? -1 : 1));\n\n        //        if (opacityDistance > 0)\n        //        {\n        //            var opacity = CalculateOpacity(inverted, xx, yy, rectX, rectY, width, height, opacityDistance, opacityPower);\n\n        //            pixelUtil.SetAndBlendPixel(xx, yy, changed, opacity);\n        //            continue;\n        //        }\n\n        //        pixelUtil.SetPixel(xx, yy, changed);\n        //    }\n        //}\n\n        #endregion\n\n        return pixelUtil.UnlockBits();\n    }\n\n    /// <summary>\n    /// Creates color with corrected brightness.\n    /// https://stackoverflow.com/a/12598573/1735672\n    /// </summary>\n    /// <param name=\"color\">Color to correct.</param>\n    /// <param name=\"correctionFactor\">The brightness correction factor. Must be between -1 and 1. Negative values produce darker colors.</param>\n    public static Color ChangeColorBrightness(Color color, double correctionFactor)\n    {\n        var red = (double)color.R;\n        var green = (double)color.G;\n        var blue = (double)color.B;\n\n        if (correctionFactor < 0)\n        {\n            correctionFactor = 1 + correctionFactor;\n            red *= correctionFactor;\n            green *= correctionFactor;\n            blue *= correctionFactor;\n        }\n        else\n        {\n            red = (255 - red) * correctionFactor + red;\n            green = (255 - green) * correctionFactor + green;\n            blue = (255 - blue) * correctionFactor + blue;\n        }\n\n        return Color.FromArgb(color.A, (byte)red, (byte)green, (byte)blue);\n    }\n\n    /// <summary>\n    /// Blends two colors based on a given opacity percentage.\n    /// </summary>\n    /// <param name=\"bottom\">The current base color.</param>\n    /// <param name=\"top\">The new color that will be put on top of the base one.</param>\n    /// <param name=\"opacity\">The percentage of how much top color to put on top of the base color.</param>\n    public static Color AlphaBlend(Color bottom, Color top, double opacity)\n    {\n        //var alpha = (byte)(255 * 1 - (1 - bottom.A) * (1 - top.A));\n        var alpha = (byte)((top.A * opacity) + bottom.A * (1 - opacity));\n        var red = (byte)((top.R * opacity) + bottom.R * (1 - opacity));\n        var green = (byte)((top.G * opacity) + bottom.G * (1 - opacity));\n        var blue = (byte)((top.B * opacity) + bottom.B * (1 - opacity));\n\n        return Color.FromArgb(alpha, red, green, blue);\n    }\n\n    private static double CalculateOpacity(bool inverted, int xx, int yy, int rectX, int rectY, int width, int height, int opacityDistance, double opacityPower)\n    {\n        if (inverted)\n        {\n            var left = xx <= rectX && //Left.\n                       yy - opacityDistance <= rectY + height && //Bottom corner.\n                       yy + opacityDistance >= rectY ? //Top corner.\n                rectX - xx : int.MaxValue;\n\n            var top = yy <= rectY && //Top\n                      xx - opacityDistance <= rectX + width && //Right corner.\n                      xx + opacityDistance >= rectX ? //Left corner.\n                rectY - yy : int.MaxValue;\n\n            var right = xx >= rectX + width && //Right.\n                        yy - opacityDistance <= rectY + height && //Bottom corner.\n                        yy + opacityDistance >= rectY ? //Top corner.\n                xx - (rectX + width) : int.MaxValue;\n\n            var bottom = yy >= rectY + height && //Bottom.\n                         xx - opacityDistance <= rectX + width && //Right corner.\n                         xx + opacityDistance >= rectX ? //Left corner.\n                yy - (rectY + height) : int.MaxValue;\n\n            if (xx <= rectX && yy <= rectY) //Top left corner.\n                top = left = Math.Max(top, left);\n\n            if (xx >= rectX + width && yy <= rectY) //Top right corner.\n                top = right = Math.Max(right, top);\n\n            if (xx >= rectX + width && yy >= rectY + height) //Bottom right corner.\n                bottom = right = Math.Max(bottom, right);\n\n            if (xx <= rectX && yy >= rectY + height) //Bottom left corner.\n                bottom = left = Math.Max(bottom, left);\n\n            var distance = new[] { left, top, right, bottom }.OrderBy(o => o).First();\n            return distance <= opacityDistance ? opacityPower / 100d * ((distance * 100d) / opacityDistance) / 100d : 1d;\n        }\n\n        //TODO: Option to avoid smoothing near the edges.\n        //var distance = new[] { xx - rectX, yy - rectY, rectX + width - xx, rectY + height - yy }.OrderBy(o => o).First();\n\n        var left2 = xx - rectX;\n        var top2 = yy - rectY;\n        var right2 = rectX + width - xx;\n        var bottom2 = rectY + height - yy;\n\n        var distance2 = new[] { left2, top2, right2, bottom2 }.OrderBy(o => o).First();\n        return distance2 <= opacityDistance ? opacityPower / 100d * ((distance2 * 100d) / opacityDistance) / 100d : 1d;\n    }\n\n    #endregion\n\n    #region Others\n\n    /// <summary>\n    /// Gets the Bitmap from the source and closes the file usage.\n    /// </summary>\n    /// <param name=\"fileSource\">The file to open.</param>\n    /// <returns>The open Bitmap.</returns>\n    public static Bitmap From(this string fileSource)\n    {\n        var bitmapAux = new Bitmap(fileSource);\n        var bitmapReturn = new Bitmap(bitmapAux);\n        bitmapAux.Dispose();\n\n        return bitmapReturn;\n    }\n\n    /// <summary>\n    /// Gets a render of the current UIElement\n    /// </summary>\n    /// <param name=\"source\">UIElement to screenshot</param>\n    /// <param name=\"dpi\">The DPI of the source.</param>\n    /// <returns>An ImageSource</returns>\n    public static RenderTargetBitmap GetRender(this UIElement source, double dpi)\n    {\n        var bounds = VisualTreeHelper.GetDescendantBounds(source);\n\n        //TODO: Fix bounds when values are not rounded.\n\n        var scale = Math.Round(dpi / 96d, 2);\n        var width = (bounds.Width + bounds.X) * scale;\n        var height = (bounds.Height + bounds.Y) * scale;\n\n        #region If no bounds\n\n        if (bounds.IsEmpty)\n        {\n            if (source is Control control)\n            {\n                width = control.ActualWidth * scale;\n                height = control.ActualHeight * scale;\n            }\n\n            bounds = new Rect(new System.Windows.Point(0d, 0d), new System.Windows.Point(width, height));\n        }\n\n        #endregion\n\n        var rtb = new RenderTargetBitmap((int)Math.Round(width), (int)Math.Round(height), dpi, dpi, PixelFormats.Pbgra32);\n\n        var dv = new DrawingVisual();\n        using (var ctx = dv.RenderOpen())\n        {\n            var vb = new VisualBrush(source);\n\n            var locationRect = new System.Windows.Point(bounds.X, bounds.Y);\n            var sizeRect = new System.Windows.Size((int)Math.Round(bounds.Width), (int)Math.Round(bounds.Height));\n\n            ctx.DrawRectangle(vb, null, new Rect(locationRect, sizeRect));\n        }\n\n        rtb.Render(dv);\n        return (RenderTargetBitmap)rtb.GetAsFrozen();\n    }\n\n    /// <summary>\n    /// Gets a render of the current UIElement\n    /// </summary>\n    /// <param name=\"source\">UIElement to screenshot</param>\n    /// <param name=\"scale\">The scale of the UI element.</param>\n    /// <param name=\"dpi\">The DPI of the source.</param>\n    /// <param name=\"size\">The size of the destination image.</param>\n    /// <returns>An ImageSource</returns>\n    public static RenderTargetBitmap GetScaledRender(this Grid source, double scale, double dpi, System.Windows.Size size)\n    {\n        var rtb = new RenderTargetBitmap((int)Math.Round(size.Width), (int)Math.Round(size.Height), dpi, dpi, PixelFormats.Pbgra32);\n\n        var dv = new DrawingVisual();\n        using (var ctx = dv.RenderOpen())\n        {\n            var vb = new VisualBrush(source);\n\n            //Gets the child bounds.\n            var bounds = VisualTreeHelper.GetDescendantBounds(source);\n            var locationRect = new System.Windows.Point(bounds.X * scale, bounds.Y * scale);\n            var sizeRect = new System.Windows.Size(bounds.Width * scale, bounds.Height * scale);\n\n            ctx.DrawRectangle(vb, null, new Rect(locationRect, sizeRect));\n        }\n\n        rtb.Render(dv);\n        return (RenderTargetBitmap)rtb.GetAsFrozen();\n    }\n\n    /// <summary>\n    /// Gets a render of the current UIElement\n    /// </summary>\n    /// <param name=\"source\">UIElement to screenshot</param>\n    /// <param name=\"scale\">The scale of the screen.</param>\n    /// <param name=\"dpi\">The DPI of the output.</param>\n    /// <param name=\"size\">The size of the destination image.</param>\n    /// <returns>An ImageSource</returns>\n    public static RenderTargetBitmap GetScaledRender(this UIElement source, double scale, double dpi, System.Windows.Size size)\n    {\n        var bounds = VisualTreeHelper.GetDescendantBounds(source);\n\n        //var width = (bounds.Width + bounds.X) * scale;\n        //var height = (bounds.Height + bounds.Y) * scale;\n\n        #region If no bounds\n\n        if (bounds.IsEmpty)\n        {\n            if (source is FrameworkElement control)\n                bounds = new Rect(new System.Windows.Point(0d, 0d), new System.Windows.Point(control.ActualWidth * scale, control.ActualHeight * scale));\n        }\n\n        #endregion\n\n        var rtb = new RenderTargetBitmap((int)Math.Round(size.Width), (int)Math.Round(size.Height), dpi, dpi, PixelFormats.Pbgra32);\n\n        //source.Clip = new RectangleGeometry(new Rect(0, 0, rtb.Width, rtb.Height));\n        //source.ClipToBounds = true;\n\n        var dv = new DrawingVisual();\n\n        using (var ctx = dv.RenderOpen())\n        {\n            var vb = new VisualBrush(source)\n            {\n                AutoLayoutContent = false,\n                Stretch = Stretch.Fill\n            };\n\n            var uiScale = source.Scale();\n\n            //Test with high dpi.\n            //For some reason, an InkCanvas with Strokes going beyond the bounds will report a strange bound even if clipped.\n            if (bounds.Width > size.Width / uiScale)\n                bounds.Width = size.Width / uiScale;\n\n            if (bounds.Height > size.Height / uiScale)\n                bounds.Height = size.Height / uiScale;\n\n            if (bounds.X < 0)\n                bounds.X = 0;\n\n            if (bounds.Y < 0)\n                bounds.Y = 0;\n\n            var locationRect = new System.Windows.Point(bounds.X * scale, bounds.Y * scale);\n            var sizeRect = new System.Windows.Size(bounds.Width * scale, bounds.Height * scale);\n\n            ctx.DrawRectangle(vb, null, new Rect(locationRect, sizeRect));\n        }\n\n        rtb.Render(dv);\n\n        //source.Clip = null;\n\n        return (RenderTargetBitmap)rtb.GetAsFrozen();\n    }\n\n    /// <summary>\n    /// Gets the DPI of given image.\n    /// </summary>\n    /// <param name=\"fileSource\">The filename of the source.</param>\n    /// <returns>The DPI.</returns>\n    public static double DpiOf(this string fileSource)\n    {\n        using (var stream = new FileStream(fileSource, FileMode.Open, FileAccess.Read))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnDemand;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            return bitmapImage.DpiX;\n        }\n    }\n\n    /// <summary>\n    /// Gets the scale (dpi/96) of given image.\n    /// </summary>\n    /// <param name=\"fileSource\">The filename of the source.</param>\n    /// <returns>The DPI.</returns>\n    public static double ScaleOf(this string fileSource)\n    {\n        using (var stream = new FileStream(fileSource, FileMode.Open, FileAccess.Read))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnDemand;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            return Math.Round(bitmapImage.DpiX / 96d, 2);\n        }\n    }\n\n    /// <summary>\n    /// Gets the size * scale of given image.\n    /// </summary>\n    /// <param name=\"fileSource\">The filename of the source.</param>\n    /// <returns>The size of the image.</returns>\n    public static System.Windows.Size ScaledSize(this string fileSource)\n    {\n        using (var stream = new FileStream(fileSource, FileMode.Open, FileAccess.Read))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnDemand;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            return new System.Windows.Size(bitmapImage.PixelWidth, bitmapImage.PixelHeight);\n        }\n    }\n\n    /// <summary>\n    /// Gets the size of given image.\n    /// </summary>\n    /// <param name=\"fileSource\">The filename of the source.</param>\n    /// <returns>The size of the image.</returns>\n    public static System.Windows.Size NonScaledSize(this string fileSource)\n    {\n        using (var stream = new FileStream(fileSource, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.None;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            return new System.Windows.Size(bitmapImage.Width, bitmapImage.Height);\n        }\n    }\n\n    /// <summary>\n    /// Gets the BitmapSource from the source and closes the file usage.\n    /// </summary>\n    /// <param name=\"fileSource\">The file to open.</param>\n    /// <returns>The open BitmapSource.</returns>\n    public static Size SizeOf(this string fileSource)\n    {\n        var bitmapAux = new Bitmap(fileSource);\n        var size = new Size(bitmapAux.Width, bitmapAux.Height);\n        bitmapAux.Dispose();\n\n        return size;\n    }\n\n    /// <summary>\n    /// Reads a given image resource into a WinForms icon.\n    /// </summary>\n    /// <param name=\"imageSource\">Image source pointing to an icon file (*.ico).</param>\n    /// <returns>An icon object that can be used with the taskbar area.</returns>\n    public static Icon ToIcon(this ImageSource imageSource)\n    {\n        if (imageSource == null)\n            return null;\n\n        StreamResourceInfo streamInfo = null;\n\n        try\n        {\n            var uri = new Uri(imageSource.ToString());\n            streamInfo = Application.GetResourceStream(uri);\n\n            if (streamInfo == null)\n                throw new ArgumentException($\"It was not possible to load the image source: '{imageSource}'.\");\n\n            return new Icon(streamInfo.Stream);\n        }\n        catch (Win32Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to load the notification area icon.\", $\"StreamInfo is null? {streamInfo == null}, Native error code: {e.NativeErrorCode}\");\n            return null;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to load the notification area icon.\", $\"StreamInfo is null? {streamInfo == null}\");\n            return null;\n        }\n        finally\n        {\n            streamInfo?.Stream?.Dispose();\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Model/FrameInfo.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Util;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing System.Windows;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Model;\n\n[DataContract]\n[KnownType(typeof(SimpleKeyGesture))]\npublic class FrameInfo : IFrame\n{\n    #region Constructors\n\n    /// <summary>\n    /// The parameterless constructor.\n    /// </summary>\n    public FrameInfo()\n    {}\n\n    /// <summary>\n    /// Initialises a FrameInfo instance.\n    /// </summary>\n    /// <param name=\"path\">The Bitmap.</param>\n    /// <param name=\"delay\">The delay.</param>\n    public FrameInfo(string path, int delay)\n    {\n        Path = path;\n        Delay = delay;\n\n        KeyList = new List<IKeyGesture>();\n    }\n\n    /// <summary>\n    /// Initialises a FrameInfo instance.\n    /// </summary>\n    /// <param name=\"path\">The Bitmap.</param>\n    /// <param name=\"delay\">The delay.</param>\n    /// <param name=\"keyList\">The list of pressed keys.</param>\n    public FrameInfo(string path, int delay, List<IKeyGesture> keyList) : this(path, delay)\n    {\n        KeyList = keyList != null ? new List<IKeyGesture>(keyList) : new List<IKeyGesture>();\n    }\n\n    /// <summary>\n    /// Initialises a FrameInfo instance.\n    /// </summary>\n    /// <param name=\"button\">Type of mouse button clicked with the mouse.</param>\n    /// <param name=\"keyList\">The list of pressed keys.</param>\n    public FrameInfo(MouseButtons button, List<IKeyGesture> keyList)\n    {\n        ButtonClicked = button;\n        KeyList = keyList != null ? new List<IKeyGesture>(keyList) : new List<IKeyGesture>();\n    }\n\n    /// <summary>\n    /// Initialises a FrameInfo instance.\n    /// </summary>\n    /// <param name=\"path\">The Bitmap.</param>\n    /// <param name=\"delay\">The delay.</param>\n    /// <param name=\"button\">Type of mouse button the user clicked with the mouse.</param>\n    /// <param name=\"keyList\">The list of pressed keys.</param>\n    /// <param name=\"index\">The index of the frame.</param>\n    public FrameInfo(string path, int delay, MouseButtons button, List<IKeyGesture> keyList = null, int index = 0) : this(path, delay)\n    {\n        ButtonClicked = button;\n        KeyList = keyList != null ? new List<IKeyGesture>(keyList) : new List<IKeyGesture>();\n        Index = index;\n    }\n\n    /// <summary>\n    /// Initialises a FrameInfo instance.\n    /// </summary>\n    /// <param name=\"path\">The Bitmap.</param>\n    /// <param name=\"delay\">The delay.</param>\n    /// <param name=\"cursorX\">Cursor X position.</param>\n    /// <param name=\"cursorY\">Cursor Y position</param>\n    /// <param name=\"button\">Type of mouse button user clicked with the mouse.</param>\n    /// <param name=\"keyList\">The list of pressed keys.</param>\n    /// <param name=\"index\">The index of the frame.</param>\n    public FrameInfo(string path, int delay, int cursorX, int cursorY, MouseButtons button, List<IKeyGesture> keyList = null, int index = 0) : this(path, delay)\n    {\n        CursorX = cursorX;\n        CursorY = cursorY;\n        ButtonClicked = button;\n        KeyList = keyList != null ? new List<IKeyGesture>(keyList) : new List<IKeyGesture>();\n        Index = index;\n    }\n\n    #endregion\n\n    #region Properties\n\n    ///// <summary>\n    ///// The frame image relative path (relative to the project location).\n    ///// </summary>\n    //[DataMember]\n    //public string RelativePath { get; set; }\n\n    /// <summary>\n    /// The frame image path (it may be the full path or the relative path).\n    /// </summary>\n    [DataMember]\n    public string Path { get; set; }\n\n    /// <summary>\n    /// The name of the image file.\n    /// </summary>\n    [DataMember]\n    public string Name { get; set; }\n\n    /// <summary>\n    /// The delay of the frame.\n    /// </summary>\n    [DataMember]\n    public int Delay { get; set; }\n\n    /// <summary>\n    /// Cursor X position.\n    /// </summary>\n    [DataMember(EmitDefaultValue = false)]\n    public int CursorX { get; set; } = int.MinValue;\n\n    /// <summary>\n    /// Cursor Y position.\n    /// </summary>\n    [DataMember(EmitDefaultValue = false)]\n    public int CursorY { get; set; } = int.MinValue;\n\n    /// <summary>\n    /// Type of the button that was clicked.\n    /// </summary>\n    [DataMember(EmitDefaultValue = false, Name = \"ButtonClicked\")]\n    public MouseButtons ButtonClicked { get; set; }\n\n    /// <summary>\n    /// If the button was clicked (legacy projects)\n    /// </summary>\n    [DataMember(Name = \"Clicked\")]\n    public bool WasClicked { get; set; }\n\n    /// <summary>\n    /// The frame index.\n    /// </summary>\n    [IgnoreDataMember]\n    public int Index { get; set; }\n\n    /// <summary>\n    /// The Rectangle of the frame.\n    /// </summary>\n    [IgnoreDataMember]\n    public Int32Rect Rect { get; set; }\n\n    /// <summary>\n    /// The color that will be treated as transparent on this frame.\n    /// </summary>\n    [IgnoreDataMember]\n    public Color ColorKey { get; set; }\n\n    /// <summary>\n    /// True if the frame has area, width and height > 0.\n    /// </summary>\n    [IgnoreDataMember]\n    public bool HasArea => Rect.HasArea;\n\n    //Temporary.\n    [DataMember(EmitDefaultValue = false, Name = \"Keys\")]\n    public List<SimpleKeyGesture> TemporaryKeyList { get; set; }\n\n    /// <summary>\n    /// List of keys pressed during the recording of this frame.\n    /// </summary>\n    [IgnoreDataMember]\n    public List<IKeyGesture> KeyList { get; set; }\n\n    /// <summary>\n    /// The pixel array data of the frame.\n    /// Used only during the recording.\n    /// </summary>\n    [IgnoreDataMember]\n    public byte[] Data { get; set; }\n\n    /// <summary>\n    /// True if the capture of the frame failed somehow.\n    /// </summary>\n    [IgnoreDataMember]\n    public bool FrameSkipped { get; set; }\n\n    /// <summary>\n    /// The pixel array data length of the frame.\n    /// Used only during the recording.\n    /// </summary>\n    [IgnoreDataMember]\n    public long DataLength { get; set; }\n\n    /// <summary>\n    /// The image of the frame.\n    /// Used only during the recording.\n    /// </summary>\n    [IgnoreDataMember]\n    public Image Image { get; set; }\n\n\n    /// <summary>\n    /// This works as a migration method for mouse events. Before storing the button\n    /// type only bool was stored to mark the clicks. During opening old project it will\n    /// be converted to Left mouse button click losing some info unfortunately.\n    /// </summary>\n    /// <param name=\"context\"></param>\n    [OnDeserialized]\n    private void OnDeserialized(StreamingContext context)\n    {\n        if (ButtonClicked == MouseButtons.None)\n            ButtonClicked = WasClicked ? MouseButtons.Left : MouseButtons.None;\n\n        if (TemporaryKeyList?.Count > 0 && KeyList == null)\n            KeyList = new List<IKeyGesture>(TemporaryKeyList);\n    }\n\n    [OnSerializing]\n    private void OnSerializing(StreamingContext context)\n    {\n        if (KeyList != null)\n            TemporaryKeyList = KeyList?.OfType<SimpleKeyGesture>().ToList();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Model/ProjectInfo.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Codification;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Model;\n\n[DataContract]\npublic class ProjectInfo\n{\n    /// <summary>\n    /// The relative path of initial destination of this project.\n    /// </summary>\n    [DataMember(Name = \"Relative\", Order = 0)]\n    public string RelativePath { get; set; }\n\n    /// <summary>\n    /// The date of creation of this project.\n    /// </summary>\n    [DataMember(Order = 1)]\n    public DateTime CreationDate { get; set; } = DateTime.Now;\n\n    /// <summary>\n    /// List of frames.\n    /// </summary>\n    [DataMember(Order = 2)]\n    public List<FrameInfo> Frames { get; set; } = new();\n\n    /// <summary>\n    /// True if this project was recently created and was not yet loaded by the editor.\n    /// </summary>\n    [DataMember(Order = 3)]\n    public bool IsNew { get; set; }\n\n    /// <summary>\n    /// Where this project was created?\n    /// </summary>\n    [DataMember(Order = 4)]\n    public ProjectByType CreatedBy { get; set; } = ProjectByType.Unknown;\n\n    /// <summary>\n    /// The width of the canvas.\n    /// </summary>\n    [DataMember(Order = 5)]\n    public int Width { get; set; }\n\n    /// <summary>\n    /// The height of the canvas.\n    /// </summary>\n    [DataMember(Order = 6)]\n    public int Height { get; set; }\n\n    /// <summary>\n    /// The base dpi of the project.\n    /// </summary>\n    [DataMember(Order = 7)]\n    public double Dpi { get; set; } = 96;\n\n    /// <summary>\n    /// The base bit depth of the project.\n    /// 32 is RGBA\n    /// 24 is RGB\n    /// </summary>\n    [DataMember(Order = 8)]\n    public int BitDepth { get; set; } = 32;\n\n\n    /// <summary>\n    /// The full path of project based on current settings.\n    /// </summary>\n    public string FullPath => Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Recording\", RelativePath);\n\n    /// <summary>\n    /// Full path to the serialized project file.\n    /// </summary>\n    public string ProjectPath => Path.Combine(FullPath, \"Project.json\");\n\n    /// <summary>\n    /// The full path to the action stack files (undo, redo).\n    /// </summary>\n    public string ActionStackPath => Path.Combine(FullPath, \"ActionStack\");\n\n    /// <summary>\n    /// The full path to the undo folder.\n    /// </summary>\n    public string UndoStackPath => Path.Combine(ActionStackPath, \"Undo\");\n\n    /// <summary>\n    /// The full path to the redo folder.\n    /// </summary>\n    public string RedoStackPath => Path.Combine(ActionStackPath, \"Redo\");\n\n    /// <summary>\n    /// The full path to the blob file, used by the recorder to write all frames pixels as a byte array, separated by a delimiter.\n    /// </summary>\n    public string CachePath => Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Recording\", RelativePath, \"Frames.cache\");\n\n    /// <summary>\n    /// Check if there's any frame on this project.\n    /// </summary>\n    public bool Any => Frames != null && Frames.Any();\n\n    /// <summary>\n    /// The latest index of the current list of frames, or -1.\n    /// </summary>\n    public int LatestIndex => Frames?.Count - 1 ?? -1;\n\n\n    #region Methods\n\n    public ProjectInfo CreateProjectFolder(ProjectByType creator)\n    {\n        IsNew = true;\n        RelativePath = DateTime.Now.ToString(\"yyyy-MM-dd HH-mm-ss\") + Path.DirectorySeparatorChar;\n        CreatedBy = creator;\n\n        Directory.CreateDirectory(FullPath);\n\n        //Create ActionStack folders\n        if (!Directory.Exists(ActionStackPath))\n            Directory.CreateDirectory(ActionStackPath);\n\n        if (!Directory.Exists(UndoStackPath))\n            Directory.CreateDirectory(UndoStackPath);\n\n        if (!Directory.Exists(RedoStackPath))\n            Directory.CreateDirectory(RedoStackPath);\n\n        CreateMutex();\n\n        return this;\n    }\n\n    public void Persist(string path = null)\n    {\n        try\n        {\n            using var ms = new MemoryStream();\n\n            var ser = new DataContractJsonSerializer(typeof(ProjectInfo));\n            ser.WriteObject(ms, this);\n\n            File.WriteAllText(path ?? ProjectPath, Encoding.UTF8.GetString(ms.ToArray())); //Use Serializer\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Persisting the current project info.\");\n        }\n    }\n\n    public void Clear()\n    {\n        Frames?.Clear();\n\n        MutexList.Remove(RelativePath);\n    }\n\n    public string FilenameOf(int index)\n    {\n        return Any && LatestIndex >= index ? Path.Combine(FullPath, Frames[index].Name) : \"\";\n    }\n\n    /// <summary>\n    /// Gets the index that is in range of the current list of frames.\n    /// </summary>\n    /// <param name=\"index\">The index to compare.</param>\n    /// <returns>A valid index.</returns>\n    public int ValidIndex(int index)\n    {\n        if (index == -1)\n            index = 0;\n\n        return LatestIndex >= index ? index : LatestIndex;\n    }\n\n    public void CreateMutex()\n    {\n        //TODO: Validate the possibility of opening this project.\n        //I need to make sure that I'll release the mutexes.\n\n        MutexList.Add(RelativePath);\n    }\n\n    public void ReleaseMutex()\n    {\n        MutexList.Remove(RelativePath);\n    }\n\n    internal ExportProject CopyToExport(List<int> indexes, bool copyJson = false, bool useBytes = false, bool usePadding = false)\n    {\n        Persist();\n\n        var export = new ExportProject();\n\n        //Output folder\n        var encodePath = \"Encode \" + DateTime.Now.ToString(\"yyyy-MM-dd hh-mm-ss-ff\");\n        export.Path = Path.Combine(FullPath, encodePath);\n\n        if (!Directory.Exists(export.Path))\n            Directory.CreateDirectory(export.Path);\n\n        var items = indexes.Count > 0 ? indexes.Select(i => Frames[i]).ToList() : Frames;\n\n        if (useBytes)\n        {\n            export.Frames = [];\n            export.ChunkPath = Path.Combine(export.Path, \"Chunk\");\n            export.NewChunkPath = Path.Combine(export.Path, \"NewChunk\");\n\n            try\n            {\n                //Create chunk file.\n                using var fileStream = new FileStream(export.ChunkPath, FileMode.Create, FileAccess.Write, FileShare.None);\n                var pos = 0L;\n\n                foreach (var info in items)\n                {\n                    var image = new PixelUtil(info.Path.SourceFrom());\n                    image.LockBits();\n\n                    fileStream.WriteBytes(image.Pixels);\n\n                    export.Frames.Add(new ExportFrame\n                    {\n                        Index = info.Index,\n                        DataPosition = pos,\n                        DataLength = image.Pixels.LongLength,\n                        Delay = info.Delay,\n                        Rect = new Int32Rect(0, 0, image.Width, image.Height),\n                        ImageDepth = image.Depth\n                    });\n\n                    //Advances in the position.\n                    pos += image.Pixels.LongLength;\n\n                    image.UnlockBitsWithoutCommit();\n                }\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"It was impossible to get the image bytes to encode.\");\n                throw;\n            }\n\n            return export;\n        }\n\n        export.UsesFiles = true;\n        export.FramesFiles = [];\n        \n        try\n        {\n            #region If it's being exported as project, maintain file naming\n\n            if (copyJson)\n            {\n                foreach (var info in items)\n                {\n                    var filename = Path.Combine(export.Path, export.FramesFiles.Count + \".png\");\n\n                    //Copy the image to the folder.\n                    File.Copy(info.Path, filename, true);\n\n                    //Create the new object and add to the list.\n                    export.FramesFiles.Add(new FrameInfo\n                    {\n                        Index = export.FramesFiles.Count,\n                        Path = filename,\n                        Delay = info.Delay\n                    });\n                }\n\n                //Create new project.json file with the updated file names.\n                var projectAux = ShallowCopy();\n                projectAux.RelativePath = encodePath;\n                projectAux.Frames = export.FramesFiles.OfType<FrameInfo>().ToList();\n                projectAux.Persist(Path.Combine(export.Path, \"Project.json\"));\n\n                return export;\n            }\n\n            #endregion\n\n            //Detect pad size.\n            var pad = usePadding ? (items.Count - 1).ToString().Length : 0;\n\n            foreach (var info in items)\n            {\n                //Changes the path of the image. Writes as an ordered list of files, replacing the old filenames.\n                var filename = Path.Combine(export.Path, export.FramesFiles.Count.ToString().PadLeft(pad, '0') + \".png\");\n\n                //Copy the image to the folder.\n                File.Copy(info.Path, filename, true);\n\n                //Create the new object and add to the list.\n                export.FramesFiles.Add(new FrameInfo\n                {\n                    Index = export.FramesFiles.Count,\n                    Path = filename,\n                    Delay = info.Delay\n                });\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"It was impossible to copy the files to encode.\");\n            throw;\n        }\n\n        return export;\n    }\n\n    public ProjectInfo ShallowCopy()\n    {\n        return (ProjectInfo) MemberwiseClone();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Properties/AssemblyInfo.cs",
    "content": "using System.Runtime.InteropServices;\nusing System.Windows;\n\n// In SDK-style projects such as this one, several assembly attributes that were historically\n// defined in this file are now automatically added during build and populated with\n// values defined in project properties. For details of which attributes are included\n// and how to customise this process see: https://aka.ms/assembly-info-properties\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located\n    //(used if a resource is not found in the page, \n    // or application resource dictionaries)\n    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located\n    //(used if a resource is not found in the page, \n    // app, or any theme specific resource dictionaries)\n)]\n\n//In order to begin building localizable applications, set \n//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file\n//inside a <PropertyGroup>.  For example, if you are using US english\n//in your source files, set the <UICulture> to en-US.  Then uncomment\n//the NeutralResourceLanguage attribute below.  Update the \"en-US\" in\n//the line below to match the UICulture setting in the project file.\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n// Setting ComVisible to false makes the types in this assembly not visible to COM\n// components.  If you need to access a type in this assembly from COM, set the ComVisible\n// attribute to true on that type.\n\n[assembly: ComVisible(false)]"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as ARM64 (light).pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>ARM64</Platform>\n    <PublishDir>bin\\Publish\\Dependent\\ARM64</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-arm64</RuntimeIdentifier>\n    <SelfContained>false</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as ARM64 (self-contained).pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>ARM64</Platform>\n    <PublishDir>bin\\Publish\\Full\\ARM64</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-arm64</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>false</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as ARM64.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>ARM64</Platform>\n    <PublishDir>bin\\Publish\\Full-Single\\ARM64</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-arm64</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as x64 (light).pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>x64</Platform>\n    <PublishDir>bin\\Publish\\Dependent\\x64</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\n    <SelfContained>false</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as x64 (self-contained).pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>x64</Platform>\n    <PublishDir>bin\\Publish\\Full\\x64</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>false</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as x64.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>x64</Platform>\n    <PublishDir>bin\\Publish\\Full-Single\\x64</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as x86 (light).pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>x86</Platform>\n    <PublishDir>bin\\Publish\\Dependent\\x86</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-x86</RuntimeIdentifier>\n    <SelfContained>false</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as x86 (self-contained).pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>x86</Platform>\n    <PublishDir>bin\\Publish\\Full\\x86</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-x86</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>false</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Properties/PublishProfiles/Publish as x86.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121. \n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>x86</Platform>\n    <PublishDir>bin\\Publish\\Full-Single\\x86</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RuntimeIdentifier>win-x86</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Readme.md",
    "content": "# ScreenToGif  \n\nThis is the current project of ScreenToGif.  \n\n_VS 2022 and .NET 9 or newer required._"
  },
  {
    "path": "ScreenToGif/Resources/Backgrounds.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n                    xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\">\n\n    <c:ColorToBrush x:Key=\"ColorToBrush\"/>\n\n    <!--Checker Drawing Brush-->\n    <DrawingBrush x:Key=\"Checker.DrawingBrush\" Viewport=\"{Binding GridSize, Source={x:Static t:UserSettings.All}}\" \n                  ViewportUnits=\"Absolute\" TileMode=\"Tile\" Opacity=\"1\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"{Binding GridColor1, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrush}}\">\n                    <GeometryDrawing.Geometry>\n                        <RectangleGeometry Rect=\"0,0 100,100\" />\n                    </GeometryDrawing.Geometry>\n                </GeometryDrawing>\n\n                <GeometryDrawing Brush=\"{Binding GridColor2, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrush}}\">\n                    <GeometryDrawing.Geometry>\n                        <GeometryGroup>\n                            <RectangleGeometry Rect=\"0,0 50,50\" />\n                            <RectangleGeometry Rect=\"50,50 50,50\" />\n                        </GeometryGroup>\n                    </GeometryDrawing.Geometry>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Shared=\"False\" x:Key=\"Background.Lines\" Viewport=\"{Binding BoardGridSize, Source={x:Static t:UserSettings.All}}\"\n                  ViewportUnits=\"Absolute\" TileMode=\"FlipXY\" Opacity=\"1\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"{Binding BoardGridBackground, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrush}}\">\n                    <GeometryDrawing.Geometry>\n                        <RectangleGeometry Rect=\"0,0,80,80\"/>\n                    </GeometryDrawing.Geometry>\n                </GeometryDrawing>\n\n                <GeometryDrawing>\n                    <GeometryDrawing.Geometry>\n                        <LineGeometry StartPoint=\"0,0\" EndPoint=\"80,0\"/>\n                    </GeometryDrawing.Geometry>\n                    <GeometryDrawing.Pen>\n                        <Pen Brush=\"{Binding BoardGridColor2, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrush}, FallbackValue=White}\" Thickness=\"1\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                \n                <GeometryDrawing>\n                    <GeometryDrawing.Geometry>\n                        <LineGeometry StartPoint=\"0,0\" EndPoint=\"80,0\"/>\n                    </GeometryDrawing.Geometry>\n                    <GeometryDrawing.Pen>\n                        <Pen Brush=\"{Binding BoardGridColor1, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrush}, FallbackValue=White}\" Thickness=\"1\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Commands.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <RoutedUICommand x:Key=\"Command.NewRecording\" Text=\"S.Command.NewRecording\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + N</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.NewWebcamRecording\" Text=\"S.Command.NewWebcamRecording\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + W</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.NewBoardRecording\" Text=\"S.Command.NewBoardRecording\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + B</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.NewAnimation\" Text=\"S.Command.NewAnimation\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + A</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.InsertRecording\" Text=\"S.Command.InsertRecording\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + N</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.InsertWebcamRecording\" Text=\"S.Command.InsertWebcamRecording\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + W</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.InsertBoardRecording\" Text=\"S.Command.InsertBoardRecording\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + B</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.InsertFromMedia\" Text=\"S.Command.InsertFromMedia\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + O</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.SaveAs\" Text=\"S.Command.SaveAs\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + S</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Load\" Text=\"S.Command.Load\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + O</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.LoadRecent\" Text=\"S.Command.LoadRecent\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + L</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.DiscardProject\" Text=\"S.Command.DiscardProject\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Delete</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.OverrideDelay\" Text=\"S.Command.OverrideDelay\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + O</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.IncreaseDecreaseDelay\" Text=\"S.Command.IncreaseDecreaseDelay\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + Y</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.ScaleDelay\" Text=\"S.Command.ScaleDelay\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + 5</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Zoom100\" Text=\"S.Command.Zoom100\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + 0</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.SizeToContent\" Text=\"S.Command.SizeToContent\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + 1</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.FitImage\" Text=\"S.Command.FitImage\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + OemMinus</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <!--Playback-->\n    <RoutedUICommand x:Key=\"Command.FirstFrame\" Text=\"S.Command.FirstFrame\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Home</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.PreviousFrame\" Text=\"S.Command.PreviousFrame\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>PageUp</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <RoutedUICommand x:Key=\"Command.Play\" Text=\"S.Command.Play\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Space</KeyGesture>\n            <KeyGesture>Alt + P</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.NextFrame\" Text=\"S.Command.NextFrame\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>PageDown</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.LastFrame\" Text=\"S.Command.LastFrame\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>End</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <!--Edit-->\n    <RoutedUICommand x:Key=\"Command.Undo\" Text=\"S.Command.Undo\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Z</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Redo\" Text=\"S.Command.Redo\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Y</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <RoutedUICommand x:Key=\"Command.Reset\" Text=\"S.Command.Reset\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + R</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Copy\" Text=\"S.Command.Copy\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + C</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Cut\" Text=\"S.Command.Cut\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + X</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Paste\" Text=\"S.Command.Paste\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + V</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <RoutedUICommand x:Key=\"Command.ExploreClipboard\" Text=\"S.Command.ExploreClipboard\"/>\n\n    <RoutedUICommand x:Key=\"Command.RemoveClipboardEntry\" Text=\"S.Command.RemoveClipboardEntry\"/>\n\n    <RoutedUICommand x:Key=\"Command.Delete\" Text=\"S.Command.Delete\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Delete</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <RoutedUICommand x:Key=\"Command.DeletePrevious\" Text=\"S.Command.DeletePrevious\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + Left</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.DeleteNext\" Text=\"S.Command.DeleteNext\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + Right</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.RemoveDuplicates\" Text=\"S.Command.RemoveDuplicates\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + Delete</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Reduce\" Text=\"S.Command.Reduce\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + Delete</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.SmoothLoop\" Text=\"S.Command.SmoothLoop\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + H</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Reverse\" Text=\"S.Command.Reverse\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + R</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Yoyo\" Text=\"S.Command.Yoyo\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Y</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.MoveLeft\" Text=\"S.Command.MoveLeft\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + Left</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.MoveRight\" Text=\"S.Command.MoveRight\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + Right</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <!--Image-->\n    <RoutedUICommand x:Key=\"Command.Resize\" Text=\"S.Command.Resize\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + R</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Crop\" Text=\"S.Command.Crop\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + C</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.FlipRotate\" Text=\"S.Command.FlipRotate\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + L</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Caption\" Text=\"S.Command.Caption\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + S</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.FreeText\" Text=\"S.Command.FreeText\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + F</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.TitleFrame\" Text=\"S.Command.TitleFrame\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + T</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.KeyStrokes\" Text=\"S.Command.KeyStrokes\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + H</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.FreeDrawing\" Text=\"S.Command.FreeDrawing\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + D</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Shapes\" Text=\"S.Command.Shapes\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + J</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.MouseEvents\" Text=\"S.Command.MouseEvents\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + I</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Watermark\" Text=\"S.Command.Watermark\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + W</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Border\" Text=\"S.Command.Border\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + B</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Shadow\" Text=\"S.Command.Shadow\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + M</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Obfuscate\" Text=\"S.Command.Obfuscate\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + H</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Cinemagraph\" Text=\"S.Command.Cinemagraph\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + G</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Progress\" Text=\"S.Command.Progress\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + K</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <!--Selection-->\n    <RoutedUICommand x:Key=\"Command.SelectAll\" Text=\"S.Command.SelectAll\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + A</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.GoTo\" Text=\"S.Command.GoTo\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + G</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.InverseSelection\" Text=\"S.Command.InverseSelection\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + I</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Unselect\" Text=\"S.Command.Unselect\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + U</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <!--Transitions-->\n    <RoutedUICommand x:Key=\"Command.Fade\" Text=\"S.Command.Fade\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + T</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Slide\" Text=\"S.Command.Slide\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + Y</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <!--Other-->\n    <RoutedUICommand x:Key=\"Command.Options\" Text=\"S.Command.Options\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + O</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Update\" Text=\"S.Command.Update\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + U</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.CheckCache\"/>\n    <RoutedUICommand x:Key=\"Command.ClearCache\"/>\n    <RoutedUICommand x:Key=\"Command.BrowseCache\"/>\n    <RoutedUICommand x:Key=\"Command.BrowseLogs\"/>\n\n    <!--Storage-->\n    <RoutedUICommand x:Key=\"Command.CreateLocalSettings\" Text=\"S.Command.CreateLocalSettings\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + C</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.RemoveLocalSettings\" Text=\"S.Command.RemoveLocalSettings\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + D</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.OpenLocalSettings\" Text=\"S.Command.OpenLocalSettings\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Shift + A</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.RemoveAppDataSettings\" Text=\"S.Command.RemoveAppDataSettings\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + F</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.OpenAppDataSettings\" Text=\"S.Command.OpenAppDataSettings\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + A</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.ClearAll\" Text=\"S.Command.ClearAll\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + D</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.OpenImage\" Text=\"S.Command.OpenImage\"/>\n\n    <RoutedUICommand x:Key=\"Command.ExploreFolder\" Text=\"S.Command.ExploreFolder\"/>\n\n    <RoutedUICommand x:Key=\"Command.CheckVideoDevices\" Text=\"S.Command.CheckVideoDevices\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + F5</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.EnableSnapToWindow\" Text=\"S.Command.EnableSnapToWindow\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + Alt + Z</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Ok\" Text=\"S.Command.Ok\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + E</KeyGesture>\n            <KeyGesture>Enter</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Cancel\" Text=\"S.Command.Cancel\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Escape</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <!--Upload-->\n    <RoutedUICommand x:Key=\"Command.ViewHistory\" Text=\"S.Command.ViewHistory\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + H</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <!--Localization-->\n    <RoutedUICommand x:Key=\"Command.MoveUp\" Text=\"S.Command.MoveUp\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + Up</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.MoveDown\" Text=\"S.Command.MoveDown\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + Down</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Add\" Text=\"S.Command.Add\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + N</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Open\" Text=\"S.Command.Open\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + O</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Edit\" Text=\"S.Command.Edit\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + E</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n    \n    <RoutedUICommand x:Key=\"Command.Save\" Text=\"S.Command.Save\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Ctrl + S</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Remove\" Text=\"S.Command.Remove\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Delete</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.Exit\" Text=\"S.Command.Exit\">\n        <RoutedUICommand.InputGestures>\n            <KeyGesture>Alt + F4</KeyGesture>\n        </RoutedUICommand.InputGestures>\n    </RoutedUICommand>\n\n    <RoutedUICommand x:Key=\"Command.SwitchCaptureFrequency\" Text=\"S.Recorder.SwitchFrequency\"/>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Flags.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Brazil\" Height=\"147\" UseLayoutRounding=\"False\" Width=\"207\"  HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n        <Path Data=\"F1M205.827,144.117L205.827,0.125 0.125,0.125 0.125,144.117z\" Fill=\"#FF3DB84E\" Height=\"144.241\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"2.379\" Width=\"205.952\"/>\n        <Path Data=\"F1M85.6,0.148L171.293,54.659 85.926,108.827 0.234,54.659z\" Fill=\"#FFFCE136\" Height=\"108.976\" Canvas.Left=\"17.213\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"19.837\" Width=\"171.525\"/>\n        <Path Data=\"F1M36.06,72.058C55.941,72.058 72.058,55.941 72.058,36.06 72.058,16.179 55.941,0.062 36.06,0.062 16.179,0.062 0.062,16.179 0.062,36.06 0.062,55.941 16.179,72.058 36.06,72.058z\" Fill=\"#FF0091BF\" Height=\"72.121\" Canvas.Left=\"66.916\" Stroke=\"Black\" StrokeThickness=\"0.125\" StrokeMiterLimit=\"4\" Canvas.Top=\"38.44\" Width=\"72.121\"/>\n        <Path Data=\"F1M68.177,29.283C50.075,11.873 25.367,3.279 0.089,5.845 0.648,4.101 1.459,2.171 2.366,0.422 26.339,-2.062 52.451,7.938 69.697,23.757 69.335,25.657 68.825,27.502 68.177,29.283z\" Fill=\"White\" Height=\"29.394\" Canvas.Left=\"67.476\" Stroke=\"Black\" StrokeThickness=\"0.125\" StrokeMiterLimit=\"4\" Canvas.Top=\"58\" Width=\"70.016\" Stretch=\"Fill\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.UnitedKingdom\" HorizontalAlignment=\"Center\" Height=\"145\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"287\">\n        <Path Data=\"F1M287.739,144.103L287.739,0.125 0.125,0.125 0.125,144.103z\" Fill=\"#FF163771\" Height=\"144.228\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"2.386\" Width=\"287.864\"/>\n        <Path Data=\"F1M0.125,48.104L60.871,48.104 0.125,17.623 0.125,0.125 34.88,0.125 119.856,42.481 119.856,0.125 167.707,0.125 167.707,42.481 252.683,0.125 287.739,0.125 287.739,17.623 226.692,48.104 287.739,48.104 287.739,96.119 226.692,96.119 287.739,126.6 287.739,144.103 252.683,144.103 167.707,101.742 167.707,144.103 119.856,144.103 119.856,101.742 34.88,144.103 0.125,144.103 0.125,126.6 60.871,96.119 0.125,96.119z\" Fill=\"White\" Height=\"144.228\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"2.386\" Width=\"287.864\"/>\n        <Path Data=\"F1M96.53,0.125L0.529,48.137 23.51,48.137 119.138,0.125z\" Fill=\"#FFE1273A\" Height=\"48.262\" Canvas.Left=\"168.601\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeLineJoin=\"Bevel\" Canvas.Top=\"2.386\" Width=\"119.666\"/>\n        <Path Data=\"F1M96.258,48.11L0.528,0.125 23.61,0.125 96.258,36.671z\" Fill=\"#FFE1273A\" Height=\"48.313\" Canvas.Left=\"191.481\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeLineJoin=\"Bevel\" Canvas.Top=\"98.379\" Width=\"96.383\"/>\n        <Path Data=\"F1M96.309,48.214L0.125,0.202 0.125,11.669 73.127,48.214z\" Fill=\"#FFE1273A\" Height=\"48.339\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeLineJoin=\"Bevel\" Canvas.Top=\"2.309\" Width=\"96.84\"/>\n        <Path Data=\"F1M96.516,0.125L0.53,48.11 23.498,48.11 119.498,0.125z\" Fill=\"#FFE1273A\" Height=\"48.235\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeLineJoin=\"Bevel\" Canvas.Top=\"98.379\" Width=\"120.027\"/>\n        <Path Data=\"F1M0.125,58.065L130.049,58.065 130.049,0.125 158.166,0.125 158.166,58.065 287.739,58.065 287.739,86.182 158.166,86.182 158.166,144.103 130.049,144.103 130.049,86.182 0.125,86.182z\" Fill=\"#FFE1273A\" Height=\"144.228\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"2.386\" Width=\"287.864\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Russia\" HorizontalAlignment=\"Center\" Height=\"146\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"216\">\n        <Path Data=\"F1M216.125,48.124L0.125,48.124 0.125,0.125 216.125,0.125z\" Fill=\"White\" Height=\"48.249\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"1.875\" Width=\"216.25\"/>\n        <Path Data=\"F1M0.125,48.126L216.125,48.126 216.125,0.125 0.125,0.125z\" Fill=\"#FFE1273A\" Height=\"48.251\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"97.874\" Width=\"216.25\"/>\n        <Path Data=\"F1M216.125,48.125L0.125,48.125 0.125,0.125 216.125,0.125z\" Fill=\"#FF1F4FA2\" Height=\"48.249\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"49.874\" Width=\"216.25\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Spain\" HorizontalAlignment=\"Center\" Height=\"145\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"216\">\n        <Path Data=\"F1M0.125,0.125L216.125,0.125 216.125,144.125 0.125,144.125z\" Fill=\"#FFEC192D\" Height=\"144.25\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"0\" Width=\"216.25\"/>\n        <Path Data=\"F1M216.125,72.125L0.125,72.125 0.125,0.125 216.125,0.125z\" Fill=\"#FFFEF100\" Height=\"72.25\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"36.0\" Width=\"216.25\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Sweden\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"230\">\n        <Path Data=\"F1M230.534,144.102L230.534,0.125 0.125,0.125 0.125,144.102z\" Fill=\"#FF1064A6\" Height=\"144.227\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeLineJoin=\"Bevel\" Canvas.Top=\"0\" Width=\"230.658\"/>\n        <Path Data=\"F1M230.543,57.672L100.875,57.672 100.875,0.125 72.059,0.125 72.059,57.672 0.125,57.672 0.125,86.462 72.059,86.462 72.059,144.009 100.875,144.009 100.875,86.462 230.543,86.462z\" Fill=\"#FFFCE012\" Height=\"144.134\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeLineJoin=\"Bevel\" Canvas.Top=\"0\" Width=\"230.668\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Vietnam\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"217\">\n        <Path Data=\"F1M216.125,144.125L216.125,0.125 0.125,0.125 0.125,144.125z\" Fill=\"#FFF26432\" Height=\"144.25\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"0\" Width=\"216.25\"/>\n        <Path Data=\"F1M41.158,0.203L31.606,29.885 0.193,29.885 25.703,48.355 15.902,78.011 41.158,59.584 66.413,78.011 56.743,48.104 82.123,30.009 50.834,30.009z\" Fill=\"#FFFEF100\" Height=\"78.176\" Canvas.Left=\"66.967\" Stroke=\"Black\" StrokeThickness=\"0.125\" StrokeMiterLimit=\"4\" Canvas.Top=\"32.7\" Width=\"82.319\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Taiwan\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"216\">\n        <TextBlock Canvas.Top=\"50\" FontSize=\"75\" FontWeight=\"SemiBold\" Text=\"zh-TW\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Japan\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"206\">\n        <Path Data=\"F1M205.827,144.117L205.827,0.125 0.125,0.125 0.125,144.117z\" Fill=\"White\" Height=\"144.242\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"0\" Width=\"205.953\"/>\n        <Path Data=\"F1M43.361,86.597C67.239,86.597 86.597,67.239 86.597,43.361 86.597,19.483 67.239,0.125 43.361,0.125 19.483,0.125 0.125,19.483 0.125,43.361 0.125,67.239 19.483,86.597 43.361,86.597z\" Fill=\"#FFEC192D\" Height=\"86.721\" Canvas.Left=\"57.451\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"29.139\" Width=\"86.722\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.China\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"216\">\n        <TextBlock Canvas.Top=\"50\" FontSize=\"75\" FontWeight=\"SemiBold\" Text=\"zh-CN\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Italy\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"215\">\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.128,0.125 72.128,144.125z\" Fill=\"#FFEC192D\" Height=\"144.25\" Canvas.Left=\"143.997\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"2.5\" Width=\"72.253\"/>\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.124,0.125 72.124,144.125z\" Fill=\"#FF309131\" Height=\"144.25\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"2.5\" Width=\"72.249\"/>\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.123,0.125 72.123,144.125z\" Fill=\"White\" Height=\"144.25\" Canvas.Left=\"71.999\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"2.5\" Width=\"72.249\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Israel\" HorizontalAlignment=\"Center\" Width=\"40.000\" Height=\"29.159\">\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 40.000,29.159 L 40.000,0.000 L 0.000,0.000 L 0.000,29.159 L 40.000,29.159 Z\"/>\n        <Path Fill=\"#ff003875\" Data=\"F1 M 25.888,11.154 L 21.922,11.154 L 19.997,7.832 L 18.073,11.154 L 14.107,11.154 C 14.107,11.154 16.074,14.578 16.090,14.578 C 16.074,14.578 14.107,18.001 14.107,18.001 L 18.073,18.001 L 19.997,21.323 L 21.922,18.001 L 25.888,18.001 C 25.888,18.001 23.921,14.578 23.905,14.578 C 23.921,14.578 25.888,11.154 25.888,11.154 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 21.309,16.928 L 18.687,16.928 L 17.333,14.578 L 18.687,12.227 L 21.309,12.227 L 22.662,14.578 L 21.309,16.928 Z\"/>\n        <Path Fill=\"#ff003875\" Data=\"F1 M 40.000,7.352 L 0.000,7.352 L 0.000,2.835 L 40.000,2.835 L 40.000,7.352 Z\"/>\n        <Path Fill=\"#ff003875\" Data=\"F1 M 40.000,21.803 L 0.000,21.803 L 0.000,26.320 L 40.000,26.320 L 40.000,21.803 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 16.710,13.507 L 15.969,12.227 L 17.450,12.227 L 16.710,13.507 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 17.450,16.928 L 15.969,16.928 L 16.710,15.647 L 17.450,16.928 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 24.026,16.928 L 22.545,16.928 L 23.285,15.647 L 24.026,16.928 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 20.680,11.154 L 19.315,11.154 L 19.997,9.975 L 20.680,11.154 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 23.285,13.507 L 22.545,12.227 L 24.026,12.227 L 23.285,13.507 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 19.997,19.180 L 19.315,18.001 L 20.680,18.001 L 19.997,19.180 Z\"/>\n    </Canvas>\n    \n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Germany\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"240\">\n        <Path Data=\"F1M240.083,48.115L0.125,48.115 0.125,0.125 240.083,0.125z\" Fill=\"Black\" Height=\"48.241\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Width=\"240\"/>\n        <Path Data=\"F1M240.083,48.118L0.125,48.118 0.125,0.125 240.083,0.125z\" Fill=\"#FFF8A81E\" Height=\"48.243\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"95.981\" Width=\"240\"/>\n        <Path Data=\"F1M240.083,48.116L0.125,48.116 0.125,0.125 240.083,0.125z\" Fill=\"#FFEC192D\" Height=\"48.241\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"47.99\" Width=\"240\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.France\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"215\">\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.128,0.125 72.128,144.125z\" Fill=\"#FFEC1248\" Height=\"144.25\" Canvas.Left=\"143.997\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"2.5\" Width=\"72.253\"/>\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.124,0.125 72.124,144.125z\" Fill=\"#FF0C4371\" Height=\"144.25\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"2.5\" Width=\"72.249\"/>\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.123,0.125 72.123,144.125z\" Fill=\"White\" Height=\"144.25\" Canvas.Left=\"71.999\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"2.5\" Width=\"72.249\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Greece\" HorizontalAlignment=\"Center\" Height=\"144.334\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"215.667\">\n        <Path Data=\"F1M216.125,144.125L216.125,0.125 0.125,0.125 0.125,144.125z\" Fill=\"#FF287AC7\" Height=\"144.25\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Width=\"216.25\"/>\n        <Path Data=\"F1M136.188,16.125L0.125,16.125 0.125,0.125 136.188,0.125z\" Fill=\"White\" Height=\"16.25\" Canvas.Left=\"79.937\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"15.708\" Width=\"136.313\"/>\n        <Path Data=\"F1M136.188,16.127L0.125,16.127 0.125,0.125 136.188,0.125z\" Fill=\"White\" Height=\"16.252\" Canvas.Left=\"79.937\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"47.708\" Width=\"136.313\"/>\n        <Path Data=\"F1M216.125,16.125L0.125,16.125 0.125,0.125 216.125,0.125z\" Fill=\"White\" Height=\"16.25\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"111.712\" Width=\"216.25\"/>\n        <Path Data=\"F1M47.875,80.085L216.125,80.085 216.125,96.128 0.125,96.128 0.125,80.085 31.875,80.085 31.875,48.125 0.125,48.125 0.125,32.125 31.875,32.125 31.875,0.125 47.875,0.125 47.875,32.125 80.062,32.125 80.062,48.125 47.875,48.125z\" Fill=\"White\" Height=\"96.253\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"0\" Width=\"216.25\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Romania\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"216\">\n        <Path Data=\"F1M0.125,0.125L0.125,144.125 72.128,144.125 72.128,0.125z\" Fill=\"#FFEC192D\" Height=\"144\" Canvas.Left=\"143.997\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Width=\"72\"/>\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.124,0.125 72.124,144.125z\" Fill=\"#FF1A68BA\" Height=\"144\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Width=\"72\"/>\n        <Path Data=\"F1M0.125,144.125L0.125,0.125 72.123,0.125 72.123,144.125z\" Fill=\"#FFFEF100\" Height=\"144\" Canvas.Left=\"71.999\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Width=\"72\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.India\" HorizontalAlignment=\"Center\" Height=\"144\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"216\">\n        <Path Data=\"F1M216.245,48.151L0.125,48.151 0.125,0.125 216.245,0.125z\" Fill=\"White\" Height=\"48\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"48.026\" Width=\"216\"/>\n        <Path Data=\"F1M216.245,48.151L0.125,48.151 0.125,0.125 216.245,0.125z\" Fill=\"#FFF37116\" Height=\"48\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Width=\"216\"/>\n        <Path Data=\"F1M0.125,48.153L216.245,48.153 216.245,0.125 0.125,0.125z\" Fill=\"#FF007E56\" Height=\"48\" Stroke=\"Black\" StrokeThickness=\"0.25\" StrokeMiterLimit=\"4\" Canvas.Top=\"96.052\" Width=\"216\"/>\n        <Path Data=\"F1M22.298,44.596C34.613,44.596 44.596,34.613 44.596,22.298 44.596,9.984 34.613,0 22.298,0 9.983,0 0,9.984 0,22.298 0,34.613 9.983,44.596 22.298,44.596z\" Fill=\"#FF1B4974\" Height=\"44.596\" Canvas.Left=\"85.887\" Canvas.Top=\"49.867\" Width=\"44.596\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Portugal\" HorizontalAlignment=\"Center\" Height=\"40\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"60\">\n        <Path Data=\"F1M0,40.011L36.917,40.011 36.917,0 0,0z\" Fill=\"#FFEC192D\" Height=\"40.011\" Canvas.Left=\"23.101\" Canvas.Top=\"0.014\" Width=\"36.917\"/>\n        <Path Data=\"F1M0,40.011L23.087,40.011 23.087,0 0,0z\" Fill=\"#FF309131\" Height=\"40.011\" Canvas.Left=\"0.014\" Canvas.Top=\"0.014\" Width=\"23.087\"/>\n\n        <Canvas Clip=\"M0,0L60.032,0 60.032,40.039 0,40.039z\" Height=\"40.039\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"60.032\">\n            <Path Data=\"M23.101,40.025L0.014,40.025 0.014,0.014 23.101,0.014 60.018,0.014 60.018,40.025z\" Height=\"40.039\" Canvas.Left=\"0.001\" Stroke=\"Black\" StrokeThickness=\"0.028\" StrokeMiterLimit=\"4\" Canvas.Top=\"0\" Width=\"60.032\"/>\n            <Path Data=\"F1M18.282,10.144C18.225,10.144 18.157,10.137 18.075,10.127 16.854,9.982 13.228,8.291 9.123,5.912 5.019,3.533 1.75,1.223 1.013,0.235 0.966,0.173 0.927,0.119 0.899,0.071L0.031,1.583C-0.016,1.665 -0.066,1.677 0.061,1.853 0.775,2.831 4.058,5.152 8.184,7.544 12.312,9.938 15.958,11.632 17.155,11.763 17.37,11.787 17.332,11.72 17.401,11.656z\" Fill=\"#FFF6E21B\" Height=\"11.798\" Canvas.Left=\"14.008\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"14.176\" Width=\"18.344\"/>\n            <Path Data=\"F1M0.028,0.098C-0.054,0.199 0.029,0.32 0.166,0.502 0.903,1.49 4.174,3.798 8.278,6.177 12.382,8.557 16.009,10.247 17.227,10.395 17.453,10.421 17.591,10.436 17.644,10.312 17.699,10.185 17.474,9.884 17.474,9.884 17.525,10.029 17.602,10.176 17.388,10.153 16.19,10.023 12.546,8.326 8.418,5.932 4.292,3.54 1.007,1.22 0.295,0.242 0.167,0.067 0.295,0.059 0.459,0.035 0.198,0.029 0.116,-0.008 0.028,0.098\" Fill=\"#FFF6E21B\" Height=\"10.431\" Canvas.Left=\"14.798\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"14.016\" Width=\"17.676\"/>\n            <Path Data=\"F1M0.029,0.103C-0.042,0.202 0.042,0.343 0.178,0.527 0.917,1.512 4.186,3.821 8.29,6.201 12.394,8.58 16.021,10.271 17.24,10.419 17.466,10.447 17.588,10.451 17.657,10.337 17.675,10.236 17.675,10.275 17.609,10.115 17.609,10.115 17.614,10.199 17.401,10.177 16.203,10.044 12.558,8.349 8.431,5.956 4.304,3.563 1.021,1.243 0.306,0.265 0.179,0.09 0.228,0.121 0.237,0.042 0.158,0.054 0.128,0.026 0.029,0.103\" Fill=\"#FFF6E21B\" Height=\"10.454\" Canvas.Left=\"13.779\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"15.743\" Width=\"17.691\"/>\n            <Path Data=\"F1M0.593,0.944C1.541,1.405 4.885,1.745 8.867,1.745 12.837,1.745 16.174,1.407 17.134,0.948L17.64,0.089C16.67,0.579 13.111,0.944 8.867,0.944 4.618,0.944 1.056,0.579 0.092,0.087z\" Fill=\"#FFF6E21B\" Height=\"1.78\" Canvas.Left=\"14.255\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"24.521\" Width=\"17.732\"/>\n            <Path Data=\"F1M16.872,0.051C16.77,0.131 16.728,0.158 16.623,0.197 15.502,0.627 12.275,0.938 8.468,0.938 4.66,0.938 1.432,0.627 0.313,0.197 0.214,0.16 0.151,0.121 0.063,0.055 0.041,0.104 0.036,0.151 0.036,0.151 0.036,0.733 3.81,1.205 8.469,1.205 13.126,1.205 16.901,0.733 16.901,0.151 16.901,0.151 16.894,0.1 16.872,0.051\" Fill=\"#FFF6E21B\" Height=\"1.241\" Canvas.Left=\"14.654\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"25.191\" Width=\"16.936\"/>\n            <Path Data=\"F1M0.147,0.036C0.112,0.138 0.195,0.225 0.29,0.265 1.425,0.725 4.874,1.059 8.951,1.059 12.92,1.059 16.665,0.649 17.614,0.263 17.709,0.223 17.788,0.169 17.765,0.058 17.863,0.098 17.866,0.215 17.866,0.215 17.866,0.827 13.875,1.325 8.95,1.325 4.026,1.325 0.036,0.827 0.036,0.215 0.036,0.215 0.028,0.102 0.147,0.036\" Fill=\"#FFF6E21B\" Height=\"1.361\" Canvas.Left=\"14.172\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"24.28\" Width=\"17.901\"/>\n            <Path Data=\"F1M19.863,0.081C19.814,0.125 19.753,0.168 19.676,0.218 18.561,0.955 14.628,1.497 9.945,1.497 5.264,1.497 1.331,0.955 0.215,0.219 0.144,0.173 0.085,0.132 0.036,0.09L0.039,0.731C0.039,0.873 0.001,0.927 0.196,1.06 1.288,1.799 5.238,2.348 9.945,2.348 14.654,2.348 18.606,1.799 19.696,1.059 19.889,0.926 19.825,0.868 19.851,0.731z\" Fill=\"#FFF6E21B\" Height=\"2.383\" Canvas.Left=\"13.174\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"19.607\" Width=\"19.9\"/>\n            <Path Data=\"F1M19.841,0.142C19.955,0.292 20.028,0.462 19.834,0.594 18.744,1.335 14.792,1.882 10.084,1.882 5.377,1.882 1.426,1.336 0.335,0.595 0.14,0.463 0.214,0.284 0.329,0.133 0.329,0.133 0.032,0.319 0.035,0.465 0.015,0.66 0.146,0.755 0.354,0.891 1.47,1.625 5.403,2.165 10.084,2.165 14.766,2.165 18.699,1.624 19.815,0.891 20.022,0.754 20.148,0.667 20.131,0.465 20.115,0.257 19.841,0.142 19.841,0.142\" Fill=\"#FFF6E21B\" Height=\"2.201\" Canvas.Left=\"13.039\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"19.18\" Width=\"20.167\"/>\n            <Path Data=\"F1M19.991,0.074C19.969,0.065 20.028,0.282 19.834,0.414 18.744,1.152 14.792,1.699 10.083,1.699 5.377,1.699 1.426,1.153 0.335,0.415 0.139,0.282 0.165,0.223 0.169,0.07 0.169,0.07 0.063,0.144 0.035,0.284 0.023,0.475 0.145,0.574 0.353,0.71 1.47,1.442 5.402,1.982 10.083,1.982 14.765,1.982 18.699,1.441 19.814,0.709 20.021,0.574 20.129,0.488 20.131,0.284 20.119,0.166 20.044,0.114 19.991,0.074\" Fill=\"#FFF6E21B\" Height=\"2.017\" Canvas.Left=\"13.04\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"20.213\" Width=\"20.167\"/>\n            <Path Data=\"F1M17.675,0.922C17.439,1.505 13.578,1.97 8.851,1.97 4.189,1.97 0.371,1.518 0.041,0.945L0.514,0.075C0.804,0.619 4.426,1.049 8.851,1.049 13.278,1.049 16.899,0.619 17.189,0.075z\" Fill=\"#FFF6E21B\" Height=\"2.005\" Canvas.Left=\"14.271\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"14.656\" Width=\"17.714\"/>\n            <Path Data=\"F1M16.872,0.051C16.77,0.131 16.727,0.158 16.622,0.198 15.502,0.628 12.274,0.938 8.468,0.938 4.659,0.938 1.432,0.627 0.312,0.198 0.214,0.16 0.151,0.121 0.062,0.055 0.04,0.104 0.036,0.152 0.036,0.152 0.036,0.734 3.81,1.205 8.468,1.205 13.126,1.205 16.901,0.734 16.901,0.152 16.901,0.152 16.894,0.1 16.872,0.051\" Fill=\"#FFF6E21B\" Height=\"1.24\" Canvas.Left=\"14.654\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"14.613\" Width=\"16.936\"/>\n            <Path Data=\"F1M0.147,0.036C0.112,0.139 0.195,0.225 0.29,0.265 1.425,0.727 4.874,1.064 8.951,1.064 12.92,1.064 16.665,0.651 17.614,0.264 17.709,0.224 17.788,0.169 17.765,0.058 17.863,0.098 17.866,0.215 17.866,0.215 17.866,0.83 13.875,1.329 8.95,1.329 4.026,1.329 0.036,0.83 0.036,0.215 0.036,0.215 0.028,0.102 0.147,0.036\" Fill=\"#FFF6E21B\" Height=\"1.365\" Canvas.Left=\"14.172\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"15.418\" Width=\"17.901\"/>\n            <Path Data=\"F1M19.564,9.801C19.564,15.195 15.193,19.567 9.799,19.567 4.406,19.567 0.035,15.195 0.035,9.801 0.035,4.408 4.406,0.036 9.799,0.036 15.193,0.036 19.564,4.408 19.564,9.801 M9.799,1.169C5.032,1.169 1.167,5.033 1.167,9.801 1.167,14.57 5.032,18.434 9.799,18.434 14.567,18.434 18.431,14.57 18.431,9.801 18.431,5.033 14.567,1.169 9.799,1.169\" Fill=\"#FFF6E21B\" Height=\"19.602\" Canvas.Left=\"13.323\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"10.292\" Width=\"19.6\"/>\n            <Path Data=\"M18.998,9.517C18.998,14.754 14.753,18.999 9.517,18.999 4.28,18.999 0.035,14.754 0.035,9.517 0.035,4.281 4.28,0.036 9.517,0.036 14.753,0.036 18.998,4.281 18.998,9.517z\" Height=\"19.034\" Canvas.Left=\"13.606\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"10.576\" Width=\"19.034\"/>\n            <Path Data=\"M17.867,8.952C17.867,13.877 13.876,17.868 8.952,17.868 4.028,17.868 0.036,13.877 0.036,8.952 0.036,4.028 4.028,0.036 8.952,0.036 13.876,0.036 17.867,4.028 17.867,8.952z\" Height=\"17.903\" Canvas.Left=\"14.171\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"11.141\" Width=\"17.902\"/>\n            <Path Data=\"F1M0.038,2.302C0.087,2.258 0.149,2.216 0.225,2.166 1.34,1.428 5.274,0.886 9.956,0.886 14.638,0.886 18.57,1.428 19.686,2.164 19.756,2.21 19.816,2.252 19.864,2.294L19.862,1.652C19.862,1.51 19.9,1.456 19.704,1.324 18.612,0.584 14.662,0.036 9.956,0.036 5.248,0.036 1.296,0.584 0.206,1.324 0.012,1.456 0.077,1.514 0.05,1.652z\" Fill=\"#FFF6E21B\" Height=\"2.383\" Canvas.Left=\"13.171\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"18.216\" Width=\"19.9\"/>\n            <Path Data=\"F1M0.327,2.06C0.212,1.91 0.14,1.74 0.334,1.608 1.423,0.866 5.376,0.318 10.084,0.318 14.791,0.318 18.741,0.865 19.833,1.607 20.028,1.739 19.954,1.918 19.839,2.069 19.839,2.069 20.135,1.883 20.132,1.737 20.152,1.542 20.021,1.447 19.814,1.31 18.698,0.576 14.765,0.036 10.084,0.036 5.402,0.036 1.468,0.577 0.352,1.311 0.146,1.448 0.02,1.535 0.036,1.737 0.053,1.945 0.327,2.06 0.327,2.06\" Fill=\"#FFF6E21B\" Height=\"2.203\" Canvas.Left=\"13.039\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"18.825\" Width=\"20.167\"/>\n            <Path Data=\"F1M0.176,1.944C0.197,1.953 0.139,1.736 0.333,1.604 1.423,0.865 5.375,0.318 10.084,0.318 14.79,0.318 18.74,0.865 19.832,1.602 20.028,1.735 20.002,1.794 19.997,1.948 19.997,1.948 20.104,1.873 20.131,1.733 20.143,1.542 20.021,1.443 19.814,1.307 18.697,0.576 14.764,0.035 10.084,0.035 5.402,0.035 1.467,0.576 0.352,1.308 0.146,1.444 0.038,1.529 0.035,1.733 0.048,1.851 0.122,1.904 0.176,1.944\" Fill=\"#FFF6E21B\" Height=\"2.018\" Canvas.Left=\"13.039\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"17.976\" Width=\"20.167\"/>\n            <Path Data=\"F1M0.884,19.847L0.035,19.847 0.035,0.035 0.884,0.035z\" Fill=\"#FFF6E21B\" Height=\"19.883\" Canvas.Left=\"22.663\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"10.152\" Width=\"0.92\"/>\n            <Path Data=\"F1M0.319,19.99C0.319,20.068 0.255,20.133 0.177,20.133 0.099,20.133 0.036,20.068 0.036,19.99L0.036,0.178C0.036,0.1 0.099,0.036 0.177,0.036 0.255,0.036 0.319,0.1 0.319,0.178z\" Fill=\"#FFF6E21B\" Height=\"20.168\" Canvas.Left=\"22.521\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"10.009\" Width=\"0.354\"/>\n            <Path Data=\"F1M0.318,19.99C0.318,20.068 0.256,20.133 0.177,20.133 0.099,20.133 0.035,20.068 0.035,19.99L0.035,0.178C0.035,0.1 0.099,0.036 0.177,0.036 0.256,0.036 0.318,0.1 0.318,0.178z\" Fill=\"#FFF6E21B\" Height=\"20.168\" Canvas.Left=\"23.37\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"10.009\" Width=\"0.354\"/>\n            <Path Data=\"F1M0.039,1.083C0.276,0.499 4.136,0.035 8.863,0.035 13.524,0.035 17.343,0.486 17.673,1.059L17.199,1.929C16.91,1.386 13.289,0.955 8.863,0.955 4.436,0.955 0.815,1.386 0.525,1.929z\" Fill=\"#FFF6E21B\" Height=\"2.004\" Canvas.Left=\"14.26\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"23.44\" Width=\"17.714\"/>\n            <Path Data=\"F1M0.404,1.399C0.139,1.184 0.208,1.083 0.314,1.042 1.434,0.612 4.662,0.303 8.468,0.303 12.277,0.303 15.505,0.614 16.624,1.042 16.722,1.081 16.776,1.192 16.547,1.391 16.914,1.245 16.9,1.088 16.9,1.088 16.9,0.506 13.126,0.035 8.468,0.035 3.81,0.035 0.035,0.506 0.035,1.088 0.035,1.088 0.002,1.237 0.404,1.399\" Fill=\"#FFF6E21B\" Height=\"1.502\" Canvas.Left=\"14.655\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"24.247\" Width=\"16.936\"/>\n            <Path Data=\"F1M17.651,1.401C17.77,1.264 17.704,1.139 17.61,1.101 16.474,0.637 13.026,0.301 8.949,0.301 4.979,0.301 1.235,0.714 0.286,1.102 0.191,1.141 0.098,1.243 0.205,1.397 -0.008,1.255 0.033,1.15 0.033,1.15 0.033,0.535 4.025,0.036 8.949,0.036 13.874,0.036 17.864,0.535 17.864,1.15 17.864,1.15 17.854,1.327 17.651,1.401\" Fill=\"#FFF6E21B\" Height=\"1.53\" Canvas.Left=\"14.174\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"23.318\" Width=\"17.9\"/>\n            <Path Data=\"F1M17.139,0.837C16.192,0.377 12.847,0.036 8.865,0.036 4.895,0.036 1.558,0.375 0.598,0.833L0.092,1.695C1.062,1.202 4.621,0.837 8.865,0.837 13.114,0.837 16.676,1.204 17.641,1.697z\" Fill=\"#FFF6E21B\" Height=\"1.783\" Canvas.Left=\"14.258\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"13.797\" Width=\"17.733\"/>\n            <Path Data=\"F1M0.065,1.189C0.167,1.11 0.209,1.083 0.315,1.042 1.436,0.613 4.662,0.302 8.469,0.302 12.278,0.302 15.506,0.613 16.625,1.043 16.724,1.08 16.786,1.119 16.874,1.185 16.897,1.136 16.901,1.088 16.901,1.088 16.901,0.506 13.127,0.035 8.469,0.035 3.812,0.035 0.036,0.506 0.036,1.088 0.036,1.088 0.043,1.141 0.065,1.189\" Fill=\"#FFF6E21B\" Height=\"1.24\" Canvas.Left=\"14.654\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"13.667\" Width=\"16.936\"/>\n            <Path Data=\"F1M17.755,1.328C17.79,1.226 17.706,1.139 17.612,1.1 16.477,0.638 13.028,0.301 8.951,0.301 4.982,0.301 1.237,0.714 0.289,1.101 0.193,1.141 0.114,1.195 0.136,1.307 0.039,1.266 0.035,1.149 0.035,1.149 0.035,0.534 4.027,0.035 8.952,0.035 13.876,0.035 17.866,0.534 17.866,1.149 17.866,1.149 17.874,1.262 17.755,1.328\" Fill=\"#FFF6E21B\" Height=\"1.366\" Canvas.Left=\"14.171\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"14.457\" Width=\"17.902\"/>\n            <Path Data=\"F1M0.063,1.656C0.12,1.655 0.188,1.662 0.271,1.672 1.491,1.817 5.118,3.508 9.223,5.887 13.326,8.266 16.596,10.577 17.333,11.563 17.379,11.626 17.418,11.68 17.447,11.729L18.314,10.215C18.361,10.133 18.412,10.121 18.285,9.945 17.571,8.968 14.288,6.646 10.162,4.254 6.034,1.86 2.389,0.165 1.19,0.035 0.976,0.011 1.015,0.079 0.946,0.143z\" Fill=\"#FFF6E21B\" Height=\"11.8\" Canvas.Left=\"13.892\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"14.21\" Width=\"18.344\"/>\n            <Path Data=\"F1M17.649,10.333C17.731,10.233 17.648,10.11 17.511,9.929 16.773,8.94 13.503,6.633 9.399,4.253 5.295,1.874 1.668,0.184 0.449,0.035 0.223,0.008 0.085,-0.006 0.032,0.118 -0.022,0.246 0.202,0.547 0.202,0.547 0.151,0.401 0.075,0.254 0.289,0.277 1.487,0.407 5.131,2.104 9.259,4.497 13.385,6.89 16.669,9.21 17.382,10.188 17.509,10.364 17.382,10.372 17.218,10.395 17.478,10.401 17.56,10.438 17.649,10.333\" Fill=\"#FFF6E21B\" Height=\"10.431\" Canvas.Left=\"13.77\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"15.739\" Width=\"17.677\"/>\n            <Path Data=\"F1M17.661,10.35C17.732,10.251 17.648,10.11 17.512,9.927 16.773,8.941 13.504,6.632 9.4,4.253 5.296,1.873 1.669,0.183 0.451,0.035 0.224,0.007 0.103,0.002 0.034,0.117 0.016,0.217 0.015,0.179 0.081,0.337 0.081,0.337 0.076,0.254 0.289,0.277 1.487,0.409 5.132,2.105 9.26,4.498 13.386,6.89 16.67,9.21 17.384,10.188 17.512,10.363 17.462,10.332 17.453,10.411 17.532,10.399 17.562,10.427 17.661,10.35\" Fill=\"#FFF6E21B\" Height=\"10.453\" Canvas.Left=\"14.776\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"13.989\" Width=\"17.69\"/>\n            <Path Data=\"F1M0.036,7.675C0.036,10.937 2.706,13.581 5.968,13.581 9.23,13.581 11.866,10.937 11.866,7.675L11.866,0.036 0.036,0.036z\" Fill=\"#FFFEFEFE\" Height=\"13.616\" Canvas.Left=\"17.173\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"13.499\" Width=\"11.902\"/>\n            <Path Data=\"F1M0,7.455C0,10.64 2.605,13.221 5.791,13.221 8.975,13.221 11.548,10.64 11.548,7.455L11.548,0 0,0z\" Fill=\"#FFEC192D\" Height=\"13.221\" Canvas.Left=\"17.35\" Canvas.Top=\"13.697\" Width=\"11.548\"/>\n            <Path Data=\"F1M0.035,4.654C0.035,6.627 1.568,8.225 3.442,8.225 5.315,8.225 6.829,6.627 6.829,4.654L6.829,0.035 0.035,0.035z\" Fill=\"#FFFEFEFE\" Height=\"8.261\" Canvas.Left=\"19.692\" Stroke=\"Black\" StrokeThickness=\"0.071\" StrokeMiterLimit=\"4\" Canvas.Top=\"16.333\" Width=\"6.865\"/>\n            <Path Data=\"F1M0.009,1.093C0.009,1.555 0.363,1.93 0.797,1.93 1.23,1.93 1.581,1.555 1.581,1.093L1.581,0.009 0.009,0.009z\" Fill=\"#FF1478C6\" Height=\"1.939\" Canvas.Left=\"22.328\" Stroke=\"Black\" StrokeThickness=\"0.018\" StrokeMiterLimit=\"4\" Canvas.Top=\"16.941\" Width=\"1.59\"/>\n            <Path Data=\"F1M0.009,1.092C0.009,1.555 0.363,1.93 0.797,1.93 1.23,1.93 1.581,1.555 1.581,1.092L1.581,0.009 0.009,0.009z\" Fill=\"#FF1478C6\" Height=\"1.939\" Canvas.Left=\"22.328\" Stroke=\"Black\" StrokeThickness=\"0.018\" StrokeMiterLimit=\"4\" Canvas.Top=\"19.455\" Width=\"1.59\"/>\n            <Path Data=\"F1M0.009,1.092C0.009,1.556 0.363,1.93 0.797,1.93 1.23,1.93 1.581,1.556 1.581,1.092L1.581,0.01 0.009,0.01z\" Fill=\"#FF1478C6\" Height=\"1.938\" Canvas.Left=\"22.328\" Stroke=\"Black\" StrokeThickness=\"0.018\" StrokeMiterLimit=\"4\" Canvas.Top=\"21.968\" Width=\"1.59\"/>\n            <Path Data=\"F1M0.009,1.092C0.009,1.555 0.363,1.93 0.797,1.93 1.231,1.93 1.58,1.555 1.58,1.092L1.58,0.009 0.009,0.009z\" Fill=\"#FF1478C6\" Height=\"1.939\" Canvas.Left=\"20.295\" Stroke=\"Black\" StrokeThickness=\"0.018\" StrokeMiterLimit=\"4\" Canvas.Top=\"19.455\" Width=\"1.589\"/>\n            <Path Data=\"F1M1.581,1.092C1.581,1.555 1.226,1.93 0.793,1.93 0.36,1.93 0.009,1.555 0.009,1.092L0.009,0.009 1.581,0.009z\" Fill=\"#FF1478C6\" Height=\"1.939\" Canvas.Left=\"24.36\" Stroke=\"Black\" StrokeThickness=\"0.018\" StrokeMiterLimit=\"4\" Canvas.Top=\"19.455\" Width=\"1.59\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Argentina\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\" Height=\"12.8\">\n        <Canvas>\n            <Path Fill=\"#ffffffff\" Data=\"F1 M 20.000,8.572 L 0.000,8.572 L 0.000,4.286 L 20.000,4.286 L 20.000,8.572 Z\"/>\n            <Path Fill=\"#ffb3d6f1\" Data=\"F1 M 0.000,8.572 L 20.000,8.572 L 20.000,12.857 L 0.000,12.857 L 0.000,8.572 Z\"/>\n            <Path Fill=\"#ffb3d6f1\" Data=\"F1 M 20.000,4.286 L 0.000,4.286 L 0.000,0.000 L 20.000,0.000 L 20.000,4.286 Z\"/>\n\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.000,6.992 C 10.312,6.992 10.566,6.739 10.566,6.427 C 10.566,6.115 10.312,5.861 10.000,5.861 C 9.688,5.861 9.434,6.115 9.434,6.427 C 9.434,6.739 9.688,6.992 10.000,6.992 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.000,6.427\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.000,5.029 C 10.034,5.029 10.040,5.100 10.043,5.194 C 10.047,5.366 10.059,5.490 10.069,5.707 C 10.075,5.819 10.015,5.804 10.000,5.804 C 9.985,5.804 9.925,5.819 9.930,5.707 C 9.941,5.490 9.953,5.366 9.957,5.194 C 9.960,5.100 9.966,5.029 10.000,5.029 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.728,5.056 C 9.673,5.059 9.677,5.234 9.720,5.320 C 9.763,5.406 9.800,5.479 9.792,5.575 C 9.780,5.720 9.785,5.834 9.878,5.816 C 9.906,5.811 9.958,5.783 9.922,5.714 C 9.897,5.665 9.892,5.609 9.890,5.509 C 9.888,5.354 9.793,5.343 9.775,5.218 C 9.761,5.116 9.756,5.055 9.728,5.056 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.464,5.135 C 9.495,5.122 9.529,5.186 9.567,5.271 C 9.637,5.429 9.696,5.539 9.788,5.736 C 9.836,5.837 9.774,5.846 9.761,5.852 C 9.747,5.857 9.698,5.894 9.660,5.789 C 9.586,5.584 9.550,5.465 9.488,5.304 C 9.454,5.217 9.433,5.148 9.464,5.135 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.222,5.266 C 9.262,5.229 9.383,5.356 9.414,5.447 C 9.444,5.538 9.470,5.616 9.543,5.678 C 9.655,5.772 9.731,5.856 9.653,5.909 C 9.630,5.925 9.574,5.942 9.550,5.869 C 9.533,5.816 9.497,5.773 9.427,5.701 C 9.319,5.589 9.378,5.515 9.302,5.413 C 9.241,5.331 9.201,5.285 9.222,5.266 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.010,5.439 C 9.034,5.415 9.089,5.461 9.157,5.525 C 9.282,5.644 9.378,5.723 9.539,5.869 C 9.622,5.945 9.569,5.977 9.558,5.987 C 9.548,5.997 9.516,6.051 9.441,5.968 C 9.294,5.807 9.215,5.710 9.097,5.585 C 9.032,5.518 8.986,5.463 9.010,5.439 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.837,5.651 C 8.800,5.691 8.927,5.812 9.019,5.843 C 9.110,5.873 9.187,5.899 9.249,5.972 C 9.344,6.083 9.427,6.160 9.481,6.082 C 9.496,6.059 9.514,6.002 9.440,5.979 C 9.388,5.962 9.344,5.926 9.272,5.856 C 9.160,5.748 9.086,5.807 8.985,5.731 C 8.902,5.669 8.856,5.630 8.837,5.651 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.707,5.893 C 8.719,5.862 8.788,5.883 8.875,5.917 C 9.036,5.979 9.155,6.015 9.360,6.088 C 9.466,6.127 9.428,6.176 9.423,6.190 C 9.417,6.203 9.409,6.265 9.307,6.217 C 9.110,6.124 9.000,6.065 8.843,5.995 C 8.757,5.958 8.694,5.924 8.707,5.893 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.628,6.156 C 8.630,6.102 8.806,6.106 8.892,6.149 C 8.977,6.192 9.051,6.229 9.146,6.221 C 9.292,6.209 9.405,6.214 9.387,6.307 C 9.382,6.334 9.355,6.386 9.286,6.351 C 9.237,6.326 9.181,6.320 9.080,6.319 C 8.925,6.316 8.914,6.222 8.789,6.204 C 8.687,6.190 8.626,6.185 8.628,6.156 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.600,6.429 C 8.600,6.395 8.672,6.388 8.765,6.386 C 8.937,6.382 9.061,6.369 9.279,6.359 C 9.391,6.354 9.375,6.414 9.375,6.429 C 9.375,6.443 9.391,6.503 9.279,6.498 C 9.061,6.488 8.937,6.476 8.765,6.471 C 8.672,6.469 8.600,6.462 8.600,6.429 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.628,6.701 C 8.630,6.755 8.806,6.751 8.892,6.708 C 8.977,6.665 9.051,6.629 9.146,6.637 C 9.292,6.648 9.405,6.644 9.387,6.551 C 9.382,6.523 9.355,6.471 9.286,6.506 C 9.237,6.531 9.181,6.537 9.080,6.539 C 8.925,6.541 8.914,6.635 8.789,6.653 C 8.687,6.668 8.626,6.672 8.628,6.701 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.707,6.964 C 8.694,6.933 8.757,6.900 8.843,6.862 C 9.000,6.792 9.110,6.733 9.307,6.641 C 9.409,6.593 9.417,6.654 9.423,6.668 C 9.428,6.681 9.466,6.731 9.360,6.769 C 9.155,6.843 9.036,6.879 8.875,6.941 C 8.788,6.974 8.719,6.996 8.707,6.964 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 8.837,7.207 C 8.800,7.167 8.927,7.045 9.019,7.015 C 9.110,6.984 9.187,6.959 9.249,6.886 C 9.344,6.774 9.427,6.697 9.481,6.776 C 9.496,6.799 9.514,6.855 9.440,6.879 C 9.388,6.896 9.344,6.931 9.272,7.001 C 9.160,7.109 9.086,7.050 8.985,7.126 C 8.902,7.188 8.856,7.228 8.837,7.207 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.010,7.419 C 8.986,7.395 9.032,7.339 9.097,7.272 C 9.215,7.147 9.294,7.051 9.441,6.890 C 9.516,6.807 9.548,6.860 9.558,6.870 C 9.569,6.881 9.622,6.912 9.539,6.988 C 9.378,7.135 9.282,7.214 9.157,7.332 C 9.089,7.396 9.034,7.442 9.010,7.419 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.222,7.592 C 9.262,7.628 9.383,7.501 9.414,7.410 C 9.444,7.319 9.470,7.241 9.543,7.180 C 9.655,7.085 9.731,7.001 9.653,6.948 C 9.630,6.932 9.574,6.915 9.550,6.989 C 9.533,7.041 9.497,7.085 9.427,7.157 C 9.319,7.268 9.378,7.343 9.302,7.444 C 9.241,7.526 9.201,7.572 9.222,7.592 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.464,7.722 C 9.433,7.709 9.455,7.640 9.488,7.553 C 9.550,7.393 9.586,7.273 9.660,7.069 C 9.698,6.963 9.747,7.000 9.761,7.006 C 9.774,7.011 9.836,7.020 9.788,7.122 C 9.696,7.319 9.637,7.429 9.567,7.586 C 9.529,7.671 9.495,7.735 9.464,7.722 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 9.728,7.801 C 9.673,7.799 9.677,7.623 9.720,7.537 C 9.763,7.451 9.800,7.378 9.792,7.283 C 9.780,7.137 9.785,7.024 9.878,7.041 C 9.906,7.047 9.958,7.074 9.922,7.143 C 9.897,7.192 9.892,7.248 9.890,7.348 C 9.888,7.504 9.793,7.514 9.775,7.640 C 9.761,7.742 9.756,7.802 9.728,7.801 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.000,7.829 C 9.966,7.829 9.960,7.757 9.957,7.664 C 9.953,7.492 9.941,7.368 9.930,7.150 C 9.925,7.038 9.985,7.053 10.000,7.053 C 10.015,7.053 10.075,7.038 10.069,7.150 C 10.059,7.368 10.047,7.492 10.043,7.664 C 10.040,7.757 10.034,7.829 10.000,7.829 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.272,7.801 C 10.326,7.799 10.323,7.623 10.280,7.537 C 10.237,7.451 10.200,7.378 10.208,7.283 C 10.220,7.137 10.215,7.024 10.122,7.041 C 10.094,7.047 10.042,7.074 10.078,7.143 C 10.103,7.192 10.108,7.248 10.110,7.348 C 10.112,7.504 10.207,7.514 10.225,7.640 C 10.239,7.742 10.244,7.802 10.272,7.801 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.536,7.722 C 10.505,7.735 10.471,7.671 10.433,7.586 C 10.363,7.429 10.304,7.319 10.212,7.122 C 10.164,7.020 10.226,7.011 10.239,7.006 C 10.253,7.000 10.302,6.963 10.340,7.069 C 10.414,7.273 10.450,7.393 10.512,7.553 C 10.546,7.640 10.567,7.709 10.536,7.722 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.778,7.592 C 10.738,7.628 10.617,7.501 10.586,7.410 C 10.556,7.319 10.530,7.241 10.457,7.180 C 10.345,7.085 10.269,7.001 10.347,6.948 C 10.370,6.932 10.426,6.915 10.450,6.989 C 10.467,7.041 10.503,7.085 10.573,7.157 C 10.681,7.268 10.622,7.343 10.698,7.444 C 10.759,7.526 10.799,7.572 10.778,7.592 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.990,7.419 C 10.966,7.442 10.911,7.396 10.843,7.332 C 10.718,7.214 10.622,7.135 10.461,6.988 C 10.378,6.912 10.431,6.881 10.442,6.870 C 10.452,6.860 10.484,6.807 10.559,6.890 C 10.706,7.051 10.785,7.147 10.903,7.272 C 10.968,7.339 11.014,7.395 10.990,7.419 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.163,7.207 C 11.200,7.167 11.073,7.045 10.981,7.015 C 10.890,6.984 10.813,6.959 10.751,6.886 C 10.656,6.774 10.573,6.697 10.519,6.776 C 10.504,6.799 10.486,6.855 10.560,6.879 C 10.612,6.896 10.656,6.931 10.728,7.001 C 10.840,7.109 10.914,7.050 11.015,7.126 C 11.098,7.188 11.144,7.228 11.163,7.207 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.293,6.964 C 11.281,6.996 11.212,6.974 11.125,6.941 C 10.964,6.879 10.845,6.843 10.640,6.769 C 10.534,6.731 10.572,6.681 10.577,6.668 C 10.583,6.654 10.591,6.593 10.693,6.641 C 10.890,6.733 11.000,6.792 11.157,6.862 C 11.243,6.900 11.306,6.933 11.293,6.964 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.372,6.701 C 11.370,6.755 11.194,6.751 11.108,6.708 C 11.022,6.665 10.949,6.629 10.854,6.637 C 10.708,6.648 10.595,6.644 10.613,6.551 C 10.618,6.523 10.645,6.471 10.714,6.506 C 10.763,6.531 10.819,6.537 10.920,6.539 C 11.075,6.541 11.086,6.635 11.211,6.653 C 11.313,6.668 11.374,6.672 11.372,6.701 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.400,6.429 C 11.400,6.462 11.328,6.469 11.235,6.471 C 11.063,6.476 10.939,6.488 10.721,6.498 C 10.609,6.503 10.625,6.443 10.625,6.429 C 10.625,6.414 10.609,6.354 10.721,6.359 C 10.939,6.369 11.063,6.382 11.235,6.386 C 11.328,6.388 11.400,6.395 11.400,6.429 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.372,6.156 C 11.370,6.102 11.194,6.106 11.108,6.149 C 11.022,6.192 10.949,6.229 10.854,6.221 C 10.708,6.209 10.595,6.214 10.613,6.307 C 10.618,6.334 10.645,6.386 10.714,6.351 C 10.763,6.326 10.819,6.320 10.920,6.319 C 11.075,6.316 11.086,6.222 11.211,6.204 C 11.313,6.190 11.374,6.185 11.372,6.156 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.293,5.893 C 11.306,5.924 11.243,5.958 11.157,5.995 C 11.000,6.065 10.890,6.124 10.693,6.217 C 10.591,6.265 10.583,6.203 10.577,6.190 C 10.572,6.176 10.534,6.127 10.640,6.088 C 10.845,6.015 10.964,5.978 11.125,5.917 C 11.212,5.883 11.281,5.862 11.293,5.893 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 11.163,5.651 C 11.200,5.691 11.073,5.812 10.981,5.843 C 10.890,5.873 10.813,5.899 10.751,5.972 C 10.656,6.083 10.573,6.160 10.519,6.082 C 10.504,6.059 10.486,6.002 10.560,5.979 C 10.612,5.962 10.656,5.926 10.728,5.856 C 10.840,5.748 10.914,5.807 11.015,5.731 C 11.098,5.669 11.144,5.630 11.163,5.651 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.990,5.439 C 11.014,5.463 10.968,5.518 10.904,5.585 C 10.785,5.710 10.706,5.807 10.559,5.968 C 10.484,6.051 10.452,5.997 10.442,5.987 C 10.431,5.977 10.378,5.945 10.461,5.869 C 10.622,5.723 10.718,5.644 10.843,5.525 C 10.911,5.461 10.966,5.415 10.990,5.439 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.778,5.266 C 10.738,5.229 10.617,5.356 10.586,5.447 C 10.556,5.538 10.530,5.616 10.457,5.678 C 10.345,5.772 10.269,5.856 10.347,5.909 C 10.370,5.925 10.426,5.942 10.450,5.869 C 10.467,5.816 10.503,5.773 10.573,5.701 C 10.681,5.589 10.622,5.515 10.698,5.413 C 10.759,5.331 10.799,5.285 10.778,5.266 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.536,5.135 C 10.567,5.148 10.545,5.217 10.512,5.304 C 10.450,5.465 10.414,5.584 10.340,5.789 C 10.302,5.894 10.253,5.857 10.239,5.852 C 10.226,5.846 10.164,5.837 10.212,5.736 C 10.304,5.539 10.363,5.429 10.433,5.271 C 10.471,5.186 10.505,5.122 10.536,5.135 Z\"/>\n            <Path StrokeThickness=\"0.0\" Stroke=\"#ff000000\" StrokeStartLineCap=\"Round\" StrokeEndLineCap=\"Round\" StrokeLineJoin=\"Round\" Fill=\"#ffffce46\" Data=\"F1 M 10.272,5.056 C 10.326,5.058 10.323,5.234 10.280,5.320 C 10.237,5.406 10.200,5.479 10.208,5.575 C 10.220,5.720 10.215,5.834 10.122,5.816 C 10.094,5.811 10.042,5.783 10.078,5.714 C 10.103,5.665 10.108,5.609 10.110,5.509 C 10.112,5.354 10.207,5.343 10.225,5.217 C 10.239,5.116 10.244,5.055 10.272,5.056 Z\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Denmark\" HorizontalAlignment=\"Center\" Height=\"16.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\">\n        <Path Data=\"F1M0,16.513L20,16.513 20,0 0,0z\" Fill=\"#FFF04728\" Height=\"16.513\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20\"/>\n        <Path Data=\"F1M7.046,0L7.046,7.067 0,7.067 0,9.446 7.046,9.446 7.046,16.513 9.4,16.513 9.4,9.446 20,9.446 20,7.067 9.4,7.067 9.4,0z\" Fill=\"#FFFEFEFE\" Height=\"16.513\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Turkey\" HorizontalAlignment=\"Center\" Height=\"13.3\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\">\n        <Path Data=\"F1M0,13.333L20,13.333 20,0 0,0z\" Fill=\"#FFF04728\" Height=\"13.333\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20\"/>\n        <Path Data=\"F1M5.933,5.351C5.462,5.773 4.842,5.986 4.16,5.986 2.69,5.986 1.499,4.795 1.499,3.326 1.499,1.857 2.69,0.666 4.16,0.666 4.842,0.666 5.462,0.881 5.933,1.303 5.324,0.535 4.382,0 3.325,0 1.489,0 0,1.49 0,3.326 0,5.163 1.489,6.652 3.325,6.652 4.38,6.652 5.324,6.117 5.933,5.351\" Fill=\"#FFFEFEFE\" Height=\"6.652\" Canvas.Left=\"3.349\" Canvas.Top=\"3.34\" Width=\"5.933\"/>\n        <Path Data=\"F1M1.192,0L1.156,1.194 0,1.528 1.135,1.937 1.09,3.132 1.823,2.186 2.949,2.595 2.275,1.597 3.017,0.661 1.865,0.994z\" Fill=\"#FFFEFEFE\" Height=\"3.132\" Canvas.Left=\"9.285\" Canvas.Top=\"5.086\" Width=\"3.017\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Poland\" HorizontalAlignment=\"Center\" Height=\"12.5\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"20\">\n        <Path Data=\"F1M0,6.249L20,6.249 20,0 0,0z\" Fill=\"#FFFEFEFE\" Height=\"6.249\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"20\"/>\n        <Path Data=\"F1M0,6.249L20,6.249 20,0 0,0z\" Fill=\"#FFEC192D\" Height=\"6.249\" Canvas.Left=\"0\" Canvas.Top=\"6.249\" Width=\"20\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.SaudiArabia\" HorizontalAlignment=\"Center\" Height=\"26.7\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\">\n        <Path Data=\"F1M0,26.667L40.001,26.667 40.001,0 0,0z\" Fill=\"#FF009A69\" Height=\"26.667\" Canvas.Left=\"0.023\" Canvas.Top=\"0.023\" Width=\"40.001\"/>\n        <Canvas Clip=\"M0,0L40.046,0 40.046,26.713 0,26.713z\" Height=\"26.713\" Canvas.Left=\"0\" Canvas.Top=\"0\" Width=\"40.046\">\n            <Path Data=\"M40.023,0.023L0.023,0.023 0.023,26.69 40.023,26.69z\" Height=\"26.713\" Canvas.Left=\"0\" Stroke=\"Black\" StrokeThickness=\"0.046\" StrokeMiterLimit=\"4\" Canvas.Top=\"0\" Width=\"40.046\"/>\n            <Path Data=\"F1M1.812,2.843C1.854,3.323 1.983,4.223 1.989,4.533 1.996,4.843 2.041,4.757 2.123,4.584 2.204,4.411 2.183,4.22 2.167,3.969 2.15,3.704 2.132,3.258 2.082,2.665 2.179,2.578 2.281,2.452 2.323,2.366 2.423,2.163 2.447,2.185 2.491,2.346 2.578,2.665 2.895,2.874 3.321,2.569 3.714,2.287 3.551,1.699 3.369,1.062 3.522,1.091 3.567,0.969 3.484,0.811 3.436,0.719 3.363,0.63 3.297,0.551 3.231,0.473 3.157,0.406 3.095,0.488 3.032,0.569 2.972,0.635 2.933,0.684 2.894,0.733 2.896,0.789 2.95,0.922 3.102,1.295 3.214,1.698 3.243,1.922 3.272,2.145 3.193,2.187 3.049,2.19 2.904,2.193 2.699,2.155 2.62,1.836 2.541,1.517 2.51,1.362 2.521,1.153 2.533,0.945 2.554,0.799 2.406,0.586 2.257,0.373 2.24,0.401 2.204,0.518 2.166,0.639 2.121,0.804 2.168,1.003 2.239,1.298 2.282,1.559 2.319,1.726 2.346,1.846 2.231,2.099 2.047,2.232 2.014,1.838 1.945,1.301 1.912,0.868 2.151,0.799 2.019,0.49 1.844,0.157 1.708,-0.1 1.648,0.001 1.556,0.163 1.463,0.325 1.53,0.398 1.605,0.525 1.551,0.638 1.635,0.796 1.673,1.084 1.698,1.276 1.735,1.812 1.77,2.276 1.584,2.276 1.48,2.156 1.411,1.994 1.267,1.661 1.304,1.347 1.372,1.153 1.44,0.96 1.501,0.645 1.388,0.567 1.274,0.489 1.133,0.583 1.04,0.729 0.885,0.972 0.729,1.311 0.714,1.679 0.709,1.816 0.662,2.105 0.601,2.21 0.539,2.316 0.452,2.33 0.354,2.172 0.196,1.919 0.151,1.274 0.161,0.945 0.165,0.781 0.118,0.747 0.066,0.94 -0.106,1.582 0.094,2.269 0.237,2.563 0.379,2.856 0.577,2.787 0.709,2.552 0.91,2.196 0.828,1.871 1.009,1.346 1.125,1.011 1.153,1.263 1.119,1.462 1.026,1.993 1.058,2.855 1.812,2.843\" Fill=\"#FFFEFEFE\" Height=\"4.739\" Canvas.Left=\"10.024\" Canvas.Top=\"6.764\" Width=\"3.563\"/>\n            <Path Data=\"F1M2.316,3.695C2.26,3.714 2.208,3.732 2.162,3.747 1.934,3.823 1.883,3.723 1.897,3.579 1.91,3.434 1.934,3.386 2.086,3.455 2.15,3.484 2.238,3.575 2.316,3.695L2.674,3.556C2.613,3.411 2.518,3.293 2.362,3.144 2.123,2.914 1.934,2.903 1.733,3.19 1.537,3.472 1.548,3.535 1.565,3.792 1.581,4.048 1.529,4.134 1.723,4.205 1.917,4.276 2,4.247 2.118,4.207 2.208,4.177 2.337,4.133 2.478,4.082 2.504,4.222 2.49,4.36 2.404,4.466 1.92,5.06 1.15,5.486 0.816,5.092 0.634,4.88 0.555,4.545 0.611,4.143 0.656,3.816 0.551,3.96 0.513,4.081 0.394,4.468 0.358,5.029 0.518,5.309 0.744,5.702 1.107,5.873 1.678,5.615 2.25,5.358 2.806,4.908 2.782,4.278 2.777,4.163 2.772,4.063 2.764,3.974 2.828,3.949 2.918,3.877 2.978,3.851 2.989,4.065 2.972,4.33 2.98,4.552 3.005,5.225 2.747,5.429 2.503,5.622 2.168,5.888 1.716,6.062 1.323,6.12 0.414,6.253 0.195,5.669 0.21,4.888 0.213,4.758 0.259,4.69 0.255,4.503 0.248,4.172 0.207,4.229 0.107,4.562 0.01,4.886 -0.112,5.634 0.2,6.247 0.512,6.86 1.594,6.686 2.43,6.283 3.265,5.881 3.356,5.12 3.318,4.363 3.308,4.162 3.296,3.95 3.282,3.722 3.309,3.704 3.33,3.685 3.346,3.668 3.461,4.05 4.018,3.951 4.193,3.73 4.282,3.618 4.284,3.602 4.373,3.724 4.494,3.892 4.9,3.955 5.002,3.708 5.104,3.46 5.087,3.221 5.061,3.029 5.036,2.838 4.995,2.853 4.869,2.952 4.742,3.051 4.843,3.074 4.858,3.209 4.917,3.706 4.477,3.672 4.424,3.149 4.393,2.832 4.342,2.952 4.297,3.099 4.108,3.72 3.568,3.84 3.623,3.117 3.638,2.915 3.507,2.976 3.429,3.057 3.373,3.116 3.313,3.17 3.25,3.22 3.211,2.636 3.162,1.962 3.103,1.166 3.259,1.363 3.415,1.135 3.306,0.913 3.222,0.742 3.101,0.349 3.024,0.134 2.948,-0.08 2.909,-0.015 2.745,0.164 2.581,0.344 2.613,0.391 2.682,0.574 2.665,0.809 2.702,1.033 2.755,1.502 2.792,1.835 2.898,2.528 2.955,3.4 2.872,3.445 2.755,3.521 2.674,3.556z\" Fill=\"#FFFEFEFE\" Height=\"6.648\" Canvas.Left=\"11.015\" Canvas.Top=\"6.82\" Width=\"5.081\"/>\n            <Path Data=\"F1M1.252,0.567C1.28,0.508 1.303,0.449 1.322,0.39 1.346,0.312 1.271,0.239 1.217,0.36 1.181,0.442 1.166,0.509 1.252,0.567L1.102,0.819C0.934,0.679 0.927,0.46 0.999,0.269 1.15,-0.135 1.688,-0.087 1.547,0.441 1.524,0.529 1.491,0.629 1.442,0.735 1.511,0.846 1.476,0.979 1.323,0.947 1.138,1.229 0.815,1.536 0.231,1.799 -0.032,1.917 -0.074,1.821 0.124,1.697 0.513,1.452 0.871,1.147 1.102,0.819z\" Fill=\"#FFFEFEFE\" Height=\"1.852\" Canvas.Left=\"14.693\" Canvas.Top=\"6.763\" Width=\"1.57\"/>\n            <Path Data=\"F1M0.137,0.776C-0.077,1.369 -0.067,1.947 0.368,2.435 0.624,2.721 0.814,2.585 0.928,2.286 1.042,1.987 1.116,1.689 1.199,1.495 1.283,1.301 1.348,1.341 1.328,1.525 1.288,1.894 1.272,2.496 1.645,2.72 2.019,2.945 2.592,2.555 2.784,2.158 3.393,2.964 3.923,2.584 3.983,1.818 4.002,1.577 3.889,1.053 3.823,0.902 3.755,0.752 3.803,0.743 3.893,0.829 3.983,0.915 4.153,0.976 4.067,0.713 3.981,0.451 3.866,0.309 3.727,0.192 3.589,0.074 3.558,0.139 3.504,0.229 3.45,0.318 3.462,0.345 3.384,0.419 3.305,0.493 3.322,0.532 3.382,0.683 3.61,1.263 3.835,2.119 3.463,2.199 3.136,2.271 2.921,1.555 2.908,1.227 2.891,0.802 2.843,0.443 2.758,0.213 2.673,-0.018 2.637,-0.056 2.571,0.072 2.525,0.161 2.51,0.226 2.456,0.323 2.402,0.42 2.451,0.447 2.49,0.626 2.695,1.567 2.675,1.985 2.247,2.234 1.82,2.484 1.594,2.241 1.588,1.945 1.581,1.649 1.576,1.296 1.611,1.03 1.645,0.765 1.702,0.716 1.611,0.582 1.52,0.448 1.446,0.491 1.318,0.668 1.051,1.036 0.786,1.662 0.697,1.963 0.607,2.264 0.408,2.157 0.283,1.902 0.138,1.607 0.154,1.056 0.203,0.841 0.252,0.626 0.225,0.531 0.137,0.776\" Fill=\"#FFFEFEFE\" Height=\"2.787\" Canvas.Left=\"16.422\" Canvas.Top=\"6.608\" Width=\"4.09\"/>\n            <Path Data=\"F1M6.397,1.007C6.494,0.981 6.59,0.957 6.688,0.936 6.973,0.872 6.814,0.847 6.62,0.723 6.425,0.599 6.35,0.601 6.364,0.739 6.372,0.82 6.369,0.9 6.397,1.007L6.047,1.107C5.822,0.777 5.968,0.533 6.14,0.285 6.358,-0.029 6.702,0.07 7.103,0.35 7.504,0.63 7.343,1.071 6.963,1.293 6.861,1.352 6.738,1.404 6.603,1.454 6.633,1.554 6.585,1.581 6.461,1.504 6.12,1.619 5.658,1.796 5.346,1.96 5.731,1.995 7.33,1.958 7.649,1.93 7.969,1.902 7.917,1.956 7.827,2.225 7.736,2.494 7.631,2.468 7.352,2.516 6.927,2.589 6.311,2.772 5.855,2.964 5.4,3.154 5.557,3.481 6.02,3.652 6.385,3.751 6.338,3.79 6.278,3.999 6.219,4.209 6.223,4.256 5.786,4.186 4.711,4.014 4.316,3.419 4.148,2.954 3.471,3.903 2.828,4.417 2.214,4.262 1.907,4.185 1.756,3.912 1.728,3.557 1.305,3.763 0.809,3.934 0.177,4.13 0.028,4.175 -0.093,4.109 0.1,4.013 0.527,3.802 1.2,3.437 1.745,3.063 1.796,2.812 1.912,2.488 2.038,2.242 2.109,2.101 2.143,2.154 2.145,2.272 2.147,2.368 2.118,2.606 2.125,2.782 2.23,2.702 2.359,2.611 2.426,2.55 2.798,2.211 3.214,2.006 2.929,1.465 2.807,1.232 2.717,1.063 2.672,0.946 2.436,0.856 2.507,0.726 2.609,0.499 2.711,0.273 2.754,0.217 2.972,0.47 3.279,0.827 3.314,0.986 3.1,0.959 3.439,1.817 3.357,2.251 2.839,2.769 2.593,3.016 2.341,3.212 2.058,3.38 2.029,3.61 2.118,3.834 2.551,3.769 3.102,3.687 3.732,2.951 4,2.389 3.881,1.921 3.614,1.09 3.451,0.663 3.367,0.441 3.45,0.353 3.521,0.181 3.592,0.008 3.644,-0.099 3.734,0.133 3.824,0.366 4.114,0.937 4.257,1.618 4.399,2.298 4.369,2.886 4.718,3.21 4.874,3.355 5.077,3.438 5.287,3.496 5.133,3.038 5.461,2.7 5.911,2.533 5.639,2.284 5.218,2.319 4.76,2.3 4.405,2.284 4.454,2.249 4.543,1.937 4.633,1.626 4.748,1.586 5.001,1.485 5.34,1.349 5.689,1.218 6.047,1.107z\" Fill=\"#FFFEFEFE\" Height=\"4.29\" Canvas.Left=\"13.905\" Canvas.Top=\"9.313\" Width=\"7.895\"/>\n            <Path Data=\"F1M3.088,5.039C2.975,4.44 2.429,3.479 1.616,2.224 1.589,1.897 1.572,1.582 1.572,1.306 1.687,1.432 1.773,1.358 1.73,1.191 1.648,0.876 1.525,0.622 1.39,0.277 1.33,0.126 1.188,0.092 1.11,0.307 1.019,0.557 1.012,0.613 1.128,0.779 1.122,0.977 1.181,1.294 1.204,1.583 1.065,1.375 0.874,1.103 0.724,0.881 0.95,0.972 1.088,0.905 0.891,0.685 0.694,0.465 0.411,0.236 0.237,0.08 0.063,-0.077 -0.02,0.021 0.004,0.17 0.028,0.319 0.031,0.426 0.023,0.543 0.015,0.661 0.046,0.738 0.223,0.806 0.566,1.265 0.92,1.737 1.238,2.208 1.282,2.614 1.359,3.054 1.401,3.412 1.499,4.259 1.662,5.371 1.528,5.854 1.429,6.212 1.536,6.37 1.7,5.822 1.865,5.273 1.845,4.76 1.748,3.945 1.709,3.619 1.69,3.222 1.65,2.848 2.209,3.722 2.713,4.544 2.94,5.114 3.062,5.42 3.172,5.486 3.088,5.039\" Fill=\"#FFFEFEFE\" Height=\"6.179\" Canvas.Left=\"20.613\" Canvas.Top=\"6.692\" Width=\"3.118\"/>\n            <Path Data=\"F1M1.702,0.989C1.8,1.083 1.929,1.091 1.86,0.889 1.792,0.688 1.744,0.444 1.675,0.22 1.606,-0.002 1.562,-0.055 1.479,0.054 1.396,0.162 1.322,0.207 1.26,0.283 1.197,0.359 1.184,0.504 1.262,0.631 1.548,2.652 1.567,3.542 1.607,4.286 1.647,5.031 1.748,5.38 1.288,5.882 0.779,6.437 0.467,6.564 0.247,6.622 -0.037,6.697 -0.137,6.819 0.282,6.796 0.918,6.761 0.999,6.738 1.518,6.147 1.806,5.819 1.951,5.401 1.93,4.407 1.893,2.678 1.663,1.925 1.702,0.989\" Fill=\"#FFFEFEFE\" Height=\"6.8\" Canvas.Left=\"22.311\" Canvas.Top=\"6.815\" Width=\"1.932\"/>\n            <Path Data=\"F1M0.481,1.113C0.665,1.216 0.858,1.265 0.714,1.044 0.571,0.822 0.457,0.462 0.365,0.197 0.274,-0.068 0.255,-0.054 0.108,0.17 -0.119,0.517 0.077,0.846 0.131,1.252 0.322,2.679 0.505,4.134 0.556,4.516 0.613,4.947 0.679,5.226 0.568,5.698 0.535,5.84 0.59,5.886 0.681,5.712 1.05,4.999 0.796,4.384 0.756,3.98 0.695,3.373 0.484,1.743 0.438,1.087\" Fill=\"#FFFEFEFE\" Height=\"5.824\" Canvas.Left=\"24.452\" Canvas.Top=\"6.757\" Width=\"0.878\"/>\n            <Path Data=\"F1M4.954,4.953C4.94,4.756 4.882,4.579 4.64,4.217 4.408,3.869 4.184,3.546 3.972,3.243 3.902,2.439 3.814,1.582 3.808,1.132 3.922,1.234 4,1.136 3.948,0.961 3.896,0.786 3.79,0.315 3.714,0.125 3.638,-0.066 3.558,-0.024 3.458,0.146 3.358,0.317 3.296,0.398 3.354,0.533 3.384,1.302 3.5,2.052 3.616,2.74 3.402,2.442 3.202,2.166 3.016,1.908 2.998,1.613 2.98,1.315 2.964,1.022 3.086,1.116 3.134,1.099 3.074,0.915 3.014,0.732 2.87,0.351 2.802,0.176 2.734,0.001 2.688,-0.003 2.598,0.138 2.454,0.363 2.414,0.516 2.536,0.727 2.552,0.924 2.568,1.114 2.584,1.297 2.472,1.134 2.368,0.978 2.27,0.828 2.39,0.89 2.484,0.781 2.352,0.666 2.222,0.552 1.972,0.344 1.862,0.196 1.752,0.049 1.636,0.052 1.638,0.19 1.642,0.319 1.654,0.447 1.636,0.554 1.616,0.661 1.618,0.77 1.772,0.957 2.082,1.332 2.378,1.718 2.652,2.086 2.764,3.41 2.83,4.266 2.804,4.807 2.79,5.122 2.676,5.306 2.506,5.363 2.336,5.42 2.164,5.306 1.998,5.064 1.71,4.642 1.602,4.72 1.38,5.088 1.162,5.445 1.008,5.737 0.896,5.985 0.784,6.233 0.596,6.44 0.43,6.123 0.262,5.806 0.244,5.443 0.25,5.187 0.254,4.931 0.217,4.728 0.12,5.136 -0.116,6.124 0.022,6.33 0.288,6.553 0.626,6.834 0.732,6.863 0.91,6.615 1.252,6.138 1.35,5.708 1.548,5.469 1.702,5.282 1.714,5.428 1.784,5.517 1.982,5.769 2.164,5.862 2.444,5.909 2.722,5.956 3.23,5.721 3.188,4.793 3.164,4.23 3.116,3.469 3.064,2.65 3.334,3.026 3.572,3.362 3.764,3.622 3.848,4.161 3.906,4.637 3.882,5.024 3.854,5.473 3.946,5.471 4.037,5.01 4.074,4.828 4.061,4.444 4.03,3.978 4.388,4.453 4.6,4.766 4.748,5.005 4.914,5.274 4.996,5.515 4.954,4.953\" Fill=\"#FFFEFEFE\" Height=\"6.785\" Canvas.Left=\"24.502\" Canvas.Top=\"6.703\" Width=\"4.966\"/>\n            <Path Data=\"F1M1.544,0.963C1.691,1.104 1.77,1.054 1.669,0.832 1.568,0.61 1.467,0.372 1.366,0.15 1.266,-0.073 1.234,-0.024 1.11,0.139 0.985,0.302 0.972,0.414 1.022,0.509 1.275,2.635 1.389,3.738 1.424,4.378 1.477,5.306 1.255,5.835 0.347,6.436 0.047,6.634 -0.285,6.866 0.417,6.691 1.118,6.515 1.865,6.052 1.788,4.114 1.719,2.385 1.494,1.621 1.544,0.963\" Fill=\"#FFFEFEFE\" Height=\"6.753\" Canvas.Left=\"28.228\" Canvas.Top=\"6.697\" Width=\"1.793\"/>\n            <Path Data=\"F1M0,0C4.431,0.053 9.718,0.111 14.219,0.015 14.708,0.004 14.917,0.076 14.958,0.5 14.994,0.86 14.885,1.154 14.635,1.17 14.429,1.184 14.195,0.929 14.328,0.502 8.653,0.672 4.444,0.688 3.123,0.668 1.8,0.647 0.431,0.701 0,0\" Fill=\"#FFFEFEFE\" Height=\"1.171\" Canvas.Left=\"12.554\" Canvas.Top=\"18.785\" Width=\"14.965\"/>\n        </Canvas>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.SouthKorea\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"100.25\" Height=\"66.92\">\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 100.125,66.792 L 100.125,0.125 L 0.125,0.125 L 0.125,66.792 L 100.125,66.792 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 72.842,49.429 L 70.531,47.888 L 66.294,54.244 L 68.605,55.785 L 72.842,49.429 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 77.850,41.918 L 75.539,40.377 L 71.302,46.733 L 73.613,48.273 L 77.850,41.918 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 76.309,51.740 L 73.998,50.199 L 69.761,56.555 L 72.072,58.096 L 76.309,51.740 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 81.317,44.229 L 79.006,42.688 L 74.769,49.044 L 77.080,50.585 L 81.317,44.229 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 79.776,54.052 L 77.465,52.511 L 73.227,58.867 L 75.538,60.408 L 79.776,54.052 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 84.784,46.540 L 82.473,44.999 L 78.235,51.355 L 80.546,52.896 L 84.784,46.540 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 27.009,8.027 L 24.698,6.486 L 15.453,20.353 L 17.764,21.894 L 27.009,8.027 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 30.476,10.338 L 28.165,8.797 L 18.920,22.664 L 21.231,24.205 L 30.476,10.338 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 33.943,12.649 L 31.632,11.108 L 22.387,24.976 L 24.698,26.516 L 33.943,12.649 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 23.149,50.590 L 25.460,49.049 L 21.223,42.693 L 18.912,44.234 L 23.149,50.590 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 28.157,58.101 L 30.468,56.560 L 26.231,50.204 L 23.919,51.745 L 28.157,58.101 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 31.624,55.790 L 33.935,54.249 L 24.690,40.382 L 22.379,41.922 L 31.624,55.790 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 24.690,60.412 L 27.001,58.872 L 17.756,45.004 L 15.445,46.545 L 24.690,60.412 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 79.017,24.210 L 81.328,22.669 L 72.083,8.801 L 69.772,10.342 L 79.017,24.210 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 77.476,14.387 L 79.788,12.846 L 75.550,6.490 L 73.239,8.031 L 77.476,14.387 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 82.484,21.898 L 84.795,20.358 L 80.558,14.002 L 78.247,15.542 L 82.484,21.898 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 70.543,19.009 L 72.854,17.468 L 68.616,11.113 L 66.305,12.653 L 70.543,19.009 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 75.550,26.521 L 77.862,24.980 L 73.624,18.624 L 71.313,20.165 L 75.550,26.521 Z\"/>\n        <Path StrokeThickness=\"0.3\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ff0060a9\" Data=\"F1 M 64.086,42.537 C 59.255,50.375 48.738,52.446 41.021,47.424 C 33.305,42.402 31.124,32.078 36.146,24.361 C 31.339,32.149 41.684,42.109 50.114,33.452 C 58.544,24.795 68.888,34.746 64.086,42.537 Z\"/>\n        <Path StrokeThickness=\"0.3\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffed1b2d\" Data=\"F1 M 36.143,24.366 C 40.974,16.528 51.490,14.458 59.207,19.479 C 66.924,24.501 69.104,34.825 64.083,42.542 C 68.890,34.754 58.544,24.795 50.114,33.452 C 41.684,42.109 31.341,32.157 36.143,24.366 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Ukraine\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\" Height=\"20\">\n        <Path Fill=\"#ff005aba\" Data=\"F1 M 0.000,0.000 L 30.000,0.000 L 30.000,20.000 L 0.000,20.000 L 0.000,0.000 Z\"/>\n        <Path Fill=\"#ffffd400\" Data=\"F1 M 0.000,10.000 L 30.000,10.000 L 30.000,20.000 L 0.000,20.000 L 0.000,10.000 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Netherlands\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"30\" Height=\"20\">\n        <Path Fill=\"#ffee3d42\" Data=\"F1 M 30.125,6.792 L 0.125,6.792 L 0.125,0.125 L 30.125,0.125 L 30.125,6.792 Z\"/>\n        <Path Fill=\"#ff006ab6\" Data=\"F1 M 30.125,20.125 L 0.125,20.125 L 0.125,13.458 L 30.125,13.458 L 30.125,20.125 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 30.125,13.458 L 0.125,13.458 L 0.125,6.792 L 30.125,6.792 L 30.125,13.458 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.CzechRepublic\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\" Height=\"26.6\">\n        <Path Fill=\"#ffee3d42\" Data=\"F1 M 40,26.6 L 0,26.6 L 0,13.3 L 40,13.3 L 40,26.6 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 0,13.3 L 40,13.3 L 40,0 L 0,0 L 0,13.3 Z\"/>\n        <Path Fill=\"#ff0066a5\" Data=\"F1 M 0,26.6 L 20,13.3 L 0,0 L 0,26.6 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.EastAfricanCommunity\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\" Height=\"22\">\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 0.000,14.960 L 40.000,14.960 L 40.000,15.950 L 0.000,15.950 L 0.000,14.960 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 0.000,6.050 L 40.000,6.050 L 40.000,7.040 L 0.000,7.040 L 0.000,6.050 Z\"/>\n        <Path Fill=\"#ff0086ff\" Data=\"F1 M 0.000,15.950 L 40.000,15.950 L 40.000,22.000 L 0.000,22.000 L 0.000,15.950 Z\"/>\n        <Path Fill=\"#ff0086ff\" Data=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,6.050 L 0.000,6.050 L 0.000,0.000 Z\"/>\n        <Path Fill=\"#ffff0000\" Data=\"F1 M 0.000,13.310 L 40.000,13.310 L 40.000,14.960 L 0.000,14.960 L 0.000,13.310 Z\"/>\n        <Path Fill=\"#ff000000\" Data=\"F1 M 0.000,7.040 L 40.000,7.040 L 40.000,8.690 L 0.000,8.690 L 0.000,7.040 Z\"/>\n        <Path Fill=\"#ffffff00\" Data=\"F1 M 0.000,9.460 L 40.000,9.460 L 40.000,12.540 L 0.000,12.540 L 0.000,9.460 Z\"/>\n        <Path Fill=\"#ff008200\" Data=\"F1 M 0.000,12.540 L 40.000,12.540 L 40.000,13.310 L 0.000,13.310 L 0.000,12.540 Z\"/>\n        <Path Fill=\"#ff008200\" Data=\"F1 M 0.000,8.690 L 40.000,8.690 L 40.000,9.460 L 0.000,9.460 L 0.000,8.690 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\"F1 M 20.000,7.079 C 18.270,7.079 16.864,8.484 16.864,10.215 C 16.864,11.078 17.214,11.860 17.779,12.427 L 16.436,12.856 L 16.560,13.165 L 16.127,13.257 L 16.436,14.261 L 23.565,14.261 L 23.873,13.257 L 23.440,13.165 L 23.565,12.856 L 22.221,12.427 C 22.786,11.860 23.136,11.078 23.136,10.215 C 23.136,8.484 21.731,7.079 20.000,7.079 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ff008200\" Data=\"F1 M 16.508,13.276 L 16.780,14.159 L 23.221,14.159 L 23.492,13.276 L 16.508,13.276 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\"F1 M 16.678,13.389 L 16.879,14.045 L 18.470,14.045 L 21.530,14.045 L 23.121,14.045 L 23.322,13.389 L 21.731,13.389 L 18.268,13.389 L 16.678,13.389 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ff008200\" Data=\" M 16.508,13.276 L 16.915,13.167 L 16.787,12.944 L 17.489,12.681 L 17.489,12.920 L 17.706,12.920 L 17.706,13.287 L 16.524,13.287 L 16.508,13.276 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\" M 17.604,13.281 L 16.749,13.281 L 17.604,13.052 L 17.604,13.281 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\" M 17.418,12.924 L 17.030,12.924 L 17.418,12.774 L 17.418,12.924 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\" M 16.913,12.989 L 17.000,13.144 L 17.569,12.989 L 16.913,12.989 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ff008200\" Data=\" M 23.492,13.276 L 23.085,13.167 L 23.213,12.944 L 22.511,12.681 L 22.511,12.920 L 22.294,12.920 L 22.294,13.287 L 23.476,13.287 L 23.492,13.276 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\" M 22.396,13.281 L 23.251,13.281 L 22.396,13.052 L 22.396,13.281 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\" M 22.582,12.924 L 22.970,12.924 L 22.582,12.774 L 22.582,12.924 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffffff\" Data=\" M 23.087,12.989 L 23.000,13.144 L 22.431,12.989 L 23.087,12.989 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffffff00\" Data=\"F1 M 19.929,7.452 C 18.431,7.490 17.226,8.718 17.226,10.226 C 17.226,11.403 17.960,12.409 18.996,12.812 L 18.996,12.505 C 18.121,12.119 17.510,11.243 17.510,10.226 C 17.510,8.857 18.616,7.744 19.984,7.735 C 19.989,7.735 19.995,7.735 20.000,7.735 C 21.375,7.735 22.490,8.851 22.490,10.226 C 22.490,11.243 21.879,12.119 21.004,12.505 L 21.004,12.812 C 22.040,12.409 22.774,11.403 22.774,10.226 C 22.774,8.695 21.531,7.452 20.000,7.452 C 19.982,7.452 19.965,7.451 19.947,7.452 C 19.941,7.452 19.935,7.451 19.929,7.452 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#ffff0000\" Data=\"F1 M 20.220,11.830 C 20.220,11.830 20.220,11.831 20.220,11.831 C 20.220,11.831 20.221,11.831 20.221,11.831 C 20.221,11.831 20.221,11.830 20.221,11.830 C 20.221,11.830 20.220,11.830 20.220,11.830 Z M 19.787,8.632 C 19.787,8.632 19.787,8.633 19.787,8.633 C 19.787,8.633 19.788,8.633 19.788,8.633 C 19.788,8.633 19.788,8.632 19.788,8.632 C 19.788,8.632 19.787,8.632 19.787,8.632 Z M 19.909,8.618 C 19.871,8.621 19.832,8.627 19.794,8.632 C 19.753,8.720 19.654,8.807 19.521,8.861 C 19.513,8.864 19.504,8.867 19.495,8.870 C 19.352,8.922 19.210,8.923 19.117,8.881 C 19.007,8.953 18.907,9.038 18.818,9.134 C 18.818,9.134 18.818,9.135 18.818,9.135 C 18.842,9.228 18.821,9.358 18.755,9.484 C 18.751,9.492 18.746,9.499 18.742,9.507 C 18.665,9.640 18.556,9.732 18.457,9.760 C 18.456,9.760 18.456,9.760 18.456,9.760 C 18.417,9.885 18.395,10.017 18.388,10.153 C 18.467,10.209 18.534,10.322 18.564,10.461 C 18.566,10.470 18.568,10.478 18.570,10.487 C 18.596,10.638 18.572,10.778 18.514,10.863 C 18.566,10.985 18.632,11.099 18.710,11.203 C 18.710,11.203 18.711,11.203 18.711,11.203 C 18.807,11.197 18.930,11.239 19.041,11.325 C 19.048,11.331 19.054,11.337 19.061,11.343 C 19.178,11.441 19.250,11.564 19.260,11.666 C 19.378,11.727 19.505,11.774 19.638,11.805 C 19.707,11.736 19.831,11.689 19.973,11.683 C 19.982,11.683 19.991,11.683 20.000,11.683 C 20.154,11.683 20.289,11.732 20.362,11.805 C 20.495,11.774 20.621,11.727 20.740,11.666 C 20.749,11.570 20.813,11.454 20.918,11.359 C 20.925,11.353 20.932,11.348 20.939,11.342 C 21.055,11.245 21.187,11.196 21.289,11.202 C 21.289,11.202 21.290,11.202 21.290,11.202 C 21.367,11.100 21.432,10.988 21.483,10.869 C 21.430,10.789 21.406,10.661 21.425,10.522 C 21.426,10.513 21.428,10.505 21.429,10.496 C 21.456,10.344 21.528,10.219 21.612,10.160 C 21.606,10.023 21.583,9.891 21.545,9.766 C 21.452,9.740 21.350,9.657 21.275,9.537 C 21.270,9.530 21.266,9.521 21.262,9.513 C 21.185,9.380 21.160,9.239 21.186,9.139 C 21.094,9.039 20.989,8.950 20.874,8.875 C 20.786,8.916 20.653,8.918 20.518,8.874 C 20.509,8.872 20.501,8.868 20.493,8.865 C 20.349,8.813 20.239,8.723 20.194,8.630 C 20.131,8.622 20.066,8.618 20.000,8.618 C 19.990,8.618 19.979,8.618 19.969,8.618 C 19.963,8.618 19.958,8.618 19.953,8.618 C 19.949,8.618 19.945,8.618 19.942,8.618 C 19.939,8.618 19.936,8.618 19.932,8.618 C 19.930,8.618 19.927,8.618 19.924,8.618 C 19.924,8.618 19.923,8.618 19.923,8.618 C 19.923,8.618 19.922,8.618 19.921,8.618 C 19.921,8.618 19.920,8.618 19.920,8.618 C 19.920,8.618 19.920,8.618 19.919,8.618 C 19.919,8.618 19.918,8.618 19.918,8.618 C 19.917,8.618 19.917,8.618 19.917,8.618 C 19.917,8.618 19.916,8.618 19.916,8.618 C 19.915,8.618 19.915,8.618 19.914,8.618 C 19.914,8.618 19.913,8.618 19.913,8.618 C 19.912,8.618 19.911,8.618 19.909,8.618 Z\"/>\n        <Path StrokeThickness=\"0.1\" Stroke=\"#ff000000\" StrokeMiterLimit=\"1.0\" Fill=\"#fffaef13\" Data=\"F1 M 21.378,10.224 C 21.378,10.985 20.761,11.602 20.000,11.602 C 19.239,11.602 18.622,10.985 18.622,10.224 C 18.622,9.464 19.239,8.846 20.000,8.846 C 20.761,8.846 21.378,9.464 21.378,10.224 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Hungary\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\" Height=\"26.6\">\n        <Path Fill=\"#ffed1b2d\" Data=\"F1 M 40.000,8.889 L 0.000,8.889 L 0.000,0.000 L 40.000,0.000 L 40.000,8.889 Z\"/>\n        <Path Fill=\"#ff23923b\" Data=\"F1 M 40.000,26.667 L 0.000,26.667 L 0.000,17.778 L 40.000,17.778 L 40.000,26.667 Z\"/>\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 40.000,17.778 L 0.000,17.778 L 0.000,8.889 L 40.000,8.889 L 40.000,17.778 Z\"/>\n    </Canvas>\n\n    <Canvas x:Shared=\"False\" x:Key=\"Flag.Finland\" HorizontalAlignment=\"Center\" UseLayoutRounding=\"False\" VerticalAlignment=\"Center\" Width=\"40\" Height=\"24.4\">\n        <Path Fill=\"#ffffffff\" Data=\"F1 M 40.000,24.4 L 40.000,0.000 L 0.000,0.000 L 0.000,24.4 L 40.000,24.4 Z\"/>\n        <Path Fill=\"#ff005a9b\" Data=\"F1 M 11.105,0.000 L 11.105,8.883 L 0.000,8.883 L 0.000,15.548 L 11.105,15.548 L 11.105,24.436 L 17.769,24.436 L 17.769,15.548 L 40.000,15.548 L 40.000,8.883 L 17.769,8.883 L 17.769,0.000 L 11.105,0.000 Z\"/>\n    </Canvas>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Glyphs.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!--Window vectors-->\n    <DrawingBrush x:Key=\"Vector.Back\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"{DynamicResource Element.Glyph.Strong}\" Geometry=\"F1 M 3.511,18.500 L 17.690,33.080 C 18.093,33.490 18.093,34.163 17.690,34.575 C 17.291,34.985 16.635,34.985 16.234,34.575 L 0.297,18.192 C 0.289,18.180 0.279,18.174 0.273,18.162 C 0.254,18.138 0.229,18.114 0.214,18.090 C 0.202,18.071 0.184,18.050 0.175,18.036 C 0.157,18.010 0.146,17.985 0.130,17.961 C 0.116,17.940 0.108,17.916 0.092,17.894 C 0.089,17.880 0.083,17.864 0.075,17.849 C 0.071,17.838 0.071,17.828 0.067,17.820 C 0.058,17.798 0.048,17.774 0.043,17.750 C 0.035,17.722 0.028,17.698 0.021,17.670 C 0.017,17.647 0.012,17.625 0.012,17.600 C 0.007,17.573 0.003,17.547 0,17.521 C 0,17.494 0,17.469 0,17.442 C 0,17.418 0,17.394 0,17.366 C 0.003,17.340 0.007,17.312 0.012,17.286 C 0.012,17.265 0.017,17.239 0.021,17.213 C 0.028,17.187 0.035,17.159 0.043,17.133 C 0.048,17.111 0.058,17.087 0.062,17.067 C 0.071,17.057 0.071,17.046 0.075,17.038 C 0.083,17.019 0.089,17.004 0.099,16.989 C 0.108,16.967 0.116,16.948 0.130,16.926 C 0.146,16.898 0.157,16.874 0.175,16.851 C 0.184,16.832 0.202,16.812 0.214,16.796 C 0.229,16.771 0.246,16.747 0.269,16.730 C 0.278,16.717 0.283,16.706 0.297,16.693 L 16.234,0.310 C 16.437,0.103 16.700,0 16.965,0 C 17.228,0 17.491,0.103 17.690,0.310 C 18.093,0.722 18.093,1.395 17.690,1.806 L 17.690,1.806 L 3.511,16.385 L 38.968,16.380 C 39.537,16.380 40,16.853 40,17.437 C 40,18.019 39.537,18.494 38.968,18.494\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Close\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"{DynamicResource Element.Glyph.Strong}\" Geometry=\"F1 M 38.199,40 L 0,1.801 L 1.801,0 L 40,38.199 L 38.199,40 Z\"/>\n                <GeometryDrawing Brush=\"{DynamicResource Element.Glyph.Strong}\" Geometry=\"F1 M 1.801,40 L 0,38.199 L 38.199,0 L 40,1.801 L 1.801,40 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Maximize\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"{DynamicResource Element.Glyph.Strong}\" Geometry=\"F1 M 2.659,37.328 L 37.344,37.328 L 37.344,2.672 L 2.659,2.672 L 2.659,37.328 L 2.659,37.328 Z M 40,40 L 0,40 L 0,0 L 40,0 L 40,40 L 40,40 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Minimize\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"{DynamicResource Element.Glyph.Strong}\" Geometry=\"F1 M 0,2.602 L 40,2.594 L 40,0 L 0,0.008 L 0,2.602 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Glyph.Up\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"{DynamicResource Element.Glyph}\" Geometry=\"F1M 10,0L0,9.534 2.608,13 10,6.067 17.391,13 20,9.534z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.ar.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n\n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;-->\n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n\n    <!--General-->\n    <s:String x:Key=\"S.Ok\">موافق</s:String>\n    <s:String x:Key=\"S.Back\">السابق</s:String>\n    <s:String x:Key=\"S.Cancel\">الغاء الامر</s:String>\n    <s:String x:Key=\"S.Yes\">نعم</s:String>\n    <s:String x:Key=\"S.No\">لا</s:String>\n    <s:String x:Key=\"S.Add\">اضافة</s:String>\n    <s:String x:Key=\"S.Edit\">تعديل</s:String>\n    <s:String x:Key=\"S.Id\">معرّف</s:String>\n    <s:String x:Key=\"S.Title\">العنوان</s:String>\n    <s:String x:Key=\"S.Description\">الوصف</s:String>\n    <s:String x:Key=\"S.SelectColor\">انقر هنا لتحديد اللون.</s:String>\n    <s:String x:Key=\"S.Documentation\">اضغط للذهاب إلى الوثائق</s:String>\n    <s:String x:Key=\"S.Suppress\">قمع</s:String>\n    <s:String x:Key=\"S.Preview\">معاينة</s:String>\n    <s:String x:Key=\"S.Size\">حجم</s:String>\n    <s:String x:Key=\"S.Background\">الخلفية</s:String>\n    <s:String x:Key=\"S.Color\">اللون:</s:String>\n    <s:String x:Key=\"S.Delay\">تاخير</s:String>\n    <s:String x:Key=\"S.DelayMs\">تاخير:</s:String>\n    <s:String x:Key=\"S.ValueMs\">القيمة +:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">قيمه المقياس:</s:String>\n    <s:String x:Key=\"S.Margin\">الهامش:</s:String>\n    <s:String x:Key=\"S.Padding\">الحشو:</s:String>\n    <s:String x:Key=\"S.MinHeight\">ادنى ارتفاع:</s:String>\n    <s:String x:Key=\"S.AndOr\">و/أو</s:String>\n\n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">اوه لا ، حدث عطل في التطبيق:(</s:String>\n    <s:String x:Key=\"S.Required\">الحقل المطلوب.</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">يسمح بمثيل واحد فقط</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">التطبيق يعمل بالفعل</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif قيد التشغيل بالفعل ، ولكن يبدو أنه لا توجد نافذة مفتوحة. تحقق من علبة النظام ، يجب أن يكون رمز ScreenToGif هناك.</s:String>\n\n    <s:String x:Key=\"S.SavingSettings.Title\">حفظ الإعدادات</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">هل ترغب في محاولة حفظه مرة أخرى؟</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">يبدو أن برنامج ScreenToGif لا يملك الصلاحيات الكافية لحفظ الإعدادات على القرص.&#10;&#10;هل ترغب في المحاولة مرة أخرى، ولكن هذه المرة باستخدام صلاحيات المسؤول؟</s:String>\n\n    <s:String x:Key=\"S.Exiting.Title\">Gif انهاء الخلفية</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">هل تريد بالتاكيد الخروج ؟</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">سيتم اغلاق كافة النوافذ ستتم ازاله ايقونه الدرج.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">محول رسومات Switch</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">قم بالتبديل إلى محول الرسومات الصحيح لالتقاط الشاشة المحددة</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">بسبب وجود قيود في DirectX، يجب تشغيل ScreenToGif على نفس محول الرسومات المستخدم في التقاط الشاشة.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">قم بتغيير مجموعة محول الرسومات الخاصة بـ ScreenToGif عن طريق فتح إعدادات Windows > النظام > العرض > إعدادات الرسومات، أو بالنقر على الرابط أدناه.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">قم بتبديل محول الرسومات الخاص ببرنامج ScreenToGif عن طريق فتح إعدادات الرسومات الخاصة بمحول الرسومات الخاص بك.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">افتح إعدادات ويندوز</s:String>\n\n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">إدخال</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">خروج</s:String>\n    <s:String x:Key=\"S.Keys.Space\">المساحه</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">يمين - انقر فوق</s:String>\n\n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">تسجيل شاشه جديدة</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">تسجيل كاميرا ويب جديدة</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">تسجيل لوحة جديدة</s:String>\n    <s:String x:Key=\"S.Exit\">خروج</s:String>\n\n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">تسجيل شاشه جديدة</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">تسجيل كاميرا ويب جديدة</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">تسجيل لوحة جديدة</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">رسوم متحركة جديدة</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">ادراج تسجيل الشاشة</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">ادراج تسجيل كاميرا ويب</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">ادراج تسجيل اللوحة</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">(ادراج من الوسائط (الصور ومقاطع الفيديو</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">حفظ باسم...</s:String>\n    <s:String x:Key=\"S.Command.Load\">(تحميل الملفات (الصور ومقاطع الفيديو والمشاريع</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">تحميل المشاريع الاخيرة</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">تجاهل المشروع الحالي</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">تجاوز تاخير الاطارات</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">زيادة/نقصان تاخير الاطارات</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">نطاق تاخير الاطارات</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">تعيين التكبير/التصغير الى 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">ضبط الاطار الى حجم الاطار</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">احتواء الصورة على حجم الاطار المتوفر</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">تحديد الاطار الاول</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">حدد الاطار السابق</s:String>\n    <s:String x:Key=\"S.Command.Play\">تشغيل الرسوم المتحركة</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">تحديد الاطار التالي</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">تحديد الاطار الاخير</s:String>\n    <s:String x:Key=\"S.Command.Undo\">تراجع</s:String>\n    <s:String x:Key=\"S.Command.Redo\">تراجع</s:String>\n    <s:String x:Key=\"S.Command.Reset\">تراجع كافة التغييرات في المشروع</s:String>\n    <s:String x:Key=\"S.Command.Copy\">انسخ الاطارات المحددة وحفظها في الحافظة</s:String>\n    <s:String x:Key=\"S.Command.Cut\">قص الاطارات المحددة وتخزينها في الحافظة</s:String>\n    <s:String x:Key=\"S.Command.Paste\">لصق الاطارات من الحافظة</s:String>\n    <s:String x:Key=\"S.Command.Delete\">حذف كافة الاطارات المحددة</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">حذف كافة الاطارات السابقة</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">حذف كافة الاطارات التالية</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">ازالة التكرارات</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">تقليل عدد الاطارات</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">انشاء حلقة سلسة</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">عكس الرسوم المتحركة</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">يجعل الرسوم المتحركة تمضي الى الامام والي الوراء</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">نقل الاطار المحدد الى اليسار</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">نقل الاطار المحدد الى اليمين</s:String>\n    <s:String x:Key=\"S.Command.Resize\">تحجيم كافة الاطارات</s:String>\n    <s:String x:Key=\"S.Command.Crop\">اقتصاص جميع الاطارات</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">قلب الاطارات او تدويرها</s:String>\n    <s:String x:Key=\"S.Command.Caption\">اضافه تعليق</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">اضافه نص عائم حر</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">اضافه اطار بعنوان عليه</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">ادراج المفاتيح التي تم الضغط عليها اثناء التسجيل</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">رسم اشكال حره</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">اضافه اشكال</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">نقرات الماوس</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">حدد صوره واضافها باسم علامة مائية</s:String>\n    <s:String x:Key=\"S.Command.Border\">اضافه حدود</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">اضافه ظل مسقط</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">اخفاء الاجزاء الحساسة على الاطارات</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">استخدام ادوات الرسم لتحديد اي اجزاء من الاطار يجب ان لا تبقي ثابته طوال الحركة</s:String>\n    <s:String x:Key=\"S.Command.Progress\">شريط التقدم او النص مع تفاصيل التشغيل</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">حدد كافة الاطارات</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">انتقل الى الاطار حسب الفهرس</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">عكس اختيار الاطارات</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">الغاء تحديد كافة الاطارات</s:String>\n    <s:String x:Key=\"S.Command.Fade\">انتقال التلاشي</s:String>\n    <s:String x:Key=\"S.Command.Slide\">انتقال الشريحة</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">مسح كافة الترميزات المكتملة</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">تحريك للاعلى</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">انتقل الى الاسفل</s:String>\n    <s:String x:Key=\"S.Command.Add\">اضافة</s:String>\n    <s:String x:Key=\"S.Command.Open\">افتح</s:String>\n    <s:String x:Key=\"S.Command.Edit\">تحرير العنصر المحدد</s:String>\n    <s:String x:Key=\"S.Command.Save\">حفظ العنصر المحدد</s:String>\n    <s:String x:Key=\"S.Command.Remove\">ازاله العنصر المحدد</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">عرض السجل</s:String>\n\n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif -بدء التشغيل</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">المسجل</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">يفتح مسجل الشاشة ، حيث يمكنك بسهوله بدء تسجيل الشاشة.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">كاميرا ويب</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">يفتح مسجل كاميرا الويب.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">اللوحة</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">يفتح مسجل المجلس ، حيث يمكنك البدء في تسجيل رسوماتك.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">المحرر</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">يفتح نافذه المحرر ، النقطة المركزية لهذا التطبيق ، حيث يمكنك بدء وتحرير تسجيل جديد.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">الخيارات</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">يتوفر اصدار جديد</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\"> ScreenToGif.تحميل اخر اصدار</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - تحديث</s:String>\n    <s:String x:Key=\"S.Updater.Header\">يتوفر تحديث جديد</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">اصدار جديد!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">اصدار جديد متوفر ، النسخة {0}! انقر هنا لمزيد من التفاصيل.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">يبدو أن نظامك لم يعد مدعومًا أو أن هناك تغييرًا طرأ على نظام التحديث. حاول تنزيله يدويًا من الموقع الإلكتروني.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">إصدار</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">متنقل</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">المثبت</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">ما الجديد؟</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">إصلاحات الأخطاء:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">يتوفر إصدار جديد للتنزيل.&#x0d;هل ترغب بفتح المتصفح لتنزيله؟</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">قم بتشغيل التطبيق بعد التحديث.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">تحميل</s:String>\n    <s:String x:Key=\"S.Updater.Install\">تثبيت</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">تثبيت يدوي</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">جارٍ التحميل...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">لا يمكن رؤية تفاصيل التحميل</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">لا يمكن تنزيل التحديث</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">يجب عليك الانتظار حتى تنتهي جميع عمليات الترميز قبل التحديث.</s:String>\n\n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - تنزيل</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">المحمل</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} من {1}</s:String>\n\n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - خيارات</s:String>\n    <s:String x:Key=\"S.Options.App\">التطبيق</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">المسجل</s:String>\n    <s:String x:Key=\"S.Options.Editor\">المحرر</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">المهام</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">الاختصارات</s:String>\n    <s:String x:Key=\"S.Options.Language\">اللغة</s:String>\n    <s:String x:Key=\"S.Options.Storage\">التخزين</s:String>\n    <s:String x:Key=\"S.Options.Extras\">اضافات</s:String>\n    <s:String x:Key=\"S.Options.Upload\">السحابة</s:String>\n    <s:String x:Key=\"S.Options.Donate\">التبرع</s:String>\n    <s:String x:Key=\"S.Options.About\">حول</s:String>\n    <s:String x:Key=\"S.Options.Other\">اخرى</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">مفتاح اختصار مفقود للمؤشر التالي</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">لاستخدام الميزة التالية لمؤشر الماوس ، يجب عليك تعيين مفتاح اختصار للتبديل عند الحاجة.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">البدء</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">ابدأ &#10;يدويا</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">لن يتم تشغيل التطبيق إلا عند قيامك بذلك يدويًا.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">ابدأ مع&#10;ويندوز</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">سيتم تشغيل التطبيق بعد بدء تشغيل نظام التشغيل ويندوز.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">من المستحيل التبديل بين أوضاع بدء التشغيل.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">السماح بنسخة&#10;واحدة فقط</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">ستتمكن من تشغيل التطبيق مرة واحدة لكل مستخدم ولكل ملف تنفيذي،&#10;مما يعني أن نسخ مختلفة للمستخدم أو الملف التنفيذي يمكن أن تتواجد معًا.&#10;عند محاولة تشغيل التطبيق مرة أخرى، ستحاول النسخة الثانية التركيز على النسخة الأولى وتنهي نفسها.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">السماح بعدة&#10;نسخ</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">ستتمكن من تشغيل التطبيق عدة مرات في نفس الوقت، دون قيود.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">ابدأ التصغير إلى علبة النظام.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(سيظهر رمز شريط النظام أثناء تفعيل هذا الخيار)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">ابدأ ب:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">نافذه بدء التشغيل</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">مسجل الشاشة</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">مسجل كاميرا ويب</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">مسجلة لوحة</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">نافذة محرر</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(النافذة التي تظهر أولاً عند بدء تشغيل التطبيق)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">مظهر التطبيق</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">نظام الالوان</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">خفيف جدا</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">خفيف</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">وسط</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">داكن</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">مظلم جدا</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">اتبع النظام</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">تخصيص</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">أمثلة على الألوان.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">أيقونة شريط النظام</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">(عرض التطبيق على علبه النظام (منطقه الإشعارات.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">ابق التطبيق مفتوحا حتى لو تم اغلاق جميع النوافذ.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">لا تفعل شيئاً</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">فتح نافذة</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">بلا نافذة</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">تصغير/استعادة جميع النوافذ</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">تصغير جميع النوافذ</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">استعادة جميع النوافذ</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">زر الفأرة الأيسر:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">زر الفأرة الأيسر (مرتين):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">زر الفأرة الأوسط:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">نافذة:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">وإلا ، يفتح:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">عام</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">حل بديل لمشكلة تعطل البرنامج بسبب \"عدم كفاية الحصة...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(تجريبي)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">(اسالني قبل اغلاق التطبيق (من خلال امر ' خروج '.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">تعطيل تسريع الاجهزه.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(سيتم عرض واجهة المستخدم عبر وضع البرنامج)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">التحقق من تحديثات الترجمة.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(سيتم تنزيل الترجمات المحدثة وتثبيتها تلقائيا)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">التحقق من وجود تحديثات.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">تثبيت التحديثات تلقائيًا بعد إغلاق التطبيق.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">فرض تنزيل النسخة المحمولة.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(يتطلب التثبيت اليدوي عن طريق فك ضغط الملف التنفيذي واستبداله)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">فرض تشغيل التحديث بصلاحيات مرتفعة.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">اسألني قبل بدء التثبيت.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">قم بتنزيل التحديثات على الشبكات ذات النطاق السعري المحدود.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(يسمح بتنزيل التحديثات على الشبكات ذات النطاق السعري المحدود)</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">واجهة المستخدم</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">قديم</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">جديد</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Frequency\">تردد الالتقاط</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">يدوي</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">ستقوم أنت بالتقاط كل إطار يدويًا، عن طريق الضغط على زر الالتقاط أو اختصار لوحة المفاتيح المكافئ.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">تفاعل المستخدم</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">سيتم التقاط صور للإطارات في كل مرة تنقر فيها أو تكتب شيئًا ما.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">في الثانية</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">سيتم التقاط الإطارات على أساس \"لكل ثانية\"، وذلك بالنظر إلى مقام معدل الإطارات المحدد على شاشة المسجل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">في الدقيقة</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">سيتم التقاط الإطارات على أساس \"لكل دقيقة\" (تسريع الوقت)،&#10;حسب المقام المحدد لمعدل الإطارات في شاشة التسجيل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">في الساعة</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">سيتم التقاط الإطارات على أساس \"لكل ساعة\" (الفاصل الزمني)، وذلك بالنظر إلى مقام معدل الإطارات المحدد على شاشة المسجل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">تأخير التشغيل:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(بالمللي ثانية، سيتم ضبط كل إطار ملتقط على هذا التأخير)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">تأخير التشغيل:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(بالمللي ثانية، ستنتظر كل عملية التقاط إطار هذا القدر من الوقت قبل البدء)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">سيتم التقاط كل إطار بفاصل زمني {0}.</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Mode\">وضع الالتقاط</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">استخدم طريقة الالتقاط القديمة، والتي تكون أبطأ وقد لا تعمل مع الألعاب،&#10;لكنها لا تتطلب أي ملحقات إضافية.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">استخدم طريقة التقاط Desktop Duplication API ، وهي أسرع وقادرة على التقاط ألعاب ملء الشاشة ، ولكنها تتطلب Windows 8 أو أحدث.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">حفظ الى&#10;ملف</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">سيتم حفظ كل إطار تم التقاطه مباشرة كصورة على القرص.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">الذاكرة&#10;التخزين المؤقت</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">سيتم تخزين كل إطار تم التقاطه كمصفوفة بكسل في الذاكرة أولاً (قد يتم ضغطه قبل ذلك).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">الضغط:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">الامثل</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(ضغط أبطأ ولكنه على الأرجح أكثر فعالية)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">الأسرع</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(ضغط أسرع ولكن من المحتمل أن يكون أقل كفاءة)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">لا ضغط</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(لا ينبغي إجراء أي ضغط أثناء التقاط الإطارات)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">حجم ذاكرة التخزين المؤقت:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(بالميغابايت. بعد الوصول إلى هذا الحجم، سيتم كتابة/تفريغ البيانات على القرص)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">منع التقاط إطارات سوداء بالكامل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(يمنع BitBlt المزود بذاكرة تخزين مؤقتة من إنتاج إطارات تحتوي على جميع وحدات البكسل باللون الأسود بشكل خاطئ)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">اظهار مؤشر الماوس في التسجيل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">حدد لون المؤشر</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">معدل الاطار الثابت.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(التاخير المستمر الذي لا يتغير مع تاخر التسجيل)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">التقط فقط عندما يتغير شيء ما.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(لن يتم التقاط الإطار إلا عند حدوث تغيير ما داخل منطقة الالتقاط)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">تحسين أداء التقاط الصور عبر اتصال سطح المكتب البعيد.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(تعطيل خاصية التقاط النوافذ المتراكبة)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">فرض تنظيف الذاكرة أثناء عملية الالتقاط.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(يقلل من استخدام الذاكرة أثناء عملية الالتقاط، ولكنه يقلل من الأداء)</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">إرشادات</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">قاعدة الأثلاث</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">انقر لتبديل عرض&#10;خط إرشاد قاعدة الأثلاث.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">المؤشر المتقاطع</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">انقر لتبديل عرض&#10;خط الإرشاد المتقاطع.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">لن يتم عرض الإرشادات إلا أثناء إيقاف التسجيل مؤقتًا أو إيقافه تمامًا.</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">(اخفاء شريط العنوان (وضع رفيع</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">تمكين مكبر الشاشة.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(يمكن المكبر اثناء تحديد منطقه التسجيل)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">قم بتحريك حدود منطقة الشاشة أثناء التحديد.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(قم بالتحريك باستخدام أسلوب \"النمل السائر\")</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">تفعيل خاصية تحريك التحديد.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">تفعيل خاصية التحديد.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">الوضع المضغوط.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(يعرض نسخة مصغرة من لوحة أوامر جهاز التسجيل)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">اعرض زر الحذف أيضًا أثناء التسجيل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(عادةً، لا يظهر  لا أثناء الإيقاف المؤقت)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">تحسين أداء اختيار الشاشة.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(يقلل من التأخير أثناء اختيار الشاشة عن طريق عرض صورة ثابتة للشاشة)</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">تذكر الحجم السابق لمنطقة التسجيل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">تذكر الموقع السابق لمنطقة التسجيل.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">استخدام العد التنازلي قبل بدء.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(بالثواني ، ينتظر قبل البدء في التقاط)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">تمكين المؤشر التالي.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(منطقه تسجيل سيتم تغيير موضع نفسه استنادا الى موقع المؤشر)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(هامش المخزن المؤقت بالبكسل ، حيث تبدا منطقه التسجيل في الحصول على موضع التشغيل)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(هامش المخزن المؤقت اضافيه بالبكسل ، حيث يبدا واجهه المستخدم الحصول على مخفيه)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">اسألني قبل التخلص من التسجيل.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">خلفية المحرر</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">حجم الشبكة</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">صغيره جدا</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">صغير</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">وسط</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">كبير</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">كبير جدا</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">انا احب الساحات الكبيرة</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">انا اعمى</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">تخصيص</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">الارتفاع</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">العرض</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">تطبيق</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">اللون الاساسي</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">اللون الزوجي</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">اللون الفردي</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">اعرض الترميزات في نافذة منفصلة.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">(توسيع شريط العنوان (اطار الكروم</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">ضبط حجم الاطار تلقائيا استنادا الى حجم الاطار ، مباشره بعد التحميل.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">ضبط تكبير الاطار تلقائيا استنادا الى حجم الاطار ، مباشره بعد التحميل.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">السؤال قبل حذف الاطارات.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">اسالني قبل ان تتخلي عن مشروع.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">(اسالني قبل اغلاق المحرر (اذا كان هناك مشروع مفتوح.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">تمكين النقر الثلاثي لتحديد النص.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">رسم الخطوط العريضة للتعليقات خارج الحروف.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">قم بإسقاط الإطارات عند الضرورة.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(تجاوز إطارًا واحدًا إذا لم يتمكن برنامج المعاينة من عرضه في الوقت المناسب)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">تخطي إطارًا إذا كان العارض غير قادر على عرضه في الوقت المناسب.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">فرض حد على سجل التراجع/الإعادة.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(ستتم إزالة الإجراءات القديمة عند الوصول إلى الحد الأقصى)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(الحد الأقصى لعدد الإجراءات المخزنة)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">قم بمزامنة مجلد الإخراج بين الإعدادات المسبقة.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(ستستخدم الإعدادات المسبقة نفس مسار الإخراج)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">قم أيضاً بمزامنة اسم الملف.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(ستستخدم الإعدادات المسبقة نفس اسم الملف أيضًا)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">قم بالمزامنة فقط بين الإعدادات المسبقة من نفس نوع الملف.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(ستتم مزامنة الإعدادات المسبقة من نفس نوع الملف فقط)</s:String>\n\n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">مهمة تلقائية</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">قائمه المهام التلقائية</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">المهمه</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">التفاصيل</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">مُفعّل</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">قم بتمكين هذه المهمة.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(اختر مهمة)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">حدد مهمة أعلاه</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">يتم تنفيذ هذه المهام بشكل تسلسلي من اعلي القائمة الى الاسفل. &#10;يحدث عند فتح مشروع لاول مره باستخدام المحرر.</s:String>\n\n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">عالمي</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">شاشه مسجل:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(فتح مسجل الشاشة الافتراضي)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">مسجل كاميرا الويب:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(يفتح مسجل كاميرا الويب)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">مسجلة لوحة:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(يفتح مسجل المجلس ، حتى تتمكن من تسجيل رسوماتك)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">محرر:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(يفتح نافذه محرر اخر)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">الخيارات:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(يفتح نافذه الخيارات. يمكنك فتح واحد فقط في كل مره)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">خروج:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(يغلق كل النوافذ ويزيل التطبيق من علبه النظام)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">مسجلات</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">بدء/مهلة :</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(يبدا التسجيل او يوقفه مؤقتا. يتم استخدامه لاخذ لقطات اذا تم تنشيط وضع لقطه)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">إيقاف:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(فانه يوقف التسجيل ويفتح المحرر)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">تجاهل:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(يتجاهل التسجيل النشط ، عندما يكون متوقفا مؤقتا)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">المؤشر التالي:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(تبديل تعديل منطقه التسجيل استنادا الى موضع المؤشر)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">تعطيل التالية:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(تعطيل مؤقتا ضبط منطقه التسجيل استنادا الى موضع المؤشر ، مفاتيح التعديل فقط مقبوله)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">انقر لتعيين تركيز لوحه المفاتيح ، ثم اضغط على المفاتيح المطلوبة والمعدلات. &#10; لا يسمح ببعض تركيبات المفاتيح.</s:String>\n\n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">لغة التطبيق</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">الكشف التلقائي</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">(لغة نظام التشغيل الحالية (ان وجدت</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">هل ترغب في ترجمه تطبيقي ؟</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">انقر هنا لقراءه ارشادات الترجمة ولتنزيل تطبيق المترجم.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">بعد ذلك</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">انقر هنا للاستيراد</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">واختبر ترجمتك.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">ارسلها لي عبر</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">(nicke@outlook.com.br) بريد الكتروني </s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">عند الانتهاء من ترجمته.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">انقر لفتح صفحه ويب باستخدام الارشادات.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">فتح صفحه الاستيراد</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">فتح تطبيق البريد الكتروني</s:String>\n\n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">الحالة</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">الحجم:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} متبقي من {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">تحقق مرة أخرى من المساحة المتبقية.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">امسح مجلد التخزين المؤقت.&#10;ستتمكن من تحديد ما إذا كنت تريد الاحتفاظ بالمشاريع الأخيرة أم لا.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">مساحة منخفضه على القرص الثابت الحالي المحدد. الرجاء تنظيف المجلد temp او تغيير الموقع.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">من المستحيل استرجاع تفاصيل محرك الأقراص.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">لا توجد ملفات</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} ملف</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} ملفات</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">لا توجد مجلدات</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} مجلد</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} مجلدات</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} قيد الاستخدام</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">المسارات</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">التخزين المؤقت:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">اختيار موقع الملفات المؤقتة</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">السجلات:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">اختيار موقع ملفات سجل الاخطاء</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">تصفح المجلد المحدد.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">موقع الاعدادات</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">بيانات التطبيق:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">المحليه:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">انه غير موجود</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">انشاء ملف اعدادات محلية فارغ.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">ازاله ملف الاعدادات.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">افتح المجلد حيث يوجد ملف الاعدادات. &#x0d; اضغط Ctrl اثناء النقر لفتح الملف ، اذا كان ذلك ممكنا.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• اعدادات نمط التحميل: الافتراضي ◄ بيانات التطبيق ◄ المحلية. &#x0d; • اذا لم يكن هناك ملف اعدادات موجودة في المجلد المحلي ، يبحث التطبيق داخل مجلد \"بيانات التطبيق\" ، يتم استخدام الافتراضي في حاله عدم وجود ملف اعدادات. &#x0d; • اذا لم يكن هناك اعدادات محليه ، يتم حفظ كافة الاعدادات في ملف اعدادات بيانات التطبيق.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">احذف جميع الملفات من ذاكرة التخزين المؤقت عند إغلاق التطبيق.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">اسألني قبل حذف جميع الملفات من ذاكرة التخزين المؤقت.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">ازاله المشاريع القديمة تلقائيا.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">عند فتح التطبيق ، ستقوم مهمة خلفيه بمسح اي مشاريع مغلقه اقدم من الوقت الذي تم تكوينه.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(في الايام ، اي مشروع مغلق اقدم من هذا سوف تمحي/التخلص منها بعد فتح التطبيق)</s:String>\n\n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - مسح ذاكرة التخزين المؤقت</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">هل ترغب في مسح مجلد ذاكرة التخزين المؤقت؟</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">عند إنشاء تسجيل أو فتح شيء ما لتحريره، يتم إنشاء مشروع وتخزينه داخل مجلد ذاكرة التخزين المؤقت.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">هل ترغب في إزالة هذه المشاريع من مجلد التخزين المؤقت؟</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">لا تقم بإزالة المشاريع الحديثة.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(سيتم حذف المشاريع التي يزيد عمرها عن {0} يومًا فقط، والتي لا يتم استخدامها حاليًا)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(سيتم حذف جميع المشاريع غير المستخدمة حاليًا)</s:String>\n\n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">الوكيل</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">الوضع:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">معطل</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">دليل</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">نظام</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(يستخدم وكيل النظام)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">المضيف:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">منفذ:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">المستخدم:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">كلمة السر:</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Presets\">تحميل الإعدادات المسبقة</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">خدمة</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">العنوان</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">الوصف</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">مُفعّل</s:String>\n\n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">خدمة الرفع</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">حدد الخدمة</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">حدد خدمة الرفع أعلاه</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">مخصص</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">قم بتفعيل هذا الإعداد المسبق.</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">التفاصيل</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">الاسم:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">وصف:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">وضع:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">مجهول</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">موثق</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">التفويض</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">الحصول على الرمز</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">الصق رمز OAuth المميز هنا</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">اسم المستخدم</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">كلمة السر:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">تخويل</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">لن يتم تخزين اسم المستخدم وكلمة المرور.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">الخيارات</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">استخدم الروابط المباشرة.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">الألبوم</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">يجب عليك إعطاء هذا الإعداد المسبق اسمًا فريدًا.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">الاسم مستخدم بالفعل بواسطة إعداد مسبق آخر للتحميل.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">عند استخدام وضع المصادقة، يجب عليك إنهاء عملية المصادقة.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">يجب عليك تقديم اسم المستخدم وكلمة المرور لتفعيل هذا التطبيق.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">لم يكن من الممكن الحصول على رمز التفويض.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">من اجل تخويل هذا التطبيق ، تحتاج الى توفير رمز التخويل.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">فشلت عملية المصادقة. تحقق من صحة كل شيء وحاول مرة أخرى بعد بضع ثوانٍ.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">لم يكن من الممكن تحميل قائمه البومات.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">تم إتمام عملية التخويل.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">غير مصرح به.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">{انتهت صلاحيه التخويل في {0.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">{التخويل صالح حتى {0.</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Gif.الحصول على ارتباطات مع التمديد جيف بدلا من </s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">تحميل الصور المتحركة الى البوم محدد.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">الالبوم:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">إسألني قبل الإرسال</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">إعادة تحميل قائمة الألبومات.</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">الإعدادات الافتراضية</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">اطلب مني ملء تفاصيل الرفع.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">نوع عنوان URL:</s:String>\n\n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">(اختيار البوم (اختياري</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">اذا كنت ترغب في ذلك ، يمكنك تحديد البوم الوجهة:</s:String>\n\n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">تفاصيل الرفع (اختياري)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">تفاصيل التحميل</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">العنوان:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">الوصف:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">الكلمات المفتاحية:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">( ; ) افصل بين العلامات باستخدام فاصلة منقوطة</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">عرض فقط لأولئك الذين يصلون عبر رابط مباشر.</s:String>\n\n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">سجل الرفع</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">التاريخ</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">معد سابقا</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">تم بنجاح؟</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">حذف سجل الإدخال</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">الرابط:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">جودة أقل:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">رابط الحذف:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">هل أنت متأكد من رغبتك في حذف سجل الإدخال؟</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">لا يمكن التراجع عن هذا الإجراء.&#10;&#10;هل ترغب في حذف سجل الإدخال المحدد؟</s:String>\n\n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">الادوات الخارجية المتاحة</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">#x0d;{0}انقر هنا لتحميل</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">تحميل...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">&#x0d;{0}حمل</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">انقر هنا لفتح خصائص الملف.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">لا يمكن للتطبيقات الموزعة من قبل متجر ميكروسوفت تنزيل تطبيقات اخرى. سيكون لديك لتحميل الامر يدويا.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg موقع</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">FFmpeg حدد موقع قابل للتنفيذ</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">الملف التنفيذي ل FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">يحتوي مسار القابل للتنفيذ FFMpeg على واحد او اكثر من الاحرف غير الصالحة. الرجاء تحديد موقع صالح له قابل للتنفيذ.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">إصدار FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski موقع</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Gifski حدد موقع قابل للتنفيذ</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">مكتبة جيفسكي</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">مسار القابل للتنفيذ جيرسكي يحتوي على واحد او اكثر من الاحرف غير صالحه. الرجاء تحديد موقع صالح له قابل للتنفيذ.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg رخصة</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski رخصه</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx رخصة</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">إذن الكتابة مفقود في المجلد</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">لا يمكن حفظ التنزيل في المجلد بسبب عدم وجود صلاحيات كتابة.&#10;&#10;هل ترغب في تشغيل أداة التنزيل بصلاحيات المسؤول لإكمال التنزيل؟</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">التبرع</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">تبرع بالدولار الامريكي</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">تبرع باليورو</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">يفتح موقع باي بال. العملة المحددة: الدولار</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">يفتح موقع باي بال. العملة المحددة: اليورو</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">يفتح موقع باي بال. يجب تحديد العملة.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">اشترك</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">تبرع شهرياً عبر باتريون.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">تبرع عبر سترايب.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">ألعاب الهدايا</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">أهدِ الألعاب عبر منصة ستيم.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">ألعاب مجانية عبر منصة GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">ادفع ثمن القهوة عبر Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">العملات المشفرة</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">انسخ عنوان BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">دعم</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">إذا كنت ترغب في دعم المشروع :)</s:String>\n\n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">الاصدار:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">تحقق من وجود تحديثات</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">لديك بالفعل أحدث إصدار.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">المؤلف: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">اصدار متجر ميكروسوفت. يتم تعطيل بعض الميزات بسبب السياسات المفروضة.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">اتصال</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">ربط الخادم</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">صفحه الزيارة</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">الانضمام الى الغرفة</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">التقنيه</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">الرخصة:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(هذا هو التطبيق خاليه تماما)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">مصدر التعليمات البرمجية:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">سياسة الخصوصية:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">شكراً جزيلاً إلى</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">جميع مؤيدي ، والناس الذين قدموا ردود الفعل و/او التبرعات.</s:String>\n\n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">الترجمه</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">جارٍ الحصول على رموز اللغة...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">{0} معروف ب</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">غير معترف بها</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">المورد السفلي هو المصدر الحالي الذي يتم استخدامه.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">لتطبيق المورد المخصص ، انقله الى اسفل القائمة.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">جارٍ تصدير المورد...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">حفظ قاموس الموارد</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">فتح قاموس موارد</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">قاموس الموارد</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">جارٍ استيراد الموارد...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">اسم الملف لا يتبع نمطًا صحيحًا</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">حاول إعادة التسمية بهذا الشكل: StringResources.en.xaml، حيث يجب استبدال 'en' برمز لغتك.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">لا يمكنك إضافة مورد بنفس الاسم.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">حاول إزالة المورد المكرر أو استخدم رمز لغة آخر.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">رمز اللغة المكرر</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">الكود \"{0}\" مكرر. حاول استخدام \"{1}\" بدلًا منه.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">لغة غير معروفة</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">لم يتم التعرف على الرمز \"{0}\" وما شابهه كرموز لغة صالحة.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">تعذر استيراد مورد الترجمة.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">سجل</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">مهلة</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">مواصله</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">وقف</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">تجاهل</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">لقطة</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">الارتفاع</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">العرض</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">تم تفعيل خاصية تتبع المؤشر.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">انقر للتبديل بين أوضاع تكرار الالتقاط.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">يدوي</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">التفاعلات</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">الحد الاقصى للاطارات في الثانية</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">Fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">تتراوح من 1 إلى 60 إطارًا في الثانية ، مع وجود قيم أعلى تعني أنه سيتم التقاط المزيد من الإطارات. &#10;تمثل كل زيادة فرقًا قدره 16 مللي ثانية.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">الحد الأقصى للإطارات في الدقيقة</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">إطارات في الدقيقة</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">تتراوح من 1 إلى 60 إطارًا في الدقيقة ، مع وجود قيم أعلى تعني أنه سيتم التقاط المزيد من الإطارات. &#10; كل زيادة تمثل 1 ثانية من الاختلاف.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">الحد الأقصى للإطارات في الساعة</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">إطارات في الساعة</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">تتراوح من 1 إلى 60 إطارًا في الساعة ، مع وجود قيم أعلى تعني أنه سيتم التقاط المزيد من الإطارات. &#10;كل زيادة تمثل 1 دقيقة من الاختلاف.</s:String>\n\n    <s:String x:Key=\"S.Recorder.ClickOrPress\">انقر أو اضغط على المفاتيح لالتقاط الصورة</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">(التقاط النافذة (سحب والافراج عن اللقطة</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">قبل البدء</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif -(متوقف)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">جارٍ الإيقاف...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">جارٍ البدء المسبق...</s:String>\n\n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">مدة الالتقاط المنقضية.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">إجمالي عدد الإطارات:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">تم التقاطها يدويًا:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">تم إيقاف عملية الالتقاط مؤقتًا.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">جهاز الكمبيوتر الخاص بك لا يدعم وضع الالتقاط الدقيق،&#10;مما يعني أن معدل الإطارات المستهدف قد لا يتم تحقيقه أبدًا.</s:String>\n\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">لم يكن من الممكن التقاط صورة للشاشة</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">لم يكن من الممكن التقاط الشاشة. لم تُرجع طريقة الالتقاط أي إطار بعد 5 محاولات.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">لم يكن من الممكن بدء/إيقاف التقاط الشاشة مؤقتًا</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">يتطلب التقاط الشاشة باستخدام واجهة برمجة تطبيقات تكرار سطح المكتب نظام التشغيل Windows 8 أو أحدث.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">منطقه</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">حدد منطقة</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">اطار</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">حدد نافذة</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">الشاشة</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">حدد شاشة</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">شاشة داخلية</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">شاشة عامة</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">محوّل الرسوميات: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">{0} x {1}:دقة</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">{0} x {1}:الدقة الاصلية</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">نقطة في البوصة: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">اسحب لتحريك&#10;التحديد.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">قبول</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">اعادة المحاولة</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">يمين - انقر فوق</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">(Esc) الغاء التحديد </s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">انقر واسحب لتحديد منطقه من هذه الشاشة</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">انقر واسحب لتحديد منطقه</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">انقر هنا لتحديد هذه النافذة</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">انقر هنا لتحديد هذه الشاشة</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">اضغط على هروب للالغاء</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">اضغط {0} لإيقاف التسجيل</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">ستتم تصغير نافذة المسجل،&#10;قم باستعادتها أو اضغط {0} لإيقاف الالتقاط مؤقتًا.</s:String>\n\n    <s:String x:Key=\"S.Recorder.Discard.Title\">التخلي عن التسجيل</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">هل أنت متأكد من رغبتك في حذف التسجيل؟</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">سيؤدي هذا الإجراء إلى حذف التسجيل، وإزالة جميع الإطارات. لا يمكنك التراجع عن هذه العملية.</s:String>\n\n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\"> ScreenToGif - مسجل كاميرا ويب </s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">لم يتم الكشف عن اي جهاز فيديو:(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">التحقق من وجود اجهزه الفيديو.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\"> {0:0.##} x :المقياس</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">تغيير مقياس الفيديو.</s:String>\n\n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\"> ScreenToGif-مسجلة لوحة</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">تسجيل تلقائي</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">يتيح التسجيل اثناء الرسم.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Hold]</s:String>\n\n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">محدد الوان</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">حدد لون</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">احمر</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">اخضر</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">ازرق</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">الفا</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">ست عشري</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">اللون الاولي</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">اللون الحالي</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">احدث الوان</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">عينه الوان&#x0d;اسحب هذا الى</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">الوان من الشاشة.&#x0d;انقر و اسحب لاختيار</s:String>\n\n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">عارض الاستثناء</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">فتح استثناء داخلي</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">نوع الاستثناء</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">رسالة</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">المكدس</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">المصدر</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">حدث شيء خاطئ</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">ارسال تقرير</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">معد سابقا</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">المرمز</s:String>\n    <s:String x:Key=\"S.Preset.Name\">الاسم</s:String>\n    <s:String x:Key=\"S.Preset.Description\">الوصف</s:String>\n    <s:String x:Key=\"S.Preset.Other\">اخر</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">يتم الحفظ تلقائياً عند تعديل أحد الخيارات.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">يجب حفظ جميع التغييرات التي تم إجراؤها على هذه الإعدادات المحددة مسبقًا (إعدادات الترميز والتصدير) يدويًا عن طريق الضغط على زر الحفظ.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">سيتم حفظ جميع التغييرات على هذه الإعدادات المحددة مسبقًا (إعدادات الترميز والتصدير) تلقائيًا.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">بعض خصائص الإعداد المسبق الافتراضي للقراءة فقط.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">يجب عليك تسمية هذا الإعداد المسبق.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">يوجد بالفعل إعداد مسبق يحمل نفس الاسم.</s:String>\n\n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">الحفظ التلقائي</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">يتم حفظ التغييرات التي تطرأ على هذا الإعداد المسبق تلقائيًا.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">الافتراضي ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">الإعداد الافتراضي للمشفّر.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">لتويتر ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">يحترم حدود تحميل وتر (باستثناء الحجم والدقة).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">ترميز فيديو عالي الكفاءة.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">أقدم وأفضل برنامج الترميز.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">حركة</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">فيديو</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">صورة</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">المشروع</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">جودة عالية</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">يُعدّ هذا الخيار أنسب للتسجيلات التي تحتوي على المزيد من الألوان والتدرجات اللونية.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">جودة عالية • خلفية شفافة</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">يدعم حفظ الرسوم المتحركة بخلفية شفافة.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">جودة عالية • رسومات</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">أفضل للتسجيلات ذات عدد الألوان المنخفض.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • الوضع الافتراضي</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">يُوصى به لتسجيل شاشة واجهة المستخدم العادية. يستخدم مُكمِّم القطع المتوسط ​​بدون تشويش.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • متوازن</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">جودة جيدة للصور الشبيهة بالصور باستخدام مقياس Wu بدون تردد.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • جودة عالية</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">جودة عالية للصور الشبيهة بالصور باستخدام مقياس Wu مع مستوى بت أعلى وثبات انتشار خطأ Floyd-Steinberg.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • جودة منخفضة ، أسرع</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">قياس كل الإطارات بنفس لوحة الألوان \"الآمنة للويب\" المحددة مسبقًا وتردد الألوان من Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • جودة أعلى</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">جودة صورة أعلى، ولكن بحجم ملف أكبر.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • جودة أقل</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">جودة صورة أقل، ولكن بحجم ملف أصغر.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • جودة أعلى</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">جودة صورة أعلى ، ولكن بحجم ملف أكبر.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • جودة أقل</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">جودة صورة أقل ، ولكن بحجم ملف أصغر.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • جودة أقل وتشفير أسرع</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">جودة صورة أقل، مع ترميز أسرع، ولكن بحجم ملف أصغر.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">النظام • جودة منخفضة</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">جودة منخفضة ولكن ترميز أسرع.</s:String>\n\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • جودة عالية</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">جودة صورة عالية وحجم ملف صغير، ولكن الترميز أبطأ.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • جودة منخفضة</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">جودة صورة أقل، حجم ملف صغير وترميز أسرع.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">جودة عالية</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">جودة صورة عالية وحجم ملف صغير.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">ادراج اطارات</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">كلا الجانبين يجب ان يكون لها نفس الحجم ، وهذا الاطار يسمح لك لتغيير موضع وتغيير حجم الصورة و الحلبة انقر لتحديد وتغيير الحجم.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">حجم الحلبة:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">تناسب الصورة على الحلبة</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">تحجيم الحلبة لتناسب كلا الصورتين داخل (من الزاوية العلوية اليسرى).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">هناك اختلاف احجام الاطار بين تحتاج الى حل هذا قبل ادراج الاطارات.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">اطارات جديده</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">الاطار الحالي</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">حجم الصورة:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">موقع الصورة:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">اعاده حجم الصورة&#x0d;والموقع</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">سيتم ادراج اطارات جديده في&#10;القائمة الحالية للاطارات في الموقع:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">قبل</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">بعد</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">اطار</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">استيراد</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">حدد لون تعبئة الحلبة</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">استيراد اطارات من الفيديو</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">المستورد:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">تحميل...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">مقياس:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">الحجم:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">الارتفاع:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">العرض:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">معدل الاطارات:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">معدل الإطارات في الثانية</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">بدء:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">النهاية:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">التحديد:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">اطارات:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">مده:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">لم يكن من الممكن تحميل الفيديو.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">تعذر تشغيل المعاينة. حاول استخدام مستورد آخر أو تحقق من أن ملف الفيديو غير تالف.&#x0d;</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">انتهت المهلة أثناء الحصول على معاينة الإطار.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">لم يتم تحديد إطار ليتم استيراده.</s:String>\n\n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">تشفير</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">جارٍ الترميز...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">بدء</s:String>\n\n    <s:String x:Key=\"S.Encoder.Completed\">أكملت</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">نسخ الى الحافظة</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">فشل في النسخ</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">تم تنفيذ الامر</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">(اظهار اخراج الامر (الاوامر.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">فشل تنفيذ الامر</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">فشل في التحميل</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Click لفتح الصفحة لحذف الصورة (ان وجدت).</s:String>\n\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">الوقت المنقضي بالدقائق:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">تحليل:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">التشفير:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">رفع:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">نسخ:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">الأوامر:</s:String>\n\n    <s:String x:Key=\"S.Encoder.DeletedMoved\">ملف محذوف أو منقول</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">ملغي</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">الخطا</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">انقر هنا لاظهار تفاصيل هذا الخطا.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">تحميل</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">تنفيذ الاوامر</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">{0} معالجه </s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">التحضير للتمريرة الثانية</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">جاري معالجة {0} - المرور الثاني</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">انشاء ملف</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">تحليل بكسل دون تغيير</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">حفظ نتيجة التحليل</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">فتح ملف</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">استكشاف المجلد</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">ازاله من القائمة</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">اظهار التفاصيل</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">تجاهل جميع عمليات الترميز المكتملة</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">نسخ باسم صوره</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">نسخ اسم الملف</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">نسخ مسار المجلد</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">انسخ الرابط</s:String>\n\n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif -اخراج الاوامر</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">اخراج الاوامر</s:String>\n\n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">الإشعارات</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">استبعاد كافة الإشعارات</s:String>\n\n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - محرر</s:String>\n    <s:String x:Key=\"S.Editor.File\">ملف</s:String>\n    <s:String x:Key=\"S.Editor.Home\">الرئيسية</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">الإعادة</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">تحرير</s:String>\n    <s:String x:Key=\"S.Editor.Image\">صورة</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">التحولات</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">الاحصاءات</s:String>\n    <s:String x:Key=\"S.Editor.Options\">الخيارات</s:String>\n    <s:String x:Key=\"S.Editor.Help\">التعليمات</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">الاضافات</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">تحديث جديد متاح!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">اضغط هنا لقراءة المزيد</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">اجمالي العدد ، عدد الاختيارات ، فهرس التحديد</s:String>\n\n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">اعداد الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">تحميل غير صالح-لا يمكنك استيراد ملفات متعددة في وقت واحد. حاول اختيار ملف واحد فقط.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">تحميل غير صالح-لا يمكنك تحميل مشاريع متعددة في وقت واحد. حاول اختيار مشروع واحد فقط.</s:String>\n\n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">(فتح ملف الوسائط (صوره او فيديو</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">فتح الوسائط (صوره او فيديو) او ملف مشروع</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">كل الملفات المدعومة</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">صورة</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">فديو</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Png متحركة</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">انيميشن Gif</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">الرسوم المتحركة Webp</s:String>\n    <s:String x:Key=\"S.Editor.File.Avif\">رسوم متحركة Avif</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Avi\">فيديو Avi</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">فيديو ماتروسكا</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">نقل الفديو</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 فديو</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">فيديو webm</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">صورة Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">صورة Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png صورة</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">ملف Zip, بالصور</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif مشروع</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif ك Zip مشروع</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd ملف</s:String>\n\n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">اتجه إلى  \"ملف > جديد \" لبدء تسجيل جديد</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">سحب واسقاط الصور ومقاطع الفيديو او المشاريع للاستيراد</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">شكرا جزيلا لاستخدام تطبيقي!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">وكلما انخفضت framerate ، وعدد الوان او مقدار التغييرات بين الاطارات ، واصغر حجم</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">هل تريد التحدث ؟ فتح  \"خيارات > حول \" لطرق الاتصال</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">هل لديك مشكله ؟ الاتصال بي عبر اداه الملاحظات</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">هل تريد تجربه المسجل الجديد ؟ رئيس لاكثر من  \"خيارات > مسجل \" لتمكينه</s:String>\n\n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">تسجيل</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">التسجيل&#x0d;بواسطة كاميرا الويب</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">لوحة&#x0d;التسجيل</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">مشروع&#x0d;فارغ</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">جديد</s:String>\n\n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">تسجيل</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">التسجيل&#x0d;بواسطة كاميرا الويب</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">التسجيل&#x0d;لوحة</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">وسائط</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">ادراج</s:String>\n\n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">حفظ باسم</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">تحميل</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">المشاريع&#x0d;الاخيرة</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">المشروع&#x0d;حفظ باسم</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">التخلص من&#x0d;المشروع</s:String>\n\n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">كومة الاجراءات</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">تراجع</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">تراجع</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">اعاده</s:String>\n\n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">الحافظه</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">اظهار الحافظة</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">لصق</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">قص</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">نسخ</s:String>\n\n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">تكبير</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">المحتوى&#x0d;عدل إلى</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">احتواء الصورة</s:String>\n\n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">حدد </s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">كل&#x0d;حدد</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">انتقل الى</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">معكوس</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">الغاء التحديد</s:String>\n\n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">الإعادة</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">الأول</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">السابق</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">تشغيل</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">مهلة</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">التالى</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">الأخير</s:String>\n\n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">خيارات التشغيل</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">حلقة اثناء التشغيل.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">ستكون متوفرة داخل لوحة 'حفظ باسم' لبعض الترميزات.Gifs and Apngs,&#x0d;اذا كنت ترغب في تغيير اعدادات الحلقة لتصدير صور&#x0d;تستخدم فقط اثناء الإعادة</s:String>\n\n    <!--Editor • Edit tab • Frames-->\n    <s:String x:Key=\"S.Editor.Edit.Frames\">اطارات</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">حذف</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">ازالة&#x0d;النسخ المطابقة</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">خفض&#x0d;إحصاء إطار</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">حلقة&#x0d;ناعمة</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">حذف كل السابق</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">حذف كل التالي</s:String>\n\n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">اعادة ترتيب</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">عكس</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">حركة&#x0d;لليسار</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">حركة&#x0d;لليمين</s:String>\n\n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">(تاخير (المدة</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">تجاوز</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">نقصان&#x0d;زيادة أو</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">مقياس</s:String>\n\n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">الحجم و الدوران</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">تحجيم</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">اقتصاص</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">شقلبة/تدوير</s:String>\n\n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">نص</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">تعليق</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">النص الحر</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">اطار العنوان</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">الضربات&#x0d;مفتاح</s:String>\n\n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">تراكب</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">الرسم&#x0d;الحر</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">اشكال</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">فارة&#x0d;احداث</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">علامة مائيه</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">رسم السينما البياني</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">الحدود</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">الظل</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">التقدم</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">تشويش</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">انماط</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">تلاشي</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">شريحه</s:String>\n\n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">عام</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">عدد الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">المدة الاجماليه</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">حجم الاطار</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">(متوسط مدة (التاخير</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">الوقت الحالي</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">الوقت الحالي (تراكمي) استنادا الى الاطار الحالي الذي يتم عرضه.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">نقاط الاطار والحجم</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">الاطار المحدد</s:String>\n\n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">قص العمل</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">لا يمكنك قص كل الاطارات.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">يحتاج التسجيل الى اطار واحد على الاقل.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">ازالة الكل</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">هل تريد بالتاكيد ازالة كافة الاطارات ؟</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">سيؤدي هذا الاجراء الى تجاهل المشروع المفتوح الحالي ولا يمكن التراجع عنه. هل ترغب في المتابعة ؟</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">تجاهل الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">هل تريد تجاهل المشروع السابق ؟</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">لا يمكنك التراجع عن هذه العملية.&#x0d;سيؤدي هذا الاجراء الى تجاهل المشروع ، وازالة كافة الاطارات.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">هل تريد تجاهل المشروع السابق ؟</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">اذا اخترت عدم القيام بذلك ، سيكون المشروع السابق متاحا لفتحها عبر المشاريع الالكترونيه.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">حذف الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">هل تريد بالتاكيد حذف ؟</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">ستتمكن من التراجع عن هذا لاحقا..&#x0d;سيؤدي هذا الاجراء الى حذف اطارات</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">الخروج من المحرر</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">هل تريد بالتاكيد الخروج ؟</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">'يمكن فتح المشروع الحالي الذي كنت تعمل عليه مرة اخرى عن طريق 'المشاريع الاخيره.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">يمكن فتح المشروع الحالي الذي كنت تعمل عليه مره اخرى عن طريق 'المشاريع الاخيره' ، ولكن لا ننسي انه بعد بضعة ايام ، سيتم حذفه تلقائيا.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">سحب وافلات غير صالحين</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">لا يمكنك استيراد ملفات متعددة في وقت واحد</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">حاول اختيار ملف واحد فقط.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">من المستحيل تحميل الملف</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">تعذر تحميل الملف لانه يحتوي على تنسيق باطل </s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">لا يمكنك استيراد مشاريع متعددة في وقت واحد</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">حاول اختيار مشروع واحد فقط.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">لا يوجد نص ليتم تطبيقه.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">يجب عليك تحديد اطار واحد على الاقل لتطبيق التعليق علي.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">يمكنك تحديد اطار واحد على الاقل لتطبيق النص علي.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">يمكنك تحديد اطار واحد على الاقل لتطبيق اطار العنوان المجاور له.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">يمكنك تحديد سمك الحدود اكبر من الصفر على جانب واحد على الاقل.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">يجب عليك تحديد اطار واحد على الاقل لتطبيق الحدود علي.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">يمكنك التعتيم اكبر من الصفر من اجل احداث اي فرق في الاطار.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">عند استخدام عمق الظل ودائره نصف قطرها طمس كصفر ، فانه لن يحدث اي فرق لانه سيكون مخفي وراء الاطار.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">يمكنك تحديد بكسل واحد على الاقل لتطبيق رسم سينما البياني لتحديد البيكسلات بالرسم فوقها.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">انتقال التلاشي</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">يمكنكتحديد اطار واحد على الاقل لتطبيق الانتقال تتلاشي الى.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">لن يؤدي اللون الشفاف تماما الى انشاء اي تاثير على هذا الانتقال.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">انتقال الشريحة</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">يمكنك تحديد اطار واحد على الاقل لتطبيق انتقال الشريحة الى.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">تحميل الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">من المستحيل تحميل المشروع</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">لا يمكن تحميل الاطارات لانها كلها معطوبة او الصور غير موجودة حيث من المتوقع ان.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">تعذر تحميل بعض الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">لا يمكن تحميل الاطارات لانه لم يعثر عليها او لانها معطوبة.</s:String>\n\n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">يمكنك تحديد اطار واحد على الاقل لتطبيق التراكب عليه.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\"> غير موجود. قم باضافته الى متغيرات بيئة مسار او انقر هنا لفتح خيارات > اضافات لتعيين الموقع.FFmpeg</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">الهدايا غير موجودة قم باضافته الى متغيرات بيئة مسار او انقر هنا لفتح خيارات > اضافات لتعيين الموقع.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">لا توجد مساحة كافيه لليسار على محرك الاقراص حيث يخزن هذا التطبيق ذاكره التخزين المؤقت ({0}% اليسار). انقر هنا لفتح خيارات > الملفات المؤقتة لتحرير بعض المساحة.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">حاولت استيراد صور متعددة بدقة عرض مختلفة، وهذا غير مدعوم. تم استيراد بعضها، بينما يتطلب استيراد البعض الآخر بشكل منفصل.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">حاولت استيراد صور متعددة بأحجام مختلفة، وهذا غير مدعوم. تم استيراد بعضها بنجاح، بينما يتطلب استيراد البعض الآخر بشكل منفصل.</s:String>\n\n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">استرداد الإطارات من ذاكرة التخزين المؤقت</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">تحديث الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">التحضير للاستيراد</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">استيراد اطارات</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">تحليل التكرارات</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">ضبط التاخير</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">تجاهل التكرارات</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">تجاهل الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">تجاهل المجلدات</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">تغيير حجم الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">اطارات مقصوصة</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">تطبيق تراكب على الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">انشاء اطار العنوان</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">تطبيق الشقلبة/تدوير الى الاطارات</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">تغيير التاخير</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">تطبيق تاثير الانتقال</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">التحضير للحفظ</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">إلغاء التحميل و تجاهل المشروع</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">إيجاد الحلقة المثالية</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">تجاهل الإطارات الغير مستخدمة في الحلقة</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">اطار:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">فتح الصورة</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">استكشاف مجلد</s:String>\n\n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">انتقل الى الاطار</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">({انتقل الى الاطار (من 0 الى {0 </s:String>\n\n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">حفظ باسم</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">ازاله الاطارات المحددة</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">تسجيل شاشه جديده</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">تسجيل كاميرا ويب جديده</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">تسجيل اللوحة الجديدة</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">مشروع جديد</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">جديد من الاعلام او المشروع</s:String>\n\n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">تم انشاء تسجيل جديد</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">انشاء كاميرا ويب تسجيل جديده</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">انشاء لوحه تسجيل جديده</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">تم انشاء مشروع جديد</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">تراجع المنفذ</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">إعادة تعيين التنفيذ</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">اعاده المنفذ</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">قص الاطارات {0}</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">تم نسخ اطارات {0}</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">تم لصق الاطارات {0}</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">تعيين التكبير/التصغير الى {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">تم اختيار كل الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">الاطار # {0} محدد</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">الاختيار معكوس</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">تم الغاء تحديد جميع الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">حذف اطارات {0}</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">عكس قائمه الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yoyo تطبيق تاثير</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">تم نقل الاطارات الى اليسار</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">تم نقل الاطارات الى اليمين</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">تغيير حجم الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">اقتصاص الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">الاطارات شقلبت/استدارة</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">ينطبق اجراء الشقلبة على الاطارات المحددة ويتم تطبيق الاستدارة على كافة الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">ينطبق هذا الاجراء على كافة الاطارات</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">ينطبق هذا الاجراء على الاطارات المحددة</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">ينطبق هذا الاجراء على كافة الاطارات او المحددة ، اعتمادا على الاعدادات</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">ينطبق رسم سينما بياني على كل الاطارات استنادا الى الاطار الاول</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">تراكب تطبيق</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">تم انشاء اطار العنوان</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">سيتم ادراج اطار العنوان قبل الاطار المحدد</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">المدة (التاخير) التي تم تغييرها</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">إنتقال المدخل</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">تخفيض نسبة إطار</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">ازاله التكرارات</s:String>\n\n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">اخفاء</s:String>\n    <s:String x:Key=\"S.Action.Apply\">تطبيق</s:String>\n    <s:String x:Key=\"S.Action.Open\">افتح</s:String>\n    <s:String x:Key=\"S.Action.Save\">حفظ</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">الغاء الامر</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">المشاريع الاخيرة</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">ابحث عن المشاريع الحديثة...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">تاريخ الانشاء</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">عدد الاطارات</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">لا يوجد مشروع محدد. حدد مشروع القائمة التي سيتم تحميلها.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">يتم عرض هذا المشروع بالفعل بواسطة نسخة المحرر هذه.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">تم فتح هذا المشروع بالفعل من قبل مثيل محرر اخر. لا يمكن فتح مشروع مره ثانيه اذا كان مفتوحا بالفعل على محرر اخر.</s:String>\n\n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">ادخالات الحافظة</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">ادخال الحافظة:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">صورة</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">صور</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">استكشاف المحتوي</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">ازالة</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">سلوك اللصق</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">قبل الاطار المحدد</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">بعد الاطار المحدد</s:String>\n\n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">الفرق</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">الخيارات</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">بكسل (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">(%) المائه </s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">حافظ على نسبه العرض الى الارتفاع.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">جودة:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • جودة أعلى</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear • جودة أقل</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">أقرب جار • جودة أقل وأسرع</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">جودة التحجيم.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">يمكنك تحديد قيمه مختلفه لتطبيق اجراء تغيير الحجم الى.</s:String>\n\n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">نقاط</s:String>\n    <s:String x:Key=\"S.Crop.Top\">اعلى:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">يسار:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">اسفل:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">يمين:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">يجب ان يكون اختيار الاقتصاص اصغر من حجم الاطار الحالي.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">يجب ان يكون اختيار الاقتصاص اكبر من 10x10 بكسل.</s:String>\n\n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">شقلبة افقية</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">شقلبة عمودية</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\"> 90 º استدارة لليسار</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\"> 90 º استدارة لليمين</s:String>\n\n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">خفض نسبة إطار</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">عامل:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">ازاله العد:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">تعديل التأخير:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">لا تقم بالتعديل</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">اجمع مع الإطار السابق</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">اجمع بالتساوي مع الإطارات المتبقية</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">تقليل معدل الإطارات للمشروع بأكمله.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">إذا لم يتم تفعيل الخيار، يجب تحديد عدة إطارات متتالية،&#10;أكبر من عامل الإزالة.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">سيقوم بازاله {0} إطار (الاطارات) بعد كل اطار {1} ، دون احتساب تلك التي تمت ازالتها.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">يجب عليك تحديد الإطارات لتطبيق تقليل معدل الإطارات (أو تحديد الخيار لتطبيقه على المشروع بأكمله).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">يجب أن تكون قائمة الإطارات المختارة متسلسلة. لا يمكنك ترك بعض الإطارات غير مختارة ضمن الإطارات المختارة.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">يجب أن يكون عدد الإطارات المختارة أكبر من عامل الإزالة، حتى تتمكن الميزة من إزالة أي شيء.</s:String>\n\n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">ازالة التكرارات</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">(%) تشابة:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">ازاله الاطار:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">ازاله الاطار الاول</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">ازاله الاطار الاخير</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">تعديل التاخير:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">لا تعدل</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">استخدام المتوسط</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">استخدم المبلغ</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">يحلل هذا الاجراء كل اطار (بكسل بكسل) ويزيل تلك التي لا تقل عن {0}% مشابهه لجارتها المباشرة. &#x0d; يمكنك اختيار ما اذا كنت ترغب في ضبط التاخير (مده المعرض) من الاطارات.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">أنشئ حلقة سلسة</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">تجاهل أولاً:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">قارن من:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">إنهاء</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">بدء</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">يحاول البرنامج العثور على إطار مشابه بنسبة {0}% على الأقل للإطار الأول، ثم يحذف جميع الإطارات اللاحقة.&#x0d;يمكنك اختيار تجاهل بعض الإطارات الأولية وبدء المقارنة من البداية (بعد تجاوز العتبة) أو من النهاية.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">يجب أن يكون عدد الإطارات التي يجب تجاهلها أقل من العدد الإجمالي للإطارات.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">لم يكن من الممكن إنشاء حلقة سلسة بالإعدادات المحددة.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">لديك بالفعل حلقة سلسة بناءً على الإعدادات المحددة.</s:String>\n\n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">نص</s:String>\n    <s:String x:Key=\"S.Caption.Font\">الخط</s:String>\n    <s:String x:Key=\"S.Caption.Family\">العائلة:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">اسلوب:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">الوزن:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">الحجم:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">اللون:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">لون الخلفية:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">خط خارجي</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">سمك:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">تخطيط</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">عمودي:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">افقي:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">المحاذاة:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">التزيين:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">ضربات المفاتيح</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">مفاتيح</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">فاصل:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">تحرير ضربات المفاتيح </s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">تجاهل مفاتيح Ctrl و Alt و Shift و Windows اثناء عدم استخدامها كمعدلات.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">\"Control + C\" وسوف تتجاهل المطابع مفتاح وحيد مثل  \"السيطرة \" ، لكنها لن تتجاهل </s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">تجاهل ضغطات المفاتيح المُحاكاة بواسطة البرامج.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">سجل ضغطات مفاتيح إدخال المستخدم فقط.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">توسيع المعرض من ضربات المفاتيح </s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">ابدأ معرض ضربات المفاتيح في وقت سابق.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">(ms) بواسطة:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">لا يوجد ضربات المفاتيح على تسجيلك.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - محرر ضربات المفاتيح</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">رقم الاطار</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">ضربات المفاتيح المكتشفة</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">ازاله ضربات المفاتيح</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">اضافه ضربات المفاتيح:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">حروف صغيره.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">فانه يتيح لك ادراج احرف اقل حاله واحده.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">وضع</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">قلم</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">ممحاة</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">تحديد </s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">ممحاة الضربة</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">العرض:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">الارتفاع:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">تلميح:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">مستطيل</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">بيضاوي</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">اخر:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">مبرز.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">ملائمة للمنحني.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">لا توجد رسومات ليتم تطبيقها على الاطارات التي حددتها.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">يمكنك تحديد اطار واحد على الاقل لتطبيق الرسم الحر الى.</s:String>\n\n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">ادراج</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">اشكال</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">نصف القطر:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">شرطات:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">يتحكم هذا الخيار في حجم الشرطات والمسافات بينها.&#10;يمكنك تحديد أحجام متعددة لإنشاء نمط شرطات متقن.&#10;القيمة الافتراضية هي \"1 0\" أو فارغة، أي شرطة بدون مسافات.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">إعادة تعيين التناوب</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">ازاله </s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">ملء</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">نقرات الماوس</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">لون تمييز الماوس:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">لون الزر الأيسر:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">لون الزر الأوسط:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">لون الزر الأيمن:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">لون الزر الإضافي الأول:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">لون الزر الإضافي الثاني:</s:String>\n\n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">صورة</s:String>\n    <s:String x:Key=\"S.Watermark.File\">ملف:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">لم يحدد</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">بلا  شفافية:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">حدد صوره</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">يمكنك تحديد صوره لتطبيقها على الاطارات المحددة.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">يمكنك تحديد اطار واحد على الاقل لتطبيق العلامة المائية علي.</s:String>\n\n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">المظهر</s:String>\n    <s:String x:Key=\"S.Border.Info\">استخدم القيم السالبة لجعل الحد يوسع الصورة. عند القيام بذلك ، سيتم تطبيق الحدود على كافة الاطارات. &#x0d;اذا لم يتم استخدام قيمه سالبه ، سيتم تطبيق الحدود على الاطارات المحددة فقط.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">لون الظل:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">لون الخلفية:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">الاتجاه:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">طمس دائرة نصف قطرها:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">العمق:</s:String>\n\n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">بكسل</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">الضبابية</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">تغميق</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">تفتيح</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">خيارات التشويش</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">حجم بكسل:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">مستوى التمويه:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">مستوى التعتيم:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">مستوى الإضاءة:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">حساب متوسط اللون لكل كتلة منقطه.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">قم بتطبيق التعتيم على معكوس الاختيار.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">نعومة</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">استخدم اداة التحديد لتحديد المستطيل الذي يجب ان يكون منقطا.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">استخدم أداة التحديد لاختيار جزء الإطار الذي لا ينبغي إخفاؤه.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">لم تحدد اي شيء. الرجاء استخدام اداة التحديد لتحديد المستطيل الذي يجب ان تكون منقطه.</s:String>\n\n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">نوع</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">شريط</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">نص</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">الدقه:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">دقائق</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">ثانيه</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">ميلي ثانيه</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">النسبة المئوية</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">رقم الاطار</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">التاريخ/الوقت الفعلي</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">تخصيص</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">اظهار الاجمالي.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">تنسيق:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">التنسيق</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = ميلي ثانية</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = ثواني</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = دقائق</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = نسبة مئوية</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = رقم الإطار</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">المجموع الكلي:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">أمثلة:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">يمكنك استخدام تنسيق التاريخ والوقت من .Net framework. &#x0d; تتوفر المواصفات في هذين الارتباطين ادناه.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">التنسيقات القياسية</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">تنسيقات مخصصة</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">عد من:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">يبدا في احتساب رقم الاطار من هذا الرقم المحدد.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">التوجية:</s:String>\n\n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">تحديث التاخير</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">وضع التاخير:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">(تجاوز (في م ث</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">(الزيادة او النقصان (في م ث</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">(in %) مقياس</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">قيمة جديده</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">الحد الادنى من 10م ث لكل اطار.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">انخفاض / زيادة القيمة</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">قيمة المقياس</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">ستحل هذه القيمة الجديدة محل المدة (التاخير) لكافة الاطارات المحددة. يمكن ان تكون القيمة من 10م ث الى 25500م ث.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">ستقوم هذه القيمة بانقاص/زيادة المدة (التاخير) لكل اطار محدد. &#x0d; يمكنك انقاص/الزيادة عن طريق تحديد قيمة بين-10000م ث و 10000م ث ، ولكن سيتم تقييد المدة النهائية لكل اطار بين 10م ث و 25500م ث</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">تحجيم المدة (التاخير) لكل اطار محدد بقيمة النسبة المئوية. &#x0d; يمكنك تحجيم مدة كل اطار بتحديد قيمة بين 1% و 1000% ، ولكن المدة النهائية لكل اطار ستكون محصورة بين 10 مللي ثانية و 25500msي ثانيه</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">استخدم القلم لتحديد البيكسلات التي لا يجب ان تبقي ثابته (التي يجب ان تتغير بين الاطارات) ، عن طريق الرسم على اعلي منها.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">طول الانتقال</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">تاخير الانتقال</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">تتلاشي الى...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">الاطار التالي</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">لون</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">لون</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">سيتم تطبيق الانتقال بين الاطار المحدد والمرحلة التالية.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">نوع الملف</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">تنسيق ملف الإخراج.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">إعدادات التصدير المسبقة التي تحتوي على جميع الإعدادات المعروضة حاليًا.&#10;يمكنك إدارة إعدادات التصدير المسبقة عبر الأزرار أدناه.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">صورة متحركة</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">فيديو</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">الإطارات</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">اخر</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">رسوم متحركة بصيغة PNG المحمولة</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">تنسيق تبادل الرسومات</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">ويب</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">صورة الويب</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">تداخل الصوت والفيديو</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">ماتروشكا</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">نقل</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">تنسيق ملف QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">فيلم ويب</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">مجموعة خبراء التصوير الفوتوغرافي المشتركة</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">رسومات الشبكة المحمولة</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Project\">المشروع</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif مشروع</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">ملف فوتوشوب</s:String>\n\n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">المسبقه:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">افتراضي</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">اضافة</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">حفظ الإعدادات الحالية في هذا الإعداد المسبق للتصدير.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">تحرير</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">إزالة الإعداد المسبق المحدد حاليًا للتصدير.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">أعد تعيين إعدادات إعداد التصدير المسبق هذا إلى الإعدادات الافتراضية الخاصة به.</s:String>\n\n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">حذف الإعداد المسبق</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">هل أنت متأكد من رغبتك في حذف الإعداد المسبق؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">لا يمكن التراجع عن هذا الإجراء.&#10;&#10;هل ترغب في حذف الإعداد المسبق المحدد؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">إعادة تعيين الإعداد المسبق</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">هل أنت متأكد من رغبتك في إعادة ضبط الإعدادات المسبقة؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">لا يمكن التراجع عن هذا الإجراء.&#10;&#10;هل ترغب في إعادة ضبط الإعدادات المسبقة المحددة إلى إعداداتها الافتراضية؟</s:String>\n\n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">المرمز</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">المرمز والمكمم</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">المرمز المسؤول عن إنشاء ملف الإخراج.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">مرمز مدمج</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">مرمز GIF من KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">نظام</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">المرمز المتاح من قبل النظام.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">مرمز خارجي، من إنتاج FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">مرمز خارجي، من إنتاج Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">خيارات المرمز</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">قم بتفعيل الوضع المتقدم.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">أدخل المعلمات يدويًا للتحكم في جهاز التشفير.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">البارامترات:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">قائمة المعلمات التي سيتم تمريرها إلى FFmpeg.&#10;&#10;المعلمات الخاصة:&#10;{I} هو مسار الإدخال (الإطارات).&#10;{O} هو مسار الإخراج (الملف المصدر).&#10;{W} هو عرض الإطار.&#10;{H} هو ارتفاع الإطار.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">للترميز باستخدام المرور الثاني، ببساطة أضف '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">معاينة</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">استعرض قائمة المعلمات التي سيتم تمريرها إلى FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">وثائق الترميز</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">وثائق التنسيق</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">وثائق الفلتر</s:String>\n\n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\"> Gif خيارات</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">خوارزمية تقليل الألوان (التكميم).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">الشبكة العصبية</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">تحديد كمي عالي الدقة. أبطأ، لكنه جيد لكمية أكبر من الألوان.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">مناسب للرسوم المتحركة ذات الألوان القليلة. أسرع، لكن قد ينتج عنه تدرج لوني غير متجانس.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">قطع الوسط</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">أقل جودة من Octree وأبطأ.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">تدرج الرمادي</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">يستخدم لوحة ألوان رمادية ثابتة، لذا فهو أسرع بكثير.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">الألوان الأكثر استخداما</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">ببساطة يأخذ الألوان الأكثر استخدامًا في الإطارات.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">أخذ العينات:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">عامل أخذ العينات:&#10;؛ ستؤدي القيمة 1 إلى ظهور صورة gif بشكل أفضل ، ولكن سيكون العرض أبطأ.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">جودة:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">الوان:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">الحد الاقصى لعدد الوان (لكل اطار).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">استخدم جدول ألوان عالمي.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">قد يؤدي ذلك إلى تقليل جودة و/أو حجم الصورة المتحركة (GIF).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">الافضل</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">الاسرع</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">استخدم عملية ترميز أسرع.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">قد يؤدي ذلك إلى تقليل جودة الصورة المتحركة (GIF).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">حلقه:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif يحلق </s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">كرر الى الابد.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">تكرار العد.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">تفعيل الشفافية.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">يُمكّن وضع الشفافية الكاملة، مما يجعل خلفية GIF شفافة تمامًا.&#10;سيتم تجاهل عملية استبدال مفتاح اللون إذا تم تفعيل هذا الخيار.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">حدد اللون الذي تريد عرضه على أنه شفاف.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">إذا تم اختيار لون، فسيتم تحويله إلى شفاف وسيظهر كشفاف في GIF الناتج.&#10;إذا لم يتم اختيار أي لون، فستظهر جميع الألوان الشفافة (Alpha = 0%) كشفافة بشكل طبيعي.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">كشف البيكسلات بلا تغيير.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">عن طريق تحليل واكتشاف البكسلات غير المتغيرة بين الإطارات،&#10;سيكون من الممكن حفظ الأجزاء الضرورية فقط في GIF.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">استبدل وحدات البكسل هذه بمفتاح صفاء.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">سيتم استبدال وحدات البكسل المتكررة / غير المتغيرة بمفتاح هذا chroma ,&#10;مما يجعل من الممكن استخدام ألوان أقل لكل إطار.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">مفتاح اللون:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">التشتت:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">مقياس باير:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">الكمي</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">لون الخلفية:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">سيتم مزج وحدات البكسل ذات ألفا (الشفافية) التي تعتبر معتمة بواسطة الكمي المحدد مع هذا اللون قبل الحصول على اللون الكمي.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">عتبة ألفا:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">يُحدد هذا الخيار قيمة ألفا المُدخلة التي عندها يصبح اللون المُكمّم شفافًا.&#x0d;&#x0a;إذا كانت القيمة 0، فلن تكون النتيجة شفافة أبدًا.&#x0d;&#x0a;إذا كانت القيمة 255، فسيتم اعتبار البكسلات الشفافة تمامًا فقط هي الشفافة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">الحد الابيض:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">يُحدد هذا الخيار أدنى مستوى سطوع مُدخل لاعتبار اللون الناتج أبيض.&#x0d;&#x0a;It affects the brightness of the result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">التعيين المباشر</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">عند تفعيل هذا الخيار، يتم تحديد اللون المُكمّم من خلال مطابقة مباشرة بدلاً من البحث عن أقرب عنصر في لوحة الألوان.&#x0d;&#x0a;يُسرّع هذا من عملية التكميم، ولكنه قد يؤدي إلى نتيجة ذات تباين أعلى. مع ذلك، قد يُعوّض التمويه الناتج عن انتشار الخطأ قيمة هذا المعامل.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">حجم اللوحة:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">يحدد الحد الأقصى لحجم لوحة الألوان لكل إطار.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">مستوى بت مخصص.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">When checked, the bit level can be configured manually.&#x0d;&#x0a;⚠️ Warning: The highest bit level might require a LOT of memory!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">القيمة الأعلى تعني دقة أكبر، ومساحة لونية مستهدفة أوسع، ومعالجة أبطأ، واستهلاكًا أكبر للذاكرة.&#x0d;&#x0a;على سبيل المثال، إذا كانت القيمة 1، فلن تتجاوز النتيجة 8 ألوان، وإذا كانت 2، فلن تتجاوز 64 لونًا.&#x0d;&#x0a;بالنسبة لمُكمِّمات Octree وWu، تؤثر القيمة أيضًا على الحد الأقصى لعدد التدرجات اللونية الأحادية.&#x0d;&#x0a;على سبيل المثال، إذا كانت القيمة 5 (وهي القيمة الافتراضية لمُكمِّم Wu)، فلن يُمكن التمييز إلا بين 32 تدرجًا لونيًا أحاديًا.&#x0d;&#x0a;⚠️ تنبيه: يستهلك مُكمِّم Wu ما لا يقل عن 650 ميجابايت عند استخدام أعلى قيمة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">مساحة لونية خطية</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">عند تحديد هذا الخيار، تُنفَّذ بعض العمليات (مثل مزج ألفا مع لون الخلفية، والتكميم، والتمويه، والبحث عن أقرب الألوان في لوحة الألوان) في فضاء الألوان الخطي بدلاً من فضاء sRGB.&#x0d;&#x0a;يُعدّ العمل في فضاء الألوان الخطي أبطأ، ولكنه يُوفّر نتيجة بجودة أفضل، خاصةً عندما يستخدم المُكمِّم عددًا قليلاً من الألوان.&#x0d;&#x0a;&#x0d;&#x0a;ملاحظة: عند استخدام عدد قليل من الألوان، قد يكون سطوع المعاينة، التي ربما تم تغيير حجمها، غير صحيح، لأن WPF يُجري تغيير الحجم في فضاء ألوان sRGB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">أبيض وأسود</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">تم تثبيت لوحة ألوان أحادية اللون (bpp) تحتوي على اللونين الأبيض والأسود.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">تدرج الرمادي 4 ألوان</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">لوحة ألوان ثابتة ثنائية البت مع 4 خيارات تدرج رمادي.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">تدرج الرمادي 16 لونًا</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">لوحة ألوان ثابتة 4 بت لكل بكسل مع 16 مدخلاً للون الرمادي.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">تدرج الرمادي 256 لونًا</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">لوحة ألوان ثابتة 8 بت لكل بكسل مع 256 مدخلاً بتدرج الرمادي.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">لوحة ألوان النظام الافتراضية 4 بت لكل بكسل</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">لوحة ألوان ثابتة 4 بت لكل بكسل باستخدام ألوان sRGB القياسية الـ 16.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">لوحة ألوان النظام الافتراضية 8 بت لكل بكسل</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">لوحة ألوان ثابتة 8 بت لكل بكسل تتضمن ألوانًا \"آمنة للويب\" وشفافية.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 لوحه</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">تم تثبيت لوحة ألوان 8 بت لكل بكسل باستخدام مساحة ألوان RGB 332.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">تحسين اللوحة لكل إطار باستخدام خوارزمية Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">مُحدد القطع الوسيطي</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">تحسين اللوحة لكل إطار باستخدام خوارزمية Median Cut.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">تحسين اللوحة لكل إطار باستخدام خوارزمية Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">متردد</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">القوة:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">قوة جهاز التذبذب، أو 0 لمعايرة القوة تلقائيًا.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">بذرة:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">قيمة عددية تُستخدم لإنتاج نمط تمويه عشوائي محدد.&#x0d;&#x0a;اترك هذا الحقل فارغًا لاستخدام قيمة عددية عشوائية لكل إطار.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">لاشئ</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">يتم تحديد كمية الإطارات دون استخدام تقنية التمويه.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">معالجة اعوجاج</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">عند التحقق، يتغير اتجاه انتشار الخطأ من سطر إلى آخر. وهذا يساعد على تقليل تأثير التموج الناتج عن تذبذب انتشار الخطأ.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">باير 2x2 (مرتبة)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">نمط مصفوفة باير 2x2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">باير 3x3 (مرتبة)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">نمط مصفوفة باير 3x3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">باير 4x4 (مرتبة)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">نمط مصفوفة باير 4x4.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">باير 8x8 (مرتبة)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">نمط مصفوفة باير 8x8.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">طباعة نصفية منقطة (حسب الطلب)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">مصفوفة 8x8 بنمط نصف لوني منقط.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">الضوضاء الزرقاء (مرتبة)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">مصفوفة 64×64 بنمط ضوضاء زرقاء.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">أتكينسون (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">مصفوفة 4×3 لبيل أتكينسون مع 6 قيم فعّالة</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">بوركس (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">مصفوفة 5×2 لـ د. بوركس</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">فلويد-ستاينبرغ (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">المصفوفة الأصلية 3×2 لفلويد وستاينبرغ</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">جارفس-جوديس-نينك (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">مصفوفة 5x3 من تصميم جارفيس وجود ونينكه.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">مصفوفة فرانكي سييرا 5x3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">سييرا 2 (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">مصفوفة فرانكي سييرا 3x2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">ستيفنسون-آرس (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">مصفوفة سداسية 7×4 من تصميم ستيفنسون وآرس.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">ستوكي (انتشار الخطأ)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">مصفوفة ستوكي 5x3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">ضوضاء عشوائية</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">ضوضاء بيضاء عشوائية.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">ضوضاء متدرجة متداخلة</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">ضوضاء التدرج غير العشوائي الناتجة عن صيغة.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">معاينة</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">إظهار الإطار الحالي.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">عند تحديد الخيار، تعرض المعاينة الإطار الحالي بدلاً من مثال صورة قياسي.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">تم تعطيل المعاينة التلقائية نظرًا لمتطلبات الذاكرة العالية للإعدادات الحالية. انقر لتحديث المعاينة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">فشل إنشاء المعاينة: {0}&#x0d;&#x0a; انقر لمحاولة إنشائها مرة أخرى.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">إعدادات الرسوم المتحركة</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">حلقة لا نهاية لها.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">عند التحقق ، سيتم تكرار الرسوم المتحركة إلى أجل غير مسمى.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">ذهابًا وإيابًا</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">عند التفعيل، سيتم تشغيل الرسوم المتحركة ذهابًا وإيابًا.&#10;يتم تحقيق ذلك عن طريق تكرار الإطارات، مما يعني حجم ملف أكبر ووقت ترميز أطول.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">تكرار العد:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">يحدد عدد المرات التي سيتم فيها تشغيل الرسوم المتحركة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">السماح بإطارات دلتا.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">عند التفعيل، يتم محاولة اكتشاف البكسلات غير المتغيرة أثناء الترميز.&#10;عند استخدامه مع مكمم محسّن، يتيح هذا الخيار أن يحتوي الإطار على أكثر من 256 لونًا.&#10;يتم تجاهل هذا الخيار إذا لم يستخدم المكمم الشفافية ولم يتم تفعيل خيار \"السماح بالإطارات المقصوصة\".&#10;&#10;⚠️ ملاحظة: قد يسبب هذا الخيار آثارًا ملحوظة في الألوان أو نمط التشتت.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">دلتا التسامح:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">يحدد الحد الأقصى للتفاوت عند اكتشاف وحدات البكسل المتغيرة. &#10; ؛ إذا كان 0 ، فلا يمكن التغاضي عن أي اختلاف على الإطلاق. &#10; ؛ إذا كان 255 ، فقد يكون هناك إطارات (أو حتى جميعها ) التي تمت إضافتها بدون محتوى.&#x0d;&#x0a; ؛ يتراوح النطاق المعقول بين 0 و 16 لمقياس مُحسَّن. يمكن استخدام تلك ذات الألوان الثابتة بقيم أكبر إلى حد ما مع التدرج.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">إذا كان تفاوت دلتا مرتفعا جدا ، فقد تكون النتيجة ذات جودة رديئة. انقر لإعادة تعيين تفاوت دلتا.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">السماح بالإطارات المقطوعة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">عند التفعيل، يُسمح للمرمز بإضافة إطارات أصغر من الدقة الفعلية.&#10;إذا لم يتم تفعيل خيار \"السماح بالإطارات المتغيرة\"، فسيسمح فقط بقص الحواف الشفافة الممكنة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">يتم تجاهل خيار \"السماح بالإطارات المتغيرة\" لأن التكوين الحالي لا يستخدم الشفافية ولم يتم تفعيل خيار \"السماح بالإطارات المقصوصة\". انقر لتمكين الإطارات المقصوصة.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">لا يُؤثر خيار \"السماح بالإطارات المقصوصة\" لأن الإعدادات الحالية لا تستخدم قناة ألفا، كما أن خيار \"السماح بإطارات دلتا\" غير مُفعّل. انقر لتفعيل إطارات دلتا.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">خيارات apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">التنبؤ:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">لاشئ</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">فرعي</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">أعلى</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">متوسط</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">مختلط</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng يحلق</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">كشف البيكسلات بلا تغيير.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">ارسم جميع البيكسلات غير المتغيرة بلون شفاف.</s:String>\n\n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">:معد مسبقا</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">لاشئ</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">افتراضي</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">رسم</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">صورة</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">رسم</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">ايقونة</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">نص</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">استخدم وضع عدم فقدان البيانات.</s:String>\n\n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">وضع:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">عادي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">متقدم</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">طريقة ضبط معلمات المُشفِّر:&#10;الوضع العادي: استخدام عناصر واجهة المستخدم القياسية.&#10;الوضع المتقدم: استخدام مربع نص لإدخال المعلمات.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">مُشفّر الفيديو، المسؤول عن&#10;تحويل وحدات البكسل الخام إلى ملف الإخراج.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">:معد مسبقا</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">لاشئ</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Placebo\">دواء وهمي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">بطيء جداً</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">أبطأ</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">بطيء</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">متوسط</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">السريع</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">الأسرع</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">سريع جداً</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">سرعة فائقة</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">فائق السرعة</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">الجودة</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">متوازن</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">السرعة</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">الافتراضي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">بدون فقدان للجودة</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">بدون فقدان (أداء عالٍ)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">أداء عالي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">جودة عالية</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">قرص بلوراي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">زمن استجابة منخفض</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">زمن استجابة منخفض (أداء عالٍ)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">زمن استجابة منخفض (جودة عالية)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">نسبة سرعة التشفير إلى الضغط،&#10;قد توفر الإعدادات المسبقة الأبطأ ضغطًا أفضل&#10;(الجودة لكل حجم ملف).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">تسريع الأجهزة:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">قفل</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">على</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">الاختيار التلقائي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">يتحكم في استخدام وحدة معالجة الرسومات المخصصة (الفيديو).&#10;إيقاف: لا يستخدم وحدة معالجة الرسومات المخصصة.&#10;تشغيل: يستخدم وحدة معالجة الرسومات المخصصة ويتيح لك اختيار مُشفِّرات خاصة.&#10;تلقائي: يستخدم وحدة معالجة الرسومات المخصصة ويختار المُشفِّر المناسب تلقائيًا، كلما أمكن ذلك.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">تنسيق البكسل:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">تلقائي</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">مزامنة عمودية:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">طريقة مزامنة الفيديو.&#10;؛ تلقائي: يختار بين 1 و 2 اعتمادًا على إمكانيات muxer (التنسيق).&#10; ؛ العبور: يتم تمرير كل إطار مع الطوابع الزمنية الخاصة به إلى المشفر.&#10;؛ ثابت: سيتم تكرار الإطارات وإسقاطها لتحقيق معدل الإطارات الثابت المطلوب بالضبط.&#10;؛ متغير: يتم تمرير الإطارات مع طابعها الزمني أو إسقاطها لمنع إطارين من الحصول على نفس الطابع الزمني. ، مما يجعل برنامج التشفير ينشئ طوابع زمنية جديدة استنادًا إلى معدل الإطارات.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">التمريريه </s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">معدل إطارات ثابت</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">معدل الإطارات المتغير</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">اسقاط</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">معدل الإطارات:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">فيلم</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">مخصص</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">تمرير</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">عامل المعدل الثابت.&#10;إعدادات التحكم في الجودة والمعدل.&#10;اترك هذا الحقل فارغًا إذا كنت لا ترغب في تحديد هذه الخاصية.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">مستوى الجودة:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">القيم الأصغر تعني جودة أفضل.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">معدل البت:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">معدل بت الفيديو المستهدف.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">وضع معدل البت:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">ثابت</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">متغير</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">المعدل الأدنى:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">الحد الأدنى المسموح به لمعدل البت.&#10;يُفضّل استخدامه عند استخدام وضع CBR.&#10;اتركه فارغًا أو اضبطه على الصفر.&#10;إذا كنت لا ترغب في ضبط هذه الخاصية.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">المعدل الأقصى:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">أقصى معدل بت مسموح به.&#10;يتطلب تحديد حجم المخزن المؤقت أيضًا.&#10;اتركه فارغًا أو اضبطه على الصفر.&#10;إذا كنت لا ترغب في تحديد هذه الخاصية.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">حجم المخزن المؤقت:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">حجم المخزن المؤقت للتحكم في المعدل. &#10;اتركه فارغًا أو اضبطه على صفر &#10;إذا كنت لا ترغب في تعيين هذه الخاصية.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">الرمز الصور.البريدي </s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">يقوم بتصدير الصور الموجودة داخل مجلد مضغوط.</s:String>\n\n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">ضغط الصورة.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">ضغط بيانات الصورة باستخدام خوارزميه RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">حفظ بيانات المخطط الزمني.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">تصدير توقيت الاطارات ، بدلا من الاطارات فقط.</s:String>\n\n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">حفظ الخيارات</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">تصدير جزئي.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">احفظ الملف في مجلد من اختيارك.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">الكتابه الفوقيه؟</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">تحذير</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">تحذيرفقط من وجود ملف آخر بنفس الاسم.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">مطالبه </s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">يسأل المستخدم عما إذا كان يريد استبدال الملف.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">السماح</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">ببساطة يقوم بالكتابة فوق الملف.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">(حفظ كمشروع ايضا (نفس المجلد ، اسم الملف نفسه</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">تحميل الملف.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">نسخ الى الحافظة.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">ملف</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">نسخ ملف الاخراج الى الحافظة.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">مسار المجلد</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">نسخ مسار المجلد لملف الاخراج الى الحافظة.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">مسار الملف</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">نسخ مسار ملف الاخراج الى الحافظة.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">الارتباط</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">نسخ الارتباط الذي تم انشاؤه بواسطة خدمه التحميل في الحافظة.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">تنفيذ اوامر نشر الترميز.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">اكتب الاوامر التي سيتم تنفيذها بعد الترميز. &#x0d; لتنفيذ اوامر متعددة ، اكتب كل واحد على سطر مفصول. &#x0d; وحدات الماكرو: &#x0d; {p} = اخراج مسار الملف. &#x0d; {f} = اخراج مسار المجلد. &#x0d; {u} = URL of the uploaded file.</s:String>\n\n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">التصدير الجزئي</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">الوضع:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">حدد طريقة التصدير الجزئي.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">التعبير</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">يقوم بتصدير أجزاء من الرسوم المتحركة بناءً على تعبير بسيط.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">نطاق الإطارات</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">يتم تصدير جزء فقط من الرسوم المتحركة ضمن نطاق الإطار.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">النطاق الزمني</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">لا يتم تصدير سوى جزء من الرسوم المتحركة ضمن الإطار الزمني المحدد.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">اختيار</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">يقوم بتصدير الإطارات المحددة فقط في الجدول الزمني.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">لم يتم تحديد إطار.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">تم اختيار إطار واحد.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">تم تحديد {0} إطارًا.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">من:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">إلى:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">تعبير:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">أدخل أرقام الإطارات مفصولة بفاصلة، أو تسلسلات الإطارات مفصولة بعلامة ناقص:&#10;1, 3, 4, 6 - 9</s:String>\n\n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">ملف</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">مجلد الوجهة.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">حدد مجلد الإخراج</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">اختر الموقع.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">تنسيق الملف</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">'اسم الملف. ادراج تنسيق التاريخ/الوقت بين ' ؟ </s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">الرسوم المتحركه</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">زيادة رقم الملف</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">انقاص رقم الملف</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">موجود بالفعل ملف بنفس الاسم.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">حفظ الى الحافظة.</s:String>\n\n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">(تحتاج الى تحديد مكان حفظ الملف (الى مجلد او الى الحافظة او تحميل مكان اخر.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">أنت لم تحدد امتداد الملف.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">عند تحديد الوضع المتقدم ، يجب عليك كتابة المعلمات في حقل المعلمات.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">المعلمات الخاصة {I} (الإدخال) و / أو {O} (الإخراج) مفقودة من حقل المعلمات.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">لتنفيذ امر نشر الترميز ، تحتاج الى كتابه شيء ما في حقل نص الاوامر.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">يجب تحديد إطار واحد على الأقل عند وجود خيار تصدير الإطارات المحددة فقط.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">تعبير تصدير المشروع جزئيًا غير صالح.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">لم يتم تحديد خدمه التحميل. تحتاج الى تحديد وجهه.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">لا يمكنك التحميل الى الخدمة المحددة لانه غير مصرح به. توجه الى خيارات > تحميل الخدمات لتخويل هذا التطبيق.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">لا يمكنك تحديد خيار نسخ الارتباط لانك لم تقم بتعيين تحميل الملف.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">تحتاج الى تحديد مجلد اخراج.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">مجلد الاخراج غير موجود.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">يحتوي مجلد الاخراج على حرف واحد او اكثر باطل  الرجاء تحديد مجلد صالح.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">تحتاج الى اختيار اسم ملف.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">يحتوي اسم ملف الاخراج على حرف واحد او اكثر باطل  الرجاء تحديد اسم ملف صالح.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">اسم الملف قيد الاستخدام بالفعل. تعيين الى الكتابة فوق او اختيار اسم ملف اخر.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">يوجد بالفعل مشروع بنفس اسم الملف. قم بالتعيين للكتابة فوق أو اختيار اسم ملف أو مجلد آخر.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">تم الغاء العملية.</s:String>\n\n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">رفع</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">حدد الإعداد المسبق للتحميل ، الذي يحتوي على تفاصيل حول الخدمة قيد الاستخدام للتحميل.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">تفرض خدمة التحميل هذه قيودًا.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">أضف إعدادًا مسبقًا جديدًا للتحميل.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">قم بتعديل إعدادات التحميل المسبقة.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">استعرض سجل تحميل هذا الإعداد المسبق.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">إزالة إعداد التحميل المسبق المحدد حاليًا.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">حدد إعدادًا مسبقًا للرفع</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">اختر واحدا من هذه القائمة.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">لا يتوفر إعداد مسبق للتحميل لهذا التنسيق</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">أضف إعدادًا مسبقًا باستخدام الزر أدناه.</s:String>\n\n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">حذف الإعدادات المسبقة للتحميل</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">هل أنت متأكد من رغبتك في حذف إعدادات التحميل المسبقة؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">لا يمكن التراجع عن هذا الإجراء.&#10;&#10;هل ترغب في حذف الإعداد المسبق المحدد للتحميل؟</s:String>\n\n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">تصدير الاطارات</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">هل تريد بالتاكيد تصدير الاطارات ؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">سيقوم هذا الاجراء بتصدير اطارات {0} مباشره الى المجلد المحدد.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">الكتابه الفوقيه</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">هل ترغب في استبدال الملف؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">يوجد بالفعل ملف بالاسم '{0}' في هذا المجلد.&#10;هل ترغب في استبداله؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">هل ترغب في استبدال الملفات؟</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">يوجد ملف واحد أو أكثر بنفس الاسم بالفعل في هذا المجلد.rnهل ترغب في الكتابة فوقها؟</s:String>\n\n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">عارض الأوامر</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">أمر</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">مسار الإدخال</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">مسار الإخراج</s:String>\n\n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">ملاحظات</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">ارسال</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">معاينة</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">ارسال التعليقات</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">العنوان</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">رساله</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">إذا واجهتك مشكلة تقنية، فلا تنس أن تشرح لي كيف حصلت عليها، خطوة بخطوة.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">نوع التغذية المرتدة</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">اقتراح</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">المشكلة/الخطا</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">بريدك الالكتروني</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">تحتاج الى ادخال عنوان للتعليقات.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">تحتاج الى ادخال رسالة في الملاحظات.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">يجب عليك كتابة بريدك الإلكتروني لتلقي رد من المطور.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">يتم الان ارسال الخلفية... هذه النافذة ستغلق قريبا</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">(المرفقات (اختياري ، 20 م ب كحد اقصي</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">اضافه مرفقات</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">ازاله كافة المرفقات</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">استطيع ان افهم الانجليزيه</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">والبرتغالية (البرازيلية والاوروبيه).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">هذا ما سترسله بالاضافه الى كل المرفقات</s:String>\n\n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">استكشاف</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">هل هناك اي نافذه مفقوده ؟</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">اذا كان اي من الاطارات مفقود (خارج الشاشة) ، &#x0d; استخدم الخيارات الموجودة ادناه لاعاده تعيين موضعه الحالي وبدء التشغيل.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">هنا حيث توجد كل نافذه حاليا:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">هنا حيث سيتم فتح كل نافذه في المرة القادمة:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">انقل جميع النوافذ الى الشاشة الرئيسية.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">اعاده موقع بدء التشغيل لكافة الاطارات.</s:String>\n\n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">عادي</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">مائل</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">المائل</s:String>\n\n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">اسود</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">غامق</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">نصف غامق</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">اسود اضافي</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">اضافي غامق</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">اضاءه اضافيه</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">الثقيله</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">الضوء</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">وسط</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">عادي</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">منتظم</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">شبه غامق</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">رقيقه</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">اسود جدا</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">غامق جدا</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">خفيف جدا</s:String>\n\n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">اعلى</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">توسيط</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">اسفل</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">تمدد</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">يسار</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">توسيط</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">يمين</s:String>\n\n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">افقي</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">عمودي</s:String>\n\n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">يسار</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">يمين</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">في المنتصف</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">ضبط</s:String>\n\n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">لاشئ</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">ضع خطاً تحته</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">شطب</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">فوق الخط</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">خط الأساس</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.cs.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">OK</s:String>\n    <s:String x:Key=\"S.Back\">Zpět</s:String>\n    <s:String x:Key=\"S.Cancel\">Zrušit</s:String>\n    <s:String x:Key=\"S.Yes\">Ano</s:String>\n    <s:String x:Key=\"S.No\">Ne</s:String>\n    <s:String x:Key=\"S.Add\">Přidat</s:String>\n    <s:String x:Key=\"S.Edit\">Úpravy</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Název</s:String>\n    <s:String x:Key=\"S.Description\">Popis</s:String>\n    <s:String x:Key=\"S.SelectColor\">Po kliknutí vyberte barvu.</s:String>\n    <s:String x:Key=\"S.Documentation\">Kliknutím přejdete do dokumentace.</s:String>\n    <s:String x:Key=\"S.Suppress\">Potlačit</s:String>\n    <s:String x:Key=\"S.Preview\">Náhled</s:String>\n    <s:String x:Key=\"S.Size\">Velikost</s:String>\n    <s:String x:Key=\"S.Background\">Pozadí</s:String>\n    <s:String x:Key=\"S.Color\">Barva:</s:String>\n    <s:String x:Key=\"S.Delay\">Zpoždění</s:String>\n    <s:String x:Key=\"S.DelayMs\">Zpoždění (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Hodnota -+ (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Procent:</s:String>\n    <s:String x:Key=\"S.Margin\">Vnější okraj:</s:String>\n    <s:String x:Key=\"S.Padding\">Vnitřní okraj:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Výška min.:</s:String>\n    <s:String x:Key=\"S.AndOr\">a/nebo</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Ale ne, aplikace přestala pracovat... :(</s:String>\n    <s:String x:Key=\"S.Required\">Vyžadováno</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Chybějící závislost</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">.Net Framework 4.8 není nainstalován</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Abyste mohli tuto aplikaci bez problémů používat, potřebujete správnou verzi .Net Framework.&#10;Chcete otevřít webovou stránku pro její stažení?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Povolena pouze jedna instance</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Aplikace již je spuštěna</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif je již spuštěn, ale zřejmě není vidět žádné jeho okno. Zkontrolujte SysTray, ikona ScreenToGif by tam měla být...</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Uložit nastavení</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Chcete se pokusit znovu o uložení?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Vypadá to, že ScreenToGif nemá dostatečná práva k uložení nastavení na disk.&#10;&#10;Chcete to zkusit znovu, ale tentokrát s použitím práv správce?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Ukončení ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Jste si jisti, že chcete aplikaci ukončit?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Všechna okna budou uzavřena a ikona bude odstraněna z lišty.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Přepnutí grafického adaptéru</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Přepnutí na správný grafický adaptér pro zachycení vybrané obrazovky</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Vzhledem k omezení DirectX musí být ScreenToGif spuštěn na stejném grafickém adaptéru jako snímaná obrazovka.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Přepněte grafický adaptér pro aplikaci ScreenToGif otevřením nabídky Nastavení systému Windows > Systém > Obrazovka > Nastavení grafiky nebo kliknutím na níže uvedený odkaz.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Přepněte grafický adaptér pro ScreenToGif pomocí nastavení grafického adaptéru.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Otevřít Nastavení Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Mezerník</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Pravý klik</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nový záznam obrazovky</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nový záznam webové kamery</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nový záznam plátna</s:String>\n    <s:String x:Key=\"S.Exit\">Ukončení</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nové nahrání obrazovky</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nové nahrání webové kamery</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nové nahrání plátna</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nová animace</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Připojit nahrání obrazovky</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Připojit nahrání webové kamery</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Připojit nahrání plátna</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Připojit obsah souboru (obrázek, animace, video)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Uložit editovaný soubor jako...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Otevřít soubor (animaci, video či projekt)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Načíst nedávný projekt</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Zahodit aktuální projekt</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Změnit prodlevy snímků</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Zmenšit/zvětšit prodlevu zobrazení snímku</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Změnit prodlevy snímků procentuálně</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Zvětšení 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Přizpůsobit okno velikosti snímku</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Přizpůsobit snímek velikosti okna</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Vybrat první snímek</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Vybrat předchozí snímek</s:String>\n    <s:String x:Key=\"S.Command.Play\">Přehrát animaci</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Vybrat následující rámec</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Vybrat poslední snímek</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Odvolat poslední změnu</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Vrátit poslední \"zpět\"</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Odvolat všechny změny</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Zkopírování vybraných snímků do schránky</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Vyjmout vybrané snímky a vložit je do schránky</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Vložit snímky ze schránky</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Smazat všechny vybrané snímky</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Smazat všechny předchozí snímky</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Smazat všechny následující snímky</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Smazat duplicitní snímky</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Omezit počet snímků</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Vytvořit plynulou smyčku animace</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Obrátit animaci</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Připojit kopii animace v opačném pořadí.</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Posun vybraného snímku vlevo</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Posun vybraného snímku vpravo</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Změnit velikost všech snímků</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Oříznout všechny snímky</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Otočit nebo překlopit snímky</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Přidat na vybrané snímky nadpis</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Přidání plovoucího textu na vybrané snímky</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Přidat úvodní snímek s titulkem</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Úprava zaznamenaných stisků kláves během nahrávání</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Volné kreslení</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Přidat kresbu</s:String>\n    <s:String x:Key=\"S.Command.MouseClicks\">Kliknutí myší</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Vybrat obrázek a použít ho jako vodoznak</s:String>\n    <s:String x:Key=\"S.Command.Border\">Přidat okraj</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Přidat vržený stín</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Skrytí citlivých částí snímků</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Pomocí nástrojů pro kreslení vyberte, které části snímku nemají zůstat během animace statické.</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Ukazatel průběhu nebo času přehrávání</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Vybrat všechny snímky</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Přejít na snímek podle indexu</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Obrátit výběr</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Zrušit označení všech</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Přechod do snímku nebo barvy</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Prolnutí s následujícím snímkem</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Skrýt dokončená enkódování</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Posun nahoru</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Posun dolů</s:String>\n    <s:String x:Key=\"S.Command.Add\">Přidat</s:String>\n    <s:String x:Key=\"S.Command.Open\">Otevřít</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Upravit vybrané</s:String>\n    <s:String x:Key=\"S.Command.Save\">Uložit vybrané</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Smazat vybrané</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Zobrazit historii</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - spuštění</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Záznamník</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Otevře záznamník, který umožňuje nahrát vybranou oblast obrazovky.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webová kamera</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Otevře záznamník webové kamery.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Plátno</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Otevře záznamník plátna, který umožňuje nahrát kresbu.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Otevře okno editoru, ve kterém lze editovat obrázky, animace, videa a projekty.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Nastavení</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">K dispozici je nová verze • {0}</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Stáhnout nejnovější verzi ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Aktualizace</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Aktualizace je dostupná</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nová verze!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Je k dispozici nová verze {0}! Klikněte zde pro více informací.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Zdá se, že váš systém již není podporován nebo se něco změnilo v systému aktualizací. Zkuste aktualizaci stáhnout ručně z webových stránek.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Verze</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Přenosný</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Instalační program</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Co je nového?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Oprava chyb:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Nová verze je k dispozici.&#x0d;Chcete spustit prohlížeč a stáhnout si ji?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Po aktualizaci aplikaci spusťte.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Stáhnout</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Instalace</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Ruční instalace</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Stahování...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Nelze zobrazit podrobnosti o stahování.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Aktualizaci se nepodařilo stáhnout.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Před aktualizací je nutné počkat na dokončení veškerého enkódování.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - stažení</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Stažení</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} z {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Nastavení</s:String>\n    <s:String x:Key=\"S.Options.App\">Aplikace</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Nahrávání</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Úlohy</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Klávesové zkratky</s:String>\n    <s:String x:Key=\"S.Options.Language\">Jazyk</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Dočasné soubory</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Doplňky</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Odesílání dat</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Přispět</s:String>\n    <s:String x:Key=\"S.Options.About\">O aplikaci</s:String>\n    <s:String x:Key=\"S.Options.Other\">Další</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Chybějící klávesová zkratka pro sledování kurzoru</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Chcete-li používat funkci sledování kurzoru myši, musíte nastavit klávesovou zkratku, která ji v případě potřeby přepne.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Spouštění </s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Spouštět&#10;ručně</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Aplikace bude spouštěna ručně.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Spouštět&#10;s Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Aplikace se spustí se startem Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Není možné střídat režimy spouštění.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Spustit lze&#10;jen jednou</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Aplikaci budete moci spustit jen jednou pro každého uživatele a spustitelný soubor,&#10;což znamená, že vedle sebe mohou existovat různé instance různých uživatelů.&#10;Při pokusu o opětovné spuštění aplikace stejným uživatelem&#10;se druhá instance pokusí předat fokus první instanci a ukončí se.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Lze spustit&#10;vícekrát.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Aplikaci budete moci spustit vícekrát najednou bez omezení.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Spustit minimalizovaně v SysTray (oznamovací oblasti).</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(V SysTray bude ikona programu.)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Spouštět do:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Úvodní nabídka</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Záznamník plochy</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Záznamník webkamery</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Záznamník plátna</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Okno editoru</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(vybrané okno se zobrazí při startu aplikace)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Téma</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Barevné schéma:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Světlejší</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Světlé</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Střední</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Tmavé</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Velmi tmavé</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Dle systému</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Vlastní</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Vzorky barev.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Ikona  v SysTray</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Zobraz ikonu v systémové liště (oznamovací oblasti).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Nechat aplikaci spuštěnou i v případě, že jsou všechna okna zavřena.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Bez akce</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Otevřít okno</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Bez oken</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimalizovat/obnovit všechna okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimalizovat všechna okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Obnovit všechna okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Levý klik:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Dvojklik:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Klik prostředním:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Okno:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Nebo otevřít:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Hlavní </s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Obejití chyby \"Nedostatečná kvóta...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(experimentální)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Zeptat se při ukončení programu (pomocí \"Konec\").</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Vypnutí hardware akcelerace. </s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(uživatelské rozhraní se vykresluje sofwarově)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Kontrola aktualizace překladu.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(nový překlad bude stažen a nainstalován automaticky)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Kontrola aktualizací.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Automaticky instalovat aktualizace při ukončení aplikace.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Rychle stáhnout přenosnou verzi.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(nutné ruční rozzipování a přepsání spustitelného souboru)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Rychlá aktualizace se zvýšenými právy.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Potvrdit spuštění instalace.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Rozhraní</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Staré</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nové</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Frekvence zaznamenávání </s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Ručně</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Snímek bude zachycen po stisknutí tlačítka zachycení nebo použitím klávesové zkratky.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Interaktivně</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Snímky budou zachyceny vždy, když na něco kliknete nebo něco napíšete.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Za vteřinu</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Snímky budou zaznamenávány opakovaně, &#10;podle nastavení snímkové frekvence na panelu rekordéru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Za minutu</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Snímky budou zaznamenávány opakovaně, &#10;podle nastavení snímkové frekvence na panelu rekordéru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Za hodinu</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Snímky budou zaznamenávány opakovaně, &#10;podle nastavení snímkové frekvence na panelu rekordéru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Zobrazení snímku při přehrávání:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(v ms, každý zachycený snímek bude mít nastavenu tuto prodlevu)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Zpoždění spuštění:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(v ms, každý snímek bude čekat tuto dobu, než se spustí snímání.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Každý snímek bude zachycen v intervalu {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Způsob záznamu</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Použít starší metodu snímání, která je pomalejší a nemusí fungovat při snímání her,&#10;ale nevyžaduje žádné další moduly plug-in.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Použít metodu zachycení pomocí rozhraní Duplication API, která je rychlejší a&#10;dokáže zachytit hry na celou obrazovku, ale vyžaduje systém Windows 8 nebo novější.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Uložit do&#10;souboru</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Každý zachycený snímek se uloží přímo na disk jako obrázek.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Paměť&#10;cache</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Každý zachycený snímek se nejprve uloží do paměti ve struktuře pixelů (předtím může být komprimován).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Komprese:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimální</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Pomalejší, ale zároveň i lepší komprese)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Rychlejší</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Rychlejší, ale méně optimalizovaná komprese)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Bez komprese</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Při zachycování snímků se neprovádí žádná komprese.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Mezipaměť:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(V MB. Po dosažení této velikosti se data zapíší/vyprázdní na disk.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Zabránit zachycení úplně černých snímků.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Zabraňuje tomu, aby BitBlt s mezipamětí nesprávně vytvářel snímky se všemi pixely černými.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Zobrazit kurzor myši v nahraném záznamu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Zvolte barvu kurzoru</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Pevná rychlost snímků.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Konstantní zpoždění, které se při nahrávání nemění)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Snímat pouze když se něco změní.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Snímek bude zachycen pouze tehdy, když se v oblasti snímání něco změní.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Zlepšit výkon snímání při připojení ke vzdálené ploše.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Zakáže zachycení vrstev okna)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Rychlé čištění paměti během snímání.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Snižuje využití paměti během snímání, ale snižuje výkon.)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Vodítka</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Pro pravidlo třetin</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Kliknutím zapnete/vypnete zobrazení vodítek pro pravidlo třetin.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Vodící kříž</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Kliknutím vypnete/zapnete zobrazení vodicího kříže.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Vodítka se zobrazí pouze v případě, když je nahrávání pozastaveno nebo zastaveno.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Skrýt záhlaví (tenký režim).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Povolit lupu obrazovky.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Umožňuje zvětšování při výběru v nahrávané oblasti)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animovat okraje výběru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animace ve stylu \"pochodujících mravenců\")</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Povolit posouvání výběru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Zobrazí uchopovací značku v blízkosti rohu výběru, která umožňuje pohyb oblasti záznamu.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Kompaktní mód.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Zobrazí menší verzi ovládacího panelu rekordéru.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Tlačítko pro zahození zobrazit i během nahrávání.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Je viditelné pouze při pozastavení.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Zlepšení výkonu při výběru obrazovky.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Snižuje zpoždění při výběru obrazovky zobrazením statického pohledu na obrazovku.)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Pamatovat si předchozí velikost oblasti záznamu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Pamatovat si předchozí umístění oblasti záznamu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Použít odpočítávání před nahráváním.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(v sekundách, čeká než začne nahrávat)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Zapnout sledování kurzoru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Oblast záznamu se sama přemisťuje podle pozice kurzoru.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Posun v pixelech, po kterém dojde k posouvání oblasti záznamu)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Dodatečný posun v pixelech, od kterého se uživatelské rozhraní začíná skrývat.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Před zahozením nahrávky se zeptat.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Pozadí editoru</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Velikost mřížky</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Velmi malé</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Malé</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Střední</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Velké</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Ještě větší</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Libí se mi velké čtverce</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Jsem slepý</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Vlastní</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Výška</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Šířka</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Uložit</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Základní barva</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Barva sudá</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Barva lichá</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Zobrazovat enkódování v odděleném okně.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Rozšířit záhlaví (okno chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Automatické nastavení velikosti okna dle velikosti snímku.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Automatické nastavení přiblížení snímku dle velikosti okna.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Vyžaduj potvrzení před smazáním snímků.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Vyžaduj potvrzení před odstraněním projektu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Vyžaduj potvrzení před uzavřením Editoru (v případě, že existuje otevřený projekt).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Povolit trojklik pro výběr textu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Přidání obrysu okolo textu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">V případě potřeby vynechat snímek</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Přeskočit snímek, pokud ho prohlížeč není schopen zobrazit včas)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Přeskočit snímek, pokud ho prohlížeč není schopen zobrazit včas.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Nastavit limit pro historii zpět/znovu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Starší akce budou po dosažení limitu odstraněny.)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximální počet uložených akcí)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Synchronizace výstupní složky předvoleb.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Předvolby budou používat stejnou cestu)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Synchronizovat také název souboru.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Předvolby budou používat stejný název souboru.)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Synchronizace pouze mezi předvolbami stejného formátu souboru.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Synchronizovány budou pouze předvolby stejného formátu.)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automatická úloha</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Seznam úloh (spouštěných automaticky)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Úloha</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detaily</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Zapnuto</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Zapnuto</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">Vybrat úlohu</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Vyberte úlohu</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Úlohy se spouští v pořadí shora dolů. Spustí se při prvním otevření projektu v editoru.&#10;(proto nefungují při připojení další části projektu)</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globální</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Záznam plochy:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Otevře záznamník obrazovky)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Záznam webkamery:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Otevře záznamník webové kamery)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Záznam plátna:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Otevře záznamník plátna a umožňuje nahrát kresby)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Otevře další okno editoru)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Nastavení:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Otevře okno nastavení. Lze otevřít pouze jedno)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Ukončení:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Uzavře všechna okna a odstraní ikonu ze systémové lišty)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Záznam</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Spustit/Pozastavit:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Spustí nebo pozastaví nahrávání. Používá se k pořízení snímků, pokud je režim snímků aktivován)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Zastavit:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Zastaví nahrávání a otevře editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Zahodit:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Zahodit aktivní záznam, pokud je pozastaven)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Sledování kurzoru:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Zapne posun oblasti záznamu na základě polohy kurzoru.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Vypnout sledování:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Dočasně zakáže posun oblasti záznamu na základě polohy kurzoru, akceptovány budou pouze modifikační klávesy.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Kliknutím nastavíte zaměření na klávesnici, a poté stiskněte požadované klávesy a modifikátory.&#10;Některé kombinace kláves nejsou povoleny.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Jazyk aplikace</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Zjištěný automaticky</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Aktuální jazyk OS (pokud je k dispozici)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Chtěli byste přeložit mou aplikaci?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Kliknutím sem přejdete na stránku obsahující pokyny a odkaz na stažení aplikace pro překlad.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Následně</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">klikněte sem k importu</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">a testu nového překladu.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Po dokončení překladu jej odešlete</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">emailem (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Kliknutím otevřete webovou stránku s pokyny.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Otevře okno pro import</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Otevře vaši e-mailovou aplikaci</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Stav </s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Jednotka:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} volno z {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Aktualizovat zjištěné hodnoty velikosti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Vymazat složku mezipaměti.&#10;Budete se moci rozhodnout, zda chcete zachovat poslední projekty.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Nedostatek místa na zvolené jednotce. Vymažte složku nebo změňte umístění.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Nelze načíst údaje o jednotce.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Žádné soubory</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} soubor</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} souborů</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Žádné složky</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} složka</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} složek</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} použito</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Cesty</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Mezipaměť/Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Zvolte umístění dočasných souborů</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logy:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Zvolte umístění chybových (log) protokolů</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Přejít do vybrané složky.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Umístění konfiguračního souboru</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Lokální:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Neexistuje</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Vytvořit prázdný soubor pro lokální nastavení.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Odstranit konfigurační soubor.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Otevřít složku s konfiguračním souborem.&#x0d;Podržte klávesu Ctrl při kliknutí na soubor.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Struktura nastaveného načítání: \"Lokální>AppData>Default\".&#x0d;• Pokud v lokálním adresáři není žádný konfigurační soubor, aplikace prohledá složku AppData a případně složku Default.&#x0d;• Pokud neexistuje lokální nastavení, jsou všechna nastavení uložena v konfiguračním souboru ve složce AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Smazat všechny soubory z cache/mezipaměti při ukončení aplikace.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Zeptat se před odstraněním souborů z cache/mezipaměti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Automaticky odstraňovat staré projekty.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Při otevření editoru se na pozadí spustí úloha pro odstranění starších projektů dle nastavení.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(Počet dní, po kterých budou starší projekty  odstraněny při otevření editoru.)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Vymazání mezipaměti/cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Chcete vymazat složku mezipaměti/cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Když vytvoříte záznam nebo otevřete záznam k úpravě, vytvoří se projekt a uloží se do složky mezipaměti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Chcete tyto projekty ze složky mezipaměti odstranit?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Neodstraňujte poslední projekty.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Odstraněny budou pouze projekty starší než {0} dnů, které se nyní nepoužívají.)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Všechny projekty, které se v současné době nepoužívají, budou odstraněny.)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Režim:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Vypnuto</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Ruční</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Systém</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Použije systémové nastavení proxy)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Uživatelské jméno:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Heslo:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Předvolby odesílání (uploadu)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Služby</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Jméno</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Popis</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Zapnuto</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Služba pro upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Výběr služby pro upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Nahoře vyberte službu uploadu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Vlastní</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Zapnout tuto předvolbu.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Detaily</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Jméno:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Popis:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Režim:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonymní</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Ověření</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorizace</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Vyžádat token</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Vložte OAuth token </s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Přihlašovací jméno:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Heslo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Povolit</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Přihlašovací jméno ani heslo nebudou uloženy.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Volby</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Použijte přímé odkazy.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Předvolbě musíte dát jedinečný název.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Název je již používán jinou předvolbou.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Je nutné dokončit proces ověřování.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Pro autorizaci této aplikace musíte zadat své uživatelské jméno a heslo.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Nepodařilo se získat autorizační token.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Pro autorizaci této aplikace zadejte autorizační klíč.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Autorizace se nezdařila. Zkontrolujte, zda zadané údaje jsou v pořádku, a za chvíli to zkuste znovu.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Nelze načíst seznam alb.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Authorizace dokončena.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Neautorizovaný.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Autorizace vyprší za {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorizace je platná do {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Získejte odkazy s rozšířením Gifv namísto Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Odeslat soubory gif do vybraného alba.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Dotázat se před nahráním</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Znovu načíst seznam.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Výchozí</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Požádat o vyplnění údajů o nahrávání.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">URL:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Vyberte album (volitelné):</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Lze vybrat cílové album</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Detaily uploadu (doporučeno)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Podrobnosti uploadu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Název:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Popis:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Štítky:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Štítky oddělujte středníkem ; </s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Zobrazí se pouze těm, kteří přistupují přes přímý odkaz.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Historie uploadu</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Datum</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Předvolba</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Úspěšné?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Smazání historie.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Odkaz:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Snížení kvality:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Smazání odkazu:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Jste si jisti, že chcete odstranit položku historie?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Tuto akci nelze vzít zpět.&#10;&#10;Chcete vybranou položku historie vymazat?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Dostupné externí nástroje</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Kliknutím sem stáhněte&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Stahování...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Staženo&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Kliknutím sem otevřete vlastnosti souboru.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Aplikace distribuované Microsoft Store nelze stahovat z jiných aplikací. Musíte je stáhnout ručně.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg umístění</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Vyberte umístění spustitelného souboru FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg exe soubor</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Cesta spustitelného souboru FFMpeg obsahuje neplatné znaky. Prosím zvolte platné umístění souboru.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski umístění</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Vyberte umístění spustitelného souboru Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski knihovna</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Cesta spustitelného souboru Gifski obsahuje neplatné znaky. Prosím zvolte platné umístění souboru.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg licence</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski licence</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx licence</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Chybí oprávnění pro zápis do složky</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Stahovanou položku není možné uložit do složky kvůli chybějící oprávněním k zápisu.&#10;&#10;Chcete spustit stahovač s právy správce, aby se stahování dokončilo?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Přispět</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Přispět US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Přispět €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Otevře stránku Paypal s vybranou měnou: Dolar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Otevře stránku Paypal s vybranou měnou: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Otevře stránku Paypal. Je třeba vybrat měnu.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Odhlášení</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Měsíční podpora přes Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Gift games</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Gift games přes Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Gift games přes GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Koupit kafe pomocí Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Krypto měny</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Kopírovat Bitcoin adresu.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Podpora</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Chcete-li projekt podpořit :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Verze:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Zkontrolovat aktualizace</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Máte nejnovější verzi ScreenToGif.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Autor: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store verze. Některé funkce jsou zakázány kvůli zásadám.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Kontakt</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Připojení k serveru</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Navštívit web</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Připojit do místnosti</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Technické informace</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licence:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Tato aplikace je zcela zdarma)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Zdrojový kód:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Ochrana soukromí:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Velké díky patří</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Všem mým podporovatelů a lidem kteří mi poskytlí zpětnou vazbu a/nebo finanční podporu.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Lokalizace</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Zjištění kódu jazyka...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Rozpoznáno jako {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Není možné</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Poslední zdroj je tím právě používaným.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Pro použití vlastního zdroje proveďte jeho přesun do dolní části seznamu.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Export zdroje...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Uložit seznam zdrojů</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Otevřít seznam zdrojů</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Seznam zdrojů</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Import zdroje...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Název souboru neodpovídá platnému vzoru</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Zkuste přejmenovat: StringResources.en.xaml, kde 'en' nahradíte potřebným kódem jazyka.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Nelze připojit zdroj se stejným jménem</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Zkuste odstranit stejné zdroje nebo jazykové kódy.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Nadbytečný jazykový kód</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Kód \"{0}\" je nadbytečný. Zkuste místo toho použít \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Neznámý jazyk</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">Znak \"{0}\" a jemu příbuzné nejsou uznány jako platné jazykové kódy.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Nebylo možné použít lokalizační soubor.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Záznam</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pozastavit</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Pokračovat</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Zastavit</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Zahodit</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Přichycení</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Výška</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Šířka</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Sledování kurzoru je zapnuto.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Kliknutím přepínáte mezi režimy snímání.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">ruční</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interaktivní</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Maximální počet snímků za sekundu</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Rozsah od 1 do 60 snímků za sekundu, vyšší hodnota znamená, že bude zachyceno více snímků.&#10;Nejkratší prodleva je 17 milisekund.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Maximální počet snímků za minutu</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Rozsah od 1 do 60 snímků za minutu, vyšší hodnoty znamenají, že bude zachyceno více snímků.&#10;Nejkratší prodleva je 1 sekunda.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Maximální počet snímků za hodinu</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Rozsah od 1 do 60 snímků za hodinu, vyšší hodnota znamená, že bude zachyceno více snímků.&#10;Nejkratší prodleva je 1 minuta.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Kliknutí nebo stisk klávesy pro sejmutí</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Přichytit k oknu (přetáhnout a uvolnit)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Před zahájením</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (pozastaven)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Zastavuji...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Před spuštěním...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Uplynulý čas snímání.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Celkový počet snímků:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Ruční snímání:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Snímání pozastaveno.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Váš počítač nepodporuje přesný režim snímání,&#10; to znamená, že požadované snímková frekvence nemusí být dosaženo.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Nepodařilo se sejmutí obrazovky</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Nepodařilo se sejmutí obrazovky. Pět snímků po sobě nebylo zvolenou metodou nic sejmuto.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Nebylo možné spustit/pozastavit snímání obrazovky.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Pro zachycení obrazovky pomocí rozhraní API (Duplikace plochy) je vyžadován systém Windows 8 nebo novější.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Oblast</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Vyberte oblast</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Okno</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Vyberte okno</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Plocha</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Vyberte obrazovku</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Interní displej</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Obecná obrazovka</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Graphický adaptér: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Rozlišení: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Nativní rozlišení: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Táhnout a přesunout&#10;výběr.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Přijmout</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Znovu</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Pravý klik</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Zrušit výběr (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Kliknutím a tažením vyberte oblast obrazovky</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Kliknutím a tažením vyberte oblast</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Klikněte sem pro výběr tohoto okna</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Klikněte sem pro výběr této obrazovky</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Stisknout Esc pro zrušení</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Stiskněte {0} pro zastavení nahrávání</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Okno záznamníku bude minimalizováno, &#10;obnovte jej nebo stiskněte {0} pro pozastavení snímání.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Vyřazení nahrávky</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Jste si jisti, že chcete záznam zahodit?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Touto akcí se záznam zahodí a odstraní se všechny snímky.&#x0d;Tuto operaci nelze vrátit zpět.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Záznamník webové kamery</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Nebylo nalezeno žádné zařízení pro nahrávání:(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Zkontrolovat webovou kameru.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Rozsah: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Změnit rozsah videa.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Záznamník plátna</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Automatické nahrávání</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Povoluje nahrávání během kreslení.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [podržet]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Výběr barev</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Vyberte barvu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Červená</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Zelená</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Modrá</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa:</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Počáteční barva</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Aktuální barva</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Nejnovější barva</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Přetáhnout na; vzorek barvy</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Kliknout a přetáhnout&#x0d; barva z obrazovky</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Prohlížeč výjimek</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Otevřít vnitřní výjimku</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Výjimky</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Zpráva</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Zásobník</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Zdroj</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Něco je špatně.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Poslat zprávu</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Přednastavené</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Enkodér</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Jméno</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Popis</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Další</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Automatické uložení po modifikaci.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Změnu nastavení (enkódování i exportování) je nutné uložit ručně stiskem příslušného tlačítka.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Všechny změny nastavení (enkódování i exportování) budou uloženy automaticky.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Některé vlastnosti předvolby jsou určeny pouze pro čtení.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Předvolbu je nutné pojmenovat.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Předvolba se stejným názvem již existuje.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Automatické uložení</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Změny nastavení budou automaticky uloženy.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Výchozí ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Výchozí nastavení pro enkodér.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Pro Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Dodrží limit pro upload na Twitter (velikost a rozlišení).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Starší a známější kodek.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animace</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Obrázek</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projekt</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Vysoká kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Hodí se pro nahrávky s více barvami a přechody.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Vysoká kvalita • průhledné pozadí</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Umožňuje uložení animace s průhledným pozadím.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Vysoká kvalita • Grafika</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Lepší kvalita nahrávání, nižší počet barev.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • vyvážené</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Dobrá kvalita pro obrázky podobné fotografiím pomocí Wuova kvantizeru bez ditheringu.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • vysoká kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Vysoká kvalita pro obrázky podobné fotografiím pomocí Wuova kvantizéru s vyšší bitovou úrovní a Floyd-Steinbergovým rozptylem.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • nízká kvalita, rychlá</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Kvantizace všech snímků pomocí předdefinované \"webově bezpečné\" palety a Bayerova uspořádaného ditheringu 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • vyšší kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Vyšší kvalita obrazu, ale větší velikost souboru.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • nižší kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Nižší kvalita obrazu, ale menší velikost souboru.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Vyšší kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Vyšší kvalita obrazu, ale větší velikost souboru.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • nižší kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Nižší kvalita obrazu, ale menší velikost souboru.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • nižší kvalita, rychlejší</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Ještě nižší kvalita obrazu, ale rychlejší kódování a menší velikost souboru.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Systém • nižší kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Nižší kvalita, ale rychlejší kódování.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - vysoká kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Vysoká kvalita obrázků, malá velikost, ale pomalejší enkódování.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - nižší kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Nižší kvalita obrázků, malá velikost, rachlé enk=odování.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Vysoká kvalita</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Vysoká kvalita obrázku a malá velikost souboru.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Vložit snímky</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Obě strany by měly mít stejnou velikost, toto okno umožňuje změnit umístění a velikost snímkuu a plátna. Kliknutím vyberte a změňte velikost.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Velikost plátna:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Přizpůsobit snímek plátnu</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Přizpůsobit velikost plátna dle snímku (z levého horního rohu).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Existuje rozdíl ve velikosti snímků. Před vložením snímků je třeba tento rozdíl odstranit.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Nové snímky</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Aktuální snímek</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Velikost snímku:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Umístění snímku:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Obnovit velikost snímku&#x0d;a jeho pozici</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Nové snímky bude vloženy do aktuálního listu snímků na pozici:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Za</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Před</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Snímek</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importování</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Vyberte barvu výplně plátna</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importovat snímky z videa</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Způsob importu:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Nahrávání...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Rozsah</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Velikost</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Výška:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Šířka</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Frekvence snímků:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Start:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Konec:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Výběr:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Snímky:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Trvání:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Video nebylo možné načíst</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Prohlížeč se nepodařilo spustit. Zkuste použít jiný způsob importu nebo zkontrolujte, zda video není poškozené.&#x0d;Pokud jste chtěli použít Windows MediaPlayer, zkontrolujte, zda je zapnuta funkce Windows nazvaná \"Funkce médií/Windows Media Player\", a ujistěte se, že máte potřebný kodek videa.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Časový limit pro náhled snímku.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Není vybrán snímek pro import.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Kódování</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Enkóduji...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Spuštění</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Dokončeno</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Zkopírováno do schránky</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Kopírování se nezdařilo</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Příkaz byl spuštěn</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Zobrazit výstup příkazu/ů.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Spuštění příkazu se nezdařilo</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Odeslání se nezdařilo.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + klik otevře stránku pro odstranění obrázku (je-li k dispozici).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Uplynulo, v minutách:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analýza:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Enkódování:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopírování:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Příkazy:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Soubor odstraněn nebo přesunut</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Zrušeno</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Chyba</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Kliknutím sem zobrazíte detail této chyby.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Nahrávání</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Provádění příkazů</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Zpracování {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Připravuji druhý průchod</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Zpracování {0}- druhý průchod</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Vytvářím soubor</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analýza nezměněných pixelů</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Uložit výsledek analýzy</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Otevřít soubor</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Prozkoumat složku</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Odstranit ze seznamu</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Zobrazit detaily</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Skrýt dokončená enkódování</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Zkopírovat jako obrázek</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Zkopírovat název souboru</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Zkopírovat cestu složky</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Zkopírovat odkaz</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - příkaz výstupu</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Příkaz výstupu</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Upozornění</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Skrýt všechna oznámení</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Soubor</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Domů</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Přehrávání</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Upravit</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Snímky</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Přechody</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistika</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Nastavení</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Nápověda</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extra</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Aktualizace je dostupná!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Klikněte zde a přečtěte si více.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Celkový počet snímků, počet vybraných, číslo snímku</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Příprava snímků</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Chyba při nahrávání - Nelze importovat více souborů najednou. Vyberte pouze jeden soubor.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Chyba při nahrávání - Nelze nahrávat více projektů najednou. Vyberte pouze jeden projekt.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Otevřít soubor médií (obrázek nebo video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Otevřít soubor médií (obrázek nebo video) nebo soubor projektu</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Všechny podporované soubory</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Obrázky</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">PNG animace</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">GIF animace</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">WEBP animace</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">AVI video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">MKV video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">MOV video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">MP4 video</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">WEBM video</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">BMP obrázek</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">JPEG obrázek</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">PNG obrázek</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">ZIP s obrázky</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif projekt jako Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">PSD soubor</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Vyberte, co chcete spustit, na kartě \"Soubor \"</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Pro import přetáhněte obrázky, videa nebo projekty</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Děkuji, že používáte tuto aplikaci!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Čím nižší je frekvence snímků, počet barev nebo množství změn mezi snímky, tím menší je velikost.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Máte dotazy či připomínky? Otevřete \"Nastavení > O aplikaci\" pro možnosti kontaktu.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Máte potíže? Kontaktujte mě přes volbu Zpětná vazba.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Nechcete vyzkoušet nové rozhraní záznamníku? Přejděte do \"Nastavení > Nahrávání\" a zapněte ho.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Nahrávání</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Nahrávání&#x0d;webkamery</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Nahrávání&#x0d;plátna</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Prázdný&#x0d;projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nový</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Nahrávání</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Nahrávání&#x0d;webkamery</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Nahrávání&#x0d;plátna</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Soubor</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Připojit</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Uložit jako</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Otevřít</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Nedávné&#x0d;projekty</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Uložit jako&#x0d;projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Zahodit&#x0d;projekt</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Úpravy</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Zpět</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Znovu</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Reset</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Schránka</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Zobrazit schránku</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Vložit</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Vyjmout</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopírovat</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zvětšení</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Přizpůsobit&#x0d;obsahu</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Přizpůsobit oknu</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Výběr</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Vybrat&#x0d;vše</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Přejít na</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Obrátit výběr</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Zrušit výběr</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Přehrávání</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">První</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Předchozí</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Přehrát</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pozastavit</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Další</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Poslední</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Volby přehrávání</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Opakovat přehrávání</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Používá se pouze pro přehrávání.&#x0d;Pokud si přejete změnit nastavení opakování pro exportovaný Gif či Apng.&#x0d;u některých enkodérů je tato volba k dispozici v \"Uložit jako\".</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Snímky</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Smazat</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Smazat&#x0d;duplicity</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Snížit&#x0d;počet snímků</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Plynulá&#x0d;smyčka</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Odstranit vše&#x0d;předchozí</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Odstranit vše&#x0d;následující</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Přeskupení</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Obrátit</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">JoJo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Posunout&#x0d;vlevo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Posunout&#x0d;vpravo</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Zpoždění (prodleva)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Zpoždění</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Zvýšit nebo&#x0d;snížit</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Procentuálně</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Velikost a rotace</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Změnit&#x0d;velikost</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Oříznout</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Převrátit/Otočit</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Text</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Nadpis</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Libovolný text</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titulní strana</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Stisknuté&#x0d;klávesy</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Vrstvy</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Kreslení</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Tvary</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Události&#x0d;myši</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Vodoznak</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Kinematograf</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Ohraničení</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Stín</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Průběh</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Rozostřit</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Způsob přechodu</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Přechod do...</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Prolnutí</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Základní</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Počet snímků</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Celková doba trvání</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Velikost snímku</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Průměrná doba trvání (zpoždění)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Aktuální čas</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Aktuální čas (kumulativní) pro zobrazený aktuální snímek.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI snímku a rozsah</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Vybraný snímek</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Vyříznutí</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Nelze vyjmout všechny snímky.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Záznam vyžaduje alespoň jeden snímek.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Odstranit vše</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Opravdu chcete odstranit všechny snímky?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Tato akce smaže aktuálně otevřený projekt a nebude možné se vrátit zpět. Chcete pokračovat?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Zahodit projekt</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Opravdu chcete projekt odstranit?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Tato akce odstraní projekt a smaže všechny snímky.\\n\\rAkci nebude možné vrátit zpět.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Chcete odstranit předchozí projekt?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Pokud tak neučiníte, bude možné předchozí projekt otevřít prostřednictvím volby Nedávné projekty.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Odstranit snímky</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Opravdu chcete smazat?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Tato akce odstraní {0} snímků.\\n\\rAkci nebude možné vrátit zpět.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Ukončit editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Opravdu chcete ukončit?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Aktuální projekt bude možné znovu otevřít přes volbu \"Nedávné projekty\".</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Aktuální projekt bude možné znovu otevřít přes volbu \"Nedávné projekty\", ale nezapomeňte, že po několika dnech bude projekt automaticky odstraněn.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Neplatné přetažení</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Není možné načíst více souborů najednou</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Vyberte pouze jeden soubor.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Soubor nelze načíst</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Soubor není možné načíst, jelikož má neplatný formát.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Není možné importovat více projektů najednou</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Vyberte pouze jeden projekt.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Neexistuje text k použití.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Vyberte alespoň jeden snímek pro uložení textu.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Vyberte alespoň jeden snímek, na který se použije text.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Vyberte alespoň jeden snímek vedle kterého se má vložit titulní strana.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Zvolte tloušťku ohraničení větší než 0 alespoň na jedné straně.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Vyberte alespoň jeden snímek pro uložení ohraničení.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Aby se v rámečku něco změnilo, musí být neprůhlednost větší než nula.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Pokud nastavít hloubku stínu a poloměr rozostření na nulu, nebude to mít žádný význam, protože bude skryt za rámečkem.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Vyberte alespoň jeden pixel pro použití Cinemagraph. Pixely vyberete jejich obkreslením.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Přechod</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Vyberte alespoň jeden snímek pro uložení prolnutí.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Průhledná barva nebude mít na tento přechod žádný vliv.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Prolnutí ze strany</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Vyberte alespoň jeden snímek pro použití funkce přechodu snímků.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Nahrávání snímků</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Není možné načíst projekt</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Nebylo možné načíst snímky, jelikož jsou poškozeny nebo nejsou tam, kde se očekávají.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Některé snímky nemohly být načteny</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Nebylo možné načíst snímky, jelikož nebyly nalezeny nebo byly poškozeny.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Vyberte alespoň jeden snímek k uložení vrstvy.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg nenalezen. Vstupte do \"Nastavení > Doplňky\" a tam  buď nastavte jeho umístění nebo ho stáhněte.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski nenalezen. Vstupte do \"Nastavení > Doplňky\" a tam  buď nastavte jeho umístění nebo ho stáhněte.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Nedostatek místa na disku, na kterém si tato aplikace ukládá svou vyrovnávací paměť (zbývá {0}%). Kliknutí otevřete \"Nastavení > Dočasné soubory\" k uvolnění místa.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Pokusili jste se importovat obrázky s různým DPI, což není podporováno. Některé z nich se importovaly, ostatní je třeba importovat samostatně.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Pokusili jste se importovat obrázky s různou velikostí, což není podporováno. Některé z nich se importovaly, ostatní je třeba importovat samostatně.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Načtení snímků z mezipaměti</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Aktualizace snímků</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Příprava k importu</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Import snímků</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analýza duplicit</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Nastavit zpoždění</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Odstranit duplicity</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Odstranit snímky</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Odstranit adresáře</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Změna velikosti snímků</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Oříznutí snímků</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Použít překryv snímků</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Vytvoření úvodního snímku</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Použít otočení/Otočení snímků</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Změna prodlevy</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Použít efekt přechodu</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Příprava k uložení</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Ukončit načítání a odstranit projekt.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Hledání ideální smyčky</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Zahazování snímků nepoužitých ve smyčce</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Snímek:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Otevřít obrázek</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Prozkoumat složku</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Přejít na snímek</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Přejít na snímek (0 z {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Uložit jako</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Odstranit vybrané snímky</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nový záznam obrazovky</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nový záznam webové kamery</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nový záznam plátna</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nový projekt</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nový záznam z média nebo projektu</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Vytvořen nový záznam</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Vytvořen nový záznam webové kamery</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Vytvořen nový záznam plátna</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Vytvořen nový projekt</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Vráceno zpět</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Proveden reset</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Znovu provedeno</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} snímků vyjmuto</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} snímků zkopírováno</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} snímků vloženo</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zvětšení nastaveno na {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Vybrány všechny snímky</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Vybrán snímek #{0}</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Výběr obrácen</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Vybrání všech snímků zrušeno</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} snímku smazáno</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Obrácen seznam snímků</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Jojo efekt uložen</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Snímky posunuty vlevo</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Snímky posunuty vpravo</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Změněna velikost snímků</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Snímky oříznuty</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Snímky převráceny/otočeny</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Převrácení se vztahuje na vybrané snímky a otočení platí pro všechny.</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Tato akce se použije na všechny snímky</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Tato akce se použije na vybrané snímky</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Tato akce se vztahuje na všechny nebo jen vybrané snímky - v závislosti na nastavení.</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Kinematograf upraví všechny snímky dle prvního snímku</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Použita vrstva</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Vytvořen titulní snímek</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Titulní snímek bude uložen před vybraný snímek</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Změněno trvání (zpoždění)</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Vložen přechod</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Frekvence snímků snížena</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplicity odstraněny</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Skrýt</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Použít</s:String>\n    <s:String x:Key=\"S.Action.Open\">Otevřít</s:String>\n    <s:String x:Key=\"S.Action.Save\">Uložit</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Zrušit</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Nedávné projekty</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Vyhledávám nedávné projekty...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Datum vytvoření</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Počet snímku</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Nebyl vybrán žádny projekt. K načtení vyberte projekt ze seznamu.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Tento projekt je již zobrazen tímto editorem.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Tento projekt je již otevřen jinou instancí editoru. Projekt nelze otevřít podruhé, pokud je otevřen v jiné instanci editoru.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Položky schránky</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Položka schránky:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} obrázek</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} obrázků</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Prozkoumat obsah</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Odstranit</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Vložit snímek ze schránky</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">před označený snímek</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">za označený snímek</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Změna </s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Nastavení </s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixely (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Procenta (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Zachovat poměr stran.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Převzorkování:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Vysoká kvalita</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Lineární • Nižší kvalita</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nejbližší soused• Nižší kvalita, rychlejší</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Kvalita škálování.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Vyberte jinou hodnotu pro změnu velikosti.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Oříznout</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Shora:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Zleva:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Zdola:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Zprava:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Oblast k oříznutí musí být menší než aktuální velikost snímku.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Oblast k oříznutí musí být větší než 10x10 pixelů.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Převrátit horizontálně</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Převrátit vertikálně</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Otočit 90° vlevo</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Otočit 90° vpravo</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Snížit počet snímků</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Faktor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Počet odstranění:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Úprava zpoždění:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Neupravovat</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Sečíst s předchozí prodlevou</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Rozdělit na zbývající snímky</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Snížit snímkovou frekvenci celého projektu.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Pokud tato možnost není zapnuta, je třeba vybrat,&#10;více po sobě jdoucích snímků, než je faktor odstranění.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Odstraní {0} snímek/snímky po každém {1}. snímku; nezapočítává odstraněné snímky.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Musíte vybrat snímky, na které se má snížení snímkové frekvence použít (nebo zaškrtněte možnost použít na celý projekt).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Vybrané snímky musí následovat za sebou. Mezi vybranými snímky nelze ponechat některé nevybrané.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Počet vybraných snímků musí být větší než faktor odstranění, aby funkce mohla něco odstranit.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Odstranit duplicity</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Podobnost (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Odstranění snímku:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Odstranit první snímek</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Odstranit poslední snímek</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Nastavit zpoždění:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Neupravovat</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Použít průměr</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Použít součet</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Tato akce analyzuje každý snímek (pixel po pixelu) a odstraňuje ty, které jsou nejméně z {0} % podobné bezprostředně sousedícím snímkům.&#x0d;Je možné nastavit zpoždění (trvání zobrazení) snímků.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Úpravy pro plynulou smyčku</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Začít snímkem:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Směr porovnávání:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Od konce</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Od začátku</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Pokusí se najít snímek z {0} % podobný počátečnímu snímku a odstraní všechny následující snímky, aby smyčka opakování byla plynulá.&#x0d;Můžete si vybrat, zda chcete ignorovat některé počáteční snímky a zahájit porovnávání od začátku nebo od konce.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Počet snímků, které se mají ignorovat, musí být menší než celkový počet snímků.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Při zvoleném nastavení není možné vytvořit plynulou smyčku.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Plynulá smyčka, založená na vybraných nastaveních, je již vytvořena.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Text</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Písmo</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Font:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Styl:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Tloušťka:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Velikost:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Barva:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Obrys</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Tloušťka:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Uspořádání</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Svisle:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Vodorovně:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Zarovnání:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Efekty:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Stisky kláves</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Klávesy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Oddělovač:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Uprav stisknuté klávesy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignorovat Ctrl, Alt, Shift, a tlačítko Windows pokud nejsou používány jako modifikátory.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ignorovat stisknutí tlačítka Ctrl, pokud není použito v kombinaci s další klávesou (Ctrl + C).</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignoruje programové simulace stisků kláves.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Zaznamenává pouze stisky fyzických kláves.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Prodloužit dobu zobrazení stisknutých kláves.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Zobrazovat stisknuté klávesy dříve.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">V (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Záznam neobsahuje žádné stisknuté klávesy.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Editor stisknutých kláves</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Číslo snímku</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Zaznamenané klávesy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Odstranit klávesu</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Přidat klávesu:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Malá písmena.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Umožní vkládat malá písmena.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Způsob</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Pero</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Guma</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Výběr</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Smazání tahu</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Šířka:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Výška:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Hrot:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Obdélník</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elipsa</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Další:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Zvýrazňovač (průhledné)</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Vyhladit křivky</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Neexistují žádné kresby, které by měly být aplikovány na zvolené snímky.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Vyberte alespoň jeden snímek, na který se použije kresba.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Vložit</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Tvary</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Zaoblení:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Tečkování:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Nastavuje velikost čárek a mezer.&#10;Můžete nastavit více velikostí a vytvořit tak propracovaný styl čárek.&#10;Výchozí hodnota je \"1 0\" nebo prázdná, což znamená pomlčku bez mezer.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Odvolat otočení</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Smazat</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Výplň</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Myš - události</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Barva zvýraznění kurzoru:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Klik levým tlačítkem:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Klik prostředním tlačítkem:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Klik pravým tlačítkem:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Obrázek</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Soubor:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Není vybráno</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Neprůhlednost:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Vyberte obrázek</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Vyberte obrázek pro uložení na vybraný snímek.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Vyberte alespoň jeden snímek pro uložení Vodoznaku.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Vzhled</s:String>\n    <s:String x:Key=\"S.Border.Info\">Záporná hodnota způsobí přidání rámečku vně snímků.&#10;V případě kladné hodnoty bude rámeček zakrývat část snímku.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Barva stínu:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Barva pozadí:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Posun:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Rozmazání:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Hloubka:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelizace</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Rozmazání</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Ztmavení</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Zesvětlení</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Možnosti rozostření</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Velikost pixelů:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Rozmazání:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Ztmavení:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Zesvětlení:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Vypočítat průměrnou barvu pro každý blok rozdělený do pixelů.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Použijte zakrytí na inverzi výběru.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Vyhlazení</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Pomocí nástroje vyberte část, která má být zakryta (rozpixelována).</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Pomocí nástroje vyberte část, která nemá být zakryta (rozpixelována).</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Nebyl proveden žádný výběr. Pomocí nástroje vyberte obdélník, který má být rozdělen do pixelů.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Typ</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Ukazatel</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Čas/snímky</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Přesnost:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuty</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekundy</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milisekundy</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Procento</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Číslo snímku</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Aktuální datum/čas</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Vlastní</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Zobrazit celkem</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formát:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formát</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milisekund</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = sekund</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minut</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$*p = procent</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = číslo snímku</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Celkem:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Příklad:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Lze použít formát data a času z prostředí .Net Framework.&#x0d;Specifikace je k dispozici na těchto dvou odkazech.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Výchozí formát</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Vlastní formát</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Číslovat od:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Číslovat snímky od zadané hodnoty.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientace:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Použít nastavení</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Typ prodlevy:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Překrytí (v ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Zvýšit či snížit (v ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Měřítko (v %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nová hodnota</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimálně 10 ms na snímek.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Zmenšení/Zvětšení hodnoty</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Měřítko</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Nová hodnota nahradí trvání (zpoždění) všech vybraných snímků. Hodnota musí být v rozmezí 10 ms až 25500 ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Tato hodnota zkrátí/prodlouží trvání (zpoždění) každého vybraného snímku.&#x0d;Tuto dobu lze zkrátit/prodloužit výběrem hodnoty mezi -10000 ms a 10000 ms, ale výsledná délka zobrazení každého snímku bude omezena mezi 10 ms a 25500 ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Nastavení délky zobrazení (zpoždění) každého vybraného snímku o procentuální hodnotu.&#x0d;Délku zobrazení každého snímku můžete nastavit hodnotou mezi 1% a 1000%, ale konečná délka zobrazení každého snímku bude omezena na 10 ms až 25500 ms.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Použijte pero k označení oblasti (částí), které se budou měnit (animovat) - zamalujte je. Nezamalované části budou skryty.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Délka přechodu - počet nových snímků</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Trvání přechodu</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Přechod do...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Další snímek</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Barva</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Barva</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Přechod bude vytvořen mezi vybraným a následujícím snímkem.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Typ souboru</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Formát výstupního souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Export předvolby, která obsahuje všechna aktuálně zobrazená nastavení.&#10;Spravujte své exportní předvolby pomocí níže uvedených tlačítek.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Animovaný obrázek</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Rámce</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Jiné</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\n    <s:String x:Key=\"S.SaveAs.Avif\">Avif</s:String>\n    <s:String x:Key=\"S.SaveAs.Avif.Info\">AV1 Image File Format</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">AVI</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">MKV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">MOV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">MP4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">BMP</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmapa</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">JPEG</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">PNG</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Project</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif projekt</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Adobe Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Předvolby:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Výchozí</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Nové nastavení předvolby.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Uložit aktuální nastavení jako předvolbu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Úprava základních nastavení předvoleb.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Odstranění aktuálně vybrané předvolby.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Obnovení výchozích nastavení této předvolby.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Smazat předvolbu</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Opravdu chete smazat tuto předvolbu?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Tuto akci nelze vrátit zpět.&#10;&#10;Chcete vybranou předvolbu odstranit?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Obnovení přednastavení</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Určitě chcete předvolbu resetovat?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Tuto akci nelze vrátit zpět.&#10;&#10;Chcete obnovit výchozí nastavení vybrané předvolby?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kódování</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Enkódování a kvantizace</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Enkodér použitý při generování výstupního souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Vnitřní enkodér</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF enkodér</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Systém</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Enkodér dostupný v systému</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Externí enkodér, vytvořen FFmpeg.org</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Externí enkodér, vytvořen Gif.ski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Nastavení enkódování</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Použít rozšířený režim.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Ruční zadání parametrů pro nastavení enkodéru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parametry:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Seznam parametrů, které budou předány programu FFmpeg.&#10;&#10;Speciální parametry:&#10;{I} je vstupní cesta (snímky).&#10;{O} je výstupní cesta (exportovaný soubor).&#10;{W} je šířka snímku.&#10;{H} je výška snímku.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Chcete-li kódovat dvouprůchodově, přidejte '-pass 2'..</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Náhled</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Seznam parametrů, které budou předány aplikaci FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Info o kodeku</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Info o formátu</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Info o filtru</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Nastavení Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Redukční algoritmus barev (kvantizace).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neurální síť</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Vysoce věrná kvantizace. Pomalejší, ale vhodná pro větší množství barev.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Vhodné pro animace s menším počtem barev. Je rychlejší, ale může vytvářet barevné pruhy.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Střední řez</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Lepší než Octree, pomalejší vytvoření.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Odstíny šedé</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Používá pevnou paletu odstínů šedé, díky tomu je mnohem rychlejší.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Nejpoužívanější barvy</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Vybere nejpoužívanější barvy ve snímcích.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling (vzorkování):</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Faktor vzorkování:&#10;Při hodnotě 1 bude gif vypadat lépe, ale bude se pomaleji vykreslovat.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Kvalita:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Barvy:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maximální počet barev (na každý snímek).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Použít globální tabulku barev.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Může snížit kvalitu a/nebo velikost gifu.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Kvalitnější</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Rychlejší</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Použije rychlejší proces kódování.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Může snížit kvalitu gifu.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Smyčka:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Smyčka Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Nekonečné opakování.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Počet opakování.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Zapnout průhlednost.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Zapne režim plné průhlednosti, díky kterému bude pozadí Gifu zcela průhledné.&#10;Pokud je tato možnost povolena, nahrazení chromatickým klíčem nebude použito.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Vyberte barvu, která bude průhledná.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Jakmile vyberete barvu, bude převedena na průhlednou a ve vygenerovaném Gifu se zobrazí jako průhledná.&#10;Pokud není vybrána žádná barva, všechny průhledné barvy (Alfa = 0 %) se zobrazí normálně.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Zjištění nezměněných pixelů.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Analýzou a detekcí nezměněných pixelů mezi následujícími snímky &#10;bude možné uložit do Gifu pouze potřebné (změněné) části.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Nahradit nezměněné pixely chroma klíčem (barvou).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Opakující se/nezměněné pixely budou nahrazeny chroma klíčem,&#10;sníží se tím počet potřebných barev na snímku.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma klíč:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Rozptyl (Dither):</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Dither scale:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Kvantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Barva pozadí:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixely s průhledností (alfa), které vybraný kvantizer považuje za neprůhledné, budou před získáním kvantizované barvy smíchány s touto barvou.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Práh alfa:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Určuje práh hodnoty alfa, při které bude kvantizovaná barva průhledná.&#x0d;&#x0a;Pokud 0, pak výsledek nebude nikdy průhledný.&#x0d;&#x0a;Pokud 255, pak se za průhledné považují pouze zcela průhledné pixely.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Práh bílé:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Určuje nejnižší vstupní jas, aby výsledná barva byla považována za bílou.&#x0d;&#x0a;Ovlivňuje jas výsledného obrazu. Chybový difuzní dithering však může hodnotu tohoto parametru kompenzovat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Přímé mapování</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Je-li tato možnost zaškrtnuta, kvantizovaná barva se určí přímým mapováním namísto vyhledávání nejbližší položky palety.&#x0d;&#x0a;Urychluje kvantizaci, ale může vést k vyššímu kontrastu. Chybový difuzní dithering však může hodnotu tohoto parametru kompenzovat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Velikost palety:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Určuje maximální velikost palety pro snímek.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Vlastní bitová úroveň.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Je-li zaškrtnuto, lze bitovou úroveň konfigurovat ručně.&#x0d;&#x0a;⚠️ Upozornění: Nejvyšší bitová úroveň může vyžadovat hodně paměti!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Vyšší hodnota znamená větší věrnost, rozsáhlejší barevný prostor, pomalejší zpracování a větší spotřebu paměti.&#x0d;&#x0a;Například pokud je hodnota 1, pak výsledek nesmí mít více než 8 barev, nebo pokud je hodnota 2, nesmí mít více než 64 barev. &#x0d;&#x0a;U kvantizerů Octree a Wu to ovlivňuje i maximální počet monochromatických odstínů.&#x0d;&#x0a;Například je-li 5 (což je výchozí hodnota pro kvantizer Wu), lze rozlišit pouze 32 monochromatických odstínů.&#x0d;&#x0a;⚠️ Pozor: Wu kvantizer spotřebuje při nejvyšší hodnotě nejméně 650 MB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Černá a bílá</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Pevná 1b paleta pouze s černou a bílou barvou.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">4 odstíny šedé</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Pevná 2b paleta se 4 odstíny šedé.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">16 odstínů šedé</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Pevná 4b paleta s 16 odstíny šedé.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">256 odstínů šedé</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Pevná 8b paleta s 256 odstíny šedé.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Výchozí systémová 4b paleta</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Pevná 4b paleta se standardními 16 barvami RGB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Výchozí systémová 8b paleta</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Pevná 8b paleta obsahující 'bezpečné' barvy a průhlednost.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 paleta</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Pevná 8b paleta s barevným prostorem 332 RGB barev.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree kvantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Optimalizace palety pro každý snímek pomocí algoritmu Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut kvantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimalizace palety pro každý snímek pomocí algoritmu Median Cut..</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu kvantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Optimalizace palety pro každý snímek pomocí algoritmu Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Rozptyl (dither)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Síla:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">Zadejte sílu rozptylu, nebo 0 pro automatickou volbu síly rozptylu.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Zrno:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Pole Náhodné zrno umožňuje vybrat nové zrno pro algoritmus používaný ve dvou metodách náhodného ditheringu. Tlačítko Nové zrno vybere nové náhodné číslo za vás.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Nic</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Rámce a kvantizace bez rozptylu.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Smyčkové zpracování</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Pokud je zaškrtnuto, bude směr šíření změněn z řádku na řádek.&#x0d;&#x0a;To pomáhá snížit efekt zvlnění při rozptylu.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">Bayerova maska se vzorkem 2x2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">Bayerova maska se vzorkem 3x3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">Bayerova maska se vzorkem 4x4.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">Bayerova maska se vzorkem 8x8.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Tečkované polotóny</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Maska 8x8 s tečkovanými polotóny.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Modrý šum</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Maska 64x64 modrým vzorem.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson's 4x3 matrix with 6 effective values.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">The original 3x2 matrix by Floyd and Steinberg.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">An 5x3 matrix by Jarvis, Judice and Ninke.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra's 5x3 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra's 5x2 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra's 3x2 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">A 7x4 hexagonal matrix by Stevenson and Arce.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki's 5x3 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Random Noise</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Random white noise.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Interleaved Gradient Noise</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Nonrandom gradient noise generated by a formula.</s:String>-->\n\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Preview</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Show current frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">When checked, the preview shows the current frame instead of a standard image example.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Auto preview is disabled due to the high memory requirement of the current settings. Click to refresh the preview.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Failed to generate preview: {0}&#x0d;&#x0a;Click to try to generate it again.</s:String>-->\n\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Animation Settings</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Endless loop.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">When checked, the animation will be looped indefinitely.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Back and forth.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">When checked, the animation will be played back and forth.&#x0d;&#x0a;This is achieved by duplicating the frames meaning larger file size and longer encoding time.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Repeat Count:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Specifies how many times the animation will be played.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Allow delta frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">When checked, unchanged pixels are attempted to be detected during the encoding.&#x0d;&#x0a;When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors.&#x0d;&#x0a;This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta Tolerance:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Specifies the maximum tolerance when detecting changed pixels.&#x0d;&#x0a;If 0, then no difference is tolerated at all.&#x0d;&#x0a;If 255, then there might be frames (or even all of them) that are added with no content.&#x0d;&#x0a;Reasonable range is between 0 and 16 for an optimized quantizer. The ones with fixed colors can be used with somewhat larger values with dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">If Delta Tolerance is too high the result might have poor quality. Click to reset delta tolerance.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Allow clipped frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">When checked, the encoder is allowed to add smaller frames than the actual resolution.&#x0d;&#x0a;If Allow Delta Frames is unchecked, then allows only clipping possible transparent borders.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Allow Delta Frames is ignored because the current configuration does not use alpha and Allow Clipped Frames is unchecked. Click to enable clipped frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Allow Clipped Frames has no effect because the current configuration does not use alpha and Allow Delta Frames is unchecked. Click to enable delta frames.</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Nastavení Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Predikce:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Žádná</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Pod</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Nad</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Průměr</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Smíšená</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Smyčka Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Zjištění nezměněných pixelů.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Použít průhlednou barvu na všechny nezměněné pixely.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Předvolby:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Žádná</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Výchozí</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Obrázek</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Fotogragie</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Kresba</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Ikona</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Text</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Bezztrátový režim</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Režim:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normální</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Rozšířený</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Způsob konfigurace parametrů kodéru:&#10;Normální: používá standardní ovládací prvky uživatelského rozhraní.&#10;Pokročilý: pro zadání parametrů používá textové pole.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Kodek:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">Kodér videa, který je zodpovědný za&#10;převod  pixelů snímku do výstupního souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Předvolby:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Žádná</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Velmi pomalé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Pomalejší</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Pomalé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Střední</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Rychlé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Rychlejší</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Velmi rychlé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super rychlé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra rychlé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Kvalita</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Vyvážená</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Rychlá</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Výchozí</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Bezztrátová</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Bezztrátová (Vysoký výkon)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Vysoký výkon</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Vysoká kvalita</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray disk</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Nízké zpoždění</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Nízké zpoždění (Vysoký výkon)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Nízké zpoždění (Vyšší kvalita)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Rychlost kódování k poměru komprese,&#10;pomalejší předvolby mohou poskytnout lepší kompresi&#10; (menší velikost souboru při zachování kvality).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Speciální hardware:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Vyp.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Zap.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatický výběr</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Určuje použití speciálního hardwaru (grafické karty).&#10;Vypnuto: nepoužívá speciální hardware.&#10;Zapnuto: používá vyhrazený hardware a umožňuje vybrat speciální kodéry.&#10;Auto: používá vyhrazený hardware a automaticky vybírá správný kodér, pokud je to možné.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Formát pixelů:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatický</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Metoda synchronizace videa.&#10;Auto: volí mezi 1 a 2 v závislosti na možnostech muxeru (formátu).&#10;Průchozí: každý snímek je předán kodéru se svými časovými značkami.&#10;Konstantní: snímky mohou být duplikovány nebo odstraněny, aby bylo dosaženo přesné snímkové frekvence.&#10;Variabilní: snímky jsou předávány se svými časovými razítky nebo odstraněny, aby se zabránilo tomu, že 2 snímky budou mít stejná časová razítka.&#10;Drop: stejně jako průchozí, ale zruší všechna časová razítka, takže kodér vygeneruje nová časová razítka na základě snímkové frekvence.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Průchozí</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Konstantní framerate</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Proměnný framerate</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Framerate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Vlastní</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Průchod:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Konstantní.&#10;Nastavení řízení kvality a rychlosti.&#10;Pokud tuto vlastnost nechcete nastavovat, nechte ji prázdnou.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Úroveň kvality:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Menší hodnoty znamenají vyšší kvalitu.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Bitreat ukládaného videa.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitrate mód:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Konstantní</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Proměnný</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Min. bitrate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimální tolerance bitrate (datového toku).&#10;Nejužitečnější při použití režimu CBR.&#10;Pokud tuto vlastnost nechcete nastavovat, nechte ji prázdnou nebo nastavte nulu.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Max. bitrate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximální tolerance bitrate (datového toku).&#10;Vyžaduje nastavení velikosti vyrovnávací paměti.&#10;Pokud tuto vlastnost nechcete nastavovat, nechte ji prázdnou nebo nastavte nulu.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Vyrovnávací paměť:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Velikost vyrovnávací paměti.&#10;Pokud tuto vlastnost nechcete nastavovat, nechte ji prázdnou nebo nastavte nulu.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zazipovat snímky.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exportuje snímky do ZIP archivu.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Komprese snímků.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Komprimovat obrazová data pomocí algoritmu RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Uložit data časové osy.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exportuje časování snímků namísto pouhých snímků.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Možnosti uložení</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Částečný export.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Uložit soubor do adresáře dle vlastního výběru.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Přepsání:</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Zakázat</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Jen upozornit, že soubor stejného jména již existuje.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Zeptat se</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Dotázat se na přepsání souboru stejného jména.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Povolit</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Povolit přepsání bez dotazu či upozornění.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Uložit také jako projekt (stejný adresář, stejný název souboru).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Přenést soubor.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Zkopírovat do schránky</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Soubor</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Zkopírovat výstupní soubor do schránky.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Cesta složky</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Zkopírovat cestu složky výstupního souboru do schránky.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Cesta souboru</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Zkopírovat cestu výstupního souboru do schránky.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Odkaz</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Zkopírovat odkaz vygenerovaný službou pro přenos do schránky.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Po kódování provést zapsané příkazy.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Zadejte příkazy, které mají být provedeny po kódování.&#x0d;Po spuštění více příkazů, zadejte každý na samostatný řádek.&#x0d;Makra:&#x0d;{p} = Cesta výstupního souboru.&#x0d;{f} = Cesta výstupní složky.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Částečný export</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Režim:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Vyberte metodu částečného exportu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Výraz</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exportuje části animace na základě jednoduchého výrazu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Rozsah snímků</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exportuje pouze část animace - ve zvoleném rozsahu snímků.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Časový rozsah</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exportuje pouze část animace - ve zvoleném časovém rozsahu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Výběr</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exportuje pouze část animace - vybrané snímky.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Není vybrán žádný snímek.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 snímek vybrán.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} snímků vybráno.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Od:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Do:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Výraz:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Zadejte čísla snímků oddělená čárkou nebo&#10;sekvence snímků oddělené znaménkem minus:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Soubor</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Cílová složka.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Vybrat cílovou složku</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Vybrat umístění.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Formát souboru</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Název souboru. Vložte formát data a času mezi '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animace</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Zvýšit číslo souboru</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Snížit číslo souboru</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Soubor se stejným názvem již existuje.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Uložit do schránky.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Vyberte místo, kam chcete soubor uložit (do složky, do schránky, nebo někam jinam).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Nevybrali jste příponu souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Při výběru rozšířeného režimu je třeba zadat parametry do pole.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">V poli parametrů chybí speciální parametry {I} (vstup) a/nebo {O} (výstup).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Pro provedení příkazů je třeba napsat něco do textového pole pro příkazy.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Pokud chcete exportovat pouze vybrané snímky, musíte vybrat alespoň jeden snímek.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">Příkaz k částečnému exportu projektu je neplatný.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Nebyla vybrána žádná služba pro přenos. Vyberte cíl.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Nelze přenést na vybranou službu, jelikož nebyla povolena. Přejděte do Nastavení > Odesílání dat a povolte tuto aplikaci.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Nelze vybrat možnost kopírování odkazu, jelikož nebyl nastaven soubor pro přenos.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Vyberte výstupní adresář.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Výstupní adresář neexistuje.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Výstupní adresář obsahuje neplatné znaky. Prosím, zvolte platný adresář.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Vyberte název souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Název výstupního souboru obsahuje neplatné znaky. Prosím, zvolte platný název souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Název souboru již existuje. Povolte možnost přepsání nebo vyberte jiný název souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Název projektu již existuje. Povolte možnost přepsání nebo vyberte jiný název souboru.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Operace byla ukončena.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Odeslání</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Vyberte předvolbu, která obsahuje podrobnosti o službě používané pro odesílání.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Tato služba odesílání dat má svá omezení.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Přidání nové předvolby pro odesílání.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Upravit nastavení předvolby odesílání.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Zobrazit historii odesílání pomocí této předvolby.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Odstranění aktuálně vybrané předvolby odesílání.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Výběr předvolby pro odesílání</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Vyberte si jednu z těchto položek.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Pro tento formát není k dispozici předvolba odesílání</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Přidejte předvolbu pomocí tlačítka níže.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Odstranění předvolby pro odesílání</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Jste si jisti, že chcete předvolbu pro odesílání odstranit?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Tuto akci nelze vrátit zpět.&#10;&#10;Chcete odstranit vybranou předvolbu odesílání?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Export snímků</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Opravdu chcete exportovat snímky?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Tato akce provede export {0} snímků přímo do vybraného adresáře.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Přepsat</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Chcete tento soubor přepsat?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">V této složce již existuje soubor s názvem '{0}'.\\r\\nChcete jej přepsat?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Chcete tyto soubory přepsat?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">V této složce již existuje soubor nebo soubory se stejným názvem.\\r\\nChcete je přepsat?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Prohlížeč příkazů</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Příkaz</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Cesta vstupu</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Cesta výstupu</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Zpětná vazba</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Odeslat</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Náhled</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Odeslat zpětnou vazbu</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Předmět *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Zpráva *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Pokud budete hlásit chybu, nezapomeňte vysvětlit, jak k ní došlo, krok za krokem.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Typ zpětné vazby</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Návrh</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problém/Chyba</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Váš email (volitelně)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Uveďte předmět zpětné vazby.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Zadejte zprávu zpětné vazby.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Chcete-li obdržet odpověď od vývojáře, musíte zadat svůj e-mail.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Probíhá odesílání na pozadí... Toto okno bude brzy zavřeno.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Přílohy (volitelné, 20MB maximálně)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Přidat přílohy</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Odstranit všechny přílohy</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Rozumím anglicky</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">a portugalsky (brazilské a evropské nářečí).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Toto budete posílat, plus všechny přílohy.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Problémy?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Nevidíte nějaké okno?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Pokud některé z oken nevidíte (je mimo obrazovku),&#x0d;pomocí níže uvedených možností obnovte jeho pozici.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Zde je uvedeno, kde se v současné době nacházejí jednotlivá okna:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Zde je uvedeno, kde se příště otevřou jednotlivá okna:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Přesunout všechna okna na hlavní obrazovku.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Obnovení startovní pozice všech oken.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Obyčejné</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Kurzíva</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Zkosené</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Tučné</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Silné</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Polotučné</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra silné</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra tučné</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra slabé</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Tlusté</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Slabé</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Průměrné</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normální</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Obvyklé</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Polotučné</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Tenké</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra silné</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra tučné</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra tenké</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Nahoru</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Na střed</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Dolů</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Roztáhnout</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Vlevo</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Na střed</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Vpravo</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Vodorovně</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Svisle</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Vlevo</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Vpravo</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Na střed</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Na oba okraje</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Žádné</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Podtržení</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Přeškrtnutí</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Horní linka</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Dolní linka</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.da.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">OK</s:String>\n    <s:String x:Key=\"S.Back\">Tilbage</s:String>\n    <s:String x:Key=\"S.Cancel\">Annuller</s:String>\n    <s:String x:Key=\"S.Yes\">OK</s:String>\n    <s:String x:Key=\"S.No\">Annuller</s:String>\n    <s:String x:Key=\"S.Add\">Tilføj</s:String>\n    <s:String x:Key=\"S.Edit\">Tilpas</s:String>\n    <s:String x:Key=\"S.Id\">ID</s:String>\n    <s:String x:Key=\"S.Title\">Titel</s:String>\n    <s:String x:Key=\"S.Description\">Beskrivelse</s:String>\n    <s:String x:Key=\"S.SelectColor\">Klik for at vælge farve.</s:String>\n    <s:String x:Key=\"S.Documentation\">Klik for at gå til dokumentation.</s:String>\n    <s:String x:Key=\"S.Suppress\">Undertryk</s:String>\n    <s:String x:Key=\"S.Preview\">Vis</s:String>\n    <s:String x:Key=\"S.Size\">Str.</s:String>\n    <s:String x:Key=\"S.Background\">Baggrund</s:String>\n    <s:String x:Key=\"S.Color\">Farve:</s:String>\n    <s:String x:Key=\"S.Delay\">Tid</s:String>\n    <s:String x:Key=\"S.DelayMs\">Tid (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Værdi -+ (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Værdi:</s:String>\n    <s:String x:Key=\"S.Margin\">Margen:</s:String>\n    <s:String x:Key=\"S.Padding\">Polstring:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Min højde:</s:String>\n    <s:String x:Key=\"S.AndOr\">og/eller</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Øv, programmet lukkede :(</s:String>\n    <s:String x:Key=\"S.Required\">Krævet felt.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Manglende afhængighed</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 mangler</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Programmet kræver Net Framework, for at fungere ordentligt.&#x0d;Vil du hente det nu?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Der tillades kun en instans</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Programmet kører allerede</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif kører allerede. Brug ikonet nede ved uret.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Gemmer indstillinger</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Vil du prøve at gemme igen?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">ScreenToGif mangler rettigheder til at gemme på disken.&#x0d;&#x0d;Vil du prøve igen som administrator?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Lukker ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Vil du lukke?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Alle vinduer lukkes og ikonet fjernes.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Skift grafikkort</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Skift grafikkort for at optage den valgte skærm</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">P.g.a. begrænsninger i DirectX, skal ScreenToGif bruge det samme grafikkort som den skærm der skal optages.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Skift grafikkort for ScreenToGif i Windows indstillinger > System > Skærm > Grafik, eller klik herunder.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Skift grafikkort for ScreenToGif i grafikkortets indstillinger.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Windows indstillinger</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Mellemrum</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Højreklik</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Ny skærmoptagelse</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Ny webcamoptagelse</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Ny tavleoptagelse</s:String>\n    <s:String x:Key=\"S.Exit\">Luk</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Ny skærmoptagelse</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Ny webcamoptagelse</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Ny tavleoptagelse</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Ny animation</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Indsæt skærmoptagelse</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Indsæt webcamoptagelse</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Indsæt tavleoptagelse</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Indsæt billede/video</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Gem som...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Indlæs filer (billeder, videoer og projekter)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Indlæs seneste projekter</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Kassér aktuelt projekt</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Tilpas rammetid</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Forøg/formindsk rammetid</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Skalér rammetid</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">100% zoom</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Pas vindue til rammestørrelse</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Pas billede til vinduesstørrelse</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Vælg første ramme</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Vælg forrige ramme</s:String>\n    <s:String x:Key=\"S.Command.Play\">Afspil animation</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Vælg næste ramme</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Vælg sidste ramme</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Fortryd</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Gendan</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Fortryd alle ændringer</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Kopier valgte rammer</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Klip valgte rammer</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Indsæt rammer fra hukommelsen</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Slet valgte rammer</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Slet alt før</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Slet alt efter</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Fjern duplikater</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Reducér rammeantal</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Opret glat gentagelse</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Vend animation</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Spiller animationen forlæns og baglæns</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Flyt valgte ramme til venstre</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Flyt valgte ramme til højre</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Tilpas alle rammestørrelser</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Beskær alle rammer</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Vend/rotér rammer</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Tilføj titel</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Tilføj frit flydende tekst</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Tilføj titelramme</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Indsætter optagne tastetryk</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Tegn frit</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Tilføj figurer</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Museklik</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Vælg billede til vandmærke</s:String>\n    <s:String x:Key=\"S.Command.Border\">Tilføj kanter</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Tilføj skygge</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Censurer følsomme områder</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Brug pennen til at vælge hvilke dele af rammen&#x0d;der ikke er konstante gennem hele animationen</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Statuslinie/tekst med afspilningstid</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Vælg alle rammer</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Gå til rammenummer...</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Invertér rammevalg</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Fravælg alt</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Udton overgang</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Glidende overgang</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Fjern alle gennemførte</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Flyt op</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Flyt ned</s:String>\n    <s:String x:Key=\"S.Command.Add\">Tilføj</s:String>\n    <s:String x:Key=\"S.Command.Open\">Åben</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Rediger valgte emne</s:String>\n    <s:String x:Key=\"S.Command.Save\">Gem valgte emne</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Fjern valgte emne</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Vis historik</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Opstart</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Optag</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Åbner skærmoptageren, så du kan starte din optagelse.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Åbner webcamoptageren.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Tavle</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Åbner tavleoptageren, så du kan optage dine tegninger.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Redigér</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Åbner redigeringsfunktionen, hvor du kan tilpasse din optagelse, eller starte en ny.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Indstillinger</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Ny udgave</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Downloader nyeste ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Opdater</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Ny udgave tilgængelig</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Ny udgave!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Version {0} er udkommet! Klik her for detaljer.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Dit system er tilsyneladende ikke længere understøttet.&#x0d;Prøv at programmet fra hjemmesiden.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Version</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portable</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Installering</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Nyheder?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Rettede fejl:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Der findes en ny version.&#x0d;Vil du hente den nu?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Start efter opdatering.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Download</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Installér</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Installer manuelt</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Henter...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Kunne ikke vise detaljer.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Opdateringen kunne ikke hentes.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Alle kodninger skal gennemføres, før du opdaterer.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Downloader</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Downloader</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} af {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Indstillinger</s:String>\n    <s:String x:Key=\"S.Options.App\">Program</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Optager</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Redigér</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Automatisér</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Genveje</s:String>\n    <s:String x:Key=\"S.Options.Language\">Sprog</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Lager</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Ekstra</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Værter</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Donér</s:String>\n    <s:String x:Key=\"S.Options.About\">Om...</s:String>\n    <s:String x:Key=\"S.Options.Other\">Andet</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Følg markør mangler en genvej</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Der skal knyttes en genvej til Følg markør, så du kan slå funktionen til/fra efter behov.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Start</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Manuelt</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Du starter selv programmet.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Automatisk</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Programmet starter med Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Ikke muligt at vælge startmetode.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Tillad kun&#x0d;en instans</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Du kan kun køre  en udgave af programmet pr. bruger.&#x0d;D.v.s. at flere brugere og programudgaver kan eksistere sammen.&#x0d;Prøver du at starte igen, fokuseres det allerede kørende, og den 2. instans lukkes.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Tillad flere&#x0d;instanser</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Programmet kan køre flere gange samtidigt.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Start ved uret.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(starter minimeret til et ikon nede ved uret)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Start med:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Startvindue</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Optager</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Tavle</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Redigér</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(vises ved programstart)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Tema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Farveskema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Meget lys</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Lys</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Mørk</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Meget mørk</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Systemtema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Tilpasset</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Eksempel</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Ikon ved uret</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Vis ikon ved uret.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Luk ikke programmet, selv om alle vinduer lukkes.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Ingenting</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Åben vindue</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Intet vindue</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimér/gendan alle vinduer</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimér alle vinduer</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Gendan alle vinduer</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Venstreklik:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Dobbeltklik:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Midterklik:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Vindue:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">ellers åbnes:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Generelt</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Løsning på fejlen \"Ikke kvote nok...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(eksperimentelt)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Bekræft programlukning.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Deaktivér hardwareacceleration.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(brugerfladen behandles af software)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Søg efter sprogopdatering.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(opdateringer hentes og installeres automatisk)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Søg efter opdatering.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Opdatér automatisk efter programlukning.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Hent portable versionen.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(pak ud og erstat den eksisterende fil)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Opdatér som administrator.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Spørg før opdatering.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Brugerflade</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Gammel</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Ny</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Optagefrekvens</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manuel</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Rammer optages enkeltvis med optageknap eller genvejstast.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Bruger</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Rammer optages når du klikker/taster.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Pr. sekund</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Rammer optages pr. sekund.&#x0d;Rammeraten angives i optageboksen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Pr. minut</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Rammer optages pr. minut (timelapse).&#x0d;Rammeraten angives i optageboksen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Pr. time</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Rammer optages pr. time (timelapse).&#x0d;Rammeraten angives i optageboksen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Afspilning:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(De enkelte rammers varighed (i ms) ved afspilning</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Rammer optages hvert {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Metode</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Original metode. Kræver ikke ekstra plugins.&#x0d;Langsommere og optager muligvis ikke spil</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Skrivebords API. Kræver SharpDX plugin og mindst Windows 8.&#x0d;Hurtigere og i stand til at optage spil der kører i fuld skærm.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Gem til&#x0d;fil</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Hver optaget ramme, gemmes som et billede.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Midlertidig&#x0d;hukommelse</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Hver optaget ramme gemmes først i hukommelsen&#x0d;som en pixelmatriks (komprimeres muligvis før).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Komprimering:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(langsommere men bedre)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Hurtigst</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(hurtigere men dårligere)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Ingen</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Ingen komprimering under optagelse)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Hukommelse:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(i MB. Overskrides dette, skrives til fil)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Undgå helt sorte rammer.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(forhindrer BitBlt hukommelse fuld af helt sorte rammer)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Optag musemarkøren.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Klikfarve</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Fast rammerate.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(konstant forsinkelse der ikke ændres)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Optag kun ved ændringer.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(optager kun når noget ændres i optageområdet)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Optimér ydelsen på fjernskrivebord.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(deaktiverer optagelse af vinduer i lag)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Rens hukommelse under optagelse.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(reducerer hukommelsesforbrug, men forringer ydelsen)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Hjælpelinier</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Det gyldne snit</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Vis/skjul det gyldne snit.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Kryds</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Vis/skjul krydsets hjælpelinier.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Hjælpelinier vises kun når optagelse er på  pause/stoppet.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Skjul titellinie (tynd).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Aktivér lup.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(forstørrer ved ved valg af område)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animér kanter ved valg af område.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(marcherende myrer)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Aktivér områdeflytning.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(viser håndtag i hjørnet, så området kan flyttes)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Kompakt.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(mindre udgave af optagekontroller)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Vis også \"Kassér\" under optagelse.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(normalt synlig ved pause)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Optimér områdevalg.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(reducerer flimmer)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Husk sidste områdestørrelse</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Husk placering.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Tæl ned til start.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(sekunder før optagelse starter)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Følg musen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(optageområdet følger markøren)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(antal pixel før flytning aktiveres)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(ekstra antal pixel der skjuler brugerfladen)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Spørg før optagelse kasseres.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Redigeringsbaggrund</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Gitterstørrelse</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Meget lille</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Lille</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Stor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Meget stor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Jeg kan lide store kvadrater</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Jeg er blind</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Tilpasset</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Højde</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Bredde</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Anvend</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Grundfarve</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Lige farve</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Ulige farve</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Vis kodninger i separat vindue.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Udvid titellinie (window chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Pas automatisk vinduesstørrelse til rammestørrelse.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Pas automatisk rammer til vinduesstørrelse.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Bekræft sletning af rammer.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Spørg før projekt kasseres.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Bekræft lukning af redigering (ved åbne projekter).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Aktivér trippelklik vælger tekst.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Tegn omkreds på titelbogstaver.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Spring unødvendige rammer over.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(hvis de ikke kan forhåndsvises korrekt)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Spring unødvendige rammer over&#x0d;hvis de ikke kan forhåndsvises korrekt.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Antal Fortryd/gendan.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(de ældste handlinger fjernes når grænsen er nået)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(maksimalt antal)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Synk profilers destinationsmappe.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(profiler bruger samme destinationsmappe)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Synk også filnavn.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(profiler bruger samme filnavn)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Synk kun profiler med samme filtype.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(kun synkronisering af profiler med samme filtype)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automatisering</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Automatiske opgaver</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Opgave</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detaljer</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Aktiveret</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Aktivér denne opgave.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Vælg)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Vælg opgave herover</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Opgaverne udføres i rækkefølge fra toppen, ved første projektredigering.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globalt</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Skærmoptager:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(åbner standard skærmoptager)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webcamoptager:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(åbner webcamoptager)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Tavleoptager:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(åbner tavleoptageren)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Redigering:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(åbner et redigeringsvindue mere)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Indstillinger:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(åbner indstillinger.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Luk:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(lukker alle vinduer, og fjerner ikonet ved uret)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Optagelse</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Start/pause:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(starter/stopper optagelsen. Bruges til snapshot, hvis aktiveret)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stop:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(stopper optagelse og åbner redigering)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Kassér:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(kasserer den aktive optagelse, når den pauses)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Følg mus:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(slår \"Følg mus\" til eller fra)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Deaktiver:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(deaktivér \"Følg mus\" midlertidigt. Kun ændringstaster (Ctrl, Alt...etc.))</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Klik og tast den ønskede genvej (visse kombinationer er ikke tilladt).</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Sprog</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Genkend</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Systemsprog (hvis muligt)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Vil du oversætte programmet?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Klik her for at læse hvordan du gør.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Bagefter</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">klikker du her</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">og tester din oversættelse.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Send den til</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">når du er færdig.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Åbner hjemmesiden med instruktioner.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Åbner importvinduet</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Åbner dit mailprogram</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Drev:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} ledig af {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Opdatér status.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Ryd cache.&#x0d;Du kan vælge om du vil bevare seneste projekter.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Det aktuelle drev er fuldt. Fjern midlertidige filer, eller skift placering.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Kunne ikke hente oplysninger.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Ingen filer</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} fil</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} filer</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Ingen mapper</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} mappe</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} mapper</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} i brug</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Placeringer</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Vælg mappe til midlertidige filer</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Vælg mappe til fejlrapporter</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Åben mappe.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Indstillinger</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">Appdata:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Lokal:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Findes ikke</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Opret ny lokal indstillingsfil.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Fjern indstillingsfilen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Åben indstillingsfilens mappe.&#x0d;Hold Ctrl nede mens du åbner filen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Indlæs indstillinger: Standard ◄ AppData ◄ Lokal.&#x0d;&#x0d;• Uden indstillingsfil i lokalmappe, søger programmet i AppData.&#x0d;&#x0d;• Standard anvendes hvis der ikke findes en indstillingsfil.&#x0d;&#x0d;• Uden lokale indstillinger, gemmes alle indstillinger i AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Ryd cache når programmet lukkes.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Spørg først.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Fjern gamle projekter automatisk.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Projekter, ældre end den indstillede tidsfrist, fjernes når redigeringsvinduet åbnes.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(dage før ældre projekter fjernes)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Ryd cache</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Vil du tømme cachemappen?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Når du optager eller redigerer, oprettes et projekt, som gemmes i cachemappen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Vil du fjerne disse projekter fra cachemappen?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Behold seneste projekter.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(kun projekter der er ældre end {0} dage fjernes)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(alle projekter der ikke er i brug fjernes)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Status:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Deaktiveret</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manuel</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">System</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Bruger systemets proxy)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Vært:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Brugernavn:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Kodeord:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Profiler</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Vært</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Titel</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Beskrivelse</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Aktiv</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Værter</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Vælg vært</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Vælg en vært herover</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Tilpas</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Aktivér profilen.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Detaljer</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Navn:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Beskriv:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Upload:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonymt</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Som bruger</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Godkendelse</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Hent kode</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Indsæt koden her</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Bruger:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Kodeord:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Godkend</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Brugernavn og kodeord gemmes ikke.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Valg</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Direkte link</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Profilen skal navngives.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Navnet er allerede i brug.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Du skal gennemføre godkendelsen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Angiv brugernavn og kodeord.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Godkendelsen mislykkedes.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Angiv godkendelse for at autorisere programmet.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Godkendelsen mislykkedes. Kontroller alt og prøv igen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Albumlisten kunne ikke indlæses.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Godkendt.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Ikke godkendt</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Godkendelse udløber om {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Godkendelse gyldig til {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Gifv links i stedet for Gif links.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Upload til valgt album.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Bekræft upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Genindlæs albumliste.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Standard</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Spørg efter detaljer.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url type:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Vælg album (valgfrit)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Du kan vælge et destinationsalbum:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Detaljer (valgfrit)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Detaljer</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Titel:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Beskriv:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Mærker:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Adskil mærker med semikolon ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Vis kun ved direkte link.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Historik</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Dato</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Profil</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Gennemført?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Slet historikemne.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Lav kvalitet:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Slettelink:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Vil du slette emnet?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Kan ikke fortrydes.&#x0d;&#x0d;Vil du slette valgte emne?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Eksterne værktøjer</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Hent&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Downloader..</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Eksisterer&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Klik for at se filens egenskaber.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Store apps kan ikke downloade andre apps. Download manuelt.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Vælg FFmpeg placering</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg .exe fil</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Stien til FFMpeg er ugyldig. Vælg en ny placering.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Vælg Gifski placering</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski bibliotek</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Stien til Gifski er ugyldig. Vælg en anden placering.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg licens</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski licens</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx licens</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Mappen er skrivebeskyttet</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Kan ikke gemme i en skrivebeskyttet mappe.&#x0d;&#x0d;Vil du prøve igen som administrator?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Donér</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Donér US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Donér €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Åbner Paypals hjemmeside. Valgt valuta: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Åbner Paypals hjemmeside. Valgt valuta: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Åbner Paypals hjemmeside. Vælg selv valuta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Abonnér</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donér månedligt via Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Donér via Stripe.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Spilgaver</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Spilgaver via Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Spilgaver via GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Giv kaffe via Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Kryptovaluta</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Kopiér BitcoinCash adresse.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Support</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Hvis du ønsker at støtte projektet :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Udgave:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Søg efter opdatering</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Programmet er opdateret.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Udvikler: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store udgave. Nogle funktioner er deaktiveret p.g.a. tilladelser.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Kontakt</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Besøg server</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Besøg side</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Besøg rum</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Teknisk</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licens:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(programmet er helt gratis)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Kildekode:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Privatliv:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Mange tak til</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Alle mine støtter, og folk som er kommet med kritik, idéer og donationer.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Oversættelse</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Henter sprog...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Genkendt som {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Ikke genkendt</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Det aktuelle sprog vises nederst .</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Flyt oversættelsen ned, for at teste den.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Gemmer sprog...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Destinationsmappe</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Vælg mappe</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Mappe</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Indlæser sprog...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Filnavnet er ugyldigt</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Omdøb f.eks til: StringResources.da.xaml, hvor 'da' er landekoden.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Du kan ikke indlæse et eksisterende sprog.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Fjern det eksisterende eller brug en anden landekode.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Forkert landekode</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Koden \"{0}\" er ugyldig. Prøv \"{1}\" i stedet.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Ukendt sprog</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">Landekoden \"{0}\" blev ikke genkendt.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Sproget kunne ikke indlæses.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Optag</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pause</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Fortsæt</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Stop</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Kassér</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Snap</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Højde</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Bredde</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Følg mus er aktiv.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Klik for at skifte optagefrekvens.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manuelt</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">brugerbestemt</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Maks. rammer pr. sekund</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Fra 1 til 60 fps. Højere værdi optager flere rammer.&#x0d;Forøger med 16 ms pr. trin.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Maks. rammer pr. minut</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Fra 1 til 60 fps. Højere værdi optager flere rammer.&#x0d;Forøger med 1 sekund pr. trin.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Maks. rammer pr. time</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Fra 1 til 60 fps. Højere værdi optager flere rammer.&#x0d;Forøger med 1 minut pr. trin.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Klik eller tast for at starte</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Snap til vindue (træk til vindue og slip)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Nedtælling</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (pauset)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Stopper...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Tæller ned...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Optagetid.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Antal rammer:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Optaget manuelt:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Optagelse på pause.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Computeren understøtter ikke nøjagtig optagelse,&#x0d;så rammeraten opnås muligvis ikke.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Skærmen kunne ikke optages</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Skærmen kunne ikke optages. Optagemetoden opgav efter 5 forsøg.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Kunne ikke starte/pause optagelsen</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\"> Optagelse med Desktop API kræver mindst Windows 8.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Område</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Vælg område</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Vindue</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Vælg vindue</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Skærm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Vælg skærm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Intern skærm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Generisk skærm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Grafikkort: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Opløsning: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Skærmopløsning: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Træk her for at&#x0d;flytte området.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">OK</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Ny</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Højreklik</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Annuller valg (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Klik og træk for at vælge område</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Klik og træk for at vælge område</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Klik her for at vælge et vindue</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Klik her for at vælge hele skærmen</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Tast Esc for at annullere</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Tast {0} for at stoppe</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Optageboksen minimeres.&#x0d;Gendan den, eller tast {0} for pause</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Kassér optagelse</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Vil du kassere optagelsen?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Optagelsen og alle tilhørende rammer fjernes.&#x0d;Kan ikke fortrydes.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Webcam</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Enhed ikke fundet :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Søg efter enheder.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Skala: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Tilpas videostørrelse.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Tavleoptager</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Autooptag</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Optag når der tegnes.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Hold]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Farvevælger</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Vælg en farve</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Rød</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Grøn</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Blå</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Oprindelig</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Aktuel</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Seneste</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Træk til farve</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Klik og træk til&#x0d;ønskede farve.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Undtagelser</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Åben undtagelse</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Type</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Besked</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Stak</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Kilde</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Noget gik galt.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Send rapport</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Profil</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Koder</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Navn</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Beskrivelse</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Andet</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Gem automatisk ved ændringer.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Profilændringer skal gemmes manuelt med Gem ikonet.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Profilændringer gemmes automatisk.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Standardprofiler er delvist skrivebeskyttede.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Navngiv profilen.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Profilnavnet findes allerede.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Autogem</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Profilændringer gemmes automatisk.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Standard ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Kodningens standardprofil.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">For Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respekterer Twitters grænser (på nær str. og opløsning).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">Højeffektiv videokodning.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Ældre, gennemprøvet kodning.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Billede</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projekt</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Høj kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Til optagelser med mange farver.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Høj kvalitet • Transparent baggrund</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Til animationer med transparent baggrund.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Høj kvalitet • Grafik</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Til optagelser med få farver.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - Høj kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Høj kvalitet, men større filer.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - Lav kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Lavere kvalitet, men mindre filer.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski - Høj kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Høj kvalitet, men større filer.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski - Lav kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Lavere kvalitet, men mindre filer.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski - Lavere kvalitet og hurtig kodning</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Endnu lavere kvalitet, men hurtig kodning og mindre filer.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System - Lav kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Lav kvalitet men hurtig kodning.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - Høj kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Høj kvalitet og lille fil, men langsom kodning.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - Lav kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Lavere kvalitet, men hurtig kodning og mindre filer.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Høj kvalitet</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Høj kvalitet og lille fil.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Indsæt rammer</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Begge sider bør have samme størrelse. I dette vindue kan du placere og tilpasse billedet på lærredet. Klik for at vælge og tilpasse.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Lærredsstørrelse:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Pas billede til lærred</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Passer lærredet til begge billeder (fra øverste venstre hjørne).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Der er forskel på rammernes størrelse. Tilpas størrelsen før du indsætter.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Indsatte rammer</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Aktuelle rammer</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Billedstørrelse:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Billedposition:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Nulstil billede&#x0d;og placering</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Nye rammer indsættes i den aktuelle&#x0d;rammeliste på positionen:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Før</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Efter</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Ramme</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importerer</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Vælg lærredsfarve</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importér rammer fra video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importør:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">indlæser...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Skala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Str:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Højde:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Bredde:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Rammerate:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Start:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Slut:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Markering:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Rammer:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Længde:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Videoen kunne ikke indlæses</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Visningen kunne ikke  starte. Prøv en  anden importør eller kontroller videoen.&#x0d;Bruger du MediaPlayer, så se om Windows funktionen \"Mediefunktioner / Windows Media Player\" er aktiveret og du har de nødvendige videokodeks.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Rammevisning overskred tidsfristen.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Der er ikke valgt importrammer.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Kodning</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Koder...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Starter</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Gennemført</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Kopieret</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Kopiering fejlede</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Kommando udført</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Vis resultatet.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Kommando fejlede</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Upload fejlede</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + klik for at åbne siden og slette billedet (hvis muligt).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Tidsforbrug i minutter:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analyse:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Kodning:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopi:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Kommandoer:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Slettet/flyttet fil</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Annulleret</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Fejl</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Klik for at se fejldetaljer.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Upload</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Kommandoer</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Behandler {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Forbereder andet gennemløb</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Behandler {0} - 2. gennemløb</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Opretter fil</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analyserer uændrede pixel</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Gemmer resultat</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Åben fil</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Gennemse...</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Fjern</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Vis detaljer</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Fjern alle gennemførte</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Kopiér som billede</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Kopiér filnavn</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Kopiér sti</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Kopiér link</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - kommandoresultat</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Kommandoresultat</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Beskeder</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Afvis alle beskeder</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Redigering</s:String>\n    <s:String x:Key=\"S.Editor.File\">Fil</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Hjem</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Afspil</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Redigér</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Billede</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Overgange</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistik</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Indstillinger</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Hjælp</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Mere</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Programmet kan opdateres!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Klik for at læse mere.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Totalt, Valgt, Indeks</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Forbereder</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Ugyldigt - Du kan ikke indlæse flere filer samtidigt. Prøv med en enkelt.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Ugyldigt - Du kan ikke indlæse flere projekter samtidigt. Prøv med et enkelt.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Åben medie (billede/video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Åben medie (billede/video) eller projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Alle filer</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Billede</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Png animation</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp animation</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp billede</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg billede</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png billede</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip fil med billeder</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif projekt som Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd fil</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Gå til \"Fil > Ny\" for at starte en optagelse</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Træk billeder, videoer eller projekter ind i vinduet</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Tak fordi du bruger mit program!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Jo lavere rammerate, farveantal eller ændringer mellem rammerne er, jo mindre filstørrelse</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Vil du snakke? Åben \"Indstillinger > Om...\" for kontaktmuligheder</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Problemer? Kontant mig via kritik</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Vil du prøve den nye optager? Så gå til \"Indstillinger > Optager\" og aktiver den</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Optag</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Tavle</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Blank</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Ny</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Optagelse</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Fra&#x0d;webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Tavle&#x0d;optager</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Fra&#x0d;medie</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Indsæt</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Gem som</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Åben</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Seneste&#x0d;projekter</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Gem som&#x0d;projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Kassér</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Handlinger</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Fortryd</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Gendan</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Nulstil</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Udklipsholder</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Vis udklipsholder</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Indsæt</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Klip</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopier</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Pas til&#x0d;indhold</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Tilpas</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Vælg</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Vælg&#x0d;alle</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Gå til</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Vend</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Ingen</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Afspilning</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Første</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Forrige</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Spil</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pause</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Næste</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Sidste</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Indstillinger</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Gentag.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Kun ved afspilning.&#x0d;Resultatet indstilles i \"Gem som...\".</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Rammer</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Slet</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Fjern&#x0d;duplikater</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Reducér&#x0d;rammeantal</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Gentag&#x0d;glat</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Slet før</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Slet efter</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Sortér</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Vend</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Venstre</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Højre</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Rammetid</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Sæt&#x0d;tid</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Forøg&#x0d;formindsk</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Skalér&#x0d;tid</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Størrelse og placering</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Størrelse</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Beskær</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Flip/rotér</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Titel</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Fri tekst</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titelramme</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Tastatur&#x0d;anslag</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Overlæg</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Fri&#x0d;hånd</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Figur</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Klik</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Vandmærke</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraf</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Kant</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Skygge</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Forløb</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Censurér</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Stil</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Udton</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Glid</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Generelt</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Rammeantal</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Længde</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Rammestørrelse</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Gennemsnitslængde</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Aktuel tid</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Tid fra start til den aktuelle ramme.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Ramme DPI og skala</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Valgte ramme</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Klip</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Du kan ikke klippe alle rammerne.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Optagelsen kræver mindst en ramme.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Fjern alt</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Vil du fjerne alle rammer?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Dette vil kassere alle åbne projekter, og kan ikke fortrydes. Vil du fortsætte?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Kassér projekt</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Vil du kassere projektet?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Dette vil kassere projektet og fjerne alle rammer.&#x0d;Kan ikke fortrydes.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Vil du kassere det forrige projekt?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Hvis ikke, kan det forrige projekt åbnes via 'Seneste projekter'.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Slet rammer</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Vil du slette?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Dette sletter {0} ramme(r).&#x0d;Du kan fortryde senere.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Lukker Redigering</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Vil du lukke?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Projektet kan åbnes igen via \"Seneste projekter\".</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Projektet kan åbnes igen via \"Seneste projekter\",&#x0d;men slettes automatisk efter få dage.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Ugyldig træk og slip</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Du kan ikke importere flere filer samtidigt</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Prøv kun at vælge en enkelt.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Kan ikke åbne filen</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Filens format er ugyldigt.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Du kan ikke importere flere projekter samtidigt</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Prøv at vælge et enkelt.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Der er ingen tekst.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Vælg mindst en ramme til titlen.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Vælg mindst en ramme til teksten.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Vælg mindst en ramme som nabo til titelrammen.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Kanttykkelsen skal være større end 0 på mindst en side.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Vælg mindst en ramme der skal kantes.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Helt gennemsigtige skygger vises ikke på rammen.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Når skyggedybde og sløringsradius er sat til 0, vises de ikke.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Vælg mindst en pixel at anvende Cinemagraf på. Vælg pixel ved at tegne på dem.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Udton</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Vælg mindst en ramme til udtoningen.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">En helt gennemsigtig farve opretter ingen effekt på denne overgang.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Glid</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Vælg mindst en ramme til glidende overgang.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Indlæser...</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Projektet kan ikke åbnes</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Rammerne kunne ikke indlæses. De er enten i stykker eller ikke blev fundet på den forventede placering.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Nogle rammer kunne ikke indlæses</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Det var ikke muligt, da de enten er i stykker eller ikke blev fundet på den forventede placering</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Du skal vælge mindst en ramme til overlægget.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg findes ikke. Føj det til miljøvariabler eller angiv placeringen i indstillinger.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski findes ikke. Føj det til miljøvariablerne eller angiv placeringen i \"Indstillinger\".</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Der er ikke plads nok til programmets midlertidige filer ({0}% tilbage). Gå til Indstillinger > Midlertidige filer og frigør plads.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Import af flere billeder med forskellig DPI er ikke tilladt. Nogle blev importeret, andre skal importeres separat.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Import af flere billeder med forskellig størrelse er ikke tilladt. Nogle blev importeret, andre skal importeres separat.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Henter rammer fra cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Opdaterer...</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Forbereder...</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importerer...</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analyserer duplikater</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Justerer forsinkelse</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Kasserer duplikater</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Kasserer rammer</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Kasserer mapper</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Tilpasser størrelse</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Beskærer rammer</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Anvender overlæg</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Opretter titelramme</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Anvender flip/rotér</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Ændrer forsinkelse</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Anvender overgang</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Forbereder gem</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Annuller og kassér projekt.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Finder perfekt gentagelse</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Kasserer unødvendige rammer</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Ramme:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Åben billede</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Åben mappe</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Gå til ramme</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Gå til ramme (0 til {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Gem som</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Fjern valgte rammer</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Ny optagelse</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Ny fra webcam</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Ny tavleoptagelse</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nyt projekt</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Ny fra medie eller projekt</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Optagelse gennemført</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Webcamoptagelse gennemført</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Tavleoptagelse gennemført</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Ny animation oprettet</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Handling fortrudt</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Nulstilling gennemført</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Handling gendannet</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} ramme(r) klippet</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} ramme(r) kopieret</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} ramme(r) indsat</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom sat til {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Alle rammer valgt</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Ramme #{0} valgt</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Markering vendt</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Markering ryddet</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} ramme(r) valgt</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">rammeliste vendt</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yoyo effekt anvendt</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Ramme(r) flyttet til venstre</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Ramme(r) flyttet til højre</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Rammestørrelser tilpasset</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Rammer beskåret</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Rammer flippet/roteret</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Flip anvendes på valgte rammer og roter anvendes på alle rammer</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Handlingen gælder alle rammer</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Handlingen gælder valgte rammer</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Handlingen anvendes på alle eller valgte rammer, afhængigt af dine indstillinger</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraf anvendes på alle rammer baseret på første ramme</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Overlæg anvendt</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Titelramme oprettet</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Titelrammen indsættes før valgte ramme</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Varighed ændret</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Overgang indsat</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Reduceret rammerate</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplikater fjernet</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Skjul</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Anvend</s:String>\n    <s:String x:Key=\"S.Action.Open\">Åben</s:String>\n    <s:String x:Key=\"S.Action.Save\">Gem</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Annuller</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Seneste projekter</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Søger...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Dato</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Rammeantal</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Intet valgt. Vælg et projekt fra listen.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Projektet vises allerede.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Projektet er allerede åbnet i redigering. Projekter kan kun åbnes i en programinstans.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Udklipsholder</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Emne:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} billede</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} billeder</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Gennemse...</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Fjern</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Indsættelse</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Før valgte ramme</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Efter valgte ramme</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Forskel</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Indstillinger</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixel (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Procent (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Bevar størrelsesforhold.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Kvalitet:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Høj kvalitet</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Lineær • Lav kvalitet</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nærmeste nabo• Lav kvalitet og hurtig</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Kvalitet.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Vælg en anden værdi, for at ændre størrelse.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Punkter</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Top:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Venstre:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Bund:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Højre:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Markeringen skal være mindre end rammen.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Markeringen skal være større end 10x10 pixel.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Vandret</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Lodret</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">90º mod uret</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">90º med uret</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Reducér rammerate</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Faktor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Antal:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Rammetid:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Tilpas ikke</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Læg til forrige ramme</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Læg til resterende rammer</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Reducér hele projektet.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Uden flueben vælges et antal sammenhængende&#x0d;rammer, der er større end fjernfaktoren.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Fjerner {0} ramme(r) efter hver {1} ramme(r), uden at tælle de fjernede.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Vælg rammer for at bruge funktionen (eller sæt flueben ved hele projektet).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">De valgte rammer skal hænge sammen uden mellemrum.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Det valgte antal rammer skal være større end fjernfaktoren.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Fjern duplikater</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Lighed (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Fjern rammer:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Fjern første</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Fjern sidste</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Rammetid:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Justér ikke</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Brug gennemsnit</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Brug sum</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Analyserer rammerne, og fjerner dem der er mindst {0} % ens med nærmeste nabo.&#x0d;Du kan vælge at tilpasse rammetiden.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Indstillinger</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignorér første:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Fra:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Slutningen</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Starten</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Find rammer der er mindst {0} % identiske med startrammen og slet alle efterfølgende.&#x0d;Du kan evt. ignorere indledende rammer, og sammenligne fra starten eller slutningen.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Antal ignorerede rammer, skal være mindre end det samlede rammeantal.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Glat gentagelse kan ikke oprettes med de valgte indstillinger.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Du har allerede en glat gentagelse med disse indstillinger.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Skrift</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Type:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Stil:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Vægt:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Str:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Farve:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Baggrundsfarve:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Omkreds</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Tykkelse:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Placering</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Lodret:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Vandret:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Justering:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Dekoration:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Tastetryk</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Taster</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Opdeler</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Redigér tasteanslag</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignorér Ctrl, Alt, Skift og Windows tasterne når de bruges alene.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ignorerer f.eks. \"CTRL\", men viser \"CTRL + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignorér simulerede anslag.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Optag kun brugeranslag.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Udvid anslagenes varighed</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Vis tidligere.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Med (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Optagelsen har ingen anslag.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Tastetryk</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Rammenummer</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Genkendte taster</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Fjern tastetryk</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Tilføj tastetryk:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Små bogstaver.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Tillad indsætning af enkelte små bogstaver.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Tilstand</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Pen</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Viskelæder</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Vælg</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Slet</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Bredde:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Højde:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Tip:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rektangel</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Andet:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Fremhævning</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Pas til kurve</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Der er ingen tegninger.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Vælg mindst en ramme til tegningen.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Indsæt</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Figur</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radius:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Streger:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Bestemmer stregernes størrelse og mellemrum.&#x0d;Brug flere størrelser til en mere detaljeret linie.&#x0d;Standard \"1 0\" eller tom tegner en ubrudt linie.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Nulstil rotation</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Fjern</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Fyld</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Klik</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Venstreklik:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Midterklik:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Højreklik:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Projektet indeholder ingen museklik.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Billede</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Fil:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Ikke valgt</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Transparens:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Vælg billede</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Vælg et billede.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Vælg mindst en ramme der skal vandmærkes.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Udseende</s:String>\n    <s:String x:Key=\"S.Border.Info\">Negative værdier udvider billedet, og anvendes på alle rammer.&#x0d;Positive værdier anvendes kun på valgte rammer.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Farve:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Baggrund:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Retning:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Størrelse:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Dybde:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelér</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Slør</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Mørkne</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Lysne</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Pixelering</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Pixelstr:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Niveau:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Niveau:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Niveau:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Beregn gennemsnitsfarve for hver pixelblok.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Anvend uden for markering.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Stil</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Markér det område der skal pixeleres.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Markér det område der ikke skal pixeleres.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Intet valgt. Markér det område der skal pixeleres.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Type</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Bjælke</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Præcision:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutter</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekunder</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisekunder</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Procent</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Rammenummer</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Aktuel dato/tid</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Tilpasset</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Vis total.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Format:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = millisekunder</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = sekunder</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutter</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = procent</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = rammenummer</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Totaler:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Eksempler:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Du kan bruge dato/tidsformat fra .Net Framework.&#x0d;Link herunder viser specifikationer.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standardformats</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Tilpassede formater</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Tæl fra:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Start tælling fra dette valgte nummer.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientering:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Ny forsinkelse</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Metode:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Overskriv (i ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Forøg/formindsk (i ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Skalér (i %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Ny værdi</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimum 10 ms pr. ramme.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Tilpas værdi</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Værdi</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Denne værdi erstatter varigheden af alle valgte rammer. Værdien bør være mellem 10ms og 25.500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Værdien øger/mindsker varigheden af hver enkelt valgt ramme.&#x0d;Du kan vælge en værdi mellem -10000ms og 10000ms, men varigheden af de enkelt rammer vil være mellem 10ms og 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Tilpas længde (forsinkelse) af hver valgt ramme med denne procent.&#x0d;Du kan vælge fra 1% til 1000%, men resultatet begrænses til mellem 10ms og 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">\"Mal\" dele af rammen der ikke bevares&#x0d;konstante gennem hele animationen.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Overgangslængde</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Forsinkelse</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Udton til...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Næste ramme</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">En farve</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Farve</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Overgangen anvendes mellem valgte ramme og den næste.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Filtype</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Resultatets filtype.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Eksportindstilling med alle de aktuelt viste indstillinger.&#x0d;Tilpas dine eksportindstillinger med ikonerne herunder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Animeret billede</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Rammer</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Andet</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animeret Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web billede</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime filformat</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web film</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Projekt</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif projekt</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop fil</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Profiler:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Standard</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Ny profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Gem aktuelle indstillinger til denne profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Redigér profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Slet aktuel profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Gendan profilens standard.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Slet profil</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Vil du slette profilen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Handlingen kan ikke fortrydes.&#x0d;&#x0d;Vil du slette nu?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Nulstil profil</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Vil du nulstille profilen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Handlingen kan ikke fortrydes.&#x0d;&#x0d;Vil du nulstille nu?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kodning</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Kodning og farver</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Resultatets kodningsmetode.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Indbygget.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">System</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Systemets metode.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Ekstern metode, lavet af FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Ekstern metode, lavet af Gifski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Indstillinger</s:String>\n    \n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Brug avanceret tilstand.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Sæt selv parametrene for kodningen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parametre:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Liste med FFmpeg parametre.&#x0d;&#x0d;Specielle parametre:&#x0d;{I} = Kildesti (rammerne).&#x0d;{O} = Resultatsti (resultatfilen).&#x0d;{W} = Rammebredden.&#x0d;{H} = Rammehøjden.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Tilføj \"-pass 2\" for at bruge to trin.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Vis</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Vis anvendte parametre.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codec ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filter ?</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gifindstillinger</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Farvereducering.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Meget pålidelig. Langsom, men god til mange farver.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">God til færre farver. Hurtig, men kan være unøjagtig.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Dårligere og langsommere end Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Gråskala</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Gråskala og meget hurtig.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Mest brugte farver</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Bruger rammernes oftest anvendte farver.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Samplefaktor:&#x0d;Værdien 1 er langsom, men vil producere et bedre resultat.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Kvalitet:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Farver:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maks. antal farver (pr. ramme).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Brug generel farvetabel.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Kan reducere resultatets kvalitet/størrelse.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Bedst</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Hurtigst</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Kod endnu hurtigere.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Kan reducere kvaliteten.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Gentag:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gentag gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Gentag evigt</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">gange</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Aktivér transparens.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Aktiverer fuld gennemsigtig baggrund.&#x0d;Eventuel Chroma key ignoreres.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Vælg transparensfarve.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">En valgt farve konverteres til gennemsigtighed i resultatfilen.&#x0d;Ellers vil alle gennemsigtige farver (Alpha = 0%) være uændrede.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Genkend uændrede pixel</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Genkender uændrede pixel fra ramme til ramme,&#x0d;og eksporterer kun de nødvendige til resultatet.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Erstat med Chroma key.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Denne Chroma key erstatter uændrede pixel,&#x0d;og reducerer farveantallet i hver ramme.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Simulér:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayerfaktor:</s:String>\n    \n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Indstillinger</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Forudsig:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Ikke</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Under</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Op</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Gennemsnit</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Blandet</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Gentag Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Genkend uændrede pixel.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Gør uændrede pixel gennemsigtige.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Profil:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Ingen</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Standard</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Billede</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Foto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Tegning</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Ikon</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Tabsfri.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Tilstand:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Avanceret</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Indstil kodningens parametre manuelt:&#x0d;Normal: Anvend brugerfladen.&#x0d;Avanceret: Angiv tekstparametre.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">Videokoder der konverterer&#x0d;de rå pixel til en videofil.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Profil:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Ingen</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Meget langsom</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Langsommere</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Langsom</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Mellem</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Hurtig</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Hurtigere</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Endnu hurtigere</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Meget hurtig</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Hurtigst</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Kvalitet</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanceret</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Fart</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Standard</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Tabsfri</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Tabsfri (høj ydelse)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Høj ydelse</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Høj kvalitet</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray disk</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Lav ventetid</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Lav ventetid (høj ydelse)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Lav ventetid (høj kvalitet)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Hastighed i forhold til komprimering.&#x0d;Lav hastighed, bedre komprimering &#x0d;(kvalitet i forhold til filstørrelse).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardware acc:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Fra</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Til</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatisk</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Kontrollerer brug af dedikeret grafikkort.&#x0d;Fra: Anvendes ikke.&#x0d;Til: Anvendes, med mulighed for speciel kodning.&#x0d;Auto: Anvendes, hvis muligt, med automatisk kodning.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixelformat:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatisk</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsynk:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Videosynk metode.&#x0d;Auto: 1 eller 2 afhængigt af mikserens formåen.&#x0d;Passér: Rammer med rammetid videregives til kodning.&#x0d;Konstant: Rammer duplikeres og videregives med den valgte rammetid.&#x0d;Variabel: Rammer m. rammetid videregives eller droppes, for at undgå ens rammetider.&#x0d;Drop: Fjerner rammetider, og lader kodningen beregne nye.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passér</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Konstant</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Variabel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Rammerate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Tilpasset</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Trin:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Konstant ratefaktor.&#x0d;Rate og kvalitetsindstilling.&#x0d;Udfyldes efter behov.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Kvalitet:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Lavere værdi, bedre kvalitet.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Video bitrate.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitratevalg:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Konstant</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variabel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Min. rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimal tolerance.&#x0d;Passer bedst til CBR mode.&#x0d;Brug nul eller tom &#x0d;for at udelade funktionen.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Maks. rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maksimal tolerance.&#x0d;Kræver at bufferen er sat.&#x0d;Brug nul eller tom &#x0d;for at udelade funktionen.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Buffer:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Bufferstørrelse.&#x0d;Kræver at bufferen er sat.&#x0d;Brug nul eller tom &#x0d;for at udelade funktionen.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zip billederne.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Eksporterer billederne som en zipfil.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Komprimér billedet.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Komprimér billedet med RLE algoritme.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Gem tidsdata.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Eksportér både rammer og rammetid.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Eksportvalg</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Delvis eksport.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Gem til valgt mappe.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Overskriv?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Advar</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Advarer om at filnavnet allerede findes.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Spørg</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Spørger om du vil overskrive.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Tillad</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Overskriver direkte.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Gem projekt (samme mappe/filnavn).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Upload filen (beta).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Kopiér.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Fil</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Kopierer resultatet til udklipholder.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Mappesti</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Kopierer resultatmappens placering til udklipsholder.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Filsti</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Kopierer resultatfilens placering til udklipsholder.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Kopierer link til udklipsholder.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Kør efterfølgende kommando.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Skriv kommando der udføres efter kodningen&#x0d;Flere kommandoer skrives på separate linier&#x0d;Makroer:&#x0d;{p} = Resultatfilens placering.&#x0d;{f} = Resultatmappens placering.&#x0d;{u} = Link til filen.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Delvis eksport</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Metode:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Vælg eksportmetode.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Udtryk</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Vælg rammer med et simpelt udtryk.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Rammeinterval</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Vælg er rammeinterval.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Tidsinterval</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Vælg start og sluttid.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Markering</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Markér rammer på tidslinien.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Vælg rammer.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 valgt ramme.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} valgte rammer.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Fra:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Til:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Udtryk:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Rammenumre adskilt med komma.&#x0d;Rammeinterval adskilt med minus.&#x0d;F.eks: 1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Fil</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Destinationsmappe.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Vælg destinationsmappe</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Vælg placering</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Filformat</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Filnavn.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Forøg filnummer</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Formindsk filnummer</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Filnavnet findes allerede</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Gem til udklipsholder.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Vælg hvor filen skal gemmes (mappe, udklipsholder,upload).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Du har ikke valgt filtype.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Husk parametre i avanceret tilstand..</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Parametrene {I} (kilde) og/eller {O} (resultat) mangler.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Skriv i tekstfeltet, for at udføre efterfølgende kommando.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Du skal mindst vælge en ramme.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">Udtrykket til delvis eksport er ugyldigt.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Ingen valgt upload vært. Vælg en destination.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Den valgte tjeneste er ikke godkendt. Gå til Indstillinger > Værter og hent godkendelse.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Du kan ikke kopiere linket, da du ikke har valgt at uploade filen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Du skal vælge en destinationsmappe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Destinationsmappen findes ikke.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Destinationsmappen er ugyldig. Vælg en anden.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Vælg filnavn</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Resultatfilens navn er ugyldigt. Vælg et gyldigt.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Filnavnet findes allerede. Overskriv eller vælg et andet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Projektnavnet findes allerede. Overskriv eller vælg et andet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Handlingen blev annulleret.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Vælg en værtsprofil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Tjenesten har begrænsninger.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Tilføj ny profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Redigér profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Vis profilens historik.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Fjern profil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Vælg profil</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Vælg en fra listen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Ingen profiler til dette format</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Tilføj profil med ikonet herunder.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Slet profil</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Vil du slette denne profil?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Handlingen kan ikke fortrydes.&#x0d;&#x0d;Vil du slette?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Eksporter rammer</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Vil du eksportere rammerne?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Dette eksporterer {0} rammer til valgte mappe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Overskriv</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Vil du overskrive?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Filen '{0}' findes allerede.\\r\\nVil du erstatte den?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Vil du overskrive?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">En eller flere filer findes allerede.\\r\\nVil du erstatte dem?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Vis kommando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Kommando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Kildesti</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Resultatsti</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Kritik</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Send</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Vis</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Send kritik</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Titel *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Besked</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Oplever du en fejl, så giv en detaljeret beskrivelse af hvordan den opstod.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Type</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Forslag</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problem/fejl</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Din mail (valgfrit)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Giv dit feedback en titel.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Du skal skrive en besked.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Angiv din mailadresse hvis du ønsker svar.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Sender. Vinduet lukker om et øjeblik.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Vedhæftning (valgfrit, maks. 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Vedhæft</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Fjern alle vedhæftninger</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Jeg forstår Engelsk</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">og Portugisisk (Brasiliansk og Europæisk).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Du sender dette, og alle vedhæftninger.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Problemer</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Mangler der et vindue?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Mangler der et vindue (udenfor skærmen),&#x0d;så brug mulighederne nedenfor, til at rette placeringen.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Vinduernes aktuelle placering:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Vinduernes placering ved næste start:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Flyt alle vinduer til hovedskærm.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Nulstil alle vinduers startplacering.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Kursiv</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Skrå</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Sort</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Fed</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Federe</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Sortere</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Fedest</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Lettere</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Tung</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Let</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regulær</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semifed</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Tynd</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra sort</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra fed</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra let</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Top</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Midt</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Bund</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Stræk</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Venstre</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Midt</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Højre</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Vandret</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Lodret</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Venstre</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Højre</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Centrér</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Fordel</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Ingen</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Understreg</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Overstreg</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Toplinie</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Grundlinie</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.de.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\r\n                    xml:space=\"preserve\">\r\n    \r\n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;-->\r\n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\r\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\r\n    \r\n    <!--General-->\r\n    <s:String x:Key=\"S.Ok\">OK</s:String>\r\n    <s:String x:Key=\"S.Back\">Zurück</s:String>\r\n    <s:String x:Key=\"S.Cancel\">Abbrechen</s:String>\r\n    <s:String x:Key=\"S.Yes\">Ja</s:String>\r\n    <s:String x:Key=\"S.No\">Nein</s:String>\r\n    <s:String x:Key=\"S.Add\">Hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Edit\">Bearbeiten</s:String>\r\n    <s:String x:Key=\"S.Id\">ID</s:String>\r\n    <s:String x:Key=\"S.Title\">Titel</s:String>\r\n    <s:String x:Key=\"S.Description\">Beschreibung</s:String>\r\n    <s:String x:Key=\"S.SelectColor\">Hier klicken, um Farbe auszuwählen.</s:String>\r\n    <s:String x:Key=\"S.Documentation\">Hier klicken, um Dokumentation zu öffnen.</s:String>\r\n    <s:String x:Key=\"S.Suppress\">Schließen</s:String>\r\n    <s:String x:Key=\"S.Preview\">Vorschau</s:String>\r\n    <s:String x:Key=\"S.Size\">Abmessungen</s:String>\r\n    <s:String x:Key=\"S.Background\">Hintergrund:</s:String>\r\n    <s:String x:Key=\"S.Color\">Farbe:</s:String>\r\n    <s:String x:Key=\"S.Delay\">Verzögerung</s:String>\r\n    <s:String x:Key=\"S.DelayMs\">Verzögern um:</s:String>\r\n    <s:String x:Key=\"S.ValueMs\">Wert:</s:String>\r\n    <s:String x:Key=\"S.ScaleValue\">Skalierung:</s:String>\r\n    <s:String x:Key=\"S.Margin\">Seitenrand:</s:String>\r\n    <s:String x:Key=\"S.Padding\">Innenabstand:</s:String>\r\n    <s:String x:Key=\"S.MinHeight\">Minimale Höhe:</s:String>\r\n    <s:String x:Key=\"S.AndOr\">und/oder</s:String>\r\n    \r\n    <!--Warnings-->\r\n    <s:String x:Key=\"S.Crash\">Ach nee, das Programm ist abgestürzt! :(</s:String>\r\n    <s:String x:Key=\"S.Required\">Pflichtfeld</s:String>\r\n    <s:String x:Key=\"S.Warning.Net.Title\">Fehlende Abhängigkeit</s:String>\r\n    <s:String x:Key=\"S.Warning.Net.Header\">.NET Framework 4.8 ist nicht verfügbar</s:String>\r\n    <s:String x:Key=\"S.Warning.Net.Message\">Um dieses Programm zu verwenden, müssen Sie .NET Framework in der Version 4.8 installieren.&#10;Wollen Sie zur Download-Seite gehen?</s:String>\r\n    <s:String x:Key=\"S.Warning.Single.Title\">Nur eine Instanz zulässig</s:String>\r\n    <s:String x:Key=\"S.Warning.Single.Header\">Die App wird bereits ausgeführt</s:String>\r\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif wird bereits ausgeführt, aber anscheinend ist kein Fenster geöffnet. Bitte überprüfen Sie den Infobereich der Taskleiste, dort muss ein ScreenToGif-Symbol vorhanden sein.</s:String>\r\n\r\n    <s:String x:Key=\"S.SavingSettings.Title\">Einstellungen speichern</s:String>\r\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Möchten Sie versuchen, es erneut zu speichern?</s:String>\r\n    <s:String x:Key=\"S.SavingSettings.Message\">Scheinbar verfügt ScreenToGif nicht über genügend Rechte, um die Einstellungen auf der Festplatte zu speichern.&#10;&#10;Möchten Sie versuchen, mit Administratorrechten erneut zu speichern?</s:String>\r\n\r\n    <s:String x:Key=\"S.Exiting.Title\">ScreenToGif wird beendet</s:String>\r\n    <s:String x:Key=\"S.Exiting.Instruction\">Möchten Sie das Programm wirklich beenden?</s:String>\r\n    <s:String x:Key=\"S.Exiting.Message\">Alle Fenster werden geschlossen und das Programmsymbol wird aus dem Infobereich der Taskleiste entfernt.</s:String>\r\n\r\n    <!--Warnings • Graphics engine-->\r\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Grafikkarte wechseln</s:String>\r\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Auf die richtige Grafikkarte umschalten, um den ausgewählten Bildschirm erfassen zu können</s:String>\r\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Aufgrund einer Einschränkung in DirectX muss ScreenToGif die gleiche Grafikkarte verwenden wie der zu erfassende Bildschirm.</s:String>\r\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Wechseln Sie die für ScreenToGif eingestellte Grafikkarte, indem Sie Windows-Einstellungen ➜ „System” ➜ „Anzeige” ➜ „Grafikeinstellungen” öffnen, oder auf den folgenden Link klicken.</s:String>\r\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Wechseln Sie die Grafikkarte für ScreenToGif, indem Sie die Grafikeinstellungen Ihrer Grafikkarte öffnen.</s:String>\r\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Windows-Einstellungen öffnen</s:String>\r\n    \r\n    <!--Keys-->\r\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\r\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\r\n    <s:String x:Key=\"S.Keys.Space\">Leertaste</s:String>\r\n\r\n    <!--Mouse-->\r\n    <s:String x:Key=\"S.Mouse.Right\">Rechtsklick</s:String>\r\n    \r\n    <!--Tray icon-->\r\n    <s:String x:Key=\"S.NewRecording\">Neue Bildschirmaufnahme</s:String>\r\n    <s:String x:Key=\"S.NewWebcamRecording\">Neue Webcam-Aufnahme</s:String>\r\n    <s:String x:Key=\"S.NewBoardRecording\">Neue Handzeichnung</s:String>\r\n    <s:String x:Key=\"S.Exit\">Beenden</s:String>\r\n    \r\n    <!--Commands-->\r\n    <s:String x:Key=\"S.Command.NewRecording\">Neue Bildschirmaufnahme</s:String>\r\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Neue Webcam-Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Neue Handzeichnung</s:String>\r\n    <s:String x:Key=\"S.Command.NewAnimation\">Neue Animation</s:String>\r\n    <s:String x:Key=\"S.Command.InsertRecording\">Bildschirmaufnahme einfügen</s:String>\r\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Webcam-Aufnahme einfügen</s:String>\r\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Handzeichnung einfügen</s:String>\r\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Mediendateien einfügen (Bilder und Videos)</s:String>\r\n    <s:String x:Key=\"S.Command.SaveAs\">Speichern unter …</s:String>\r\n    <s:String x:Key=\"S.Command.Load\">Dateien öffnen (Bilder, Videos und Projekte)</s:String>\r\n    <s:String x:Key=\"S.Command.LoadRecent\">Kürzlich erstellte Projekte öffnen</s:String>\r\n    <s:String x:Key=\"S.Command.DiscardProject\">Aktuelles Projekt verwerfen</s:String>\r\n    <s:String x:Key=\"S.Command.OverrideDelay\">Frame-Dauer überschreiben</s:String>\r\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Frame-Dauer erhöhen/verringern</s:String>\r\n    <s:String x:Key=\"S.Command.ScaleDelay\">Frame-Dauer skalieren</s:String>\r\n    <s:String x:Key=\"S.Command.Zoom100\">Zoom auf 100 % setzen</s:String>\r\n    <s:String x:Key=\"S.Command.SizeToContent\">Fenstergröße an Framegröße anpassen</s:String>\r\n    <s:String x:Key=\"S.Command.FitImage\">Grafik an vorhandene Fenstergröße anpassen</s:String>\r\n    <s:String x:Key=\"S.Command.FirstFrame\">Ersten Frame auswählen</s:String>\r\n    <s:String x:Key=\"S.Command.PreviousFrame\">Vorherigen Frame auswählen</s:String>\r\n    <s:String x:Key=\"S.Command.Play\">Animation abspielen</s:String>\r\n    <s:String x:Key=\"S.Command.NextFrame\">Nächsten Frame auswählen</s:String>\r\n    <s:String x:Key=\"S.Command.LastFrame\">Letzten Frame auswählen</s:String>\r\n    <s:String x:Key=\"S.Command.Undo\">Widerrufen</s:String>\r\n    <s:String x:Key=\"S.Command.Redo\">Wiederherstellen</s:String>\r\n    <s:String x:Key=\"S.Command.Reset\">Alle Änderungen im Projekt widerrufen</s:String>\r\n    <s:String x:Key=\"S.Command.Copy\">Ausgewählte Frames kopieren und in Zwischenablage speichern</s:String>\r\n    <s:String x:Key=\"S.Command.Cut\">Ausgewählte Frames ausschneiden und in Zwischenablage speichern</s:String>\r\n    <s:String x:Key=\"S.Command.Paste\">Frames aus Zwischenablage hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.Delete\">Alle ausgewählten Frames löschen</s:String>\r\n    <s:String x:Key=\"S.Command.DeletePrevious\">Alle vorherigen Frames löschen</s:String>\r\n    <s:String x:Key=\"S.Command.DeleteNext\">Alle nachfolgenden Frames löschen</s:String>\r\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Duplikate entfernen</s:String>\r\n    <s:String x:Key=\"S.Command.Reduce\">Bildwiederholrate reduzieren</s:String>\r\n    <s:String x:Key=\"S.Command.SmoothLoop\">Eine glatte Schleife erstellen</s:String>\r\n    <s:String x:Key=\"S.Command.Reverse\">Animation rückwärts abspielen</s:String>\r\n    <s:String x:Key=\"S.Command.Yoyo\">Animation vorwärts bis zum Ende und dann rückwärts abspielen</s:String>\r\n    <s:String x:Key=\"S.Command.MoveLeft\">Ausgewählte Frames nach links verschieben</s:String>\r\n    <s:String x:Key=\"S.Command.MoveRight\">Ausgewählte Frames nach rechts verschieben</s:String>\r\n    <s:String x:Key=\"S.Command.Resize\">Größe aller Frames ändern</s:String>\r\n    <s:String x:Key=\"S.Command.Crop\">Alle Frames beschneiden</s:String>\r\n    <s:String x:Key=\"S.Command.FlipRotate\">Frames kippen oder drehen</s:String>\r\n    <s:String x:Key=\"S.Command.Caption\">Bildunterschrift hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.FreeText\">Frei schwebenden Text hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.TitleFrame\">Frame mit Titel hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.KeyStrokes\">Tastenanschläge während der Aufnahme hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.FreeDrawing\">Freie Zeichnungen erstellen</s:String>\r\n    <s:String x:Key=\"S.Command.Shapes\">Formen hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.MouseEvents\">Mausklicks</s:String>\r\n    <s:String x:Key=\"S.Command.Watermark\">Grafik auswählen und als Wasserzeichen hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.Border\">Rahmen hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.Shadow\">Schatten hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.Obfuscate\">Sensible Bildbereiche unkenntlich machen</s:String>\r\n    <s:String x:Key=\"S.Command.Cinemagraph\">Ausgewählte Bereiche in Animation als Bewegung festhalten</s:String>\r\n    <s:String x:Key=\"S.Command.Progress\">Fortschrittsbalken oder Text mit Wiedergabedetails</s:String>\r\n    <s:String x:Key=\"S.Command.SelectAll\">Alle Frames auswählen</s:String>\r\n    <s:String x:Key=\"S.Command.GoTo\">Zu Frame durch Index-Eingabe navigieren</s:String>\r\n    <s:String x:Key=\"S.Command.InverseSelection\">Frame-Auswahl umkehren</s:String>\r\n    <s:String x:Key=\"S.Command.Unselect\">Alle Frames abwählen</s:String>\r\n    <s:String x:Key=\"S.Command.Fade\">Überblendung</s:String>\r\n    <s:String x:Key=\"S.Command.Slide\">Schwenken</s:String>\r\n    <s:String x:Key=\"S.Command.ClearAll\">Alle beendeten Umwandlungen entfernen</s:String>\r\n    <s:String x:Key=\"S.Command.MoveUp\">Nach oben bewegen</s:String>\r\n    <s:String x:Key=\"S.Command.MoveDown\">Nach unten bewegen</s:String>\r\n    <s:String x:Key=\"S.Command.Add\">Hinzufügen</s:String>\r\n    <s:String x:Key=\"S.Command.Open\">Öffnen</s:String>\r\n    <s:String x:Key=\"S.Command.Edit\">Ausgewähltes Element bearbeiten</s:String>\r\n    <s:String x:Key=\"S.Command.Save\">Ausgewähltes Element speichern</s:String>\r\n    <s:String x:Key=\"S.Command.Remove\">Ausgewähltes Element entfernen</s:String>\r\n    <s:String x:Key=\"S.Command.ViewHistory\">Verlauf anzeigen</s:String>\r\n    \r\n    <!--StartUp-->\r\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif • Start</s:String>\r\n    <s:String x:Key=\"S.StartUp.Recorder\">Rekorder</s:String>\r\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Startet die Bildschirmaufnahme, mit dem Sie Ihren Bildschirm aufnehmen können.</s:String>\r\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\r\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Startet die Webcam-Aufnahme, um Videos Ihrer Webcam aufzeichnen zu können.</s:String>\r\n    <s:String x:Key=\"S.StartUp.Board\">Handzeichnung</s:String>\r\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Startet die Aufzeichnung, um Ihre Handzeichnungen aufnehmen zu können.</s:String>\r\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\r\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Öffnet den Editor, mit dem Sie Ihre Aufnahmen bearbeiten können.</s:String>\r\n    <s:String x:Key=\"S.StartUp.Options\">Einstellungen</s:String>\r\n    <s:String x:Key=\"S.StartUp.NewRelease\">Neue Version verfügbar</s:String>\r\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Lädt die neueste Version von ScreenToGif herunter.</s:String>\r\n\r\n    <!--Updater-->\r\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif • Aktualisierungen</s:String>\r\n    <s:String x:Key=\"S.Updater.Header\">Ein neue Version ist verfügbar!</s:String>\r\n    <s:String x:Key=\"S.Updater.NewRelease\">Neue Version!</s:String>\r\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Neue Version {0} kann heruntergeladen werden! Für weitere Details bitte hier klicken.</s:String>\r\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Es scheint, dass Ihr System nicht mehr unterstützt wird oder dass sich etwas am Aktualisierungssystem geändert hat. Versuchen Sie, die Aktualisierung manuell von der Website herunterzuladen.</s:String>\r\n    <s:String x:Key=\"S.Updater.Version\">Version</s:String>\r\n    <s:String x:Key=\"S.Updater.Portable\">Portabel</s:String>\r\n    <s:String x:Key=\"S.Updater.Installer\">Installation</s:String>\r\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Was ist neu?</s:String>\r\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Fehlerbehebungen:</s:String>\r\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Eine neue Version steht für Sie zum Herunterladen bereit.&#x0d;Möchten Sie jetzt Ihren Browser öffnen, um sie herunterzuladen?</s:String>\r\n    <s:String x:Key=\"S.Updater.RunAfter\">Die Anwendung nach der Aktualisierung ausführen.</s:String>\r\n    <s:String x:Key=\"S.Updater.Download\">Herunterladen</s:String>\r\n    <s:String x:Key=\"S.Updater.Install\">Installieren</s:String>\r\n    <s:String x:Key=\"S.Updater.InstallManually\">Manuell installieren</s:String>\r\n    <s:String x:Key=\"S.Updater.Downloading\">Wird heruntergeladen …</s:String>\r\n    <s:String x:Key=\"S.Updater.Warning.Show\">Das Anzeigen der Downloaddetails ist fehlgeschlagen.</s:String>\r\n    <s:String x:Key=\"S.Updater.Warning.Download\">Das Herunterladen der Aktualisierung ist fehlgeschlagen.</s:String>\r\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Sie müssen warten, bis alle Umwandlungen abgeschlossen sind, bevor Sie die Aktualisierung durchführen.</s:String>\r\n    \r\n    <!--Downloader-->\r\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif • Downloader</s:String>\r\n    <s:String x:Key=\"S.Downloader.Header\">Downloader</s:String>\r\n    <s:String x:Key=\"S.Downloader.Size\">{0} von {1}</s:String>\r\n    \r\n    <!--Options-->\r\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif • Einstellungen</s:String>\r\n    <s:String x:Key=\"S.Options.App\">Allgemein</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder\">Rekorder</s:String>\r\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks\">Automatisierte Aufgaben</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts\">Tastenkürzel</s:String>\r\n    <s:String x:Key=\"S.Options.Language\">Sprache</s:String>\r\n    <s:String x:Key=\"S.Options.Storage\">Temporäre Dateien</s:String>\r\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\r\n    <s:String x:Key=\"S.Options.Upload\">Cloud-Speicher</s:String>\r\n    <s:String x:Key=\"S.Options.Donate\">Spenden</s:String>\r\n    <s:String x:Key=\"S.Options.About\">Über</s:String>\r\n    <s:String x:Key=\"S.Options.Other\">Sonstiges</s:String>\r\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Fehlendes Tastenkürzel für das Verfolgen des Mauszeigers</s:String>\r\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Um die Option Mauszeiger-Verfolgung zu nutzen, müssen Sie zuerst ein Tastenkürzel bestimmen, dass Sie zum Umschalten verwenden können.</s:String>\r\n    \r\n    <!--Options • Application-->\r\n    <s:String x:Key=\"S.Options.App.Startup\">Starten der Anwendung</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Manuell&#10;starten</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Die Anwendung wird nur dann ausgeführt, wenn Sie diese manuell starten.</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Zusammen mit&#10;Windows starten</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Die Anwendung wird nach dem Start von Windows ausgeführt.</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Der Wechsel zwischen den Startmodi ist fehlgeschlagen.</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Nur eine einzelne&#10;Instanz zulassen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Sie können die Anwendung einmal pro Benutzer und ausführbarer&#10;Datei ausführen, was bedeutet, dass verschiedene Benutzer- oder&#10;ausführbare Instanzen gleichzeitig genutzt werden können. Beim&#10;Versuch, die Anwendung erneut auszuführen, versucht die zweite&#10;Instanz, den Fokus an die erste Instanz zu übergeben und sich&#10;selbst zu beenden.</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Mehrere&#10;Instanzen&#10;zulassen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Sie können die Anwendung ohne Einschränkung mehrmals gleichzeitig ausführen.</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Programm minimiert starten</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Programmsymbol bleibt sichtbar, solange diese Option aktiv ist)</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Starten mit:</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Auswahlfenster</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Bildschirm aufnehmen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webcam-Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Handzeichnung aufnehmen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Editor</s:String>\r\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Bestimmt, wie das Programm startet.&#10;Wenn minimiert, wird das Programmsymbol im Infobereich sichtbar)</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme\">Programmlayout</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Farbschema:</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Sehr hell</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Hell</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Mittel</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Dunkel</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Sehr dunkel</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Vom System übernehmen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Benutzerdefiniert</s:String>\r\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Beispielfarben</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray\">Programmsymbol</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Programmsymbol im Infobereich der Taskleiste anzeigen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Anwendung geöffnet halten, auch wenn alle anderen Fenster geschlossen sind</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Nichts tun</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Fenster öffnen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Kein Fenster</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Alle Fenster minimieren/wiederherstellen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Alle Fenster minimieren</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Alle Fenster wiederherstellen</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Linksklick:</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Doppelklick:</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Mittelklick:</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Fenster:</s:String>\r\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">ansonsten:</s:String>\r\n    <s:String x:Key=\"S.Options.App.General\">Allgemein</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Behelfslösung für den Absturz von „Nicht genügend Speicherplatz …”</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimentell)</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Warnung vor dem Schließen des Programms über die Option „Beenden” ausgeben</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Hardware-Beschleunigung ausschalten</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Die Benutzeroberfläche wird im Software-Modus dargestellt)</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Nach aktualisierter Übersetzung suchen</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Aktualisierte Übersetzung wird automatisch heruntergeladen und installiert)</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Nach Programmupdates suchen</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Aktualisierungen nach dem Schließen der Anwendung automatisch installieren</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Das Herunterladen der portablen Version erzwingen</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Erfordert eine manuelle Installation durch&#10;Entpacken und Ersetzen der ausführbaren Datei)</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Erzwingen, dass die Aktualisierung mit erhöhten Privilegien ausgeführt wird</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Benachrichtigen, bevor die Installation beginnt</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">Aktualisierungen in gebührenpflichtigen Netzen herunterladen.</s:String>\r\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(Ermöglicht das Herunterladen von Updates in gebührenpflichtigen Netzen)</s:String>\r\n\r\n    <!--Options • Recorder-->\r\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Benutzeroberfläche</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Alt</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Neu</s:String>\r\n    \r\n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Häufigkeit der Erfassung</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manuell</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Jedes Einzelbild wird von Ihnen manuell erfasst, indem Sie die Aufnahmetaste oder ein entsprechendes Tastenkürzel drücken.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Benutzerinteraktion</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Einzelbilder (Frames) werden jedes Mal erfasst, wenn Sie etwas anklicken oder eingeben.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">pro Sekunde</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Die Einzelbilder (Frames) werden auf der Grundlage&#10;„pro Sekunde” erfasst, wobei der Nennwert der auf&#10;dem Rekorderbildschirm eingestellten Einzelbildrate&#10;angegeben wird.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">pro Minute</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Die Einzelbilder (Frames) werden auf der Grundlage „pro Minute”&#10;(Zeitraffer) erfasst, wobei der auf dem Rekorderbildschirm&#10;eingestellte Nennwert der Bildwiederholrate zugrunde gelegt wird.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">pro Stunde</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Die Einzelbilder (Frames) werden auf der Grundlage „pro Stunde”&#10;(Zeitraffer) erfasst, wobei der auf dem Rekorderbildschirm&#10;eingestellte Nennwert der Bildwiederholrate zugrunde gelegt wird.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Wiedergabeverzögerung:</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">([ms] Jeder erfasste Frame wird auf diese Verzögerung eingestellt)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Auslöseverzögerung:</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">([ms] Jeder Frame wird mit dieser Zeitspanne vor dem Start erfasst)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Jedes Einzelbild (Frame) wird in einem Intervall von {0} aufgenommen.</s:String>\r\n    \r\n    <s:String x:Key=\"S.Options.Recorder.Mode\">Aufnahmemodus</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Alten Aufnahmemodus verwenden, der zwar langsam ist und bei Videospielen&#10;nicht immer funktioniert, aber ohne Zusatzmodule (Plug-ins) auskommt.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Desktop Duplication API verwenden, die schnell ist und Videospiele in Vollbild&#10;aufnimmt, aber SharpDx-Bibliotheken und Windows 8 oder höher voraussetzt.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.File\">In Datei&#10;speichern</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Jeder erfasste Frame wird direkt auf Festplatte gespeichert.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Zwischen-&#10;speicher</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Jeder erfasste Frame wird zuerst als Pixelreihe im Cache abgelegt (kann zuvor komprimiert werden).</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Komprimierung:</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Langsam, aber in guter Qualität)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Schnell</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Schnell, aber in schlechter Qualität)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Keine Komprimierung </s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Keine Komprimierung während der Aufnahme vornehmen)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Cache-Größe (in MB):</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(Sobald diese Menge erreicht ist, werden alle Daten auf Festplatte geschrieben)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Aufnahme von schwarzen Vollbildern verhindern</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Verhindert, dass BitBlt mit einem Speichercache fälschlicherweise zu Einzelbildern (Frames) führt, bei denen alle Pixel schwarz sind)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Mauszeiger mit aufnehmen</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Mauszeigerfarbe auswählen</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Feste Bildwiederholrate</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Konstante Verzögerung, die sich auch nicht mit der Aufzeichnungsverzögerung ändert)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Nur aufzeichnen, wenn sich etwas ändert</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Ein Einzelbild wird nur dann aufgenommen, wenn sich innerhalb des Aufnahmebereichs etwas verändert hat)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Verbessert die Erfassungsleistung bei einer Remote-Desktop-Verbindung</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Deaktiviert die mehrschichtige Fenstererfassung)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Speicherbereinigung während der Aufnahme erzwingen</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduziert die Speichernutzung während der Aufnahme, verringert aber die Leistung)</s:String>\r\n    \r\n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Hinweise</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Drittelregel</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Anklicken, um die Anzeige der Drittelregel-Richtlinie umzuschalten.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Fadenkreuz</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Anklicken, um die Anzeige der Fadenkreuz-Richtlinien umzuschalten.</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Die Richtlinien werden nur angezeigt, wenn der Rekorder angehalten oder gestoppt wird.</s:String>\r\n\r\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Titelleiste ausblenden (dünner Modus)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Bildschirmlupe aktivieren</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Aktiviert Bildschirmlupe während der Auswahl des Aufnahmebereichs)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Rand des Bildschirmausschnitts während der Auswahl animieren</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animieren im Stil der „marschierenden Ameisen”)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Verschieben der Auswahl ermöglichen</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Zeigt ein Griffelement in der Nähe der Ecke der Auswahl an,&#10;das ein Verschieben des Aufnahmebereichs ermöglicht)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Kompaktmodus</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Zeigt eine kleinere Version des Rekorder-Befehlsfelds)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Schaltfläche „Verwerfen” auch während der Aufnahme anzeigen</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normalerweise ist sie nur während einer Pause sichtbar)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Leistung der Bildschirmauswahl verbessern</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduziert die Verzögerung bei der Bildschirmauswahl, indem eine statische Ansicht des Bildschirms angezeigt wird)</s:String>\r\n    \r\n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Größe des zuletzt verwendeten Aufnahmebereichs speichern</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Position des zuletzt verwendeten Aufnahmebereichs speichern</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Countdown verwenden</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Wartezeit (in Sek.) bevor die Aufnahme gestartet wird)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Mauszeigerverfolgung aktivieren</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Der Aufnahmebereich wird aufgrund der Position des Mauszeigers neu ausgerichtet)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Sicherheitsabstand (in Pixel) bei Bewegungen des Aufnahmebereichs)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Zusätzlicher Sicherheitsabstand (in Pixel), falls die Aufnahme-Benutzeroberfläche unsichtbar wird)</s:String>\r\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Nachfragen, bevor die Aufnahme verworfen wird</s:String>\r\n\r\n    <!--Options • Editor-->\r\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Editor-Hintergrund</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Rastermustergröße:</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Sehr klein</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Klein</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Mittel</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Groß</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Sehr groß</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Ich liebe große Quadrate</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Ich bin blind</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Benutzerdefiniert</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Höhe:</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Breite:</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Übernehmen</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Grundfarbe</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">1. Farbe</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">2. Farbe</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Umwandlungen in einem separaten Fenster anzeigen</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Titelleiste erweitern</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Programm-Fenstergröße an Framegröße automatisch anpassen</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Framegröße an Programm-Fenstergröße automatisch anpassen</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Warnung vor dem Löschen von Frames ausgeben</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Warnung vor dem Verwerfen eines Projekts ausgeben</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Warnung vor dem Schließen des Editors ausgeben (falls Projekt nicht gespeichert)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Dreifach-Klick zur Textauswahl aktivieren</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Textkontur nur nach außen vergrößern</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Einzelbilder verwerfen (falls erforderlich)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Frame überspringen, wenn die Vorschau ihn nicht rechtzeitig anzeigen kann)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Frame überspringen, wenn die Vorschau ihn nicht rechtzeitig anzeigen kann.</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Begrenzt den Verlauf der Widerrufen-/Wiederherstellungsschritte</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Ältere Aktionen werden entfernt, wenn das Limit erreicht ist)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximale Anzahl der gespeicherten Aktionen)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Ausgabeordner entsprechend den Voreinstellungen synchronisieren</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Voreinstellungen verwenden den gleichen Ausgabepfad)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Dateinamen ebenfalls synchronisieren</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Voreinstellungen verwenden ebenfalls denselben Dateinamen)</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Nur zwischen den Voreinstellungen desselben Dateityps synchronisieren</s:String>\r\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Nur Voreinstellungen desselben Dateityps werden synchronisiert)</s:String>\r\n    \r\n    <!--Options • Tasks-->\r\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automatisierte Aufgaben</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.List\">Liste automatisierter Aufgaben</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Aufgabe</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Details</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Aktiviert</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Diese Aufgabe aktivieren</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">Aufgabe auswählen</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Eine vorgenannte Aufgabe auswählen</s:String>\r\n    <s:String x:Key=\"S.Options.Tasks.Info\">Aufgaben werden nacheinander von oben nach unten ausgeführt.&#10;Sie werden beim Öffnen des Editors gestartet.</s:String>\r\n  \r\n    <!--Options • Shortcuts-->\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Allgemein</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Bildschirmaufnahme:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Startet die Bildschirmaufnahme)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webcam-Aufnahme:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Startet die Webcam-Aufnahme)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Handzeichnung aufnehmen:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Startet die Aufzeichnung, mit dem Sie Ihre Handzeichnungen aufnehmen können)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Öffnet ein neues Editorfenster)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Einstellungen:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Öffnet die Einstellungen. Nur eine Instanz möglich)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Beenden:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Schließt alle Fenster und entfernt das Programmsymbol aus dem Infobereich der Taskleiste)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Rekorder</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Start/Pause:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Startet oder pausiert die Aufnahme. Wird verwendet, um Momentaufnahmen zu erstellen, wenn der Schnappschussmodus aktiviert ist)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stopp:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Stoppt die Aufnahme und öffnet den Editor)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Verwerfen:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Löscht die aktuelle Aufnahme, wenn sie unterbrochen wurde)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Mauszeiger-Verfolgung:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Schaltet das Nachziehen des Aufnahmebereichs gemäß der Mauszeiger-Position ein oder aus)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Mauszeiger-Verfolgung deaktivieren:</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Schaltet vorläufig das Nachziehen des Aufnahmebereichs ab, nur Zusatztasten sind hier erlaubt: Strg-, Umschalt-, Alt-, Windows-Taste)</s:String>\r\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Betätigen Sie eine Taste, damit Tastatureingabe im Fokus steht.&#x0a;Anschließend drücken Sie gewünschte Tastenkombination.&#x0a;Einige Tastenkombinationen sind nicht zulässig.</s:String>\r\n    \r\n    <!--Options • Language-->\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Sprache</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Automatische Erkennung</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Sprachdatei des Betriebssystems (falls verfügbar)</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Möchten Sie mein Programm übersetzen?</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">&#10;Lesen Sie bitte die Übersetzungsrichtlinien durch und laden den „Translator” herunter.</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Anschließend</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">hier klicken</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">, um Ihre Übersetzung zu testen.</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Fertige Übersetzung bitte an</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">nicke@outlook.com.br</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">senden.</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Hier klicken, um die Webseite mit Richtlinien zu öffnen.</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Öffnet die Importseite</s:String>\r\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Startet Ihr E-Mail-Programm</s:String>\r\n    \r\n    <!--Options • Storage-->\r\n    <s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Datenträger:</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} von {1} frei</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Erneut prüfen, wie viel Platz noch vorhanden ist.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Cache-Ordner leeren.&#10;Sie können dabei entscheiden, ob Sie aktuelle Projekte behalten möchten oder nicht.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Nicht genügend Speicherplatz auf dem gewählten Laufwerk vorhanden. Bitte Speicherplatz freigeben oder anderes Laufwerk verwenden.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Abrufen der Laufwerksdetails fehlgeschlagen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Keine Dateien</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} Datei</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} Dateien</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Keine Ordner</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} Ordner</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} Ordner</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} werden verwendet</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Paths\">Pfad</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Zwischenspeicher:</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Ordner für temporäre Dateien auswählen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Protokolle:</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Speicherort für Fehlerprotokolldateien auswählen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Ausgewählten Ordner durchsuchen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Settings\">Speicherort für Einstellungen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">Anwendungsdatenordner:</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Lokaler Programmordner:</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Nicht vorhanden</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Neue Konfigurationsdatei erstellen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Konfigurationsdatei löschen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Ordner öffnen, in dem Einstellungen gespeichert sind.&#x0a;Halten Sie die Strg-Taste während des Klicks gedrückt, falls möglich.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Reihenfolge für das Laden der Programmeinstellungen: Standard ➜ AppData ➜ Lokal&#x0d;&#x0a;• Gibt es keine Konfigurationsdatei im lokalen Programmordner, so wird im Ordner „AppData” gesucht.&#x0d;&#x0a;• Standard wird verwendet, falls keine Dateien mit Programmeinstellungen vorhanden sind.&#x0d;&#x0a;• Gibt es keine lokalen Einstellungen, so werden alle Einstellungen im Ordner „AppData” gespeichert.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Alle Dateien aus dem Zwischenspeicher löschen, sobald die Anwendung geschlossen wird</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Nachfragen, bevor alle Dateien aus dem Zwischenspeicher gelöscht werden</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Alte Projekte automatisch entfernen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Beim Öffnen des Editors werden alle Projekte gelöscht, die älter sind als der festgelegte Zeitraum.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(in Tagen. Jedes Projekt älter als diese Angabe wird beim Öffnen des Editors gelöscht)</s:String>\r\n    \r\n    <!--Options • Storage > Clear cache-->\r\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif • Zwischenspeicher leeren</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Möchten Sie den Cache-Ordner leeren?</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Wenn Sie eine Aufnahme erstellen oder etwas zur Bearbeitung öffnen, wird ein Projekt erstellt und im Cache-Ordner gespeichert.</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Möchten Sie diese Projekte aus dem Cache-Ordner entfernen?</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Neueste Projekte nicht entfernen</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Nur Projekte, die älter als {0} Tage sind und derzeit nicht genutzt werden, werden entfernt)</s:String>\r\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Alle Projekte, die derzeit nicht genutzt werden, werden entfernt)</s:String>\r\n    \r\n    <!--Options • Upload-->\r\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modus:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Deaktiviert</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manuell</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">System</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Verwendet System-Proxy)</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Benutzername:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Passwort:</s:String>\r\n\r\n    <s:String x:Key=\"S.Options.Upload.Presets\">Voreinstellungen hochladen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Dienst</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Titel</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Beschreibung</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Aktiviert</s:String>\r\n\r\n     <!--Options • Upload > Preset-->\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Upload-Dienst</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Einen Dienst auswählen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Wählen Sie oben einen Upload-Dienst aus.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Benutzerdefiniert</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Diese Voreinstellung aktivieren.</s:String>\r\n    \r\n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Details</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Name:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Beschreibung:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Modus:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonym</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Bestätigt</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorisierung</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Token abrufen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">OAuth-Token hier einfügen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Benutzername:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Passwort:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Bestätigen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Benutzername und Passwort werden nicht gespeichert.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Optionen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Direkte Links verwenden</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Sie müssen dieser Voreinstellung einen eindeutigen Namen geben.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Dieser Name wird bereits von einer anderen Upload-Voreinstellung verwendet.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Im Authentifizierungsmodus müssen Sie den Authentifizierungsvorgang abschließen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Sie müssen Ihren Benutzernamen und Ihr Passwort angeben, um diese App zu autorisieren.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Das Abrufen des Autorisierungstokens ist fehlgeschlagen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Um diese App zu autorisieren, müssen Sie das Autorisierungstoken bereitstellen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Autorisierung fehlgeschlagen. Prüfen Sie alle Einstellungen und versuchen Sie es in ein paar Sekunden erneut.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Laden der Albenliste fehlgeschlagen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Autorisierung abgeschlossen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Nicht autorisiert</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Zugriffsberechtigung endet in {0}.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Zugriffsberechtigung gültig bis {0}.</s:String>\r\n\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Links mit der GIFV-Erweiterung anstelle von GIF abrufen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">GIF-Dateien in ausgewähltes Album hochladen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Vor dem Hochladen fragen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Albenliste neu laden.</s:String>\r\n\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Standardeinstellungen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Nachfragen, die Details des Uploads auszufüllen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">URL-Typ:</s:String>\r\n    \r\n    <!--Options • Upload > Album-->\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Album wählen (optional)</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Wenn gewünscht, können Sie das Zielalbum auswählen:</s:String>\r\n    \r\n    <!--Options • Upload > Details-->\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Details hochladen (optional)</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Details hochladen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Titel:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Beschreibung:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Schlagwörter:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Schlagwörter durch Semikolon ( ; ) trennen</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Nur bei Zugriff über direkte Verbindung anzeigen</s:String>\r\n    \r\n    <!--Options • Upload > History-->\r\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Verlauf der hochgeladenen Daten</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Datum</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Voreinstellung</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Erfolgreich?</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Eintrag im Verlauf löschen.</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Geringe Qualität:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Link löschen:</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Möchten Sie den Eintrag im Verlauf wirklich löschen?</s:String>\r\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Diese Aktion kann nicht widerrufen werden.&#10;&#10;Möchten Sie den ausgewählten Eintrag im Verlauf wirklich löschen?</s:String>\r\n    \r\n    <!--Options • Extras-->\r\n    <s:String x:Key=\"S.Options.Extras.External\">Externe Anwendungen</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.Download\">Hier klicken, um herunterzuladen&#x0a;{0}</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Wird heruntergeladen …</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.Ready\">Heruntergeladen&#x0a;{0}</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Hier klicken, um die Datei-Eigenschaften zu öffnen.</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Über den Microsoft Store vertriebene Applikationen können keine anderen Programme herunterladen. Sie müssen sie manuell herunterladen.</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Speicherort für FFmpeg</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">FFmpeg-Programmpfad öffnen</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg ausführbar</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Programmpfad beinhaltet mindestens ein ungültiges Zeichen. Bitte wählen Sie korrekte Adresse aus.</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Speicherort für Gifski</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Gifski-Programmpfad öffnen</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski-Bibliothek</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Programmpfad beinhaltet mindestens ein ungültiges Zeichen. Bitte wählen Sie korrekte Adresse aus.</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg-Lizenz</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski-Lizenz</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx-Lizenz</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Ordner ist schreibgeschützt</s:String>\r\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Es ist nicht möglich, die heruntergeladenen Daten in dem Ordner zu speichern, da keine Schreibrechte vorhanden sind.&#10;&#10;Möchten Sie das Herunterladen mit Administratorrechten starten, um den Download zu beenden?</s:String>\r\n    \r\n    <!--Options • Donations-->\r\n    <s:String x:Key=\"S.Options.Donate.Donate\">Spenden</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">In US-$ spenden</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">In € spenden</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Öffnet PayPal-Webseite. Gewählte Währung: US-Dollar</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Öffnet PayPal-Webseite. Gewählte Währung: Euro</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Öffnet PayPal-Webseite. Sie müssen eine Währung auswählen.</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Abonnieren</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Monatlich via Patreon spenden</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Via Stripe spenden</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Gift\">Spiele als Geschenk</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Spiele als Geschenk via Steam</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Spiele als Geschenk via GOG</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Einen Kaffee via Ko-fi ausgeben</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Kryptowährung</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Bitcoin-Cash-Adresse kopieren</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Support\">Unterstützung</s:String>\r\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Wenn Sie mir danken wollen :D</s:String>\r\n    \r\n    <!--Options • About-->\r\n    <s:String x:Key=\"S.Options.About.Version\">Version:</s:String>\r\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Auf Aktualisierungen prüfen</s:String>\r\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Sie verwenden bereits die neueste Version.</s:String>\r\n    <s:String x:Key=\"S.Options.About.Author\">Autor: Nicke Manarin</s:String>\r\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store Version. Einige Einstellungen sind aufgrund auferlegter Maßnahmen deaktiviert.</s:String>\r\n    <s:String x:Key=\"S.Options.About.Contact\">Kontakt</s:String>\r\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Treten Sie Discord bei!</s:String>\r\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Besuchen Sie unsere Facebook-Seite!</s:String>\r\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Machen Sie bei Gitter mit!</s:String>\r\n    <s:String x:Key=\"S.Options.About.Technical\">Allgemein</s:String>\r\n    <s:String x:Key=\"S.Options.About.Technical.License\">Lizenz:</s:String>\r\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Dieses Programm ist freie Software)</s:String>\r\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Quellcode:</s:String>\r\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Datenschutzbestimmungen:</s:String>\r\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Ein großes Dankeschön an</s:String>\r\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">All diejenigen, die mich und meine Arbeit mit Rückmeldungen und Spenden unterstützen.</s:String>\r\n    \r\n    <!--Localization-->\r\n    <s:String x:Key=\"S.Localization\">Übersetzungen</s:String>\r\n    <s:String x:Key=\"S.Localization.GettingCodes\">Sprachcodes abrufen …</s:String>\r\n    <s:String x:Key=\"S.Localization.Recognized\">Erkannt als {0}</s:String>\r\n    <s:String x:Key=\"S.Localization.NotRecognized\">Nicht erkannt</s:String>\r\n    <s:String x:Key=\"S.Localization.Usage.First\">Letzte Datei in der Liste wird gerade verwendet.</s:String>\r\n    <s:String x:Key=\"S.Localization.Usage.Second\">Um Ihre eigene Übersetzung zu nutzen, platzieren Sie sie am Ende der Liste.</s:String>\r\n    <s:String x:Key=\"S.Localization.Exporting\">Ressource exportieren …</s:String>\r\n    <s:String x:Key=\"S.Localization.SaveResource\">Wörterbuch speichern</s:String>\r\n    <s:String x:Key=\"S.Localization.OpenResource\">Ein Wörterbuch öffnen</s:String>\r\n    <s:String x:Key=\"S.Localization.File.Resource\">Wörterbuch</s:String>\r\n    <s:String x:Key=\"S.Localization.Importing\">Ressource importieren …</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Name\">Der Dateiname folgt keinem gültigen Muster.</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Versuchen Sie, ihn wie folgt umzubenennen: StringResources.en.xaml, wobei „en” durch Ihren Sprachcode ersetzt werden sollte.</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Sie können keine Ressource mit identischem Namen hinzufügen.</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Versuchen Sie, die wiederholte Ressource zu entfernen oder einen anderen Sprachcode zu verwenden.</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Redundanter Sprachcode</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Der Code „{0}” ist überflüssig. Versuchen Sie, stattdessen „{1}” zu verwenden.</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Unbekannte Sprache</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">Die „{0}” und ihre Familie wurden nicht als gültige Sprachcodes anerkannt.</s:String>\r\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Importieren der Sprachressource fehlgeschlagen.</s:String>\r\n\r\n    <!--Recorder-->\r\n    <s:String x:Key=\"S.Recorder.Record\">Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Recorder.Pause\">Pause</s:String>\r\n    <s:String x:Key=\"S.Recorder.Continue\">Fortsetzen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Stop\">Stopp</s:String>\r\n    <s:String x:Key=\"S.Recorder.Discard\">Verwerfen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Snap\">Schnappschuss</s:String>\r\n    <s:String x:Key=\"S.Recorder.Height\">Höhe</s:String>\r\n    <s:String x:Key=\"S.Recorder.Width\">Breite</s:String>\r\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Das Verfolgen des Mauszeigers ist aktiviert.</s:String>\r\n\r\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Anklicken, um zwischen den Aufnahmefrequenzmodi zu wechseln.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manuell</s:String>\r\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">Interaktionen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fps\">Maximale Anzahl Einzelbilder pro Sekunde</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fps.Short\">B/s</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Bereich von 1 bis 60 Bilder/Sekunde, wobei höhere Werte bedeuten, dass mehr Einzelbilder erfasst werden.&#10;Jedes Segment entspricht einer Differenz von 16 Millisekunden.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fpm\">Maximale Anzahl Einzelbilder pro Minute</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">B/min</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Bereich von 1 bis 60 Bilder/Minute, wobei höhere Werte bedeuten, dass mehr Einzelbilder erfasst werden.&#10;Jedes Segment entspricht einer Differenz von 1 Sekunde.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fph\">Maximale Anzahl Einzelbilder pro Stunde</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fph.Short\">B/h</s:String>\r\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Bereich von 1 bis 60 Bilder/Stunde, wobei höhere Werte bedeuten, dass mehr Einzelbilder erfasst werden.&#10;Jedes Segment entspricht einer Differenz von 1 Minute.</s:String>\r\n    \r\n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Klicken oder drücken Sie die Tasten zum Aufnehmen</s:String>\r\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Durch Ziehen und Loslassen ans Fenster andocken</s:String>\r\n    <s:String x:Key=\"S.Recorder.PreStart\">Aufnahme startet in:</s:String>\r\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Pause)</s:String>\r\n    <s:String x:Key=\"S.Recorder.Stopping\">Wird angehalten …</s:String>\r\n    <s:String x:Key=\"S.Recorder.PreStarting\">Countdown …</s:String>\r\n    \r\n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Verstrichene Aufnahmezeit</s:String>\r\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Gesamtzahl der Einzelbilder:</s:String>\r\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Manuell aufgenommen:</s:String>\r\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Die Aufnahme wurde angehalten.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Ihr Computer unterstützt keinen genauen Aufnahmemodus,&#10;was bedeutet, dass die Zielbildrate möglicherweise nie erreicht werden kann.</s:String>\r\n    \r\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Bildschirmaufnahme fehlgeschlagen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Bildschirmaufnahme fehlgeschlagen. Aufnahmemethode lieferte nach fünf Versuchen keine Frames.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Starten/Pausieren der Bildschirmaufnahme fehlgeschlagen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Verwendung von Desktop Duplication API für Bildschirmaufnahme setzt Windows 8 oder höher voraus.</s:String>\r\n\r\n    <!--New recorder-->\r\n    <s:String x:Key=\"S.Recorder.Area\">Bereich</s:String>\r\n    <s:String x:Key=\"S.Recorder.Area.Select\">Bereich wählen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Window\">Fenster</s:String>\r\n    <s:String x:Key=\"S.Recorder.Window.Select\">Fenster wählen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen\">Bildschirm</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Bildschirm wählen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Interner Bildschirm</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Allgemeiner Bildschirm</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Grafikkarte: {0}</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Auflösung: {0} x {1}</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Native Auflösung: {0} x {1}</s:String>\r\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">dpi: {0} ({1:0.##} %)</s:String>\r\n    <s:String x:Key=\"S.Recorder.Move\">Ziehen, um das Auswahlfenster&#10;zu verschieben.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Accept\">Übernehmen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Retry\">Wiederholen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">RechtsklickRight-Click</s:String>\r\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Auswahl abbrechen (Esc-Taste)</s:String>\r\n    <s:String x:Key=\"S.Recorder.SelectArea\">Klicken und ziehen Sie auf diesem Bildschirm, um den Aufnahmebereich auszuwählen</s:String>\r\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Durch Klicken und Ziehen den Aufnahmebereich bestimmen</s:String>\r\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Hier klicken, um dieses Fenster zu wählen</s:String>\r\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Hier klicken, um diesen Bildschirm zu wählen</s:String>\r\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Esc-Taste zum Abbrechen drücken</s:String>\r\n    <s:String x:Key=\"S.Recorder.Splash.Title\">{0} drücken, um die Aufzeichnung zu stoppen.</s:String>\r\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Das Rekorderfenster wird minimiert.&#10;Stellen Sie es wieder her oder drücken Sie „{0}”, um die Aufnahme anzuhalten.</s:String>\r\n    \r\n    <s:String x:Key=\"S.Recorder.Discard.Title\">Aufnahme verwerfen</s:String>\r\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Möchten Sie die Aufnahme wirklich verwerfen?</s:String>\r\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Diese Aktion verwirft die Aufnahme und entfernt alle Einzelbilder (Frames).&#x0d;Dieser Vorgang kann nicht widerrufen werden.</s:String>\r\n    \r\n    <!--Webcam recorder-->\r\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif • Webcam-Aufzeichnung</s:String>\r\n    <s:String x:Key=\"S.Webcam.NoVideo\">Kein Videogerät gefunden</s:String>\r\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Videogeräte suchen</s:String>\r\n    <s:String x:Key=\"S.Webcam.Scale\">Skalierung: {0:0.##} x</s:String>\r\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Videogröße ändern</s:String>\r\n    \r\n    <!--Board recorder-->\r\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif • Handzeichnungs-Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Board.AutoRecord\">Automatisch aufzeichnen</s:String>\r\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Ermöglicht Aufnahme während des Zeichnens</s:String>\r\n    <s:String x:Key=\"S.Board.CtrlHold\">Strg [Halten]</s:String>\r\n    \r\n    <!--Color selector-->\r\n    <s:String x:Key=\"S.ColorSelector.Title\">Farbpalette</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Select\">Farbwert bestimmen</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Red\">Rot:</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Green\">Grün:</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Blue\">Blau:</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha:</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex:</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Initial\">Anfangsfarbe</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Current\">Aktuelle Farbe</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Latest\">Letzte Farbe</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Sample\">Farbpipette</s:String>\r\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Durch Klicken und Ziehen&#10;Farben auf dem Bildschirm auswählen.</s:String>\r\n    \r\n    <!--Exception/Error viewers-->\r\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Ausnahme-Anzeige</s:String>\r\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Innere Ausnahme öffnen</s:String>\r\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Typ der Ausnahme</s:String>\r\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Nachricht</s:String>\r\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Stapel</s:String>\r\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Quelle</s:String>\r\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Ein Fehler ist aufgetreten.</s:String>\r\n    <s:String x:Key=\"S.ErrorDialog.Send\">Fehlerbericht senden</s:String>\r\n\r\n    <!--Presets-->\r\n    <s:String x:Key=\"S.Preset.Title\">Voreinstellung</s:String>\r\n    <s:String x:Key=\"S.Preset.Encoder\">Umwandeln</s:String>\r\n    <s:String x:Key=\"S.Preset.Name\">Name</s:String>\r\n    <s:String x:Key=\"S.Preset.Description\">Beschreibung</s:String>\r\n    <s:String x:Key=\"S.Preset.Other\">Sonstiges</s:String>\r\n    <s:String x:Key=\"S.Preset.AutoSave\">Automatisch speichern, sobald eine Option geändert wurde.</s:String>\r\n    <s:String x:Key=\"S.Preset.Info.Manual\">Alle Änderungen an diesen Voreinstellungen (Umwandlungs- und Exporteinstellungen) müssen manuell durch Drücken der Schaltfläche „Speichern” gespeichert werden.</s:String>\r\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Alle Änderungen an diesen Voreinstellungen (Umwandlungs- und Exporteinstellungen) werden automatisch gespeichert.</s:String>\r\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Einige der Eigenschaften der Standardvoreinstellung sind schreibgeschützt.</s:String>\r\n    <s:String x:Key=\"S.Preset.Warning.Name\">Bitte Namen für diese Voreinstellung eingeben.</s:String>\r\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Eine Voreinstellung mit diesem Namen existiert bereits.</s:String>\r\n    \r\n    <!--Presets • Listing-->\r\n    <s:String x:Key=\"S.Preset.Autosave\">Automatisch speichern</s:String>\r\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Änderungen dieser Voreinstellung werden automatisch gespeichert.</s:String>\r\n    <s:String x:Key=\"S.Preset.Default.Title\">Standard ({0})</s:String>\r\n    <s:String x:Key=\"S.Preset.Default.Description\">Standard für die Umwandlung</s:String>\r\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Für Twitter ({0})</s:String>\r\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respektiert die Twitter-Upload-Grenzen (außer Größe und Auflösung).</s:String>\r\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\r\n    <s:String x:Key=\"S.Preset.Hevc.Description\">Hocheffiziente Video-Kompression</s:String>\r\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\r\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Älterer und weit verbreiteter Codec</s:String>\r\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animation</s:String>\r\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\r\n    <s:String x:Key=\"S.Preset.Filename.Image\">Grafik</s:String>\r\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projekt</s:String>\r\n\r\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Hohe Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Besser geeignet für Aufnahmen mit mehr Farben und Farbverläufen.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Hohe Qualität • Transparenter Hintergrund</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Unterstützt das Speichern der Animation mit einem transparenten Hintergrund.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Hohe Qualität • Grafiken</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Besser für Aufnahmen mit weniger Farben.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • Standard</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">Empfohlen für die Bildschirmaufzeichnung der normalen Benutzeroberfläche. Verwendet den Median-Cut-Quantisierer ohne Dithering.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Ausgewogen</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Gute Qualität für fotorealistische Grafiken mit dem Quantisierer ohne Dithering (von Wu).</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Hohe Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Hohe Qualität für fotorealistische Grafiken unter Verwendung des Quantisierers von Wu mit höherem Bitniveau und Floyd-Steinberg-Fehlerdiffusions-Dithering.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Geringe Qualität, schneller</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantisierung aller Bilder mit derselben vordefinierten „websicheren” Farbpalette und geordnetes Bayer-8x8-Dithering.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Höhere Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Höhere Bildqualität, aber auch größerer Dateigröße.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Geringere Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Geringere Bildqualität, aber mit kleinerer Dateigröße.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Höhere Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Höhere Bildqualität, aber auch größerer Dateigröße.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Geringere Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Geringere Bildqualität, aber mit kleinerer Dateigröße.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Geringere Qualität und schnellere Erstellung</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Noch geringere Bildqualität, mit einer schnelleren Umwandlung, aber mit einer kleineren Dateigröße.</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Geringe Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Geringe Qualität, aber schnellere Umwandlung.</s:String>\r\n\r\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Hohe Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Hohe Bildqualität und kleine Dateigröße, aber langsamere Umwandlung.</s:String>\r\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Geringere Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Geringere Bildqualität, kleine Dateigröße und schnellere Umwandlung.</s:String>\r\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Hohe Qualität</s:String>\r\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Hohe Bildqualität und geringe Dateigröße.</s:String>\r\n\r\n    <!--Insert frames-->\r\n    <s:String x:Key=\"S.InsertFrames.Title\">Frames hinzufügen</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.Info\">Beide Seiten müssen gleiche Höhe/Breite haben. Dieses Fenster erlaubt es Ihnen, den Arbeitsbereich und die Grafik neu zu positionieren und dessen Größe ändern. Klicken Sie zum Auswählen und Ändern der Größe.</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Arbeitsbereichgröße:</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Grafik in den&#10;Arbeitsbereich einpassen</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Ändert die Größe des Arbeitsbereichs so, dass beide Bilder hineinpassen (von der linken oberen Ecke aus).</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Unterschiedliche Framegrößen. Passen Sie Framegrößen an, bevor Sie Bildsequenzen hinzufügen.</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Neue Frames</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Aktuelle Frames</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Abmessungen:</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Bildposition:</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Bildgröße und &#10;-position zurücksetzen</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.Info2\">Neue Frames zu aktueller Bildsequenz&#10;bei folgender Position hinzufügen:</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.Before\">Vor</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.After\">Nach</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.Frame\">Frame</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.Importing\">Wird importiert …</s:String>\r\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Arbeitsbereich-Füllfarbe auswählen</s:String>\r\n\r\n    <!--Import frames from video-->\r\n    <s:String x:Key=\"S.ImportVideo.Title\">Bildsequenz aus Video importieren</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Importer\">Import mit:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Loading\">Wird geöffnet …</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Scale\">Skalierung:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Size\">Abmessungen:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Height\">Höhe:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Width\">Breite:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Bildwiederholrate:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Fps\">B/s</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Start\">Anfang:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.End\">Ende:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Selection\">Auswahl:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Frames\">Frames:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Duration\">Dauer:</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Error\">Beim Import der Video-Datei ist ein Fehler aufgetreten.</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Vorschau fehlgeschlagen. Versuchen Sie andere Multimedia-Anwendung oder schauen Sie nach, ob die Datei nicht beschädigt ist.&#x0d;Wenn Sie MediaPlayer verwenden, schauen Sie nach, ob er aktiviert wurde und benötigte Codecs installiert sind.</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Zeitüberschreitung beim Abrufen der Frame-Vorschau.</s:String>\r\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Keine Frames ausgewählt.</s:String>\r\n    \r\n    <!--Encoder-->\r\n    <s:String x:Key=\"S.Encoder.Title\">Umwandeln</s:String>\r\n    <s:String x:Key=\"S.Encoder.Encoding\">Wird umgewandelt …</s:String>\r\n    <s:String x:Key=\"S.Encoder.Starting\">Wird gestartet</s:String>\r\n    \r\n    <s:String x:Key=\"S.Encoder.Completed\">Beendet</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">In die Zwischenablage kopiert</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Kopieren fehlgeschlagen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Befehl ausgeführt</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Befehlsausgabe(n) anzeigen.</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Befehlsausführung fehlgeschlagen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Hochladen fehlgeschlagen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Strg + Klick, um die Seite zu öffnen und die Grafik zu löschen (falls verfügbar).</s:String>\r\n    \r\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Verstrichene Zeit (in Minuten):</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Auswertung:</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Umwandlung:</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Hochladen:</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopieren:</s:String>\r\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Befehle:</s:String>\r\n    \r\n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Datei gelöscht oder verschoben</s:String>\r\n    <s:String x:Key=\"S.Encoder.Canceled\">Abgebrochen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Error\">Fehler</s:String>\r\n    <s:String x:Key=\"S.Encoder.Error.Info\">Hier klicken, um Fehlerbeschreibung anzuzeigen.</s:String>\r\n    <s:String x:Key=\"S.Encoder.Uploading\">Wird hochgeladen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Executing\">Befehle werden ausgeführt</s:String>\r\n    <s:String x:Key=\"S.Encoder.Processing\">Frame {0} wird bearbeitet</s:String>\r\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Der zweite Durchgang wird vorbereitet</s:String>\r\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Wird verarbeitet {0} - 2. Durchlauf</s:String>\r\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Datei wird erstellt</s:String>\r\n    <s:String x:Key=\"S.Encoder.Analyzing\">Unveränderte Pixel werden analysiert</s:String>\r\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Analyseergebnis wird gespeichert</s:String>\r\n    <s:String x:Key=\"S.Encoder.OpenFile\">Datei öffnen</s:String>\r\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Ordner durchsuchen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Remove\">Aus Liste entfernen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Details\">Details anzeigen</s:String>\r\n    <s:String x:Key=\"S.Encoder.Dismiss\">Alle abgeschlossenen Umwandlungen verwerfen</s:String>\r\n\r\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Als Grafik kopieren</s:String>\r\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Dateinamen kopieren</s:String>\r\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Ordnerpfad kopieren</s:String>\r\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Link kopieren</s:String>\r\n    \r\n    <!--Command output-->\r\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif • Befehlsausgabe</s:String>\r\n    <s:String x:Key=\"S.Encoder.Command.Header\">Befehlsausgabe</s:String>\r\n    \r\n    <!--Notifications-->\r\n    <s:String x:Key=\"S.Notifications\">Benachrichtigungen</s:String>\r\n    <s:String x:Key=\"S.Notifications.Dismiss\">Alle Benachrichtigungen verwerfen</s:String>\r\n    \r\n    <!--Editor-->\r\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif • Editor</s:String>\r\n    <s:String x:Key=\"S.Editor.File\">Datei</s:String>\r\n    <s:String x:Key=\"S.Editor.Home\">Start</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback\">Wiedergabe</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit\">Bearbeiten</s:String>\r\n    <s:String x:Key=\"S.Editor.Image\">Bild</s:String>\r\n    <s:String x:Key=\"S.Editor.Transitions\">Übergänge</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics\">Eigenschaften</s:String>\r\n    <s:String x:Key=\"S.Editor.Options\">Einstellungen</s:String>\r\n    <s:String x:Key=\"S.Editor.Help\">Hilfe</s:String>\r\n    <s:String x:Key=\"S.Editor.Extras\">Extras</s:String>\r\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Ein neues Update ist verfügbar!</s:String>\r\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Hier klicken, um mehr darüber zu erfahren.</s:String>\r\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Gesamt, Auswahl, Aktueller Frame</s:String>\r\n    \r\n    <!--Editor • Loading-->\r\n    <s:String x:Key=\"S.Editor.Preparing\">Frames werden vorbereitet</s:String>\r\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Öffnen fehlgeschlagen - Mehrere Dateien können nicht gleichzeitig importiert werden. Wählen Sie nur eine Datei aus.</s:String>\r\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Öffnen fehlgeschlagen - Mehrere Projektdateien können nicht gleichzeitig geöffnet werden. Wählen Sie nur eine Projektdatei aus.</s:String>\r\n    \r\n    <!--Editor • File dialogs (does not work with new line characters)-->\r\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Mediendatei (Bild/Video) öffnen</s:String>\r\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Mediendatei (Bild/Video) oder Projektdatei öffnen</s:String>\r\n    <s:String x:Key=\"S.Editor.File.All\">Alle unterstützten Dateien</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Image\">Grafik</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\r\n\r\n    <s:String x:Key=\"S.Editor.File.Apng\">Animierte PNG-Datei</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Gif\">GIF-Animation</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Webp\">WebP-Animation</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Avif\">AVIF-Animation</s:String>\r\n\r\n    <s:String x:Key=\"S.Editor.File.Avi\">AVI-Video</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska-Video</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Mov\">MOV-Video</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Mp4\">MP4-Video</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Webm\">WebM-Video</s:String>\r\n\r\n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">BMP-Grafik</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">JPEG-Grafik</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Image.Png\">PNG-Grafik (alle ausgewählten Grafiken)</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip-Datei (alle ausgewählten Grafiken)</s:String>\r\n\r\n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif-Projekt</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif-Projekt als Zip-Archiv</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Psd\">PSD-Datei (Photoshop)</s:String>\r\n    \r\n    <!--Editor • Welcome-->\r\n    <s:String x:Key=\"S.Editor.Welcome.New\">Öffnen Sie das Menü „Datei” ➜ „Neu”, um neue Aufnahme zu starten</s:String>\r\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Fügen Sie Grafiken, Videos oder Projekte durch Ziehen und Ablegen hinzu</s:String>\r\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Vielen Dank, dass Sie mein Programm verwenden!</s:String>\r\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Je kleiner die Bildwiederholrate, die Anzahl der Farben und die Anzahl der Änderungen zwischen den Frames, desto kleiner die Dateigröße</s:String>\r\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Möchten Sie mit mir Kontakt aufnehmen? Gehen Sie zu „Einstellungen” ➜ „Über” für weitere Infos</s:String>\r\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Haben Sie Probleme? Kontaktieren Sie mich via Feedback-Option</s:String>\r\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Möchten Sie den neuen Rekorder ausprobieren? Gehen Sie zu „Einstellungen” ➜ „Rekorder”, um ihn zu aktivieren.</s:String>\r\n    \r\n    <!--Editor • File tab • New-->\r\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Bildschirm&#10;aufzeichnen</s:String>\r\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webcam&#10;Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Editor.File.New.Board\">Handzeichnung&#10;aufnehmen</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Blank\">Neue&#10;Animation</s:String>\r\n    <s:String x:Key=\"S.Editor.File.New\">Neu</s:String>\r\n    \r\n    <!--Editor • File tab • Insert-->\r\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Bildschirm&#10;Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Webcam&#10;Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Handzeichnung&#10;Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Mediendatei</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Insert\">Hinzufügen</s:String>\r\n    \r\n    <!--Editor • File tab • Save/Discard-->\r\n    <s:String x:Key=\"S.Editor.File.Save\">Speichern&#10;unter</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Load\">Öffnen</s:String>\r\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Projekte</s:String>\r\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Projekt&#10;speichern</s:String>\r\n    <s:String x:Key=\"S.Editor.File.Discard\">Projekt&#10;verwerfen</s:String>\r\n    \r\n    <!--Editor • Home tab • Action Stack-->\r\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Aktionsliste</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Undo\">Widerrufen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Redo\">Wiederherstellen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Reset\">Auf Anfang zurücksetzen</s:String>\r\n    \r\n    <!--Editor • Home tab • Clipboard-->\r\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Zwischenablage</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Zwischenablage anzeigen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Paste\">Einfügen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Cut\">Ausschneiden</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopieren</s:String>\r\n    \r\n    <!--Editor • Home tab • Zoom-->\r\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Vergrößern</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Fenstergröße&#10;anpassen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Grafik einpassen</s:String>\r\n    \r\n    <!--Editor • Home tab • Select-->\r\n    <s:String x:Key=\"S.Editor.Home.Select\">Auswählen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Alle&#10;auswählen</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Wechseln zu</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Auswahl umkehren</s:String>\r\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Auswahl aufheben</s:String>\r\n    \r\n    <!--Editor • Playback tab • Playback-->\r\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Wiedergabe</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback.First\">Erster</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Vorheriger</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback.Play\">Wiedergeben</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pause</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback.Next\">Nächster</s:String>\r\n    <s:String x:Key=\"S.Editor.Playback.Last\">Letzter</s:String>\r\n    \r\n    <!--Editor • Playback tab • Playback Options-->\r\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Option</s:String>\r\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Endlosschleife</s:String>\r\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Wird nur während der Wiedergabe verwendet.&#10;Wenn Sie die Einstellungen für Wiederholungen für GIF- und APNG-Export ändern möchten,&#10;beachten Sie bitte die Option „Speichern unter” bei einigen Umwandlungen.</s:String>\r\n    \r\n    <!--Editor • Edit tab • Frames-->\r\n    <s:String x:Key=\"S.Editor.Edit.Frames\">Frames</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Frames&#10;entfernen</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Duplikate&#10;entfernen</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Frame-Anzahl&#10;reduzieren</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Glatte&#x0d;Schleife</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Alle vorherigen&#10;entfernen</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Alle folgenden&#10;entfernen</s:String>\r\n    \r\n    <!--Editor • Edit tab • Reordering-->\r\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Reihenfolge ändern</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Reihenfolge&#10;umkehren</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Jo-Jo-Effekt</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Nach links&#10;verschieben</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Nach rechts&#10;verschieben</s:String>\r\n    \r\n    <!--Editor • Edit tab • Delay/Duration-->\r\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Verzögerung (Dauer)</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Überschreiben</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Erhöhen oder&#10;verringern</s:String>\r\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Prozentual&#10;skalieren</s:String>\r\n    \r\n    <!--Editor • Image • Size and Rotation-->\r\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Größe und Drehung</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Resize\">Bildgröße ändern</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Crop\">Zuschneiden</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Spiegeln/Drehen</s:String>\r\n    \r\n    <!--Editor • Image tab • Text-->\r\n    <s:String x:Key=\"S.Editor.Image.Text\">Text</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Caption\">Bildunterschrift</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Freier Text</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titelbild</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Tastatureingabe</s:String>\r\n    \r\n    <!--Editor • Image tab • Overlay-->\r\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Überlagerung</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Zeichnen</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Shape\">Formen</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Maus-&#x0d;Events</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Wasserzeichen</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagramm</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Border\">Rahmen</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Schatten</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Progress\">Fortschritt</s:String>\r\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Verschleiern</s:String>\r\n\r\n    <!--Editor • Transitions tab • Styles-->\r\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Übergänge</s:String>\r\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Überblendung</s:String>\r\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Schwenken</s:String>\r\n    \r\n    <!--Editor • Statistics tab-->\r\n    <s:String x:Key=\"S.Editor.Statistics.General\">Allgemein</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Frame-Anzahl:</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Gesamtdauer:</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Abmessungen:</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Durchschnittliche Frame-Dauer:</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Aktuelle Zeit:</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Wird anhand des aktuell angezeigten Frames berechnet.</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Frame-dpi und Skalierung:</s:String>\r\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Aktueller Frame</s:String>\r\n    \r\n    <!--Editor • Messages-->\r\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Frames ausschneiden</s:String>\r\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Sie können nicht alle Frames ausschneiden.</s:String>\r\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Bildsequenz muss mindestens einen Frame beinhalten.</s:String>\r\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Alle Frames entfernen</s:String>\r\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Möchten Sie alle Frames wirklich entfernen?</s:String>\r\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Sie sind dabei, alle Frames zu löschen.&#10;\\rDiese Aktion kann nicht widerrufen werden.&#10;\\rMöchten Sie fortfahren?</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Projekt verwerfen</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Möchten Sie dieses Projekt wirklich verwerfen?</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Sie sind dabei, das Projekt zu verwerfen und alle Frames zu entfernen.&#10;\\rDiese Aktion kann nicht widerrufen werden.&#10;\\rMöchten Sie fortfahren?</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Möchten Sie das bisherige Projekt verwerfen?</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Wenn Sie sich entscheiden, dies nicht zu tun, so wird das aktuelle Projekt immer noch unter „Kürzlich erstellte Projekte” verfügbar sein.</s:String>\r\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Frames löschen</s:String>\r\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Möchten Sie wirklich Frames löschen?</s:String>\r\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Diese Aktion wird {0} Frame(s) löschen.\\n\\rSie können das Löschen später widerrufen.&#10;\\rMöchten Sie fortfahren?</s:String>\r\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Editor beenden</s:String>\r\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Möchten Sie den Editor wirklich schließen?</s:String>\r\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Das aktuelle Projekt kann später unter „Kürzlich erstellte Projekte” wieder geöffnet werden.</s:String>\r\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Das aktuelle Projekt kann später unter „Kürzlich erstellte Projekte” wieder geöffnet werden. Bitte beachten Sie, dass es in einigen Tagen automatisch gelöscht wird.</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Ungültiges Ziehen und Ablegen</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Sie können nicht mehrere Dateien gleichzeitig importieren</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Wählen Sie immer nur eine Datei aus.</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Datei kann nicht geöffnet werden</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Datei kann wegen ungültigen Formats nicht geöffnet werden.</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Sie können nicht mehrere Projektdateien gleichzeitig importieren</s:String>\r\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Wählen Sie immer nur eine Projektdatei aus.</s:String>\r\n\r\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Es gibt keinen Text, der hinzugefügt werden kann.</s:String>\r\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Bildunterschrift hinzufügen zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Text hinzufügen zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Titelbild hinzufügen zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Rahmenbreite muss an mindestens einer Stelle größer als Null sein.</s:String>\r\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Sie müssen mindestens eine Grafik auswählen, um Rahmen hinzufügen zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Deckkraft muss größer sein als Null damit ein Unterschied sichtbar ist.</s:String>\r\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Wenn Sie Schattentiefe und Unschärferadius auf Null setzen, wird der Schatten unsichtbar sein.</s:String>\r\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Sie müssen mindestens ein Pixel auswählen, um Cinemagraph-Effekt anwenden zu können. Wählen Sie einen Bereich aus, indem Sie auf der Grafik malen.</s:String>\r\n    <s:String x:Key=\"S.Editor.Fade.Title\">Überblendung</s:String>\r\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Ausblenden-Effekt anwenden zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Vollständig transparente Farbe wird bei Überblendung keinen sichtbaren Effekt erzeugen.</s:String>\r\n    <s:String x:Key=\"S.Editor.Slide.Title\">Schwenken</s:String>\r\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Schwenken-Effekt anwenden zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Bildsequenz wird geöffnet</s:String>\r\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Projekt kann nicht geöffnet werden</s:String>\r\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Öffnen der Frames fehlgeschlagen, weil sie entweder beschädigt sind oder woanders gespeichert sind.</s:String>\r\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Einige Frames konnten nicht geöffnet werden</s:String>\r\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Frames konnten nicht geöffnet werden, weil sie nicht vorhanden sind oder weil sie beschädigt sind.</s:String>\r\n    \r\n    <!--Editor • Warnings-->\r\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Sie müssen mindestens einen Frame auswählen, um Übergang anwenden zu können.</s:String>\r\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg ist nicht verfügbar. Fügen Sie es Umgebungsvariablen hinzu oder wählen Sie den Speicherort in „Einstellungen” ➜ „Extras” aus.</s:String>\r\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski ist nicht verfügbar. Fügen Sie es Umgebungsvariablen hinzu oder wählen Sie den Speicherort in „Einstellungen” ➜ „Extras” aus.</s:String>\r\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Der vom Programm verwendete Speicherplatz ist fast belegt ({0} % übrig). Gehen Sie zu „Einstellungen” ➜ „Temporäre Dateien”, um Speicherplatz frei zu geben.</s:String>\r\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Sie haben versucht, mehrere Bilder mit unterschiedlichen Auflösungen (dpi) zu importieren, was jedoch nicht unterstützt wird. Einige von diesen wurden importiert, andere müssen separat importiert werden.</s:String>\r\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Sie haben versucht, mehrere Bilder mit unterschiedlichen Größen zu importieren, was nicht unterstützt wird. Einige von ihnen wurden importiert, andere müssen separat importiert werden.</s:String>\r\n    \r\n    <!--Editor • Status-->\r\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Frames werden aus dem Cache geladen</s:String>\r\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Bildsequenz wird aktualisiert</s:String>\r\n    <s:String x:Key=\"S.Editor.PreparingImport\">Bildsequenz-Import wird vorbereitet</s:String>\r\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Bildsequenz wird importiert</s:String>\r\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Duplikate werden analysiert</s:String>\r\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Dauer wird angepasst</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Duplikate werden gelöscht</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Frames werden gelöscht</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Ordner werden gelöscht</s:String>\r\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Framegröße wird geändert</s:String>\r\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Frames werden zugeschnitten</s:String>\r\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Überlagerung wird angewendet</s:String>\r\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Titelbild wird hinzugefügt</s:String>\r\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Drehen wird angewendet</s:String>\r\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Frame-Dauer wird geändert</s:String>\r\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Übergang wird angewendet</s:String>\r\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Speichern wird vorbereitet</s:String>\r\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Laden abbrechen und Projekt verwerfen.</s:String>\r\n    <s:String x:Key=\"S.Editor.FindingLoop\">Perfekte Schleife finden</s:String>\r\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">In Schleife nicht verwendeten Frames werden verworfen</s:String>\r\n\r\n    <!--Editor • Frame list-->\r\n    <s:String x:Key=\"S.Editor.List.Frame\">Frame:</s:String>\r\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Grafik öffnen</s:String>\r\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Ordner durchsuchen</s:String>\r\n    \r\n    <!--Editor • Go to-->\r\n    <s:String x:Key=\"S.GoTo.Title\">Gehe zu</s:String>\r\n    <s:String x:Key=\"S.GoTo.Instruction\">Zu folgendem Frame gehen (0 bis {0}):</s:String>\r\n    \r\n    <!--Editor • Context menu-->\r\n    <s:String x:Key=\"S.Context.SaveAs\">Speichern unter …</s:String>\r\n    <s:String x:Key=\"S.Context.RemoveFrames\">Ausgewählte Frames entfernen</s:String>\r\n    <s:String x:Key=\"S.Context.NewRecording\">Neue Bildschirmaufnahme</s:String>\r\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Neue Webcam-Aufnahme</s:String>\r\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Neue Handzeichnung</s:String>\r\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Neue Animation</s:String>\r\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Neu von Mediendatei oder Projekt</s:String>\r\n   \r\n    <!--Editor • Hints-->\r\n    <s:String x:Key=\"S.Hint.NewRecording\">Neue Bildschirmaufnahme erstellt.</s:String>\r\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Neue Webcam-Aufnahme erstellt.</s:String>\r\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Neue Handzeichnung erstellt.</s:String>\r\n    <s:String x:Key=\"S.Hint.NewAnimation\">Neue Animation erstellt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Undo\">Widerrufen wurde ausgeführt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Reset\">Zurücksetzen wurde ausgeführt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Redo\">Wiederherstellen wurde ausgeführt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Cut\">{0} Frame(s) ausgeschnitten.</s:String>\r\n    <s:String x:Key=\"S.Hint.Copy\">{0} Frame(s) kopiert.</s:String>\r\n    <s:String x:Key=\"S.Hint.Paste\">{0} Frame(s) eingefügt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom auf {0} % gesetzt.</s:String>\r\n    <s:String x:Key=\"S.Hint.SelectAll\">Alle Frames ausgewählt.</s:String>\r\n    <s:String x:Key=\"S.Hint.SelectSingle\">Frame {0} ausgewählt.</s:String>\r\n    <s:String x:Key=\"S.Hint.SelectInverse\">Auswahl umgekehrt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Deselect\">Nichts ausgewählt.</s:String>\r\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} Frame(s) entfernt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Reverse\">Bildsequenz-Reihenfolge umgekehrt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Yoyo\">Jo-Jo-Effekt angewendet.</s:String>\r\n    <s:String x:Key=\"S.Hint.MoveLeft\">Frame(s) nach links verschoben.</s:String>\r\n    <s:String x:Key=\"S.Hint.MoveRight\">Frame(s) nach rechts verschoben.</s:String>\r\n    <s:String x:Key=\"S.Hint.Resize\">Framegröße verändert.</s:String>\r\n    <s:String x:Key=\"S.Hint.Crop\">Frame(s) zugeschnitten.</s:String>\r\n    <s:String x:Key=\"S.Hint.FlipRotate\">Frame(s) gedreht/gespiegelt.</s:String>\r\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Spiegeln-Effekt gilt für ausgewählte Frames und Drehen-Effekt gilt für alle Frames.</s:String>\r\n    <s:String x:Key=\"S.Hint.ApplyAll\">Diese Aktion gilt für alle Frames.</s:String>\r\n    <s:String x:Key=\"S.Hint.ApplySelected\">Diese Aktion gilt für ausgewählte Frames.</s:String>\r\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Diese Aktion gilt für alle oder für ausgewählte Frames, abhängig von Ihren eigenen Einstellungen.</s:String>\r\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph-Effekt gilt für alle Frames, die auf dem ersten Frame basieren.</s:String>\r\n    <s:String x:Key=\"S.Hint.Overlay\">Überlagerung angewendet.</s:String>\r\n    <s:String x:Key=\"S.Hint.TitleFrame\">Titelbild hinzugefügt.</s:String>\r\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Titelbild wird vor dem markierten Frame hinzugefügt.</s:String>\r\n    <s:String x:Key=\"S.Hint.Delay\">Dauer der markierten Frames geändert.</s:String>\r\n    <s:String x:Key=\"S.Hint.Transition\">Übergang angewendet.</s:String>\r\n    <s:String x:Key=\"S.Hint.Reduce\">Bildwiederholrate reduziert.</s:String>\r\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplikate entfernt.</s:String>\r\n    \r\n    <!--Editor • Action panel-->\r\n    <s:String x:Key=\"S.Action.Hide\">Ausblenden</s:String>\r\n    <s:String x:Key=\"S.Action.Apply\">Übernehmen</s:String>\r\n    <s:String x:Key=\"S.Action.Open\">Öffnen</s:String>\r\n    <s:String x:Key=\"S.Action.Save\">Speichern</s:String>\r\n    <s:String x:Key=\"S.Action.Cancel\">Abbrechen</s:String>\r\n\r\n    <!--Editor • Recent projects-->\r\n    <s:String x:Key=\"S.Recent.Projects\">Kürzlich erstellte Projekte</s:String>\r\n    <s:String x:Key=\"S.Recent.Searching\">Es wird nach aktuellen Projekten gesucht …</s:String>\r\n    <s:String x:Key=\"S.Recent.Date\">Erstelldatum</s:String>\r\n    <s:String x:Key=\"S.Recent.Frames\">Frame-Anzahl</s:String>\r\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Kein Projekt ausgewählt. Bitte wählen Sie ein Projekt aus der Liste aus.</s:String>\r\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Dieses Projekt wird bereits von dieser Editor-Instanz angezeigt.</s:String>\r\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Dieses Projekt wurde bereits in einem anderen Editor-Fenster geöffnet. Ein und dasselbe Projekt kann nicht mehrmals geöffnet werden.</s:String>\r\n    \r\n    <!--Editor • Clipboard-->\r\n    <s:String x:Key=\"S.Clipboard.Entries\">Elemente der Zwischenablage</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Entry\">Element der Zwischenablage:</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} Grafik</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} Grafiken</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Explore\">Dateipfad öffnen</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Remove\">Entfernen</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Behavior\">Verhalten beim Einfügen</s:String>\r\n    <s:String x:Key=\"S.Clipboard.Before\">Vor dem markierten Frame</s:String>\r\n    <s:String x:Key=\"S.Clipboard.After\">Nach dem markierten Frame</s:String>\r\n    \r\n    <!--Editor • Resize-->\r\n    <s:String x:Key=\"S.Resize.Difference\">Unterschied</s:String>\r\n    <s:String x:Key=\"S.Resize.Dpi\">dpi</s:String>\r\n    <s:String x:Key=\"S.Resize.Options\">Optionen</s:String>\r\n    <s:String x:Key=\"S.Resize.Pixels\">Pixel (px)</s:String>\r\n    <s:String x:Key=\"S.Resize.Percent\">Prozent (%)</s:String>\r\n    <s:String x:Key=\"S.Resize.Dpi2\">dpi:</s:String>\r\n    <s:String x:Key=\"S.Resize.KeepAspect\">Seitenverhältnis beibehalten</s:String>\r\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Qualität:</s:String>\r\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant (höhere Qualität)</s:String>\r\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear (geringere Qualität)</s:String>\r\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nächster Nachbar (geringere Qualität und schneller)</s:String>\r\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Qualität verringern/erhöhen</s:String>\r\n    <s:String x:Key=\"S.Resize.Warning\">Sie müssen einen anderen Wert auswählen, um die Größe zu ändern.</s:String>\r\n    \r\n    <!--Editor • Crop-->\r\n    <s:String x:Key=\"S.Crop.Points\">Ziehpunkte-Position</s:String>\r\n    <s:String x:Key=\"S.Crop.Top\">Oben:</s:String>\r\n    <s:String x:Key=\"S.Crop.Left\">Links:</s:String>\r\n    <s:String x:Key=\"S.Crop.Bottom\">Unten:</s:String>\r\n    <s:String x:Key=\"S.Crop.Right\">Rechts:</s:String>\r\n    <s:String x:Key=\"S.Crop.Warning\">Zuschnitt muss kleiner als die aktuelle Framegröße sein.</s:String>\r\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Zuschnitt muss größer als 10x10 Pixel sein.</s:String>\r\n    \r\n    <!--Editor • Flip/rotate-->\r\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Horizontal kippen</s:String>\r\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Vertikal kippen</s:String>\r\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Um 90º nach links drehen</s:String>\r\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Um 90° nach rechts drehen</s:String>\r\n    \r\n    <!--Editor • Reduce framerate-->\r\n    <s:String x:Key=\"S.Reduce.Header\">Bildwiederholrate reduzieren</s:String>\r\n    <s:String x:Key=\"S.Reduce.Factor\">Faktor:</s:String>\r\n    <s:String x:Key=\"S.Reduce.Count\">Anzahl entfernen:</s:String>\r\n    <s:String x:Key=\"S.Reduce.Delay\">Verzögerungseinstellung:</s:String>\r\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Nicht anpassen</s:String>\r\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Mit vorherigem Frame summieren</s:String>\r\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Mit den verbliebenen Bildern gleichmäßig summieren</s:String>\r\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Reduziert die Bildwechselfrequenz des gesamten Projekts.</s:String>\r\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Wenn die Option nicht ausgewählt ist, müssen Sie mehrere aufeinanderfolgende Einzelbilder auswählen,&#10;die größer als der Entfernungsfaktor sind.</s:String>\r\n    <s:String x:Key=\"S.Reduce.Info\">{0} Frame(s) werden nach jedem {1} Frame entfernt, ohne die gelöschten zu zählen.</s:String>\r\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Sie müssen die Einzelbilder auswählen, um die Bildratenreduzierung anzuwenden (oder die Option zur Anwendung auf das gesamte Projekt auswählen).</s:String>\r\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Die Liste der ausgewählten Einzelbilder muss fortlaufend sein. Sie können unter den ausgewählten Einzelbildern nicht einige unausgewählt lassen.</s:String>\r\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Die Auswahl der Einzelbilder muss größer als der Entfernungsfaktor sein, damit die Funktion in der Lage ist, etwas zu entfernen.</s:String>\r\n    \r\n    <!--Editor • Remove duplicates-->\r\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Vorgaben</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Ähnlichkeit (%):</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Löschen von Frames:</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Ersten Frame entfernen</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Letzten Frame entfernen</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Dauer-Feineinstellung:</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Keine Feineinstellung</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Durchschnitt verwenden</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Summe verwenden</s:String>\r\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Diese Aktion analysiert jedes einzelne Pixel und entfernt denjenigen, der gegenüber dem direkten Nachbarn eine {0}%ige Ähnlichkeit aufweist.&#10;Wenn Sie möchten, können Sie die Dauer der Frame-Anzeige einstellen.</s:String>\r\n\r\n    <!--Editor • Smooth Loop-->\r\n    <s:String x:Key=\"S.SmoothLoop.Header\">Glatte Schleife erstellen</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Zuerst ignorieren:</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.From\">Vergleichen von:</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Ende</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Anfang</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.Info\">Versucht, einen Frame zu finden, der dem Startframe zu mindestens {0} % ähnlich ist, und löscht alle späteren Frames.&#x0d;Sie können wählen, ob Sie einige anfängliche Frames ignorieren und den Vergleich vom Beginn (nach dem Schwellenwert) oder vom Ende aus starten möchten.</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Die Anzahl der zu ignorierenden Grafiken muss kleiner sein als die Gesamtzahl der Grafiken.</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Mit den gewählten Einstellungen war es nicht möglich, eine glatte Schleife zu erstellen.</s:String>\r\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Sie verfügen bereits über eine glatte Schleife auf der Grundlage der gewählten Einstellungen.</s:String>\r\n    \r\n    <!--Editor • Captions-->\r\n    <s:String x:Key=\"S.Caption.Text\">Text</s:String>\r\n    <s:String x:Key=\"S.Caption.Font\">Schrift</s:String>\r\n    <s:String x:Key=\"S.Caption.Family\">Familie:</s:String>\r\n    <s:String x:Key=\"S.Caption.Style\">Stil:</s:String>\r\n    <s:String x:Key=\"S.Caption.Weight\">Breite:</s:String>\r\n    <s:String x:Key=\"S.Caption.Size\">Größe:</s:String>\r\n    <s:String x:Key=\"S.Caption.Color\">Farbe:</s:String>\r\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Hintergrundfarbe:</s:String>\r\n    <s:String x:Key=\"S.Caption.Outline\">Kontur</s:String>\r\n    <s:String x:Key=\"S.Caption.Thickness\">Breite:</s:String>\r\n    <s:String x:Key=\"S.Caption.Layout\">Position</s:String>\r\n    <s:String x:Key=\"S.Caption.Vertical\">Vertikal:</s:String>\r\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontal:</s:String>\r\n    <s:String x:Key=\"S.Caption.TextAlignment\">Ausrichtung:</s:String>\r\n    <s:String x:Key=\"S.Caption.TextDecoration\">Dekoration:</s:String>\r\n\r\n    <!--Editor • Key strokes-->\r\n    <s:String x:Key=\"S.KeyStrokes\">Tastatureingaben</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Vorgaben</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Trennzeichen:</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Tastatureingaben bearbeiten</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Strg-, Alt-, Umschalt- und Windows-Taste ignorieren</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Zusätzliche Tastenkombinationen außer Strg+C werden ignoriert.</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Von der Software simulierte Tastenanschläge ignorieren</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Nur Tastatureingaben des Benutzers aufzeichnen.</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Dauer der Anzeige der Tastatureingaben verlängern</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Anzeige der Tastatureingaben früher beginnen</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.By\">um (ms):</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Keine Tastatureingaben in Ihrer Aufnahme</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif • Tastatureingaben-Editor</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Frame-Nummer</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Tastatureingabe erkannt</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Tastatureingabe entfernen</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Tastatureingabe hinzufügen:</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Kleinbuchstaben</s:String>\r\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Erlaubt, Kleinbuchstaben einzufügen</s:String>\r\n\r\n    <!--Editor • Free drawing-->\r\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modus</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Stift</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Radierer</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Select\">Auswahl</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Strichradierer</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Width\">Breite:</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Height\">Höhe:</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Spitze:</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rechteck</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellipse</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Other\">Sonstiges:</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Textmarker</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">An Kurve ausrichten</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Es gibt keine Zeichnungen, die hinzugefügt werden können.</s:String>\r\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Zeichnungen hinzufügen zu können.</s:String>\r\n    \r\n    <!--Editor • Shapes-->\r\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Einfügen</s:String>\r\n    <s:String x:Key=\"S.Shapes.Shapes\">Formen</s:String>\r\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radius:</s:String>\r\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Striche:</s:String>\r\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Steuert die Länge der Linien und die Größe der Zwischenräume.&#10;Sie können mehrere Größen festlegen, um einen ausgeklügelten gestrichelten Stil zu erstellen.&#10;Der Standardwert ist „1 0” oder leer, d. h., ein Bindestrich ohne Lücken.</s:String>\r\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Drehung zurücksetzen</s:String>\r\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Entfernen</s:String>\r\n    <s:String x:Key=\"S.Shapes.Fill\">Füllung</s:String>\r\n\r\n    <!--Editor • Mouse events-->\r\n    <s:String x:Key=\"S.MouseEvents\">Maus-Events</s:String>\r\n    <s:String x:Key=\"S.MouseHighlight.Color\">Farbe der Mausmarkierung:</s:String>\r\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Farbe der linken Maustaste:</s:String>\r\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Farbe der mittleren Maustaste:</s:String>\r\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Farbe der rechten Maustaste:</s:String>\r\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">1. zusätzliche Buttonfarbe:</s:String>\r\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">2. zusätzliche Buttonfarbe:</s:String>\r\n    \r\n    <!--Editor • Watermark-->\r\n    <s:String x:Key=\"S.Watermark.Image\">Grafik-Wasserzeichen</s:String>\r\n    <s:String x:Key=\"S.Watermark.File\">Datei:</s:String>\r\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Keine ausgewählt</s:String>\r\n    <s:String x:Key=\"S.Watermark.Opacity\">Deckkraft:</s:String>\r\n    <s:String x:Key=\"S.Watermark.Select\">Grafik auswählen</s:String>\r\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Sie müssen eine Grafik auswählen, um es als Wasserzeichen zu den ausgewählten Frames einfügen zu können.</s:String>\r\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Sie müssen mindestens einen Frame auswählen, um Wasserzeichen einfügen zu können.</s:String>\r\n    \r\n    <!--Editor • Border-->\r\n    <s:String x:Key=\"S.Border.Appearance\">Aussehen</s:String>\r\n    <s:String x:Key=\"S.Border.Info\">Verwenden Sie negative Werte, um den Rahmen außerhalb der Grafik zu erzeugen.&#10;Ein so erstellter Rahmen wird auf alle Frames angewendet.&#10;Wenn positive Werte eingegeben werden, wird der Rahmen nur dem ausgewählten Frame hinzugefügt.</s:String>\r\n\r\n    <!--Editor • Shadow-->\r\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Schattenfarbe:</s:String>\r\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Hintergrundfarbe:</s:String>\r\n    <s:String x:Key=\"S.Shadow.Direction\">Richtung:</s:String>\r\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Unschärferadius:</s:String>\r\n    <s:String x:Key=\"S.Shadow.Depth\">Tiefe:</s:String>\r\n    \r\n    <!--Editor • Obfuscate-->\r\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Verpixeln</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Unschärfe</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Abdunkeln</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Aufhellen</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Options\">Vorgaben</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Pixelgröße:</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Grad der Unschärfe:</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Grad der Verdunklung:</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Grad der Aufhellung:</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Durchschnittsfarbe für jeden verpixelten Bereich berechnen</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Invert\">Abdunkeln auf die Umkehrung der Auswahl anwenden</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Glätte</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Info\">Verwenden Sie das Auswahlwerkzeug, um den Teil des Frames auszuwählen, der unkenntlich gemacht werden soll.</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Info2\">Verwenden Sie das Auswahlwerkzeug, um den Teil des Frames auszuwählen, der nicht unkenntlich gemacht werden soll.</s:String>\r\n    <s:String x:Key=\"S.Obfuscate.Warning\">Es ist nichts ausgewählt worden. Auswahlwerkzeug verwenden, um einen Rechteck verpixelt darzustellen.</s:String>\r\n    \r\n    <!--Editor • Progress-->\r\n    <s:String x:Key=\"S.Progress.Type\">Typ</s:String>\r\n    <s:String x:Key=\"S.Progress.Type.Bar\">Laufbalken</s:String>\r\n    <s:String x:Key=\"S.Progress.Type.Text\">Text</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision\">Angabe in:</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuten</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekunden</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisekunden</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Prozent</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.Count\">Frame-Anzahl</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Aufnahmedatum</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Benutzerdefiniert</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Gesamt anzeigen</s:String>\r\n    <s:String x:Key=\"S.Progress.Format\">Format:</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = Millisekunden</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = Sekunden</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = Minuten</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = Prozentsatz</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = Anzahl Einzelbilder</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Totals\">Gesamt:</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Examples\">Beispiele:</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Date\">Sie können das Zeitformat aus .NET Framework verwenden.&#x0d;Genaue Beschreibung hinter den beiden Links.</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standardformate</s:String>\r\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Benutzerdefinierte Formate</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Zählen ab:</s:String>\r\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Beginnt das Zählen der Frames ab der gewählten Nummer.</s:String>\r\n    <s:String x:Key=\"S.Progress.Orientation\">Ausrichtung:</s:String>\r\n    \r\n    <!--Editor • Delay-->\r\n    <s:String x:Key=\"S.Delay.Update\">Frame-Dauer</s:String>\r\n    <s:String x:Key=\"S.Delay.Mode\">Modus:</s:String>\r\n    <s:String x:Key=\"S.Delay.Mode.Override\">Überschreiben (ms)</s:String>\r\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Erhöhen oder verringern (ms)</s:String>\r\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Skalierung (in %)</s:String>\r\n    <s:String x:Key=\"S.Delay.NewValue\">Vorgabe</s:String>\r\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimum 10 ms pro Frame</s:String>\r\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Vorgabe</s:String>\r\n    <s:String x:Key=\"S.Delay.Scale\">Vorgabe</s:String>\r\n    <s:String x:Key=\"S.Delay.Override.Info\">Aktuelle Dauer markierter Frames wird durch den eingegebenen Wert ersetzt und sollte zwischen 10 ms und 25500 ms liegen.</s:String>\r\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Aktuelle Dauer markierter Frames wird um den eingegebenen Wert erhöht bzw. verringert.&#10;Sie können einen Wert zwischen -10000 ms und 10000 ms eingeben.&#10;Die Framedauer wird jedoch immer im Bereich zwischen&#10;10 ms und 25500 ms liegen.</s:String>\r\n    <s:String x:Key=\"S.Delay.Scale.Info\">Aktuelle Dauer markierter Frames wird um den eingegebenen Prozentsatz verändert.&#10;Sie können die Dauer der Frames anpassen, indem Sie einen Wert zwischen 1 % und 1000 % wählen.&#10;Die Framedauer wird jedoch immer im Bereich zwischen&#10;10 ms und 25500 ms liegen.</s:String>\r\n\r\n    <!--Editor • Cinemagraph-->\r\n    <s:String x:Key=\"S.Cinemagraph.Info\">Verwenden Sie den Stift, um Bereiche auszuwählen, die beweglich bleiben, indem Sie darauf malen.</s:String>\r\n\r\n    <!--Editor • Transitions-->\r\n    <s:String x:Key=\"S.Transitions.Length\">Übergangslänge</s:String>\r\n    <s:String x:Key=\"S.Transitions.Delay\">Übergangsdauer</s:String>\r\n    <s:String x:Key=\"S.Transitions.FadeTo\">Ausblenden zu …</s:String>\r\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Nächster Frame</s:String>\r\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Farbe</s:String>\r\n    <s:String x:Key=\"S.Transitions.Color\">Farbpalette</s:String>\r\n    <s:String x:Key=\"S.Transitions.Info\">Der Effekt wird zwischen dem markierten und dem darauffolgenden Frame hinzugefügt.</s:String>\r\n\r\n    <!--Editor • Save as-->\r\n    <s:String x:Key=\"S.SaveAs.Type\">Dateityp</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Das Format der Ausgabedatei.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Die Exportvoreinstellung, die alle aktuell angezeigten Einstellungen enthält.&#10;Verwalten Sie Ihre Exportvoreinstellungen über die nachfolgenden Schaltflächen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Animierte Grafik</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Frames</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Weitere</s:String>\r\n\r\n    <s:String x:Key=\"S.SaveAs.Apng\">APNG</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Gif\">GIF</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Webp\">WebP</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\r\n    \r\n    <s:String x:Key=\"S.SaveAs.Avi\">AVI</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Mkv\">MKV</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Mov\">MOV</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime-Dateiformat</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Mp4\">MP4</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">MPEG-4</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Webm\">WebM</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\r\n    \r\n    <s:String x:Key=\"S.SaveAs.Bmp\">BMP</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Jpeg\">JPEG</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Png\">PNG</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\r\n\r\n    <s:String x:Key=\"S.SaveAs.Project\">Projekt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif-Projekt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop-Datei</s:String>\r\n    \r\n    <!--Editor • Save as > Presets-->\r\n    <s:String x:Key=\"S.SaveAs.Presets\">Voreinstellungen:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Standard</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Neue Exportvoreinstellung hinzufügen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Aktuelle Einstellungen in dieser Exportvoreinstellung speichern.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Allgemeine Einstellungen der Exportvoreinstellung bearbeiten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Aktuell ausgewählte Exportvoreinstellung entfernen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Einstellungen dieser Exportvoreinstellung auf die Standardwerte zurücksetzen.</s:String>\r\n    \r\n    <!--Editor • Save as > Presets > Dialogs-->\r\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Voreinstellung löschen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Möchten Sie die Voreinstellung wirklich löschen?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Diese Aktion kann nicht widerrufen werden.&#10;&#10;Möchten Sie die ausgewählte Voreinstellung wirklich löschen?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Voreinstellung zurücksetzen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Möchten Sie die Voreinstellung wirklich zurücksetzen?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Diese Aktion kann nicht widerrufen werden.&#10;&#10;Möchten Sie die ausgewählte Voreinstellung wirklich auf die Standardeinstellungen zurücksetzen?</s:String>\r\n\r\n    <!--Editor • Save as > Encoder-->\r\n    <s:String x:Key=\"S.SaveAs.Encoder\">Umwandlung</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Umwandlung und Quantisierung</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Umwandlung, die für die Erzeugung der Ausgabedatei verantwortlich ist.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Integrierte Umwandlung.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT • GIF-Encoder</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">System</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Vom System zur Verfügung gestellte Umwandlung.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Externe Umwandlung, bereitgestellt von FFmpeg.org.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Externe Umwandlung, bereitgestellt von Gif.ski.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Umwandlungsoptionen</s:String>\r\n\r\n    <!--Editor • Save as > FFmpeg-->\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Erweiterten Modus aktivieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Parameter zur Steuerung der Umwandlung manuell eingeben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parameter:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Liste der Parameter, die an FFmpeg übergeben werden.&#10;&#10;Spezielle Parameter:&#10;{I} entspricht dem Eingabepfad (der Frames).&#10;{O} entspricht dem Ausgabepfad (der exportierten Datei).&#10;{W} entspricht der Breite des Frames.&#10;{H} entspricht der Höhe des Frames.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Um mit 2 Durchgängen umzuwandeln, fügen Sie einfach „-pass 2” hinzu.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Vorschau</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Vorschau der Parameterliste, die an FFmpeg übergeben wird.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codec-Dokumente</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format-Dokumente</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filter-Dokumente</s:String>\r\n    \r\n    <!--Editor • Save as > Gif options-->\r\n    <s:String x:Key=\"S.SaveAs.GifOptions\">GIF-Einstellungen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Algorithmus zur Farbreduzierung (Quantisierung)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neuronales Netzwerk</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Originalgetreue Quantisierung. Langsamer, aber gut für eine höhere Anzahl von Farben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Gut für Animationen mit weniger Farben. Schneller, kann aber Farbbänder erzeugen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median-Schnitt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Weniger gut als Octree und langsamer.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Graustufen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Verwendet eine feste Graustufenpalette, daher ist es viel schneller.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Meist verwendete Farben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Übernimmt einfach die am häufigsten verwendeten Farben in den Einzelbildern.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling-Faktor:&#10;Ein Wert von 1 führt zu einer besser aussehenden GIF-Animation, aber es wird langsamer berechnet.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Qualität:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Farben:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maximale Anzahl von Farben (für jeden Frame)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Allgemeine Farbtabelle verwenden</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Kann die Qualität und/oder Größe der GIF-Animation verringern.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Beste</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Schnellste</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Ein noch schnelleres Umwandlungsverfahren verwenden.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Kann die Qualität der GIF-Dateien verringern.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Wiederholung:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Wiederholtes GIF</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Endlosschleife</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Anzahl Wiederholungen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Transparenz ermöglichen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Aktiviert den vollständigen Transparenzmodus, der den Hintergrund der GIF-Animation vollständig transparent werden lässt.&#10;Der Prozess der Chroma-Key-Ersetzung wird ignoriert, wenn diese Option aktiviert ist.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Auswählen, welche Farbe als transparent angezeigt werden soll.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Wenn eine Farbe ausgewählt wird, wird sie in transparent umgewandelt und wird in der erstellten GIF-Datei als transparent dargestellt.&#10;Wenn keine Farbe ausgewählt ist, werden alle transparenten Farben (Alpha = 0 %) normal transparent angezeigt.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Unveränderte Pixel erkennen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Durch die Analyse und Erkennung unveränderter Pixel zwischen den&#10;Einzelbildern wird es möglich sein, nur die notwendigen Teile in der GIF-Datei zu speichern.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Diese Pixel durch einen Chroma-Key ersetzen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Wiederholte/unveränderte Pixel werden durch diesen Chroma-Key ersetzt,&#10;wodurch es möglich ist, weniger Farben pro Einzelbild zu verwenden.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma-Key:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Farbmischung:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer Scale:</s:String>\r\n\r\n    <!--Editor • Save as > KGy SOFT options-->\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantisierer</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Hintergrundfarbe:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixel mit Alpha (Transparenz), die vom ausgewählten Quantisierer als undurchsichtig angesehen werden, werden mit dieser Farbe gemischt, bevor sie die quantisierte Farbe erhalten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alpha-Schwellenwert:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Bestimmt den eingegebenen Alphawert, unter dem die quantisierte Farbe transparent ist.&#x0d;&#x0a;Wenn 0, dann ist das Ergebnis nie transparent.&#x0d;&#x0a;Wenn 255, dann werden nur vollständig transparente Pixel als transparent angesehen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Weißer Schwellenwert:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Legt die niedrigste Eingangshelligkeit fest, bei der die Ergebnisfarbe als weiß angesehen wird.&#x0d;&#x0a;Ein Fehlerdiffusions-Dithering kann den Wert dieses Parameters jedoch kompensieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Direkte Zuweisung</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Wenn diese Option aktiviert ist, wird die quantisierte Farbe durch eine direkte Zuordnung bestimmt, anstatt den nächstgelegenen Paletteneintrag aufzusuchen.&#x0d;&#x0a;Dies beschleunigt die Quantisierung, kann aber zu einem höheren Kontrast führen. Ein Fehlerdiffusions-Dithering kann den Wert dieses Parameters jedoch ausgleichen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Größe der Palette:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Bestimmt die maximale Größe der Palette je Einzelbild.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Benutzerdefinierte Bit-Ebene.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Wenn das Häkchen gesetzt ist, kann die Bitebene manuell konfiguriert werden.&#x0d;&#x0a;⚠️ Achtung: Die höchste Bit-Stufe kann sehr viel Speicherplatz beanspruchen!</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Ein höherer Wert bedeutet eine höhere Genauigkeit, einen größeren Zielfarbraum, eine langsamere Verarbeitung und einen größeren Speicherbedarf.&#x0d;&#x0a;Wenn z. B. 1, dann kann das Ergebnis nicht mehr als 8 Farben haben, oder wenn 2, nicht mehr als 64 Farben. &#x0d;&#x0a;Bei Octree- und Wu-Quantisierern wirkt sich dies auch auf die maximale Anzahl der monochromen Farbtöne aus.&#x0d;&#x0a;Wenn z. B. 5 (was die Voreinstellung für den Wu-Quantisierer ist), können nur 32 monochrome Farbtöne unterschieden werden.&#x0d;&#x0a;⚠️ Achtung: Der Wu-Quantisierer verbraucht beim höchsten Wert mindestens 650 MB.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">Linearer Farbraum</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">Wenn diese Option aktiviert ist, werden einige Operationen (Alpha-Blending mit Hintergrundfarbe, Quantisierung, Dithering, Suche nach den nächstgelegenen Farben in der Palette) im linearen Farbraum statt im sRGB-Farbraum durchgeführt.&#x0d;&#x0a;Die Arbeit im linearen Farbraum ist langsamer, liefert aber ein qualitativ besseres Ergebnis, insbesondere wenn der Quantisierer nur wenige Farben verwendet.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Hinweis: Bei der Verwendung von nur wenigen Farben kann die Helligkeit einer möglicherweise geänderten Vorschau falsch sein, da WPF die Größenänderung im sRGB-Farbraum durchführt.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Schwarz und weiß</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Feste 1-BPP-Palette mit schwarzen und weißen Farben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Graustufen - 4 Farben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Feste 2-BPP-Palette mit 4 Graustufeneinträgen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Graustufen - 16 Farben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Feste 4-BPP-Palette mit 16 Graustufeneinträgen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Graustufen - 256 Farben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Feste 8-BPP-Palette mit 256 Graustufeneinträgen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Systemvorgabe - 4-BPP-Palette</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Feste 4-BPP-Palette unter Verwendung der standardmäßigen 16 sRGB-Farben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Systemvorgabe - 8-BPP-Palette</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Feste 8-BPP-Palette einschließlich der „websicheren” Farben und der Transparenz.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB - 332 Farbpalette</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Feste 8-BPP-Palette unter Verwendung des RGB 332-Farbraums.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree-Quantisierer</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Optimierung der Palette für jedes Einzelbild mit dem Octree-Algorithmus.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median-Cut-Quantisierer</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimierung der Palette für jedes Einzelbild mit dem Algorithmus „Median Cut”.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu-Quantisierer</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Optimierung der Palette für jedes Einzelbild mit dem Algorithmus von Xiaolin Wu.</s:String>\r\n\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Ditherer</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Stärke:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">Die Stärke des Dithers, oder 0, um die Stärke automatisch zu kalibrieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Seed:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Ein ganzzahliger Seed, der verwendet wird, um ein bestimmtes zufälliges Dithering-Muster zu erzeugen.&#x0d;&#x0a;Leer lassen, um einen zufälligen Seed für jedes Einzelbild zu verwenden.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Kein</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Die Einzelbilder werden ohne Dithering quantisiert.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentinen-Verarbeitung</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Wenn diese Option aktiviert ist, wird die Fehlerausbreitungsrichtung von Zeile zu Zeile geändert.&#x0d;&#x0a;Dies trägt dazu bei, den Ripple-Effekt des Fehlerdiffusions-Ditherings zu verringern.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (geordnet)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">Das 2x2-Bayer-Matrixmuster.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (geordnet)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">Das 3x3-Bayer-Matrixmuster.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (geordnet)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">Das 4x4-Bayer-Matrixmuster.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (geordnet)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">Das 8x8-Bayer-Matrixmuster.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Gepunkteter Halbton (geordnet)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Eine 8x8-Matrix mit einem gepunkteten Halbtonmuster.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blaues Rauschen (geordnet)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Eine 64x64-Matrix mit einem blauen Rauschmuster.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Die 4x3-Matrix von Bill Atkinson mit 6 effektiven Werten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">Die 5x2-Matrix von D. Burkes.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">Die ursprüngliche 3x2-Matrix von Floyd und Steinberg.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Eine 5x3-Matrix von Jarvis, Judice und Ninke.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Die 5x3-Matrix von Frankie Sierra.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Die 5x2-Matrix von Frankie Sierra.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Die 3x2-Matrix von Frankie Sierra.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Eine 7x4 hexagonale Matrix von Stevenson und Arce.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Fehlerdiffusion)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Die 5x3-Matrix von Stucki.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Zufälliges Rauschen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Zufälliges weißes Rauschen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Überlagertes Farbverlauf-Rauschen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Nicht zufälliges Farbverlauf-Rauschen, das durch eine Berechnung erzeugt wird.</s:String>\r\n\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Vorschau</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Aktuelles Einzelbild anzeigen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Wenn diese Option aktiviert ist, zeigt die Vorschau das aktuelle Einzelbild anstelle eines Standardbildes.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Die automatische Vorschau wurde aufgrund des hohen Speicherbedarfs der aktuellen Einstellungen deaktiviert. Anklicken, um die Vorschau zu aktualisieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Vorschau konnte nicht erstellt werden: {0}&#x0d;&#x0a;Anklicken, um die Vorschau erneut zu erzeugen.</s:String>\r\n\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Animations-Einstellungen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Endlosschleife</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Wenn diese Option aktiviert ist, wird die Animation in einer unendlichen Schleife wiederholt.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Vor und zurück.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Wenn diese Option aktiviert ist, wird die Animation vorwärts und rückwärts abgespielt.&#x0d;&#x0a;Dies wird durch die Duplizierung der Bilder erreicht, was eine größere Dateigröße und eine längere Umwandlungszeit bedeutet.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Wiederholungen:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Gibt an, wie oft die Animation wiedergegeben werden soll.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Delta-Frames zulassen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Wenn diese Option aktiviert ist, wird versucht, unveränderte Pixel während der Umwandlung zu erkennen.&#x0d;&#x0a;Bei Verwendung eines optimierten Quantisierers ermöglicht diese Option, dass ein Bild mehr als 256 Farben hat.&#x0d;&#x0a;⚠️ Hinweis: Diese Option wird ignoriert, wenn der Quantisierer keine Transparenz verwendet und „Abgeschnittene Frames zulassen” nicht markiert ist.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta-Toleranz:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Gibt die maximale Toleranz bei der Erkennung veränderter Pixel an.&#x0d;&#x0a;Wenn 0, dann wird überhaupt kein Unterschied toleriert.&#x0d;&#x0a;Wenn 255, dann gibt es möglicherweise Einzelbilder (oder sogar alle), die ohne Inhalt hinzugefügt werden.&#x0d;&#x0a;Ein sinnvoller Bereich liegt zwischen 0 und 16 für einen optimierten Quantisierer. Diejenigen mit festen Farben können mit etwas größeren Werten mit Dithering verwendet werden.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Wenn die Delta-Toleranz zu hoch festgelegt ist, kann das Ergebnis von schlechter Qualität sein. Anklicken, um Delta-Toleranz zurückzusetzen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Abgeschnittene Frames zulassen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Wenn diese Option aktiviert ist, darf der Encoder kleinere Einzelbilder als die tatsächliche Auflösung hinzufügen.&#x0d;&#x0a;Wenn „Delta-Frames zulassen” nicht angekreuzt ist, wird nur das Beschneiden möglicher transparenter Ränder zugelassen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">„Delta-Frames zulassen” wird ignoriert, da die aktuelle Konfiguration kein Alpha verwendet und „Abgeschnittene Frames zulassen” nicht ausgewählt ist. Anklicken, um abgeschnittene Frames zu aktivieren. „Delta-Frames zulassen” wird ignoriert, da die aktuelle Konfiguration kein Alpha verwendet und „Abgeschnittene Frames zulassen” nicht ausgewählt ist. Anklicken, um abgeschnittene Frames zu aktivieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">„Abgeschnittene Frames zulassen” hat keine Auswirkung, da die aktuelle Konfiguration kein Alpha verwendet und „Delta-Frames zulassen” nicht ausgewählt ist. Anklicken, um Delta-Frames zu aktivieren.</s:String>\r\n\r\n    <!--Editor • Save as > Apng options-->\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">APNG-Einstellungen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Vorausberechnung:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Keine</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Oben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Durchschnitt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Gemischt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">APNG-Schleife.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Unveränderte Pixel erkennen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Unveränderte Pixel transparent darstellen.</s:String>\r\n\r\n    <!--Editor • Save as > Webp options-->\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Voreinstellung:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Keine</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Standard</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Grafik</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Foto</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Zeichnung</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Symbol</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Text</s:String>\r\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Verlustfreien Modus verwenden</s:String>\r\n\r\n    <!--Editor • Save as > Video options-->\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Modus:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Erweitert</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Methode zum Konfigurieren der Umwandlungsparameter:&#10;Normal: Standard-UI-Steuerelemente verwenden.&#10;Erweitert: Textfeld verwenden, um die Parameter einzugeben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">Die Video-Umwandlung, die für&#10;die Umwandlung der unbearbeiteten Pixel in die Ausgabedatei verantwortlich ist.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Voreinstellung:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Keine</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Sehr langsam</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Langsamer</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Langsam</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Mittel</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Schnell</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Schneller</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Sehr schnell</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Superschnell</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Am schnellsten</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Qualität</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Ausgewogen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Geschwindigkeit</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Standard</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Verlustfrei</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Verlustfrei (hohe Leistung)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Hohe Leistung</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Hohe Qualität</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Blu-ray-Disc</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Geringe Latenzzeit</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Geringe Latenzzeit (hohe Leistung)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Geringe Latenzzeit (hohe Qualität)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Umwandlungsgeschwindigkeit zu Kompressionsverhältnis, &#10;langsamere Voreinstellungen können eine bessere Kompression ergeben&#10;(Qualität pro Dateigröße).</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardwarebeschleunigung:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Aus</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Ein</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatisch auswählen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Steuert die Verwendung von dedizierter Hardware (Videografik).&#10;Aus: Verwendet keine dedizierte Hardware.&#10;Ein: Verwendet dedizierte Hardware und ermöglicht die Auswahl spezieller Umwandlungsmethoden.&#10;Auto: Verwendet dedizierte Hardware und wählt automatisch die richtige Umwandlungsmethode, wenn möglich.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixelformat:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatisch</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Video-Sync-Methode.&#10;Auto: Wählt zwischen 1 und 2 je nach Muxer-(Format-)Fähigkeiten.&#10;Durchleiten: Jeder Grafik wird mit seinen Zeitstempeln an die Umwandlung weitergegeben.&#10;Konstant: Frames werden dupliziert und verworfen, um genau die gewünschte konstante Framerate zu erreichen.&#10;Variabel: Frames werden mit ihrem Zeitstempel durchgeleitet oder verworfen, um zu verhindern, dass 2 Frames den gleichen Zeitstempel erhalten.&#10;Verwerfen: Wie „Durchleiten”, aber alle Zeitstempel werden entfernt, so dass bei der Umwandlung neue Zeitstempel, basierend auf der Framerate, erstellt werden.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Durchleiten</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Konstante Bildwiederholrate</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Variable Bildwiederholrate</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Verwerfen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Bildwiederholrate:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Benutzerdefiniert</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Übergeben:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Konstanter Ratenfaktor.&#10;Einstellung der Qualitäts- und Ratenkontrolle.&#10;Leer lassen, wenn Sie diese Eigenschaft nicht verwenden möchten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Qualitätsstufe:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Kleinere Werte bedeuten bessere Qualität.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Ziel-Video-Bitrate</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitraten-Modus:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Konstant</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variabel</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Minimale Bitrate:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimale Bitratentoleranz&#10;Am nützlichsten bei Verwendung des CBR-Modus.&#10;Leer lassen oder auf Null setzen,&#10;wenn Sie diese Eigenschaft nicht verwenden möchten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Maximale Bitrate:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximale Bitratentoleranz&#10;Erfordert außerdem die Einstellung der Puffergröße.&#10;Leer lassen oder auf Null setzen,&#10;wenn Sie diese Eigenschaft nicht verwenden möchten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Puffergröße:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Ratensteuerungs-Puffergröße&#10;Leer lassen oder auf Null setzen,&#10;wenn Sie diese Eigenschaft nicht verwenden möchten.</s:String>\r\n\r\n    <!--Editor • Save as > Image options-->\r\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Grafiken als Zip-Datei speichern</s:String>\r\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exportiert die Aufnahmen in einen komprimierten Ordner.</s:String>\r\n\r\n    <!--Editor • Save as > Psd options-->\r\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Grafik komprimieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Komprimiert die Grafikdaten mit dem RLE-Algorithmus.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Daten der Zeitleiste speichern</s:String>\r\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exportiert zusätzlich Zeitdaten der Frames.</s:String>\r\n\r\n    <!--Editor • Save as > Save options-->\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Exporteinstellungen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Teilweise exportieren</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Datei in ausgewählten Ordner speichern</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Überschreiben?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Warnen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Nur warnen, wenn eine Datei mit demselben Namen vorhanden ist.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Bestätigen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Nachfragen, ob der Benutzer die Datei überschreiben möchte.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Erlauben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Die Datei wird einfach überschrieben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Auch als Projekt speichern (gleicher Ordner, gleicher Dateiname)</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Datei hochladen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">In Zwischenablage kopieren</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Datei</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Kopiert Ausgabedatei in Zwischenablage</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Ordnerpfad</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Kopiert Ordnerpfad der Ausgabedatei in die Zwischenablage</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Dateipfad</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Kopiert Dateipfad der Ausgabedatei in Zwischenablage</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Kopiert den durch Upload-Service erzeugten Link in Zwischenablage</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Weitere Umwandlungsbefehle ausführen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Befehle eingeben, die nach dem Umwandeln ausgeführt werden sollen.&#x0a;Wenn mehrere Befehle ausgeführt werden sollen, bitte einen Befehl pro Zeile eingeben.&#x0a;Makros:&#x0a;{p} = Dateiausgabepfad&#x0a;{f} = Ordnerausgabepfad&#x0d;{u} = URL der hochgeladenen Datei</s:String>\r\n    \r\n    <!--Editor • Save as > Partial export-->\r\n    <s:String x:Key=\"S.SaveAs.Partial\">Teilweise exportieren</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Modus:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Methode für den Teilexport auswählen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Ausdruck</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exportiert Teile der Animation basierend auf einem einfachen Ausdruck.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Frame-Bereich</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exportiert nur einen Teil der Animation innerhalb des Frame-Bereichs.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Zeitbereich</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exportiert nur einen Teil der Animation innerhalb des Zeitbereichs.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Auswahl</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exportiert nur die in der Zeitleiste ausgewählten Einzelbilder.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Keine Einzelbilder ausgewählt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 Einzelbild ausgewählt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} Einzelbilder ausgewählt</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Von:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Bis:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Ausdruck:</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Geben Sie durch ein Komma getrennte Einzelbildnummern oder&#10;durch ein Minuszeichen getrennte Einzelbildfolgen ein:&#10;1, 3, 4, 6 - 9</s:String>\r\n\r\n    <!--Editor • Save as > File-->\r\n    <s:String x:Key=\"S.SaveAs.File\">Speicherort und Dateiname</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Location\">Zielordner</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Ausgabeordner auswählen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Ordner auswählen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Format\">Dateiformat</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Name\">Dateiname. Datum-/Zeitangabe zwischen „?” einfügen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animation</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Dateinummer erhöhen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Dateinummer verringern</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Datei mit gleichem Namen existiert bereits.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">In die Zwischenablage speichern</s:String>\r\n\r\n    <!--Editor • Save as > Warnings-->\r\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Bitte Speicherort auswählen (Ordner, Zwischenablage oder Hochladen).</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Dateierweiterung muss ausgewählt werden</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Wenn Sie den erweiterten Modus auswählen, müssen Sie die Parameter in das Parameterfeld eingeben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Die speziellen Parameter {I} (Eingang) und/oder {O} (Ausgang) fehlen im Parameterfeld.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Um einen Befehl auszuführen, bitte diesen in das Eingabefeld eintragen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Es muss mindestens ein Einzelbild ausgewählt werden, wenn Sie die Option „nur ausgewählte Bilder exportieren” nutzen möchten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">Der Ausdruck zum teilweisen Exportieren des Projekts ist ungültig.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Kein Upload-Dienst ausgewählt. Bitte ein Upload-Ziel bestimmen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Sie können den gewählten Dienst nicht verwenden, weil er nicht autorisiert wurde. Gehen Sie zu „Einstellungen” ➜ „Cloud-Dienste”, um dieses Programm zu autorisieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Option „Link kopieren” kann nicht ausgeführt werden, weil „Datei hochladen” nicht gewählt wurde.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Ausgabeordner wählen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Ausgabeordner existiert nicht.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Name des Ausgabeordners beinhaltet mindestens ein ungültiges Zeichen. Bitte wählen Sie einen gültigen Ordnernamen aus.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Dateinamen eingeben.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Name der Ausgabedatei beinhaltet mindestens ein ungültiges Zeichen. Bitte wählen Sie einen gültigen Dateinamen aus.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Dateiname ist bereits vorhanden. Stellen Sie das Überschreiben ein oder benennen Sie die Datei um.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Es gibt bereits ein Projekt mit demselben Dateinamen. Überschreiben Sie es oder wählen Sie einen anderen Dateinamen oder Ordner.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Vorgang wurde abgebrochen.</s:String>\r\n    \r\n    <!--Editor • Save as > Upload-->\r\n    <s:String x:Key=\"S.SaveAs.Upload\">Hochladen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Wählen Sie die Voreinstellung für das Hochladen aus, die Details über den für das Hochladen verwendeten Dienst enthält.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Dieser Upload-Dienst unterliegt Einschränkungen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Neue Upload-Voreinstellung hinzufügen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Voreinstellung für das Hochladen bearbeiten.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Verlauf der hochgeladenen Daten mit dieser Voreinstellung anzeigen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Aktuell ausgewählte Upload-Voreinstellung entfernen.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Upload-Voreinstellung auswählen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Aus dieser Liste auswählen</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Keine Voreinstellung für das Hochladen für dieses Format verfügbar</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Voreinstellung durch Drücken der nachfolgenden Schaltfläche unten hinzufügen.</s:String>\r\n    \r\n    <!--Editor • Save as > Upload > Dialogs-->\r\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Voreinstellung für das Hochladen wird gelöscht</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Möchten Sie die Voreinstellung für das Hochladen wirklich löschen?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Diese Aktion kann nicht widerrufen werden.&#10;&#10;Möchten Sie die ausgewählte Upload-Voreinstellung wirklich löschen?</s:String>\r\n\r\n    <!--Save as • Dialogs-->\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Frames exportieren</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Möchten Sie die Frames wirklich exportieren?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Diese Aktion wird {0} Frames direkt in den ausgewählten Ordner exportieren.</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Überschreiben</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Möchten Sie die Datei überschreiben?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Eine Datei mit dem Namen „{0}” ist bereits in diesem Ordner vorhanden. Soll sie überschrieben werden?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Möchten Sie die Dateien überschreiben?</s:String>\r\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Eine oder mehrere Dateien mit demselben Namen sind bereits in diesem Ordner vorhanden. Sollen sie überschrieben werden?</s:String>\r\n\r\n    <!--Command Preview-->\r\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Befehlsvorschau</s:String>\r\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Befehl</s:String>\r\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Eingabepfad</s:String>\r\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Ausgabepfad</s:String>\r\n    \r\n    <!--Feedback-->\r\n    <s:String x:Key=\"S.Feedback.Feedback\">Rückmeldung</s:String>\r\n    <s:String x:Key=\"S.Feedback.Send\">Senden</s:String>\r\n    <s:String x:Key=\"S.Feedback.Preview\">Vorschau</s:String>\r\n    <s:String x:Key=\"S.Feedback.Header\">Rückmeldung senden</s:String>\r\n    <s:String x:Key=\"S.Feedback.Title\">Titel</s:String>\r\n    <s:String x:Key=\"S.Feedback.Message\">Nachricht</s:String>\r\n    <s:String x:Key=\"S.Feedback.Message.Info\">Wenn Sie einen Fehler finden, vergessen Sie nicht, Schritt für Schritt zu erklären, wie es zu diesem Fehler gekommen ist.</s:String>\r\n    <s:String x:Key=\"S.Feedback.Type\">Art der Rückmeldung</s:String>\r\n    <s:String x:Key=\"S.Feedback.Suggestion\">Vorschlag</s:String>\r\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problem/Fehler</s:String>\r\n    <s:String x:Key=\"S.Feedback.YourEmail\">E-Mail-Adresse</s:String>\r\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Sie müssen Titel eingeben.</s:String>\r\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Sie müssen Inhalt eingeben.</s:String>\r\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Sie müssen Ihre E-Mail-Adresse eingeben, um eine Antwort vom Entwickler erhalten zu können.</s:String>\r\n    <s:String x:Key=\"S.Feedback.Sending\">Vielen Dank. Ihre Rückmeldung wird gesendet. Fenster schließt sich automatisch.</s:String>\r\n    <s:String x:Key=\"S.Feedback.Attachments\">Anhänge (optional, maximal 20 MB)</s:String>\r\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Datei(en) anhängen</s:String>\r\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Anhänge entfernen</s:String>\r\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Bitte schreiben Sie mir in Englisch</s:String>\r\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">oder Portugiesisch (brasilianisch und europäisch).</s:String>\r\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Folgende Informationen (und Anhänge) werden verschickt.</s:String>\r\n    \r\n    <!--Troubleshoot-->\r\n    <s:String x:Key=\"S.Troubleshoot.Title\">Fehlersuche</s:String>\r\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Fehlt ein Fenster?</s:String>\r\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Sollte ein Fenster (außerhalb des Bildschirms) fehlen,&#10;bitte dessen Position durch Klick auf unten stehende Option zurücksetzen.</s:String>\r\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Aktuelle Position aller Fenster:</s:String>\r\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Position aller Fenster beim nächsten Öffnen:</s:String>\r\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Alle Fenster zum Hauptmonitor verschieben</s:String>\r\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Position aller Fenster zurücksetzen</s:String>\r\n   \r\n    <!--FontStyles-->\r\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\r\n    <s:String x:Key=\"S.FontStyles.Italic\">Kursiv</s:String>\r\n    <s:String x:Key=\"S.FontStyles.Oblique\">Schräg</s:String>\r\n    \r\n    <!--FontWeight-->\r\n    <s:String x:Key=\"S.FontWeights.Black\">Schwarz</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Bold\">Fett</s:String>\r\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Halbfett</s:String>\r\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra schwarz</s:String>\r\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra fett</s:String>\r\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra schmal</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Heavy\">Sehr fett</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Light\">Schmal</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Medium\">Mittel</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Regular\">Standard</s:String>\r\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Halbfett</s:String>\r\n    <s:String x:Key=\"S.FontWeights.Thin\">Schmal</s:String>\r\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra schwarz</s:String>\r\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra fett</s:String>\r\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra schmal</s:String>\r\n    \r\n    <!--VerticalAlignment-->\r\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Oben</s:String>\r\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Mitte</s:String>\r\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Unten</s:String>\r\n    <s:String x:Key=\"S.Alignment.Stretch\">Dehnen</s:String>\r\n\r\n    <!--HorizontalAlignment-->\r\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Links</s:String>\r\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Mitte</s:String>\r\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Rechts</s:String>\r\n    \r\n    <!--Orientation-->\r\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\r\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertikal</s:String>\r\n\r\n    <!--TextAlignment-->\r\n    <s:String x:Key=\"S.TextAlignment.Left\">Links</s:String>\r\n    <s:String x:Key=\"S.TextAlignment.Right\">Rechts</s:String>\r\n    <s:String x:Key=\"S.TextAlignment.Center\">Zentrieren</s:String>\r\n    <s:String x:Key=\"S.TextAlignment.Justify\">Blocksatz</s:String>\r\n\r\n    <!--TextDecoration-->\r\n    <s:String x:Key=\"S.TextDecorations.None\">Keine</s:String>\r\n    <s:String x:Key=\"S.TextDecorations.Underline\">Unterstreichen</s:String>\r\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Durchstreichen</s:String>\r\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Überstreichen</s:String>\r\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Grundlinie</s:String>\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.el.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Εντάξει</s:String>\n    <s:String x:Key=\"S.Back\">Πίσω</s:String>\n    <s:String x:Key=\"S.Cancel\">Άκυρο</s:String>\n    <s:String x:Key=\"S.Yes\">Ναι</s:String>\n    <s:String x:Key=\"S.No\">Οχι</s:String>\n    <s:String x:Key=\"S.Add\">Προσθήκη</s:String>\n    <s:String x:Key=\"S.Edit\">Επεξεργασία</s:String>\n    <s:String x:Key=\"S.Id\">Αναγνωριστικό</s:String>\n    <s:String x:Key=\"S.Title\">Τίτλος</s:String>\n    <s:String x:Key=\"S.Description\">Περιγραφή</s:String>\n    <s:String x:Key=\"S.SelectColor\">Κάντε κλικ εδώ για να επιλέξετε το χρώμα.</s:String>\n    <!--<s:String x:Key=\"S.Documentation\">Click to navigate to the documentation.</s:String>-->\n    <s:String x:Key=\"S.Suppress\">Καταστολλή</s:String>\n    <s:String x:Key=\"S.Preview\">Προεπισκόπηση</s:String>\n    <s:String x:Key=\"S.Size\">Μέγεθος</s:String>\n    <s:String x:Key=\"S.Background\">Φόντο</s:String>\n    <s:String x:Key=\"S.Color\">Χρώμα:</s:String>\n    <s:String x:Key=\"S.Delay\">Καθυστέρηση</s:String>\n    <s:String x:Key=\"S.DelayMs\">Καθυστέρηση:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Τιμή -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Τιμή κλίμακας:</s:String>\n    <s:String x:Key=\"S.Margin\">Περιθώριο:</s:String>\n    <s:String x:Key=\"S.Padding\">Γέμισμα:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Ελάχ. ύψος:</s:String>\n    <s:String x:Key=\"S.AndOr\">και/ή</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Ωχ, όχιιιι, η εφαρμογή κράσαρε :(</s:String>\n    <s:String x:Key=\"S.Required\">Υποχρεωτικό πεδίο</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Επιτρέπεται μόνο ένα περιστατικό</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Η εφαρμογή εκτελείται ήδη</s:String>\n    <!--<s:String x:Key=\"S.Warning.Single.Message\">Το ScreenToGif εκτελείται ήδη, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>-->\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Αποθήκευση των ρυθμίσεων</s:String>\n    <!--<s:String x:Key=\"S.SavingSettings.Instruction\">Would you like to try to save it again?</s:String>-->\n    <!--<s:String x:Key=\"S.SavingSettings.Message\">Looks like ScreenToGif does not have enough privileges to save the settings to the disk.&#10;&#10;Would you like to try again, but this time using administrative privileges?</s:String>-->\n    \n    <s:String x:Key=\"S.Exiting.Title\">Έξοδος από το ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Είστε βέβαιοι ότι θέλετε να βγείτε?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Όλα τα παράθυρα θα κλείσουν και το εικονίδιο στην γραμμή εργασιών θα αφαιρεθεί.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Title\">Switch Graphics Adapter</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Switch to the correct graphics adapter to capture the selected screen</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Due to a limitation in DirectX, ScreenToGif must be running on the same graphics adapter as the screen being captured.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Switch the graphics adapter set for ScreenToGif by opening Windows Settings > System > Display > Graphics Settings, or by clicking on the link below.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Switch the graphics adapter for ScreenToGif by opening the graphics settings of your graphics adapter.</s:String>-->\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Άνοιγμα ρυθμίσεων των Windows</s:String>\n    \n    <!--Keys-->\n    <!--<s:String x:Key=\"S.Keys.Enter\">Enter</s:String>-->\n    <!--<s:String x:Key=\"S.Keys.Esc\">Esc</s:String>-->\n    <s:String x:Key=\"S.Keys.Space\">Διάστημα</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Δεξί κλικ</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Νέα εγγραφή οθόνης</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Νέα εγγραφή κάμερας web</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Νέα εγγραφή πίνακα</s:String>\n    <s:String x:Key=\"S.Exit\">Έξοδος</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Νέα εγγραφή οθόνης</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Νέα εγγραφή κάμερας web</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Νέα εγγραφή πίνακα</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Νέα κίνηση</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Εισαγωγή εγγραφής οθόνης</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Εισαγωγή εγγραφής κάμερας web</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Εισαγωγή εγγραφής πίνακα</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Εισαγωγή από μέσο (εικόνες και βίντεο)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Αποθήκευση ως...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Φόρτωση αρχειων (εικόνες, βίντεο και έργα)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Φόρτωση πρόσφατων έργων</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Απόρριψη τρέχοντος έργου</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Παράκαμψη καθυστέρησης καρέ</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Αύξηση/Μείωση καθυστέρησης των καρέ</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Καθυστέρηση κλίμακας πλαισίωνs</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Ορισμός ζουμ σε 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Προσαρμογή του παραθύρου στο μέγεθος του καρέ</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Προσαρμόστε την εικόνα στο διαθέσιμο μέγεθος παραθύρου</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Επιλογή του πρώτου καρέ</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Επιλογή του προηγούμενου καρέ</s:String>\n    <s:String x:Key=\"S.Command.Play\">Αναπαραγωγή της κίνησης</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Επιλογή του επόμενου καρέ</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Επιλογή του τελευταίου καρέ</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Αναίρεση</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Επανάληψη</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Αναίρεση όλων των αλλαγών στο έργο</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Αντιγράψτε τα επιλεγμένα καρέ και αποθηκεύστε τα στο πρόχειρο</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Κόψτε τα επιλεγμένα πλαίσια και αποθηκεύστε τα στο πρόχειρο</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Επικόλληση των καρέ από το πρόχειρο</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Διαγραφή όλων των επιλεγμένων καρέ</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Διαγραφή όλων των προηγούμενων καρέ</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Διαγραφή όλων των επόμενων καρέ</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Αφαίρεση διπλότυπων</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Μειώστε τον αριθμό των καρέ</s:String>\n    <!--<s:String x:Key=\"S.Command.SmoothLoop\">Create a smooth loop</s:String>-->\n    <s:String x:Key=\"S.Command.Reverse\">Αναστροφή κίνησης</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Κάνει την κίνηση προς τα εμπρός και προς τα πίσω</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Μετακίνηση των επιλεγμένων καρέ προς τα αριστερά</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Μετακίνηση των επιλεγμένων καρέ προς τα δεξιά</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Αλλαγή μεγέθους όλων των καρέ</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Περικοπή όλων των καρέ</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Αναστροφή ή περιστροφή των καρέ</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Προσθέστε μια λεζάντα</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Προσθέστε ένα κινούμενο κείμενο</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Προσθέστε ένα καρέ με τίτλο</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Εισάγει τα πλήκτρα που πατήθηκαν κατά την εγγραφή</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Σχεδιάστε ελεύθερες φόρμες</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Προσθήκη σχημάτων</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Συμβάνατα ποντικιού</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Επιλέξτε μια εικόνα και προσθέστε ως υδατογράφημα</s:String>\n    <s:String x:Key=\"S.Command.Border\">Προσθέστε περιγράμματα</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Προσθήκη σκιάς</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Απόκρυψη ευαίσθητων τμημάτων στα καρέ σας</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Χρησιμοποιήστε τα εργαλεία σχεδίασης για να επιλέξετε ποια μέρη του πλαισίου δεν πρέπει να παραμένουν στατικά καθ 'όλη τη διάρκεια της κινούμενης εικόνας</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Γραμμή προόδου ή κείμενο με λεπτομέρειες αναπαραγωγής</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Επιλογή όλων των καρέ</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navigate to frame by index</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Αναστροφή της επιλογής των καρέ</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Αποεπιλογή όλων των καρέ</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Ξεθώριασμα μετάβασης</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Κίνηση μετάβασης</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Διαγραφή όλων των ολοκληρωμένων κωδικοποιήσεων</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Μετακίνηση προς τα πάνω</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Μετακίνηση προς τα κάτω</s:String>\n    <s:String x:Key=\"S.Command.Add\">Προσθήκη</s:String>\n    <s:String x:Key=\"S.Command.Open\">Άνοιγμα</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Επεξεργασία επιλεγμένου στοιχείου</s:String>\n    <s:String x:Key=\"S.Command.Save\">Αποθήκευση επιλεγμένου στοιχείου</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Αφαίρεση επιλεγμένου στοιχείου</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Προβολή ιστορικού</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Εκκίνηση</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Καταγραφέας</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Ανοίγει τη συσκευή εγγραφής οθόνης, όπου μπορείτε εύκολα να ξεκινήσετε την εγγραφή της οθόνης σας.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Κάμερα web</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Ανοίγει τη συσκευή εγγραφής webcam.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Πίνακας</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Opens the board recorder,&#10;where you can start recording your drawings.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Επεξεργαστής</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Ανοίγει το παράθυρο του προγράμματος επεξεργασίας, το κεντρικό σημείο αυτής της εφαρμογής,&#10;όπου μπορείτε να ξεκινήσετε και να επεξεργαστείτε μια νέα εγγραφή.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Επιλογές</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Νέα έκδοση διαθέσιμη</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Λαμβάνει την πιο πρόσφατη έκδοση του ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Ενημέρωση</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Μια νέα ενημέρωση ειναι διαθέσιμη</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Νέα κυκλοφορία!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Νέα κυκλοφορία διαθέσιμη, έκδοση {0}!&#x0d;Click here for more details.</s:String>\n    <!--<s:String x:Key=\"S.Updater.NoNewRelease.Info\">It appears that your system is no longer supported or something changed in the update system. Try downloading it manually from the website.</s:String>-->\n    <s:String x:Key=\"S.Updater.Version\">Έκδοση</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Φορητή</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Πρόγραμμα εγκατάστασης</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Τι νέο υπάρχει?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Διορθώσεις σφαλμάτων:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Μια νέα έκδοση είναι διαθέσιμη για λήψη.&#x0d;Θέλετε να ανοίξετε το πρόγραμμα περιήγησης για να την κατεβάσετε?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Εκτέλεση της εφαρμογής ματά την ενημέρωση.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Λήψη</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Εγκατάσταση</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Εγκαταστήστε με μη αυτόματο τρόπο</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Λήψη...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Δεν ήταν δυνατή η εμφάνιση των λεπτομερειών λήψης.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Δεν ήταν δυνατή η λήψη της ενημέρωσης.</s:String>\n    <!--<s:String x:Key=\"S.Updater.Warning.Encoding\">You need to wait for all encodings to finish before updating.</s:String>-->\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Λήψη</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Πρόγραμμα λήψης</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} από {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Επιλογές</s:String>\n    <s:String x:Key=\"S.Options.App\">Εφαρμογή</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Καταγραφέας</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Επεξεργαστής</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Εργασίες</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Συντομεύσεις</s:String>\n    <s:String x:Key=\"S.Options.Language\">Γλώσσα</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Αποθηκευτικός χώρος</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Πρόσθετα</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Νέφος</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Δωρεά</s:String>\n    <s:String x:Key=\"S.Options.About\">Σχετικά</s:String>\n    <s:String x:Key=\"S.Options.Other\">Άλλο</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Λείπει το πλήκτρο συντόμευσης για παρακολούθηση του δρομέα</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Για να χρησιμοποιήσετε τη λειτουργία του δρομέα του ποντικιού που ακολουθεί, πρέπει να ορίσετε ένα πλήκτρο συντόμευσης για εναλλαγή όταν χρειάζεται.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Εκκίνηση</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Έναρξη μη&#10;αυτόματα</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Η εφαρμογή θα εκτελεστεί μόνο όταν το κάνετε με μη αυτόματο τρόπο.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Έναρξη με τα&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Η εφαρμογή θα εκτελεστεί μετά την εκκίνηση των Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Αδύνατη η εναλλαγή μεταξύ των τρόπων εκκίνησης.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Να επιτρέπεται μόνο μια&#x0d;μεμονωμένη περίπτωση</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Θα μπορείτε να εκτελείτε την εφαρμογή μία φορά ανά χρήστη και εκτελέσιμο,&#x0d;που σημαίνει ότι διαφορετικοί χρήστες ή εκτελέσιμες περιπτώσεις μπορούν να συνυπάρχουν.&#x0d;Όταν προσπαθείτε να εκτελέσετε ξανά την εφαρμογή, η δεύτερη περίπτωση θα προσπαθήσει να δώσει έμφαση στην πρώτη και να κλείσει.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Να επιτρέπονται πολλές&#x0d;περιπτώσεις</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Θα μπορείτε να εκτελείτε την εφαρμογή πολλές φορές ταυτόχρονα, χωρίς περιορισμούς.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Ελαχιστοποιημένη εκκίνηση στη γραμμή εργασιών.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Το εικονίδιο στη γραμμή εργασιών θα είναι ορατό ενώ αυτή η επιλογή είναι ενεργή)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Έναρξη με:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Παράθυρο εκκίνησης</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Καταγραφέας οθόνης</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Συσκευή εγγραφής webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Καταγραφικό πίνακα</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Παράθυρο επεξεργατή</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Παράθυρο που εμφανίζεται πρώτα όταν ξεκινά η εφαρμογή)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Θέμα</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Σχήμα χρωμάτων:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Πολύ ανοιχτό</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Ανοιχτό</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Μεσαίο</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Σκούρο</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Πολύ σκούρο</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Follow system</s:String>-->\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Προσαρμοσμένο</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Παράδειγμα χρωμάτων.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Εικονίδιο γραμμής εργασιών</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Εμφάνιση της εφαρμογής στη γραμμή συστήματος (περιοχή ειδοποιήσεων).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Διατηρήστε την εφαρμογή ανοιχτή ακόμη και αν όλα τα παράθυρα είναι κλειστά.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Καμία ενέργεια</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Ανοίξτε ένα παράθυρο</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Χωρίς παράθυρο</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Ελαχιστοποίηση/επαναφορά όλων των παραθύρων</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Ελαχιστοποίηση όλων των παραθύρων</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Επαναφορά όλων των παραθύρων</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Αριστερό κλικ:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Αριστερό κλικ (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Μεσαίο κλικ:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Παράθυρο:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Ή αλλιώς, ανοίγει:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Γενικά</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Λύση για το σφάλμα \"Δεν υπάρχει αρκετό όριο...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Πειραματικό)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Ρωτήστε με πριν κλείσετε την εφαρμογή (μέσω της εντολής «Έξοδος»).</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Απενεργοποίηση επιτάχυνσης υλικού.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Η διεπαφή χρήστη θα αποδοθεί μέσω της λειτουργίας λογισμικού)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Έλεγχος για ενημερώσεις μεταφράσεων.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Οι ενημερωμένες μεταφράσεις θα ληφθούν και θα εγκατασταθούν αυτόματα)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Έλεγχος για ενημερώσεις κατά την εκκίνηση.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Αυτόματη εγκατάσταση ενημερώσεων μετά το κλείσιμο της εφαρμογής.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Αναγκάστε τη λήψη της φορητής έκδοσης.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Απαιτείται μη αυτόματη εγκατάσταση αποσυνδέοντας και αντικαθιστώντας το εκτελέσιμο)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Αναγκάστε την ενημέρωση να εκτελεστεί με αυξημένα δικαιώματα.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Προτρέψτε μου πριν ξεκινήσει η εγκατάσταση.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">Download updates on metered networks.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(Allows download of updates on metered networks)</s:String>-->\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Περιβάλλον εργασίας</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Παλαιό</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Νέο</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Συχνότητα καταγραφής</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Χειροκίνητη</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Κάθε καρέ θα καταγράφεται χειροκίνητα από εσάς, πατώντας το κουμπί λήψης ή αντίστοιχη συντόμευση πληκτρολογίου.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Αλληλεπίδραση χρήστη</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Τα καρέ θα καταγράφονται κάθε φορά που κάνετε κλικ ή πληκτρολογείτε κάτι.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Κάθε δευτερόλεπτο</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Τα καρέ θα καταγράφονται με βάση «ανά δευτερόλεπτο», δεδομένου του ορισμού του framerate παρονομαστή στην οθόνη της συσκευής εγγραφής.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Κάθε λεπτό</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Τα καρέ θα καταγράφονται με \"ανά λεπτό\" (χρονοδιάγραμμα),&#10;δεδομένου του ορισμού του ρυθμού καρέ παρονομαστή στην οθόνη της συσκευής εγγραφής.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Κάθε ώρα</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Τα καρέ θα καταγράφονται με βάση «ανά ώρα» (χρονοδιάγραμμα),&#10;δεδομένου ότι ο παρονομαστής καρέ έχει οριστεί στην οθόνη της συσκευής εγγραφής.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Καθυστέρηση αναπαραγωγής:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(Σε ms, κάθε καταγεγραμμένο πλαίσιο θα ρυθμιστεί σε αυτήν την καθυστέρηση)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Trigger delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(Σε ms, each frame capture will wait this amount of time before starting)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Κάθε καρέ θα καταγράφεται σε διάστημα {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Λειτουργία καταγραφής</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Χρησιμοποιήστε την παλαιότερη μέθοδο λήψης, η οποία είναι πιο αργή και ενδέχεται να μην λειτουργεί κατά τη λήψη παιχνιδιών,&#10;αλλά δεν απαιτεί πρόσθετες προσθήκες.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Χρησιμοποιήστε τη μέθοδο λήψης του Desktop Duplication API, η οποία είναι ταχύτερη και&#10;είναι σε θέση να συλλάβει παιχνίδια πλήρους οθόνης, αλλά απαιτεί την προσθήκη SharpDx και τα Windows 8 ή νεότερα.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Αποθήκευση σε&#10;αρχείο</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Κάθε καρέ που θα ληφθεί θα αποθηκευτεί απευθείας ως εικόνα στο δίσκο.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Προσωρινή&#10;μνήμη</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Κάθε καρέ που καταγράφεται θα αποθηκευτεί ως συστοιχία pixel στη μνήμη πρώτα (μπορεί να συμπιεστεί πριν).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Συμπίεση:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Ιδανική</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Πιο αργή αλλά πιθανώς βέλτιστη συμπίεση)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Γρηγορότερα</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Ταχύτερη αλλά πιθανώς λιγότερο βέλτιστη συμπίεση)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Χωρίς συμπίεση</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Δεν πρέπει να γίνεται συμπίεση κατά τη λήψη καρέ)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Μέγεθος προσωρινής μνήμης:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(Σε MB. Αφού φτάσετε σε αυτό το μέγεθος, τα δεδομένα θα γραφτούν / θα μεταφερθούν στο δίσκο)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Αποτρέψτε την λήψη των ολόμαυρων καρέ.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Αποτρέπει την προσωρινή μνήμη BitBlt, από εσφαλμένα αποτελέσματα, όπου τα καρέ εμφανίζουν ολα τα pixel μαύρα)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Εμφάνιση του δρομέα του ποντικιού στην εγγραφή.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Επιλέξτε το χρώμα δρομέα</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Σταθερός ρυθμός καρέ.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Σταθερή καθυστέρηση που δεν αλλάζει με καθυστέρηση εγγραφής)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Εγγραφή, μόνο όταν αλλάξει κάτι.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Ένα καρέ θα ληφθεί μόνο όταν αλλάξει κάτι εντός της περιοχής λήψης)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Βελτιώστε την απόδοση λήψης σε σύνδεση απομακρυσμένης επιφάνειας εργασίας.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Απενεργοποιεί τη λήψη παραθύρου σε στρώσεις)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Επιβολή εκκαθάρισης μνήμης κατά την καταγραφή.</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduces memory usage during capture, but decreases performance)</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Κατευθυντήριες γραμμές</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Κανόνας των τρίτων</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Click to toggle the display&#10;of a rule of thirds guideline.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Σκόπευτρο</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Κάντε κλικ για εναλλαγή της οθόνης&#10;σε Κανόνα των τρίτων.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Οι οδηγίες θα εμφανίζονται μόνο κατά τη διάρκεια παύσης ή διακοπής της συσκευής εγγραφής.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Απόκρυψη της γραμμής τίτλου (thin mode).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Ενεργοποιήστε το μεγεθυντικό φακό της οθόνης.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Επιτρέπει έναν μεγεθυντικό φακό κατά την επιλογή της περιοχής εγγραφής)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Κίνηση του περιγράμματος περιοχής οθόνης κατά την επιλογή.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">Κίνηση με το στυλ \"μυρμήγκια\"</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Ενεργοποίηση επιλογής μετακίνησης.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Εμφανίζει ένα στολίδι κοντά στη γωνία της επιλογής, επιτρέποντας την κίνηση της περιοχής εγγραφής)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Συμπαγής λειτουργία.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Εμφανίζει μια μικρότερη έκδοση του πίνακα εντολών της συσκευής εγγραφής)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Εμφανίστε επίσης το κουμπί απόρριψης κατά την εγγραφή.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Κανονικά, είναι ορατό μόνο σε παύση)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Improve screen selection performance.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduces the lag during screen selection by displaying a static view of the screen)</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Θυμήσου το προηγούμενο μέγεθος της περιοχής εγγραφής.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Θυμήσου την προηγούμενη θέση της περιοχής εγγραφής.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Χρησιμοποιήστε μια αντίστροφη μέτρηση πριν από την έναρξη.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Σε δευτερόλεπτα, περιμένει πριν αρχίσει να καταγράφει)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Ενεργοποίηση του δρομέα (με ακολουθία).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Η περιοχή εγγραφής θα επανατοποθετηθεί βάσει της θέσης του δρομέα)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Περιθώριο buffer σε pixel, όπου η περιοχή εγγραφής αρχίζει να επανατοποθετείται)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Πρόσθετο περιθώριο buffer σε pixel, όπου το περιβάλλον χρήστη αρχίζει να αποκρύπτεται)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Ρώτησέ με πριν απορρίψεις την εγγραφή.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Φόντο προεπισκόπησης</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Μέγεθος πλέγματος:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Πολύ μικρό</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Μικρό</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Μεσαίο</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Μεγάλο</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Πολύ μεγάλο</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Μου αρέσουν τα μεγάλα τετράγωνα</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Είμαι τυφλός</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Προσαρμοσμένο</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Ύψος:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Πλάτος:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Εφαρμογή</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Χρώμα βάσης</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Ομοιόμορφο χρώμα</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Μονό χρώμα</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Εμφάνιση των κωδικοποιήσεων σε ξεχωριστό παράθυρο.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Επεκτείνετε τη γραμμή τίτλου (παράθυρο χρώμιο).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Ρυθμίστε αυτόματα το μέγεθος του παραθύρου με βάση το μέγεθος του καρέ, αμέσως μετά τη φόρτωση.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Ρυθμίστε αυτόματα το ζουμ καρέ βάσει του μεγέθους του παραθύρου, αμέσως μετά τη φόρτωση</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Ρώτησέ με πριν διαγράψεις τα καρέ.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Ρώτησέ με πριν απορρίψεις ένα έργο.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Ρώτησέ με πριν κλείσεις το πρόγραμμα επεξεργασίας (εάν υπάρχει έργο ανοιχτό).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Ενεργοποιήστε το τριπλό κλικ για να επιλέξετε το κείμενο.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Σχεδιάστε το περίγραμμα των λεζάντων έξω από τα γράμματα.</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Drop frames when necessary.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Skip a frame if the previewer is not able to display it in time)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Skip a frame if the previewer is not able to display it in time.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Επιβολή ορίου στο ιστορικό αναίρεσης / επανάληψης.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Οι παλαιότερες ενέργειες θα καταργηθούν όταν συμπληρωθεί το όριο)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Μέγιστος αριθμός αποθηκευμένων ενεργειών)</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Sync the output folder among presets.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Presets will use the same output path)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Also sync the filename.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Presets will also use the same filename)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Only sync among presets of the same file type.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Only presets of the same file type will be in sync)</s:String>-->\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Αυτοματοποιημένη εργασία</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Λίστα αυτοματοποιημένων εργασιών</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Εργασία</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Λεπτομέρειες</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Ενεργοποίηση αυτής της εργασίας.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">Επιλέξτε μια εργασία</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Select a task above</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.Info\">Αυτές οι εργασίες εκτελούνται διαδοχικά από την κορυφή της λίστας προς τα κάτω.&#10;Αυτό συμβαίνει όταν ανοίγετε για πρώτη φορά ένα έργο χρησιμοποιώντας το πρόγραμμα επεξεργασίας.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Ισχύουν παντού</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Καταγραφέας οθόνης:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Ανοίγει την προεπιλεγμένη συσκευή εγγραφής οθόνης)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Συσκευή εγγραφής webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Ανοίγει τη συσκευή εγγραφής webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Εγγραφή στον πίνακα:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Ανοίγει τη συσκευή εγγραφής, ώστε να μπορείτε να εγγράψετε τα σχέδιά σας)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Πρόγραμμα Επεξεργασίας:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Ανοίγει ένα άλλο παράθυρο προγράμματος επεξεργασίας)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Ρυθμίσεις:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Ανοίγει το παράθυρο ρυθμίσεων. Μπορείτε να ανοίξετε μόνο ένα κάθε φορά)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Έξοδος:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Κλείνει όλα τα παράθυρα και αφαιρεί την εφαρμογή από τη γραμμή συστήματος)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Καταγραφείς</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Έναρξη/Παύση:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Ξεκινά ή διακόπτει την εγγραφή. Χρησιμοποιείται για λήψη στιγμιότυπων εάν είναι ενεργοποιημένη η λειτουργία στιγμιότυπου)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Διακοπή:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Διακόπτει την εγγραφή και ανοίγει τον επεξεργαστή)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Απόρριψη:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Απορρίπτει την ενεργή εγγραφή, όταν βρίσκεται σε παύση)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Δρομέας ακολουθίας:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Εναλλάσσει την προσαρμογή της περιοχής εγγραφής με βάση τη θέση του δρομέα)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Απενεργοποίηση ακολουθίας:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Απενεργοποιεί προσωρινά την προσαρμογή της περιοχής εγγραφής με βάση τη θέση του δρομέα, επιτρέπονται μόνο πλήκτρα τροποποιητή)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Κάντε κλικ για να ορίσετε την εστίαση του πληκτρολογίου και, στη συνέχεια, πατήστε τα επιθυμητά πλήκτρα και τροποποιητές.&#10;Δεν επιτρέπονται ορισμένοι συνδυασμοί πλήκτρων.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Γλώσσα εφαρμογής</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Αυτόματη αναγνώρισ</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Τρέχουσα γλώσσα λειτουργικού συστήματος (εάν υπάρχει)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Θέλετε να μεταφράσετε την εφαρμογή μου?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Κάντε κλικ εδώ για να διαβάσετε τις οδηγίες μετάφρασης και να κατεβάσετε την εφαρμογή \"Μεταφραστής\".</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Έπειτα,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">κάντε κλικ εδώ για εισαγωγή</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">και δοκιμάστε τη μετάφρασή σας.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Στείλτε το σε μένα μέσω</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">όταν τελειώσετε τη μετάφραση.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Κάντε κλικ για να ανοίξετε μια ιστοσελίδα με τις οδηγίες.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Ανοίγει τη σελίδα εισαγωγής</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Ανοίγει την εφαρμογή email σας</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Κατάσταση</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Τόμος:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} ελεύθερα από {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Ελέγξτε ξανά πόσος χώρος απομένει.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Διαγράψτε το φάκελο προσωρινής μνήμης.&#10;Θα μπορείτε να αποφασίσετε εάν θέλετε να διατηρήσετε τα πρόσφατα έργα ή όχι.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Χαμηλός χώρος στον τρέχοντα επιλεγμένο σκληρό δίσκο. Παρακαλώ, καθαρίστε το φάκελο προσωρινής μνήμης ή αλλάξτε την τοποθεσία.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Αδύνατο να ανακτήσετε τις λεπτομέρειες της μονάδας.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Κανένα αρχείο</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} αρχείο</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} αρχεία</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Κανένας φάκελος</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} φάκελος</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} φάκελοι</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} σε χρήση</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Διαδρομές</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Προσωρινή Μνήμη:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Επιλέξτε τη θέση για την προσωρινή μνήμη (προσωρινά αρχεία).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Καταγραφές:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Επιλέξτε τη θέση για τα αρχεία καταγραφής σφαλμάτων.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Αναζήτηση του επιλεγμένου φακέλου.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Θέση ρυθμίσεων</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">Δεδομένα εφαρμογής:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Τοπικά:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Δεν υπάρχει</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Δημιουργήστε ένα άδειο τοπικό αρχείο ρυθμίσεων.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Αφαίρεση του αρχείου ρυθμίσεων.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Ανοίξτε το φάκελο όπου βρίσκεται το αρχείο ρυθμίσεων.&#x0d;Κρατήστε πατημένο το Ctrl ενώ κάνετε κλικ για να ανοίξετε το αρχείο, εάν είναι δυνατόν.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Μοτίβο φόρτωσης ρυθμίσεων: Προεπιλογή ◄ Δεδομένα εφαρμογής◄ Τοπικό.&#x0d;• Εάν δεν υπάρχει αρχείο ρυθμίσεων στον Τοπικό φάκελο, η εφαρμογή αναζητά μέσα στο φάκελο \"Δεδομένα εφαρμογής\". Η προεπιλογή χρησιμοποιείται εάν δεν υπάρχει αρχείο ρυθμίσεων.&#x0d;• Εάν δεν υπάρχουν τοπικές ρυθμίσεις, όλες οι ρυθμίσεις αποθηκεύονται στο αρχείο ρυθμίσεων \"Δεδομένα εφαρμογής\".</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.DeleteEverything\">Delete all files from cache when closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Ask me before deleting all files from cache.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Αυτόματη αφαίρρεση παλιών έργων.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Κατά το άνοιγμα της εφαρμογής, μια εργασία παρασκηνίου θα διαγράψει τυχόν κλειστά έργα παλαιότερα από το χρονικό διάστημα που έχει διαμορφωθεί.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(σε ημέρες, οποιοδήποτε κλειστό έργο παλαιότερο από αυτό θα διαγραφεί / απορριφθεί μετά το άνοιγμα της εφαρμογής)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Εκκαθάριση προσωρινής μνήμης</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Θέλετε να διαγράψετε το φάκελο προσωρινής μνήμης?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Όταν δημιουργείτε μια εγγραφή ή ανοίγετε κάτι για επεξεργασία, ένα έργο δημιουργείται και αποθηκεύεται μέσα στο φάκελο cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Θέλετε να καταργήσετε αυτά τα έργα από το φάκελο cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Μην καταργήσεις πρόσφατα έργα.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Μόνο τα έργα παλαιότερα από {0} ημέρες, τα οποία δεν χρησιμοποιούνται αυτήν τη στιγμή, θα καταργηθούν)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Όλα τα έργα, τα οποία δεν χρησιμοποιούνται αυτήν τη στιγμή, θα καταργηθούν)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Μεσολάβηση</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Λειτουργία:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Απενεργοποιήμενο</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Χειροκίνητο</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Σύστημα</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Χρησιμοποιεί τη μεσολάβηση συστήματος)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Θύρα:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Όνομα χρήστη:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Κωδικός πρόσβασης:</s:String>\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Presets\">Upload presets</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Υπηρεσία</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Τίτλος</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Περιγραφή</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Enabled</s:String>-->\n    \n     <!--Options • Upload > Preset-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Title\">Upload Service</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Επιλέξτε μια υπηρεσία</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Select an upload service above</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Custom\">Custom</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Enable\">Enable this preset.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Λεπτομέρειες</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Όνομα:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Περιγραφή:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Λειτουργία:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Ανώνυμος</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Authenticated</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Authorization</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Get token</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Token\">Paste the OAuth token here</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Όνομα χρήστη:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Κωδικός πρόσβασης:</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Authorize</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Το όνομα χρήστη και ο κωδικός πρόσβασης δεν θα αποθηκευτούν.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Επιλογές</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Direct\">Use direct links.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Άλμπουμ</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">You must give this preset a unique name.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">The name is already in use by another upload preset.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">When in authenticated mode, you must finish the authentication process.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">You must provide your username and password to authorize this app.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">It was not possible to get the authorization token.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">In order to authorize this app, you need to provide the authorization token.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Authorization failed. Check if everything is right and try again in a few seconds.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">It was not possible to load the album list.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Authorization completed.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Not authorized.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Authorization expired in {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Authorization valid until {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Get links with the Gifv extension instead of Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Upload gifs to a selected album.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Άλμπουμ:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Ρώτησέ με πριν ανεβάσεις</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Επαναφόρτωση λίστας άλμπουμ.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Προεπιλογές</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Ask me to fill out the details of the upload.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url type:</s:String>-->\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Διαλέξτε ένα άλμπουμ (προαιρετικό)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Εάν το επιθυμείτε, μπορείτε να επιλέξετε το άλμπουμ προορισμού:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details\">Upload details (optional)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Upload details</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Τίτλος:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Περιγραφή:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Ετικέτες:</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separate tags by using a semi-colon ( ; )</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Only display for those accessing via direct link.</s:String>-->\n    \n    <!--Options • Upload > History-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Title\">Upload history</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Ημερομηνία</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.History.Preset\">Preset</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Successful\">Successful?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Remove\">Delete history entry.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Σύνδεσμος:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Χαμηλότερη ποιότητα:</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Deletion link:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Are you sure that you want to delete the history entry?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected history entry?</s:String>-->\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Διαθέσιμα εξωτερικά εργαλεία</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Κάντε κλικ εδώ για λήψη&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Λήψη...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Έγινε λήψη του&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Κάντε κλικ εδώ για να ανοίξετε τις ιδιότητες του αρχείου.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Οι εφαρμογές που διανέμονται από το Microsoft Store δεν μπορούν να πραγματοποιήσουν λήψη άλλων εφαρμογών. Θα πρέπει να το κατεβάσετε με μη αυτόματο τρόπο.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Θέση FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Επιλέξτε τη θέση του εκτελέσιμου FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Εκτελέσιμο FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Η διαδρομή του εκτελέσιμου FFMpeg περιέχει έναν ή περισσότερους μη έγκυρους χαρακτήρες. Παρακαλώ, επιλέξτε μια έγκυρη τοποθεσία για αυτό το εκτελέσιμο.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">Έκδοση FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Θέση Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Επιλέξτε τη θέση της βιβλιοθήκης Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Βιβλιοθήκη Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Η διαδρομή της βιβλιοθήκης Gifski περιέχει έναν ή περισσότερους μη έγκυρους χαρακτήρες. Επιλέξτε μια έγκυρη τοποθεσία για αυτήν τη βιβλιοθήκη.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Άδεια χρήσης FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Άδεια χρήσης Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Άδεια χρήσης  SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Λείπουν δικαιώματα εγγραφής στο φάκελο</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Δεν είναι δυνατή η αποθήκευση της λήψης στο φάκελο λόγω έλλειψης δικαιωμάτων εγγραφής.&#10;&#10; Θέλετε να ξεκινήσετε τη λήψη με δικαιώματα διαχειριστή για να ολοκληρώσετε τη λήψη?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Δωρεά</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Δωρεά US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Δωρεά €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Ανοίγει τον ιστότοπο Paypal. Επιλεγμένο νόμισμα: Δολάριο</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Ανοίγει τον ιστότοπο Paypal. Επιλεγμένο νόμισμα: Ευρώ</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Ανοίγει τον ιστότοπο Paypal. Πρέπει να επιλέξετε το νόμισμα.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Συνδρομή</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donate monthly via Patreon.</s:String>-->\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Δωρεά μέσω Stripe.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Δωρεά παιχνιδιών</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Δωρεά παιχνιδιών μέσω Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Δωρεά παιχνιδιών μέσω GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Κέρνα ένα καφεδάκι μέσω Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto νομίσματα</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Αντιγραφή της διεύθυνσης BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Υποστήριξη</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Εάν θέλετε να υποστηρίξετε το έργο :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Έκδοση:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Έλεγχος για ενημερώσεις</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Έχετε ήδη την πιο πρόσφατη έκδοση.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Δημιουργός: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Έκδοση Microsoft Store. Ορισμένες λειτουργίες είναι απενεργοποιημένες λόγω επιβαλλόμενων πολιτικών.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Επικοινωνία</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Εγγραφείτε στο διακομιστή</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Επισκεφθείτε τη σελίδα</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Εγγραφείτε στο δωμάτιο</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Τεχνικά</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Άδεια χρήσης:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Αυτή είναι μια εντελώς δωρεάν εφαρμογή)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Πηγαίος κώδικας:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Πολτική απορρήτου:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Ευχαριστώ πολύ</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Όλους τους υποστηρικτές μου, άτομα που παρείχαν σχόλια ή / και δωρεές.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Tοπικοποίηση</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Λήψη κωδικών γλώσσας ...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Αναγνωρίζεται ως {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Μη αναγνωρίσιμο</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Ο πόρος με το κάτω μέρος είναι ο τρέχων που χρησιμοποιείται.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Για να εφαρμόσετε τον προσαρμοσμένο πόρο σας, μετακινήστε τον στο κάτω μέρος της λίστας.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Εξαγωγή πόρου ...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Αποθηκεύστε το λεξικό πόρων</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Ανοίξτε ένα λεξικό πόρων</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Λεξικό πόρων</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Εισαγωγή πόρου ...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Το όνομα αρχείου δεν ακολουθεί ένα έγκυρο μοτίβο</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Δοκιμάστε να μετονομάσετε όπως: \"StringResources.en.xaml\", όπου το \"en\" πρέπει να αντικατασταθεί από τον κωδικό γλώσσας σας.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Δεν μπορείτε να προσθέσετε έναν πόρο με το ίδιο όνομα</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Δοκιμάστε να καταργήσετε τον επαναλαμβανόμενο πόρο ή χρησιμοποιήστε άλλο κωδικό γλώσσας.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Περιττός κωδικός γλώσσας</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Ο κωδικός \"{0}\" είναι περιττός. Δοκιμάστε να χρησιμοποιήσετε το \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Άγνωστη γλώσσα</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">Το \"{0}\" και η οικογένειά του δεν αναγνωρίστηκαν ως έγκυροι κωδικοί γλώσσας.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Δεν ήταν δυνατή η εισαγωγή του πόρου εντοπισμού.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Εγγραφή</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Παύση</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Συνέχεια</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Διακοπή</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Απόρριψη</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Συγκράτηση</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Ύψος</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Πλάτος</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Η ακολούθηση του δρομέα είναι ενεργοποιημένη</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Κάντε κλικ για εναλλαγή μεταξύ των καταστάσεων συχνότητας λήψης.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">χειροκίνητo</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">αλληλεπιδράσεις</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Μέγιστα καρέ ανά δευτερόλεπτο</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Κυμαίνεται από 1 έως 60 καρέ ανά δευτερόλεπτο, με υψηλότερες τιμές που σημαίνει ότι θα ληφθούν περισσότερα καρέ.&#10;Κάθε αύξηση αντιπροσωπεύει διαφορά 16 χιλιοστών του δευτερολέπτου.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Μέγιστα καρέ ανά λεπτό</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Κυμαίνεται από 1 έως 60 καρέ ανά λεπτό, με υψηλότερες τιμές που σημαίνει ότι θα ληφθούν περισσότερα καρέ.&#10;Κάθε αύξηση αντιπροσωπεύει 1 δευτερόλεπτο διαφοράς.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Μέγιστα καρέ ανά ώρα</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Κυμαίνεται από 1 έως 60 καρέ ανά ώρα, με υψηλότερες τιμές που σημαίνει ότι θα ληφθούν περισσότερα καρέ.&#10;Κάθε αύξηση αντιπροσωπεύει διαφορά 1 λεπτού.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Κάντε κλικ ή πατήστε τα πλήκτρα για λήψη</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Προσκόλληση στο Παράθυρο (σύρετε, έπειτα απελευθερώστε για Προσκόλληση)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Προ-εκκίνηση</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (σε παύση)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Διακοπή...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Προ-εκκίνηση ...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Χρόνος λήψης που έχει παρέλθει.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Συνολικός αριθμός καρέ:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Μη αυτόματη καταγραφή:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Η καταγραφή είναι σε παύση.</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Timer.Imprecise\">Your computer does not support an accurate capture mode,&#10;which means that the target frame rate may never be achieved.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Δεν ήταν δυνατή η καταγραφή της οθόνης</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Δεν ήταν δυνατή η καταγραφή της οθόνης. The capture method returned no frame after 5 tries.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Δεν ήταν δυνατή η έναρξη/παύση καταγραφής της οθόνης</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Απαιτούνται Windows 8 ή νεότερη έκδοση για την καταγραφή της οθόνης χρησιμοποιώντας το Desktop Duplication API.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Περιοχή</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Επιλέξτε μια περιοχή</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Παράθυρο</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Επιλέξτε ένα παράθυρο</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Οθόνη</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Επιλέξτε μια οθόνη</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Εσωτερική οθόνη</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Γενική οθόνη</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Προσαρμογέας γραφικών: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Ανάλυση: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Εγγενής ανάλυση: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Σύρετε για να μετακίνησετε&#10;την επιλογή.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Αποδοχή</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Επανάληψη</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Δεξί κλικ</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Ακύρωση της επιλογής (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Κάντε κλικ και σύρετε για να επιλέξετε μια περιοχή αυτής της οθόνης</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Κάντε κλικ και σύρετε για να επιλέξετε μια περιοχή</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Κάντε κλικ εδώ για να επιλέξετε αυτό το παράθυρο</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Κάντε κλικ εδώ για να επιλέξετε αυτήν την οθόνη</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Πατήστε Esc για ακύρωση</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Πατήστε {0} για να σταματήσετε την εγγραφή</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Το παράθυρο της συσκευής εγγραφής θα ελαχιστοποιηθεί,&#10;επαναφέρετε το ή πατήστε {0} για παύση της καταγραφής</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Απόρριψη εγγραφής</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Είστε βέβαιοι ότι θέλετε να απορρίψετε την εγγραφή?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Αυτή η ενέργεια θα απορρίψει την εγγραφή, αφαιρώντας όλα τα καρέ.&#x0d;Δεν μπορείτε να αναιρέσετε αυτήν τη λειτουργία.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Εγγραφή κάμερας Web</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Δεν εντοπίστηκε συσκευή βίντεο! :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Έλεγχος για συσκευές βίντεο.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Κλίμακα: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Αλλαγή της κλίμακας του βίντεο.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Εγγραφή πλακέτα</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Αυτόματη εγγραφή</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Ενεργοποιεί την εγγραφή κατά την σχεδίαση.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Κρατημένο]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Επιλογέας χρωμάτων</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Επιλέξτε ένα χρώμα</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Κόκκινο</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Πράσινο</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Μπλε</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Άλφα</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Αρχικό χρώμα</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Τρέχον χρώμα</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Τελευταίο χρώμα</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Σύρετε αυτό στο&#x0d;δείγμα χρωμάτων</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Κάντε κλικ και σύρετε για να επιλέξετε&#x0d;χρώματα από την οθόνη σας.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Εξαίρεση θεατή</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Άνοιγμα εσωτερικής εξαίρεσης</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Τύπος εξαίρεσης</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Μήνυμα</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Στοίβα</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Πηγή</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Κάτι συνέβη λάθος.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Αποστολή αναφοράς</s:String>\n\n    <!--Presets-->\n    <!--<s:String x:Key=\"S.Preset.Title\">Preset</s:String>-->\n    <s:String x:Key=\"S.Preset.Encoder\">Κωδικοποιητής</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Όνομα</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Περιγραφή</s:String>\n    <!--<s:String x:Key=\"S.Preset.Other\">Other</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.AutoSave\">Automatically save when an option gets modified.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Manual\">All changes to this preset settings (encoding and exporting settings) need to be saved manually by pressing the save button.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Automatic\">All changes to this preset settings (encoding and exporting settings) will be saved automatically.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Readonly\">Some of the properties of a default preset are read-only.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Name\">You must give a name to this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.SameName\">There's already a preset with the same name.</s:String>-->\n    \n    <!--Presets • Listing-->\n    <!--<s:String x:Key=\"S.Preset.Autosave\">Autosaves</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Autosave.Info\">Changes to this preset are automatically saved.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Default.Title\">Default ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Default preset for the encoder.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">For Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respects Twitter upload limits (except size and resolution).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Older and better known codec.</s:String>-->\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Κίνηση</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Βίντεο</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Εικόνα</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Έργο</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Υψηλή ποιότητα</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Better suited for recordings with more colors and gradients.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Υψηλή ποιότητα • Διαφανές φόντο</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Supports saving the animation with a transparent background.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Υψηλή ποιότητα • Γραφικά</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Better for recordings with a lower quantity of colors.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • Προεπιλογή</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">Recommended for screen recording of regular UI. Uses Median Cut quantizer without dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Balanced</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Good quality for photo-like images using Wu's quantizer without dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Υψηλή ποιότητα</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">High quality for photo-like images using Wu's quantizer with higher bit level and Floyd-Steinberg error diffusion dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Χαμηλή ποιότητα, faster</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantizing all frames with the same predefined 'web-safe' palette and Bayer 8x8 ordered dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Υψηλότερη ποιότητα</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Υψηλότερη ποιότητα εικόνας, αλλά με μεγαλύτερο μέγεθος αρχείου.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Χαμηλότερη ποιότητα</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Χαμηλότερη ποιότητα εικόνας, αλλά με μικρότερο μέγεθος αρχείου.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Υψηλότερη ποιότητα</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Υψηλότερη ποιότητα εικόνας, αλλά με μεγαλύτερο μέγεθος αρχείου.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Χαμηλότερη ποιότητα</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Χαμηλότερη ποιότητα εικόνας, αλλά με μικρότερο μέγεθος αρχείου.</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Lower quality and faster encoding</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Even lower image quality, with a faster encoding, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Χαμηλή ποιότητα</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Low quality but faster encoding.</s:String>-->\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Υψηλή ποιότητα</s:String>\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">High image quality and small file size, but slower encoding.</s:String>-->\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Χαμηλότερη ποιότητα</s:String>\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Lower image quality, small file size and faster encoding.</s:String>-->\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Υψηλή ποιότητα</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Υψηλή ποιότητα εικόνας και μικρό μέγεθος αρχείου.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Εισαγωγή καρέ</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Και οι δύο πλευρές πρέπει να έχουν το ίδιο μέγεθος, αυτό το παράθυρο σας επιτρέπει να επανατοποθετήσετε και να αλλάξετε το μέγεθος της εικόνας και του καμβά. Κάντε κλικ για να επιλέξετε και να αλλάξετε το μέγεθος.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Μέγεθος καμβά:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Προσαρμογή εικόνας&#10;σοτν καμβά</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Αλλάζει το μέγεθος του καμβά για να ταιριάξει και στις δύο εικόνες (από την επάνω αριστερή γωνία).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Υπάρχει μια διαφορά μεταξύ των μεγεθών καρέ. Πρέπει να το λύσετε πριν τοποθετήσετε τα καρέ.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Νέο(α) καρέ</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Τρέχον(τα) καρέ</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Μέγεθος εικόνας:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Θέση εικόνας:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Επαναφορά μεγέθους &#x0d;και θέσης εικόνας</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Νέα καρέ θα εισαχθούν στην τρέχουσα&#10;λίστα καρέ στη θέση:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Πριν</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Μετά</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Καρέ</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Εισαγωγή...</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Επιλέξτε το χρώμα γεμίσματος καμβά</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Εισαγωγή καρέ από βίντεο</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Εισαγωγέας:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Φόρτωση...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Κλίμακα:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Μέγεθος:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Ύψος:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Πλάτος:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Ρυθμός καρέ:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">κ.α.δ.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Αρχή:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Τέλος:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Επιλογή:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Καρέ:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Διάρκεια:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Δεν ήταν δυνατή η φόρτωση του βίντεο</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Δεν ήταν δυνατή η έναρξη του προγράμματος προεπισκόπησης. Δοκιμάστε με έναν άλλο εισαγωγέα ή ελέγξτε εάν το βίντεο δεν είναι κατεστραμμένο.&#x0d;Εάν χρησιμοποιείτε το MediaPlayer, ελέγξτε αν είναι ενεργοποιημένη η δυνατότητα Windows που ονομάζεται \"Media Features / Windows Media Player\" και βεβαιωθείτε ότι έχετε τον απαραίτητο κωδικοποιητή βίντεο .</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Τέλος χρόνου στη λήψη της προεπισκόπησης των καρέ.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Κανένα καρέ δεν έχει επιλεγεί για εισαγωγή.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Κωδικοποιητής</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Κωδικοποίηση...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Εκκίνηση</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Ολοκληρώθηκε</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Αντιφράφηκε στο πρόχειρο</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Απέτυχε η αντιγραφή</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Η εντολή εκτελέστηκε</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Εμφάνιση της εξόδου της εντολής(ών).</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Απέτυχε η εκτέλεση της εντολής</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Απέτυχε η μεταφόρτωση</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Κλικ για να ανοίξετε τη σελίδα και να διαγράψετε την εικόνα (εάν υπάρχει).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Χρόνος που παρήλθε, σε λεπτά:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Ανάλυση:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Κωδικοποίηση:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Μεταφόρτωση:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Αντιγραφή:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Εντολές:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Το αρχείο διαγράφηκε ή μετακινήθηκε</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Ακυρώθηκε</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Σφάλμα</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Κάντε κλικ εδώ για να δείτε τις λεπτομέρειες αυτού του σφάλματος.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Μεταφόρτωση</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Εκτέλεση εντολών</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Επεξεργασία {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Προετοιμασία για δεύτερο πέρασμα</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Επεξεργασία {0} - 2ο πέρασμα</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Δημιουργία αρχείου</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Ανάλυση αμετάβλητων pixel</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Αποθήκευση αποτελέσματος ανάλυσης</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Άνοιγμα αρχείου</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Εξερεύνηση φακέλου</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Αφαίρεση από τη λίστα</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Εμφάνιση λεπτομερειών</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Απόρριψη όλων των τελειωμένων κωδικοποιήσεων</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Αντιγραφή ως εικόνα</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Αντιγραφή ονόματος αρχείου</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Αντιγραφή διαδρομής φακέλου</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Αντιγραφή συνδέσμου</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Έξοδος εντολών</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Έξοδος εντολών</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Ειδοποιήσεις</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Απόρριψη όλων των ειδοποιήσεων</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Επεξεργαστής</s:String>\n    <s:String x:Key=\"S.Editor.File\">Αρχείο</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Αρχική</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Αναπαραγωγή</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Επεξεργασία</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Εικόνα</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Μεταβάσεις</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Στατιστικά</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Επιλογές</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Βοήθεια</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Πρόσθετα</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Μια νέα ενημέρωση είναι διαθέσιμη!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Κάντε κλικ εδώ για να διαβάσετε περισσότερα για την ενημέρωση.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Συνολικός αριθμός, αριθμός επιλογών, δείκτης επιλογής</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Πρετοιμασία καρέ</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Μη έγκυρη φόρτωση - Δεν μπορείτε να εισαγάγετε πολλά αρχεία ταυτόχρονα. Δοκιμάστε να επιλέξετε μόνο ένα αρχείο.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Μη έγκυρη φόρτωση - Δεν μπορείτε να φορτώσετε πολλά έργα ταυτόχρονα. Δοκιμάστε να επιλέξετε μόνο ένα έργο.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Ανοίξτε ένα αρχείο μέσου (εικόνα ή βίντεο)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Ανοίξτε ένα αρχείο μέσου (εικόνα ή βίντεο) ή έργου</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Όλα τα υποστηριζόμενα αρχεία</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Εικόνα</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Βίντεο</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Κίνηση Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Κίνηση Gif</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Κίνηση Webp</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Βίντεο Avi</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Βίντεο Matroska</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Βίντεο Mov</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Βίντεο Mp4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Βίντεο Webm</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Εικόνα Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Εικόνα Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Εικόνα Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Αρχείο Zip, με εικόνες</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Έργο ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Έργο ScreenToGif ως Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Αρχείο Psd</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Μεταβείτε στο \"Αρχείο > Νέο\" για να ξεκινήσετε μια νέα εγγραφή</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Σύρετε και αποθέστε εικόνες, βίντεο ή έργα για εισαγωγή</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Σας ευχαριστώ πολύ για τη χρήση της εφαρμογής μου!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Όσο χαμηλότερος είναι ο αριθμός των καρέ, ο αριθμός χρωμάτων ή ο αριθμός των αλλαγών μεταξύ των καρέ, τόσο μικρότερο είναι το μέγεθος</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Θέλεις να επικοινωνήσουμε; Ανοίξτε το \"Επιλογές > Σχετικά\" για μεθόδους επικοινωνίας</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Αντιμετωπίζετε προβλήματα; Επικοινωνήστε μαζί μου μέσω του εργαλείου \"Σχόλια\"</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Θα θέλατε να δοκιμάσετε τη νέα συσκευή εγγραφής;&#x0d;Μεταβείτε στην ενότητα \"Επιλογές > Καταγραφέας\" για να την ενεργοποιήσετε</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Εγγραφή</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Εγγραφή&#x0d;κάμερας web</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Εγγραφή&#x0d;πίνακα</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Κενό&#x0d;έργο</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Νέο</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Εγγραφή</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Εγγραφή&#x0d;κάμερας web</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Εγγραφή&#x0d;πίνακα</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Μέσο</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Εισαγωγή</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Αποθήκευση ως</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Φόρτωση</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Πρόσφατα&#x0d;έργα</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Αποθήκευση ως&#x0d;έργο</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Απόρριψη&#x0d;έργου</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Στοίβα δράσης</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Αναίρεση</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Επανάληψη</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Επαναφορά</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Πρόχειρο</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Εμφάνιση προχείρου</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Επικόλληση</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Αποκοπή</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Αντιγραφή</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Ζουμ</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Προσαρμογή στο&#x0d;περιεχόμενο</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Fit Image</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Επιλογή</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Επιλογή&#x0d;όλων</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Μετάβαση σε</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Αναστροφή</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Αποεπιλογή</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Αναπαραγωγή</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Πρώτο</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Προηγούμενο</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Αναπαραγωγή</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Παύση</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Next</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Last</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Επιλογές αναπαραγωγής</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Βρόχος κατά την αναπαραγωγή.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Χρησιμοποιείται μόνο κατά την αναπαραγωγή.&#x0d;Αν θέλετε να αλλάξετε τις ρυθμίσεις βρόχου για εξαγωγή Gif και Apngs,&#x0d;θα είναι διαθέσιμο στο πλαίσιο \"Αποθήκευση ως\" για ορισμένους κωδικοποιητές.</s:String>\n\n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Καρέ</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Διαγραφή</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Αφαίρεση&#x0d;διπλότυπων</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Μείωση&#x0d;πλήθους καρέ</s:String>\n    <!--<s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Smooth&#x0d;Loop</s:String>-->\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Διαγραφή όλων των προηγούμενων</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Διαγραφή όλων των επόμενων</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Αναδιάταξη</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Αναστροφή</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Γιογιό</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Μετακίνηση προς τα&#x0d;αριστερά</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Μετακίνηση προς τα&#x0d;δεξιά</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Καθυστέρηση (Διάρκεια)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Παράκαμψη</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Αύξηση ή&#x0d;μείωση</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Κλίμακα</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Μέγεθος και περιστροφή</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Αλλαγή μεγέθους</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Περικοπή</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Αναστροφή/Περιστροφή</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Κείμενο</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Λεζάντα</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Ελεύθερο κείμενο</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Τίτλος καρέ</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Πατήματα&#x0d;πλήκτρων</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Επικάλυψη</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Ελεύθερη&#x0d;σχεδίαση</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Σχήματα</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Συμβάντα&#x0d;ποντικιού</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Υδατογράφημα</s:String>\n    <!--<s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>-->\n    <s:String x:Key=\"S.Editor.Image.Border\">Σύνορο</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Σκιά</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Πρόοδος</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Θόλωση</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Στυλ</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Ξεθώριασμα</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Κύληση</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Γενικά</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Πλήθος καρέ</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Συνολική διάρκεια</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Μέγεθος καρέ</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Μέση διάρκεια (καθυστέρηση)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Τρέχουσα ώρα</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Η τρέχουσα ώρα (αθροιστική) με βάση το τρέχον πλαίσιο που εμφανίζεται.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI και κλίμακα καρέ</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Επιλεγμένο καρέ</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Ενέργεια αποκοπής</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Δεν μπορείτε να κόψετε όλα τα καρέ.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Η εγγραφή χρειάζεται τουλάχιστον ένα καρέ.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Αφαίρεση όλων</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Είστε βέβαιοι ότι θέλετε να αφαιρέσετε όλα τα καρέ?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Αυτή η ενέργεια θα απορρίψει το τρέχον ανοιχτό έργο και δεν μπορεί να αναιρεθεί. Θέλετε να συνεχίσετε?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Απόρριψη έργου</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Είστε βέβαιοι ότι θέλετε να απορρίψετε το έργο?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Αυτή η ενέργεια θα απορρίψει το έργο, αφαιρώντας όλα τα καρέ.&#x0d;Δεν μπορείτε να ακυρώσετε αυτήν τη λειτουργία.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Θέλετε να απορρίψετε το προηγούμενο έργο?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Εάν επιλέξετε να μην το κάνετε, το προηγούμενο έργο θα είναι διαθέσιμο για άνοιγμα μέσω της καρτέλας: Πρόσφατα έργα</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Διαγραφή καρέ</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Είστε βέβαιοι ότι θέλετε να διαγράψετε?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Αυτή η ενέργεια θα διαγράψει {0} καρέ.&#x0d;Θα μπορείτε να το αναιρέσετε αργότερα.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Έξοδος από τον επεξεργαστή</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Είστε βέβαιοι ότι θέλετε να βγείτε?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Το τρέχον έργο στο οποίο εργαζόσασταν μπορεί να ανοίξει ξανά μέσω του «Πρόσφατα έργα».</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Το τρέχον έργο στο οποίο εργαζόσασταν μπορεί να ανοίξει ξανά μέσω του «Πρόσφατα έργα», αλλά μην ξεχνάτε ότι μετά από λίγες ημέρες, θα διαγραφεί αυτόματα.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Μη έγκυρη μεταφορά και απόθεση</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Δεν μπορείτε να εισαγάγετε πολλά αρχεία ταυτόχρονα</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Δοκιμάστε να επιλέξετε μόνο ένα αρχείο.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Δεν είναι δυνατή η φόρτωση του αρχείου</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Δεν ήταν δυνατή η φόρτωση του αρχείου επειδή έχει μη έγκυρη μορφή.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Δεν μπορείτε να εισαγάγετε πολλά έργα ταυτόχρονα</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Δοκιμάστε να επιλέξετε μόνο ένα έργο.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Δεν υπάρχει κείμενο για εφαρμογή.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα πλαίσιο για να εφαρμόσετε τη λεζάντα.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα πλαίσιο για να εφαρμόσετε το κείμενο.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα καρέ για να εφαρμόσετε τον Τίτλο καρέ δίπλα του.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Πρέπει να επιλέξετε ένα πάχος περιγράμματος μεγαλύτερο από το μηδέν σε τουλάχιστον μία πλευρά.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα καρέ για να εφαρμόσετε το περίγραμμα.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Η αδιαφάνεια πρέπει να είναι μεγαλύτερη από το μηδέν για να κάνει οποιαδήποτε διαφορά στο καρέ.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Όταν χρησιμοποιείτε το βάθος της σκιάς και την ακτίνα θαμπώματος ως μηδέν, δεν θα κάνει καμία διαφορά επειδή θα κρύβεται πίσω από το καρέ.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Πρέπει να επιλέξετε τουλάχιστον ένα pixel για να εφαρμόσετε το Cinemagraph. Επιλέξτε τα pixel σχεδιάζοντας πάνω τους.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Ξεθώριασμα μετάβασης</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα πλαίσιο για να εφαρμόσετε το Ξεθώριασμα μετάβασης</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Ένα πλήρως διαφανές χρώμα δεν θα δημιουργήσει κανένα αποτέλεσμα σε αυτήν τη μετάβαση.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Κίνηση μετάβασης </s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα πλαίσιο για να εφαρμόσετε την Κίνηση μετάβασης .</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Φόρτωση καρέ</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Αδύνατο να φορτωθεί το έργο</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Δεν ήταν δυνατή η φόρτωση των καρέ, επειδή όλα είναι κατεστραμμένα ή οι εικόνες δεν υπάρχουν εκεί που αναμένεται.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Δεν ήταν δυνατή η φόρτωση ορισμένων καρέ</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Δεν ήταν δυνατή η φόρτωση των καρέ επειδή δεν βρέθηκαν ή επειδή είναι κατεστραμμένα.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Πρέπει να επιλέξετε τουλάχιστον ένα καρέ για να εφαρμόσετε την επικάλυψη.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">Το FFmpeg δεν υπάρχει. Προσθέστε το στις μεταβλητές περιβάλλοντος Path ή κάντε κλικ εδώ για να ανοίξετε Επιλογές > Πρόσθετα για να ορίσετε την τοποθεσία.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Το Gifski δεν υπάρχει. Προσθέστε το στις μεταβλητές περιβάλλοντος Path ή κάντε κλικ εδώ για να ανοίξετε Επιλογές > Πρόσθετα για να ορίσετε την τοποθεσία.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Δεν υπάρχει αρκετός χώρος στη μονάδα δίσκου όπου αυτή η εφαρμογή αποθηκεύει την προσωρινή μνήμη της ({0}% απέμεινε). Κάντε κλικ εδώ για να ανοίξετε Επιλογές > Προσωρινά αρχεία για να ελευθερώσετε χώρο.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Προσπαθήσατε να εισαγάγετε πολλές εικόνες με διαφορετικά DPI, κάτι το οποίο δεν υποστηρίζεται. Μερικά από αυτά εισήχθησαν, τα άλλα πρέπει να εισαχθούν ξεχωριστά.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Ανάκτηση των καρέ από την μνήμη cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Ενημέρωση καρέ</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Προετοιμασία για εισαγωγή</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Εισαγωγή καρέ</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Ανάλυση διπότυπων</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Προσαρμογή της καθυστέρησης</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Απόρριψη διπλότυπων</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Απόρριψη καρέ</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Απόρριψη φακέλων</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Αλλαγή μεγέθους καρέ</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Περικοπή καρέ</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Εφαρμογή επικάλυσης στα καρέ</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Δημιουργία τίτλου καρέ</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Εφαρμογή αναστροφής/περιστροφής στα καρέ</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Αλλαγή της καθυστέρησης</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Εφαρμογή του εφέ μετάβασης</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Προετοιμασία για αποθήκευση</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Ακύρωση φόρτωσης και απόρριψη του έργου.</s:String>\n    <!--<s:String x:Key=\"S.Editor.FindingLoop\">Finding perfect loop</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.DiscardingLoop\">Discarding frames not used in loop</s:String>-->\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Καρέ:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Άνοιγμα εικόνας</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Εξερεύνηση φακέλου</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Μετάβαση στο καρέ</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Μετάβαση στο καρέ (0 έως {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Αποθήκευση ως...</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Αφαίρεση επιλεγμένων καρέ</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Νέα εγγραφή οθόνης</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Νέα εγγραφή κάμερας web</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Νέα εγγραφή πίνακα</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Μέο έργο</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Νέο από μέσο ή έργο</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Δημιουργήθηκε νέα εγγραφή</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Δημιουργήθηκε νέα εγγραφή κάμερας web</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Δημιουργήθηκε νέα εγγραφή πίνακα</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Δημιουργήθηκε νέο έργο</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Αναίρεση εκτέλεσης</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Η επαναφορά εκτελέστηκε</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Επανάληψη εκτέλεσης</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} καρέ αποκόπηκε(αν)</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} καρέ αντιγράφηκε(αν)</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} καρέ επικολλήθηκε(αν)</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Το ζουμ ορίστηκε σε {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Όλα τα καρέ επιλέχθηκαν</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Επιλέχθηκε το #{0} καρέ</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Η επιλογή αντιστράφηκε</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Όλα τα καρέ αποεπιλέχθηκαν</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} καρέ διαγράφηκε(αν)</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Η λίστα καρέ αντιστράφηκε</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Εφαρμόστηκε εφέ Yoyo</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Τα καρέ μετακινήθηκαν προς τα αριστερά</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Τα καρέ μετακινήθηκαν προς τα δεξιά</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Το μέγεθος των καρέ άλλαξε</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Περικοπή καρέ</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Τα καρέ γυρίστηκαν / περιστράφηκαν</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Η κίνηση αναστροφής ισχύει για τα επιλεγμένα καρέ και η περιστροφή ισχύει για όλα τα καρέ</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Αυτή η ενέργεια ισχύει για όλα τα καρέ</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Αυτή η ενέργεια ισχύει για επιλεγμένα καρέ</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Αυτή η ενέργεια ισχύει για όλα ή επιλεγμένα καρέ, ανάλογα με τις ρυθμίσεις σας</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Το cinemagraph ισχύει για όλα τα καρέ με βάση το πρώτο καρέ</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Εφαρμόστηκε επικάλυψη</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Ο Τίτλος καρέ δημιουργήθηκε</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Ο Τίτλος καρέ θα εισαχθεί πριν από το επιλεγμένο καρέ</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Η διάρκεια (καθυστέρηση) άλλαξε</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Έγινε εισαγωγή της μετάβασης</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Μειώθηκε ο Ρυθμός καρέ:</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Τα διπλότυπα καταργήθηκαν</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Απόκρυψη</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Εφαρμογή</s:String>\n    <s:String x:Key=\"S.Action.Open\">Άνοιγμα</s:String>\n    <s:String x:Key=\"S.Action.Save\">Αποθήκευση</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Άκυρο</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Πρόσφατα έργα</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Έρευνα για πρόσφατα έργα ...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Ημερομηνία δημιουργίας</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Πλήθος καρέ</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Δεν έχει επιλεγεί έργο. Επιλέξτε ένα έργο από τη λίστα για φόρτωση.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Αυτό το έργο εμφανίζεται ήδη από αυτό το περιστατικό του προγράμματος επεξεργασίας.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Αυτό το έργο είναι ανοιχτό ήδη σε πρόγραμμα επεξεργασίας. Ένα έργο δεν μπορεί να ανοίξει για δεύτερη φορά αν είναι ήδη ανοιχτό σε πρόγραμμα επεξεργασίας.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Καταχωρίσεις πρόχειρου</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Καταχώρηση πρόχειρου:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} εικόνα</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} εικόνες</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Εξερεύνηση περιεχομένου</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Αφαίρεση</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Συμπεριφορά Επικόλλησης</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Πριν από το επιλεγμένο καρέ</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Μετά το επιλεγμένο καρέ</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Διαφορά</s:String>\n    <!--<s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>-->\n    <s:String x:Key=\"S.Resize.Options\">Επιλογές</s:String>\n    <!--<s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>-->\n    <s:String x:Key=\"S.Resize.Percent\">Ποσοστό (%)</s:String>\n    <!--<s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.KeepAspect\">Keep the aspect ratio.</s:String>-->\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Ποιότητα:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Υψηλότερη ποιότητα</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear • Χαμηλότερη ποιότητα</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Κοντινότερος γείτονας (χαμηλότερη ποιότητα και γρηγορότερο)</s:String>\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Info\">Scaling quality.</s:String>-->\n    <s:String x:Key=\"S.Resize.Warning\">Πρέπει να επιλέξετε μια διαφορετική τιμή για να εφαρμόσετε την ενέργεια Αλλαγή μεγέθους.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Σημάδια</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Επάνω:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Αριστερά:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Κάτω:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Δεξιά:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Η επιλογή περικοπής πρέπει να είναι μικρότερη από το τρέχον μέγεθος καρέ.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Η επιλογή περικοπής πρέπει να είναι μεγαλύτερη από 10x10 pixel.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Οριζόντια αναστροφή</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Κάθετη αναστροφή</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Περιστροφή αριστερά 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Περιστροφή δεξιά 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Μειώστε τον ρυθμό καρέ </s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Συντελεστής:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Αφαίρεση καταμέτρησης:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Προσαρμογή καθυστέρησης:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Μην προσαρμόζεις</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Άθροισε με το προηγούμενο καρέ</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Άθροισε ομοιόμορφα με τα υπόλοιπα καρέ</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Μειώστε τον ρυθμό καρέ ολόκληρου του έργου.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Εάν αυτή η επιλογή δεν είναι επιλεγμένη, πρέπει να επιλέξετε πολλά διαδοχικά καρέ,&#10;μεγαλύτερα από τον συντελεστή κατάργησης.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Θα αφαιρέσει {0} καρέ μετά από κάθε {1} καρέ, without counting the removed ones.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Πρέπει να επιλέξετε τα καρέ για να εφαρμόσετε την μείωση καρέ (εναλλακτικά επιλέξτε την ρύθμιση για εφαρμογή σε ολόκληρο το έργο).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Η λίστα των επιλεγμένων καρέ πρέπει να είναι διαδοχική. Δεν μπορείτε να έχετε κάποια μη-επιλεγμένα καρέ ανάμεσα σε επιλεγμένα.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Η επιλογή των πλαισίων πρέπει να είναι μεγαλύτερη από τον παράγοντα αφαίρεσης, προκειμένου το χαρακτηριστικό να μπορεί να αφαιρέσει οτιδήποτε.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Αφαίρεση διπλότυπων</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Ομοιότητα (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Αφαίρεση καρέ:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Αφαίρεση του πρώτου καρέ</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Αφαίρεση του τελευταίου καρέ</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Καθυστέρηση προσαρμογής:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Μην προσαρμόζεις</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Χρησιμοποιήστε το μέσο όρο</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Χρησιμοποίησε το άθροισμα</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Αυτή η ενέργεια αναλύει κάθε καρέ (pixel προς pixel) και αφαιρεί τα καρέ που είναι τουλάχιστον {0}% παρόμοια με το αμέσως γειτονικό καρέ.&#x0d;Μπορείτε να επιλέξετε εάν θέλετε να προσαρμόσετε την καθυστέρηση (διάρκεια) των καρέ.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Header\">Create smooth loop</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignore first:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Σύγκριση από:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">End</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Start</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Tries to find a frame at least {0} % similar to the start frame and deletes all later frames.&#x0d;You can choose if you want to ignore some initial frames and initiate the comparison from the start (after the threshold) or the end.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">The number of frames to ignore needs to be smaller than the total number of frames.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">It was not possible to create a smooth loop with the selected settings.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">You already have a smooth loop based on selected settings.</s:String>-->\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Κείμενο</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Γραμματοσειρά</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Οικογένεια:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Στυλ:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Βάρος:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Μέγεθος:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Χρώμα:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Χρώμα φόντου:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Περίγραμμα</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Πάχος:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Διάταξη</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Κατακόρυφα:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Οριζόντια:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Στοίχιση:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Διακόσμηση:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Πλήκτρα</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Πλήκτρα</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Διαχωριστικό:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Επεξεργαστείτε τα Πλήκτρα σας</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Αγνοήστε τα Πλήκτρα Ctrl, Alt, Shift και Windows ενώ δεν χρησιμοποιούνται ως τροποποιητές.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Θα αγνοήσει τα μεμονωμένα πλήκτρα όπως \"Control\", αλλά δεν θα αγνοήσει το \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Παράβλεψη προσομοίωσης Πλήκτρων.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Καταγράψτε μόνο πατήματα πλήκτρων που εισήχθησαν από το χρήστη.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Επεκτείνετε την έκθεση των Πλήκτρων.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Ξεκινήστε την έκθεση των Πλήκτρων νωρίτερα.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Από (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Δεν υπάρχουν πλήκτρα στην εγγραφή σας.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Πρόγραμμα επεξεργασίας Πλήκτρων</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Αριθμός καρέ</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Εντοπίστηκαν Πλήκτρα</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Αφαιρέστε το Πλήκτρο</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Προσθέστε ένα Πλήκτρο:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Πεζά γράμματα.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Σας επιτρέπει να εισάγετε πεζά γράμματα.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Λειτουργία</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Πένα</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Γόμα</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Επιλογή</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Γόμα πινελιάς</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Πλάτος:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Ύψος:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Συμβουλή:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Ορθογώνιο</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Έλλειψη</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Άλλο:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Επισήμανση.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Προσαρμογή σε καμπύλη.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Δεν υπάρχουν σχέδια για εφαρμογή στα καρέ που επιλέξατε.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα καρέ για να εφαρμόσετε το Ελεύθερο σχέδιο.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Εισαγωγή</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Σχήματα</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Ακτίνα:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Παύλες:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Ελέγχει το μέγεθος παύλας και το μέγεθος των κενών.&#10;Μπορείτε να ορίσετε πολλά μεγέθη για να δημιουργήσετε ένα περίπλοκο στυλ παύλας.&#10;Η προεπιλογή είναι \"1 0\" ή κενό, που σημαίνει παύλα χωρίς κενά.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Επαναφορά περιστροφής</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Αφαίρεση</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Γέμισμα</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Συμβάντα ποντικιού</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Χρώμα επισήμανσης ποντικιού:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Χρώμα αριστερού κουμπιού:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Χρώμα μεσαίου κουμπιού:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Χρώμα δεξιού κουμπιού:</s:String>\n    <!--<s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">1st extra button color:</s:String>-->\n    <!--<s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">2nd extra button color:</s:String>-->\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Εικόνα</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Αρχείο:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Κανένα επιλεγμένο</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Αδιαφάνεια:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Επιλέξτε μια εικόνα</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Πρέπει να επιλέξετε μια εικόνα που θα εφαρμοστεί στα επιλεγμένα καρέ.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Πρέπει να επιλέξετε τουλάχιστον ένα καρέ για να εφαρμόσετε το υδατογράφημα.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Εμφάνιση</s:String>\n    <s:String x:Key=\"S.Border.Info\">Χρησιμοποιήστε αρνητικές τιμές για να κάνετε το περίγραμμα να επεκτείνει την εικόνα. Όταν το κάνετε αυτό, το περίγραμμα θα εφαρμοστεί σε όλα τα καρέ.&#x0d;Εάν δεν χρησιμοποιείται αρνητική τιμή, το περίγραμμα θα εφαρμοστεί μόνο στα επιλεγμένα καρέ.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Χρώμα σκιάς:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Χρώμα φόντου:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Κατεύθυνση:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Ακτίνα θαμπώματος:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Βάθος:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Πιξέλιασμα</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Θολούρα</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Μαύρισμα</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Φωτεινότητα</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Επιλογές συσκότισης</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Μέγεθος pixel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Επίπεδο θαμπώματος:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Επίπεδο μαυρίσματος:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Επίπεδο φωτισμού:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Υπολογίστε το μέσο χρώμα για κάθε Πιξελιασμένο μπλοκ .</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Εφαρμόστε τη συσκότιση, αντίστροφα της επιλογής.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Ομαλότητα</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Χρησιμοποιήστε το εργαλείο επιλογής για να επιλέξετε το μέρος του καρέ που θα πρέπει να συγκαλυφθεί.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Χρησιμοποιήστε το εργαλείο επιλογής για να επιλέξετε το μέρος του καρέ που δεν θα πρέπει να συγκαλυφθεί.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Δεν επιλέξατε τίποτα. Χρησιμοποιήστε το εργαλείο επιλογής για να επιλέξετε το ορθογώνιο που θα πρέπει να συγκαλυφθεί.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Τύπος</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Γραμμή</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Κείμενο</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Ακρίβεια:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Λεπτά</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Δευτερόλεπτα</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Χιλιοστά του δευτερολέπτου</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Ποσοστό</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Αριθμός καρέ</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Πραγματική ημερομηνία / ώρα</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Προσαρμοσμένo</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Εμφάνιση του συνόλου.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Μορφή:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Μορφή</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = χιλιοστά του δευτερολέπτου</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = δευτερόλεπτα</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = λεπτά</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = ποσοστό</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = αριθμός καρέ</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Σύνολο:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Παραδείγματα:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Μπορείτε να χρησιμοποιήσετε τη μορφή ημερομηνίας και ώρας από το .NET Framework.&#x0d;Η προδιαγραφή είναι διαθέσιμη σε αυτούς τους δύο παρακάτω συνδέσμους</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Τυπικές μορφές</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Προσαρμοσμένες μορφές</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Μέτρα από:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Αρχίζει να μετρά τον αριθμό καρέ από αυτόν τον επιλεγμένο αριθμό.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Προσανατολισμός:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Καθυστέρηση ενημέρωσης</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Λειτουργία καθυστέρησης:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Παράκαμψη (σε ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Αύξηση ή μείωση (σε ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Κλίμακα (σε %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Νέα τιμή</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Ελάχιστο 10ms ανά καρέ.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Μείωση/Αύξηση τιμής</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Τιμή κλίμακας</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Αυτή η νέα τιμή θα αντικαταστήσει τη διάρκεια (καθυστέρηση) όλων των επιλεγμένων καρέ. Η τιμή μπορεί να είναι από 10ms έως 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Αυτή η τιμή θα μειώσει / αυξήσει τη διάρκεια (καθυστέρησης) κάθε επιλεγμένου καρέ.&#x0d;Μπορείτε να μειώσετε / αυξήσετε επιλέγοντας μια τιμή μεταξύ -10000ms και 10000ms, αλλά η τελική διάρκεια κάθε καρέ θα περιοριστεί μεταξύ 10ms και 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Κλιμάκωση της διάρκειας (καθυστέρησης) κάθε επιλεγμένου καρέ κατά την ποσοστιαία τιμή.&#x0d;Μπορείτε να κλιμακώσετε τη διάρκεια κάθε καρέ επιλέγοντας μια τιμή μεταξύ 1% και 1000%, αλλά η τελική διάρκεια κάθε καρέ θα περιοριστεί μεταξύ 10ms και 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Χρησιμοποιήστε το στυλό για να επιλέξετε τα εικονοστοιχεία που δεν πρέπει να παραμένουν στατικά (που πρέπει να αλλάζουν μεταξύ των καρέ), ζωγραφίζοντας πάνω τους.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Μήκος μετάβασης</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Καθυστέρηση μετάβασης</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Ξεθώριασμα σε...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Το επόμενο καρέ</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Ένα χρώμα</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Χρώμα</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Η μετάβαση θα εφαρμοστεί μεταξύ του επιλεγμένου καρέ και του επόμενου.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Τύπος αρχείου και προεπιλογή</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Η μορφή του αρχείου εξόδου.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Type.Preset\">The export preset that holds all currently displayed settings.&#10;Manage your export presets via the buttons below.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Κινούμενη εικόνα</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Βίντεο</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Καρέ</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Άλλο</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Εικόνα Web</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">Μορφή αρχείου QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Ταινία Web</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Έργο</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">Έργο ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">Psd</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Αρχείο Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets\">Presets:</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Προεπιλογή</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Add\">Add a new export preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Save\">Save the current settings to this export preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Edit\">Edit basic export preset settings.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove\">Remove the currently selected export preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset\">Reset the settings of this export preset to its defaults.</s:String>-->\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Deleting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Are you sure that you want to delete the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Reseting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Are you sure that you want to reset the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">This action cannot be undone.&#10;&#10;Would you like to reset the selected preset to its default settings?</s:String>-->\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Κωδικοποιητής</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Encoder and quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Info\">Encoder responsible for generating the output file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Ενσωματωμένος κωδικοποιητής.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.System\">System</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encoder made available by the system.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Εξωτερικός κωδικοποιητής, δημιουργήθηκε από την FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Εξωτερικός κωδικοποιητής, δημιουργήθηκε από την Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Επιλογές κωδικοποιητή</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Ενεργοποίηση της λειτουργίας για προχωρημένους.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Manually input the parameters to control the encoder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Παράμετροι:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">List of parameters that will be passed to FFmpeg.&#10;&#10;Special parameters:&#10;{I} is the input path (the frames).&#10;{O} is the output path (the exported file).&#10;{W} is the width of the frame.&#10;{H} is the height of the frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">To encode with 2-pass, simply add '-pass 2'.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Προεπισκόπηση</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Preview the parameter list that will be passed to FFmpeg.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codec docs</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format docs</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filter docs</s:String>-->\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Επιλογές Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Αλγόριθμος μείωσης χρώματος (ποσοτικοποίηση).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Νευρικό δίκτυο</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Κβαντοποίηση υψηλής πιστότητας. Πιο αργό, αλλά καλό για υψηλότερη ποσότητα χρωμάτων.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Οκτάρ</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Καλό για Eφέ κίνησης με λιγότερα χρώματα. Ταχύτερο, αλλά μπορεί να προκαλέσει χρωματική λωρίδα.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Μέση περικοπή</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Λιγότερο καλό από το Οκτάρ και πιο αργό.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Κλίμακα του γκρι</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Χρησιμοποιεί μια σταθερή παλέτα κλίμακας του γκρι, οπότε είναι πολύ πιο γρήγορη.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Τα περισσότερα χρησιμοποιημένα χρώματα</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Απλά παίρνει τα πιο χρησιμοποιημένα χρώματα στα καρέ.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Δειγματοληψία:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Συντελεστής δειγματοληψίας:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Ποιότητα:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Χρώματα:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Μέγιστος αριθμός χρωμάτων (για κάθε καρέ).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Χρησιμοποιήστε έναν καθολικό πίνακα χρωμάτων.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Μπορεί να μειώσει την ποιότητα ή / και το μέγεθος του gif.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Best\">Best</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Use an even faster encoding process.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">May reduce the quality of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Βρόχος:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif σε Βρόχο.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Επανέλαβε επ αόριστον.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Πλήθος επανάληψης.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Ενεργοποίηση διαφάνειας.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Επιτρέπει τη λειτουργία πλήρους διαφάνειας, η οποία καθιστά το φόντο του gif πλήρως διαφανές.&#10;Η διαδικασία αντικατάστασης κλειδιού χρώματος θα αγνοηθεί εάν είναι ενεργοποιημένη αυτή η επιλογή.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Επιλέξτε ποιο χρώμα θα εμφανίζεται ως διαφανές.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Εάν επιλεγεί ένα χρώμα, θα μετατραπεί σε διαφανές και θα εμφανίζεται ως διαφανές στο δημιουργημένο gif.&#10;Εάν δεν έχει επιλεγεί χρώμα, όλα τα διαφανή χρώματα (Άλφα = 0%) θα εμφανίζονται ως διαφανή κανονικά.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Εντόπισε αμετάβλητα pixel.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Αναλύοντας και εντοπίζοντας αμετάβλητα pixel μεταξύ των καρέ,&#10;θα είναι δυνατή η αποθήκευση μόνο των απαραίτητων σημείων στο gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Αντικαταστήστε αυτά τα pixel με ένα πλήκτρο χρώματος.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Τα επαναλαμβανόμενα / αμετάβλητα pixels θα αντικατασταθούν με αυτό το πλήκτρο χρώματος,&#10;και θα είναι δυνατή η χρήση λιγότερων χρωμάτων ανά καρέ.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Κλειδί Chroma:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Dither:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer scale:</s:String>-->\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizer</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Χρώμα φόντου:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixels with alpha (transparency) that are considered opaque by the selected quantizer will be blended with this color before getting the quantized color.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alpha Threshold:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Determines the input alpha value under which the quantized color will be transparent.&#x0d;&#x0a;If 0, then the result will never have transparency.&#x0d;&#x0a;If 255, then only fully transparent pixels are considered transparent.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">White Threshold:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Determines the lowest input brightness to consider the result color white.&#x0d;&#x0a;It affects the brightness of the result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Direct Mapping</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">When checked, the quantized color is determined by a direct mapping rather than looking up the nearest palette entry.&#x0d;&#x0a;It speeds up quantization but may end up in a higher contrast result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Palette Size:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Determines the maximum size of the palette per frame.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Προσαρμοσμένο επίπεδο bit.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">When checked, the bit level can be configured manually.&#x0d;&#x0a;⚠️ Warning: The highest bit level might require a LOT of memory!</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Higher value means more accuracy, larger target color space, slower processing and larger memory usage.&#x0d;&#x0a;For example, if 1, then the result can have no more than 8 colors, or when 2, no more than 64 colors.&#x0d;&#x0a;For Octree and Wu quantizers it affects also maximum number of monochromatic shades.&#x0d;&#x0a;For example, if 5 (which is the default for Wu quantizer), only 32 monochromatic shades can be differentiated.&#x0d;&#x0a;⚠️ Caution: The Wu quantizer consumes at least 650 MB with the highest value.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">Linear color space</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">When checked, some operations (alpha blending with background color, quantizing, dithering, looking up the nearest colors in the palette) are performed in the linear color space rather than the sRGB one.&#x0d;&#x0a;Working in the linear color space is slower but provides a better quality result, especially when the quantizer uses only a few colors.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Remark: When using just a few colors, the brightness of a possibly resized preview may be incorrect because WPF performs resizing in the sRGB color space.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Black and White</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Fixed 1 bpp palette with the black and white colors.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Grayscale 4 colors</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Fixed 2 bpp palette with 4 grayscale entries.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Grayscale 16 colors</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Fixed 4 bpp palette with 16 grayscale entries.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Grayscale 256 colors</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Fixed 8 bpp palette with 256 grayscale entries.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">System default 4 bpp palette</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Fixed 4 bpp palette using the standard 16 sRGB colors.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">System default 8 bpp palette</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Fixed 8 bpp palette including the 'web-safe' colors and transparency.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 palette</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Fixed 8 bpp palette using the RGB 332 color space.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Optimizing palette for each frame with the Octree algorithm.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimizing palette for each frame with the Median Cut algorithm.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Optimizing palette for each frame with Xiaolin Wu's algorithm.</s:String>-->\n\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Ditherer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Strength:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">The strength of the ditherer, or 0 to auto calibrate strength.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Seed:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">An integer seed to be used to produce a specific random dithering pattern.&#x0d;&#x0a;Leave empty to use a random seed for every frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">None</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Frames are quantized without dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentine Processing</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">When checked, the error propagation direction is altered from line to line.&#x0d;&#x0a;This helps to reduce the ripple effect of the error diffusion dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">The 2x2 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">The 3x3 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">The 4x4 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">The 8x8 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Dotted Halftone (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">A 8x8 matrix with a dotted halftone pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blue Noise (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">A 64x64 matrix with a blue noise pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson's 4x3 matrix with 6 effective values.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">The original 3x2 matrix by Floyd and Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">An 5x3 matrix by Jarvis, Judice and Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra's 5x3 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra's 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra's 3x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">A 7x4 hexagonal matrix by Stevenson and Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki's 5x3 matrix.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Τυχαίος θόρυβος</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Random white noise.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Interleaved Gradient Noise</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Nonrandom gradient noise generated by a formula.</s:String>-->\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Προεπισκόπηση</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Εμφάνιση τρέχοντος καρέ.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">When checked, the preview shows the current frame instead of a standard image example.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Auto preview is disabled due to the high memory requirement of the current settings. Click to refresh the preview.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Failed to generate preview: {0}&#x0d;&#x0a;Click to try to generate it again.</s:String>-->\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Ρυθμίσεις κίνησης</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Endless loop.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">When checked, the animation will be looped indefinitely.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Back and forth.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">When checked, the animation will be played back and forth.&#x0d;&#x0a;This is achieved by duplicating the frames meaning larger file size and longer encoding time.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Repeat Count:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Specifies how many times the animation will be played.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Allow delta frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">When checked, unchanged pixels are attempted to be detected during the encoding.&#x0d;&#x0a;When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors.&#x0d;&#x0a;This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Remark: This option may cause noticeable artifacts in colors or in the dithering pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta Tolerance:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Specifies the maximum tolerance when detecting changed pixels.&#x0d;&#x0a;If 0, then no difference is tolerated at all.&#x0d;&#x0a;If 255, then there might be frames (or even all of them) that are added with no content.&#x0d;&#x0a;Reasonable range is between 0 and 16 for an optimized quantizer. The ones with fixed colors can be used with somewhat larger values with dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">If Delta Tolerance is too high the result might have poor quality. Click to reset delta tolerance.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Allow clipped frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">When checked, the encoder is allowed to add smaller frames than the actual resolution.&#x0d;&#x0a;If Allow Delta Frames is unchecked, then allows only clipping possible transparent borders.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Allow Delta Frames is ignored because the current configuration does not use alpha and Allow Clipped Frames is unchecked. Click to enable clipped frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Allow Clipped Frames has no effect because the current configuration does not use alpha and Allow Delta Frames is unchecked. Click to enable delta frames.</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Επιλογές Apng</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Prediction:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Average</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Mixed</s:String>-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng σε Βρόχο.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Εντόπισε αμετάβλητα pixel.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Βαφή όλων των αμετάβλητων pixel με διαφανές χρώμα.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Preset:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">None</s:String>-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Προεπιλογή</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Εικόνα</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Φωτογραφία</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Σχεδίαση</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Εικονίδιο</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Κείμενο</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Use lossless mode.</s:String>-->\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Λειτουργία:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Για προχωρημένους</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Method of configuring the encoder parameters:&#10;Normal: Use standard UI controls.&#10;Advanced: Use a text box to type the parameters.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Κωδικοποίηση:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">The video encoder, responsible for&#10;converting the raw pixels to the output file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Προρύθμιση:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">None</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Very Slow</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Slower</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Slow</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Faster</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Very Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra Fast</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Ποιότητα</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanced</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Ταχύτητα</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Προεπιλογή</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Lossless</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Lossless (High Performance)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">High Performance</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Υψηλή ποιότητα</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Δίσκος Bluray</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Low Latency</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Low Latency (High Performance)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Low Latency (Υψηλή ποιότητα)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Encoding speed to compression ratio,&#10;slower presets may give you better compression&#10;(quality per filesize).</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Επιτάχυνση υλικού:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Ανενεργό</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Ενεργό</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Αυτόματη επιλογή</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controls the usage of dedicated hardware (video graphics).&#10;Off: Doesn't use dedicated hardware.&#10;On: Uses dedicated hardware and lets you select special encoders.&#10;Auto: Uses dedicated hardware and automatic selects the right encoder, when possible.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Μορφή pixel:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatic</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Video sync method.&#10;Auto: Chooses between 1 and 2 depending on muxer (format) capabilities.&#10;Passthrough: Each frame is passed with its timestamps to the encoder.&#10;Constant: Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.&#10;Variable: Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.&#10;Drop: As passthrough but destroys all timestamps, making the encoder generate fresh timestamps based on framerate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Σταθερός ρυθμός καρέ</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Μεταβλητός ρυθμός καρέ</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Ρυθμός καρέ:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Custom</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Pass:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constant Rate Factor.&#10;Quality and rate control setting.&#10;Leave it empty if you don't wish to set this property.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Επίπεδο ποιότητας:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Μικρότερες τιμές σημαίνει καλύτερη ποιότητα.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Ρυθμός bit:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Ρυθμός bit βίντεο προορισμού.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Λειτουργία ρυθμού bit:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constant</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variable</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Ελάχ. ρυθμός:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimum bitrate tolerance.&#10;Most useful when using CBR mode.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Μέγ. ρυθμός:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximum bitrate tolerance.&#10;Requires the buffer size to be set too.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Μέγεθος μνήμης buffer:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Rate control buffer size.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n\n    <!--Editor • Save as > Image options-->\n    <!--<s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zip the images.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exports the images inside a zipped folder.</s:String>-->\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Συμπίεση της εικόνας.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Compress the image data using the RLE algorithm.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Save the timeline data.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exports the timings of the frames, instead of just the frames.</s:String>-->\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Επιλογές εξαγωγής</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Export partially.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Save the file to a folder of your choice.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Αντικατάσταση?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Προειδοποίηση</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Only warns that another file exists with the same name.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Ερώτηση</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Asks if the user wants to overwrite the file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Επιτρέπεται</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Απλώς αντιγράφει το αρχείο.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Αποθήκευση και ως έργο (ίδιος φάκελος, ίδιο όνομα αρχείου).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Μεταφόρτωση του αρχείου.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Αντιγραφή στο πρόχειρο.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Αρχείο</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Αντιγράφει το αρχείο εξόδου στο πρόχειρο.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Διαδρομή φακέλου</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Αντιγράφει τη διαδρομή αρχείου του αρχείου εξόδου στο πρόχειρο.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Διαδρομή αρχείου</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Αντιγράφει τη διαδρομή του αρχείου εξόδου στο πρόχειρο.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Σύνδεσμος</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Αντιγράφει το σύνδεσμο που δημιουργείται από την υπηρεσία μεταφόρτωσης στο πρόχειρο.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Εκτέλεση εντολών μετά-κωδικοποίησης.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Πληκτρολογήστε εντολές που θα εκτελεστούν μετά την κωδικοποίηση.&#x0d;Για να εκτελέσετε πολλές εντολές, πληκτρολογήστε καθεμία σε ξεχωριστή γραμμή.&#x0d;Μακροεντολές:&#x0d;{p} = Διαδρομή αρχείου εξόδου.&#x0d;{f} = Διαδρομή φακέλου εξόδου.&#x0d;{u} = Διεύθυνση URL του μεταφορτωμένου αρχείου.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial\">Partial export</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Λειτουργία:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Select the partial export method.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expression</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exports parts of the animation based on a simple expression.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Εύρος καρέ</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exports only part of the animation within the frame range.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Time range</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exports only part of the animation within the timeframe.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Επιλογή</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exports only the frames selected in the timeline.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Δεν επιλέχθηκε καρέ.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 καρέ επιλέχθηκε.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} καρέ επιλέχθηκαν.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Από:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Σε:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression\">Expression:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Type frame numbers separated by a comma or&#10;frame sequences separated by a minus sign:&#10;1, 3, 4, 6 - 9</s:String>-->\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Αρχείο</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Φάκελος προορισμού.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Επιλέξτε τον φάκελο εξόδου</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Επιλέξτε την τοποθεσία.&#x0d;Πατήστε Shift και κάντε κλικ για να&#x0d;επιλέξετε το όνομα αρχείου επίσης.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Μορφή αρχείου</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Όνομα του αρχείου. Insert Date/Time format between '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Κίνηση</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Αύξηση του αριθμού αρχείων</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Μείωση του αριθμού αρχείων</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Υπάρχει ήδη ένα αρχείο με το ίδιο όνομα.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Αποθήκευση στο πρόχειρο.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Πρέπει να επιλέξετε πού θα αποθηκεύσετε το αρχείο (σε φάκελο, στο πρόχειρο ή μεταφόρτωση κάπου αλλού).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Δεν επιλέξατε την επέκταση αρχείου.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">When selecting the advanced mode, you must type the parameters in the parameters field.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">The special parameters {I} (input) and/or {O} (output) are missing from the parameters field.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Για να εκτελέσετε μια εντολή μετά-κωδικοποίησης, πρέπει να πληκτρολογήσετε κάτι στο πεδίο κειμένου εντολών.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">You must select at least one frame when having the option to export only selected frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">The expression to partially export the project is invalid.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Δεν έχει επιλεγεί υπηρεσία μεταφόρτωσης. Πρέπει να επιλέξετε έναν προορισμό.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Δεν μπορείτε να μεταφορτώσετε στην επιλεγμένη υπηρεσία επειδή δεν ήταν εξουσιοδοτημένη. Μεταβείτε στις Ρυθμίσεις > Υπηρεσίες Μεταφόρτωσης για να εξουσιοδοτήσετε αυτήν την εφαρμογή.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Δεν μπορείτε να ορίσετε την επιλογή αντιγραφής του συνδέσμου επειδή δεν έχετε ορίσει να ανεβάσετε το αρχείο.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Πρέπει να επιλέξετε έναν φάκελο εξόδου.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Ο φάκελος εξόδου δεν υπάρχει.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Ο φάκελος εξόδου περιέχει έναν ή περισσότερους μη έγκυρους χαρακτήρες. Παρακαλώ, επιλέξτε έναν έγκυρο φάκελο.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Πρέπει να επιλέξετε ένα όνομα αρχείου.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Το όνομα αρχείου εξόδου περιέχει έναν ή περισσότερους μη έγκυρους χαρακτήρες. Παρακαλώ, επιλέξτε ένα έγκυρο όνομα αρχείου.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Το όνομα αρχείου χρησιμοποιείται ήδη. Θα γίνει αντικατάσταση ή επιλέξτε άλλο όνομα αρχείου.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">There's already a project with the same filename. Set to overwrite or pick another filename or folder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Η λειτουργία ακυρώθηκε.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Μεταφόρτωση</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Info\">Select the upload preset, which has details about the service in use for upload.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Limit\">This upload service imposes limits.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Προσθέστε μια νέα προρύθμιση μεταφόρτωσης.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Επεξεργασία ρυθμίσεων προρύθμισης μεταφόρτωσης.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Upload.History\">View the upload history of this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Remove\">Remove the currently selected upload preset.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Επιλέξτε μια προσρύθμιση μεταφόρτωσης</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Pick one from this list.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">No upload preset available for this format</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Προσθέστε μια προρύθμιση χρησιμοποιώντας το κουμπί παρακάτω.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Διαγραφή της προρύθμισης μεταφόρτωσης</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Are you sure that you want to delete the upload preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected upload preset?</s:String>-->\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Εξαγωγή καρέ</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Είστε βέβαιοι ότι θέλετε να εξάγετε τα καρέ?</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">This action will export {0} frames directly into the selected folder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Αντικατάστση</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Θέλετε να αντικαταστήσετε το αρχείο?</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">A file with the name '{0}' already exists in that folder.\\r\\nWould you like to overwrite it?</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Θέλετε να αντικαταστήσετε τα αρχεία?</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">One or more files with the same name already exist in that folder.\\r\\nWould you like to overwrite them?</s:String>-->\n    \n    <!--Command Preview-->\n    <!--<s:String x:Key=\"S.CommandPreviewer.Title\">Command Previewer</s:String>-->\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Εντολή</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Διαδρομή εισόδου</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Διαδρομή εξόδου</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Σχόλια</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Αποστολή</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Προεπισκόπηση</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Αποστολή σχολίων</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Τίτλος</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Μήνυμα</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Εάν αντιμετωπίζετε ένα σφάλμα, μην ξεχάσετε να μου εξηγήσετε πώς συνέβη, βήμα προς βήμα.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Τύπος σχολίων</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Πρόταση</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Issue/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Το email σας</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Πρέπει να πληκτρολογήσετε έναν τίτλο για ατα σχόλια.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Πρέπει να πληκτρολογήσετε ενα μήνυμα στα σχόλια.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Πρέπει να πληκτρολογήσετε το email σας, για να λάβετε απάντηση από τον προγραμματιστή.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Αποστολή στο παρασκήνιο. Αυτό το παράθυρο θα κλείσει σύντομα.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Συνημμένα (Προαιρετικά, Μέγιστο 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Προσθήκη συνημμένων</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Αφαίρεση όλων των συνημμένων</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Καταλαβαίνω αγγλικά</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">και Πορτογαλικά (Βραζιλιάνικα και Ευρωπαϊκά).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Αυτό θα στείλετε, καθώς και όλα τα συνημμένα.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Αντιμετώπιση προβλημάτων</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Λείπει κάποιο παράθυρο?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Εάν λείπει κάποιο από τα παράθυρα (έξω από την οθόνη), χρησιμοποιήστε τις παρακάτω επιλογές για να επαναφέρετε την τρέχουσα θέση και τη θέση εκκίνησης.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Εδώ βρίσκεται κάθε παράθυρο:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Εδώ θα ανοίξει κάθε παράθυρο την επόμενη φορά:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Μετακίνηση όλων των παραθύρων στην κύρια οθόνη.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Επαναφέρετε τη θέση εκκίνησης όλων των παραθύρων.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Κανονική γραφή</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Πλάγια γραφή</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Λοξή γραφή</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Μαύρη γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Έντονη γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Ημί - Έντονή γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Πολυ μαύρη γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Πολύ Έντονη γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Πολύ Eλαφριά γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Βαριά γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Eλαφριά γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Μεσαία γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Κανονική γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Φυσική γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Ημί - Έντονη γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Λεπτή γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra Black</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Εξαιρετικά μαύρη γραφή</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Εξαιρετικά Eλαφριά γραφή</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Επάνω</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Κέντρο</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Κάτω</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Παραμόρφωση</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Αριστερά</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Κέντρο</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Δεξιά</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Οριζόντια</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Κατακόρυφη</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Αριστερά</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Δεξιά</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Κέντρο</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Πλήρης στοίχιση</s:String>\n    \n    <!--TextDecoration-->\n    <!--<s:String x:Key=\"S.TextDecorations.None\">None</s:String>-->\n    <s:String x:Key=\"S.TextDecorations.Underline\">Υπογράμμιση</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Διακριτή διαγραφή</s:String>\n    <!--<s:String x:Key=\"S.TextDecorations.OverLine\">OverLine</s:String>-->\n    <!--<s:String x:Key=\"S.TextDecorations.Baseline\">Baseline</s:String>-->\n</ResourceDictionary>\n"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.en.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Back</s:String>\n    <s:String x:Key=\"S.Cancel\">Cancel</s:String>\n    <s:String x:Key=\"S.Yes\">Yes</s:String>\n    <s:String x:Key=\"S.No\">No</s:String>\n    <s:String x:Key=\"S.Add\">Add</s:String>\n    <s:String x:Key=\"S.Edit\">Edit</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Title</s:String>\n    <s:String x:Key=\"S.Description\">Description</s:String>\n    <s:String x:Key=\"S.SelectColor\">Click here to select the color.</s:String>\n    <s:String x:Key=\"S.Documentation\">Click to navigate to the documentation.</s:String>\n    <s:String x:Key=\"S.Suppress\">Suppress</s:String>\n    <s:String x:Key=\"S.Preview\">Preview</s:String>\n    <s:String x:Key=\"S.Size\">Size</s:String>\n    <s:String x:Key=\"S.Background\">Background</s:String>\n    <s:String x:Key=\"S.Color\">Color:</s:String>\n    <s:String x:Key=\"S.Delay\">Delay</s:String>\n    <s:String x:Key=\"S.DelayMs\">Delay:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Value -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Scale Value:</s:String>\n    <s:String x:Key=\"S.Margin\">Margin:</s:String>\n    <s:String x:Key=\"S.Padding\">Padding:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Min height:</s:String>\n    <s:String x:Key=\"S.AndOr\">and/or</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Oh no, the app crashed :(</s:String>\n    <s:String x:Key=\"S.Required\">Required field</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Only one instance permitted</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">The app is already running</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif is already running, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Saving the settings</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Would you like to try to save it again?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Looks like ScreenToGif does not have enough privileges to save the settings to the disk.&#10;&#10;Would you like to try again, but this time using administrative privileges?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Exiting ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Are you sure that you want to exit?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">All windows will be closed and the tray icon will be removed.</s:String>  \n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Switch Graphics Adapter</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Switch to the correct graphics adapter to capture the selected screen</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Due to a limitation in DirectX, ScreenToGif must be running on the same graphics adapter as the screen being captured.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Switch the graphics adapter set for ScreenToGif by opening Windows Settings > System > Display > Graphics Settings, or by clicking on the link below.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Switch the graphics adapter for ScreenToGif by opening the graphics settings of your graphics adapter.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Open Windows Settings</s:String>\n\n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Backspace\">Backspace</s:String>\n    <s:String x:Key=\"S.Keys.Tab\">Tab</s:String>\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>  \n    <s:String x:Key=\"S.Keys.PauseBreak\">Pause/Break</s:String>\n    <s:String x:Key=\"S.Keys.CapsLock\">Caps Lock</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>  \n    <s:String x:Key=\"S.Keys.Space\">Space</s:String>\n    <s:String x:Key=\"S.Keys.PageUp\">Page Up</s:String>\n    <s:String x:Key=\"S.Keys.PageDown\">Page Down</s:String>\n    <s:String x:Key=\"S.Keys.Home\">Home</s:String>\n    <s:String x:Key=\"S.Keys.End\">End</s:String>\n    <s:String x:Key=\"S.Keys.Left\">Arrow Left</s:String>\n    <s:String x:Key=\"S.Keys.Up\">Arrow Up</s:String>\n    <s:String x:Key=\"S.Keys.Right\">Arrow Right</s:String>\n    <s:String x:Key=\"S.Keys.Down\">Arrow Down</s:String>\n    <s:String x:Key=\"S.Keys.PrintScreen\">Print Screen</s:String>\n    <s:String x:Key=\"S.Keys.Insert\">Insert</s:String>\n    <s:String x:Key=\"S.Keys.Delete\">Delete</s:String>\n    <s:String x:Key=\"S.Keys.NumLock\">Num Lock</s:String>\n    <s:String x:Key=\"S.Keys.ScrollLock\">Scroll Lock</s:String>\n    <s:String x:Key=\"S.Keys.Shift\">Shift</s:String>\n    <s:String x:Key=\"S.Keys.LeftShift\">Left Shift</s:String>\n    <s:String x:Key=\"S.Keys.RightShift\">Right Shift</s:String>\n    <s:String x:Key=\"S.Keys.Alt\">Alt</s:String>\n    <s:String x:Key=\"S.Keys.LeftAlt\">Left Alt</s:String>\n    <s:String x:Key=\"S.Keys.RightAlt\">Right Alt</s:String>\n    <s:String x:Key=\"S.Keys.Ctrl\">Control</s:String>\n    <s:String x:Key=\"S.Keys.LeftCtrl\">Left Ctrl</s:String>\n    <s:String x:Key=\"S.Keys.RightCtrl\">Right Ctrl</s:String>\n    <s:String x:Key=\"S.Keys.Windows\">Windows</s:String>\n    <s:String x:Key=\"S.Keys.LeftWindows\">Left Windows</s:String>\n    <s:String x:Key=\"S.Keys.RightWindows\">Right Windows</s:String>\n    <s:String x:Key=\"S.Keys.NextTrack\">Next Track</s:String>\n    <s:String x:Key=\"S.Keys.PreviousTrack\">Previous Track</s:String>\n    <s:String x:Key=\"S.Keys.PlayPause\">Play/Pause</s:String>\n    <s:String x:Key=\"S.Keys.Stop\">Stop</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Right-Click</s:String>  \n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">New screen recording</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">New webcam recording</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">New board recording</s:String>\n    <s:String x:Key=\"S.Exit\">Exit</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">New screen recording</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">New webcam recording</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">New board recording</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">New animation</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Insert screen recording</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Insert webcam recording</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Insert board recording</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Insert from media (images and videos)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Save as...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Load files (images, videos and projects)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Load recent projects</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Discard current project</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Override delay of frames</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Increase/Decrease delay of frames</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Scale delay of frames</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Set zoom to 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Adjust the window to the frame size</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Fit image to the available window size</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Select the first frame</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Select the previous frame</s:String>\n    <s:String x:Key=\"S.Command.Play\">Play the animation</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Select the next frame</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Select the last frame</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Undo</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Redo</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Undo all changes in the project</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Copy the selected frames and store them in the clipboard</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Cut the selected frames and store them in the clipboard</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Paste the frames from the clipboard</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Delete all selected frames</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Delete all previous frames</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Delete all next frames</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Remove duplicates</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Reduce frame count</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Create a smooth loop</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Reverse animation</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Makes the animation go forward and backwards</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Move the selected frames to the left</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Move the selected frames to the right</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Resize all frames</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Crop all frames</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Flip or rotate the frames</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Add a caption</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Add a free-floating text</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Add a frame with a title on it</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Inserts keys pressed during the recording</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Draw free forms</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Add shapes</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Mouse events</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Select an image and add as watermark</s:String>\n    <s:String x:Key=\"S.Command.Border\">Add borders</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Add drop shadow</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Hide sensitive parts on your frames</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Use the drawing tools to select which parts of the frame should not remain static throughout the animation</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Progress bar or text with playback details</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Select all frames</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navigate to frame by index</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Inverse the selection of frames</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Unselect all frames</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Fade transition</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Slide transition</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Clear all completed encodings</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Move up</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Move down</s:String>\n    <s:String x:Key=\"S.Command.Add\">Add</s:String>\n    <s:String x:Key=\"S.Command.Open\">Open</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Edit selected item</s:String>\n    <s:String x:Key=\"S.Command.Save\">Save selected item</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Remove selected item</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">View history</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - StartUp</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Recorder</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Opens the screen recorder,&#10;where you can easily start recording your screen.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Opens the webcam recorder.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Board</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Opens the board recorder,&#10;where you can start recording your drawings.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Opens the editor window, the central point of this app,&#10;where you can start and edit a new recording.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Options</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">New version available</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Downloads the latest version of ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Updater</s:String>\n    <s:String x:Key=\"S.Updater.Header\">A new update is available</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">New release!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">New release available, Version {0}!&#x0d;Click here for more details.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">It appears that your system is no longer supported or something changed in the update system. Try downloading it manually from the website.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Version</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portable</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Installer</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">What's new?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Bug fixes:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">A new version is available for you to download.&#x0d;Would you like to open the browser to download it?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Execute the app after the update.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Download</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Install</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Install manually</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Downloading...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">It was not possible to show the download details.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">It was not possible to download the update.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">You need to wait for all encodings to finish before updating.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Downloader</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Downloader</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} of {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Options</s:String>\n    <s:String x:Key=\"S.Options.App\">Application</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Recorder</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tasks</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Shortcuts</s:String>\n    <s:String x:Key=\"S.Options.Language\">Language</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Storage</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Cloud</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Donate</s:String>\n    <s:String x:Key=\"S.Options.About\">About</s:String>\n    <s:String x:Key=\"S.Options.Other\">Other</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Missing shortcut key for cursor following</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">In order to use the mouse cursor following feature, you must set a shortcut key to toggle it when needed.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Startup</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Start&#10;manually</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">The app will only be executed when you manually do so.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Start with&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">The app will be executed after Windows startup.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossible to alternate between startup modes.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Allow only a&#10;single instance</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">You'll be able to run the app once per user and executable,&#10;meaning that different user or executable instances can co-exist.&#10;When trying to execute the app again, the second instance will try to give focus to the first one and end itself.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Allow multiple&#10;instances</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">You'll be able to run the app multiple times at the same time, without restriction.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Start minimized to the system tray.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(System tray icon will be visible while this option is active)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Start with:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Startup window</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Screen recorder</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webcam recorder</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Board recorder</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Editor window</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Window which shows up first when the app starts)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Theme</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Color scheme:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Very Light</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Light</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Dark</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Very Dark</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Follow system</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Custom</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Example colors.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">System tray icon</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Display the app on the system tray (notification area).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Keep the app open even if all windows are closed.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Do nothing</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Open a window</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">No window</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimize/restore all windows</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimize all windows</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restore all windows</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Left click:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Left click (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Middle click:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Window:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Or else, opens:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">General</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Workaround for the 'Not enough quota...' crash.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Ask me before closing the app (via the 'Exit' command).</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Disable hardware acceleration.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(The user interface will be rendered via software mode)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Check for translation updates.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Updated translations will be downloaded and installed automatically)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Check for updates on startup.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Automatically install updates after closing the app.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Force the download of the portable version.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Requires a manual installation by unzipping and replacing the executable)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Force the update to run with elevated privileges.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Prompt me before the installation starts.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">Download updates on metered networks.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(Allows download of updates on metered networks)</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Old</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">New</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Capture frequency</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">User interaction</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Frames will be captured each time you click or type something.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per hour</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Trigger delay:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(In ms, each frame capture will wait this amount of time before starting)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Capture mode</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Use the older capture method, which is slower and may not work capturing games,&#10;but requires no additional plug-ins.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Use the Desktop Duplication API capture method, which is faster and&#10;is able to capture fullscreen games, but requires Windows 8 or newer.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Save to&#10;file</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Each frame captured will be saved directly as an image on disk.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Memory&#10;cache</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Each frame captured will be stored as a pixel array on memory first (may be compressed before).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compression:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Slower but likely more optimal compression)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Fastest</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Faster but likely less optimal compression)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">No compression</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(No compression should be performed while capturing frames)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Cache size:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. After reaching this size, the data will be written/flushed to the disk)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Prevent capture of full black frames.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Prevents BitBlt with a memory cache from wrongfully resulting in frames with all pixels as black)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Show the mouse cursor in the recording.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Select the cursor color</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Fixed frame rate.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Constant delay that does not change with recording lag)</s:String>    \n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Only capture when something changes.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(A frame will only be captured when something is changed within the capture region)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Force memory cleanup during capture.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduces memory usage during capture, but decreases performance)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Guidelines</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Rule of thirds</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Click to toggle the display&#10;of a rule of thirds guideline.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Crosshair</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Click to toggle the display&#10;of a crosshair guideline.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">The guidelines will only be displayed while the recorder is paused or stopped.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Hide the title bar (thin mode).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Enable the screen magnifier.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(It enables a magnifier while selecting the recording area)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animate the screen region border during selection.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animate using the 'marching ants' style)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Enable selection panning.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Displays an adorner near the corner of the selection, allowing the movement of the recording area)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Compact mode.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Shows a smaller version of the recorder command panel)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Display the discard button also while recording.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normally, it's visible only while paused)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Improve screen selection performance.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduces the lag during screen selection by displaying a static view of the screen)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Remember the previous size of the recording area.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Remember the previous location of the recording area.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Use a pre start countdown.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(In seconds, it waits before starting to capture)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Enable cursor following.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(The recording area will reposition itself based on the location of the cursor)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Buffer margin in pixels, where the recording area starts getting repositioned)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Additional buffer margin in pixels, where the UI starts getting hidden)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Ask me before discarding the recording.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Previewer background</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Grid Size:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Very Small</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Small</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Large</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Very Large</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">I Like Big Squares</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">I'm Blind</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Custom</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Height:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Width:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Apply</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Base Color</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Even Color</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Odd Color</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Extend the titlebar (window chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Automatically adjust the window size based on the frame size, right after loading.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Automatically adjust the frame zoom based on the window size, right after loading.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Ask me before deleting frames.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Ask me before discarding a project.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Ask me before closing the Editor (if there's a project opened).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Enable triple-click to select the text.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Draw the outline of captions outside the letters.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Drop frames when necessary.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Skip a frame if the previewer is not able to display it in time)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Skip a frame if the previewer is not able to display it in time.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impose a limit to the undo/redo history.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Older actions will be removed when the limit is reached)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximum number of actions stored)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Sync the output folder among presets.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Presets will use the same output path)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Also sync the filename.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Presets will also use the same filename)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Only sync among presets of the same file type.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Only presets of the same file type will be in sync)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automated Task</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">List of automated tasks</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Task</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Details</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">Select a task</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Select a task above</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">These tasks are executed sequentially from the top of the list to the bottom.&#10;It happens when you first open a project using the editor.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Screen recorder:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Opens the default screen recorder)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webcam recorder:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Opens the webcam recorder)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Board recorder:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Opens the board recorder, so you can record your drawings)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Opens another editor window)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Options:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Opens the options window. You can only open one at a time)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Exit:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Closes all windows and removes the app from the system tray)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Recorders</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Start/Pause:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(It starts or pauses the recording. It is used to take snapshots if the snapshot mode is activated)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stop:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(It stops the recording and opens the editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Discard:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Discards the active recording, when it's paused)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Cursor following:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Toggles the adjustment of the recording area based on the position of the cursor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Disable following:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Temporarily disables the adjustment of the recording area based on the position of the cursor, only modifier keys accepted)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Click to set keyboard focus, then press the desired keys and modifiers.&#10;Some keys combinations are not allowed.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">App's Language</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Auto detect</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Current OS language (if available)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Would you like to translate my app?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Click here to read the translation guidelines and to download the Translator app.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Afterwards,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">click here to import</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">and test your translation.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Send it to me via</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">when you finish translating it.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Click to open a webpage with the guidelines.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Opens the import page</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Opens your email app</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} free of {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Check again how much space left there is.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Clear the cache folder.&#10;You'll be able to decide if you want to keep recent projects or not.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Low on space on the current selected hard drive. Please, clean the cache folder or change the location.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible to retrieve the drive details.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">No files</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} file</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} files</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">No folders</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} folder</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} folders</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in use</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Paths</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Choose the location for the cache (temporary files).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Choose the location for the error log files.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Browse the selected folder.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Settings location</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">It doesn't exist</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Create an empty local settings file.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Remove the settings file.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Open the folder where the settings file is located.&#x0d;Hold Ctrl while clicking to open the file, if possible.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Settings loading pattern: Default ◄ AppData ◄ Local.&#x0d;• If there's no settings file present at the Local folder, the app searches inside the AppData folder, Default is used if no settings file present.&#x0d;• If there's no Local settings, all settings are saved on the AppData settings file.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Delete all files from cache when closing the app.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Ask me before deleting all files from cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Automatically remove old projects.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">When opening the app, a background task will erase any closed projects older than the amount of time configured.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(in days, any closed project older than this will be erased/discarded after opening the app)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Clear Cache</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Would you like to clear the cache folder?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">When you create a recording or open something to edit, a project is created and stored inside the cache folder.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Would you like to remove these projects from the cache folder?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Don't remove recent projects.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Only the projects older than {0} days, that are not currently in use, will be removed)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(All the projects, that are not currently in use, will be removed)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Disabled</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">System</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Uses the system proxy)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Username:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Password:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Upload presets</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Service</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Title</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Description</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Enabled</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Upload Service</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Select a service</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Select an upload service above</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Custom</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Enable this preset.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Details</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Name:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Description:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonymous</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Authenticated</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Authorization</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Get token</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Paste the OAuth token here</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Username:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Password:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Authorize</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">The username and password will not be stored.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Options</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Use direct links.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">You must give this preset an unique name.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">The name is already in use by another upload preset.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">When in authenticated mode, you must finish the authentication process.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">You must provide your username and password to authorize this app.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">It was not possible to get the authorization token.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">In order to authorize this app, you need to provide the authorization token.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Authorization failed. Check if everything is right and try again in a few seconds.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">It was not possible to load the album list.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Authorization completed.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Not authorized.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Authorization expired in {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Authorization valid until {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Get links with the Gifv extension instead of Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Upload gifs to a selected album.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Ask me before uploading</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Reload album list.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Defaults</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Ask me to fill out the details of the upload.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url type:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Pick an album (optional)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">If you wish so, you can select the destination album:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Upload details (optional)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Upload details</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Title:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Description:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tags:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separate tags by using a semi-colon ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Only display for those accessing via direct link.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Upload history</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Date</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Preset</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Successful?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Delete history entry.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Lower quality:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Deletion link:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Are you sure that you want to delete the history entry?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected history entry?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Available external tools</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Click here to download&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Downloading...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Downloaded&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Click here to open the properties of the file.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Apps distributed by the Microsoft Store cannot download other apps. You'll have to download it manually.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg location</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Select the location of the FFmpeg executable</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg executable</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">The path of FFMpeg executable contains one or more invalid characters. Please, select a valid location for that executable.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">FFmpeg Version</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski location</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Select the location of the Gifski library</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski library</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">The path of Gifski library contains one or more invalid characters. Please, select a valid location for that library.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg license</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski license</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx license</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Missing write permission in folder</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">It's not possible to save the download in the folder due to a lack of write permission.&#10;&#10;Would you like to start the downloader with administrative rights to finish the download?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Donate</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Donate US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Donate €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Opens the Paypal website. Selected currency: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Opens the Paypal website. Selected currency: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Opens the Paypal website. You must select the currency.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Subscribe</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donate monthly via Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Donate via Stripe.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Gift games</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Gift games via Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Gift games via GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Pay for a coffee via Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto currencies</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copy the BitcoinCash address.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Support</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">If you wish to support the project :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Version:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Check for Updates</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">You already have the latest version.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Author: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store version. Some features are disabled due to enforced policies.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contact</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Join server</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Visit page</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Join room</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Technical</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">License:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(This is a completely free app)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Source code:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Privacy policy:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">A big thanks to</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">All my supporters, people who provided feedback and/or donations.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Localization</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Recognized as {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Not recognized</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">The bottom-most resource is the current one being used.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">To apply your custom resource, move it to the bottom of the list.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Redundant language code</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Unknown language</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Record</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pause</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continue</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Stop</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Discard</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Snap</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Height</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Width</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Cursor following is enabled.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interactions</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Maximum frames per second</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Click or press keys to capture</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Snap to Window (Drag and release to snap)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Pre Start:</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Paused)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Pre-starting...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Elapsed capture time.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Total frame count:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Captured manually:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">The capture is paused.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Your computer does not support an accurate capture mode,&#10;which means that the target frame rate may never be achieved.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">It was not possible to capture the screen</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">It was not possible to capture the screen. The capture method returned no frame after 5 tries.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">It was not possible to start/pause capturing the screen</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 or newer is required for capturing the screen using the Desktop Duplication API.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Area</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Select an area</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Window</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Select a window</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Screen</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Select a screen</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Internal screen</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Generic screen</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Graphics adapter: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resolution: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Native resolution: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Drag to move&#10;the selection.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Accept</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Retry</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Cancel the selection (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Click and drag to select an area of this screen</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Click and drag to select an area</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Click here to select this window</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Click here to select this screen</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Press Esc to cancel</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Press {0} to stop the recording</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">The recorder window will be minimized,&#10;restore it or press {0} to pause the capture</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Discard recording</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Are you sure that you want to discard the recording?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">This action will discard the recording, removing all frames.&#x0d;You can't undo this operation.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Webcam Recorder</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">No video device detected :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Check for video devices.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Scale: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Change the scale of the video.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Board Recorder</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Auto Record</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Enables recording while drawing.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Hold]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Color Selector</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Select a Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Red</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Green</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Blue</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Initial Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Current Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Latest Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Drag this to&#x0d;sample colors</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Click and drag to pick&#x0d;colors from your screen.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Exception Viewer</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Open Inner Exception</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Exception type</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Something wrong happened.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Send report</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Preset</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Encoder</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Name</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Description</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Other</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Automatically save when an option gets modified.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">All changes to this preset settings (encoding and exporting settings) need to be saved manually by pressing the save button.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">All changes to this preset settings (encoding and exporting settings) will be saved automatically.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Some of the properties of a default preset are read-only.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">You must give a name to this preset.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">There's already a preset with the same name.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Autosaves</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Changes to this preset are automatically saved.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Default ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Default preset for the encoder.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">For Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respects Twitter upload limits (except size and resolution).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Older and better known codec.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Image</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Project</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">High quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Better suited for recordings with more colors and gradients.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">High quality • Transparent background</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Supports saving the animation with a transparent background.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">High quality • Graphics</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Better for recordings with a lower quantity of colors.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • Default</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">Recommended for screen recording of regular UI. Uses Median Cut quantizer without dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Balanced</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Good quality for photo-like images using Wu's quantizer without dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • High quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">High quality for photo-like images using Wu's quantizer with higher bit level and Floyd-Steinberg error diffusion dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Low quality, faster</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantizing all frames with the same predefined 'web-safe' palette and Bayer 8x8 ordered dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Higher quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Higher image quality, but with a greater file size.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Lower quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Lower image quality, but with a smaller file size.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Higher quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Higher image quality, but with a greater file size.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Lower quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Lower image quality, but with a smaller file size.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Lower quality and faster encoding</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Even lower image quality, with a faster encoding, but with a smaller file size.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Low quality</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Low quality but faster encoding.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • High quality</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">High image quality and small file size, but slower encoding.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Lower quality</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Lower image quality, small file size and faster encoding.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">High quality</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">High image quality and small file size.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Insert Frames</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Both sides should have the same size, this window allows you to reposition and resize the image and the canvas. Click to select and resize.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Canvas size:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Fit Image&#10;on Canvas</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Resizes the canvas to fit both images inside (from the top left corner).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">There is a difference between frame sizes. You need to solve this before inserting the frames.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">New Frame(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Current Frame(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Image size:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Image position:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Reset Image Size&#x0d;and Position</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">New frames will be inserted into the&#10;current list of frames at the position:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Before</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">After</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Frame</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importing...</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Select the canvas fill color</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Import frames from video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importer:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Loading...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Scale:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Size:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Height:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Width:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Frame Rate:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Start:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">End:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Selection:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Frames:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Duration:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">It was not possible to load the video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">The previewer could not start. Try with another importer or check if the video is not corrupted.&#x0d;If you are using the MediaPlayer, check if the Windows feature called \"Media Features / Windows Media Player\" is turned on and make sure that you have the necessary video codec.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Timeout in getting the frame preview.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">No frame selected to be imported.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Encoder</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Starting</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Completed</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Copied to the clipboard</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Failed to copy</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Command executed</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Show the output of the command(s).</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Failed to execute command</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Failed to upload</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Click to open the page to delete the image (if available).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analysis:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copy:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commands:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">File deleted or moved</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Canceled</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Error</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Click here to show the details of this error.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Uploading</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Executing commands</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Processing {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparing for second pass</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Processing {0} - 2nd pass</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Creating file</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analyzing unchanged pixels</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Saving analysis result</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Open file</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Explore folder</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Remove from the list</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Show details</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copy as image</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copy filename</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copy folder path</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copy link</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Command Output</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Command output</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notifications</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Dismiss all notifications</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">File</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Home</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Playback</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Edit</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Image</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transitions</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistics</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Options</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Help</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">A new update is available!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Click here to read more about it.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Total count, selection count, selection index</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Preparing frames</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Invalid Loading - You can't import multiple files at once. Try choosing only one file.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Invalid Loading - You can't load multiple projects at once. Try choosing only one project.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Open a media (image or video) file</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Open a Media (Image or Video) or a Project File</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">All supported files</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Image</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Png animation</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp animation</s:String>\n    <s:String x:Key=\"S.Editor.File.Avif\">Avif animation</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp image</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg image</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png image</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip file, with images</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project as Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd file</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Head over to \"File > New\" to start a new recording</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Drag and drop images, videos or projects to import</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Thank you so much for using my app!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">The lower the framerate, the color count or the amount of changes between frames, the smaller the size</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Do you want to talk? Open \"Options > About\" for contact methods</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Having trouble? Contact me via the Feedback tool</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Would you like to try out the new recorder?&#x0d;Head over to \"Options > Recorder\" to enable it.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Recording</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webcam&#x0d;Recording</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Board&#x0d;Recording</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Blank&#x0d;Project</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">New</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Recording</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Webcam&#x0d;Recording</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Board&#x0d;Recording</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Insert</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Save as</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Load</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Recent&#x0d;Projects</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Save as&#x0d;Project</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Discard&#x0d;Project</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Action Stack</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Undo</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Redo</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Reset</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Clipboard</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Show Clipboard</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Paste</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Cut</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copy</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Adjust to&#x0d;Content</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Fit Image</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Select</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Select&#x0d;All</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Go To</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Inverse</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Deselect</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Playback</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">First</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Previous</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Play</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pause</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Next</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Last</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Playback Options</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Loop during playback.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Only used during playback.&#x0d;If you wish to change the loop settings for exporting Gifs and Apngs,&#x0d;it will be available inside the 'Save As' panel for some encoders.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Frames</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Delete</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Remove&#x0d;Duplicates</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Reduce&#x0d;Frame Count</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Smooth&#x0d;Loop</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Delete All Previous</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Delete All Next</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Reordering</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Reverse</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yo-yo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Move&#x0d;Left</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Move&#x0d;Right</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Delay (Duration)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Override</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Increase or&#x0d;Decrease</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Scale</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Size and Rotation</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Resize</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Crop</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Flip/Rotate</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Text</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Caption</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Free Text</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Title Frame</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Key&#x0d;Strokes</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Overlay</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Free&#x0d;Drawing</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Shapes</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Mouse&#x0d;Events</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Watermark</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Border</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Shadow</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Progress</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Obfuscate</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Styles</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Fade</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Slide</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">General</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Frame count</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Total duration</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Frame size</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Average duration (delay)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Current time</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">The current time (cumulative) based on the current frame being displayed.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Frame DPI and scale</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Selected Frame</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Cut Action</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">You can't cut all frames.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">The recording needs at least one frame.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Remove All</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Are you sure that you want to remove all frames?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">This action will discard the current open project and cannot be undone. Would you like to continue?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Discard Project</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Are you sure that you want to discard the project?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">This action will discard the project, removing all frames.&#x0d;You can't undo this operation.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Do you want to discard the previous project?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">If you choose not to do so, the previous project will be available to open via Recents Projects.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Delete Frames</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Are you sure that you want to delete?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">This action will delete {0} frame(s).&#x0d;You'll be able to undo this later.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Exiting the Editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Are you sure that you want to exit?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">The current project that you were working on can be opened again via 'Recent Projects'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">The current project that you were working on can be opened again via 'Recent Projects', but don't forget that after a few days, it will be automatically deleted.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Invalid Drag and Drop</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">You can't import multiple files at once</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Try choosing only one file.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Impossible to load file</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">The file could not be loaded because it has an invalid format.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">You can't import multiple projects at once</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Try choosing only one project.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">There is no text to be applied.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">You have to select at least one frame to apply the Caption to.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">You have to select at least one frame to apply the Text to.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">You have to select at least one frame to apply the Title Frame next to it.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">You have to select a border thickness greater than zero on at least one side.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">You have to select at least one frame to apply the Border to.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">The opacity must be greater than zero in order to make any difference in the frame.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">When using the shadow depth and blur radius as zero, it won't make any difference because it will be hidden behind the frame.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">You have to select at least one pixel to apply the Cinemagraph to. Select the pixels by drawing on top of them.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Fade Transition</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">You have to select at least one frame to apply the Fade Transition to.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">A fully transparent color won't create any effect on this transition.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Slide Transition</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">You have to select at least one frame to apply the Slide Transition to.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Loading frames</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Impossible to load project</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">It was not possible to load the frames because they are all corrupted or the images are not present where they are expected to.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Some frames could not be loaded</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">It was not possible to load the frames because they could not be found or because they are corrupted.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">You have to select at least one frame to apply the overlay to.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg not present. Add it to the Path environment variables or click here to open Options > Extras to set the location.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski not present. Add it to the Path environment variables or click here to open Options > Extras to set the location.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">There's not enough space left on the drive where this app stores its cache ({0}% left). Click here to open Options > Temporary Files to free some space.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">You tried to import multiple images with different DPIs, which is not supported. Some of them got imported, others need to be imported separately.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">You tried to import multiple images with different sizes, which is not supported. Some of them got imported, others need to be imported separately.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Retrieving frames from the cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Updating frames</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Preparing to import</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importing frames</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analyzing duplicates</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Adjusting the delay</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Discarding duplicates</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Discarding frames</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Discarding folders</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Resizing frames</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Cropping frames</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Applying overlay to frames</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Creating title frame</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Applying Flip/Rotate to frames</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Changing the delay</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Applying the transition effect</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Preparing to save</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Cancel loading and discard project.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Finding perfect loop</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Discarding frames not used in loop</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Frame:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Open Image</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Explore Folder</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Go To Frame</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Go to frame (0 to {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Save as...</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Remove selected frames</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">New screen recording</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">New webcam recording</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">New board recording</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">New project</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">New from media or project</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">New recording created</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">New webcam recording created</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">New board recording created</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">New project created</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Undo executed</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Reset executed</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Redo executed</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} frame(s) cut</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} frame(s) copied</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} frame(s) pasted</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom set to {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">All frames were selected</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Frame #{0} selected</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Selection inversed</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">All frames were deselected</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} frame(s) deleted</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Frame list reversed</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yo-yo effect applied</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Frame(s) moved to the left</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Frame(s) moved to the right</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Frames resized</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Frames cropped</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Frames flipped/rotated</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">The flip action applies to the selected frames and the rotate applies to all frames</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">This action applies to all frames</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">This action applies to selected frames</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">This action applies to all or selected frames, depending on your settings</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">The cinemagraph applies to all frames based on the first frame</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Overlay applied</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Title frame created</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">The title frame will be inserted before the selected frame</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Duration (delay) altered</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Transition inserted</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Framerate reduced</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplicates removed</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Hide</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Apply</s:String>\n    <s:String x:Key=\"S.Action.Open\">Open</s:String>\n    <s:String x:Key=\"S.Action.Save\">Save</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Cancel</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Recent Projects</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Looking for recent projects...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Creation date</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Frame count</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">There's no project selected. Select a project of the list to load.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">This project was already opened by another editor instance. A project cannot be opened a second time if it's already open on another editor.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Clipboard entries</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Clipboard entry:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Explore content</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Remove</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Paste behavior</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Before selected frame</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">After selected frame</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Difference</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Options</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Percent (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Keep the aspect ratio.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Quality:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Higher quality</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear • Lower quality</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nearest neighbor • Lower quality and faster</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Scaling quality.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">You have to select a different value to apply the Resize action to.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Points</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Top:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Left:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Bottom:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Right:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">The crop selection has to be smaller than the current frame size.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">The crop selection has to be bigger than 10x10 pixels.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Flip Horizontal</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Flip Vertical</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Rotate Left 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Rotate Right 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Reduce framerate</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Factor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Remove Count:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Delay adjustment:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Don't adjust</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Reduce the framerate of the entire project.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">It will remove {0} frame(s) after every {1} frame(s), without counting the removed ones.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Remove duplicates</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Similarity (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Frame removal:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Remove the first frame</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Remove the last frame</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Delay adjustment:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Don't adjust</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Use the average</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Use the sum</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">This action analyzes each frame (pixel by pixel) and removes the ones that are at least {0} % similar to its immediate neighbor.&#x0d;You can choose if you want to adjust the delay (duration of exhibition) of the frames.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Create smooth loop</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignore first:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Compare from:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">End</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Start</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Tries to find a frame at least {0} % similar to the start frame and deletes all later frames.&#x0d;You can choose if you want to ignore some initial frames and initiate the comparison from the start (after the threshold) or the end.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">The number of frames to ignore needs to be smaller than the total number of frames.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">It was not possible to create a smooth loop with the selected settings.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">You already have a smooth loop based on selected settings.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Text</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Font</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Family:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Style:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Weight:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Size:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Color:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Background Color:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Outline</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Thickness:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Layout</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Vertical:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontal:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Alignment:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Decoration:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Key Strokes</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Keys</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separator:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Edit your key strokes</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignore Ctrl, Alt, Shift, and Windows keys while not being used as modifiers.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">It will ignore lone key presses such as \"Control\", but it will not ignore \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignore software simulated keystrokes.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Only record user input keystrokes.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Translate\">Translate the special keys.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Translate.Info\">Useful if the language is other than English.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Extend the exhibition of the key strokes.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Start the exhibition of the key strokes earlier.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">By (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">There's no keystrokes on your recording.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Key Strokes Editor</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Frame number</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Detected key strokes</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Remove key stroke</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Add a key stroke:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Lowercase lettering.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">It lets you insert lower case single letters.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Mode</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Pen</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Eraser</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Select</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Stroke Eraser</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Width:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Height:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Tip:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rectangle</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Other:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Highlighter.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Fit To Curve.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">There are no drawings to be applied to the frames you selected.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">You have to select at least one frame to apply the Free Drawing to.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Insert</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Shapes</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radius:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Dashes:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controls the size of the dashes and the size of the gaps.&#10;You can set multiple sizes to create an elaborate dash style.&#10;The default is \"1 0\" or empty, meaning a dash with no gaps.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Fill</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Mouse Events</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Mouse Highlight Color:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Left button color:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Middle button color:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Right button color:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">1st extra button color:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">2nd extra button color:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Image</s:String>\n    <s:String x:Key=\"S.Watermark.File\">File:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacity:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Select an Image</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">You have to select an image to apply to the selected frame(s).</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">You have to select at least one frame to apply the Watermark to.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Appearance</s:String>\n    <s:String x:Key=\"S.Border.Info\">Use negative values to make the border expand the image. When doing so, the border will be applied to all frames.&#10;If no negative value being used, the border will be applied only to the selected frames.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Shadow color:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Background color:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Direction:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Blur radius:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Depth:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelate</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Blur</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Darken</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Lighten</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Obfuscation options</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Pixel size:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Blur level:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Darkening level:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Lightening level:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calculate the average color for each pixelated block.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Apply the obfuscation to the inverse of the selection.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Smoothness</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Use the selection tool to select the part of the frame that should be obfuscated.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Use the selection tool to select the part of the frame that should not be obfuscated.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">You didn't select anything. Please use the selection tool to select the rectangle that should be obfuscated.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Type</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Bar</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Text</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precision:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutes</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Seconds</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milliseconds</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Percentage</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Frame Number</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Actual date/time</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Custom</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Show the total.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Format:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">You can use the date and time format from .Net Framework.&#x0d;The specification is available in these two links below.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standard formats</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Custom formats</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Count from:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Starts counting the frame number from this selected number.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientation:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Delay update</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Delay mode:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Override (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Increase or decrease (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Scale (in %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">New Value</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimum of 10ms per frame.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Decrease/Increase Value</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Scale Value</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">This new value will replace the duration (delay) of all selected frames. The value can be from 10ms to 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">This value will decrease/increase the duration (delay) of each selected frame.&#x0d;You can decrement/increment by selecting a value between -10000ms and 10000ms, but the final duration of each frame will be restricted to between 10ms and 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Scale the duration (delay) of each selected frame by the percent value.&#x0d;You can scale each frame's duration by selecting a value between 1% and 1000%, but the final duration of each frame will be restricted to between 10ms and 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Use the pen to select the pixels that should not remain static (that should change among frames), by painting on top of them.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Transition Length</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Transition Delay</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Fade To...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">The next frame</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">A color</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Color</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">The transition will be applied between the selected frame and the next one.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">File type and preset</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">The format of the output file.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">The export preset that holds all currently displayed settings.&#10;Manage your export presets via the buttons below.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Animated image</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Frames</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Other</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String> \n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime File Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Project</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif project</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">Psd</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop file</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Presets:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Default</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Add a new export preset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Save the current settings to this export preset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Edit basic export preset settings.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Remove the currently selected export preset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Reset the settings of this export preset to its defaults.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Deleting the Preset</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Are you sure that you want to delete the preset?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected preset?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Reseting the Preset</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Are you sure that you want to reset the preset?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">This action cannot be undone.&#10;&#10;Would you like to reset the selected preset to its default settings?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Encoder</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Encoder and quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Encoder responsible for generating the output file.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Built-in encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">System</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encoder made available by the system.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">External encoder, made by FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">External encoder, made by Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Encoder options</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Enable the advanced mode.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Manually input the parameters to control the encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parameters:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">List of parameters that will be passed to FFmpeg.&#10;&#10;Special parameters:&#10;{I} is the input path (the frames).&#10;{O} is the output path (the exported file).&#10;{W} is the width of the frame.&#10;{H} is the height of the frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">To encode with 2-pass, simply add '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Preview</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Preview the parameter list that will be passed to FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codec docs</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format docs</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filter docs</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif options</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Quality:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Colors:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maximum number of colors (for each frame).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Best</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Fastest</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Use an even faster encoding process.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">May reduce the quality of the gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Loop:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Looped gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Repeat forever.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Repeat count.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Detect unchanged pixels.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Dither:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer scale:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Background Color:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixels with alpha (transparency) that are considered opaque by the selected quantizer will be blended with this color before getting the quantized color.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alpha Threshold:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Determines the input alpha value under which the quantized color will be transparent.&#x0d;&#x0a;If 0, then the result will never have transparency.&#x0d;&#x0a;If 255, then only fully transparent pixels are considered transparent.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">White Threshold:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Determines the lowest input brightness to consider the result color white.&#x0d;&#x0a;It affects the brightness of the result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Direct Mapping</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">When checked, the quantized color is determined by a direct mapping rather than looking up the nearest palette entry.&#x0d;&#x0a;It speeds up quantization but may end up in a higher contrast result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Palette Size:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Determines the maximum size of the palette per frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Custom bit level.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">When checked, the bit level can be configured manually.&#x0d;&#x0a;⚠️ Warning: The highest bit level might require a LOT of memory!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Higher value means more accuracy, larger target color space, slower processing and larger memory usage.&#x0d;&#x0a;For example, if 1, then the result can have no more than 8 colors, or when 2, no more than 64 colors.&#x0d;&#x0a;For Octree and Wu quantizers it affects also maximum number of monochromatic shades.&#x0d;&#x0a;For example, if 5 (which is the default for Wu quantizer), only 32 monochromatic shades can be differentiated.&#x0d;&#x0a;⚠️ Caution: The Wu quantizer consumes at least 650 MB with the highest value.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">Linear color space</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">When checked, some operations (alpha blending with background color, quantizing, dithering, looking up the nearest colors in the palette) are performed in the linear color space rather than the sRGB one.&#x0d;&#x0a;Working in the linear color space is slower but provides a better quality result, especially when the quantizer uses only a few colors.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Remark: When using just a few colors, the brightness of a possibly resized preview may be incorrect because WPF performs resizing in the sRGB color space.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Black and White</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Fixed 1 bpp palette with the black and white colors.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Grayscale 4 colors</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Fixed 2 bpp palette with 4 grayscale entries.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Grayscale 16 colors</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Fixed 4 bpp palette with 16 grayscale entries.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Grayscale 256 colors</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Fixed 8 bpp palette with 256 grayscale entries.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">System default 4 bpp palette</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Fixed 4 bpp palette using the standard 16 sRGB colors.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">System default 8 bpp palette</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Fixed 8 bpp palette including the 'web-safe' colors and transparency.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 palette</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Fixed 8 bpp palette using the RGB 332 color space.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Optimizing palette for each frame with the Octree algorithm.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimizing palette for each frame with the Median Cut algorithm.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Optimizing palette for each frame with Xiaolin Wu's algorithm.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Ditherer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Strength:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">The strength of the ditherer, or 0 to auto calibrate strength.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Seed:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">An integer seed to be used to produce a specific random dithering pattern.&#x0d;&#x0a;Leave empty to use a random seed for every frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">None</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Frames are quantized without dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentine Processing</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">When checked, the error propagation direction is altered from line to line.&#x0d;&#x0a;This helps to reduce the ripple effect of the error diffusion dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">The 2x2 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">The 3x3 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">The 4x4 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">The 8x8 Bayer matrix pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Dotted Halftone (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">A 8x8 matrix with a dotted halftone pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blue Noise (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">A 64x64 matrix with a blue noise pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson's 4x3 matrix with 6 effective values.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">The original 3x2 matrix by Floyd and Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">An 5x3 matrix by Jarvis, Judice and Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra's 5x3 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra's 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra's 3x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">A 7x4 hexagonal matrix by Stevenson and Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki's 5x3 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Random Noise</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Random white noise.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Interleaved Gradient Noise</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Nonrandom gradient noise generated by a formula.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Preview</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Info\">Use Control + Mouse Wheel to zoom into the preview image.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Note: The actually generated final frame may have a better quality if delta frames&#x0d;&#x0a;are allowed, and the selected quantizer optimizes the palette for each frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Show current frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">When checked, the preview demonstrates the settings on the current frame instead of a standard image example.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Auto preview is disabled due to the high memory requirement of the current settings. Click to refresh the preview.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Failed to generate preview: {0}&#x0d;&#x0a;Click to try to generate it again.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Animation Settings</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Endless loop.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">When checked, the animation will be looped indefinitely.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Back and forth.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">When checked, the animation will be played back and forth.&#x0d;&#x0a;This is achieved by duplicating the frames meaning larger file size and longer encoding time.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Repeat Count:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Specifies how many times the animation will be played.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Allow delta frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">When checked, unchanged pixels are attempted to be detected during the encoding.&#x0d;&#x0a;When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors.&#x0d;&#x0a;This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Remark: This option may cause noticeable artifacts in colors or in the dithering pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta Tolerance:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Specifies the maximum tolerance when detecting changed pixels.&#x0d;&#x0a;If 0, then no difference is tolerated at all.&#x0d;&#x0a;If 255, then there might be frames (or even all of them) that are added with no content.&#x0d;&#x0a;Reasonable range is between 0 and 16 for an optimized quantizer. The ones with fixed colors can be used with somewhat larger values with dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">If Delta Tolerance is too high the result might have poor quality. Click to reset delta tolerance.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Allow clipped frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">When checked, the encoder is allowed to add smaller frames than the actual resolution.&#x0d;&#x0a;If Allow Delta Frames is unchecked, then allows only clipping possible transparent borders.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Allow Delta Frames is ignored because the current configuration does not use alpha and Allow Clipped Frames is unchecked. Click to enable clipped frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Allow Clipped Frames has no effect because the current configuration does not use alpha and Allow Delta Frames is unchecked. Click to enable delta frames.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng options</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Prediction:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">None</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Average</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Mixed</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Looped apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Detect unchanged pixels.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Paint all unchanged pixels with a transparent color.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Preset:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">None</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Default</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Picture</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Photo</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Drawing</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Icon</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Text</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Use lossless mode.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Advanced</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Method of configuring the encoder parameters:&#10;Normal: Use standard UI controls.&#10;Advanced: Use a text box to type the parameters.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">The video encoder, responsible for&#10;converting the raw pixels to the output file.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Preset:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">None</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Placebo\">Placebo</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Very Slow</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Slower</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Slow</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Faster</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Very Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra Fast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Quality</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanced</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Speed</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Default</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Lossless</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Lossless (High Performance)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">High Performance</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">High Quality</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray Disk</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Low Latency</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Low Latency (High Performance)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Low Latency (Hight Quality)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Encoding speed to compression ratio,&#10;slower presets may give you better compression&#10;(quality per filesize).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardware Acc.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Off</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">On</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatic selection</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controls the usage of dedicated hardware (video graphics).&#10;Off: Doesn't use dedicated hardware.&#10;On: Uses dedicated hardware and lets you select special encoders.&#10;Auto: Uses dedicated hardware and automatic selects the right encoder, when possible.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixel format:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatic</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Video sync method.&#10;Auto: Chooses between 1 and 2 depending on muxer (format) capabilities.&#10;Passthrough: Each frame is passed with its timestamps to the encoder.&#10;Constant: Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.&#10;Variable: Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.&#10;Drop: As passthrough but destroys all timestamps, making the encoder generate fresh timestamps based on framerate.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Constant framerate</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Variable framerate</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Framerate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Custom</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Pass:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constant Rate Factor.&#10;Quality and rate control setting.&#10;Leave it empty if you don't wish to set this property.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Quality level:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Smaller values means better quality.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Target video bit rate.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitrate mode:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constant</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variable</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Min Rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimum bitrate tolerance.&#10;Most useful when using CBR mode.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Max Rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximum bitrate tolerance.&#10;Requires the buffer size to be set too.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Buffer size:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Rate control buffer size.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zip the images.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exports the images inside a zipped folder.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Compress the image.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Compress the image data using the RLE algorithm.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Save the timeline data.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exports the timings of the frames, instead of just the frames.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Export options</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Export partially.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Save the file to a folder of your choice.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Overwrite?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Warn</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Only warns that another file exists with the same name.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Prompt</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Asks if the user wants to overwrite the file.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Allow</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Simply overwrites the file.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Save as project too (same folder, same filename).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Upload the file.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copy to the clipboard.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">File</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copies the output file into the clipboard.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Folder path</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copies the folder path of the output file into the clipboard.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">File path</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copies the path of the output file into the clipboard.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copies the link generated by the upload service into the clipboard.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Execute post encoding commands.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Type commands to be executed after the encoding.&#x0d;To execute multiple commands, type each one on a separated line.&#x0d;Macros:&#x0d;{p} = Output file path.&#x0d;{f} = Output folder path.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Partial export</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Select the partial export method.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expression</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exports parts of the animation based on a simple expression.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Frame range</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exports only part of the animation within the frame range.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Time range</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exports only part of the animation within the timeframe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Selection</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exports only the frames selected in the timeline.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">No frame selected.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 frame selected.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} frames selected.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">From:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">To:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Expression:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Type frame numbers separated by a comma or&#10;frame sequences separated by a minus sign:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">File</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Destination folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Select the output folder</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Choose the location.&#x0d;Press Shift and click to&#x0d;select the filename too.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">File format</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Name of the file. Insert Date/Time format between '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Increase the file number</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Decrease the file number</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">A file with the same name already exists.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Save to the clipboard.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">You need to select where to save the file (to a folder, to the clipboard or upload somewhere else).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">You didn't select the file extension.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">When selecting the advanced mode, you must type the parameters in the parameters field.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">The special parameters {I} (input) and/or {O} (output) are missing from the parameters field.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">To execute a post encoding command, you need to type something on the commands text field.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">You must select at least one frame when having the option to export only selected frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">The expression to partially export the project is invalid.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">No upload service selected. You need to select a destination.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">You can't upload to the selected service because it was not authorized. Head over to Options > Upload Services to authorize this app.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">You can't select the option of copying the link because you didn't set to upload the file.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">You need to select an output folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">The output folder does not exist.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">The output folder contains one or more invalid characters. Please, select a valid folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">You need to pick a filename.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">The output file name contains one or more invalid characters. Please, select a valid file name.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Filename already in use. Set to overwrite or pick another filename or folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">There's already a project with the same filename. Set to overwrite or pick another filename or folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">The operation was canceled.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Select the upload preset, which has details about the service in use for upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">This upload service imposes limits.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Add a new upload preset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Edit upload preset settings.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">View the upload history of this preset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Remove the currently selected upload preset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Select an upload preset</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Pick one from this list.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">No upload preset available for this format</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Add a preset by using the button below.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Deleting the Upload Preset</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Are you sure that you want to delete the upload preset?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected upload preset?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Export Frames</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Are you sure that you want to export the frames?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">This action will export {0} frames directly into the selected folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Overwrite</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Would you like to overwrite the file?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">A file with the name '{0}' already exists in that folder.\\r\\nWould you like to overwrite it?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Would you like to overwrite the files?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">One or more files with the same name already exist in that folder.\\r\\nWould you like to overwrite them?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Command Previewer</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Command</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Input path</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Output path</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Send</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Preview</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Send feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Title</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Message</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">If you are experiencing a bug, don't forget to explain to me how you got it, step by step.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Type of feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Suggestion</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Issue/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Your email</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">You need to type a title for the feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">You need to type a message in the feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">You need to type your email, to receive a reply from the developer.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Sending in the background. This window will close shortly.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Attachments (Optional, 20MB Maximum)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Add Attachments</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Remove All Attachments</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">I can understand English</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">and Portuguese (Brazilian and European).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">This is what you'll send, plus all the attachments.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Troubleshoot</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Is there any window missing?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">If any of the windows is missing (outside of the screen),&#x0d;use the options below to reset its current and startup position.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Here's where each window is currently located:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Here's where each window will open next time:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Move all windows to the main screen.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Reset the startup position of all windows.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Italic</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Oblique</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Black</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Demi Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra Black</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra Light</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Heavy</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Light</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regular</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Thin</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra Black</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra Light</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Top</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Center</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Bottom</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Stretch</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Left</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Center</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Right</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertical</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Left</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Right</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Center</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Justify</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">None</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Underline</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Strikethrough</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">OverLine</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Baseline</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.es-AR.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Aceptar</s:String>\n    <s:String x:Key=\"S.Back\">Volver</s:String>\n    <s:String x:Key=\"S.Cancel\">Cancelar</s:String>\n    <s:String x:Key=\"S.Yes\">Sí</s:String>\n    <s:String x:Key=\"S.No\">No</s:String>\n    <s:String x:Key=\"S.Add\">Agregar</s:String>\n    <s:String x:Key=\"S.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Título</s:String>\n    <s:String x:Key=\"S.Description\">Descripción</s:String>\n    <s:String x:Key=\"S.SelectColor\">Hacé clic acá para seleccionar el color</s:String>\n    <s:String x:Key=\"S.Suppress\">Supresión</s:String>\n    <s:String x:Key=\"S.Preview\">Vista previa</s:String>\n    <s:String x:Key=\"S.Size\">Tamaño</s:String>\n    <s:String x:Key=\"S.Background\">Fondo</s:String>\n    <s:String x:Key=\"S.Color\">Color:</s:String>\n    <s:String x:Key=\"S.Delay\">Retraso</s:String>\n    <s:String x:Key=\"S.DelayMs\">Retraso (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Valor -+ (ms):</s:String>\n    <!--<s:String x:Key=\"S.ScaleValue\">Scale Value:</s:String>-->\n    <s:String x:Key=\"S.Margin\">Margen:</s:String>\n    <s:String x:Key=\"S.Padding\">Relleno:</s:String>\n    <!--<s:String x:Key=\"S.MinHeight\">Min height:</s:String>-->\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">Ufa, el programa se cerró inesperadamente :(</s:String>\n    <!--<s:String x:Key=\"S.Required\">Required field.</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Title\">Missing Dependency</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 is not present</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Message\">In order to properly use this app, you need to download the correct version of the .Net Framework.&#10;Would you like to open the web page to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Title\">Only one instance permitted</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Header\">The app is already running</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif is already running, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>-->\n    <s:String x:Key=\"S.Exiting.Title\">Saliendo de ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">¿Estás seguro que querés salir?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Se cerrarán todas las ventanas y se quitará el ícono del área de notificaciones.</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nueva grabación de pantalla</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nueva grabación de webcam</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nueva grabación de pizarra</s:String>\n    <s:String x:Key=\"S.Exit\">Salir</s:String>\n    \n    <!--Commands-->\n    <!--<s:String x:Key=\"S.Command.NewRecording\">New screen recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NewWebcamRecording\">New webcam recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NewBoardRecording\">New board recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NewAnimation\">New animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertRecording\">Insert screen recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertWebcamRecording\">Insert webcam recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertBoardRecording\">Insert board recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertFromMedia\">Insert from media (images and videos)</s:String>-->\n    <!--<s:String x:Key=\"S.Command.SaveAs\">Save as...</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Load\">Load files (images, videos and projects)</s:String>-->\n    <!--<s:String x:Key=\"S.Command.LoadRecent\">Load recent projects</s:String>-->\n    <!--<s:String x:Key=\"S.Command.DiscardProject\">Discard current project</s:String>-->\n    <!--<s:String x:Key=\"S.Command.OverrideDelay\">Override delay of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Increase/Decrease delay of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.ScaleDelay\">Scale delay of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Zoom100\">Set zoom to 100%</s:String>-->\n    <!--<s:String x:Key=\"S.Command.SizeToContent\">Adjust the window to the frame size</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FitImage\">Fit image to the available window size</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FirstFrame\">Select the first frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.PreviousFrame\">Select the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Play\">Play the animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NextFrame\">Select the next frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.LastFrame\">Select the last frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Undo\">Undo</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Redo\">Redo</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Reset\">Undo all changes in the project</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Copy\">Copy the selected frames and store them in the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Cut\">Cut the selected frames and store them in the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Paste\">Paste the frames from the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Delete\">Delete all selected frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.DeletePrevious\">Delete all previous frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.DeleteNext\">Delete all next frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.RemoveDuplicates\">Remove duplicates</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Reduce\">Reduce frame count</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Reverse\">Reverse animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Yoyo\">Makes the animation go forward and backwards</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveLeft\">Move the selected frame to the left</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveRight\">Move the selected frame to the right</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Resize\">Resize all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Crop\">Crop all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FlipRotate\">Flip or rotate the frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Caption\">Add a caption</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FreeText\">Add a free-floating text</s:String>-->\n    <!--<s:String x:Key=\"S.Command.TitleFrame\">Add a frame with a title on it</s:String>-->\n    <!--<s:String x:Key=\"S.Command.KeyStrokes\">Inserts keys pressed during the recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FreeDrawing\">Draw free forms</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Shapes\">Add shapes</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MouseEvents\">Mouse clicks</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Watermark\">Select an image and add as watermark</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Border\">Add borders</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Shadow\">Add drop shadow</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Obfuscate\">Hide sensitive parts on your frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Cinemagraph\">Use the drawing tools to select which parts of the frame should not remain static throughout the animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Progress\">Progress bar or text with playback details</s:String>-->\n    <!--<s:String x:Key=\"S.Command.SelectAll\">Select all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.GoTo\">Navigate to frame by index</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InverseSelection\">Inverse the selection of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Unselect\">Unselect all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Fade\">Fade transition</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Slide\">Slide transition</s:String>-->\n    <!--<s:String x:Key=\"S.Command.ClearAll\">Clear all completed encodings</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveUp\">Move up</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveDown\">Move down</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Add\">Add</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Open\">Open</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Edit\">Edit selected item</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Save\">Save selected item</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Remove\">Remove selected item</s:String>-->\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Inicio</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Grabador</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Abre el grabador de pantalla, en donde podés comenzar a grabar tu pantalla fácilmente.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Abre el grabador de webcam.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Pizarra</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Abre el grabador de pizarra, en donde podés comenzar a grabar tus dibujos.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Abre la ventana del editor, el punto central de esta aplicación, en donde podés iniciar y editar una nueva grabación.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Configuración</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nuevo lanzamiento disponible</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Descarga la última versión de ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Actualizar</s:String>\n    <!--<s:String x:Key=\"S.Updater.Header\">A new update is available</s:String>-->\n    <s:String x:Key=\"S.Updater.NewRelease\">¡Nuevo lanzamiento!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">¡Nuevo lanzamiento disponible: versión {0}! Hacé clic acá para más detalles.</s:String>\n    <!--<s:String x:Key=\"S.Updater.Version\">Version</s:String>-->\n    <s:String x:Key=\"S.Updater.Portable\">Portátil</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Instalador</s:String>\n    <!--<s:String x:Key=\"S.Updater.Info.WhatsNew\">What's new?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Info.BugFixes\">Bug fixes:</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">A new version is available for you to download.&#x0d;Would you like to open the browser to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.RunAfter\">Execute the app after the update.</s:String>-->\n    <s:String x:Key=\"S.Updater.Download\">Descargar</s:String>\n    <!--<s:String x:Key=\"S.Updater.Install\">Install</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Downloading\">Downloading...</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Show\">It was not possible to show the download details.</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Download\">It was not possible to download the update.</s:String>-->\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif: Configuración</s:String>\n    <s:String x:Key=\"S.Options.App\">Aplicación</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Grabador</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tareas automatizadas</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Atajos</s:String>\n    <s:String x:Key=\"S.Options.Language\">Idioma</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Archivos&#10;temporales</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Servicios&#10;de subida</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Donar</s:String>\n    <s:String x:Key=\"S.Options.About\">Acerca de ScreenToGif</s:String>\n    <s:String x:Key=\"S.Options.Other\">Otros</s:String>\n    <!--<s:String x:Key=\"S.Options.Warning.Follow.Header\">Missing shortcut key for cursor following</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.Follow.Message\">In order to use the mouse cursor following feature, you must set a shortcut key to toggle it when needed.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">Missing dependencies for screen capture</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">In order to capture the screen with the Desktop Duplication API, you must download the SharpDx libraries.</s:String>-->\n    \n    <!--Options • Application-->\n    <!--<s:String x:Key=\"S.Options.App.Startup\">Startup</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Start&#10;manually</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">The app will only be executed when you manually do so.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Start with&#10;Windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">The app will be executed after Windows startup.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossible to alternate between startup modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Allow only a&#10;single instance</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">You'll be able to run the app once per user and executable,&#10;meaning that different user or executable instances can co-exist.&#10;When trying to execute the app again, the second instance will try to give focus to the first one and end itself.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Allow multiple&#10;instances</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">You'll be able to run the app multiple times at the same time, without restriction.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray\">Start minimized to the system tray.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(System tray icon will be visible while this option is active)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window\">Start with:</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Ventana de inicio</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Grabador de pantalla</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Grabador de webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Grabador de pizarra</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Ventana de edición</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Window which shows up first when the app starts)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Theme\">Theme</s:String>-->\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Esquema de colores</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Muy claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Oscuro</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Very Dark</s:String>-->\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Personalizado</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Example colors.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray\">System tray icon</s:String>-->\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Mostrar el programa en la bandeja de notificaciones del sistema (el área de notificaciones)</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Mantener el programa abierto, incluso si se cierran todas las ventanas</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Do nothing</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Open a window</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">No window</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimize/restore all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimize all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restore all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Left click:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Left click (x2):</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Middle click:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Window:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Or else, opens:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General\">General</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Workaround for the 'Not enough quota...' crash.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Preguntarme antes de cerrar el programa (vía el comando \"Exit\")</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Deshabilitar aceleración por hardware</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(The user interface will be rendered via software mode)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Buscar actualizaciones de localización</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Updated translations will be downloaded and installed automatically)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Buscar actualizaciones</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Automatically install updates after closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Force the update to run with elevated privileges.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.PromptToInstall\">Prompt me before the installation starts.</s:String>-->\n\n    <!--Options • Recorder-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface.Old\">Old</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface.New\">New</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency\">Capture frequency</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Mode\">Capture mode</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Use the older capture method, which is slower and may not work capturing games,&#10;but requires no additional plug-ins.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Use the Desktop Duplication API capture method, which is faster and&#10;is able to capture fullscreen games, but requires the SharpDx plug-in and Windows 8 or newer.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.File\">Save to&#10;file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.File.Info\">Each frame captured will be saved directly as an image on disk.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache\">Memory&#10;cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache.Info\">Each frame captured will be stored as a pixel array on memory first (may be compressed before).</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression\">Compression:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Slower but likely more optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Faster but likely less optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">No compression</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(No compression should be performed while capturing frames)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize\">Cache size:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. After reaching this size, the data will be written/flushed to the disk)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Mostrar el cursor del mouse en la grabación</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Seleccionar el color del cursor</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Usar cuenta regresiva</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(en segundos, el programa espera antes de iniciar una captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Tasa fija de fotogramas</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Retraso constante, no cambia con la latencia de grabación)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">Habilitar grabación asincrónica</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(Ayuda a reducir el retraso de interface al grabar)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Ocultar la barra de título (modo delgado)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Habilitar la lupa</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(habilita una lupa al seleccionar el área de grabación)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Enable cursor following.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(The recording area will reposition itself based on the location of the cursor)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Buffer margin in pixels, where the recording area starts getting repositioned)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Additional buffer margin in pixels, where the UI starts getting hidden)</s:String>-->\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Fondo del editor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Tamaño de grilla</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Muy pequeño</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Pequeño</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Muy grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Quiero cuadros grandes</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Soy ciego/a</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Anchura</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Color base</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Color par</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Color impar</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Extender barra de título / croma</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Ajustar automáticamente el tamaño de la ventana basado en el tamaño del fotograma, justo después de la carga.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Ajustar automáticamente el acercamiento del fotograma basado en el tamaño de la ventana, justo después de la carga.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Preguntarme antes de borrar los fotogramas</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Preguntarme antes de descartar un proyecto</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Preguntarme antes de cerrar el editor (si hay un proyecto abierto)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Habilitar triple clic para seleccionar el texto</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Dibujar el contorno del texto por fuera de las letras</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impose a limit to the undo/redo history.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Older actions will be removed when the limit is reached)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximum number of actions stored)</s:String>-->\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Tarea automatizada</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista de tareas automatizadas</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Tarea</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detalles</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Elegí una tarea)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Estas tareas se ejecutan secuencialmente desde arriba de la lista hacia abajo.&#10;Esto sucede cuando abrís un proyecto por primera vez usando el editor.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Grabador de pantalla:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Abre el grabador predeterminado de pantalla)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Grabador de webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Abre el grabador de webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Grabador de pizarra:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Abre el grabador de pizarra, así podés grabar tus dibujos)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Abre otra ventana del editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Configuración:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Abre la ventana de configuración. Sólo podés abrir una por vez.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Salir:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Cierra todas las ventanas y quita el programa de la bandeja de notificaciones del sistema)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Grabadores</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Iniciar/Pausar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Inicia o pausa la grabación. Se usa para tomar capturas de pantalla si dicho modo está activo)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Detener:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Detiene la grabación y abre el editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Descartar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Descarta la grabación activa, cuando está en pausa)</s:String>\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Cursor following:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Toggles the adjustment of the recording area based on the position of the cursor)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Disable following:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Temporarily disables the adjustment of the recording area based on the position of the cursor, only modifier keys accepted)</s:String>-->\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Hacé clic para hacer foco del teclado, luego presioná las teclas deseadas y modificadores.&#10;Algunas combinaciones de teclas no están permitidas.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Idioma de la aplicación</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Detectar automáticamente</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Idioma actual del sistema operativo (si está disponible)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">¿Te gustaría localizar mi programa?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Hacé clic acá para leer la guía de localización y descargar el programa de localización</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Luego,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">hacé clic acá para importar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">y probar tu localización.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Enviámela por</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">correo electrónico (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">cuando terminés de localizarla.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Hacé clic para abrir una página web con la guía</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Abre la página de importación</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Abre tu cliente de correo electrónico</s:String>\n    \n    <!--Options • Storage-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} free of {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Check\">Check again how much space left there is.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Clear\">Clear the cache folder.&#10;You'll be able to decide if you want to keep recent projects or not.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Hay poco espacio en la unidad seleccionada actualmente. Por favor, limpiá la carpeta de archivos temporales o cambiá de unidad.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible to retrieve the drive details.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.None\">No files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.None\">No folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} folder</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in use</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths\">Paths</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Elegí la ubicación para los archivos temporales</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Elegí la ubicación para los archivos de registro de errores</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Browse\">Browse the selected folder.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Settings\">Ubicación de la configuración</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">No existe</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Creá un archivo de configuración local vacío.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Quitar el archivo de configuración</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Abrí la carpeta en donde se encuentra el archivo de configuración.&#x0d;De ser posible, mantené la tecla \"Ctrl\" al hacer clic para abrir un archivo.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Patrón de carga de configuración: Default ◄ AppData ◄ Local.&#x0d;• Si no hay ningún archivo de configuración presente en la carpeta \"Local\", la aplicación busca dentro de la carpeta \"AppData\", no se usa \"Default\" si no hay un archivo de configuración presente.&#x0d;• Si no hay configuración en \"Local\", todas las configuraciones se guardan en el archivo de configuración de \"AppData\".</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Quitar los proyectos viejos automáticamente</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Al abrir el editor, una tarea en segundo plano eliminará los proyectos más antiguos que la cantidad configurada</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(en días, cualquier proyecto más antiguo que este tiempo será eliminado/descartado después de abrir el editor)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Clear Cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Header\">Would you like to clear the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Info\">When you create a recording or open something to edit, a project is created and stored inside the cache folder.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Question\">Would you like to remove these projects from the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Don't remove recent projects.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Only the projects older than {0} days, that are not currently in use, will be removed)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(All the projects, that are not currently in use, will be removed)</s:String>-->\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Servidor proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Deshabilitado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Sistema</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Usa el proxy del sistema)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Servidor:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Puerto:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Nombre de usuario:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Contraseña:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Get\">Obtener clave OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">Pegá la clave de autorización acá</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autorizar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Refresh\">Refrescar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">Limpiar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (anónimo)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Usar enlaces directos</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Obtené enlaces con la extensión \".gifv\" en lugar de \".gif\"</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Subir GIFs a un álbum seleccionado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Álbum:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Preguntarme antes de subir</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">No se pudo abrir la página para obtener la clave de autorización de Imgur</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Para autorizar este programa, necesitás ofrecer la clave de autorización</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Se completó la autorización con Imgur</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Falló la autorización con Imgur. Probá de nuevo en algunos segundos u obtené una nueva clave.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">It was not possible to authorize the app</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">Check if you provided the correct token and if you have an internet connection.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">Para refrescar la autorización de este programa, primero necesitás finalizar el proceso de autorización</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">No autorizado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">La autorización venció el {0}</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorización válida hasta el {0}</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Se quitó la autorización de Imgur</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">No se pudo cargar la lista de álbumes</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat (anónimo)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">Clave OAuth:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">Elegí un destino</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Elegí un álbum (opcional)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Si querés, podés elegir el álbum de destino:</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Herramientas externas disponibles</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Hacé clic acá para descargar&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Descargando…</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Descargado&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Hacé clic acá para abrir las propiedades del archivo</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Apps distributed by the Microsoft Store cannot download other apps. You'll have to download it manually.</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Ubicación de FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Seleccioná la ubicación del ejecutable FFmpeg</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg executable</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">La ruta del FFMpeg ejecutable contiene uno o más caracteres no válidos. Por favor, seleccioná una ubicación válida para dicho ejecutable.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Ubicación de Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Seleccioná la ubicación del Gifski ejecutable</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski library</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">La ruta del Gifski ejecutable contiene uno o más caracteres no válidos. Por favor, seleccioná una ubicación válida para dicho ejecutable.</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation\">SharpDx folder (SharpDX.dll, SharpDX.Direct3D11.dll and SharpDX.DXGI.dll)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">Select the location of the SharpDx libraries</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">The path for the SharpDx libraries contains one or more invalid characters. Please, select a valid folder for those libraries.</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licencia de FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licencia de Gifski</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx license</s:String>-->\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Doná</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Doná US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Doná €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Abre el sitio de PayPal; divisa seleccionada: dólar estadounidense</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Abre el sitio de PayPal; divisa seleccionada: euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Abre el sitio de PayPal; elegí vos la divisa</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe\">Subscribe</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donate monthly via Patreon.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Donate monthly via Flattr.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift\">Gift games</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift.Steam\">Gift games via Steam.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift.Gog\">Gift games via GOG.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Kofi\">Pay for a coffee via Ko-fi.</s:String>-->\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Criptodivisas</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copy the BitcoinCash address.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Support\">Support</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Support.Visit\">If you wish to support the project :)</s:String>-->\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versión:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Autor: Nicke Manarin</s:String>\n    <!--<s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store version. Some features are disabled due to enforced policies.</s:String>-->\n    <s:String x:Key=\"S.Options.About.Contact\">Contacto</s:String>\n    <!--<s:String x:Key=\"S.Options.About.Contact.Discord\">Join server</s:String>-->\n    <!--<s:String x:Key=\"S.Options.About.Contact.Facebook\">Visit page</s:String>-->\n    <!--<s:String x:Key=\"S.Options.About.Contact.Gitter\">Join room</s:String>-->\n    <s:String x:Key=\"S.Options.About.Technical\">Técnico</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licencia:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Este es un programa completamente gratuito)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Código fuente:</s:String>\n    <!--<s:String x:Key=\"S.Options.About.Technical.Privacy\">Privacy policy:</s:String>-->\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Agradecimientos especiales:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">A todos quienes me apoyaron, gente que envió sus comentarios y/o donaciones.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Localización</s:String>\n    <!--<s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Recognized\">Recognized as {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.NotRecognized\">Not recognized</s:String>-->\n    <s:String x:Key=\"S.Localization.Usage.First\">El recurso que esté más abajo es el que se está usando actualmente.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Para aplicar tu recurso personalizado, movelo al final de la lista.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant\">Redundant language code</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown\">Unknown language</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Grabar</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continuar</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Detener</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Descartar</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Capturar</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Anchura</s:String>\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fps\">Cantidad máxima de fotogramas por segundo</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Capturar a ventana (arrastrá y soltá para capturar)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Inicio previo</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (pausado)</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">It was not possible to capture the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">It was not possible to capture the screen. The capture method returned no frame after 5 tries.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">It was not possible to start/pause capturing the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 or newer is required for capturing the screen using the Desktop Duplication API.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">The SharpDx libraries are required in order to capture the screen using the Desktop Duplication API. Go to Options > Extras to download it.</s:String>-->\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Área</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Ventana</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Aceptar</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Reintentar</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Cancelar la selección (tecla \"Esc\")</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Hacé clic y arrastrá para seleccionar un área de esta pantalla</s:String>\n    <!--<s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Click and drag to select an area</s:String>-->\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Hacé clic acá para seleccionar esta ventana</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Hacé clic acá para seleccionar esta pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Presioná la tecla \"Esc\" para cancelar</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Grabador de webcam</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">No se detectó ningún dispositivo de video :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Revisar dispositivos de video</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Escala: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Cambiá la escala del video</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif: Grabador de pizarra</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Grabación automática</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Habilita la grabación al dibujar.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [mantener]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Selector de color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Seleccionar un color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Rojo</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Verde</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Azul</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hexadecimal</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Color inicial</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Color actual</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Último color</s:String>\n    <!--<s:String x:Key=\"S.ColorSelector.Sample\">Drag this to&#x0d;sample colors</s:String>-->\n    <!--<s:String x:Key=\"S.ColorSelector.Sample.Info\">Click and drag to pick&#x0d;colors from your screen.</s:String>-->\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Visor de excepción</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Abrir excepción interior</s:String>\n    <!--<s:String x:Key=\"S.ExceptionViewer.Type\">Exception type</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>-->\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Algo malo pasó.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Enviar informe</s:String>\n\n    <!--FFmpeg preset-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Title\">FFmpeg Preset</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Name\">Name</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Parameters\">Parameters</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">To encode with 2-pass, simply add '-pass 2' to the command.</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Warning.Name\">You must give a name to this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">You must type some parameters for this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">There's already a preset with the same name.</s:String>-->\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Insertar fotogramas</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Ambos lados deberán tener el mismo tamaño, esta ventana te permitirá reposicionar y redimensionar la imagen y el lienzo. Hacé clic para seleccionar y redimensionar.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Tamaño del lienzo:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Ajustar imagen en el lienzo</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Redimensiona el lienzo para que queden fijas ambas imágenes dentro (desde el ángulo superior izquierdo).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Hay una diferencia entre los tamaños de los fotogramas. Necesitás resolver esto antes de insertar los fotogramas.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Fotograma/s insertado/s</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Fotograma/s actual/es</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Tamaño de la imagen:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Posición de la imagen:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Restablecer tamaño&#x0d;y posición de la imagen</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Los nuevos fotogramas serán insertados en&#10;la lista actual de fotogramas en la posición:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Antes</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Después</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Fotograma</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importando…</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Seleccionar el color de relleno del lienzo</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importar fotogramas desde video</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Importer\">Importer:</s:String>-->\n    <s:String x:Key=\"S.ImportVideo.Loading\">Cargando…</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Escala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Tamaño:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Anchura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Tasa de fotograma:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">FPS</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Inicio:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Fin:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Selección:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Fotogramas:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Duración:</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Error\">It was not possible to load the video</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Error.Detail\">The previewer could not start. Try with another importer or check if the video is not corrupted.&#x0d;If you are using the MediaPlayer, check if the Windows feature called \"Media Features / Windows Media Player\" is turned on and make sure that you have the necessary video codec.</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Timeout\">Timeout in getting the frame preview.</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Nothing\">No frame selected to be imported.</s:String>-->\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Codificador</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>-->\n    <s:String x:Key=\"S.Encoder.Starting\">Iniciando…</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Completado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Copiado al portapapales</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Falló la copia</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Comando ejecutado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Mostrar la salida del / de los comando/s</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Falló la ejecución del comando</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Falló la subida</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + clic para abrir la página para eliminar la imagen (si esté disponible)</s:String>\n    \n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analysis:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copy:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commands:</s:String>-->\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Archivo eliminado o movido</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Cancelado</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Error</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Hacé clic acá para mostrar los detalles de este error</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Subiendo…</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Ejecutando comandos</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Procesando {0}…</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparing for second pass</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Processing.Second\">Processing {0} - 2nd pass</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.CreatingFile\">Creating file</s:String>-->\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analizando píxeles no modificados</s:String>\n    <!--<s:String x:Key=\"S.Encoder.SavingAnalysis\">Saving analysis result</s:String>-->\n    <s:String x:Key=\"S.Encoder.OpenFile\">Abrir archivo</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Examinar carpeta</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Quitar de la lista</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Mostrar detalles</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>-->\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copiar como imagen</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copiar nombre del archivo</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copiar ruta de la carpeta</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copiar enlace</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif: Destino de comando</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Salida de comando</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notificaciones</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Omitir todas las notificaciones</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif: Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Archivo</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Pantalla principal</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Reproducción</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Imagen</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transiciones</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Estadísticas</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Configuración</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Ayuda</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extras</s:String>\n    <!--<s:String x:Key=\"S.Editor.UpdateAvailable\">A new update is available!</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Click here to read more about it.</s:String>-->\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Conteo total, Conteo de selección, Índice de selección</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Preparando fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Carga no válida: no podés importar varios archivos al mismo tiempo; intentá elegir sólo un archivo.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Carga no válida: no podés cargar varios proyectos al mismo tiempo; intentá elegir sólo un proyecto.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Abrir un medio (imagen o video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Abrir un medio (imagen o video), o un archivo de proyecto</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.All\">All supported files</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Apng\">Animated Png</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Wmv\">Windows media video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Zip\">Zip file, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Png\">Png image, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project as Zip</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Psd\">Psd file</s:String>-->\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Andá a \"Archivo\" > \"Nuevo\" para comenzar una nueva grabación</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Arrastrá y soltá imágenes, videos o proyectos para importar</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">¡Muchas gracias por usar mi programa!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Cuanto más chica sea la tasa de fotogramas, la cantidad de colores o de cambios entre fotogramas, menor será el tamaño</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">¿Querés contarme algo? Andá a \"Configuración\" > \"Acerca de ScreenToGif\" para conocer las vías de contacto.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">¿Tenés problemas? Contámelo a través de la herramienta de comentarios.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">¿Te gustaría probar el nuevo grabador? Andá a \"Configuración\" > \"Grabador\" para habilitarlo.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Grabación</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Grabación de&#x0d;webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Grabación de&#x0d;pizarra</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Animación&#x0d;en blanco</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nuevo</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Grabación</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Grabación de&#x0d;webcam</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.Insert.Board\">Board&#x0d;Recording</s:String>-->\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Medios</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Insertar</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Guardar como</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Cargar</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Proyectos&#x0d;recientes</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Guardar como&#x0d;proyecto</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Descartar&#x0d;proyecto</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Pila de acción</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Deshacer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Rehacer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Restablecer</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Portapapeles</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Mostrar portapapeles</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Pegar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Cortar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copiar</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Ajustar al&#x0d;contenido</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Ajustar imagen</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Seleccionar</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Seleccionar&#x0d;todo</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Ir a</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Invertir</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Quitar selección</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Reproducción</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Primero</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Anterior</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Reproducir</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Próximo</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Último</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <!--<s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Playback Options</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Loop during playback.</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Only used during playback.&#x0d;If you wish to change the loop settings for exporting Gifs and Apngs,&#x0d;it will be available inside the 'Save As' panel for some encoders.</s:String>-->\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Eliminar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Quitar&#x0d;duplicados</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Reducir&#x0d;conteo de fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Eliminar anterior</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Eliminar el próximo</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Reordenando…</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Reverso</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyó</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Mover a la&#x0d;izquierda</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Mover a la&#x0d;derecha</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Retraso (duración)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Sobreescribir</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Aumentar o&#x0d;disminuir</s:String>\n    <!--<s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Scale</s:String>-->\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Tamaño y posición</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Redimensionar</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Recortar</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Girar/rotar</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Subtítulo</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Texto libre</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Fotograma del título</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Golpes&#x0d;de teclado</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Capa superpuesta</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Dibujo&#x0d;libre</s:String>\n    <!--<s:String x:Key=\"S.Editor.Image.Shape\">Shapes</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.Image.Clicks\">Mouse&#x0d;Clicks</s:String>-->\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Marca de agua</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinematografía</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Borde</s:String>\n    <!--<s:String x:Key=\"S.Editor.Image.Shadow\">Shadow</s:String>-->\n    <s:String x:Key=\"S.Editor.Image.Progress\">Progreso</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Ofuscar</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Estilos</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Desvanecimiento</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Diapositiva</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">General</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Conteo de fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Duración total</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Tamaño del fotograma</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Duración promedio (retraso)</s:String>\n    <!--<s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Current time</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">The current time (cumulative) based on the current frame being displayed.</s:String>-->\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Escala y DPI de fotograma</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Fotograma seleccionado</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Cortar acción</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">No podés cortar todos los fotogramas.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">La grabación necesita al menos un fotograma.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Quitar todo</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">¿Estás seguro que querés quitar todos los fotogramas?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Esta acción descartará el proyecto actualmente abierto y no se puede deshacer. ¿Estás seguro que querés continuar?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Quitar todo</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">¿Querés quitar todos los fotogramas?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Estás intentando quitar todos los fotogramas.&#10;No podés deshacer esta acción.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">¿Querés descartar el proyecto anterior?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Si elegís no hacerlo, el proyecto anterior estará disponible vía Proyectos recientes.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Eliminar fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">¿Estás seguro que querés eliminar?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Esta acción eliminará {0} fotograma/s.&#10;Vas a poder deshacer esto luego.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Saliendo del editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">¿Estás seguro que querés salir?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">El proyecto actual en el que estabas trabajando puede ser abierto de nuevo vía Proyectos recientes.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">El proyecto actual en el que estabas trabajando puede ser abierto de nuevo vía Proyectos recientes, pero no te olvidés de que después de unos pocos días, será eliminado automáticamente.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Arrastrar y soltar no válido</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">No podés importar varios archivos al mismo tiempo</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Intentá elegir sólo un archivo.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">No se pudo cargar el archivo</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">No se pudo cargar el archivo porque tiene un formato no válido</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">No podés importar varios proyectos al mismo tiempo.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Intentá elegir sólo un proyecto.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">No hay texto para aplicar.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicarle un subtítulo.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicar el texto.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicar el fotograma de título al lado de él.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Tenés que informar un grosor de borde mayor que cero en al menos un lado.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Tenés que elegir al menos un fotograma para aplicarle el borde.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">The opacity must be greater than zero in order to make any difference in the frame.</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">When using the shadow depth and blur radius as zero, it won't make any difference because it will be hidden behind the frame.</s:String>-->\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Tenés que seleccionar al menos un píxel para aplicar Cinemagraph. Seleccioná los píxeles dibujando encima de ellos.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Desvanecer transición</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicar la transición de desvanecimiento.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Un color totalmente transparente no creará ningún efecto en esta transición</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Transición de diapositivas</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicar la transición de diapositiva.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Cargando fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">No se pudo cargar</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">No se pudieron cargar los fotogramas porque están corruptos o las imágenes no están presentes donde se esperaban que estén.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Algunos fotogramas no se cargaron</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">No se pudieron cargar los fotogramas porque no se encontraron o están corruptos.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Tenés que seleccionar al menos un fotograma para aplicar la superposición de capa.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg no presente. Agregalo a las variables del entorno de ruta o establecé la ubicación en \"Configuración\".</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski no presente. Agregalo a las variables del entorno de ruta o establecé la ubicación en \"Configuración\".</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">No hay suficiente espacio libre en la unidad en donde este programa almacena su memoria caché (quedam {0}%). Hacé clic acá para abrir \"Configuración\" > \"Archivos temporales\" para liberar algo de espacio.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Warning.DifferentDpi\">You tried to import multiple images with different DPIs, which is not supported. Some of them got imported, the others need to be imported separately.</s:String>-->\n    \n    <!--Editor • Status-->\n    <!--<s:String x:Key=\"S.Editor.RetrievingFromCache\">Retrieving frames from the cache</s:String>-->\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Actualizando fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Preparando para importar…</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importando fotogramas…</s:String>\n    <!--<s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analyzing duplicates</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Adjusting the delay</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.DiscardingDuplicates\">Discarding duplicates</s:String>-->\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Descartando fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Descartando carpetas</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Redimensionando fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Cortando fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Aplicando capa superpuesta a los fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Creando fotograma de título…</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Aplicando giro/rotación a los fotogramas…</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Cambiando el retraso…</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Aplicando efecto de transición…</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Preparando para guardar</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Fotograma:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Abrir imagen</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Examinar carpeta</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">Exportar imagen</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Ir al fotograma…</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Ir a fotograma… (0 a {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Guardar como</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Quitar los fotogramas seleccionados</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nueva grabación</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nuevo grabador de webcam</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nueva grabación de pizarra</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nueva animación en blanco</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nuevo desde medios o proyecto</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Se creó una nueva grabación</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Se creó una nueva grabación de webcam</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Se creó una nueva grabación de pizarra</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Se creó una nueva animación</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Se ejecutó \"Deshacer\"</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Se ejecutó \"Restablecer\"</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Se ejecutó \"Rehacer\"</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} corte/s de fotograma/s</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} fotograma/s copiado/s</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} fotograma/s pegado/s</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom establecido al {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Se seleccionaron todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Fotograma N°{0} seleccionado</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Selección invertida</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Se les quitó la selección a todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} fotograma/s eliminado/s</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Lista de fotogramas, invertida</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Se aplicó efecto de yoyó</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Fotograma/s movido/s a la izquierda</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Fotograma/s movido/s a la derecha</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Fotogramas redimensionados</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Fotogramas cortados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Fotogramas rotados/girados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Esta acción de rotación se aplica a los fotogramas seleccionados y la rotación se aplica a todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Esta acción se aplica a todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Esta acción se aplica a los fotogramas seleccionados</s:String>\n    <!--<s:String x:Key=\"S.Hint.ApplySelectedOrAll\">This action applies to all or selected frames, depending on your settings</s:String>-->\n    <s:String x:Key=\"S.Hint.Cinemagraph\">La cinematografía se aplica a todos los fotogramas basados en el primero</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Se aplicó superposición de capa</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Se creó el fotograma de título</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Este fotograma de título será insertado antes del fotograma seleccionado</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Duración (retraso) alterada</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Se insertó transición</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Se redujo la tasa de fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplicados quitados</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Ocultar</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Action.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Action.Save\">Guardar</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Cancelar</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Proyectos recientes</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Buscando proyectos recientes…</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Fecha de creación</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Conteo de fotogramas</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">No hay ningún proyecto seleccionado. Seleccioná un proyecto de la lista para cargarlo.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Este proyecto ya fue abierto por otra instancia del editor. No se puede abrir un proyecto por segunda vez si ya está abierto en otro editor.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Entradas del portapapeles</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Entrada del portapapeles:</s:String>\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>-->\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>-->\n    <s:String x:Key=\"S.Clipboard.Explore\">Explorar contenido</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Quitar</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Pegar comportamiento</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Antes del fotograma seleccionado</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Luego del fotograma seleccionado</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">Propiedades actuales</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Puntos por pulgada</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">Nuevas propiedades</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">Puntos por pulgada:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Conservar la relación de aspecto</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Tenés que seleccionar un valor diferente para aplicar la acción de redimensionamiento.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Puntos</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Arriba:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Izquierda:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Fondo:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Derecha:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">La selección de recorte tiene que ser más pequeña que el tamaño actual del fotograma.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">La selección de recorte tiene que ser más grande que 10 x 10 píxeles</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Giro horizontal</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Giro vertical</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Girar hacia la izquierda 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Girar a la derecha 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Reducir la tasa de fotogramas</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Factor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Quitar conteo:</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Delay\">Delay adjustment:</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Don't adjust</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll\">Reduce the framerate of the entire project.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>-->\n    <s:String x:Key=\"S.Reduce.Info\">Quitará {0} fotograma/s luego de cada {1} fotograma/s, sin contar los quitados.</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>-->\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Quitar duplicados</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Similitud (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Quita de fotogramas:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Quitar el primer fotograma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Quitar el último fotograma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Ajuste de retraso:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">No ajustar</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Usar el promedio</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Usar la suma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Esta acción analiza cada fotograma (píxel por píxel) y quita aquellos que son similares al menos un {0}% a su vecino más inmediato..&#x0d;Podés elegir si querés ajustar el retraso (duración de exhibición) de los fotogramas.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Tipografía</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Familia:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Estilo:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Peso:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Tamaño:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Color:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Color de fondo:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Contorno</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Grosor:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Diseño</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Vertical:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontal:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Golpes de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separador</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Editá tus golpes de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignorar las teclas \"Ctrl\", \"Alt\", \"Mayúsculas\" y \"Windows\" cuando no se usan como modificadores</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ignorará presiones simples como \"Ctrl\", pero no ignorará presiones combinadas como \"Ctrl\" + \"C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Extendé la exhibición de los golpes de teclas:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Iniciar la exhibición de los golpes de teclas antes</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Por (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">No hay golpes de teclas en tu grabación.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif: Editor de golpes de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Número de fotograma</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Detectado golpe de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Quitar golpe de tecla</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Agregar un golpe de tecla:</s:String>\n    <!--<s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Lowercase lettering.</s:String>-->\n    <!--<s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">It lets you insert lower case single letters.</s:String>-->\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Lápiz</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Borrador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Seleccionar</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Borrador de trazo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Anchura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Ayuda:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rectángulo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Otros:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Resaltador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Ajustar a la curva</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">No hay dibujos para ser aplicados a los fotogramas que seleccionaste.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicar el dibujo libre.</s:String>\n    \n    <!--Editor • Shapes-->\n    <!--<s:String x:Key=\"S.Shapes.Mode.Insert\">Insert</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes\">Shapes</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Radius\">Radius:</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Dashes\">Dashes:</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Fill\">Fill</s:String>-->\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Clics del mouse</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">No se detectaron clics del mouse en tu proyecto</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Imagen</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Archivo:</s:String>\n    <!--<s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>-->\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacidad:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Seleccionar una imagen</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Tenés que seleccionar una imagen para aplicar a el/los fotograma/s seleccionado/s.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Tenés que seleccionar al menos un fotograma para aplicarle la marca de agua.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Apariencia</s:String>\n    <!--<s:String x:Key=\"S.Border.Info\">Use negative values to make the border expand the image. When doing so, the border will be applied to all frames.&#x0d;If no negative value being used, the border will be applied only to the selected frames.</s:String>-->\n\n    <!--Editor • Shadow-->\n    <!--<s:String x:Key=\"S.Shadow.ShadowColor\">Shadow color:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.BackgroundColor\">Background color:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.Direction\">Direction:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.BlurRadius\">Blur radius:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.Depth\">Depth:</s:String>-->\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Opciones de ofuscación</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Tamaño del píxel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calcular el color promedio para cada bloque pixelado.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Usá la herramienta de selección para seleccionar el rectángulo que debería pixelarse</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">No seleccionaste nada. Por favor, usá la herramienta de selección para seleccionar el rectángulo que debería pixelarse.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tipo</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Barra</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precisión:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Segundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milisegundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Porcentaje</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Número de fotograma</s:String>\n    <!--<s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Actual date/time</s:String>-->\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Mostrar el total</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formato:</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Date\">You can use the date and time format from .Net Framework.&#x0d;The specification is available in these two links below.</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Date.Standard\">Standard formats</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Date.Custom\">Custom formats</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Precision.StartNumber\">Count from:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Starts counting the frame number from this selected number.</s:String>-->\n    <s:String x:Key=\"S.Progress.Orientation\">Orientación:</s:String>\n    \n    <!--Editor • Delay-->\n    <!--<s:String x:Key=\"S.Delay.Update\">Delay update</s:String>-->\n    <!--<s:String x:Key=\"S.Delay.Mode\">Delay mode:</s:String>-->\n    <!--<s:String x:Key=\"S.Delay.Mode.Override\">Override (in ms)</s:String>-->\n    <!--<s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Increase or decrease (in ms)</s:String>-->\n    <!--<s:String x:Key=\"S.Delay.Mode.Scale\">Scale (in %)</s:String>-->\n    <s:String x:Key=\"S.Delay.NewValue\">Nuevo valor</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Mínimo de 10ms por fotograma</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Disminuir/aumentar valor</s:String>\n    <!--<s:String x:Key=\"S.Delay.Scale\">Scale Value</s:String>-->\n    <s:String x:Key=\"S.Delay.Override.Info\">Este nuevo valor reemplazará la duración (retraso) de todos los fotogramas seleccionados. Este valor puede ir de 10 ms a 25.500 ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Este valor disminuirá/aumentará la duración (retraso) de cada fotograma será restringido entre 10 ms y 25.500 ms</s:String>\n    <!--<s:String x:Key=\"S.Delay.Scale.Info\">Scale the duration (delay) of each selected frame by the percent value.&#x0d;You can scale each frame's duration by selecting a value between 1% and 1000%, but the final duration of each frame will be restricted to between 10ms and 25500ms</s:String>-->\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Usá el lápiz para seleccionar los píxeles que no deberían permanecer estáticos (que deberían cambiar entre fotogramas), pintando encima de ellos.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Longitud de la transición</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Retraso de transición</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Desvanecer a</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">El próximo fotograma</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Un color</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Color</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">La transición será aplicada entre el fotograma seleccionado y el siguiente.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Tipo de archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">Imágenes (fotogramas)</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">Proyecto</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">Video</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Codificador</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">Usa una paleta predeterminada</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Apng\">ScreenToGif</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">Encoder made by the ScreenToGif developer.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Configuración de GIF</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Calidad</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Colores:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Cantidad máxima de colores (para cada fotograma)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Bucle:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">GIF en bucle</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Repetir indefinidamente</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Veces a repetir</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Detectar píxeles sin cambios</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Opciones de Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng en bucle</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Detectar píxeles sin cambios</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Pintar todos los píxeles sin cambios con un color transparente.</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">Configuración de video</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">FPS:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">Girar el video (verticalmente)</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">Configuración de imagen</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Comprimir las imágenes</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions\">Psd options</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Compress the image.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Compress the image data using the RLE algorithm.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Save the timeline data.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exports the timings of the frames, instead of just the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ProjectOptions\">Project options</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">Extras:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Presets\">Presets:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Default\">Default</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Add\">Add</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Save\">Save</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Edit\">Edit</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove\">Remove</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">Remove Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">Do you wish to remove the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">You can't undo this operation, but you can add the preset again later.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset\">Reset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">Reset Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">Do you wish to reset the preset to its default parameters?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">You can't undo this operation, but you can edit back the preset again later.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">No FFmpeg preset selected, please select one.</s:String>-->\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Configuración de guardado</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Guardá el archivo a una carpeta de tu elección</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">Sobreescribir (si ya existe)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">También guardar el proyecto (misma carpeta, mismo nombre de archivo)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Subir el archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">Subir destino</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copiar al portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copia el archivo de destino al portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Ruta de la carpeta</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copia la ruta de la carpeta del archivo de destino al portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Ruta del archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copia la ruta del archivo de destino al portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Enlace</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copia el enlace generado por el servicio de subida al portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Ejecutar comandos luego de la codificación</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Ingresá los comandos para ser ejecutados luego de la codificación.&#x0d;Para ejecutar múltiples comandos, ingresá cada uno en una línea separada.&#x0d;Macros:&#x0d;{p} = Ruta del archivo de destino.&#x0d;{f} = Ruta de la carpeta de destino.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">Archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Carpeta de destino</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Elegí la ubicación</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Formato del archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Número del archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animación</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Aumentar el número de archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Disminuir el número de archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Ya existe un archivo con ese nombre.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Guardar al portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Necesitás seleccionar dónde guardar el archivo (a una carpeta, al portapapeles o subirla a algún otro lugar)</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Para ejecutar un comando luego de la codificación, necesitás ingresar algo en el campo de texto de los comandos.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">No se seleccionó un servicio de subida. Necesitás seleccionar un destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">No podés subir al servicio seleccionado porque no fue autorizado. Andá a \"Configuración\" > \"Servicios de subida\" para autorizar este programa.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">No podés seleccionar la opción de copiar el enlace porque no elegiste subir el archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Necesitás elegir una carpeta de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">La carpeta de destino no existe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">La carpeta de destino contiene uno o más caracteres no válidos. Por favor, seleccioná una carpeta válida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Necesitás elegir un nombre de archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">El nombre del archivo de destino contiene uno o más caracteres no válidos. Por favor, ingresá un nombre de archivo válido.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Nombre de archivo ya en uso. Elegí sobreescribir o elegí otro nombre de archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Se canceló la operación.</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Exportar fotogramas</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">¿Estás seguro que querés exportar los fotogramas?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Esta acción exportará {0} fotogramas directamente en la carpeta seleccionada</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Comentario</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Enviar</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Previsualización</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Enviar comentario</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Título *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Mensaje *</s:String>\n    <!--<s:String x:Key=\"S.Feedback.Message.Info\">If you are experiencing a bug, don't forget to explain to me how you got it, step by step.</s:String>-->\n    <s:String x:Key=\"S.Feedback.Type\">Tipo de comentario</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Sugerencia</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problema/fallo</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Tu dirección de correo electrónico (opcional)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Necesitás ingresar un título para los comentarios.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Necesitás ingresar un mensaje en los comentarios.</s:String>\n    <!--<s:String x:Key=\"S.Feedback.Warning.Email\">You need to type your email, to receive a reply from the developer.</s:String>-->\n    <s:String x:Key=\"S.Feedback.Sending\">Enviando… Esta ventana se cerrará en breve luego de enviar.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Archivos djuntos (opcional, 20MB como máximo)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Agregar archivos adjuntos</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Quitar todos los archivos adjuntos</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Entiendo inglés</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">y portugués (brasilero y europeo).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Esto es lo que vas a enviar, más todos los adjuntos.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Solución de problemas</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">¿Falta alguna ventana?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Si falta cualquiera de las ventanas (fuera de la pantalla),&#x0d;usá las opciones debajo para restablecer su posición actual y de inicio.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Acá es en donde cada ventana está ubicada actualmente:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Acá es en donde cada ventana estará abierta la próxima vez:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Mové todas las ventanas a la pantalla principal.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Restablecer la posición inicial de todas las ventanas.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Cursiva</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Oblicuo</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Negro</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Seminegrita</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra negra</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra liviana</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Pesada</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Liviana</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Media</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regular</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Seminegrita</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Delgada</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra negra</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra liviana</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Arriba</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Abajo</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Estirar</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Izquierda</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Derecha</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertical</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.es.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Volver</s:String>\n    <s:String x:Key=\"S.Cancel\">Cancelar</s:String>\n    <s:String x:Key=\"S.Yes\">Sí</s:String>\n    <s:String x:Key=\"S.No\">No</s:String>\n    <s:String x:Key=\"S.Add\">Añadir</s:String>\n    <s:String x:Key=\"S.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Título</s:String>\n    <s:String x:Key=\"S.Description\">Descripción</s:String>\n    <s:String x:Key=\"S.SelectColor\">Click aquí para seleccionar el color.</s:String>\n    <s:String x:Key=\"S.Suppress\">Suprimir</s:String>\n    <s:String x:Key=\"S.Preview\">Previsualizar</s:String>\n    <s:String x:Key=\"S.Size\">Tamaño</s:String>\n    <s:String x:Key=\"S.Background\">Fondo</s:String>\n    <s:String x:Key=\"S.Color\">Color:</s:String>\n    <s:String x:Key=\"S.Delay\">Retraso</s:String>\n    <s:String x:Key=\"S.DelayMs\">Retraso (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Valor -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Valor de Escala:</s:String>\n    <s:String x:Key=\"S.Margin\">Margen:</s:String>\n    <s:String x:Key=\"S.Padding\">Acolchado:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Altura mínima:</s:String>\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">Oh no, la aplicación se estrelló :(</s:String>\n    <s:String x:Key=\"S.Required\">Campo obligatorio.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Falta dependencia</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 no está presente</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Con el fin de utilizar correctamente esta aplicación, es necesario descargar la versión correcta de la .Net Framework.&#10;¿Desea abrir la página web para descargarlo?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Solo se permite una instancia</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">La aplicación ya se está ejecutando</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif ya se está ejecutando, pero aparentemente no hay ninguna ventana abierta. Compruebe que la bandeja del sistema, un icono ScreenToGif debe estar allí.</s:String>\n    <s:String x:Key=\"S.Exiting.Title\">Saliendo de ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">¿Estas seguro de querer salir?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Todas las ventanas se cerrarán y se quitará el icono de la bandeja.</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nueva grabación de pantalla</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nueva grabación de webcam</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nueva grabación de pizarra</s:String>\n    <s:String x:Key=\"S.Exit\">Salir</s:String>\n\n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Backspace\">Retroceso</s:String>\n    <s:String x:Key=\"S.Keys.Tab\">Tabulador</s:String>\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.PauseBreak\">Pausa/Interrupción</s:String>\n    <s:String x:Key=\"S.Keys.CapsLock\">Bloq Mayús</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Espacio</s:String>\n    <s:String x:Key=\"S.Keys.PageUp\">Re Pág</s:String>\n    <s:String x:Key=\"S.Keys.PageDown\">Av Pág</s:String>\n    <s:String x:Key=\"S.Keys.Home\">Inicio</s:String>\n    <s:String x:Key=\"S.Keys.End\">Fin</s:String>\n    <s:String x:Key=\"S.Keys.Left\">Flecha izquierda</s:String>\n    <s:String x:Key=\"S.Keys.Up\">Flecha arriba</s:String>\n    <s:String x:Key=\"S.Keys.Right\">Flecha derecha</s:String>\n    <s:String x:Key=\"S.Keys.Down\">Flecha abajo</s:String>\n    <s:String x:Key=\"S.Keys.PrintScreen\">Impr Pant</s:String>\n    <s:String x:Key=\"S.Keys.Insert\">Insertar</s:String>\n    <s:String x:Key=\"S.Keys.Delete\">Eliminar</s:String>\n    <s:String x:Key=\"S.Keys.NumLock\">Bloq Num</s:String>\n    <s:String x:Key=\"S.Keys.ScrollLock\">Bloq Despl</s:String>\n    <s:String x:Key=\"S.Keys.Shift\">Shift</s:String>\n    <s:String x:Key=\"S.Keys.LeftShift\">Shift izquierdo</s:String>\n    <s:String x:Key=\"S.Keys.RightShift\">Shift derecho</s:String>\n    <s:String x:Key=\"S.Keys.Alt\">Alt</s:String>\n    <s:String x:Key=\"S.Keys.LeftAlt\">Alt izquierdo</s:String>\n    <s:String x:Key=\"S.Keys.RightAlt\">Alt derecho</s:String>\n    <s:String x:Key=\"S.Keys.Ctrl\">Control</s:String>\n    <s:String x:Key=\"S.Keys.LeftCtrl\">Ctrl izquierdo</s:String>\n    <s:String x:Key=\"S.Keys.RightCtrl\">Ctrl derecho</s:String>\n    <s:String x:Key=\"S.Keys.Windows\">Windows</s:String>\n    <s:String x:Key=\"S.Keys.LeftWindows\">Windows izquierdo</s:String>\n    <s:String x:Key=\"S.Keys.RightWindows\">Windows derecho</s:String>\n    <s:String x:Key=\"S.Keys.NextTrack\">Pista siguiente</s:String>\n    <s:String x:Key=\"S.Keys.PreviousTrack\">Pista anterior</s:String>\n    <s:String x:Key=\"S.Keys.PlayPause\">Reproducir/Pausar</s:String>\n    <s:String x:Key=\"S.Keys.Stop\">Detener</s:String>\n\n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nueva grabación de pantalla</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nueva grabación de webcam</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nueva grabación de pizarra</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nueva animación</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Insertar grabación de pantalla</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Insertar grabación de webcam</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Insertar grabación de trablero</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Insertar desde medios (imágenes y vídeos)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Guardar como...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Cargar archivos (imagenes, videos y proyectos)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Cargar proyectos recientes</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Descartar proyecto actual</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Reemplazar retraso de los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Aumentar/Disminuir el retardo de los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Retardo de escala de fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Ajuste el zoom al 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Ajuste la ventana al tamaño del fotograma</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Ajustar la imagen al tamaño de ventana disponible</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Seleccionar el primer fotograma</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Seleccionar el fotograma anterior</s:String>\n    <s:String x:Key=\"S.Command.Play\">Iniciar la animación</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Seleccionar el siguiente fotograma</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Seleccionar el primer fotograma</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Deshacer</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Rehacer</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Deshacer todos los cambios en el proyecto</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Copie los fotogramas seleccionados y guárdelos en el portapapeles</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Cortar los marcos seleccionados y almacenarlos en el portapapeles</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Pegue los fotogramas desde el portapapeles</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Borrar todos los fotogramas seleccionados</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Borrar todos los fotogramas anteriores</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Borrar todos los fotogramas siguientes</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Eliminar duplicados</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Reducir el número de fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Animación inversa</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Hace que la animación avance y retroceda</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Mover el fotograma seleccionado a la izquierda</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Mueva el fotograma seleccionado a la derecha</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Cambiar el tamaño de todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Recortar todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Voltear o girar los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Añadir un título</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Añadir un texto flotante</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Añadir un fotograma con un título en él</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Inserta las teclas pulsadas durante la grabación</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Dibujar formas libres</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Añadir formas</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Clicks de raton</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Seleccione una imagen y añada como marca de agua</s:String>\n    <s:String x:Key=\"S.Command.Border\">Añadir bordes</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Añadir sombra paralela</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Ocultar partes sensibles en los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Utilice las herramientas de dibujo para seleccionar qué partes del fotograma no deben permanecer estáticas durante toda la animación</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Barra de progreso o texto con detalles de reproducción</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Seleccionar todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navegar hasta fotograma por índice</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Inversa la selección de fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Deseleccionar todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Transición de fundido</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Transición de diapositivas</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Limpiar todas las codificaciones completadas</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Mover arriba</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">MoveR abajo</s:String>\n    <s:String x:Key=\"S.Command.Add\">Añadir</s:String>\n    <s:String x:Key=\"S.Command.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Editar elemento seleccionado</s:String>\n    <s:String x:Key=\"S.Command.Save\">Guardar elemento selecionado</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Eliminar elemento seleccionado</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Inicio</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Grabador</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Abrir la grabacion de pantalla, para iniciar facilmente la captura de tu pantalla.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Abrir la grabacion de la webcam.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Pizarra</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Abrir la grabacion de pizarra, para iniciar la grabacion de tus dibujos.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Abrir la ventana de edición, el punto central de esta app, donde editaras tus grabaciones.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Opciones</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nueva versión disponible</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Descargar la última version de ScreenToGif</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Actualizador</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Una nueva actualización disponible</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">¡Nueva actualización!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Nueva actualización disponible, Versión {0}!&#x0d;Click aquí para más detalles</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versión</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portable</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Instalador</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">¿Qué hay de nuevo?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Correcciones de errores:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Una nueva versión está disponible para descargar.&#x0d;¿Desea abrir el navegador para descargarlo?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Ejecute la aplicación después de la actualización.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Descargar</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Instalar</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Descargando...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">No fue posible mostrar los detalles de la descarga.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">No fue posible descargar la actualización.</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Opciones</s:String>\n    <s:String x:Key=\"S.Options.App\">Aplicación</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Grabador</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tareas</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Atajos de teclado</s:String>\n    <s:String x:Key=\"S.Options.Language\">Idioma</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Archivos temporales</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Nube</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Donar</s:String>\n    <s:String x:Key=\"S.Options.About\">Acerca de</s:String>\n    <s:String x:Key=\"S.Options.Other\">Otras opciones</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Falta el atajo de teclado para el siguimiento de cursor</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Para utilizar la función seguir al cursor del ratón, debe establecer una tecla de método abreviado para alternarla cuando sea necesario.</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">Faltan dependencias para la captura de pantalla</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">Para capturar la pantalla con la API Desktop Duplication, debe descargar las bibliotecas SharpDx.</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Inicio</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Iniciar&#10;manualmente</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">La aplicación solo se ejecutará cuando lo haga manualmente.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Iniciar con&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">La aplicación se ejecutará después del inicio de Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Imposible alternar entre los modos de inicio.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Permitir solo una&#10;instancia única</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Podrá ejecutar la aplicación una vez por usuario y ejecutable,&#10;lo que significa que diferentes instancias de usuario o ejecutable pueden coexistir.&#10;Al intentar ejecutar la aplicación de nuevo, la segunda instancia intentará dar el foco a la primera y cerrarse a sí misma.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Permitir varias&#10;instancias</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Podrás ejecutar la aplicación varias veces al mismo tiempo, sin restricciones.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Iniciar minimizado en la bandeja del sistema.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(El icono de la bandeja del sistema estará visible mientras esta opción esté activa)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Iniciar Con:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Ventana de Inicio</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Grabador Pantalla</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Grabador webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Grabar pizarra</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Ventana de Edición</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Ventana que aparece primero cuando se inicia la aplicación)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Tema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Esquema de colores:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Muy Claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Oscuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Muy Oscuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Personalizar</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Example colors.</s:String>-->\n    <s:String x:Key=\"S.Options.App.Tray\">Icono de la bandeja del sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Visualice la aplicación en la bandeja del sistema (área de notificación).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Mantenga la aplicación abierta incluso si todas las ventanas están cerradas.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">No hagas nada</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Abrir una ventana</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Sin ventana</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimizar/restaurar todas las ventanas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimizar todas las ventanas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restaurar todas las ventanas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Click izquierda:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Click izquierda (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Click medio:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Ventana:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">O si no, se abre:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">General</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Solución alternativa para la cuota 'No hay suficiente cuota...' error.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Pregúntame antes de cerrar la aplicación (a través del comando 'Salir').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Deshabilite la aceleración de hardware.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(La interfaz de usuario se renderizará a través del modo de software)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Comprueba si hay actualizaciones de traducción.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Las traducciones actualizadas se descargarán e instalarán automáticamente)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Buscar actualizaciones automaticamente.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Instale automáticamente las actualizaciones después de cerrar la aplicación.</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Forzar la ejecución de la actualización con privilegios elevados.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Pídeme antes de que se inicie la instalación.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interfaz</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Antiguo</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nuevo</s:String>\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency\">Capture frequency</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Modo de captura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Utilice el método de captura anterior, que es más lento y puede no funcionar capturando juegos,&#10;pero no requiere complementos adicionales.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Utilice el método de captura de la API Desktop Duplication, que es más rápido y&#10;es capaz de capturar juegos de pantalla completa, pero requiere el complemento SharpDx y Windows 8 o posterior.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Guardar en&#10;archivo</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Cada fotograma capturado se guardará directamente como una imagen en el disco.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Memoria&#10;cache</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Cada fotograma capturado se almacenará como una matriz de píxeles en la memoria primero (puede comprimirse antes).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compresión:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Óptima</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Compresión más lenta pero probablemente más óptima)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Rápido</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Compresión más rápida pero probablemente menos óptima)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Sin compresión</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(No se debe realizar ninguna compresión durante la captura de fotogramas)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Tamaño de caché:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(En MB. Después de alcanzar este tamaño, los datos se escribirán/vaciarán en el disco)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Mostrar el cursor en la grabación.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Seleccionar un color para el cursor</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Usar una cuenta regresiva para iniciar la grabación.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(En segundos, espera antes de iniciar la captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Arreglar la velocidad de los fotogramas.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Retraso constante que no cambia con el lag de la grabación)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">Activar la grabación asincronica.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(Esto ayuda a reducir el lag de la interfaz mientras grabas)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Ocultar la barra de titulo (modo delgado).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Activar el zoom de pantalla.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Esto activa un zoom en una zona que selecciones de la grabación)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Habilite el seguimiento de cursor.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(El área de grabación se reposicionará en función de la ubicación del cursor)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Margen de búfer en píxeles, donde el área de grabación comienza a cambiarse de posición)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Margen de búfer adicional en píxeles, donde la interfaz de usuario comienza a ocultarse)</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Fondo del Editor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Tamaño de la cuadrícula</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Muy pequeño</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Pequeño</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Largo</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Muy Largo</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Me gustan los cuadrados grandes</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Estoy ciego</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Personalizar</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Tamaño</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Ancho</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Color Base</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Igualar Color</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Color Extraño</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Extender la barra de titulo (modo croma).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Ajustar automaticamente el tamaño de la ventana basado en el fotograma, justo después de cargarlo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Ajustar automaticamente el zoom del fotograma basado en el tamaño de la ventana, justo después de cargar.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Preguntar antes de borrar los fotogramas.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Preguntar antes de descartar un proyecto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Preguntar antes de cerrar el editor (Si tienes un proyecto abierto).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Activar triple-click en el texto seleccionado.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Dibujar el contorno de las leyendas por fuera de las letras.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Imponer un límite al historial de deshacer/rehacer.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Las acciones más antiguas se eliminarán cuando se alcance el límite)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Número máximo de acciones almacenadas)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Tarea automatizada</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista de tareas automatizadas</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Tarea</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detalles</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Elija una tarea)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Estas tareas se ejecutan secuencialmente desde la parte superior de la lista hasta la parte inferior.&#10;Sucede cuando se abre un proyecto por primera vez con el editor.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Grabador Pantalla:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Abre el grabador de pantalla predeterminada)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Grabador webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Abre la grabadora de webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Grabar pizarra:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Abre el grabador de pizarra, para que pueda grabar sus dibujos)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Abre otra ventana del editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Opciones:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Abre la ventana de opciones. Solo se puede abrir una a la vez)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Salir:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Cierra todas las ventanas y elimina la aplicación de la bandeja del sistema)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Grabadores</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Iniciar/Parar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Inicia o pausa la grabación. Se utiliza para tomar instantáneas si el modo de instantánea está activado)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Parar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Detiene la grabación y abre el editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Descartar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Descarta la grabación activa, cuando está en pausa)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Seguimiento de cursor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Alterna el ajuste del área de grabación en función de la posición del cursor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Desactivar seguimiento:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Deshabilita temporalmente el ajuste del área de grabación en función de la posición del cursor, solo se aceptan las teclas modificadoras)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Haga clic para establecer el foco del teclado y, a continuación, presione las teclas y modificadores deseados.&#10;Algunas combinaciones de teclas no están permitidas.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Lenguaje de la App</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Auto detectar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Actual lenguaje (si esta disponible)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">¿Te gustaria traducir mi app?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Click aquí para leer la guia de traducción y descargar la app para traducir.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Luego,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">Click aquí para importar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">y testear tu traducción</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Enviarmela mediante</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">Si has finalizado la traducción</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Click para abrir la página con la guia.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Abrir pagina de importacion</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Abir tu email app</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Estado</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Volumen:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} libre de {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Compruebe de nuevo cuánto espacio queda.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Limpie la carpeta de caché.&#10;Podrás decidir si quieres conservar proyectos recientes o no.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Bajo espacio en el disco duro seleccionado actual. Por favor, limpie la carpeta de caché o cambie la ubicación.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Imposible recuperar los detalles de la unidad.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Sin archivos</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} archivo</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} archivos</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Sin carpetas</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} carpeta</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} carpetas</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} en uso</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Rutas</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Caché:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Escoge la localizacion de archivos temporales</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Registros:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Escoge la locación para los logs de error</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Examine la carpeta seleccionada.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Localizacion de ajustes</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Si este no existe</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Crear un archivo de ajustes vacio.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Remover el archivo de ajustes</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Abra la carpeta donde se encuentra el archivo de configuración.&#x0d;Mantenga presionada la tecla Ctrl mientras hace clic para abrir el archivo, si es posible.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Patrón de carga de configuraciones: Valor predeterminado ◄ AppData ◄ Local.&#x0d;• Si no hay un archivo de configuración presente en la carpeta Local, la aplicación busca dentro de la carpeta AppData, Predeterminado se utiliza si no hay ningún archivo de configuración presente. No hay configuraciones locales, todas las configuraciones se guardan en el archivo de configuración de AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Automaticamente remover viejos proyectos.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Al abrir el Editor, una tarea en segundo plano borrará los proyectos con más de 5 días de antigüedad.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(en días, cualquier proyecto cerrado anterior a este será borrado/descartado después de abrir la aplicación)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Borrar caché</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">¿Desea borrar la carpeta de caché?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Al crear una grabación o abrir algo para editar, se crea un proyecto y se almacena dentro de la carpeta de caché.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">¿Desea eliminar estos proyectos de la carpeta de caché?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">No elimine proyectos recientes.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Solo se eliminarán los proyectos anteriores a {0} días que no estén actualmente en uso)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Todos los proyectos que no estén actualmente en uso, se eliminarán)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Desactivado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Sistema</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Utiliza el proxy del sistema)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Puerto:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Nombre usuario:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Contraseña:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Get\">Obtener token de OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">Pegue el token de autorización aquí</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autorizar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Refresh\">Actualizar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">Limpiar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (Anónimo)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Utilice enlaces directos.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Obtén enlaces con la extensión Gifv en lugar de Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Sube gifs a un álbum seleccionado.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Álbum:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Pregúntame antes de subir</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">No fue posible abrir la página para obtener el token de autorización de Imgur.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Para autorizar esta aplicación, debe proporcionar el token de autorización.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Autorización Imgur completada.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Error en la autorización de Imgur. Inténtelo de nuevo en unos segundos u obtenga un nuevo token.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">It was not possible to authorize the app</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">Check if you provided the correct token and if you have an internet connection.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">Para actualizar la autorización para esta aplicación, primero debe finalizar el proceso de autorización.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">No autorizado.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">La autorización expiro hace {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorización válida hasta {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Autorización imgur eliminada.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">No fue posible cargar la lista de álbumes.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat (Anónimo)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">Token de OAuth:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">Elegir un destino</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Elegir un álbum (opcional)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Si lo desea, puede seleccionar el álbum de destino:</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Herramientas externas disponibles</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Click aquí para descargar&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Descargando...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Descargado&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Click aquí para abrir las propiedades del archivo.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Las aplicaciones distribuidas por Microsoft Store no pueden descargar otras aplicaciones. Tendrás que descargarlo manualmente.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Ubicación FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Seleccionar la ubicación del ejecutable FFmpeg</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg executable</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">La ruta del ejecutable FFmpeg contiene uno o más caracteres no válidos. Por favor, seleccione una ubicación válida para ese ejecutable.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Ubicación de Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Seleccionar la ubicación de la biblioteca Gifski</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski library</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">La ruta de acceso de la biblioteca Gifski contiene uno o más caracteres no válidos. Por favor, seleccione una ubicación válida para esa biblioteca.</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation\">Carpeta SharpDx (SharpDX.dll, SharpDX.Direct3D11.dll and SharpDX.DXGI.dll)</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">Seleccionar la ubicación de las bibliotecas SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">La ruta de acceso de las bibliotecas SharpDx contiene uno o varios caracteres no válidos. Seleccione una carpeta válida para esas bibliotecas.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licencia FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licencia Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Licencia SharpDx</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Donar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Donar US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Donar €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Abrir PAYPAL: Moneda Seleccionada: Dolar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Abrir PAYPAL: Moneda Seleccionada: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Abrir PayPal: Seleccionar otra moneda.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Subscribir</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Dona mensualmente a través de Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Dona mensualmente a través de Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Juegos de regalo</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Juegos de regalo a través de Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Juegos de regalo a través de GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Pague por un café a través de Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Monedas criptográficas</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copie la dirección BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Soporte</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Si desea apoyar el proyecto :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versión:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Creador: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Versión de Microsoft Store. Algunas características están deshabilitadas debido a las directivas aplicadas.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contacto</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Unirse al servidor</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Visitar página</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Unirse a la sala</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Datos tecnicos</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licencia:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Esta es una aplicación completamente gratuita)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Código fuente:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Política de privacidad:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Agradecimientos especiales</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Gracias a todos los que me apoyaron en el desarrollo y los que donaron.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Localización</s:String>\n    <!--<s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Recognized\">Recognized as {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.NotRecognized\">Not recognized</s:String>-->\n    <s:String x:Key=\"S.Localization.Usage.First\">El recurso más inferior es el que se usa actualmente.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Para aplicar tu recurso personal, muevelo al final de la lista.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant\">Redundant language code</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown\">Unknown language</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Grabar</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continuar</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Parar</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Descartar</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Instantaneo</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Anchura</s:String>\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fps\">Maximos fotogramas por segundo</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Ajustar a la ventana (Arrastrar y soltar para ajustar)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Pre-Inicio</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Pausado)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Parando...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">No fue posible capturar la pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">No fue posible capturar la pantalla. El método de captura no devolvió ningún fotograma después de 5 intentos.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">No fue posible iniciar/pausar la captura de la pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Se requiere Windows 8 o posterior para capturar la pantalla mediante la API Desktop Duplication.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">Las bibliotecas SharpDx son necesarias para capturar la pantalla mediante la API Desktop Duplication. Vaya a Opciones > Extras para descargarlo.</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Area</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Ventana</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Aceptar</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Reintentar</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Cancelar la selección (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Click y mantener para seleccionar el area de esta pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Click y arrastre para seleccionar un área</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Click aquí para seleccionar esta ventana</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Click aquí para seleccionar esta pantalla</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Presiona Esc para cancelar</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Grabadora Webcam</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Servicios de video no detectados :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Ver los servicios de video</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Escala: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Cambiar la escala del video</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Grabación de Pizarra</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Auto Grabación</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Activar la grabación mientras dibujas.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Presionar]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Paleta de Colores</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Seleccionar un Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Rojo</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Verde</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Azul</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Color Inicial</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Actual Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Último Color</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Arrastre esto a&#x0d;colores de muestra</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Click y arrastre para seleccionar&#x0d;colores de la pantalla.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Visor de excepciones</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Abrir excepcion interna</s:String>\n    <!--<s:String x:Key=\"S.ExceptionViewer.Type\">Exception type</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>-->\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Algo malo ha sucedido.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Enviar reporte</s:String>\n\n    <!--FFmpeg preset-->\n    <s:String x:Key=\"S.FfmpegPreset.Title\">Ajustes FFmpeg</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Name\">Nombre</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Parameters\">Parámetros</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">Para codificar con 2 pasadas, simplemente agregue '-pass 2' al comando.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Name\">Debe dar un nombre a este preset.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">Debe escribir algunos parámetros para este preset.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">Ya hay un preset con el mismo nombre.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Insertar Fotogramas</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Ambos lados deben tener el mismo tamaño, esta ventana le permite cambiar la posición y el tamaño de la imagen y el lienzo. Haga clic para seleccionar y cambiar el tamaño.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Tamaño lienzo:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Ajustar imagen en lienzo</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Redimensionar el lienzo para ajustar las imagenes dentro (Desde la esquina superior izquierda)</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Hay una diferencia entre los tamaños de los fotogramas. Necesitas resolver esto antes de insertar los fotogramas</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Nuevo fotograma(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Actual fotograma(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Tamaño de imagen:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Posición de imagen:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Reiniciar Tamaño de Imagen&#x0d;Y posición</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Nuevos fotogramas seran insertados dentro de&#10;la actual lista de fotogramas en la posición:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Antes</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Después</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Fotograma</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importando</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Seleccionar el relleno de color del Lienzo</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importar fotogramas desde el video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importador:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Cargando...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Escala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Tamaño:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Anchura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Velocidad fotograma:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Inicio:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Final:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Selección:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Fotogramas:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Duración:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">No fue posible cargar el vídeo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">No se pudo iniciar el previsualizador. Pruebe con otro importador o compruebe si el vídeo no está dañado.&#x0d;Si está utilizando el MediaPlayer, compruebe si la característica de Windows llamada \"Características multimedia / Reproductor de Windows Media\" está activada y asegúrese de que tiene el códec de vídeo necesario.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Tiempo de espera para obtener la vista previa del fotograma.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">No se ha seleccionado ningún fotograma para ser importado.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Codificador</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>-->\n    <s:String x:Key=\"S.Encoder.Starting\">Iniciando</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Completado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Copiado en el Portapapeles</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">No se pudo copiar</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Comando ejecutado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Muestre la salida de los comandos.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">No se pudo ejecutar el comando</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">No se pudo subir</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Haga clic para abrir la página y eliminar la imagen (si está disponible).</s:String>\n    \n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analysis:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copy:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commands:</s:String>-->\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Archivo Borrado o Movido</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Cancelado</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Error</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Click aquí para mostrar los detalles de este error.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Subiendo</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Ejecutando comandos</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Procesando {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparando para el segundo pase</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Procesando {0} - 2o pase</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Creación de archivos</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analizar los Pixeles sin cambio.</s:String>\n    <!--<s:String x:Key=\"S.Encoder.SavingAnalysis\">Saving analysis result</s:String>-->\n    <s:String x:Key=\"S.Encoder.OpenFile\">Abrir archivo</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Explorar carpeta</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Eliminar de la lista</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Mostrar detalles</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>-->\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copiar como imagen</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copiar nombre archivo</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copiar ruta de la carpeta</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copiar enlace</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Salida de comando</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Salida de comando</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notificaciones</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Descartar todas las notificaciones</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Archivo</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Inicio</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Reproducción</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Imagen</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transiciones</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Estadisticas</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Opciones</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Ayuda</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">¡Una nueva actualización disponible!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Click aquí para leer más sobre esto.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Conteo total, Selección de conteo, Selección Index</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Preparando Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Carga invalida - No puedes importar multiples archivos en uno. Intenta escoger solo un archivo.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Carga invalida - No puedes cargar multiples proyectos en uno. Intenta escoger solo un proyecto. </s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Abrir un Media (Imagen o Video) Archivo</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Abrir un Media (Imagen o Video) o un Proyecto</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.All\">All supported files</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Apng\">Animated Png</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Wmv\">Windows media video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Zip\">Zip file, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Png\">Png image, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project as Zip</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Psd\">Psd file</s:String>-->\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Dirigete a \"Archivo > Nuevo\" para iniciar una nueva grabación.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Suelta y arrastra imagenes, videos o proyectos para importar.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Muchas gracias por usar mi app!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">La velocidad baja de fotogramas, el recuento de colores o la cantidad de cambios entre fotogramas, menor será el tamaño.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">¿Quieres hablar? Abra \"Opciones > Acerca de\" para los métodos de contacto.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">¿Teniendo problemas? Ponte en contacto conmigo a través de la herramienta Comentarios.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">¿Te gustaria probar la nueva grabadora?, Ve a \"Opciones > Grabador\", para activarlo.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Grabación</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Grabación de&#x0d;Webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Grabación de&#x0d;Pizarra</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">En Blanco</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nuevo</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Grabación</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Grabación de&#x0d;Webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Grabación de&#x0d;Pizarra</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Insertar</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Guardar como</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Cargar</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Proyectos&#x0d;Recientes</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Guardar como&#x0d;Proyecto</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Descartar&#x0d;Proyecto</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Pila de Acciones</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Deshacer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Rehacer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Resetear</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Portapapeles</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Mostrar portapapeles</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Pegar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Cortar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copiar</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Ajustar a&#x0d;Contenido</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Ajustar imagen</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Seleccionar</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Seleccionar&#x0d;Todo</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Ir a</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Contrario</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Deseleccionar</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Reproducir</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Primero</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Anterior</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Iniciar</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Siguiente</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Último</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Opciones Reproducción</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Bucle durante la reproducción.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Sólo se utiliza durante la reproducción.&#x0d;Si desea cambiar la configuración del bucle para exportar Gifs y Apngs,&#x0d;estará disponible dentro del panel 'Guardar como' para algunos codificadores.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Borrar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Eliminar&#x0d;duplicados</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Reducir&#x0d;Conteo de Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Borrar todo lo anterior</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Borrar todo lo siguiente</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Reordenar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Reverso</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Mover&#x0d;Izquierda</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Mover&#x0d;Derecha</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Retraso (Duración)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Reemplazar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Incrementar o&#x0d;Disminuir</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Escala</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Tamaño y Rotación</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Redimensionar</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Recortar</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Girar/Rotar</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Subtitulo</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Texto Libre</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titulo Fotograma</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Pulsación teclas&#x0d;Teclas</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Superposición</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Dibujo&#x0d;Libre</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Formas</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Clicks de&#x0d;Raton</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Marca de Agua</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinematografia</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Borde</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Sombra</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Progreso</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Ofuscar</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Estilos</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Fundido</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Slide</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">General</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Conteo de fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Duración Total</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Tamaño de Fotograma</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Duración media (Retraso)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Hora actual</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">La hora actual (acumulativa) en función del fotograma actual que se muestra.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI y escala de fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Fotograma Seleccionado</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Cortar</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">No puedes cortar todos los fotogramas.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">La grabación necesita al menos un fotograma.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Eliminar todo</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">¿Estas seguro/a de querer remover todos los fotogramas?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Esta acción borrara el proyecto actual y no se puede deshacer. ¿Quieres continuar?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Descartar Proyecto</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">¿Estas seguro/a de querer descartar el proyecto?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Esta acción descartara el proyecto, removera todos los fotogramas.&#x0d;No puedes deshacer esta operación.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">¿Quieres descartar el Proyecto anterior?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Si decides no hacerlo, el proyecto anterior estara disponible para abrirlo a traves de [Proyectos Recientes]</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Borrar Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">¿Estas seguro/a de querer borrarlo?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Esta acción borrara {0} fotograma(s).&#x0d;Podras deshacer esto más tarde.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Salir del Editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">¿Estas seguro de querer salir?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">El proyecto actual en el que trabaja se puede abrir nuevamente a traves de 'Proyectos recientes'</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">El proyecto actual en el que estaba trabajando se puede abrir nuevamente a través de 'Proyectos recientes', pero no olvide que luego de 5 días, se eliminará automáticamente.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Arrastrar y Soltar, Invalido.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">No puedes importar multiples archivos en uno.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Intenta escoger un solo archivo.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Imposible cargar archivo</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">El archivo no puede ser cargado porque esta en un formato invalido.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">No puedes importar multiples proyectos en uno.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Intenta escoger solo un proyecto.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">No hay texto para ser aplicado.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Debes seleccionar al menos un fotograma para aplicar el texto.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Debes seleccionar al menos un fotograma para aplicar el texto.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Debes seleccionar minimo un fotograma para aplicar el Titulo del fotograma siguiente en el.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Debes seleccionar un borde con grosor mayor de 0 al menos a un lado.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Debes seleccionar al menos un fotograma para aplicar el borde.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">La opacidad debe ser mayor que cero para hacer cualquier diferencia en el fotograma.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Cuando se utiliza la profundidad de sombra y el radio de desenfoque como cero, no hará ninguna diferencia porque se ocultará detrás del fotograma.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Debes seleccionar al menos un pixel para aplicar Cinematografia. Seleccione los pixeles dibujando encima de ellos.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Transición de fundido</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Debes seleccionar minimo un fotograma para la transición Fade.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Un color totalmente transparente no creará ningún efecto en esta transición.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Transición de diapositivas</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Debes seleccionar minimo un fotograma para aplicar la transicion Slide.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Cargar fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Imposible la carga del proyecto</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">No fue posible cargar los fotogramas porque estos pueden estar corrompidos o las imagenes no estan presentes donde  se esperaban.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Muchos fotogramas no pueden ser cargados.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">No fue posible cargar los fotogramas porque estos no pueden ser encontrados o estar corrompidos.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Debes seleccionar minimo un fotograma para aplicar la superposición.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg no está presente. Añádalo a las variables de entorno Path o haga clic aquí para abrir Options > Extras para establecer la ubicación.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski no está presente. Añádalo a las rutas en variables de entorno o haga clic aquí para abrir Opciones > Extras para establecer la ubicación.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">No queda suficiente espacio en la unidad donde esta aplicación almacena su caché ({0}% queda). Haga clic aquí para abrir Opciones > Archivos temporales para liberar espacio.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Has intentado importar varias imágenes con diferentes DPIs, que no se admiten. Algunos de ellos se importaron, los otros necesitan ser importados por separado.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Recuperación de fotogramas de la memoria caché</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Actualizar Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Preparando para importar</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importar Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analizando duplicados</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Ajuste del retardo</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Descartar duplicados</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Descartar Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Descartar Carpetas</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Redimensionar los Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Recortando fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Aplicar Superposición de Fotogramas</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Crear un Titulo en el Fotograma</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Aplicar Rotar los Fotogramas.</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Cambiar el retraso</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Aplicar Efecto de Transcisión</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Preparando para salvar</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Fotograma:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Abrir Imagen</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Explorar Carpeta</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">Exportar Imagen</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Ir al fotograma</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Ir al fotograma (0 a {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Guardar como</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Eliminar Fotogramas Seleccionados</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nueva Grabación de Pantalla</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nueva Grabación de Webcam</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nueva Grabación de Pizarra</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nuevo Proyecto</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nuevo desde Media o Proyecto</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nueva grabacion creada</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nueva grabacion de webcam creada</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nuevo grabacion de pizarra creado</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nuevo proyecto creado</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Deshacer ejecutado</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Reinicio ejecutado</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Rehacer ejecutado</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} fotograma(s) cortados</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} fotograma(s) copiados</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} fotograma(s) pegados</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom cambiado a {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Todos los fotogramas han sido seleccionados</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Seleccionados #{0} fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Seleccion invertida</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Todos los fotogramas fueron deseleccionados</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} fotograma(s) borrados</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Lista de fotogramas invertidos</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yoyo efecto aplicado</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Fotograma(s) movidos para la izquierda</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Fotograma(s) movidos para la derecha</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Fotogramas redimensionados</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Fotogramas recortados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Fotogramas volteados/rotados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">La acción de rotación aplicada en los fotogramas seleccionados </s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Esta acción aplica a todos los fotogramas</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Esta acción aplica al fotograma seleccionado</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Esta acción se aplica a todos los fotogramas o a los fotogramas seleccionados, dependiendo de la configuración</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">La cinematografia aplica para todos los fotogramas basados en el primer fotograma</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Superposicion aplicada</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Titulo de fotograma creado</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">El titulo del fotograma sera insertado despues de seleccionar el fotograma</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Duración (retraso) alterado</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Transicion insertada</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Velocidad de fotogramas reducida</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplicados eliminados</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Ocultar</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Action.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Action.Save\">Guardar</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Cancelar</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Proyectos recientes</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Buscando por proyectos recientes...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Fecha de creación</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Conteo de fotogramas</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">No hay proyecto seleccionado Seleccione un proyecto de la lista para cargar.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Este proyecto ya fue abierto por otra instancia de editor. Un proyecto no se puede abrir por segunda vez si ya está abierto en otro editor.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Entradas del Portapapeles</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Entrada portapapel: </s:String>\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>-->\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>-->\n    <s:String x:Key=\"S.Clipboard.Explore\">Explorar Contenido</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Eliminar</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Pegar comportamiento</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Antes del fotograma seleccionado</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Después del fotograma seleccionado</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">Propiedades actuales</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">Nuevas propiedades</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Mantener relación de aspecto</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Has seleccionado diferentes valores para aplicar la accion de redimensionar.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Puntos</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Arriba:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Izquierda:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Abajo:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Derecha:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">El recorte debe ser menor que el tamaño del fotograma.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">El recorte debe ser mayor de 10x10 pixeles.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Flip Horizontal</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Flip Vertical</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Girar/Rotar Izquierda 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Girar/Rotar Derecha 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Reducir velocidad de fotogramas</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Factor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Eliminar conteo:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Ajuste de retardo:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">No ajustar</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Suma con el fotograma anterior</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Sumar uniformemente con los fotogramas restantes</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Reducir la velocidad de fotogramas de todo el proyecto.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Si la opción está desactivada, debe seleccionar varios fotogramas consecutivos,&#10;mayor que el factor de eliminación.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Eliminará {0} fotogramas(s) después de cada {1} fotograma(s), sin contar los eliminados.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Debes seleccionar los fotogramas para aplicar la reducción de velocidad de fotogramas (o marcar la opción para aplicar a todo el proyecto).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">La lista de fotogramas seleccionados debe ser consecutiva. No puede dejar algunos fotogramas sin seleccionar entre los seleccionados.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">La selección de fotogramas debe ser mayor que el factor de eliminación, para que la caracteristica pueda eliminar cualquier cosa.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Eliminar duplicados</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Similitud (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Eliminación de fotograma:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Eliminar el primer fotograma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Eliminar el ultimo fotograma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Ajuste de retardo:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">No ajustar</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Utiliza el promedio</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Utiliza la suma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Esta acción analiza cada fotograma (píxel por píxel) y elimina los que son al menos {0} % similares a su vecino inmediato.&#x0d;Puede elegir si desea ajustar el retardo (duración de la exposición) de los fotogramas.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Fuente:</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Familia:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Estilo:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Anchura:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Tamaño:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Color:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Contorno</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Grosor:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Diseño</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Vertical:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontal:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Pulsaciones de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separados</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Editar tus atajos de teclado</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignore las teclas Ctrl, Alt, Mayús y Windows sin usarlas como modificadores.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ignorará las pulsaciones de teclas solitarias como \"Control\", pero no ignorará \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Extender la exibicion de los atajos del teclado</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Iniciar la exposición de las pulsaciones de teclas antes.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Por (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">No hay teclas presionadas en su grabación.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Editor de pulsaciones de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Número de fotogramas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Pulsaciones de teclas detectadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Eliminar pulsaciones de teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Añadir atajo de teclado:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Letras minúsculas.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Le permite insertar letras simples en minúsculas.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Lapiz</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Borrador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Seleccionar</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Borrador de trazos</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Anchura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Tip:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rectangulo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Otro:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Resaltador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Ajustar la curva</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">No hay dibujos para aplicar en los fotogramas seleccionados.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Debe seleccionar al menos un fotograma para aplicar el dibujo libre.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Insertar</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Formas</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radio:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Guiones:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>-->\n    <s:String x:Key=\"S.Shapes.Fill\">Relleno</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Clicks de Raton</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">No se detectan clics con el ratón en el proyecto.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Imagen</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Archivo:</s:String>\n    <!--<s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>-->\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacidad:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Seleccionar una imagen</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Debes seleccionar una imagen para aplicar en el fotograma seleccionado.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Debes seleccionar minimo un fotograma para aplicar la marca de agua.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Apariencia</s:String>\n    <s:String x:Key=\"S.Border.Info\">Utilice valores negativos para hacer que el borde expanda la imagen. Al hacerlo, el borde se aplicará a todos los marcos.&#x0d;Si no se utiliza ningún valor negativo, el borde se aplicará solo a los fotogramas seleccionados.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Color de la sombra:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Color de fondo:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Dirección:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Radio de desenfoque:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Profundidad:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Opciones de Ofuscado</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Tamaño pixel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calcule el color medio para cada bloque pixelado.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Utilice la herramienta de selección para seleccionar el rectángulo que se debe pixelar.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">No seleccionaste nada. Utilice la herramienta de selección para seleccionar el rectángulo que se debe pixelar.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tipo</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Barra</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Presición:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Segundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milisegundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Porcentaje</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Número de Fotogramas</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Fecha/hora actual</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Mostrar el total</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formato</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Date\">Puede usar el formato de fecha y hora de .Net Framework.&#x0d;La especificación está disponible en estos dos enlaces a continuación.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Formatos estándar</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Formatos personalizados</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Cuenta desde:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Comienza a contar el número de fotograma desde este número seleccionado.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientación:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Actualización de retardo</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Modo de retardo:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Reemplazar (en ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Aumentar o disminuir (en ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Escala (en %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nuevo Valor</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimo 10ms por fotograma.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Reducir/Incrementar Valor</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Valor de Escala</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Este nuevo valor reemplazará la duración (retraso) de todos los fotogramas seleccionados. El valor puede ser de 10ms a 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Este valor disminuirá / aumentará la duración (retraso) de cada fotograma seleccionado.&#x0d;Puede disminuir / incrementar seleccionando un valor entre -10000ms y 10000ms, pero la duración final de cada fotograma estará restringida a entre 10ms y 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Escala la duración (retardo) de cada fotograma seleccionado según el valor porcentual.&#x0d;Puede escalar la duración de cada fotograma seleccionando un valor entre 1% y 1000%, pero la duración final de cada fotograma se limitará a entre 10ms y 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Utilice el pincel para seleccionar los píxeles que no deben permanecer estáticos (Que cambian entre fotogramas) pintando sobre ellos.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Longitud de transcisión</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Retraso de transcisión.</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Fundido a...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">El proximo fotograma</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Un color</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Color</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">La transcisión sera aplicada al fotograma seleccionado y al siguiente</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Tipo de archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">Imagenes (fotogramas)</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">Proyecto</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">Video</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Codificar</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">Usa una paleta por defecto</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">Codificador realizado por el desarrollador ScreenToGif.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Opciones del Gif</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Calidad:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Colores:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maximo numero de colores (Por fotograma).</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Bucle:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif en bucle.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Repetir para siempre.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Repetir conteo.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Detectar pixeles sin cambio.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Opciones apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng en bucle.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Detectar pixeles sin cambio.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Pinta todos los píxeles sin cambios con un color transparente.</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">Opciones de video</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">Fps:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">Rotar el video (verticalmente)</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">Opciones de imagen</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zip las imagenes.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions\">Opciones psd</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Comprima la imagen.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Comprima los datos de imagen utilizando el algoritmo RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Guarde los datos de la línea de tiempo.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exporta los tiempos de los fotogramas, en lugar de solo los fotogramas.</s:String>\n    <s:String x:Key=\"S.SaveAs.ProjectOptions\">Opciones de proyecto</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">Extras:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets\">Preajustes:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Predeterminado</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Añadir</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Guardar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Eliminar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">Eliminar Aguste</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">¿Desea eliminar el ajuste preestablecido?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">No puede deshacer esta operación, pero puede volver a agregar el ajuste preestablecido más adelante.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Resetear</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">Restablecer ajuste preestablecido</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">¿Desea restablecer el ajuste preestablecido a sus parámetros predeterminados?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">No puede deshacer esta operación, pero puede volver a editar el ajuste preestablecido más tarde.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">No hay preajuste FFmpeg seleccionado, seleccione uno.</s:String>\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Guardar opciones</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Guarde el archivo en una carpeta de su elección.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">Sobreescribir (Si ya existe).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Salvar el proyecto tambien (misma carpeta, mismo nombre)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Subir el archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">Destino de subida.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copiar en el portapapeles.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copia el archivo de salida en el portapapeles.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Ruta de carpeta</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copia la ruta de la carpeta del archivo de salida en el portapapeles.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Ruta de archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copia la ruta del archivo de salida en el portapapeles.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Enlace</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copia el vínculo generado por el servicio de subida en el portapapeles.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Ejecute comandos despues de codificación.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Escriba los comandos que se ejecutarán después de la codificación.&#x0d;Para ejecutar varios comandos, escriba cada uno de ellos en una línea separada.&#x0d;Macros:&#x0d;{p} Ruta del archivo de salida.&#x0d;{f} Ruta de la carpeta de salida.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">Archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Destino de carpeta</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Escoge una locación.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Formato de archivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Nombre de el archivoNombre del archivo. Insertar formato de fecha y hora entre '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animacion</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Incrementar el numero de archivos</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Reduce el numero de archivos</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Un archivo con el mismo nombre ya existe.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Guardar en el portapapeles</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Debes seleccionar dónde guardar el archivo (en una carpeta, en el portapapeles o cargarlo en otro lugar).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Para ejecutar un comando de codificación posterior, debe escribir algo en el campo de texto de comandos.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">No se ha seleccionado ningún servicio de subida. Debe seleccionar un destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">No se puede subir en el servicio seleccionado porque no estaba autorizado. Dirígete a Opciones > Servicios Subida para autorizar esta aplicación.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">No puede seleccionar la opción de copiar el vínculo porque no se configuró para subir el archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Debes seleccionar una carpeta de salida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">La carpeta de salida no existe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">La carpeta de salida contiene uno o más caracteres invalidos. Seleciona una carpeta valida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Debes seleccionar un nombre de archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">El nombre de salida contiene uno o mas caracteres invalidos. Selecciona un nombre valido de archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">El nombre del archivo esta en uso. Usa otro nombre o sobreescribe el archivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">La operación fue cancelada.</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Exportar fotogramas</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">¿Estas seguro de querer exportar los fotogramas?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Esta acción exportara {0} fotogramas directamente en la carpeta seleccionada</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Comentarios</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Enviar</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Previsualizar</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Enviar Feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Título</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Mensaje</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Si usted está experimentando un error, no se olvide de explicarme cómo lo consiguió, paso a paso.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Tipo de Feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Sugerencia</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problema/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Tu e-mail (Opcional)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Debes colocar un titulo en el feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Debes colocar un mensaje en el feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Debes escribir su correo electrónico para recibir una respuesta del desarrollador.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Enviando en segundo plano... Esta ventana cerrara en poco.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Adjuntos (Opcional, 20MB Maximo)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Añadir Adjuntos</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Eliminar todos los adjuntos</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Puedo entender Inglés</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">y portugués (brasileño y europeo).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Esto es lo que enviarás, además de todos los archivos adjuntos.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Solucionar problemas</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">¿Falta alguna ventana?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Si falta alguna de las ventanas (fuera de la pantalla),&#x0d;utilice las siguientes opciones para restablecer su posición actual y de inicio.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Aquí es donde se encuentra actualmente cada ventana:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Aquí es donde cada ventana se abrirá la próxima vez:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Mueva todas las ventanas a la pantalla principal.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Restablezca la posición de inicio de todas las ventanas.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Cursiva</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Obliqua</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Negro</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Semi negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra negra</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra delgada</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Pesada</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Ligera</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regular</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi Negrilla</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Delgado</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra negra</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra negrita</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra ligera</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Arriba</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Abajo</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Tramo</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Izquierda</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centrar</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Derecha</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertical</s:String>\n</ResourceDictionary>\n"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.fi.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Takaisin</s:String>\n    <s:String x:Key=\"S.Cancel\">Peruuta</s:String>\n    <s:String x:Key=\"S.Yes\">Kyllä</s:String>\n    <s:String x:Key=\"S.No\">Ei</s:String>\n    <s:String x:Key=\"S.Add\">Lisää</s:String>\n    <s:String x:Key=\"S.Edit\">Muokkaa</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Otsikko</s:String>\n    <s:String x:Key=\"S.Description\">Kuvaus</s:String>\n    <s:String x:Key=\"S.SelectColor\">Click here to select the color.</s:String>\n    <s:String x:Key=\"S.Documentation\">Siirry dokumentaatioon napsauttamalla tätä.</s:String>\n    <s:String x:Key=\"S.Suppress\">Suppress</s:String>\n    <s:String x:Key=\"S.Preview\">Esikatselu</s:String>\n    <s:String x:Key=\"S.Size\">Size</s:String>\n    <s:String x:Key=\"S.Background\">Tausta</s:String>\n    <s:String x:Key=\"S.Color\">Väri:</s:String>\n    <s:String x:Key=\"S.Delay\">Viive</s:String>\n    <s:String x:Key=\"S.DelayMs\">Viive:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Arvo -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Scale Value:</s:String>\n    <s:String x:Key=\"S.Margin\">Marginaali:</s:String>\n    <s:String x:Key=\"S.Padding\">Täyte:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Vähimmäiskorkeus:</s:String>\n    <s:String x:Key=\"S.AndOr\">ja/tai</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Voi ei, sovellus kaatui :(</s:String>\n    <s:String x:Key=\"S.Required\">Pakollinen kenttä</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Puuttuva riippuvuustekijä</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 ei ole käytössä</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Jotta voit käyttää tätä sovellusta kunnolla, sinun on ladattava oikea versio .Net Frameworkista.&#10;Haluatko avata verkkosivun ladataksesi sen?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Vain yksi instanssi sallittu</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Sovellus on jo käynnissä</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif on jo käynnissä, mutta ilmeisesti ikkuna ei ole avoinna. Tarkista, että ScreenToGif-kuvake on ilmoitusalueella.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Saving the settings</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Would you like to try to save it again?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Looks like ScreenToGif does not have enough privileges to save the settings to the disk.&#10;&#10;Would you like to try again, but this time using administrative privileges?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Poistu ScreenToGif:stä</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Haluatko varmasti poistua?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Kaikki ikkunat suljetaan ja ilmoitusalueen kuvake poistetaan.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Vaihda grafiikkasovitin</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Vaihda oikeaan grafiikkasovittimeen valitun näytön kaappaamiseksi.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">DirectX:n rajoituksen vuoksi ScreenToGif-ohjelman on oltava käynnissä samalla grafiikkasovittimella kuin kaapattavan näytön.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Vaihda näytönohjain ScreenToGifiä varten avaamalla Windows-asetukset > Järjestelmä > Näyttö > Grafiikka-asetukset tai napsauttamalla alla olevaa linkkiä.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Vaihda näytönohjain ScreenToGifiä varten avaamalla näytönohjaimesi grafiikka-asetukset.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Avaa Windowsin asetukset</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Välilyönti</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Oikea klikkaus</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Uusi näytön tallennus</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Uusi Verkkokameratallennus</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Uusi Piirustustaulun tallennus</s:String>\n    <s:String x:Key=\"S.Exit\">Poistu</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Uusi näytön tallennus</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Uusi Verkkokameratallennus</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Uusi Piirustustaulun tallennus</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Uusi animaatio</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Lisää näytön tallennus</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Lisää Verkkokameratallenne</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Aseta Piirustustaulun tallennus</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Lisää mediasta (kuvat ja videot)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Tallenna nimellä...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Lataa tiedostoja (kuvia, videoita ja projekteja)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Lataa viimeisimpiä projekteja</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Hylkää nykyinen projekti</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Ohita kehysten viive</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Lisää/vähennä kehysten viivettä</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Kehysten viiveen skaalaus</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Aseta zoomaus 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Säädä ikkuna kehyksen koon mukaan</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Sovita kuva käytettävissä olevaan ikkunakokoon</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Valitse ensimmäinen kehys</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Valitse edellinen kehys</s:String>\n    <s:String x:Key=\"S.Command.Play\">Toista animaatio</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Valitse seuraava kehys</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Valitse viimeinen kehys</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Kumoa</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Tee uudelleen</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Peruuta kaikki projektin muutokset</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Kopioi valitut kehykset ja tallenna ne leikepöydälle.</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Leikkaa valitut kehykset ja tallenna ne leikepöydälle.</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Liitä kehyksiä leikepöydältä</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Poista kaikki valitut kehykset</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Poista kaikki edelliset kehykset</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Poista kaikki seuraavat kehykset</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Poista kaksoiskappaleet</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Vähennä kehysten määrää</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Luo tasainen silmukka</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Käänteinen animaatio</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Saa animaation kulkemaan eteen- ja taaksepäin.</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Siirrä valittua kehystä vasemmalle</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Siirrä valittua kehystä oikealle</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Muuta kaikkien kehysten kokoa</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Rajaa kaikki kehykset</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Käännä tai kierrä kehyksiä</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Lisää kuvateksti</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Lisää vapaasti leijuva teksti</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Lisää kehys, jossa on otsikko</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Lisää tallennuksen aikana painetut näppäimet</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Piirrä vapaita kuvioita</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Lisää kuvioita</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Hiiren klikkaukset</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Valitse kuva ja lisää vesileimana</s:String>\n    <s:String x:Key=\"S.Command.Border\">Lisää reunuksia</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Lisää pudotusvarjo</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Piilota kehysten arkaluonteiset osat</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Käytä piirtotyökaluja valitaksesi, mitkä kehyksen osat eivät saa pysyä staattisina koko animaation ajan.</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Edistymispalkki tai teksti toiston tiedoista</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Valitse kaikki kehykset</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Siirry kehykseen indeksillä</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Käänteinen kehysten valinta</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Poista kaikkien kehysten valinta</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Häivytyssiirtymä</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Dian siirtymä</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Tyhjennä kaikki valmiit koodaukset</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Siirrä ylöspäin</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Siirrä alaspäin</s:String>\n    <s:String x:Key=\"S.Command.Add\">Lisää</s:String>\n    <s:String x:Key=\"S.Command.Open\">Avaa</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Muokkaa valittua kohdetta</s:String>\n    <s:String x:Key=\"S.Command.Save\">Tallenna valittu kohde</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Poista valittu kohde</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Näytä historia</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Käynnistys</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Tallennin</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Avaa näytön tallentimen,&#10;jossa voit helposti aloittaa näytön tallentamisen.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Verkkokamera</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Avaa Verkkokameranauhurin.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Piirustustaulu</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Avaa Piirustustaulutallentimen,&#10;jossa voit aloittaa piirustusten tallentamisen.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editori</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Avaa editori-ikkunan, tämän sovelluksen keskipisteen,&#10;jossa voit aloittaa ja muokata uutta tallennusta.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Asetukset</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Uusi versio saatavilla</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Lataa ScreenToGifin uusimman version.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Päivitysohjelma</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Uusi päivitys on saatavilla</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Uusi julkaisu!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Uusi versio saatavilla, versio {0}!&#x0d;Klikkaa tästä saadaksesi lisätietoja.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Näyttää siltä, että järjestelmääsi ei enää tueta tai että päivitysjärjestelmässä on tapahtunut muutoksia. Yritä ladata se manuaalisesti verkkosivustolta.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versio</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Siirrettävä</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Asentaja</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Mitä uutta?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Virheiden korjaukset:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Uusi versio on ladattavissa.&#x0d;Haluatko avata selaimen ladataksesi sen?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Suorita sovellus päivityksen jälkeen.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Download</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Asenna</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Asenna manuaalisesti</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Downloading...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Lataustietojen näyttäminen ei ollut mahdollista.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Päivitystä ei voitu ladata.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Sinun on odotettava, että kaikki koodaukset valmistuvat ennen päivittämistä.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Lataaja</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Lataaja</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} / {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Asetukset</s:String>\n    <s:String x:Key=\"S.Options.App\">Sovellus</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Tallennin</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editori</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tehtävät</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Pikakuvakkeet</s:String>\n    <s:String x:Key=\"S.Options.Language\">Kieli</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Tallennus</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Ekstrat</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Pilvi</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Lahjoita</s:String>\n    <s:String x:Key=\"S.Options.About\">Tietoja</s:String>\n    <s:String x:Key=\"S.Options.Other\">Muut</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Puuttuva pikanäppäin kursorin seuraamiselle</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Jos haluat käyttää hiirikursorin seuraamistoimintoa, sinun on määritettävä pikanäppäin, jolla voit vaihtaa sen tarvittaessa.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Käynnistys</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Käynnistä&#10;manuaalisesti</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Sovellus suoritetaan vain, kun teet sen manuaalisesti.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Käynnistä&#10; Windowsin kanssa</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Sovellus suoritetaan Windowsin käynnistyksen jälkeen.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Käynnistystilojen vaihtaminen on mahdotonta.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Salli vain&#10;yksi instanssi</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Voit suorittaa sovelluksen kerran käyttäjää ja suoritusohjelmaa kohti, mikä tarkoittaa, että eri käyttäjät tai suoritusohjelmat voivat olla rinnakkain.&#10;Kun sovellusta yritetään suorittaa uudelleen, toinen instanssi yrittää antaa fokuksen ensimmäiselle ja lopettaa itsensä.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Salli useita&#10;instansseja</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Voit käyttää sovellusta samanaikaisesti useampaan kertaan ilman rajoituksia.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Käynnistä minimoituna ilmoitusalueelle.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Ilmoitusalueen kuvake on näkyvissä, kun tämä vaihtoehto on aktiivinen.)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Käynnistä:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Käynnistysikkuna</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Näytön tallennin</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Verkkokameratallennin</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">piirustusPiirustustaulun tallennin</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Editori-ikkuna</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Ikkuna, joka näkyy ensimmäisenä sovelluksen käynnistyessä)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Teema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Värimaailma:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Hyvin vaalea</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Vaalea</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Keskitaso</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Tumma</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Hyvin tumma</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Seuraa järjestelmää</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Mukautettu</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Esimerkkivärit.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Ilmoitusalueenkuvake</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Näytä sovellus ilmoitusalueella.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Pidä sovellus auki, vaikka kaikki ikkunat olisi suljettu.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Älä tee mitään</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Avaa ikkuna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Ei ikkunaa</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimoi/palauta kaikki ikkunat</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimoi kaikki ikkunat</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Palauta kaikki ikkunat</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Vasen klikkaus:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Vasen klikkaus (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Keskiklikkaus:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Ikkuna:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Tai muuten avaa:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Yleiset</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Ratkaisu 'Ei tarpeeksi kiintiötä...' -kaatumiseen.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Kokeellinen)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Kysy ennen sovelluksen sulkemista (komennolla 'Poistu').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Poista laitteistokiihdytys käytöstä.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Käyttöliittymä renderöidään ohjelmistotilassa)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Tarkista käännöspäivitykset.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Päivitetyt käännökset ladataan ja asennetaan automaattisesti)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Tarkista päivitykset käynnistyksen yhteydessä.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Asenna päivitykset automaattisesti sovelluksen sulkemisen jälkeen.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Pakota kannettavan version lataaminen.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Vaatii manuaalisen asennuksen purkamalla ja korvaamalla suoritettava tiedosto.)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Pakota päivitys suoritettavaksi korotetuilla käyttöoikeuksilla.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Kehotus ennen asennuksen aloittamista.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Käyttöliittymä</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Vanha</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Uusi</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Kaappaustaajuus</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manuaalinen</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Kaappaat jokaisen ruudun manuaalisesti painamalla kaappauspainiketta tai vastaavaa pikanäppäintä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Käyttäjän vuorovaikutus</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Ruudut tallennetaan joka kerta, kun napsautat tai kirjoitat jotain.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Sekunnissa</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Ruudut tallennetaan sekuntikohtaisesti, &#10;kun otetaan huomioon tallentimen näytöllä asetettu ruutunopeuden nimittäjä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Minuutissa</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Ruudut tallennetaan minuuttiperustaisesti (timelapse), &#10;kun otetaan huomioon tallentimen näytöllä asetettu kuvataajuuden nimittäjä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Tunnissa</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Ruudut tallennetaan \"per tunti\" (timelapse), &#10;kun otetaan huomioon tallentimen näytöllä asetettu kuvataajuuden nimittäjä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Toiston viive:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(Millisekunteina, kukin kaapattu ruutu asetetaan tähän viiveeseen)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Käynnistysviive:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(Millisekunteina, jokainen kuvankaappaus odottaa tämän ajan ennen aloitusta)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Jokainen kehys tallennetaan {0}:n välein.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Kaappaustila</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Käytä vanhempaa kaappausmenetelmää, joka on hitaampi eikä ehkä toimi pelien kaappaamisessa, mutta ei vaadi lisäosia.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Käytä Desktop Duplication API -kaappausmenetelmää, joka on nopeampi ja pystyy kaappaamaan kokoruudun pelejä, mutta vaatii Windows 8:n tai uudemman.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Tallenna&#10;tiedostoon</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Jokainen otettu kehys tallennetaan suoraan kuvana levylle.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Muisti&#10;välimuisti</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Jokainen kaapattu kuva tallennetaan ensin pikseliryhmänä muistiin (voidaan pakata ennen sitä).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Pakkaus:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimaalinen</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Hitaampi mutta todennäköisesti optimaalisempi pakkaus)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Nopein</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Nopeampi, mutta todennäköisesti vähemmän optimaalinen pakkaus)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Ei pakkausta</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Pakkausta ei suoriteta kuvien tallentamisen aikana.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Välimuistin koko:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(MB:ssä. Kun tämä koko on saavutettu, tiedot kirjoitetaan levylle).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Estä täydellisten mustien kehysten ottaminen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Estää muistin välimuistia käyttävää BitBlt:tä tuottamasta virheellisesti kehyksiä, joissa kaikki pikselit ovat mustia.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Näytä hiiren kursori tallenteessa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Valitse kursorin väri</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Kiinteä kuvataajuus.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Jatkuva viive, joka ei muutu tallennusviiveen mukaan)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Kaappaa vain silloin, kun jokin muuttuu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Kehys kaapataan vain silloin, kun jokin muuttuu kaappausalueella.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Paranna kaappauksen suorituskykyä etätyöpöytäyhteydessä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Poistaa kerroksittaisen ikkunan kaappauksen käytöstä)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Pakota muistin puhdistaminen kaappauksen aikana.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Vähentää muistin käyttöä kaappauksen aikana, mutta heikentää suorituskykyä)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Toimintaohjeet</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Kolmasosasääntö</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Vaihda kolmanneksen sääntöä koskevan&#10;ohjeen näyttöä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Ristikko</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Vaihda ristikon näyttöä napsauttamalla tätä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Ohjeet näkyvät vain, kun tallennin on tauotettu tai pysäytetty.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Piilota otsikkorivi (minitila).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Ota näytön suurennuslasi käyttöön.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Ottaa suurennuslasin käyttöön, kun valitaan tallennusaluetta.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animoi näyttöalueen reunaa valinnan aikana.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animoi käyttäen 'marssivat muurahaiset' -tyyliä)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Ota valinnan panorointi käyttöön.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Näyttää valinnan kulman lähellä olevan kuvaajan, joka mahdollistaa tallennusalueen liikuttamisen)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Kompaktitila.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Näyttää pienemmän version tallentimen komentopaneelista)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Näytä Hylkää-painike myös tallennuksen aikana.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normaalisti se on näkyvissä vain tauolla ollessasi).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Paranna näytön valinnan suorituskykyä.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Vähentää viivettä näytön valinnan aikana näyttämällä staattisen näkymän näytöstä)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Muista tallennusalueen aiempi koko.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Muista tallennusalueen edellinen sijainti.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Käytä käynnistyksen lähtölaskentaa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Odottaa sekunteina ennen kaappauksen aloittamista)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Ota seuraava kursori käyttöön.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Tallennusalue asettuu uudelleen kursorin sijainnin mukaan).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Puskurin marginaali pikseleinä, jossa tallennusaluetta aletaan sijoittaa uudelleen)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Puskurin lisämarginaali pikseleinä, jossa käyttöliittymä alkaa olla piilossa)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Kysy, ennen kuin hylkäät tallenteen.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Esikatselun tausta</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Ruudukon koko:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Hyvin pieni</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Pieni</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Keskikokoinen</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Suuri</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Erittäin suuri</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Pidän isoista neliöistä</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Olen sokea</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Mukautettu</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Korkeus:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Leveys:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Käytä</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Perusväri</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Parillinen väri</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Pariton väri</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Näytä koodaukset erillisessä ikkunassa.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Laajenna otsikkopalkkia (window chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Säädä ikkunan koko automaattisesti kehyksen koon mukaan heti lataamisen jälkeen.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Säädä kehyksen zoomaus automaattisesti ikkunan koon mukaan heti lataamisen jälkeen.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Kysy ennen kehysten poistamista.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Kysy ennen projektin hylkäämistä.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Kysy ennen Editorin sulkemista (jos projekti on avattu).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Ota käyttöön kolmoisnapsautus tekstin valitsemiseksi.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Piirrä otsikoiden ääriviivat kirjainten ulkopuolelle.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Pudota kehyksiä tarvittaessa.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Ohita kehys, jos esikatseluohjelma ei pysty näyttämään sitä ajoissa)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Ohita kehys, jos esikatseluohjelma ei pysty näyttämään sitä ajoissa.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Rajoita peruutus-/palautushistoriaa.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Vanhemmat toimet poistetaan, kun raja on saavutettu.)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Tallennettujen toimien enimmäismäärä)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Synkronoi lähtökansio esiasetusten kesken.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Esiasetukset käyttävät samaa ulostulopolkua)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Synkronoi myös tiedostonimi.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Myös esiasetukset käyttävät samaa tiedostonimeä)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Synkronoi vain saman tiedostotyypin esiasetukset.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Vain saman tiedostotyypin esiasetukset ovat synkassa.)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automatisoitu tehtävä</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Luettelo automaattisista tehtävistä</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Tehtävä</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Yksityiskohdat</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Käytössä</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Ota tehtävä käyttöön.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">Valitse tehtävä</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Valitse yllä oleva tehtävä</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Nämä tehtävät suoritetaan peräkkäin luettelon yläreunasta alareunaan.&#10;Tämä tapahtuu, kun avaat projektin ensimmäistä kertaa editorilla.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globaali</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Näytön tallennin:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Avaa oletusnäyttötallentimen)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Verkkokameratallennin:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Avaa Verkkokameratallennin)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Piirustustaulun tallennin:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Avaa Piirustustaulutallentimen, jolloin voit tallentaa piirustuksesi)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editori:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Avaa toisen editori-ikkunan)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Asetukset:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Avaa valintaikkunan. Voit avata vain yhden kerrallaan)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Poistu:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Sulkee kaikki ikkunat ja poistaa sovelluksen ilmoitusalueelta)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Nauhurit</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Käynnistys/tauko:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Käynnistää tai keskeyttää tallennuksen. Sitä käytetään tilannekuvien ottamiseen, jos tilannekuvatoiminto on aktivoitu.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Pysäytys:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Pysäyttää tallennuksen ja avaa editorin)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Hylkää:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Poistaa aktiivisen nauhoituksen, kun se on pysäytetty.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Kursorin seuraaminen:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Vaihtaa tallennusalueen säätöä kursorin sijainnin perusteella)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Poista seuraavat käytöstä:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Poistaa tilapäisesti käytöstä tallennusalueen säätämisen kursorin sijainnin perusteella, vain muuntonäppäimet hyväksytään)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Aseta näppäimistön fokus napsauttamalla ja paina sitten haluamiasi näppäimiä ja modifiointimerkkejä.&#10;Jotkin näppäinyhdistelmät eivät ole sallittuja.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Sovelluksen kieli</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Autom. tunnistus</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Nykyisen käyttöjärjestelmän kieli (jos käytettävissä)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Haluaisitko kääntää sovellukseni?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Klikkaa tästä lukeaksesi käännösohjeet ja ladataksesi Translator-sovelluksen.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Myöhemmin,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">klikkaa tästä tuodaksesi</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">ja testaa käännöksesi.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Lähetä se minulle</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">kun olet saanut sen käännettyä.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Avaa ohjeiden verkkosivu.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Avaa tuontisivun</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Avaa sähköpostisovelluksesi</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Tila</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Asema:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} vapaana {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Tarkista uudelleen, kuinka paljon tilaa on jäljellä.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Tyhjennä välimuistikansio.&#10;Voit päättää, haluatko säilyttää viimeisimmät projektit vai et.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Nykyisen valitun kiintolevyn tila on vähissä. Puhdista välimuistikansio tai vaihda sijaintia.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Aseman tietojen hakeminen on mahdotonta.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Ei tiedostoja</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} tiedosto</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} tiedostoa</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Ei kansioita</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} kansio</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} kansiota</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} käytössä</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Polut</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Välimuisti:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Valitse välimuistin ( väliaikaiset tiedostot ) sijainti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Lokit:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Valitse virhelokitiedostojen sijainti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Selaa valittua kansiota.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Asetusten sijainti</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Paikallinen:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Sitä ei ole olemassa</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Luo tyhjä paikallinen asetustiedosto.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Poista asetustiedosto.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Avaa kansio, jossa asetustiedosto sijaitsee.&#x0d;Pidä Ctrl-näppäintä painettuna napsauttaessasi avataksesi tiedoston.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">- Asetusten latausmalli: &#x0d;- Jos Paikallinen-kansiossa ei ole asetustiedostoa, sovellus etsii AppData-kansion sisältä. &#x0d;Oletusta käytetään, jos asetustiedostoa ei ole.- Jos Paikallisia asetuksia ei ole, &#x0d;kaikki asetukset tallennetaan AppData-asetustiedostoon.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Poista kaikki tiedostot välimuistista sovelluksen sulkemisen yhteydessä.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Kysy ennen kuin poistat kaikki tiedostot välimuistista.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Poista vanhat projektit automaattisesti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Kun sovellus avataan, taustatehtävä poistaa kaikki suljetut projektit, jotka ovat vanhempia kuin määritetty aika.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(päivinä, kaikki tätä vanhemmat suljetut projektit poistetaan/hävitetään sovelluksen avaamisen jälkeen).</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Välimuistin tyhjennys</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Haluatko tyhjentää välimuistikansion?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Kun luot nauhoituksen tai avaat jotain muokattavaa, luodaan projekti, joka tallennetaan välimuistikansioon.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Haluatko poistaa nämä projektit välimuistikansiosta?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Älä poista viimeaikaisia projekteja.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Vain projektit, jotka ovat vanhempia kuin {0} päivää ja jotka eivät ole tällä hetkellä käytössä, poistetaan.)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Kaikki projektit, jotka eivät ole tällä hetkellä käytössä, poistetaan).</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Välityspalvelin</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Tila:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Ei käytössä</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manuaalinen</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Järjestelmä</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Käyttää järjestelmän välityspalvelinta)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Isäntä:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Portti:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Käyttäjänimi:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Salasana:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Lataa esiasetukset</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Palvelu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Otsikko</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Kuvaus</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Käytössä</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Latauspalvelu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Valitse palvelu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Valitse latauspalvelu yllä</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Mukautettu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Ota tämä esiasetus käyttöön.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Yksityiskohdat</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Nimi:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Kuvaus:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Tila:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Nimetön</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Todennettu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Valtuutus</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Hanki tunniste</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Liitä OAuth-tunniste tähän</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Käyttäjänimi:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Salasana:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Hyväksy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Käyttäjätunnusta ja salasanaa ei tallenneta.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Vaihtoehdot</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Käytä suoria linkkejä.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Albumi</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Sinun on annettava tälle esiasetukselle yksilöllinen nimi.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Nimi on jo käytössä toisessa latausasetuksessa.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Todennetussa tilassa, sinun on suoritettava todennusprosessi loppuun.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Sinun on annettava käyttäjätunnuksesi ja salasanasi, jotta voit käyttää tätä sovellusta.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Valtuutusmerkkiä ei saatu.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Jotta voit valtuuttaa tämän sovelluksen, sinun on annettava valtuutusmerkki.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Valtuutus epäonnistui. Tarkista, että kaikki on kunnossa ja yritä uudelleen muutaman sekunnin kuluttua.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Albumilistaa ei voitu ladata.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Valtuutus suoritettu.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Ei sallittu.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Valtuutuksen voimassaolo päättyi {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Valtuutus voimassa {0} asti.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Hae linkkejä, joissa on Gifv-laajennus Gifin sijasta.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Lataa gif-kuvia valittuun albumiin.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Albumi:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Kysy ennen lähettämistä</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Lataa albumilista uudelleen.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Oletukset</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Pyydä täyttämään lähetyksen tiedot.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url-tyyppi:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Valitse albumi (valinnainen)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Voit halutessasi valita kohdealbumin:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Lähetystiedot (valinnainen)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Lähetystiedot</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Nimi:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Kuvaus:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tagit:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Erottele tagit toisistaan puolipisteellä ( ; ).</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Näytetään vain niille, jotka käyttävät suoraa linkkiä.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Lähetyshistoria</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Päiväys</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Esiasetus</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Onnistuiko?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Poista historiamerkintä.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Linkki:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Huonompi laatu:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Poistolinkki:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Oletko varma, että haluat poistaa historiamerkinnän?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Tätä toimintoa ei voi peruuttaa.&#10;&#10;Haluatko poistaa valitun historiamerkinnän?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Käytettävissä olevat ulkoiset työkalut</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Lataa tästä&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Ladataan...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Ladattu&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Avaa tiedoston ominaisuudet napsauttamalla tätä.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Storen jakamat sovellukset eivät voi ladata muita sovelluksia. Sinun on ladattava se manuaalisesti.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg sijainti</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Valitse FFmpegin suoritettavan tiedoston sijainti.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg suoritettava</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Suoritettavan FFMpeg-tiedoston polku sisältää yhden tai useamman virheellisen merkin. Valitse kelvollinen sijainti kyseiselle suoritettavalle tiedostolle.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifskin sijainti</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Valitse Gifski-kirjaston sijainti</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski-kirjasto</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Gifski-kirjaston polku sisältää yhden tai useamman virheellisen merkin. Valitse kirjastolle kelvollinen sijainti.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg lisenssi</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski lisenssi</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx lisenssi</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Puuttuva kirjoitusoikeus kansiossa</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Latausta ei ole mahdollista tallentaa kansioon, koska kirjoitusoikeudet puuttuvat.&#10;&#10;Haluaisitko käynnistää latausohjelman järjestelmänvalvojan oikeuksin, jotta lataus saataisiin valmiiksi?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Lahjoita</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Lahjoita US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Lahjoita €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Avaa Paypal-sivuston. Valittu valuutta: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Avaa Paypal-sivuston. Valittu valuutta: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Avaa Paypal-sivuston. Sinun on valittava valuutta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Tilaa</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Lahjoita kuukausittain Patreonin kautta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Lahjoita kuukausittain Flattrin kautta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Lahjapelit</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Lahjapelejä Steamin kautta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Lahjapelejä GOG:n kautta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Maksa kahvit Ko-fi:n kautta.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Kryptovaluutat</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Kopioi BitcoinCash-osoite.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Tuki</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Jos haluat tukea projektia :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versio:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Tarkista päivitykset</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Sinulla on jo tuorein versio.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Tekijä: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store -versio. Jotkin ominaisuudet on poistettu käytöstä pakollisten käytäntöjen vuoksi.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Yhteystiedot</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Liity palvelimelle</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Vieraile sivulla</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Liity huoneeseen</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Tekninen</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Lisenssi:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Tämä on täysin ilmainen sovellus)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Lähdekoodi:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Tietosuojakäytäntö:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Suuret kiitokset</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Kaikki tukijani, ihmiset, jotka antoivat palautetta ja/tai lahjoituksia.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Lokalisointi</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Kielikoodien hankinta...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Tunnistettu -> {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Ei tunnistettu</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Alimpana oleva resurssi on tällä hetkellä käytössä oleva resurssi.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Jos haluat soveltaa mukautettua resurssia, siirrä se luettelon alareunaan.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Resurssien vienti...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Tallenna resurssisanasto</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Avaa resurssisanasto</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Resurssisanasto</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Tuodaan resursseja...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Tiedostonimi ei noudata kelvollista kaavaa.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Yritä nimetä uudelleen kuten: xaml, jossa 'en' on korvattava kielikoodillasi.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Yritä poistaa toistuva resurssi tai käytä muuta kielikoodia.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Tarpeeton kielikoodi</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Koodi \"{0}\" on tarpeeton. Kokeile sen sijaan käyttää \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Tuntematon kieli</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">Merkkiä \"{0}\" ja sen perhettä ei tunnistettu kelvollisiksi kielikoodeiksi.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Lokalisointiresurssia ei ollut mahdollista tuoda.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Nauhoita</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Tauko</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Jatka</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Pysäytä</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Hylkää</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Nappaa</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Korkeus</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Leveys</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Kursorin seuraaminen on käytössä.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Klikkaa vaihtaaksesi kaappaustaajuustilojen välillä.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manuaalinen</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">vuorovaikutukset</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Enimmäiskuvat sekuntia kohti</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Vaihtelee välillä 1-60 kuvaa sekunnissa, ja korkeammat arvot merkitsevät, että kuvataan enemmän ruutuja.&#10;Jokainen lisäys vastaa 16 millisekunnin eroa.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Enimmäiskuvamäärä minuutissa</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Vaihtelee välillä 1 - 60 fpm, jolloin korkeammat arvot merkitsevät, että kuvia tallennetaan enemmän.&#10;Jokainen lisäys vastaa 1 sekunnin eroa.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Enimmäiskuvat tunnissa</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Vaihtelee välillä 1 - 60 fph, jolloin korkeammat arvot tarkoittavat, että kuvia otetaan enemmän.&#10;Jokainen lisäys vastaa 1 minuutin eroa.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Klikkaa tai paina näppäimiä kaapataksesi</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Nappaa ikkunaan (Nappaa vetämällä ja vapauttamalla)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Ennen aloitusta:</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Tauko)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Pysäytetään...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Esialoitus...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Kulunut kaappausaika.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Ruutujen kokonaismäärä:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Kaapattu manuaalisesti:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Kaappaus on keskeytetty.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Tietokoneesi ei tue tarkkaa kaappaustilaa,&#10;mikä tarkoittaa, että tavoitekuvanopeutta ei ehkä koskaan saavuteta.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Näytön kaappaaminen ei ollut mahdollista</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Näyttöä ei ollut voitu kaapata. Kaappausmenetelmä ei palauttanut yhtään kehystä 5 yrityksen jälkeen.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Näytön kaappausta ei ollut mahdollista aloittaa/tauottaa.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Työpöydän monistusliittymän avulla tapahtuvaan näytön kaappaukseen tarvitaan Windows 8 tai uudempi käyttöjärjestelmä.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Alue</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Valitse alue</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Ikkuna</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Valitse ikkuna</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Näyttö</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Valitse näyttö</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Sisäinen näyttö</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Yleisnäyttö</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Grafiikkasovitin: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resoluutio: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Alkuperäinen resoluutio: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Siirrä&#10;valintaa vetämällä.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Hyväksy</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Uudelleenyritys</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Oikea klikkaus</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Peruuta valinta (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Valitse alue tästä näytöstä napsauttamalla ja vetämällä.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Valitse alue napsauttamalla ja vetämällä</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Valitse tämä ikkuna klikkaamalla tästä</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Valitse tämä näyttö napsauttamalla tätä</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Peruuta painamalla Esc</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Pysäytä tallennus painamalla {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Tallenninikkuna minimoituu,&#10;palauta se tai keskeytä kuvaaminen painamalla {0}.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Hävitä tallennus</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Oletko varma, että haluat hylätä tallenteen?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Tämä toiminto hylkää tallennuksen ja poistaa kaikki kehykset.&#x0d;Tätä toimintoa ei voi peruuttaa.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Verkkokameratallennin</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Videolaitetta ei löydy :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Tarkista videolaitteet.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Skaala: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Muuta videon skaalaa.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Piirustustaulun tallennin</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Automaattinen tallennus</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Ottaa tallennuksen käyttöön piirtämisen aikana.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Pidä]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Värinvalitsin</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Valitse väri</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Punainen</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Vihreä</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Sininen</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Alkuperäinen väri</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Nykyinen väri</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Viimeisin väri</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Vedä tämä kohteeseen&#x0d;esimerkkivärit</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Klikkaa ja vedä valitaksesi&#x0d; värit näytöltä.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Poikkeusten tarkastelu</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Avaa sisäinen poikkeus</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Poikkeustyyppi</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Viesti</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Pino</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Lähde</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Jotain tapahtui väärin.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Lähetä raportti</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Esiasetus</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Kooderi</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Nimi</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Kuvaus</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Muu</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Tallenna automaattisesti, kun asetusta muutetaan.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Kaikki muutokset näihin esiasetettuihin asetuksiin (koodaus- ja vientiasetukset) on tallennettava manuaalisesti painamalla Tallenna-painiketta.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Kaikki tähän esiasetukseen tehdyt muutokset (koodaus- ja vientiasetukset) tallennetaan automaattisesti.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Jotkin oletusasetusten ominaisuudet ovat vain luettavissa.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Sinun on annettava tälle esiasetukselle nimi.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Samanniminen esiasetus on jo olemassa.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Autom. tallennukset</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Tähän esiasetukseen tehdyt muutokset tallennetaan automaattisesti.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Oletusarvo ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Enkooderin oletusasetukset.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Twitterille ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Noudattaa Twitterin latausrajoituksia (kokoa ja resoluutiota lukuun ottamatta).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">Tehokas videokoodaus.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Vanhempi ja tunnetumpi koodekki.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animaatio</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Kuva</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projekti</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Korkea laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Sopii paremmin tallenteisiin, joissa on enemmän värejä ja liukuvärejä.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Korkea laatu - Läpinäkyvä tausta</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Tukee animaation tallentamista läpinäkyvällä taustalla.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Korkea laatu - Grafiikka</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Parempi tallenteille, joissa on vähemmän värejä.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT - Tasapainotettu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Hyvä laatu valokuvan kaltaisille kuville käyttämällä Wun kvantisoijaa ilman ditheringiä.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT - Korkea laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Valokuvan kaltaisten kuvien korkea laatu käyttämällä Wun kvantisoijaa, jossa on korkeampi bittitaso ja Floyd-Steinbergin virhediffuusiodithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT - Huono laatu, nopeampi</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Kaikkien ruutujen kvantisointi samalla ennalta määritellyllä \"web-safe\"-paletilla ja Bayerin 8x8-järjestetty dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - Parempi laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Korkeampi kuvanlaatu, mutta suurempi tiedostokoko.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - Huonompi laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Huonompi kuvanlaatu, mutta pienempi tiedostokoko.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski - Korkeampi laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Korkeampi kuvanlaatu, mutta suurempi tiedostokoko.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski - Huonompi laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Huonompi kuvanlaatu, mutta pienempi tiedostokoko.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski - Huonompi laatu ja nopeampi koodaus</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Vielä heikompi kuvanlaatu, nopeampi koodaus, mutta pienempi tiedostokoko.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Järjestelmä - Huono laatu</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Huonolaatuinen mutta nopeampi koodaus.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - Korkealaatuinen</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Korkea kuvanlaatu ja pieni tiedostokoko, mutta hitaampi koodaus.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - Huonompilaatuinen</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Huonompi kuvanlaatu, pieni tiedostokoko ja nopeampi koodaus.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Korkea laatu</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Korkea kuvanlaatu ja pieni tiedostokoko.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Lisää kehyksiä</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Molempien puolien on oltava samankokoisia, ja tämän ikkunan avulla voit sijoittaa ja muuttaa kuvan ja kankaan kokoa. Valitse ja muuta kokoa napsauttamalla.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Kankaan koko:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Sovita kuva&#10;kankaalle</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Muuttaa kankaan kokoa niin, että molemmat kuvat mahtuvat sisälle (vasemmasta yläkulmasta).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Kehyskokojen välillä on eroja. Tämä on ratkaistava ennen kehysten asettamista.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Uusi kehys</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Nykyinen kehys</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Kuvan koko:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Kuvan sijainti:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Palauta kuvan koko&#x0d;ja sijainti</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Uudet kehykset lisätään nykyiseen kehysluetteloon kyseiseen kohtaan:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Ennen</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Jälkeen</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Kehys</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Tuodaan...</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Valitse kankaan täyttöväri</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Tuo kehyksiä videosta</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Tuoja:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Ladataan...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Skaala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Koko:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Korkeus:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Leveys:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Kuvataajuus:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Alku:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Loppu:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Valinta:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Kehykset:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Kesto:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Videota ei voitu ladata</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Esikatseluohjelma ei käynnistynyt. Kokeile toisella tuojalla tai tarkista, ettei video ole vioittunut.&#x0d;Jos käytät MediaPlayeriä, tarkista, että Windowsin ominaisuus \" Mediaominaisuudet / Windows Media Player\" on käytössä ja varmista, että sinulla on tarvittava videokoodekki.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Aikakatkaisu kehyksen esikatselun saamisessa.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Tuontikehystä ei ole valittu.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Kooderi</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Koodataan...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Aloitus</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Valmis</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Kopioitu leikepöydälle</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Kopiointi epäonnistui</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Suoritettu komento</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Näytä komentojen tulokset.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Komennon suorittaminen epäonnistui</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Lähetys epäonnistui</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + klikkaus avaa sivun kuvan poistamista varten (jos käytettävissä).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Kulunut aika minuutteina:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analyysi:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Koodaus:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Lähetä:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopioi:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Komennot:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Tiedosto poistettu tai siirretty</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Peruutettu</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Virhe</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Klikkaa tästä nähdäksesi tämän virheen yksityiskohdat.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Lähetys</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Komentojen suoritus</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Käsitellään {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Toisen läpiviennin valmistelu</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Käsitellään {0} - 2. vaihe</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Luodaan tiedosto</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Muuttumattomien pikselien analysointi</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Tallennetaan analyysitulos</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Avaa tiedosto</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Tutki kansiota</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Poista luettelosta</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Näytä yksityiskohdat</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Hylkää kaikki valmiit koodaukset</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Kopioi kuvana</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Kopioi tiedostonimi</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Kopioi kansion polku</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Kopioi linkki</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Komennon ulostulo</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Komentotulos</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Ilmoitukset</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Hylkää kaikki ilmoitukset</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editori</s:String>\n    <s:String x:Key=\"S.Editor.File\">Tiedosto</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Koti</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Toisto</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Muokkaa</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Kuva</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Siirtymät</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Tilastot</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Asetukset</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Ohje</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Lisätoiminnot</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Uusi päivitys saatavilla!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Lue siitä lisää klikkaamalla tästä.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Kokonaismäärä, valintamäärä, valintaindeksi</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Kehysten valmistelu</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Virheellinen lataus - Et voi tuoda useita tiedostoja kerralla. Yritä valita vain yksi tiedosto.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Virheellinen lataus - Et voi ladata useita projekteja kerralla. Yritä valita vain yksi projekti.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Avaa mediatiedosto (kuva tai video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Avaa mediatiedosto (kuva tai video) tai projektitiedosto.</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Kaikki tuetut tiedostot</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Kuva</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Png-animaatio</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif-animaatio</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp-animaatio</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi-video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp-kuva</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg-kuva</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png-kuva</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip-tiedosto, jossa on kuvia</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif-projekti</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif-projekti Zip-tiedostona</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd-tiedosto</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Aloita uusi tallennus valitsemalla \"Tiedosto > Uusi\".</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Tuo kuvia, videoita tai projekteja vetämällä ja pudottamalla.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Kiitos paljon, että käytät sovellustani!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Mitä pienempi ruutunopeus, värimäärä tai ruutujen välisten muutosten määrä on, sitä pienempi koko on.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Haluatko keskustella? Avaa \"Valinnat > Tietoja\" yhteydenottomenetelmiä varten</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Onko ongelmia? Ota minuun yhteyttä palautetyökalun kautta</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Haluatko kokeilla uutta tallenninta?&#x0d;Ota se käyttöön kohdassa \" Asetukset > Tallennin\".</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Tallennus</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Verkkokamera&#x0d;tallennus</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Piirustustaulun&#x0d;tallennus</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Tyhjä&#x0d;projekti</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Uusi</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Tallennus</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Verkkokamera&#x0d;tallennus</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Piirustustaulun&#x0d;tallennus</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Lisää</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Tallenna nimellä</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Lataa</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Viimeisimmät&#x0d;projektit</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Tallenna nimellä&#x0d;projekti</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Hylkää&#x0d;projekti</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Toimintopino</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Kumoa</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Tee uudelleen</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Nollaa</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Leikepöytä</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Näytä leikepöytä</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Liitä</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Leikkaa</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopioi</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoomaus</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Säädä&#x0d;sisältöä</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Sovita kuva</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Valitse</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Valitse&#x0d;kaikki</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Siirry</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Käänteinen</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Poista valinta</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Toisto</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Ensimmäinen</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Edellinen</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Toista</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Tauko</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Seuraava</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Viimeinen</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Toistoasetukset</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Silmukka toistettaessa.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Käytetään vain toiston aikana.&#x0d;Jos haluat muuttaa silmukka-asetuksia Gif- ja Apngs-tiedostojen vientiä varten, &#x0d;se on käytettävissä 'Tallenna nimellä' -paneelissa joissakin koodereissa.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Kehykset</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Poista</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Poista&#x0d;kaksoiskappaleet</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Vähennä&#x0d;kehysten määrää</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Tasainen&#x0d;silmukka</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Poista kaikki edelliset</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Poista kaikki seuraavat</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Uudelleenjärjestys</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Käänteinen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yo-yo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Siirrä&#x0d;vasemmalle</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Siirrä&#x0d;oikealle</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Viive (kesto)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Ohita</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Lisää tai&#x0d;vähennä</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Skaala</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Koko ja kierto</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Muuta kokoa</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Rajaa</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Käännä/kierrä</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Teksti</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Kuvateksti</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Vapaa teksti</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Otsikkokehys</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Näppäin&#x0d;painallukset</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Peitto</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Vapaa&#x0d;piirustus</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Muodot</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Hiiri&#x0d;tapahtumat</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Vesileima</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Reuna</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Varjo</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Edistyminen</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Hämärrys</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Tyylit</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Häivytys</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Diakuva</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Yleiset</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Kehysten määrä</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Kokonaiskesto</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Kehyksen koko</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Keskimääräinen kesto (viive)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Nykyinen aika</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Nykyinen aika (kumulatiivinen), joka perustuu näkyvissä olevaan kehykseen.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Kehyksen DPI ja mittakaava</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Valittu kehys</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Leikkaustoiminto</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Kaikkia kehyksiä ei voi leikata.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Tallenne tarvitsee vähintään yhden kuvan.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Poista kaikki</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Oletko varma, että haluat poistaa kaikki kehykset?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Tämä toiminto hylkää nykyisen avoimen projektin, eikä sitä voi peruuttaa. Haluatko jatkaa?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Hylkää projekti</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Oletko varma, että haluat hylätä projektin?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Tämä toiminto hävittää projektin ja poistaa kaikki kehykset.&#x0d;Tätä toimintoa ei voi peruuttaa.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Haluatko hylätä edellisen projektin?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Jos et tee niin, edellinen projekti on avattavissa 'Muistissa olevat projektit' -valikosta.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Poista kehyksiä</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Oletko varma, että haluat poistaa?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Tämä toiminto poistaa {0} kehystä.&#x0d;Voit peruuttaa tämän myöhemmin.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Poistutaan editorista</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Oletko varma, että haluat poistua?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Nykyisen projektin, jonka parissa työskentelit, voi avata uudelleen \"Viimeaikaiset projektit\" -kohdasta.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Nykyisen projektin, jonka parissa työskentelit, voit avata uudelleen \"Viimeaikaiset projektit\" -kohdasta, mutta älä unohda, että muutaman päivän kuluttua se poistetaan automaattisesti.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Virheellinen veto ja pudotus</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Et voi tuoda useita tiedostoja kerralla</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Kokeile valita vain yksi tiedosto.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Tiedostoa on mahdotonta ladata</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Tiedostoa ei voitu ladata, koska sen formaatti on virheellinen.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Et voi tuoda useita projekteja kerralla</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Kokeile valita vain yksi projekti.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Sovellettavaa tekstiä ei ole.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon kuvatekstiä sovelletaan.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon tekstiä sovelletaan.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Sinun on valittava vähintään yksi kehys, jolloin voit käyttää sen vieressä olevaa otsikkokehystä.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Sinun on valittava reunuksen paksuus, joka on suurempi kuin nolla ainakin yhdellä sivulla.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon rajaa sovelletaan.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Läpinäkymättömyyden on oltava suurempi kuin nolla, jotta se vaikuttaa kehykseen.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Kun varjon syvyys ja epätarkkuuden säde ovat nolla, sillä ei ole mitään merkitystä, koska se jää piiloon kehyksen taakse.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Sinun on valittava vähintään yksi pikseli, johon Cinemagraphia sovelletaan. Valitse pikselit piirtämällä niiden päälle.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Häivytyssiirtymä</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon haluat soveltaa häivytyssiirtymää.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Täysin läpinäkyvä väri ei vaikuta mitenkään tähän siirtymään.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Dia-siirtymä</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon diasiirtymää sovelletaan.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Ladataan kehyksiä</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Projektia ei voi ladata</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Kehyksiä ei ollut mahdollista ladata, koska ne ovat kaikki vioittuneet tai kuvat eivät ole siellä, missä niiden pitäisi olla.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Joitakin kehyksiä ei voitu ladata</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Kehyksiä ei voitu ladata, koska niitä ei löydetty tai ne ovat vioittuneet.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Sinun on valittava vähintään yksi kehys, johon päällekkäisyyttä sovelletaan.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg ei ole käytettävissä. Lisää se Path-ympäristömuuttujiin tai klikkaa tästä avataksesi Asetukset > Ekstrat asettaaksesi sijainnin.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski ei käytettävissä. Lisää se Path-ympäristömuuttujiin tai avaa Asetukset > Ekstrat avataksesi sijainnin klikkaamalla tästä.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Levyllä, jolle tämä sovellus tallentaa välimuistinsa, ei ole tarpeeksi tilaa ({0} % jäljellä). Klikkaa tästä avataksesi Asetukset > Väliaikaiset tiedostot vapauttaaksesi tilaa.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Yritit tuoda useita kuvia eri DPI-arvoilla, mikä ei ole sallittua. Jotkut niistä tuotiin, toiset on tuotava erikseen.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Yritit tuoda useita erikokoisia kuvia, mitä ei ole mahdollista. Jotkut niistä tuotiin, toiset on tuotava erikseen.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Kehysten hakeminen välimuistista</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Kehysten päivitys</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Tuonnin valmistelu</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Tuodaan kehyksiä</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Kaksoiskappaleiden analysointi</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Viiveen säätö</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Hylkää kaksoiskappaleet</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Hylätään kehyksiä</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Hylkää kansioita</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Kehysten koon muuttaminen</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Rajataan kehyksiä</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Sovelletaan päällekkäisyyttä kehyksiin</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Luodaan otsikkokehys</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Sovelletaan kääntöä/kiertoa kehyksiin</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Muutetaan viivettä</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Sovelletaan siirtymäefektiä</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Tallennuksen valmistelu</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Peruuta lataus ja hylkää projekti.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Etsitään täydellinen silmukka</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Hylätään silmukassa käyttämättömät kehykset</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Kehys:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Avaa kuva</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Tutki kansiota</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Siirry kehykseen</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Siirry kehykseen (0 - {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Tallenna nimellä...</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Poista valitut kehykset</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Uusi näytön tallennus</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Uusi Verkkokameratallennus</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Uusi Piirustustaulun tallennus</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Uusi projekti</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Uusi mediasta tai projektista</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Uusi tallenne luotu</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Uusi Verkkokameratallenne luotu</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Uusi Piirustustaulun tallennus luotu</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Uusi projekti luotu</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Kumoa suoritettu</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Nollaus suoritettu</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Uusinta suoritettu</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} ruutu(a) leikattu</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} ruutu(a) kopioitu</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} ruutu(a) liitetty</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoomaus asetettu {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Kaikki kehykset valittu</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Kehys #{0} valittu</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Käänteinen valinta</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Kaikki kehykset poistettiin valinnasta</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} ruutu(a) poistettu</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Kehysluettelo päinvastoin</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yo-yo efektiä sovellettu</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Ruutu(a) siirretty vasemmalle</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Ruutu(a) siirretty oikealle</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Kehysten kokoa muutettu</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Kehykset rajattu</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Kehykset käännetty/pyöritetty</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Käännä-toiminto koskee valittuja kehyksiä ja pyöritä-toiminto koskee kaikkia kehyksiä.</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Tämä toiminto koskee kaikkia kehyksiä</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Tämä toiminto koskee valittuja kehyksiä</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Tämä toiminto koskee kaikkia tai valittuja kehyksiä asetuksista riippuen.</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph-kuvaus koskee kaikkia ruutuja, jotka perustuvat ensimmäiseen kehykseen.</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Peittoa sovellettu</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Otsikkokehys luotu</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Otsikkokehys lisätään ennen valittua kehystä.</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Kesto (viive) muutettu</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Siirtymä lisätty</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Kuvataajuutta vähennetty</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Kaksoiskappaleet poistettu</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Piilota</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Käytä</s:String>\n    <s:String x:Key=\"S.Action.Open\">Avaa</s:String>\n    <s:String x:Key=\"S.Action.Save\">Tallenna</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Peruuta</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Recent Projects</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Etsitään viimeaikaisia projekteja...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Luontipäivä</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Kehysten määrä</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Projektia ei ole valittu. Valitse ladattava projekti luettelosta.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Tämä projekti on jo esillä tässä editorissa.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Tämä projekti on jo avattu toisessa editorissa. Projektia ei voi avata toista kertaa, jos se on jo avattu toisessa editorissa.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Leikepöytämerkinnät</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Leikepöytämerkintä:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} kuva</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} kuvat</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Tutki sisältöä</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Poista</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Liitä käytös</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Ennen valittua kehystä</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Valitun kehyksen jälkeen</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Ero</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Asetukset</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pikseliä (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Prosenttia (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Säilytä kuvasuhde.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Laatu:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant - Parempi laatu</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Lineaarinen - Huonompi laatu</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Lähin naapuri - Huonompi laatu ja nopeampi</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Skaalauslaatu.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Sinun on valittava eri arvo, johon Koon mukautus -toimintoa sovelletaan.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Pisteet</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Ylä:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Vasen:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Ala:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Oikea:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Rajausvalinnan on oltava pienempi kuin nykyinen kuvakoko.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Rajausvalinnan on oltava suurempi kuin 10x10 pikseliä.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Käännä vaakasuoraan</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Käännä pystysuoraan</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Kierrä vasemmalle 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Kierrä oikealle 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Vähennä ruutunopeutta</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Kerroin:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Poistomäärä:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Viiveen säätö:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Älä säädä</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Summa edellisen kehyksen kanssa</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Summaa tasaisesti jäljellä olevien kehysten kanssa</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Vähennä koko projektin kuvataajuutta.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Jos vaihtoehto ei ole valittuna, sinun on valittava useita peräkkäisiä kehyksiä,&#10;suurempi kuin poistokerroin.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Poistaa {0} kehyksen jokaisen {1} kehyksen jälkeen laskematta poistettuja kehyksiä.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Sinun on valittava kehykset, joihin haluat soveltaa kuvanopeuden vähennystä (tai valittava vaihtoehto, joka koskee koko projektia).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Valittujen kehysten luettelon on oltava peräkkäisiä. Et voi jättää joitakin kehyksiä valitsematta valittujen kehysten joukossa.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Kehysvalikoiman on oltava suurempi kuin poistokerroin, jotta ominaisuus pystyy poistamaan mitään.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Poista kaksoiskappaleet</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Samankaltaisuus (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Kehyksen poistaminen:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Poista ensimmäinen kehys</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Poista viimeinen kehys</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Viiveen säätö:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Älä säädä</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Käytä keskiarvoa</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Käytä summaa</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Tämä toiminto analysoi jokaisen kehyksen (pikseli kerrallaan) ja poistaa ne, jotka ovat vähintään {0} % samankaltaisia kuin sen välitön naapuri.&#x0d;Voit valita, haluatko säätää kehysten viiveen ( esittelyn keston).</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Luo tasainen silmukka</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ohita ensimmäinen:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Vertaa alkaen:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Loppu</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Alku</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Yritetään löytää kehys, joka on vähintään {0} % samanlainen kuin aloituskehys, ja poistetaan kaikki myöhemmät kehykset.&#x0d;Voit valita, haluatko jättää huomiotta joitakin alkukehyksiä ja aloittaa vertailun alusta (kynnysarvon jälkeen) tai lopusta.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Ohitettavien kehysten määrän on oltava pienempi kuin kehysten kokonaismäärä.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Tasaisen silmukan luominen ei ollut mahdollista valituilla asetuksilla.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Sinulla on jo tasainen silmukka, joka perustuu valittuihin asetuksiin.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Teksti</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Fontti</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Perhe:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Tyyli:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Paino:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Koko:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Väri:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Taustaväri:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Hahmotelma</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Paksuus:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Asettelu</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Pystysuora:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Vaakasuora:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Kohdistus:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Koristelu:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Painallukset</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Näppäimet</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Erotin:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Muokkaa näppäinpainalluksia</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Jätä Ctrl-, Alt-, Shift- ja Windows-näppäimet huomiotta, jos niitä ei käytetä muokkaimina.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Jättää huomiotta yksittäiset näppäinpainallukset, kuten \"Control\", mutta ei jätä huomiotta \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ohita ohjelmiston simuloimat näppäinpainallukset.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Tallenna vain käyttäjän syöttämät näppäinpainallukset.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Pidennä näppäinlyöntien näyttöä.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Aloita näppäinpainallusten näyttö aikaisemmin.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">(ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Tallenteessasi ei ole näppäinpainalluksia.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Näppäimistöeditori</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Kehyksen numero</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Havaitut näppäinpainallukset</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Poista näppäinpainallus</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Lisää näppäinpainallus:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Pienet kirjaimet.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Sen avulla voit lisätä pieniä yksittäisiä kirjaimia.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Tila</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Kynä</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Pyyhekumi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Valitse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Leikkaava pyyhin</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Leveys:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Korkeus:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Vinkki:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Suorakulmio</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellipsi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Muu:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Korostin.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Sovita käyrälle.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Valitsemiesi kehysten kohdalla ei ole piirustuksia.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon voit soveltaa vapaata piirtämistä.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Lisää</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Kuviot</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Säde:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Viivat:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Säätelee viivojen kokoa ja välysten kokoa.&#10;Voit asettaa useita kokoja luodaksesi monimutkaisen viivatyylin.&#10;Oletusarvo on \"1 0\" tai tyhjä, mikä tarkoittaa viivaa, jossa ei ole välyksiä.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Nollaa kierto</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Poista</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Täyttö</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Hiiritapahtumat</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Hiiren korostusväri:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Vasen painike:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Keskipainike:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Oikea painike:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Kuva</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Tiedosto:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Ei valittua</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Peittävyys:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Valitse kuva</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Sinun on valittava kuva, jota haluat soveltaa valittuun kehykseen (valittuihin kehyksiin).</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Sinun on valittava vähintään yksi kehys, johon vesileima lisätään.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Ulkonäkö</s:String>\n    <s:String x:Key=\"S.Border.Info\">Käytä negatiivisia arvoja, jos haluat reunuksen laajentavan kuvaa. Tällöin rajaus kohdistuu kaikkiin kehyksiin.&#10;Jos negatiivista arvoa ei käytetä, rajaus kohdistuu vain valittuihin kehyksiin.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Varjon väri:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Taustan väri:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Suunta:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Sumeussäde:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Syvyys:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pikselöi</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Sumenna</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Tummenna</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Vaalenna</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Hämärtämisasetukset</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Pikselikoko:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Sumeustaso:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Tummuusaste:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Kirkastustaso:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Laske kunkin pikselilohkon keskimääräinen väri.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Sovella häivytystä käänteiseen valintaan.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Tasaisuus</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Valitse valintatyökalulla se osa kehyksestä, joka halutaan peittää.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Valitse valintatyökalulla se osa kehyksestä, jota ei saa peittää.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Et valinnut mitään. Valitse valintatyökalulla suorakulmio, joka on tarkoitus peittää.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tyyppi</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Palkki</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Teksti</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Tarkkuus:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuuttia</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekuntia</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisekuntia</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Prosenttia</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Kehyksen numero</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Todellinen päivä/aika</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Mukautettu</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Näytä kokonaismäärä.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formaatti:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formaatti</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = millisekuntia</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = sekuntia</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minuuttia</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = prosenttia</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = kehyksen numero</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Yhteensä:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Esimerkkejä:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Voit käyttää .Net Frameworkin päivämäärän ja kellonajan muotoa.&#x0d;Määrittely on saatavilla näistä kahdesta alla olevasta linkistä.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standardiformaatit</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Mukautetut formaatit</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Laske alkaen:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Aloittaa kehysnumeron laskemisen tästä valitusta numerosta.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Suuntaus:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Viiveen päivitys</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Viivetila:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Ohitus (ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Lisää tai vähennä (ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Skaala (%)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Uusi arvo</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Vähintään 10 ms kehystä kohti.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Vähennä/lisää arvoa</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Skaalan arvo</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Tämä uusi arvo korvaa kaikkien valittujen kehysten keston (viive). Arvo voi olla 10 ms - 25500 ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Tämä arvo vähentää/lisää kunkin valitun kehyksen kestoa (viive).&#x0d;Voit vähentää/lisätä valitsemalla arvon välillä -10000ms ja 10000ms, mutta kunkin kehyksen lopullinen kesto on rajoitettu välille 10ms ja 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Voit skaalata kunkin valitun kehyksen keston (viiveen) prosenttiarvolla.&#x0d;Voit skaalata kunkin kehyksen keston valitsemalla arvon 1 %:n ja 1000 %:n väliltä, mutta kunkin kehyksen lopullinen kesto on rajoitettu 10 ms:n ja 25500 ms:n välille.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Valitse kynällä pikselit, joiden ei pitäisi pysyä staattisina (joiden pitäisi muuttua kehysten välillä), maalaamalla niiden päälle.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Siirtymän pituus</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Siirtymäviive</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Häivytä...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Seuraava kehys</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Väri</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Väri</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Siirtymää sovelletaan valitun kehyksen ja seuraavan kehyksen välillä.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Tiedostotyyppi ja esiasetus</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Tulostustiedoston muoto.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Vientiasetus, joka sisältää kaikki tällä hetkellä näkyvissä olevat asetukset.&#10;Hallitse vientiasetuksia alla olevien painikkeiden avulla.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Animoitu kuva</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Kehykset</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Muu</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animoitu Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web-kuva</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime-tiedostomuoto</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Projekti</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif projekti</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">Psd</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop tiedosto</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Esiasetukset:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Oletus</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Lisää uusi esiasetus.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Tallenna nykyiset asetukset tähän vientiasetukseen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Muokkaa viennin esiasetusten perusasetuksia.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Poista nykyinen valittu esiasetus.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Palauta tämän esiasetuksen asetukset oletusasetuksiin.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Poistetaan esiasetus</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Oletko varma, että haluat poistaa esiasetuksen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Tätä toimintoa ei voi peruuttaa.&#10;&#10;Haluatko poistaa valitun esiasetuksen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Palautetaan esiasetus </s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Oletko varma, että haluat palauttaa esiasetuksen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Tätä toimintoa ei voi peruuttaa.&#10;&#10;Haluatko palauttaa valitun esiasetuksen oletusasetukset?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kooderi</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Kooderi ja kvantisoija</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Kooderi, joka vastaa tulostiedoston luomisesta.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Sisäänrakennettu kooderi.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Järjestelmä</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Järjestelmän tarjoama kooderi.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Ulkoinen kooderi, jonka on tehnyt FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Ulkoinen kooderi, jonka on tehnyt Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Kooderin asetukset</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Ota laajennettu tila käyttöön.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Syötä parametrit manuaalisesti kooderin ohjausta varten.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parametrit:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Luettelo parametreista, jotka välitetään FFmpegille.&#10;&#10;Erikoisparametrit:&#10;{I} on tulopolku (kehykset).&#10;{O} on tulopolku (viety tiedosto).&#10;{W} on kehyksen leveys.&#10;{H} on kehyksen korkeus.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Jos haluat koodata 2- vaiheessa, lisää yksinkertaisesti '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Esikatselu</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Esikatsele FFmpegille välitettävää parametriluetteloa.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Koodekkien dokumentit</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Formaatin dokumentit</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Suodattimen dokumentit</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif-asetukset</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Värien vähentämisalgoritmi (kvantisointi).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neuroverkko</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Erittäin todenmukainen kvantisointi. Hitaampi, mutta hyvä suuremmalle värimäärälle.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Hyvä animaatioille, joissa on vähemmän värejä. Nopeampi, mutta voi tuottaa värikaistoja.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Mediaanileikkaus</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Huonompi kuin Octree ja hitaampi.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Harmaasävy</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Käyttää kiinteää harmaasävypalettia, joten se on paljon nopeampi.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Eniten käytetyt värit</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Ottaa yksinkertaisesti kehyksissä eniten käytetyt värit.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Näytteenotto:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Näytteenottokerroin:&#10;Arvo 1 tuottaa paremman näköisen gif-kuvan, mutta sen renderöinti on hitaampaa.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Laatu:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Värit:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Värien enimmäismäärä (jokaisessa kehyksessä).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Käytä yleistä väritaulukkoa.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Saattaa heikentää gif-tiedoston laatua ja/tai kokoa.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Paras</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Nopein</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Käytä vielä nopeampaa koodausprosessia.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Saattaa heikentää gif-kuvan laatua.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Silmukka:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Silmukoitu gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Toista ikuisesti.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Toista laskenta.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Ota läpinäkyvyys käyttöön.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Ottaa käyttöön täyden läpinäkyvyystilan, jolloin gif-tiedoston tausta on täysin läpinäkyvä.&#10; Kroma-avaimen korvausprosessi jätetään huomiotta, jos tämä vaihtoehto on käytössä.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Valitse, mikä väri näytetään läpinäkyvänä.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Jos väri on valittu, se muunnetaan läpinäkyväksi ja se näkyy läpinäkyvänä luodussa gif-tiedostossa.&#10;Jos väriä ei ole valittu, kaikki läpinäkyvät värit (Alpha = 0 %) näkyvät läpinäkyvinä normaalisti.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Tunnista muuttumattomat pikselit.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Analysoimalla ja havaitsemalla kehysten välillä muuttumattomat pikselit &#10;on mahdollista tallentaa vain tarvittavat osat gif-tiedostoon.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Korvaa nämä pikselit kroma-avaimella.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Toistuvat tai muuttuneet pikselit korvataan tällä kroma-avaimella,&#10;jolloin on mahdollista käyttää vähemmän värejä kehystä kohti.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Kroma-avain:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Ditheröinti:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayerin skaala:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Kvantisoija</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Taustan väri:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pikselit, joilla on alfa (läpinäkyvyys) ja joita valittu kvantisoija pitää läpinäkymättöminä, sekoitetaan tämän värin kanssa ennen kvantisoidun värin saamista.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alfa-kynnys:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Määrittää syötetyn alfa-arvon, jolla kvantisoitu väri on läpinäkyvä.&#x0d;&#x0a;Jos 0, tulos ei ole koskaan läpinäkyvä.&#x0d;&#x0a;Jos 255, vain täysin läpinäkyvät pikselit katsotaan läpinäkyviksi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Valkoinen kynnys:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Määrittää pienimmän tulovärin kirkkauden, jotta tuloksen väri katsotaan valkoiseksi.&#x0d;&#x0a;Vaikuttaa tuloksen kirkkauteen. Virhediffuusiodithering voi kuitenkin kompensoida tämän parametrin arvon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Suorakartoitus</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Kun tämä on valittuna, kvantisoitu väri määritetään suoralla kartoituksella sen sijaan, että etsittäisiin lähin palettimerkintä.&#x0d;&#x0a;Se nopeuttaa kvantisointia, mutta saattaa johtaa korkeamman kontrastin tulokseen. Virhediffuusion dithering voi kuitenkin kompensoida tämän parametrin arvon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Paletin koko:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Määrittää paletin enimmäiskoon kehystä kohti.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Mukautettu bittitaso.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Kun valittu, bittitaso voidaan määrittää manuaalisesti.&#x0d;&#x0a;?? Varoitus: Korkein bittitaso saattaa vaatia PALJON muistia!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Suurempi arvo tarkoittaa suurempaa tarkkuutta, suurempaa kohdeväriavaruutta, hitaampaa käsittelyä ja suurempaa muistinkäyttöä.&#x0d;&#x0a;Jos esimerkiksi arvo on 1, tuloksessa voi olla enintään 8 väriä, tai jos arvo on 2, enintään 64 väriä. &#x0d;&#x0a;Octree- ja Wu-kvantisaattoreiden osalta se vaikuttaa myös monokromaattisten sävyjen enimmäismäärään.&#x0d;&#x0a;Jos esimerkiksi 5 (joka on Wu-kvantisaattorin oletusarvo), vain 32 monokromaattista sävyä voidaan erottaa.&#x0d;&#x0a;?? Varoitus: Wu-kvantisoija kuluttaa suurimmalla arvolla vähintään 650 Mt.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Musta/valkoinen</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Korjattu 1 bpp:n paletti mustan ja valkoisen värin kanssa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Harmaasävy 4 väriä</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Korjattu 2 bpp-paletti, jossa 4 harmaasävymerkintää.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Harmaasävy 16 väriä</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Korjattu 4 bpp:n paletti, jossa on 16 harmaasävymerkintää.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Harmaasävy 256 väriä</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Korjattu 8 bpp:n paletti, jossa 256 harmaasävymerkintää.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Järjestelmän oletus 4 bpp-paletti</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Korjattu 4 bpp-paletti, jossa käytetään 16 sRGB-väriä.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Järjestelmän  8 bpp:n oletuspaletti</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Korjattu 8 bpp:n paletti, mukaan lukien \"web-safe\"-värit ja läpinäkyvyys.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332-paletti</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Korjattu 8 bpp:n paletti, joka käyttää RGB 332-väriavaruutta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree-kvantisoija</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Paletin optimointi jokaiselle kehykselle Octree-algoritmilla.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut-kvantisoija</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Paletin optimointi kutakin kehystä varten Median Cut -algoritmilla.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu-kvantisoija</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Paletin optimointi jokaiselle kehykselle Xiaolin Wun algoritmilla.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Ditherer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Vahvuus:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">Värähtelijän vahvuus tai 0, jos haluat kalibroida vahvuuden automaattisesti.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Siemen:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Kokonaislukuinen siemen, jota käytetään tietyn satunnaisen värähtelykuvion tuottamiseen.&#x0d;&#x0a;Jätä tyhjäksi, jos haluat käyttää satunnaista siementä jokaiselle kehykselle.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Ei mitään</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Kehykset kvantisoidaan ilman ditheringiä.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentiinikäsittely</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Kun tämä on valittuna, virheen etenemissuunta muuttuu riviltä riville.&#x0d;&#x0a;Tämä auttaa vähentämään virhediffuusioditheringin aaltoiluvaikutusta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">2x2 Bayerin matriisikuvio.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">3x3 Bayerin matriisikuvio.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">4x4 Bayerin matriisikuvio.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">8x8 Bayerin matriisikuvio.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Dotted Halftone (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">8x8-matriisi, jossa pistemäinen puolisävykuvio.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blue Noise (Ordered)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">64x64-matriisi, jossa sininen kohinakuvio.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson 4x3-matriisi, jossa on 6 tehollista arvoa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes 5x2-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">Floydin ja Steinbergin alkuperäinen 3x2-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Jarvisin, Judicen ja Ninken laatima 5x3-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierran 5x3-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierran 5x2-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierran 3x2-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Stevensonin ja Arcen 7x4-kuusikulmainen matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Virhehajonta)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stuckin 5x3-matriisi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Satunnainen kohina</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Satunnainen valkoinen kohina.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Lomitettu gradienttikohina (Interleaved Gradient Noise)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Kaavalla tuotettu ei-satunnainen gradienttikohina.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Esikatselu</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Näytä nykyinen kehys.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Kun valittuna, esikatselu näyttää nykyisen kehyksen tavallisen kuvaesimerkin sijasta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Automaattinen esikatselu on poistettu käytöstä, koska nykyiset asetukset vaativat paljon muistia. Napsauta päivittääksesi esikatselu.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Esikatselun luominen epäonnistui: {0}&#x0d;&#x0a;Klikkaa yrittääksesi luoda se uudelleen.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Animaatioasetukset</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Loputon silmukka.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Kun tämä valitaan, animaatiota toistetaan loputtomiin.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Edestakaisin.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Kun tämä on valittuna, animaatio toistetaan edestakaisin.&#x0d;&#x0a;Tämä saavutetaan monistamalla kehykset, jolloin tiedostokoko kasvaa ja koodausaika pitenee.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Toistojen määrä:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Määrittää, kuinka monta kertaa animaatio toistetaan.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Salli delta-kehykset.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Kun valittuna, muuttumattomat pikselit yritetään havaita koodauksen aikana.&#x0d;&#x0a;Kun käytetään optimoitua kvantisoijaa, tämä asetus mahdollistaa sen, että kehyksessä voi olla enemmän kuin 256 väriä.&#x0d;&#x0a;Tämä asetus jätetään huomioimatta, jos kvantisoija ei käytä läpinäkyvyyttä ja jos Allow Clipped Frames (Salli leikattujen kehysten käyttö) on valittuna.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta-toleranssi:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Määrittää enimmäistoleranssin, kun havaitaan muuttuneita pikseleitä.&#x0d;&#x0a;Jos 0, mitään eroa ei sallita.&#x0d;&#x0a;Jos 255, voi olla kehyksiä (tai jopa kaikki), jotka lisätään ilman sisältöä.&#x0d;&#x0a;Kohtuullinen vaihteluväli on välillä 0-16 optimoidulle kvantisoijalle. Niitä, joissa on kiinteät värit, voidaan käyttää hieman suuremmilla arvoilla ditheringin avulla.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Jos Delta-toleranssi on liian suuri, tulos voi olla huonolaatuinen. Napsauta nollataksesi delta-toleranssin.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Salli leikatut kehykset.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Kun valittuna, kooderin sallitaan lisätä todellista resoluutiota pienempiä kehyksiä.&#x0d;&#x0a;Jos valintaruutu ei ole valittuna, sallitaan vain mahdollisten läpinäkyvien rajojen leikkaaminen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Salli delta-kehykset jätetään huomiotta, koska nykyinen kokoonpano ei käytä alfaa ja Salli leikatut kehykset on poistettu. Ota leikatut kehykset käyttöön napsauttamalla tätä.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Salli leikatut kehykset -valinnalla ei ole vaikutusta, koska nykyinen kokoonpano ei käytä alfaa ja Salli delta-kehykset -valinta on poistettu. Ota delta-kehykset käyttöön napsauttamalla tätä.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng-vaihtoehdot</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Ennuste:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Ei mitään</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Alaosio</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Ylös</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Keskimäärin</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Sekoitus</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Silmukoitu apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Tunnista muuttumattomat pikselit.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Maalaa kaikki muuttumattomat pikselit läpinäkyvällä värillä.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Esiasetus:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Ei mitään</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Oletus</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Kuva</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Valokuva</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Piirustus</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Kuvake</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Teksti</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Käytä häviötöntä tilaa.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Tila:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normaali</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Edistynyt</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Enkooderin parametrien konfigurointitapa:&#10;Normaali: Käytä tavallisia käyttöliittymän ohjaimia.&#10;Edistynyt: Käytä tekstiruutua parametrien kirjoittamiseen.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Koodekki:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">Videokooderi, joka vastaa&#10;raakapikselien muuntamisesta tulostiedostoksi.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Esiasetus:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Ei mitään</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Erittäin hidas</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Hitaampi</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Hidas</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Keskisuuri</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Nopea</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Nopeampi</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Erittäin nopea</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Supernopea</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Äärimmäisen nopea</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Laatu</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Tasapainotettu</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Nopeus</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Oletus</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Häviötön</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Häviötön (korkea suorituskyky)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Korkea suorituskyky</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Korkea laatu</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray-levy</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Pieni viive</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Pieni viive (korkea suorituskyky)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Pieni viive (korkea laatu)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Koodausnopeus suhteessa pakkaussuhteeseen,&#10;hitaammat esiasetukset voivat antaa paremman pakkauksen&#10;(laatu per tiedostokoko).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Laitteisto Acc.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Pois</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">On</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automaattinen valinta</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Ohjaa erityisen laitteiston käyttöä (videografiikka).&#10;Pois: Ei käytä erityistä laitteistoa.&#10;Käytössä: Käyttää erityistä laitteistoa ja antaa sinun valita erityiset kooderit.&#10;Auto: Käyttää erityistä laitteistoa ja valitsee automaattisesti oikean kooderin, kun se on mahdollista.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pikselimuoto:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automaattinen</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Videon synkronointimenetelmä.&#10;Auto: Valitsee 1:n ja 2:n välillä muxerin (formaatin) ominaisuuksien mukaan.&#10; Läpikulku (Passthrough): Jokainen ruutu siirretään aikaleimojensa kanssa kooderiin.&#10; Vakio: Kuvat monistetaan ja pudotetaan, jotta saavutetaan täsmälleen pyydetty vakiokuvanopeus.&#10;Muuttuva: Kuvat ohjataan läpi aikaleimojensa kanssa tai ne jätetään pois, jotta kahdella kehyksellä ei ole samaa aikaleimaa.&#10;Pudotus: Kuten läpikulku, mutta kaikki aikaleimat tuhotaan, jolloin enkooderi luo uudet aikaleimat kehysnopeuden perusteella.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Läpikulku</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Vakio ruudunpäivitysnopeus</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Vaihteleva kuvanopeus</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Pudota</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Kuvataajuus:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Filmi</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Mukautettu</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Vaihe:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Vakionopeuskerroin.&#10;Laadun ja nopeuden valvonta-asetus.&#10;Jätä tyhjäksi, jos et halua asettaa tätä ominaisuutta.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Laatutaso:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Pienemmät arvot tarkoittavat parempaa laatua.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bittinopeus:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Tavoitevideon bittinopeus.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bittinopeustila:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Jatkuva</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Muuttuva</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Minimitaso:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimi bittinopeuden toleranssi.&#10;Hyödyllisin, kun käytetään CBR-tilaa.&#10;Jätä se tyhjäksi tai aseta nollaksi &#10;jos et halua asettaa tätä ominaisuutta.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Maksimi nopeus:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Suurin sallittu bittinopeuden toleranssi.&#10;Edellyttää myös puskurikoon asettamista.&#10;Jätä se tyhjäksi tai aseta nollaksi &#10;jos et halua asettaa tätä ominaisuutta.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Puskurin koko:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Nopeudensäätöpuskurin koko. &#10; Jätä se tyhjäksi tai aseta nollaan &#10; jos et halua määrittää tätä ominaisuutta.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Pakkaa kuvat.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Vie kuvat zip-kansion sisällä.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Pakkaa kuva.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Pakkaa kuvatiedot RLE-algoritmilla.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Tallenna aikajanan tiedot.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Vie kehysten ajoitukset pelkkien kehysten sijasta.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Vientiasetukset</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Vienti osittain.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Tallenna tiedosto haluamaasi kansioon.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Korvataanko?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Varoitus</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Varoittaa vain, että on olemassa toinen tiedosto, jolla on sama nimi.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Kehote</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Kysyy, haluaako käyttäjä korvata tiedoston.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Salli</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Yksinkertaisesti korvaa tiedoston.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Tallenna myös projektina (sama kansio, sama tiedostonimi).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Lähetä tiedosto.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Kopioi leikepöydälle.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Tiedosto</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Kopioi tulostiedoston leikepöydälle.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Kansion polku</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Kopioi tulostiedoston kansiopolun leikepöydälle.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Tiedostopolku</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Kopioi tulostiedostopolun leikepöydälle.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Linkki</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Kopioi latauspalvelun luoman linkin leikepöydälle.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Suorita koodauksen jälkeiset komennot.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Kirjoita koodauksen jälkeen suoritettavat komennot.&#x0d;Jos haluat suorittaa useita komentoja, kirjoita kukin komento erilliselle riville.&#x0d;Makrot:&#x0d;{p} = Tulostustiedoston polku.&#x0d;{f} = Tulostuskansion polku.&#x0d;{u} = Lähetetyn tiedoston URL-osoite.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Osittainen vienti</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Tila:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Valitse osittainen vientimenetelmä.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Lauseke</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Vie animaation osia yksinkertaisen lausekkeen perusteella.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Kehysalue</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Vie vain osan animaatiosta kehysalueella.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Aikaväli</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Vie vain osan animaatiosta aikarajan sisällä.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Valinta</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Vie vain aikajanalla valitut kehykset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Kehystä ei ole valittu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 kehys valittu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} kehystä valittu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Alkaen:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Mihin:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Lauseke:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Kirjoita kehysnumerot pilkulla erotettuna tai&#10;kehyssekvenssit miinusmerkillä erotettuna:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Tiedosto</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Kohdekansio.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Valitse tulostekansio</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Valitse sijainti.&#x0d;Paina Shift-näppäintä ja &#x0d;valitse myös tiedostonimi.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Tiedostomuoto</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Tiedoston nimi. Aseta päivämäärä/aika-muoto väliin.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animaatio</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Lisää tiedostonumeroa</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Vähennä tiedostonumeroa</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Samanniminen tiedosto on jo olemassa.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Tallenna leikepöydälle.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Sinun on valittava, mihin tiedosto tallennetaan (kansioon, leikepöydälle tai ladataan jonnekin muualle).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Et valinnut tiedostopäätettä.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Kun valitset laajennetun tilan, sinun on kirjoitettava parametrit parametrit-kenttään.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Parametrit-kentästä puuttuvat erikoisparametrit {I} ( tulo) ja/tai {O} ( lähtö).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Jos haluat suorittaa jälkikoodauskomennon, sinun on kirjoitettava jotain komentojen tekstikenttään.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Sinun on valittava vähintään yksi kehys, kun haluat viedä vain valitut kehykset.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">Projektin osittaista vientiä koskeva lauseke on virheellinen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Lähetyspalvelua ei ole valittu. Sinun on valittava kohde.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Et voi lähettää valittuun palveluun, koska sitä ei ole valtuutettu. Siirry kohtaan Asetukset > Lähetyspalvelut valtuuttamaan tämä sovellus.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Et voi valita linkin kopiointivaihtoehtoa, koska et ole asettanut tiedoston lataamista.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Sinun on valittava tulostuskansio.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Tulostuskansiota ei ole olemassa.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Tulostuskansiossa on yksi tai useampi virheellinen merkki. Valitse kelvollinen kansio.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Sinun on valittava tiedostonimi.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Tulostustiedoston nimi sisältää yhden tai useamman virheellisen merkin. Valitse kelvollinen tiedostonimi.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Tiedostonimi on jo käytössä. Aseta korvaus tai valitse toinen tiedostonimi tai kansio.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Olemassa on jo projekti, jolla on sama tiedostonimi. Aseta korvaus tai valitse toinen tiedostonimi tai kansio.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Operaatio peruttiin.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Lähetys</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Valitse lähetyksen esiasetus, jossa on tiedot lähetyksessä käytettävästä palvelusta.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Tämä lähetyspalvelu asettaa rajoituksia.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Lisää uusi lähetyksen esiasetus.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Muokkaa lähetyksen esiasetuksia.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Näytä tämän esiasetuksen lähetyshistoria.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Poista tällä hetkellä valittu lähetyksen esiasetus.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Valitse lähetyksen esiasetus</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Valitse yksi tästä luettelosta.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Tälle formaatille ei ole saatavilla lähetyksen esiasetusta</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Lisää esiasetus käyttämällä alla olevaa painiketta.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Poistetaan lähetyksen esiasetus</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Oletko varma, että haluat poistaa lähetysasetukset?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Tätä toimintoa ei voi peruuttaa.&#10;&#10;Haluatko poistaa valitun lähetysasetuksen?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Vie kehyksiä</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Oletko varma, että haluat viedä kehykset?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Tämä toiminto vie {0} kehystä suoraan valittuun kansioon.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Korvaa</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Haluatko korvata tiedoston?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Kyseisessä kansiossa on jo olemassa tiedosto nimeltä '{0}'.\\r\\nTahdotko korvata sen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Haluatko korvata tiedostot?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Yksi tai useampi samanniminen tiedosto on jo olemassa kyseisessä kansiossa.\\r\\nTahdotko korvata ne?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Komennon esikatselu</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Komento</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Tulopolku</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Lähtöpolku</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Palaute</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Lähetä</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Esikatselu</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Lähetä palautetta</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Otsikko</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Viesti</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Jos havaitset bugin, älä unohda selittää minulle, miten se tapahtui, askel askeleelta.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Palautteen tyyppi</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Ehdotus</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Ongelma/vika</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Sähköpostiosoitteesi</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Sinun on kirjoitettava palautteen otsikko.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Sinun on kirjoitettava viesti palautteeseen.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Sinun on kirjoitettava sähköpostiosoitteesi, jolloin saat vastauksen kehittäjältä.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Lähetetään taustalla. Tämä ikkuna sulkeutuu pian.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Liitteet (valinnainen, enintään 20 Mt)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Lisää liitteitä</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Poista kaikki liitteet</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Ymmärrän englantia</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">ja portugalia (brasilialaista ja eurooppalaista).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Tämä on se, mitä lähetät, sekä kaikki liitteet.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Vianmääritys</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Puuttuuko jokin ikkuna?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Jos jokin ikkunoista puuttuu (näytön ulkopuolella), &#x0d;käytä alla olevia vaihtoehtoja sen nykyisen ja käynnistysaseman palauttamiseksi.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Kukin ikkuna sijaitsee tällä hetkellä seuraavasti:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Seuraavalla kerralla kukin ikkuna avautuu seuraavasti:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Siirrä kaikki ikkunat päänäyttöön.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Palauta kaikkien ikkunoiden käynnistysasento.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normaali</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Kursivoitu</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Viisto</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Musta</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Lihavoitu</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Puolilihavoitu</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Erittäin musta</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Erittäin lihavoitu</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Erittäin vaalea</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Voimakas</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Kevyt</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Keskisuuri</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normaali</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Tavallinen</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Puolilihavoitu</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Ohut</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Erittäin musta</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Erittäin lihavoitu</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Erittäin kevyt</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Ylä</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Keskus</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Ala</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Venytä</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Vasen</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Keskus</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Oikea</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Vaakasuora</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Pystysuora</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Vasen</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Oikea</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Keskus</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Tasaus</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Ei mitään</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Alleviivaus</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Yliviivattu</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Yli viivan</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Perustaso</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.fr.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Retour</s:String>\n    <s:String x:Key=\"S.Cancel\">Annuler</s:String>\n    <s:String x:Key=\"S.Yes\">Oui</s:String>\n    <s:String x:Key=\"S.No\">Non</s:String>\n    <s:String x:Key=\"S.Add\">Ajouter</s:String>\n    <s:String x:Key=\"S.Edit\">Éditer</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Titre</s:String>\n    <s:String x:Key=\"S.Description\">Description</s:String>\n    <s:String x:Key=\"S.SelectColor\">Cliquez ici pour choisir la couleur</s:String>\n    <s:String x:Key=\"S.Documentation\">Cliquez pour accéder à la documentation.</s:String>\n    <s:String x:Key=\"S.Suppress\">Supprimer</s:String>\n    <s:String x:Key=\"S.Preview\">Aperçu</s:String>\n    <s:String x:Key=\"S.Size\">Taille</s:String>\n    <s:String x:Key=\"S.Background\">Fond</s:String>\n    <s:String x:Key=\"S.Color\">Couleur:</s:String>\n    <s:String x:Key=\"S.Delay\">Délai</s:String>\n    <s:String x:Key=\"S.DelayMs\">Délai (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Valeur - + (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Valeur d'échelle:</s:String>\n    <s:String x:Key=\"S.Margin\">Marge:</s:String>\n    <s:String x:Key=\"S.Padding\">Remplissage:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Hauteur min:</s:String>\n    <s:String x:Key=\"S.AndOr\">et/ou</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Oh non, l'application a planté :(</s:String>\n    <s:String x:Key=\"S.Required\">Champ requis.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Dépendance manquante</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 n'est pas présent</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Afin d'utiliser correctement cette application, vous devez télécharger la version correcte du .Net Framework.&#10;Voulez-vous ouvrir la page web pour la télécharger?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Une seule instance autorisée</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">L'application est déjà lancée</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif est déjà en cours d'exécution, mais apparemment il n'y a pas de fenêtre ouverte. Vérifiez dans la barre d'état système, une icône ScreenToGif doit s'y trouver.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Sauvegarder les paramètres</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Souhaitez-vous réessayer de l'enregistrer ?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Il semble que ScreenToGif ne dispose pas de suffisamment de privilèges pour enregistrer les paramètres sur le disque.&#10;&#10;Voulez-vous réessayer, mais cette fois en utilisant les privilèges administratifs ?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Quitter de ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Êtes-vous sûr de vouloir quitter?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Toutes les fenêtres seront fermées et l'icône de la barre des tâches sera supprimée.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Changer d'adaptateur graphique</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Basculez vers la bonne carte graphique pour capturer l'écran sélectionné</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">En raison d'une limitation dans DirectX, ScreenToGif doit être exécuté sur la même carte graphique que l'écran capturé.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Changez l'adaptateur graphique défini pour ScreenToGif en ouvrant Paramètres Windows > Système > Affichage > Paramètres graphiques, ou en cliquant sur le lien ci-dessous.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Basculez la carte graphique pour ScreenToGif en ouvrant les paramètres graphiques de votre carte graphique.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Ouvrir les paramètres de Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Entrée</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Espace</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Clic-droit</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nouvelle capture d'écran</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nouvelle capture de Webcam</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nouvelle planche à dessin</s:String>\n    <s:String x:Key=\"S.Exit\">Quitter</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nouvel enregistrement d'écran</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nouvel enregistrement webcam</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nouvel enregistrement planche</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nouvelle animation</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Insérer un enregistrement d'écran</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Insérer enregistrement de la webcam</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Insérer l'enregistrement planche à dessin</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Insérer depuis médias (images et vidéos)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Sauvegarder sous…</s:String>\n    <s:String x:Key=\"S.Command.Load\">Charger des fichiers (images, vidéos et projets)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Charger les projets récents</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Jeter projet en cours</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Annuler retard des images</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Augmenter/diminuer le retard des images</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Délai d'échelle des images</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Définir le zoom à 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Ajustez la fenêtre à la taille du cadre</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Adapter image à taille de la fenêtre disponible</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Sélectionnez première image</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Sélectionnez l'image précédente</s:String>\n    <s:String x:Key=\"S.Command.Play\">Jouer l'animation</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Sélectionnez l'image suivante</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Sélectionnez la dernière image</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Défaire</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Rétablir</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Annuler tous les changements dans le projet</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Copiez les images sélectionnées et stockez-les vers presse-papiers</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Coupez les images sélectionnées et stockez-les dans le presse-papiers</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Coller les images du presse-papiers</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Supprimer toutes images sélectionnées</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Supprimer toutes images précédentes</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Supprimer toutes images suivantes</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Retirer les doublons</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Réduisez le nombre d'images</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Créer une boucle fluide</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Animation inversée</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Fait avancer et reculer l'animation</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Déplacer l'image sélectionnée vers la gauche</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Déplacer l'image sélectionnée vers la droite</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Redimensionner toutes les images</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Recadrer toutes les images</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Retournez ou faites pivoter les images</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Ajouter une légende</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Ajouter un texte flottant gratuit</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Ajouter un cadre avec un titre</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Insère les touches pressées pendant l'enregistrement</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Dessinez des formulaires gratuits</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Ajouter des formes</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Événements de souris</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Sélectionnez une image et ajoutez-la en filigrane</s:String>\n    <s:String x:Key=\"S.Command.Border\">Ajouter Bordures</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Ajouter une ombre portée</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Masquer parties sensibles sur vos images</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Utilisez les outils de dessin pour sélectionner les parties de l'image qui ne doivent pas rester statiques pendant l'animation</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Barre de progression ou texte avec détails de lecture</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Sélectionner toutes les images</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Naviguer à l'image par index</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Inverser la sélection des images</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Désélectionner toutes les images</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Transition en fondu</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Transition des diapositives</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Effacer tous les encodages complétés</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Vers lhaut</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Descendre</s:String>\n    <s:String x:Key=\"S.Command.Add\">Ajouter</s:String>\n    <s:String x:Key=\"S.Command.Open\">Ouvrir</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Éditer élément sélectionné</s:String>\n    <s:String x:Key=\"S.Command.Save\">Sauvegarder élément sélectionné</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Retirer élément sélectionné</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Voir l'historique</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Bienvenue</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Capture d'écran</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Ouvre l'enregistreur d'écran,&#10;où vous pouvez facilement commencer à capturer votre écran</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Ouvre l'enregistreur de Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Planche à dessin</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Ouvre la planche à dessin,&#10;vous pouvez commencer à enregistrer vos dessins</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Éditeur</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Ouvre l'éditeur principal, le point central de cette application,&#10;où vous pouvez démarrer et éditer un nouvel enregistrement</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Options</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nouvelle version disponible</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Télécharger la dernière version de ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Mise à jour</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Une nouvelle mise à jour est disponible</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nouvelle version!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Nouvelle version disponible, Version {0}!&#x0d;Cliquez ici pour plus de détails.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Il semble que votre système n'est plus pris en charge ou que quelque chose a changé dans le système de mise à jour. Essayez de le télécharger manuellement sur le site Web.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Version</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portable</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Installer</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Quoi de neuf?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Corrections de bugs:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Une nouvelle version est disponible au téléchargement.&#x0d;Souhaitez-vous ouvrir le navigateur pour télécharger?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Exécutez l'application après mise à jour.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Télécharger</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Installer</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Installation manuelle</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Téléchargement...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Impossible d'afficher les détails du téléchargement.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Impossible de télécharger la mise à jour.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Vous devez attendre la fin de tous les encodages avant la mise à jour.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Téléchargeur</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Téléchargeur</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} sur {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Options</s:String>\n    <s:String x:Key=\"S.Options.App\">Application</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Enregistreur</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Éditeur</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tâches automatisées</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Raccourcis</s:String>\n    <s:String x:Key=\"S.Options.Language\">Langage</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Fichiers temporaires</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Services de téléchargement</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Faire un don</s:String>\n    <s:String x:Key=\"S.Options.About\">À propos de</s:String>\n    <s:String x:Key=\"S.Options.Other\">Autre</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Touche de raccourci manquante pour le suivi du curseur</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Afin d'utiliser la fonction de suivi du curseur de la souris, vous devez définir une touche de raccourci pour la faire basculer en cas de besoin.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Démarrage</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Démarrer&#10;manuellement</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">L'application ne sera exécutée que lorsque vous le ferez manuellement.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Démarrer avec&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">L'application sera exécutée après le démarrage de Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossible d'alterner entre les modes de démarrage.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Autoriser seulement une&#10;seule instance</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Vous pourrez exécuter l'application une fois par utilisateur et exécutable,&#10;ce qui signifie que différents utilisateurs ou instances exécutables peuvent coexister.&#10;Lorsque vous essayez d'exécuter à nouveau l'application, la deuxième instance essaie de se concentrer sur la première et se termine.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Autoriser multiple&#10;instances</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Vous pourrez exécuter l'application plusieurs fois en même temps, sans restriction.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Démarrer réduit à la barre d'état système.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(L'icône de la barre d'état système sera visible lorsque cette option est active)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Démarrer avec:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Fenêtre de bienvenue</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Capture d'écran</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Capture de Webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Planche à dessin</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Éditeur principal</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Fenêtre qui apparaît en premier lorsque l'application démarre)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Thème</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Schéma de couleur:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Très clair</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Clair</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Moyen</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Sombre</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Très sombre</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Suivre le système</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Personnalisé</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Exemples de couleurs.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Icône de la barre d'état système</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Afficher l'application sur la barre d'état du système (zone de notification)</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Gardez l'application ouverte même si toutes les fenêtres sont fermées</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Ne rien faire</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Ouvrir une fenêtre</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Aucune fenêtre</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimiser/restaurer toutes les fenêtres</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimiser toutes les fenêtres</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restaurer toutes les fenêtres</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Clic gauche:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Clic gauche (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Clic du milieu:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Fenêtres</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Ou bien, ouvre:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Générale</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Solution de contournement pour le crash de 'Pas assez de quotas...'.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Expérimental)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Confirmer avant de fermer l'application (via la commande \"Quitter\")</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Désactiver l'accélération matérielle</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(L'interface utilisateur sera rendue via le mode logiciel)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Vérifier les mises à jour de traduction</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Les traductions mises à jour seront téléchargées et installées automatiquement)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Vérifier les mises à jour</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Installation auto des mises à jour après fermeture de l'application.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Forcer le téléchargement de la version portable.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Nécessite une installation manuelle en décompressant et en remplaçant l'exécutable)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Forcer la mise à jour à s'exécuter avec des privilèges élevés.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Me demander avant le début de l'installation.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Ancien</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nouveau</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Fréquence de capture</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manuel</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Chaque trame sera capturée manuellement par vous, en appuyant sur bouton de capture ou un raccourci clavier équivalent.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Interaction de l'utilisateur</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Images seront capturées chaque fois que vous cliquez ou tapez quelque chose.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Par Seconde</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Trames seront capturées sur une base 'par seconde',&#10;compte tenu de l'ensemble de taux de trame de dénominateur sur l'écran de l'enregistreur.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Par Minute</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Trames seront capturées sur une base 'par minute' (laps de temps),&#10;compte tenu de l'ensemble de taux de trame de dénominateur sur l'écran de l'enregistreur.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Par Heure</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Trames seront capturées sur une base 'par heure' (laps de temps),&#10;compte tenu de l'ensemble de taux de trame de dénominateur sur l'écran de l'enregistreur.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Délai de lecture:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(En ms, chaque trame capturée sera réglée sur ce délai)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Délai de déclenchement :</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(En ms, chaque capture d'image attendra ce temps avant de démarrer)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Chaque trame sera capturée dans l'intervalle {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Mode capture</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Utilisez l'ancienne méthode de capture, qui est plus lente et peut ne pas fonctionner pour capturer des jeux,&#10;mais ne nécessite aucun plug-in supplémentaire.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Utilisez la méthode de capture de l'API Desktop Duplication, qui est plus rapide et&#10;est capable de capturer des jeux en plein écran, mais nécessite le plug-in SharpDx et Windows 8 ou plus récent.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Enregistrer dans&#10;fichier</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Chaque image capturée sera sauvegardée directement comme une image sur disque.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Mémoire&#10;cache</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Chaque image capturée sera d'abord stockée en mémoire sous la forme d'une matrice de pixels (peut être compressée auparavant).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compression:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimale</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Compression plus lente mais probablement plus optimale)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Plus rapide</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Compression plus rapide mais probablement moins optimale)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Aucune compression</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Aucune compression ne doit être effectuée lors de la capture d'images)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Taille du cache:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(En Mo. Après avoir atteint cette taille, les données seront écrites/effacées sur le disque)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Empêchez la capture d'images entièrement noires.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Empêche BitBlt avec un cache mémoire de produire à tort des images avec tous les pixels en noir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Inclure le curseur de la souris dans l'enregistrement</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Sélectionnez la couleur du curseur</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Fréquence d'images fixe</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Retard constant qui ne tient pas compte des latences lors de l'enregistrement)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Capturez uniquement lorsque quelque chose change.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Une image ne sera capturée que lorsque quelque chose est changé dans la région de capture)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Améliorer les performances de capture sur une connexion de bureau à distance.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Désactive capture de fenêtre par couches)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Force le nettoyage de la mémoire lors de la capture.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Réduit l'utilisation de la mémoire lors de la capture, mais réduit les performances)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Lignes directrices</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Règle des tiers</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Cliquez pour basculer l'affichage&#10;d'une ligne directrice sur la règle des tiers.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Directrice</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Cliquez pour basculer l'affichage&#10;d'une ligne directrice en croix.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Lignes directrices ne seront affichées que lorsque l'enregistreur est en pause ou arrêté.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Masquez barre de titre (mode mince).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Activer la loupe sur l'écran</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Affiche une loupe lors de la sélection de la zone d'enregistrement)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animez la bordure de la zone d'écran pendant la sélection.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animation en utilisant le style 'fourmis en marche')</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Activer le panoramique de sélection.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Affiche un décor près du coin de la sélection, permettant le mouvement de la zone d'enregistrement)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Mode compact.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Affiche une version réduite du panneau de commande de l'enregistreur)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Affichez également le bouton de suppression pendant l'enregistrement.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normalement, il n'est visible que pendant la pause)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Améliorer les performances de sélection d'écran.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Réduit le décalage lors de la sélection de l'écran en affichant une vue statique de l'écran)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Rappelez-vous la taille précédente de la zone d'enregistrement.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Rappelez-vous l'emplacement précédent de la zone d'enregistrement.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Utiliser un compte à rebours au démarrage</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Temps d'attente, en seconde, avant de commencer la capture)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Activez le suivi du curseur.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(La zone d'enregistrement se repositionnera en fonction de l'emplacement du curseur)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Marge tampon en pixels, où la zone d'enregistrement commence à être repositionnée)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Marge tampon supplémentaire en pixels, où l'interface utilisateur commence à être masquée)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Demandez-moi avant de détruire l'enregistrement.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Prévisionner le fond de l'écran</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Taille Grille:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Très Petit</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Petit</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Moyen</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Grand</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Très Grand</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">J'aime les grands carrés</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Je suis aveugle</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Personnaliser</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Hauteur</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Largeur</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Appliquer</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Couleur de base</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Couleur uniforme</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Couleur bizarre</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Afficher encodages dans une fenêtre séparée.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Étendre barre de titre (fenêtre chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Ajuster automatiquement la taille de la fenêtre en fonction de la taille du cadre, juste après le chargement.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Ajustez automatiquement le zoom du cadre en fonction de la taille de la fenêtre, juste après le chargement.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Demandez-moi avant de supprimer des cadres.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Demandez-moi avant d'écarter un projet.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Demandez-moi avant de fermer l'éditeur (s'il y a un projet ouvert).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Activez triple-clic pour sélectionner le texte.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Dessinez contour des légendes en dehors des lettres.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Abandonnez les cadres si nécessaire.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Passer une image si l'aperçu n'est pas en mesure de l'afficher à temps)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Passter une image si le prévisualiseur n'est pas capable de l'afficher à temps.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Imposer une limite à l'historique annuler/refaire.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Actions plus anciennes seront supprimées lorsque limite sera atteinte)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Nombre maximum d'actions stockées)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Synchronisez le dossier de sortie parmi les préréglages.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Les préréglages utiliseront le même chemin de sortie)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Synchronisez aussi le nom du fichier.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Les préréglages utiliseront aussi le même nom de fichier)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Ne synchronisez que les préréglages du même type de fichier.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Seuls les préréglages du même type de fichier seront synchronisés)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Tâche automatisée</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Liste des tâches automatisées</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Tâche</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Détails</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Activé</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Activer cette tâche.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Choisissez une tâche)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Choisissez une tâche ci-dessus</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Ces tâches sont exécutées séquentiellement du haut vers le bas de la liste.&#10;Cela se produit lorsque vous ouvrez un projet pour la première fois à l'aide de l'éditeur.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Capture d'écran:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Ouvre l'enregistreur d'écran)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Enregistreur de Webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Ouvre l'enregistreur de webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Planche à dessin</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Ouvre l'enregistreur de planche à dessin pour pouvoir enregistrer vos dessins)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Éditeur:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Ouvre une autre fenêtre d'éditeur)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Options:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Ouvre la fenêtre des options. Vous ne pouvez en ouvrir qu’une à la fois.)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Quitter:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Ferme toutes les fenêtres et supprime l'application de la barre d'état système)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Enregistreurs</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Démarrer/Pause:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Cela démarre ou met en pause l'enregistrement. Permet de prendre des instantanés si le mode instantané est activé)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Arrêter:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Cela arrête l'enregistrement et ouvre l'éditeur)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Annuler:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Annule l'enregistrement actif lorsqu'il est en pause)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Suivi du curseur:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Bascule l'ajustement de la zone d'enregistrement en fonction de la position du curseur)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Désactiver le suivi:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Désactive temporairement le réglage de la zone d'enregistrement en fonction de la position du curseur, seules les touches de modification sont acceptées)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Cliquez pour définir le focus du clavier, puis appuyez sur les touches et les modificateurs souhaités.&#10;Certaines combinaisons de touches ne sont pas autorisées.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Langue de l'application</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Détection automatique</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Langue actuelle du système d'exploitation (si disponible)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Voulez-vous traduire mon application ?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Cliquez ici pour lire les directives de traduction et pour télécharger l'application 'Translator'.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Ensuite,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">cliquez ici pour importer</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">et tester votre traduction.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Envoyez-le moi via</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">quand vous avez fini la traduction.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Cliquez pour ouvrir une page Web avec les directives de traduction.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Ouvre la page d'importation</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Ouvre votre application de messagerie</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Statut</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} libre de {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Vérifiez à nouveau combien d'espace il reste.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Videz le dossier cache.&#10;Vous pourrez décider si vous souhaitez conserver ou non les projets récents.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Espace insuffisant sur disque dur actuellement sélectionné. Veuillez nettoyer le dossier du cache ou modifier l'emplacement.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible de récupérer les détails du lecteur.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Aucun Fichiers</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} fichier</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} fichiers</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Aucun Dossiers</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} dossier</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} dossiers</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} en cours d'utilisation</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Chemins</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Choisir l'emplacement du cache (fichiers temporaires).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Journaux:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Choisir l'emplacement des fichiers journaux d'erreurs.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Parcourir le dossier sélectionné.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Emplacement des paramètres</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">Données d'application:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Ça n'existe pas</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Créez un fichier de paramètres local vide.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Supprimez le fichier de paramètres.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Ouvrez le dossier contenant le fichier de paramètres.&#x0d; Maintenez la touche 'Ctrl' enfoncée tout en cliquant pour ouvrir le fichier, si possible.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Modèle de chargement des paramètres : par défaut ◄ AppData ◄ Local.&#x0d;• Si aucun fichier de paramètres n'est présent dans le dossier Local, l'application recherche dans le dossier AppData. La valeur par défaut est utilisée si aucun fichier de paramètres n'est présent.&#x0d;• S'il n'y a pas de paramètres locaux, tous les paramètres sont enregistrés dans le fichier de paramètres AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Supprimez tous les fichiers du cache lorsque vous fermez l'application.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Me demander avant de supprimer tous les fichiers du cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Supprime automatiquement les anciens projets.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Lors de l'ouverture de l'application, une tâche en arrière-plan effacera tous les projets fermés plus anciens que la durée configurée.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(en jours, tout projet fermé plus ancien que celui-ci sera effacé / annulé après l'ouverture de l'application)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Effacer le cache</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Voulez-vous effacer le dossier cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Lorsque vous créez un enregistrement ou ouvrez quelque chose à éditer, un projet est créé et stocké dans dossier cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Souhaitez-vous retirer ces projets du dossier cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Ne pas retirer les projets récents.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Seuls projets datant de plus de {0} jours, qui ne sont pas utilisés actuellement, seront retirés)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Tous projets, qui ne sont pas actuellement utilisés, seront retirés)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Désactivé</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manuel</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Système</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Utilise le proxy système)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Hôte:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Nom d'utilisateur:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Mot de passe:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Charger les préréglages</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Service</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Titre</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Description</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Activé</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Chargement du service</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Sélectionnez un service</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Sélectionnez un service de chargement ci-dessus</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Personnalisé</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Activez ce préréglage.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Détails</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Nom:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Description:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonyme</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Authentifié</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorisation</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Obtenir un jeton</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Collez le jeton OAuth ici</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Nom d'utilisateur:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Mot de passe:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autoriser</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Le nom d'utilisateur et le mot de passe ne seront pas stockés.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Options</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Utilisez des liens directs.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Vous devez donner à ce préréglage un nom unique.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Le nom est déjà utilisé par un autre préréglage de transfert.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">En mode authentifié, vous devez terminer le processus d'authentification.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Vous devez fournir votre identifiant et votre mot de passe pour autoriser cette application.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Impossible d'obtenir le jeton d'autorisation.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Pour autoriser cette application, vous devez fournir le jeton d'autorisation.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Échec de l'autorisation. Vérifiez si tout est correct et réessayez dans quelques secondes.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Impossible de charger la liste des albums.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Autorisation terminée.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Non autorisé.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">L'autorisation a expiré le {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorisation valide jusqu'au {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Obtenez des liens avec l'extension Gifv au lieu de Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Téléchargez des gifs dans un album sélectionné.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Demandez-moi avant de télécharger</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Recharger la liste d'albums.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Valeurs par défaut</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Demandez-moi de remplir les détails du chargement.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Type d'URL :</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Choisissez un album (facultatif)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Si vous le souhaitez, vous pouvez sélectionner l'album de destination:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Charger les détails (facultatif)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Charger les détails</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Titre:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Description:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Mots clés:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Séparez les balises à l'aide d'un point-virgule ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Seulement affiché pour ceux qui accèdent via un lien direct.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Historique de chargement</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Date</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Préréglage</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Réussi?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Supprimer l'entrée de l'historique.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Lien</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Basse qualité:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Lien de suppression :</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Voulez-vous vraiment supprimer l'entrée d'historique ?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Cette action est irréversible.&#10;&#10;Voulez-vous supprimer l'entrée d'historique sélectionnée ?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Outils externes disponibles</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Cliquez ici pour télécharger&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Téléchargement...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">{0}&#x0d;Téléchargé</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Cliquez ici pour ouvrir les propriétés du fichier</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Les applications distribuées par le Microsoft Store ne peuvent pas télécharger d'autres applications. Vous devrez les télécharger manuellement.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Emplacement FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Sélectionnez l'emplacement de l'exécutable FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Exécutable FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Le chemin vers l'exécutable FFMpeg contient un ou plusieurs caractères non valides. Veuillez sélectionner un emplacement valide pour cet exécutable.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Emplacement Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Sélectionnez l'emplacement de l'exécutable Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Bibliothèque Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Le chemin de l'exécutable Gifski contient un ou plusieurs caractères non valides. Veuillez sélectionner un emplacement valide pour cet exécutable.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licence FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licence Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Licence SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Permission d'écriture manquante dans le dossier</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Il n'est pas possible d'enregistrer le téléchargement dans le dossier en raison d'un manque d'autorisation d'écriture.&#10;&#10;Voulez-vous démarrer le téléchargeur avec des droits d'administration pour terminer le téléchargement ?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Faire un don</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Faire un don en US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Faire un don en €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Ouvre le site Paypal. Monnaie sélectionnée: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Ouvre le site Paypal. Monnaie sélectionnée: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Ouvre le site Paypal. Vous devez sélectionner la devise</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">S'abonner</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Faites un don mensuel via Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Faites un don mensuel via Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Jeux cadeaux</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Jeux cadeaux via Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Jeux cadeaux via GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Payer un café via Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto monnaies</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copiez l'adresse BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Support</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Si vous souhaitez soutenir le projet :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Version:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Vérifier les mises à jour</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Vous avez déjà la dernière version.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Auteur: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Version Microsoft Store. Certaines fonctionnalités sont désactivées en raison de stratégies appliquées.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contact</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Rejoindre le serveur</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Visitez la page</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Rejoindre la salle</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Technique</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licence:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Ceci est une application totalement gratuite)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Code source:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Politique de confidentialité:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Un grand Merci à</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Tous les personnes qui ont participé, qui ont fais un retour, un commentaire et/ou des dons</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Localisation</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Obtention des codes de langue...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Reconnu comme {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Pas reconnu</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">La ressource la plus basse est celle actuellement utilisée.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Pour appliquer votre ressource personnalisée, déplacez-la en bas de la liste.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Exportation ressource ..</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Enregistrez le dictionnaire de ressources</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Ouvrir un dictionnaire de ressources</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Dictionnaire de ressources</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Importation de ressource...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Nom du fichier ne suit pas un modèle valide</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Essayez de renommer comme: StringResources.en.xaml, où 'en' doit être remplacé par votre code de langue.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Vous ne pouvez pas ajouter une ressource du même nom</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Essayez de retirer la ressource répétée ou utiliser un autre code de langue.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Code de langue redondant</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Code \"{0}\" est redondant. Essayez plutôt d'utiliser \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Langue inconnue</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">Le \"{0}\" et sa famille n'étaient pas reconnus comme des codes de langue valides.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Il était impossible d'importer la ressource de localisation.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Enregistrement</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pause</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continuer</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Arrêter</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Abandonner</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Instantané</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Hauteur</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Largeur</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Suivi du curseur est activé.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Cliquez pour basculer entre les modes de fréquence de capture.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manuel</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interactions</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Nombre d'images maximum par seconde</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Plage de 1 à 60 fps, avec des valeurs plus élevées signifiant que plus de trames seront capturées.&#10;Chaque incrément représente 16 millisecondes de différence.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Maximum de trames par minute</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fqm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Plage de 1 à 60 fpm, les valeurs les plus élevées signifiant que plus de trames seront capturées.&#10;Chaque incrément représente 1 seconde de différence.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Maximum de trames par heure</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Plage de 1 à 60 fph, avec des valeurs plus élevées signifiant que plus de trames seront capturées.&#10;Chaque incrément représente 1 minute de différence.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Cliquer ou appuyer sur des touches pour capturer</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Accrocher à la fenêtre (Prendre et relâchez pour accrocher)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Démarrage dans...</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (en pause)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">En arrêt...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Pré-démarrage...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Temps de capture écoulé.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Nombre total de trames :</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Capture manuelle :</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">La capture est en pause.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Votre ordinateur ne prend pas en charge un mode de capture précis,&#10;ce qui signifie que la fréquence d'images cible peut ne jamais être atteinte.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Il n'a pas été possible de capturer l'écran</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Il n'a pas été possible de capturer l'écran. La méthode de capture n'a renvoyé aucune image après 5 essais.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Il n'a pas été possible de démarrer/interrompre la capture de l'écran</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 ou plus récent est nécessaire pour capturer l'écran à l'aide de l'API de duplication du bureau.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Surface</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Sélectionnez une zone</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Fenêtre</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Choisir une fenêtre</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Écran</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Choisir un écran</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Écran interne</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Écran générique</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Adaptateur graphique: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Résolution: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Résolution native: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Glisser pour déplacer&#10;la sélection.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Accepter</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Réessayer</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Clic droit</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Annuler la sélection (Echap)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Cliquez et faites glisser pour sélectionner une zone de cet écran.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Cliquez et glissez pour sélectionner une zone</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Cliquez ici pour sélectionner cette fenêtre</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Cliquez ici pour sélectionner cet écran</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Appuyez sur Echap pour annuler</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Appuyez sur {0} pour arrêter l'enregistrement</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Fenêtre de l'enregistreur sera minimisée,&#10;restaurez-la ou appuyez sur {0} pour mettre la capture en pause</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Jeter l'enregistrement</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Êtes-vous sûr que vous voulez jeter l'enregistrement?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Cette action supprimera l'enregistrement, supprimant toutes les images.&#x0d;Vous ne pouvez pas annuler cette opération.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Capture de WebCam</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Aucun périphérique vidéo détecté :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Rechercher vos périphériques vidéo</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Échelle: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Changer l'échelle de la vidéo.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Planche à dessin</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Enregistrement automatique</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Activer l'enregistrement pendant le dessin</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Maintenir]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Sélecteur de couleurs</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Sélectionnez une couleur</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Rouge</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Vert</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Bleu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Couleur initiale</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Couleur actuelle</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Dernière couleur</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Faites glisser ceci vers&#x0d;échantillons de couleurs</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Cliquez et faites glisser pour choisir&#x0d;couleurs de votre écran.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Visualisation d'exception</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Ouvrir l'exception interne</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Type d'exception</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Empiler</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Quelque chose s'est mal passé.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Envoyer un rapport</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Préréglage</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Encodeur</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Nom</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Description</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Autre</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Sauvegarde auto lorsqu'une option est modifiée.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Toutes les modifications apportées à ces paramètres prédéfinis (paramètres d'encodage et d'exportation) doivent être enregistrées manuellement en appuyant sur le bouton Enregistrer.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Toutes les modifications apportées à ces paramètres de préréglage (paramètres d'encodage et d'exportation) seront auto enregistrées.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Certaines des propriétés d'un préréglage par défaut sont en lecture seule.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Vous devez donner un nom à ce préréglage.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Il existe déjà un préréglage du même nom.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Autosauvegarde</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Les changements apportés à ce préréglage sont auto enregistrés.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Par défaut ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Préréglage par défaut pour l'encodeur.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Pour Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respecte les limites de chargement de Twitter (sauf la taille et la résolution).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">Codage vidéo haute efficacité.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Codec ancien et plus connu.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Vidéo</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Image</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projet</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Haute qualité</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Mieux adapté aux enregistrements avec plus de couleurs et de dégradés.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Haute qualité • Fond transparent</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Prend en charge la sauvegarde de l'animation avec un fond transparent.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Haute qualité • Graphismes</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Mieux pour les enregistrements avec une faible quantité de couleurs.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Équilibré</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Bonne qualité pour des images de type photo utilisant le quantificateur de Wu's sans tramage.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Haute qualité</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Haute qualité pour des images de type photo utilisant le quantificateur de Wu's avec un niveau de bit plus élevé et un tramage de diffusion d'erreur Floyd-Steinberg.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Basse qualité, plus rapide</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantification de toutes les images avec la même palette prédéfinie 'sûre pour le Web' et le tramage ordonné Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Qualité supérieure</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Meilleure qualité d'image, mais avec une taille de fichier plus importante.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Qualité inférieure</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Qualité d'image inférieure, mais avec une taille de fichier inférieure.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Qualité supérieure</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Meilleure qualité d'image, mais avec une taille de fichier plus importante.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Qualité inférieure</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Qualité d'image inférieure, mais avec une taille de fichier inférieure.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Qualité inférieure et encodage plus rapide</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Qualité d'image encore plus faible, avec un encodage plus rapide, mais avec une taille de fichier plus petite.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Système • Basse qualité</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Encodage de qualité médiocre mais plus rapide.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Haute qualité</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Qualité d'image élevée et petite taille de fichier, mais encodage plus lent.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Qualité inférieure</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Qualité d'image inférieure, petite taille de fichier et encodage plus rapide.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Haute qualité</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Haute qualité d'image et taille de fichier réduite.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Insérer des images</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Les deux côtés doivent avoir la même taille. Cette fenêtre vous permet de repositionner et de redimensionner l’image et le Canevas. Cliquez pour sélectionner et redimensionner.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Taille du Canvas:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Ajuster à l'image&#10;du Canvas</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Redimensionne le Canvas pour l’adapter aux deux images (à partir du coin supérieur gauche).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Il y a une différence entre les tailles des images. Vous devez corriger ce problème avant d'insérer les images.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Image(s) ajoutée(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Image(s) actuelle(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Taille de l'image:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Position de l'image:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Réinitialiser la taille&#x0d;et la position de l'image</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">De nouvelles images seront insérées dans la&#10;liste actuelle des images à cette position:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Avant</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Après</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Image</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importation</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Sélectionnez la couleur de remplissage du canevas</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importer à partir d'une vidéo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importateur:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Chargement...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Échelle:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Taille:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Hauteur:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Largeur:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Fréquence d'image:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Début:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Fin:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Selection:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Images:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Durée:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Il n'a pas été possible de charger la vidéo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Le prévisualisateur n'a pas pu démarrer. Essayez avec un autre importateur ou vérifiez si la vidéo n'est pas corrompue.&#x0d;Si vous utilisez le MediaPlayer, vérifiez si la fonction Windows appelée 'Fonctionnalités multimédias / Lecteur Windows Media' est activée et assurez-vous que vous disposez du codec vidéo nécessaire.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Délai d'obtention de l'aperçu de l'image.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Aucune image n'a été sélectionnée pour être importée.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Encodage</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Encodage...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Démarrage</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Terminé</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Copié dans le presse-papier</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Échec de la copie</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Commande exécutée</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Affiche le résultat de la ou des commandes</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Impossible d'exécuter la commande</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Échec du téléchargement</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Clic pour ouvrir la page afin de supprimer l'image (si disponible)</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Temps écoulé, en minutes:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analyse:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encodage</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Charger:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copie:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commandes:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Fichier supprimé ou déplacé</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Annulé</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Erreur</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Cliquez ici pour afficher les détails de cette erreur</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Téléchargement</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Exécution des commandes</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Traitement en cours {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Préparer la seconde passe</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Traitement {0} - 2ème passe</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Création d'un fichier</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analyse des pixels inchangés</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Sauvegarde résultats de l'analyse</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Ouvrir le fichier</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Explorer le dossier</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Supprimer de la liste</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Afficher les détails</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Rejeter tous les encodages terminés</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copier comme image</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copier le nom de fichier</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copier le chemin du dossier</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copier le lien</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Sortie de commande</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Sortie de commande</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notifications</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Effacer toutes les notifications</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Éditeur</s:String>\n    <s:String x:Key=\"S.Editor.File\">Fichier</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Accueil</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Lecture</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Modifier</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Image</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transitions</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistiques</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Options</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Aide</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Suppléments</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Une nouvelle mise à jour est disponible!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Cliquez ici pour en savoir plus.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Nombre total, Nombre de sélection, Index de sélection</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Préparation des images</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Chargement non valide - Vous ne pouvez pas importer plusieurs fichiers à la fois. Essayez de choisir un seul fichier.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Chargement non valide - Vous ne pouvez pas charger plusieurs projets à la fois. Essayez de choisir un seul projet.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Ouvrir un fichier multimédia (image ou vidéo)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Ouvrir un fichier multimédia (image ou vidéo) ou un fichier de projet</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Tous fichiers supportés</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Image</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Vidéo</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Png animé</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Animation Gif</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Animation Webp</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Vidéo Avi</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Vidéo Matroska</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov vidéo</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Vidéo Mp4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Vidéo Webm</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Image Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Image Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Image Png, toutes images sélectionnées</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Fichier Zip, toutes images sélectionnées</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Projet ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Projet ScreenToGif en Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Fichier Psd</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Rendez-vous sur 'Fichier>Nouveau' pour démarrer un nouvel enregistrement</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Glisser-déposer des images, des vidéos ou des projets à importer</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Merci beaucoup d'avoir utilisé mon application!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Plus le nombre d'images par seconde, le nombre de couleurs ou la quantité de modifications entre les images sont faibles, plus la taille est petite.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Voulez-vous me parler ? Rendez-vous dans 'Options>À propos' pour me contacter.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Vous avez un problème ? Contactez-moi via l'outil de 'retour'.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Voulez-vous essayer la nouvelle interface de capture ?&#x0d;Rendez-vous dans 'Options > Enregistreur' pour l'activer.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Enregistrement</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Nouvelle&#x0d;capture de Webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Nouvelle&#x0d;Planche à dessin</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Projet&#x0d;Vierge</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nouveau</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Enregistrement</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Insérer une&#x0d;capture de Webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Enregistrement&#x0d;Planche à dessin</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Multimédia</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Insérer</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Enregistrer sous</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Charger</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Projet&#x0d;récents</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Enregistrer sous&#x0d;Projet</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Abandonner&#x0d;Projet:</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Pile d'action</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Annuler</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Rétablir</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Réinitialiser</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Presse-papiers</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Afficher le presse-papier</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Coller</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Couper</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copier</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Ajuster au&#x0d;contenu</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Ajuster l'image</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Sélectionner</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Sélectionner&#x0d;Tout</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Aller à</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Inverser</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Désélectionner</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Lecture</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Début</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Précédent</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Lire</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pause</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Suivant</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Fin</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Options de lecture</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Boucle pendant la lecture.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Utilisé uniquement pendant la lecture.&#x0d;Si vous souhaitez modifier les paramètres de boucle pour exporter des Gifs et des Apngs,&#x0d;il sera disponible dans le panneau 'Enregistrer sous' pour certains encodeurs.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Images</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Effacer</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Retirer&#x0d;les doublons</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Réduire&#x0d;le nombre d'images</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Boucle&#x0d;lisse</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Supprimer toutes les précédentes</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Supprimer toutes les suivantes</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Réorganisation</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Sens inverse</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Déplacer&#x0d;Gauche</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Déplacer&#x0d;Droite</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Délai (Durée)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Passer outre</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Augmenter ou diminuer&#x0d;le délai</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Mise à l'échelle</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Taille et position</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Redimensionner</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Recadrer</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Retourner/Rotation</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Texte</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Légende</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Texte libre</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Image avec titre</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Touche&#x0d;Frappes</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Superposition</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Dessin&#x0d;libre</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Formes</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Souris&#x0d;Événements</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Filigrane</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraphe</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Bordure</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Ombre</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Progression</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Obscurcir</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Styles</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Fondu</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Diapositive</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Général</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Nombre d'images</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Durée totale</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Taille d'image</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Durée moyenne (délai)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Heure actuelle</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">L'heure actuelle (cumulative) basée sur l'image actuelle affichée.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Image DPI et mise à l'échelle</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Image sélectionnée</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Action coupé</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Vous ne pouvez pas couper toutes les images.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">L'enregistrement nécessite au moins une image.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Supprimer tout</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Êtes-vous sûr de vouloir supprimer tous les images ?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Cette action supprimera le projet actuellement ouvert et ne pourra pas être annulée. Voulez-vous continuer ?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Abandonner l'ensemble du projet</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Êtes-vous sûr de vouloir supprimer définitivement le projet ?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Cette action supprimera le projet et toutes ses images.&#x0d;Vous ne pouvez pas annuler cette opération.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Voulez-vous supprimer le projet précédent ?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Si vous choisissez de ne pas le faire, le projet précédent pourra être ouvert depuis les \"Projets récents\".</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Supprimer des images</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Êtes-vous sûr de vouloir supprimer ?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Cette action supprimera {0} image(s).&#x0d;Vous pourrez annuler cette opération ultérieurement.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Quitter l'éditeur</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Êtes-vous sûr de vouloir quitter ?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Le projet sur lequel vous travailliez peut être rouvert via \"Projets récents\".</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Le projet sur lequel vous travailliez peut être rouvert via \"Projets récents\", mais n'oubliez pas qu'après quelques jours, il sera automatiquement supprimé.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Glisser-déposer non valide</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Vous ne pouvez pas importer plusieurs fichiers à la fois</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Essayez de choisir un seul fichier</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Impossible de charger le fichier</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Le fichier n'a pas pu être chargé car son format est incorrect</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Vous ne pouvez pas importer plusieurs projets à la fois</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Essayez de choisir un seul projet</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Il n'y a pas de texte à appliquer</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Vous devez sélectionner au moins une image pour lui appliquer une légende</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Vous devez sélectionner au moins une image auquelle appliquer le texte.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Vous devez sélectionner au moins une image pour appliquer le titre de l'image précédente.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Vous devez sélectionner une épaisseur de bordure supérieure à zéro sur au moins un côté</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Vous devez sélectionner au moins une image pour appliquer la bordure</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">L'opacité doit être supérieure à zéro afin de faire la différence dans le cadre.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Lorsque vous utilisez la profondeur d'ombre et le rayon de flou à zéro, cela ne fera aucune différence car il sera caché derrière le cadre.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Vous devez sélectionner au moins un pixel auquel appliquer le Cinemagraph. Sélectionnez les pixels en dessinant dessus.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Transition en fondu</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Vous devez sélectionner au moins une image auquelle appliquer la transition de fondu.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Une couleur entièrement transparente ne créera aucun effet sur cette transition.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Transition de diapositive</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Vous devez sélectionner au moins une image auquelle appliquer la transition de diapositive.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Chargement des images</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Impossible de charger le projet</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Il n'a pas été possible de charger les images car elles sont toutes corrompues ou les images ne sont pas présentes là où elles sont censées l'être.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Certaines images n'ont pas pu être chargées</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Il n'était pas possible de charger les images car elles étaient introuvables ou corrompues.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Vous devez sélectionner au moins une image auquelle appliquer la superposition.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg non présent. Ajoutez-le aux variables d'environnement \"Path\" ou cliquez ici pour ouvrir \"Options>Extras\" afin de définir son emplacement.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski non présent. Ajoutez-le aux variables d'environnement \"Path\" ou cliquez ici pour ouvrir \"Options>Extras\" afin de définir son emplacement.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Il n'y a pas assez d'espace libre sur le lecteur où cette application stocke son cache ({0}% restant). Cliquez ici pour ouvrir \"Options>Fichiers temporaires\" afin de libérer de l'espace.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Vous avez essayé d'importer plusieurs images avec différents DPI, ce qui n'est pas pris en charge. Certains d'entre eux ont été importés, les autres doivent être importés séparément.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Vous avez essayé d'importer plusieurs images de différentes tailles, ce qui n'est pas pris en charge. Certains d'entre eux ont été importés, d'autres doivent être importés séparément.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Récupération des images du cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Mise à jour des images</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Préparation à l'importation</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importation des images</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analyse des doublons</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Ajustement du délai</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Élimination des doublons</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Enlever les images</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Enlever les dossiers</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Redimensionnement des images</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Recadrage des images</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Appliquer une superposition aux images</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Création d'une image avec un titre</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Appliquer Retourner/Rotation sur les images</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Changer le délai</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Appliquer un effet de transition</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Préparation de la sauvegarde</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Annulez le chargement et abandonnez le projet.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Trouver la boucle parfaite</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Rejet des trames non utilisées dans la boucle</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Image:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Ouvrir l'image</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Explorer le dossier</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Aller à la image</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Aller à la image (de 0 à {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Enregistrer sous</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Supprimer les images sélectionnées</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nouvelle capture d'écran</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nouvelle capture de la Webcam</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nouvelle planche à dessin</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nouveau projet</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nouveau projet à partir d'un média ou d'un autre projet</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nouvel enregistrement d'écran créé</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nouvel enregistrement de Webcam créé</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nouvelle planche à dessin créée</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nouveau projet créé</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Annuler exécuté</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Réinitialiser exécuté</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Rétablir exécuté</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} image(s) coupée(s)</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} image(s) copiée(s)</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} image(s) collée(s)</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom défini sur {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Toutes les trames ont été sélectionnées</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Frame #{0} sélectionné</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Sélection inversée</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Toutes les images ont été désélectionnées</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} image(s) supprimée(s)</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Liste des images inversée</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Effet Yoyo appliqué</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Image(s) déplacée(s) vers la gauche</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Image(s) déplacée(s) vers la droite</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Images redimensionnées</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Images recadrées</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Images retournées/pivotées</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">L'action de retournement s'applique aux images sélectionnées et la rotation s'applique à toutes les images</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Cette action s'applique à toutes les images</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Cette action s'applique aux images sélectionnées</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Cette action s'applique à toutes les images ou à certaines images sélectionnées, selon vos paramètres</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Le cinemagraphe s'applique à toutes les images basées sur la première image</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Superposition appliquée</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Image avec titre créée</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Le titre d'image sera inséré avant l'image sélectionnée</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Durée modifiée</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Transition insérée</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Fréquence d'image réduite</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Doublons enlevés</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Masquer</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Appliquer</s:String>\n    <s:String x:Key=\"S.Action.Open\">Ouvrir</s:String>\n    <s:String x:Key=\"S.Action.Save\">Sauvegarder</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Annuler</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Projets récents</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Recherche de projets récents...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Date de création</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Nombre d'image</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Il n'y a pas de projet sélectionné. Sélectionnez un projet à charger dans la liste.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Ce projet est déjà affiché par cette instance d'éditeur.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Ce projet a déjà été ouvert par une autre instance de l'éditeur. Un projet ne peut pas être ouvert une seconde fois s'il est déjà ouvert sur un autre éditeur.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Entrées du Presse-papiers</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Entrée du Presse-papiers:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Explorer le contenu</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Supprimer</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Coller le comportement</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Avant l'image sélectionnée</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Après l'image sélectionnée</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Différence</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Options</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Pourcentage (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Conserver les proportions</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Mise à l'échelle Qualité:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant (qualité supérieure)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linéaire (qualité inférieure)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Voisin le plus proche (qualité inférieure et plus rapide)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Qualité d'échelle.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Vous devez sélectionner une valeur différente pour appliquer l'action Redimensionner</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Points</s:String>\n    <s:String x:Key=\"S.Crop.Top\">En haut:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">À gauche:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Bas:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">À droite:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">La sélection de recadrage doit être inférieure à la taille de l'image actuelle</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">La sélection du recadrage doit être supérieure à 10 x 10 pixels</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Retourner horizontalement</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Retourner verticalement</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Pivoter vers la gauche de 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Pivoter vers la droite de 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Réduire la fréquence de trame</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Facteur:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Retirer le décompte:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Réglage du délai:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Ne pas ajuster</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Somme avec la trame précédente</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Additionner uniformément avec cadres restants</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Réduisez le taux d'encadrement de l'ensemble du projet.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Si l'option n'est pas cochée, vous devez sélectionner plusieurs cadres consécutifs,&#10;plus grand que le facteur de suppression.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Il retirera la ou les trame(s) {0} après chaque trame {1}, sans compter celles qui ont été retirées.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Vous devez sélectionner les cadres pour appliquer la réduction de la fréquence des images (ou cocher l'option pour l'appliquer à l'ensemble du projet).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Liste des cadres sélectionnés doit être consécutive. Vous ne pouvez pas laisser certains cadres non sélectionnés parmi les cadres sélectionnés.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">La sélection des cadres doit être supérieure au facteur de suppression, afin que la caractéristique puisse retirer quoi que ce soit.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Supprimer les doublons</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Similarité (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Image supprimée:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Supprimer la première image</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Supprimer la dernière image</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Ajustement du délai:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Ne pas ajuster</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Utilisez la moyenne</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Utiliser la somme</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Cette action analyse chaque image (pixel par pixel) et supprime celles qui se ressemblent à au moins {0}% par rapport à l'image suivante.&#x0d;Vous pouvez choisir si vous souhaitez ajuster le délai (durée d'enregistrement) des images.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Créer une boucle fluide</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignorer en premier :</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Comparez depuis :</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Fin</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Démarrer</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Essaie de trouver une image au moins {0} % similaire à l'image de départ et supprime toutes les images ultérieures.&#x0d;Vous pouvez choisir d'ignorer certaines images initiales et de lancer la comparaison depuis le début (après le seuil) ou de la fin.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Le nombre de trames à ignorer doit être inférieur au nombre total de trames.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Il n'était pas possible de créer une boucle fluide avec les paramètres sélectionnés.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Vous avez déjà une boucle fluide basée sur les paramètres sélectionnés.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Texte</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Police</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Famille:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Style:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Bordure:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Taille:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Couleur:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Couleur de l'arrière plan:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Contour</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Épaisseur:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Disposition</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Verticale:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontale:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Alignement :</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Décoration :</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Touches</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Touches</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Séparateur:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Modifier vos touches</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignorer les touches Ctrl, Alt, Maj et Windows lorsqu'ils ne sont pas utilisés comme modificateur.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Cela va ignorer les touches de modification telles que \"Ctrl\", mais cela n'ignore pas \"Ctrl + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignorez les frappes simulées par le logiciel.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">N'enregistrez que les frappes de l'utilisateur.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Prolongez l'enregistrement des touches.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Commencez l’enregistrement des touches plus tôt.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Par (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Aucune touches détectées sur votre enregistrement.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Éditeur de touches</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Nombre d'image</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Touches détectées</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Supprimer la touche</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Ajouter une touche:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Lettres minuscules.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Il vous permet d'insérer des lettres simples en minuscules.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Mode</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Stylo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Gomme</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Sélectionner</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Gomme à effacer</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Largeur:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Hauteur:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Astuce:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rectangle</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Autre:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Surligneur</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Ajuster la courbe</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Il n'y a pas de dessins à appliquer aux images que vous avez sélectionnée.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Vous devez sélectionner au moins une image auquelle appliquer le dessin.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Insérer</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Formes</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radius:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Tirets:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Contrôle la taille des tirets et la taille des espaces.&#10;Vous pouvez définir plusieurs tailles pour créer un style de tiret élaboré.&#10;La valeur par défaut est \"1 0\" ou vide, ce qui signifie un tiret sans espaces.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Réinitialiser rotation</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Retirer</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Remplir</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Événements de souris</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Couleur de surbrillance de la souris :</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Couleur bouton gauche :</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Couleur du bouton central :</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Couleur bouton droit :</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Image</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Fichier:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Aucune sélection</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacité:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Sélectionnez une image</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Vous devez sélectionner une image filigrane à appliquer sur les image(s) sélectionnée(s).</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Vous devez sélectionner au moins une image pour appliquer un filigrane.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Apparence</s:String>\n    <s:String x:Key=\"S.Border.Info\">Utilisez des valeurs négatives pour que la bordure agrandisse l'image. Ce faisant, la bordure sera appliquée à toutes images.&#10;Si aucune valeur négative n'est utilisée, la bordure sera appliquée uniquement aux images sélectionnées.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Couleur de l'ombre:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Couleur de fond:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Direction:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Rayon de flou:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Profondeur:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixéliser</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Flou</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Assombrir</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Alléger</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Options de dissimulation</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Taille de pixel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Niveau de flou:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Niveau d'assombrissement:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Niveau d'éclaircissement:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calculez la couleur moyenne pour chaque bloc pixélisé.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Appliquez l'obfuscation à l'inverse de la sélection.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Douceur</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Utilisez l'outil de sélection pour sélectionner le rectangle devant être pixellisé.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Utilisez l'outil de sélection pour sélectionner la partie du cadre qui ne doit pas être obscurcie.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Vous n'avez rien choisi. Veuillez utiliser l'outil de sélection pour sélectionner le rectangle devant être pixellisé.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Type</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Barre</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Texte</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Précision:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutes</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Secondes</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisecondes</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Pourcentage</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Numéro de l'image</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Date/heure réelle</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Personnalisé</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Afficher le total.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Format:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = millisecondes</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = secondes</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = pourcentage</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = numéro de trame</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Totaux::</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Exemples:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Vous pouvez utiliser le format de la date et de l'heure à partir de .Net Framework.&#x0d;La spécification est disponible dans ces deux liens ci-dessous.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Formats standard</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Formats personnalisés</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Compter à partir de:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Commence à compter le numéro de l'image à partir de ce numéro sélectionné.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientation:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Retarder la mise à jour</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Mode retard:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Passer outre (en ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Augmenter ou diminuer (en ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Échelle (en%)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nouvelle valeur de délai</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimum de 10ms par image</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Valeur à diminuer ou augmenter</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Valeur de mise à l'échelle</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Cette nouvelle valeur remplacera la durée (délai) de toutes les images sélectionnées. La valeur peut être comprise entre 10 ms et 25500 ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Cette valeur diminuera/augmentera la durée (délai) de chaque image sélectionnée&#x0d;.Vous pouvez décrémenter/incrémenter en sélectionnant une valeur comprise entre -10000ms et 10000ms, mais la durée finale de chaque image sera limitée à 10ms à 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Ajustez la durée (délai) de chaque image sélectionnée en fonction de ce pourcentage.&#x0d;Vous pouvez mettre à l’échelle la durée de chaque image en sélectionnant une valeur comprise entre 1% et 1000%, mais la durée finale de chaque image sera limitée entre 10 ms et 25500ms.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Utilisez le stylo pour sélectionner les pixels qui ne doivent pas rester statiques (qui doivent changer d’une image à l’autre), en les peignant par dessus</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Longueur de transition</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Délai de transition</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Fondu vers...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">La prochaine image</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Une couleur</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Couleur</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">La transition sera appliquée entre l'image sélectionnée et la suivante</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Type de fichier</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Format du fichier de sortie.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Préréglage d'exportation qui contient tous les paramètres actuellement affichés.&#10;Gérez vos préréglages d'exportation via les boutons ci-dessous.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Image animée</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Vidéo</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Frames</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Autre</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Graphiques animés de réseau portable</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Format d'échange graphique</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Image Web</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Entrelacement audio-vidéo</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">Format de fichier QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Film</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Groupe mixte d'experts photographiques</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Projet</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">Projet ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Fichier Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Préréglages:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Par défaut</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Ajouter</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Enregistrer </s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Éditer</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Enlever</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Réinitialiser</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Suppression du préréglage</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Voulez-vous vraiment supprimer le préréglage ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Cette action est irréversible.&#10;&#10;Voulez-vous supprimer le préréglage sélectionné ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Réinitialisation du préréglage</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Voulez-vous vraiment réinitialiser le préréglage ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Cette action est irréversible.&#10;&#10;Voulez-vous rétablir les paramètres par défaut du préréglage sélectionné ?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Encodage</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Encodeur et quantificateur</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Encodeur chargé de générer le fichier de sortie.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Encodeur intégré.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">Encodeur KGy SOFT GIF.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Système</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encodeur mis à disposition par le système.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Encodeur externe, fabriqué par FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Encodeur externe, fabriqué par Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Options de l'encodeur</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Activer le mode avancé.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Entrez manuellement les paramètres pour contrôler l'encodeur.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Paramètres:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Liste des paramètres qui seront passés à FFmpeg.&#10;&#10;Paramètres spéciaux:&#10;{I} est le chemin d'entrée (les cadres).&#10;{O} est le chemin de sortie (le fichier exporté).&#10;{W} est la largeur du cadre.&#10;{H} est la hauteur du cadre.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Pour encoder avec 2-pass, il suffit d'ajouter '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Aperçu</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Prévisualisez la liste des paramètres qui sera transmise à FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Doc. codecs</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format docs</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filtre docs</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Options Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Algorithme de réduction des couleurs (quantification).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Réseau neural</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Quantification haute fidélité. Plus lent, mais bon pour une plus grande quantité de couleurs.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Bon pour les animations avec moins de couleurs. Plus rapide, mais peut produire des bandes de couleur.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Coupe médiane</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Moins bon qu'Octree et plus lent.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Échelle de gris</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Utilise une échelle de gris fixe, donc c'est beaucoup plus rapide.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Couleurs les plus utilisées</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Prend simplement couleurs plus utilisées dans les trames.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Échantillonnage:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Facteur d'échantillonnage:&#10;Une valeur de 1 donnera un gif plus beau, mais il sera plus lent à rendre.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Qualité:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Couleurs:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Nombre maximum de couleurs (pour chaque image).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Utilisez une table de couleurs globale.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Peut réduire la qualité et/ou la taille du gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Meilleur</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Plus rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Utilisez un procédé d'encodage encore plus rapide.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Peut réduire la qualité du gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Boucle</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Boucle Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Boucle infini</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Nombre de rép.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Activer transparence.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Active le mode de transparence totale, qui rend l'arrière-plan du gif totalement transparent.&#10;Processus deEnables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled. remplacement de clé chroma sera ignoré si cette option est activée.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Sélectionnez couleur à afficher comme transparente.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Couleur sélectionnée, elle sera convertie en transparente et apparaîtra comme transparente dans le gif généré.&#10;Si aucune couleur sélectionnée, toutes couleurs transparentes (Alpha = 0%) apparaîtront comme transparentes normalement.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Détecter les pixels inchangés</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">En analysant et en détectant les pixels inchangés entre les trames,&#10;il sera possible de ne sauvegarder que les parties nécessaires au gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Remplacer ces pixels avec une clé chroma.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Pixels répétés/inchangés seront remplacés par cette clé chroma,&#10;ce qui permettra d'utiliser moins de couleurs par trame.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Clé chroma:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Tremblement:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Échelle Bayer :</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantificateur</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Couleur de fond:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Les pixels avec alpha (transparence) considérés comme opaques par le quantificateur sélectionné seront mélangés à cette couleur avant d'obtenir la couleur quantifiée.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Seuil alpha :</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Détermine la valeur alpha d'entrée sous laquelle la couleur quantifiée sera transparente.&#x0d;&#x0a;Si 0, le résultat n'aura jamais de transparence.&#x0d;&#x0a;Si 255, seuls les pixels entièrement transparents sont considéré comme transparent.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Seuil blanc :</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Détermine la luminosité d'entrée la plus faible pour prendre en compte la couleur blanche du résultat.&#x0d;&#x0a;Cela affecte la luminosité du résultat. Un tramage de diffusion d'erreur peut toutefois compenser la valeur de ce paramètre.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Cartographie directe</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Si cette case est cochée, la couleur quantifiée est déterminée par un mappage direct plutôt que par la recherche de l'entrée de palette la plus proche.&#x0d;&#x0a;Cela accélère la quantification mais peut aboutir à un résultat plus contrasté. Un tramage de diffusion d'erreur peut cependant compenser la valeur de ce paramètre.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Taille des palettes :</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Détermine la taille maximale de la palette par frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Niveau de bit personnalisé.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Lorsqu'il est coché, le niveau de bit peut être configuré manuellement.&#x0d;&#x0a;⚠️ Avertissement : Le niveau de bit le plus élevé peut nécessiter BEAUCOUP de mémoire !</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Une valeur plus élevée signifie plus de précision, un espace colorimétrique cible plus grand, un traitement plus lent et une plus grande utilisation de la mémoire.&#x0d;&#x0a;Par ex:, si 1, le résultat ne peut pas avoir plus de 8 couleurs, ou quand 2, pas plus de 64 couleurs.&#x0d;&#x0a;Pour les quantificateurs Octree et Wu, cela affecte également le nombre maximum de nuances monochromatiques.&#x0d;&#x0a;Par ex, si 5 (qui est la valeur par défaut pour le quantificateur Wu), seulement 32 les nuances monochromatiques peuvent être différenciées.&#x0d;&#x0a;⚠️ Attention : Le quantificateur Wu consomme au moins 650 Mo avec la valeur la plus élevée.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Noir et blanc</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Palette de 1 bpp fixe avec les couleurs noir et blanc.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Échelle de gris 4 couleurs</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Palette fixe de 2 bpp avec 4 entrées en niveaux de gris.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Échelle de gris 16 couleurs</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Palette fixe de 2 bpp avec 4 entrées en niveaux de gris.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Échelle de gris 256 couleurs</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Palette 8 bpp fixe avec 256 entrées en niveaux de gris.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Palette 4 bpp par défaut du système</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Palette fixe de 4 bpp utilisant les 16 couleurs sRGB standard.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Palette 8 bpp par défaut du système</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Correction de la palette 8 bpp incluant les couleurs et la transparence 'web-safe'.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">Palette RVB 332</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Correction de la palette 8 bpp utilisant l'espace colorimétrique RVB 332.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Quantificateur Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Palette d'optimisation pour chaque image avec l'algorithme Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Quantification médiane</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimisation de la palette pour chaque image avec l'algorithme Median Cut.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Quantificateur Wu</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Palette d'optimisation pour chaque image avec l'algorithme de Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Indécis</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Force:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">La force du tramage, ou 0 pour calibrer auto la force.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Graine:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Une valeur entière à utiliser pour produire un motif de tramage aléatoire spécifique.&#x0d;&#x0a;Laissez vide pour utiliser une valeur aléatoire pour chaque image.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Aucun</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Les images sont quantifiées sans tramage.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Traitement serpentin</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Lorsqu'elle est cochée, la direction de propagation de l'erreur est modifiée de ligne en ligne.&#x0d;&#x0a;Cela permet de réduire l'effet d'ondulation de la diffusion d'erreur par tramage.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Commandé)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">Le modèle de matrice Bayer 2x2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Commandé)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">Le modèle de matrice Bayer 3x3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Commandé)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">Le modèle de matrice Bayer 4x4.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Commandé)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">Le modèle de matrice Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Demi-teinte pointillée (Commandé)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Une matrice 8x8 avec un motif tramé pointillé.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blue Bleu (Commandé)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Une matrice 64x64 avec un motif de bruit bleu.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (diffusion d'erreur)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Matrice 4x3 de Bill Atkinson avec 6 valeurs effectives.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (diffusion d'erreur)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (diffusion d'erreur)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">La matrice 3x2 originale de Floyd et Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (diffusion d'erreur)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Une matrice 5x3 par Jarvis, Judice et Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (diffusion d'erreurs)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Matrice 5x3 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (diffusion d'erreurs)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">La matrice 5x2 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (diffusion d'erreurs)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Matrice 3x2 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (diffusion d'erreur)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Une matrice hexagonale 7x4 par Stevenson et Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (diffusion d'erreur)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Matrice 5x3 de Stucki.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Bruit aléatoire</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Bruit blanc aléatoire.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Bruit dégradé entrelacé</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Bruit de gradient non aléatoire généré par une formule.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Aperçu</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Afficher l'image actuelle.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Lorsque cette case est cochée, l'aperçu affiche l'image actuelle au lieu d'un exemple d'image standard.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">L'aperçu auto est désactivé en raison de la forte exigence de mémoire des paramètres actuels. Cliquez pour rafraîchir l'aperçu.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Échec de la génération de l'aperçu : {0}&#x0d;&#x0a;Cliquez pour essayer de le générer à nouveau.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Paramètres d'animation</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Boucle infinie.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Lorsque coché, l'animation sera bouclée indéfiniment.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">D'avant en arrière.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Si cette case est cochée, l'animation sera jouée en avant et en arrière.&#x0d;&#x0a;Ceci est réalisé en dupliquant les images, ce qui signifie une taille de fichier plus importante et un temps d'encodage plus long.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Nombre de répétitions :</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Spécifie combien de fois l'animation sera jouée.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Autoriser les trames delta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Lorsqu'elle est cochée, les pixels inchangés sont tentés d'être détectés lors de l'encodage.&#x0d;&#x0a;Lors de l'utilisation avec un quantificateur optimisé, cette option permet à une image d'avoir plus de 256 couleurs.&#x0d;&#x0a;Cette option est ignorée si le quantificateur n'utilise pas la transparence et que l'option Autoriser les images coupées n'est pas cochée.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Tolérance Delta :</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Spécifie la tolérance maximale lors de la détection de pixels modifiés.&#x0d;&#x0a;Si 0, aucune différence n'est tolérée.&#x0d;&#x0a;Si 255, il peut y avoir des images (ou même toutes ) qui sont ajoutés sans contenu. La plage raisonnable est comprise entre 0 et 16 pour un quantificateur optimisé. Ceux avec des couleurs fixes peuvent être utilisés avec des valeurs un peu plus grandes avec tramage.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Si la tolérance delta est trop élevée, le résultat peut être de mauvaise qualité. Cliquez pour réinitialiser la tolérance delta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Autoriser les frames tronquées.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Lorsque cette case est cochée, l'encodeur est autorisé à ajouter des images plus petites que la résolution réelle.&#x0d;&#x0a;Si Autoriser les images delta n'est pas coché, alors permet uniquement de couper les bordures transparentes possibles.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Autoriser les images delta est ignoré car la configuration actuelle n'utilise pas alpha et Autoriser les images coupées n'est pas cochée. Cliquez pour activer les cadres tronqués.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Autoriser les images coupées n'a aucun effet car la configuration actuelle n'utilise pas alpha et Autoriser les images delta est décochée. Cliquez pour activer les cadres delta.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Options Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Prédiction:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Aucune</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Moyenne</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Mixte</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Boucle Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Détecter les pixels inchangés.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Peignez tous les pixels non modifiés avec une couleur transparente.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Préréglage :</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Aucune</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Par défaut</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Image</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Photo</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Étirage</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Icône</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Texte</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Utilisez le mode sans perte.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Avancé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Méthode de configuration des paramètres de l'encodeur:&#10;Normal : utilisez les commandes d'interface utilisateur standard.&#10;Avancé : utilisez une zone de texte pour saisir les paramètres.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">L'encodeur vidéo, responsable de la&#10;conversion des pixels bruts en fichier de sortie.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Préréglage :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Aucune</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Très lent</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Plus lent</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Lent</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Médium</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Plus rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Très rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Qualité</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Équilibré</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Rapide</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Par défaut</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Sans perte</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Sans perte (haute performance)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Haute performance</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Haute qualité</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Disque Blu-ray</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Faible latence</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Faible latence (haute performance)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Faible latence (haute qualité)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Vitesse d'encodage par rapport au taux de compression,&#10;préréglages les plus lents peuvent vous donner une meilleure compression&#10;(qualité par taille de fichier).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Acc. matériel :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Désactivé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Activé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Sélection auto</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Contrôle l'utilisation du matériel dédié (graphiques vidéo).&#10;Désactivé : n'utilise pas de matériel dédié.&#10;Activé : utilise du matériel dédié et vous permet de sélectionner des encodeurs spéciaux.&#10;Auto : utilise du matériel dédié et automatiquement sélectionne le bon encodeur, si possible.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Format pixel :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatique</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Méthode de synchronisation vidéo.&#10;Auto : choisit entre 1 et 2 en fonction des capacités du multiplexeur (format).&#10;Passthrough : chaque image est transmise avec son horodatage à l'encodeur.&#10;Constante : les images seront dupliquées et supprimées pour obtenir exactement la fréquence d'images constante demandée.&#10;Variable : les images sont transmises avec leur horodatage ou supprimées de manière à empêcher que 2 images aient le même horodatage.&#10;Abandon : comme relais, mais détruit tous les horodatages , permettant à l'encodeur de générer de nouveaux horodatages basés sur la fréquence d'images.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passer à travers</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Cadence d'image constante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Fréquence de trame variable</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Laissez tomber</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Fréquence d'images :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Personnalisé</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Passe:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constant Rate Factor.&#10;Paramètre de contrôle de la qualité et du débit.&#10;Laissez ce champ vide si vous ne souhaitez pas définir cette propriété.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Niveau qualité :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">De plus petites valeurs signifient une meilleure qualité.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Débit binaire :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Débit binaire cible de la vidéo.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Mode débit :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constant</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variable</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Taux minimum :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Tolérance de débit binaire minimale.&#10;Très utile lorsque vous utilisez le mode CBR.&#10;Laissez-le vide ou défini sur zéro &#10;si vous ne souhaitez pas définir cette propriété.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Taux maximum :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Tolérance maximale de débit binaire.&#10;Nécessite que la taille de la mémoire tampon soit également définie.&#10;Laissez-la vide ou définie sur zéro &#10;si vous ne souhaitez pas définir cette propriété.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Taille du tampon :</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Taille du tampon de contrôle de débit.&#10;Laissez-le vide ou défini sur zéro &#10;si vous ne souhaitez pas définir cette propriété.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Archiver les images en fichier Zip.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exporte les images dans un dossier zippé.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Compressez l'image.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Compressez les données d'image à l'aide de l'algorithme RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Enregistrez les données de la chronologie.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exporte le minutage des images, au lieu de seulement les images.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Options d'enregistrement</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Exporter en partie.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Enregistrez le fichier dans un dossier de votre choix.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Écraser?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Avertir</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Avertit seulement qu'un autre fichier existe avec le même nom.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Prompt</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Demande si l'utilisateur veut écraser le fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Autoriser</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Écrase simplement le fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Enregistrer aussi en tant que projet (même dossier, même nom de fichier).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Téléchargez le fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copier dans le presse-papier.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Fichier</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copie le fichier de sortie dans le presse-papiers.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Chemin du dossier</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copie le chemin du dossier du fichier de sortie dans le presse-papier.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Chemin du fichier</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copie le chemin du fichier de sortie dans le presse-papier.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Lien</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copie le lien généré par le service de téléchargement dans le Presse-papiers.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Exécuter des commandes post-encodage.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Tapez les commandes à exécuter après le codage.&#x0d;Pour exécuter plusieurs commandes, tapez chacune d'elles sur une ligne séparée.&#x0d;Macros:&#x0d;{p} = Chemin du fichier de sortie.&#x0d;{f} = Chemin du dossier de sortie.&#x0d;{u} = URL du fichier chargé.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Export partiel</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Mode:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Choisissez la méthode d'exportation partielle.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expression</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exporte des parties de l'animation en fonction d'une expression simple.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Gamme de trame</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exporte seulement une partie de l'animation dans la plage de trames.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Plage de temps</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">N'exporte qu'une partie de l'animation dans la période.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Sélection</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exporte uniquement les images sélectionnées dans la chronologie.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Aucune frame sélectionnée.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 frame sélectionné.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} frames sélectionnés.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Depuis:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">De:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Expression:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Tapez les numéros d'images séparés par une virgule ou des séquences de frame séparées par un signe moins:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Fichier</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Dossier de destination.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Choisissez le dossier de sortie</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Choisissez l'emplacement.&#x0d;Appuyez sur Shift et cliquez pour&#x0d;sélectionner également le nom du fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Format de fichier</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Nom du fichier. Insère la date et l'heure à la place de '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Incrémenter le numéro de fichier</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Décrémenter le nombre de fichiers</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Un fichier portant le même nom existe déjà.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Enregistrer dans le presse-papiers.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Vous devez sélectionner où enregistrer le fichier (dans un dossier, dans le presse-papiers ou le télécharger ailleurs).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Vous n'avez pas choisi l'extension de fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Lors de la sélection du mode avancé, vous devez taper les paramètres dans le champ paramètres.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Les paramètres spéciaux {I} (entrée) et/ou {O} (sortie) manquent dans le champ paramètres.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Pour exécuter une commande post-encodage, vous devez saisir quelque chose dans le champ de texte des commandes.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Vous devez sélectionner au moins une frame lorsque vous avez l'option d'exporter seulement les frames sélectionnées.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">L'expression pour exporter partiellement le projet est invalide.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Aucun service de téléchargement sélectionné. Vous devez sélectionner une destination.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Vous ne pouvez pas télécharger vers le service sélectionné. L'application n'a pas été autorisée à ce connecter. Rendez-vous dans 'Options>Services de téléchargement' pour autoriser cette application.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Vous ne pouvez pas sélectionner l'option de copie du lien car vous n'avez pas configuré le téléchargement du fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Vous devez sélectionner un dossier de sortie.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Le dossier de sortie n'existe pas.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Le dossier de sortie contient un ou plusieurs caractères non valides. S'il vous plaît, sélectionnez un dossier valide.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Vous devez choisir un nom de fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Le nom du fichier de sortie contient un ou plusieurs caractères non valides. S'il vous plaît, sélectionnez un nom de fichier valide.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Nom de fichier déjà utilisé. Utilisez l'option 'Écraser' ou choisissez un autre nom de fichier.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Un projet porte déjà le même nom de fichier. Réglez pour écraser ou choisir un autre nom de fichier ou dossier.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">L'opération a été annulée.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Chargement</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Sélectionnez le préréglage de chargement, qui contient des détails sur le service utilisé pour le chargement.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Ce service de chargement impose des limites.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Ajoutez une nouvelle présélection de chargement.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Éditer paramètres prédéfinis de téléchargement.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Afficher l'historique des chargements de ce préréglage.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Retire la présélection de chargement actuellement sélectionnée.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Choisissez une présélection de chargement</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Choisissez-en un dans cette liste.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Aucun préréglage de chargement n'est disponible pour ce format</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Ajoutez un préréglage à l'aide du bouton ci-dessous.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Suppression du préréglage de chargement</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Êtes-vous sûr de vouloir supprimer le préréglage de chargement ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Cette action est irréversible.&#10;&#10;Voulez-vous supprimer le préréglage de chargement sélectionné ?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Exportation d'images</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Êtes-vous sûr de vouloir exporter les images ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Cette action exportera {0} images directement dans le dossier sélectionné.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Écraser</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Souhaitez-vous écraser le fichier ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Un fichier nommé '{0}' existe déjà dans ce dossier.\\r\\nVoulez-vous l'écraser ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Voulez-vous écraser les fichiers ?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Un ou plusieurs fichiers portant le même nom existent déjà dans ce dossier.\\r\\nSouhaitez-vous les écraser ?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Aperçu des commandes</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Commande</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Chemin d'entrée</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Chemin de sortie</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Retour d'information</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Envoyer</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Aperçu</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Envoyer des commentaires</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Titre</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Message</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Si vous êtes confronté à un bug, n'oubliez pas de m'expliquer comment vous l'avez obtenu, étape par étape.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Type de retour</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Suggestion</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problème/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Votre e-mail</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Vous devez saisir un titre pour votre commentaire.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Vous devez saisir un message.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Vous devez taper votre e-mail, pour recevoir une réponse du développeur.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Envoi en arrière-plan... Cette fenêtre se fermera sous peu.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Pièces jointes (en option, 20 Mo maximum)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Ajouter des pièces jointes</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Supprimer toutes les pièces jointes</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Je peux comprendre l'anglais</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">et le portugais (brésilien et européen).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Voici ce que vous allez envoyer, ainsi que toutes les pièces jointes.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Dépanner</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Y a-t-il une fenêtre manquante ?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Si l’une des fenêtres est manquante (en dehors de l’écran),&#x0d;utilisez les options ci-dessous pour réinitialiser sa position actuelle et sa position de démarrage.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Voici où chaque fenêtre est actuellement située:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Voici où chaque fenêtre s'ouvrira la prochaine fois:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Déplacez toutes les fenêtres sur l'écran principal.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Réinitialiser la position de démarrage de toutes les fenêtres.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Italique</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Oblique</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Noir</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Caractère gras</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Caractère gras moyen</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Noir prononcé</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Caractère gras prononcé</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Très fin</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Très lourd</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Fin</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Moyen</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Régulier</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Caractère gras léger</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Mince</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Extrêmement noir</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Caractère gras très fort</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Extrêmement fin</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Haut</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Centré</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Bas</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Étendue</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">À gauche</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centré</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">À droite</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Verticale</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Gauche</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Droite</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Centré</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Justifié</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Aucun</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Souligné</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Barré</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Surligné</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Ligne de base</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.he.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">אישור</s:String>\n    <s:String x:Key=\"S.Back\">חזור</s:String>\n    <s:String x:Key=\"S.Cancel\">ביטול</s:String>\n    <s:String x:Key=\"S.Yes\">כן</s:String>\n    <s:String x:Key=\"S.No\">לא</s:String>\n    <s:String x:Key=\"S.Add\">הוסף</s:String>\n    <s:String x:Key=\"S.Edit\">עריכה</s:String>\n    <s:String x:Key=\"S.Id\">פריט</s:String>\n    <s:String x:Key=\"S.Title\">כותרת</s:String>\n    <s:String x:Key=\"S.Description\">תיאור</s:String>\n    <s:String x:Key=\"S.SelectColor\">לחץ כאן כדי לבחור צבע</s:String>\n    <s:String x:Key=\"S.Documentation\">לחץ כדי לנווט אל התיעוד</s:String>\n    <s:String x:Key=\"S.Suppress\">דיכוי</s:String>\n    <s:String x:Key=\"S.Preview\">תצוגה מקדימה</s:String>\n    <s:String x:Key=\"S.Size\">גודל</s:String>\n    <s:String x:Key=\"S.Background\">רקע</s:String>\n    <s:String x:Key=\"S.Color\">צבע:</s:String>\n    <s:String x:Key=\"S.Delay\">עיכוב</s:String>\n    <s:String x:Key=\"S.DelayMs\">עיכוב:</s:String>\n    <s:String x:Key=\"S.ValueMs\">ערך -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">ערך קנה מידה:</s:String>\n    <s:String x:Key=\"S.Margin\">שולים:</s:String>\n    <s:String x:Key=\"S.Padding\">ריפוד:</s:String>\n    <s:String x:Key=\"S.MinHeight\">גובה מינימלי:</s:String>\n    <s:String x:Key=\"S.AndOr\">ו/או</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">אוי רק זה לא, האפליקציה קרסה :(</s:String>\n    <s:String x:Key=\"S.Required\">שדה חובה</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">תלות חסרה</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">אינו קיים Net Framework 4.8 </s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">על מנת להשתמש באפליקציה כראוי, עליך להוריד את הגירסה הנכונה של .Net Framework. &#10; האם ברצונך לפתוח את דף האינטרנט להורדתו?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">מותר רק מופע אחד</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">האפליקציה כבר פועלת</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">אמור להיות שם ScreenToGif כבר פועל, אך כנראה שאין חלון פתוח. בדוק את מגש המערכת, סמל ScreenToGif </s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">שמירת ההגדרות</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">האם תרצה לנסות לשמור אותו שוב?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">נראה של ScreenToGif אין מספיק הרשאות לשמירת ההגדרות בדיסק. &#10; &#10; האם תרצה לנסות שוב, אך הפעם באמצעות הרשאות ניהול?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">יציאה מ- ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">האם אתה בטוח שאתה רוצה לצאת?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">כל החלונות ייסגרו וסמל המגש יוסר.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">מתג גרפיקה מתג</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">עבור למתאם הגרפיקה הנכון כדי ללכוד את המסך שנבחר</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">עקב מגבלה ב- DirectX, ScreenToGif חייב להיות פועל על אותו מתאם גרפי כמו המסך שצולם.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">החלף את ערכת המתאם הגרפי עבור ScreenToGif על ידי פתיחת הגדרות Windows>מערכת>תצוגה>הגדרות גרפיקה, או על ידי לחיצה על הקישור למטה.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">החלף את מתאם הגרפיקה עבור ScreenToGif על ידי פתיחת הגדרות הגרפיקה של מתאם הגרפיקה שלך.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">פתח את הגדרות Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">מרחב</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">לחצן ימיני</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">הקלטת מסך חדשה</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">הקלטת מצלמת רשת חדשה</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">הקלטת לוח חדשה</s:String>\n    <s:String x:Key=\"S.Exit\">יציאה</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">הקלטת מסך חדשה</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">הקלטת מצלמת רשת חדשה</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">הקלטת לוח חדשה</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">אנימציה חדשה</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">הכנס הקלטת מסך</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">הכנס הקלטת מצלמת רשת</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">הכנס הקלטת לוח</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">הכנס ממדיה (תמונות וסרטונים)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">שמור כ ...</s:String>\n    <s:String x:Key=\"S.Command.Load\">טען קבצים (תמונות, סרטונים ופרויקטים)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">טען פרויקטים אחרונים</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">מחק את הפרויקט הנוכחי</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">ביטול עיכוב של מסגרות</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">הגדל/הקטן עיכוב של מסגרות</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">עיכוב קנה מידה של מסגרות</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">הגדר זום ל 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">התאם את החלון לגודל המסגרת</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">התאם את התמונה לגודל החלון הזמין</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">בחר את המסגרת הראשונה</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">בחר את המסגרת הקודמת</s:String>\n    <s:String x:Key=\"S.Command.Play\">הפעל את האנימציה</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">בחר את המסגרת הבאה</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">בחר את המסגרת האחרונה</s:String>\n    <s:String x:Key=\"S.Command.Undo\">ביטול הפעולות</s:String>\n    <s:String x:Key=\"S.Command.Redo\">בצע מחדש</s:String>\n    <s:String x:Key=\"S.Command.Reset\">בטל את כל השינויים בפרויקט</s:String>\n    <s:String x:Key=\"S.Command.Copy\">העתק את המסגרות שנבחרו ושמור אותן בלוח</s:String>\n    <s:String x:Key=\"S.Command.Cut\">גזור את המסגרות שנבחרו ושמור אותן בלוח</s:String>\n    <s:String x:Key=\"S.Command.Paste\">הדבק את המסגרות מהלוח</s:String>\n    <s:String x:Key=\"S.Command.Delete\">מחק את כל המסגרות שנבחרו</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">מחק את כל המסגרות הקודמות</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">מחק את כל המסגרות הבאות</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">הסר כפילויות</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">הפחת את מספר המסגרות</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">אנימציה הפוכה</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">גורם לאנימציה ללכת קדימה ואחורה</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">העבר את המסגרת שנבחרה שמאלה</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">העבר את המסגרת שנבחרה ימינה</s:String>\n    <s:String x:Key=\"S.Command.Resize\">שנה את גודל כל המסגרות</s:String>\n    <s:String x:Key=\"S.Command.Crop\">חיתוך כל המסגרות</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">הפוך או סובב את המסגרות</s:String>\n    <s:String x:Key=\"S.Command.Caption\">הוסף כיתוב</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">הוסף טקסט צף חופשי</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">הוסף מסגרת עם כותרת עליה</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">מוסיף מקשים שנלחצו במהלך ההקלטה</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">צייר טפסים בחינם</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">הוסף צורות</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">לחיצות עכבר</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">בחר תמונה והוסף כסימן מים</s:String>\n    <s:String x:Key=\"S.Command.Border\">הוסף גבולות</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">הוסף צל טיפה</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">הסתר חלקים רגישים במסגרות שלך</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">השתמש בכלי הציור כדי לבחור אילו חלקים של המסגרת לא אמורים להישאר סטטיים לאורך האנימציה</s:String>\n    <s:String x:Key=\"S.Command.Progress\">סרגל התקדמות או טקסט עם פרטי הפעלה</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">בחר את כל המסגרות</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">נווט למסגרת לפי אינדקס</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">הפוך את בחירת המסגרות</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">בטל את הבחירה בכל המסגרות</s:String>\n    <s:String x:Key=\"S.Command.Fade\">מעבר דהייה</s:String>\n    <s:String x:Key=\"S.Command.Slide\">מעבר שקופיות</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">נקה את כל הקידודים שהושלמו</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">העבר למעלה</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">זז למטה</s:String>\n    <s:String x:Key=\"S.Command.Add\">הוסף</s:String>\n    <s:String x:Key=\"S.Command.Open\">פתח</s:String>\n    <s:String x:Key=\"S.Command.Edit\">ערוך את הפריט שנבחר</s:String>\n    <s:String x:Key=\"S.Command.Save\">שמור את הפריט שנבחר</s:String>\n    <s:String x:Key=\"S.Command.Remove\">הסר את הפריט שנבחר</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">הצג הסטוריה</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - הפעלת</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">הקלטה</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">פותח את מקליט המסך &#10; שם תוכל להתחיל בקלות להקליט את המסך שלך.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">מצלמת רשת</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">פותח את מקליט מצלמת האינטרנט.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">לוח</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">פותח את מקליט הלוח, &#10; שבו תוכל להתחיל להקליט את הציורים שלך.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">עריכה</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">פותח את חלון העורך, הנקודה המרכזית של יישום זה, &#10; שבו תוכל להתחיל ולערוך הקלטה חדשה.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">אפשרויות</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">קיימת גרסה חדשה</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">מוריד את הגרסה האחרונה של ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - עדכוני</s:String>\n    <s:String x:Key=\"S.Updater.Header\">קיים עדכון חדש</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">מהדורה חדשה!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">גרסה חדשה זמינה, גרסה {0}! &#x0d; לחץ כאן לפרטים נוספים.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">גירסא</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">נייד</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">מתקין</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">מה חדש?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">תיקוני באגים:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">גרסה חדשה זמינה להורדה. &#x0d; האם תרצה לפתוח את הדפדפן כדי להוריד אותו?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">הפעל את האפליקציה לאחר העדכון.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">הורדה</s:String>\n    <s:String x:Key=\"S.Updater.Install\">התקן</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">התקן ידנית</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">מורדן ...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">לא ניתן היה להציג את פרטי ההורדה.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">לא ניתן היה להוריד את העדכון.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">עליך להמתין לסיום כל הקידודים לפני העדכון.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - הורדת</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">הורדה</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} מתוך {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - אפשרויות</s:String>\n    <s:String x:Key=\"S.Options.App\">יישום</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">הקלטה</s:String>\n    <s:String x:Key=\"S.Options.Editor\">עריכה</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">משימות</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">קיצורי דרך</s:String>\n    <s:String x:Key=\"S.Options.Language\">שפה</s:String>\n    <s:String x:Key=\"S.Options.Storage\">אחסון</s:String>\n    <s:String x:Key=\"S.Options.Extras\">תוספות</s:String>\n    <s:String x:Key=\"S.Options.Upload\">ענן</s:String>\n    <s:String x:Key=\"S.Options.Donate\">לתרום</s:String>\n    <s:String x:Key=\"S.Options.About\">אודות</s:String>\n    <s:String x:Key=\"S.Options.Other\">אחר</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">מקש קיצור חסר להמשך הסמן</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">כדי להשתמש בתכונה הבאה של סמן העכבר, עליך להגדיר מקש קיצור כדי להחליף אותו בעת הצורך.</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">תלות חסרות ללכידת מסך</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">כדי ללכוד את המסך באמצעות ממשק ה- API לשכפול שולחני, עליך להוריד את ספריות SharpDx.</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">הפעלה</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">התחל &#10; ידנית</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">האפליקציה תתבצע רק כאשר תעשה זאת באופן ידני.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">התחל עם &#10; Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">האפליקציה תבוצע לאחר הפעלת Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">אי אפשר להחליף בין מצבי אתחול.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">אפשר רק מופע יחיד &#10;</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">תוכל להפעיל את האפליקציה פעם אחת לכל משתמש ולהפעלה, &#10; כלומר, מופעי משתמש או הפעלה שונים יכולים להתקיים במקביל. &#10; כאשר מנסים לבצע את האפליקציה שוב, המופע השני ינסה לתת פוקוס לראשון ולסיים את עצמו.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">אפשר מספר מופעים &#10;</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">תוכל להפעיל את האפליקציה מספר פעמים בו זמנית, ללא הגבלה.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">התחל ממוזער למגש המערכת.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(סמל מגש המערכת יהיה גלוי בזמן שאפשרות זו תהיה פעילה)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">התחל שימוש:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">חלון אתחול</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">מקליט מסך</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">מקליט מצלמת אינטרנט</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">מקליט לוח</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">חלון העורך</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(חלון שמופיע לראשונה כאשר האפליקציה מתחילה)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">נושא</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">ערכת צבעים:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">קל מאוד</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">אור</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">בינוני</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">אפל</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">כהה מאוד</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">עקוב אחר המערכת</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">מותאם אישית</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">צבעים לדוגמא.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">סמל מגש המערכת</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">הצג את האפליקציה במגש המערכת (אזור הודעות).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">שמור את האפליקציה פתוחה גם אם כל החלונות סגורים.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">אל תעשה כלום</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">פתח חלון</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">אין חלון</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">מזעור/שחזור כל החלונות</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">מזעור כל החלונות</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">שחזר את כל החלונות</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">קליק שמאלי:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">קליק שמאלי (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">קליק אמצעי:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">חלון:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">אחרת, נפתח:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">כללי</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">פתרון לעקיפת התאונה 'לא מספיק מכסה ...'.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(ניסיוני)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">שאל אותי לפני סגירת האפליקציה (באמצעות הפקודה 'יציאה').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">השבת האצת חומרה.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(ממשק המשתמש יוצג באמצעות מצב תוכנה)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">בדוק אם קיימים עדכוני תרגום.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(תרגומים מעודכנים יורדו ויתקינו באופן אוטומטי)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">בדוק אם קיימים עדכונים בעת ההפעלה.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">התקן עדכונים באופן אוטומטי לאחר סגירת האפליקציה.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">כפה על הורדת הגרסה הניידת.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(דורש התקנה ידנית על ידי ביטול רוכסן והחלפת קובץ ההפעלה)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">אילץ את העדכון לפעול עם הרשאות גבוהות.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">בקש ממני לפני תחילת ההתקנה.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">ממשק</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">ישן</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">חדש</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">תדירות לכידה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">ידני</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">כל מסגרת תילכד ידנית על ידך על ידי לחיצה על כפתור הלכידה או קיצור מקשים מקביל.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">אינטראקציה של משתמשים</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">מסגרות יתפסו בכל פעם שאתה לוחץ או מקליד משהו.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">לשנייה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">מסגרות יתפסו על בסיס 'לשנייה', &#10; בהתחשב במכנה המסגרת המוגדר במסך המקליט.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">לדקה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">מסגרות יתפסו על בסיס 'לדקה' (timelapse), &#10; בהתחשב במכנה המסגרות המוגדר על מסך המקליט.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">לשעה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">מסגרות יתפסו על בסיס 'לשעה' (timelapse), &#10; בהתחשב במכנה המסגרת המוגדר במסך המקליט.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">עיכוב ההפעלה:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(ב- ms, כל מסגרת שצולמה תוגדר לעיכוב זה)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">כל מסגרת תצלם במרווח של {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">מצב לכידה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">השתמש בשיטת הלכידה הישנה יותר, שהיא איטית יותר וייתכן שאינה פועלת ללכידת משחקים, &#10; אך אינה דורשת תוספים נוספים.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">השתמש בשיטת לכידת API לשכפול שולחן העבודה, שהיא מהירה יותר &#10; מסוגלת ללכוד משחקים במסך מלא, אך דורשת את התוסף של SharpDx ו- Windows 8 ומעלה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">שמור בקובץ &#10;</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">כל מסגרת שצולמה תישמר ישירות כתמונה בדיסק.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">זיכרון ומטמון</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">כל פריים שצולמו יאוחסנו כמערך פיקסלים בזיכרון תחילה (עשוי להיות דחוס לפני).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">דחיסה:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">אופטימלי</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(דחיסה איטית יותר אך סביר יותר אופטימלית)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">המהיר ביותר</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(דחיסה מהירה יותר אך כנראה פחות אופטימלית)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">אין דחיסה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(אין לבצע דחיסה בעת לכידת מסגרות)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">גודל מטמון:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(ב- MB. לאחר שהגיע לגודל זה, הנתונים ייכתבו/ישטפו לדיסק)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">מנע צילום של מסגרות שחורות מלאות.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(מונע מ- BitBlt עם מטמון זיכרון לגרום לתוצאה של מסגרות עם כל הפיקסלים בשחור)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">הצג את סמן העכבר בהקלטה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">בחר את צבע הסמן</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">קצב פריימים קבוע.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(עיכוב מתמיד שאינו משתנה עם השהיית הקלטה)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">ללכוד רק כאשר משהו משתנה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(מסגרת תתפס רק כאשר משהו ישתנה בתוך אזור הלכידה)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">שפר את ביצועי הלכידה בחיבור שולחן עבודה מרוחק.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(מבטל לכידת חלון בשכבות)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">כפה על ניקוי הזיכרון במהלך הלכידה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(מפחית את השימוש בזיכרון במהלך הצילום, אך מפחית את הביצועים)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">הנחיות</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">כלל השלישים</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">לחץ כדי להחליף את התצוגה &#10; של כלל ההנחיה של שליש.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">שערה</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">לחץ כדי להחליף את התצוגה &#10; של קו מנחה על שער השיער.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">ההנחיות יוצגו רק כשהמקליט מושהה או מופסק.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">הסתר את שורת הכותרת (מצב דק).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">הפעל את זכוכית מגדלת המסך.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(הוא מאפשר זכוכית מגדלת בעת בחירת אזור ההקלטה)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">הפעל את גבול אזור המסך במהלך הבחירה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(הנפשה באמצעות סגנון 'הנמלים הצועדות')</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">הפעל את חלונית הבחירה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(מציג מעטר ליד פינת הבחירה, ומאפשר את תנועת אזור ההקלטה)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">מצב קומפקטי.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(מציג גרסה קטנה יותר של לוח הפקודות של המקליט)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">הצג את כפתור המחיקה גם בזמן ההקלטה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(בדרך כלל הוא גלוי רק בזמן ההשהיה)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">שפר את ביצועי בחירת המסך.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(מפחית את הפיגור במהלך בחירת המסך על ידי הצגת תצוגה סטטית של המסך)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">זכור את הגודל הקודם של אזור ההקלטה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">זכור את המיקום הקודם של אזור ההקלטה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">השתמש בספירה לאחור לפני התחלה.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(תוך שניות הוא ממתין לפני שמתחילים ללכוד)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">הפעל את הסמן הבא.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(אזור ההקלטה ימקם את עצמו מחדש על סמך מיקום הסמן)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(שולי מאגר בפיקסלים, כאשר אזור ההקלטה מתחיל להתמקם מחדש)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(שולי חיץ נוספים בפיקסלים, שם ממשק המשתמש מתחיל להסתיר)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">שאל אותי לפני מחיקת ההקלטה.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">רקע תצוגה מקדימה</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">גודל רשת:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">קטן מאוד</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">קטן</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">בינוני</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">גדול</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">גדול מאוד</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">אני אוהב ריבועים גדולים</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">אני עיוור</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">מותאם אישית</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">גובה:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">רוחב:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">הגשת בקשה</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">צבע בסיס</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">אפילו צבע</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">צבע מוזר</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">הצג את הקידודים בחלון מופרד.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">הרחב את שורת הכותרת (כרום חלון).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">התאם אוטומטית את גודל החלון בהתאם לגודל המסגרת, מיד לאחר הטעינה.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">התאם אוטומטית את זום המסגרת בהתאם לגודל החלון, מיד לאחר הטעינה.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">שאל אותי לפני מחיקת מסגרות.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">שאל אותי לפני שאתה זורק פרויקט.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">שאל אותי לפני סגירת העורך (אם יש פרויקט שנפתח).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">אפשר לחיצה משולשת לבחירת הטקסט.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">צייר את קווי המתאר של הכיתובים מחוץ לאותיות.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">זרוק מסגרות במידת הצורך.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(דלג על מסגרת אם התצוגה המקדימה לא מצליחה להציג אותה בזמן)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">דלג על מסגרת אם התצוגה המקדימה לא מצליחה להציג אותה בזמן.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">הטיל גבול להיסטוריה של ביטול/חזרה.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(פעולות ישנות יותר יוסרו כשיגיעו למגבלה)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(מספר הפעולות המרבי המאוחסן)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">סנכרן את תיקיית הפלט בין הגדרות קבועות מראש.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(הגדרות קבועות מראש ישתמשו באותו נתיב פלט)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">סנכרן גם את שם הקובץ.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(הגדרות קבועות מראש ישתמשו גם באותו קובץ)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">סנכרן רק בין הגדרות קבועות מראש של אותו סוג קובץ.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(רק סנכרון מראש של אותו סוג קובץ יהיה מסונכרן)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">משימה אוטומטית</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">רשימת משימות אוטומטיות</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">משימה</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">פרטים</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">מופעל</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">הפעל משימה זו.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">בחר משימה</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">בחר משימה למעלה</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">משימות אלה מבוצעות ברצף מראש הרשימה לתחתית.&#10;זה קורה כאשר אתה פותח פרוייקט לראשונה באמצעות העורך.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">גלובלית</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">מקליט מסך:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(פותח את מקליט המסך המוגדר כברירת מחדל)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">מקליט מצלמת רשת:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(פותח את מקליט מצלמת האינטרנט)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">מקליט לוח:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(פותח את מקליט הלוח כך שתוכל להקליט את הציורים שלך)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">עורך:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(פותח חלון עורך נוסף)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">אפשרויות:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(פותח את חלון האפשרויות. ניתן לפתוח אחת בכל פעם)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">יציאה:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(סוגר את כל החלונות ומסיר את האפליקציה ממגש המערכת)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">הקלטות</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">התחל/השהה:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(הוא מתחיל או מושהה את ההקלטה. הוא משמש לצילום תמונות אם מצב הצילום מופעל)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">עצור:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(זה עוצר את ההקלטה ופותח את העורך)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">מחק:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(מבטל את ההקלטה הפעילה כשהיא מושהית)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">הסמן הבא:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(החלפת ההתאמה של אזור ההקלטה בהתאם למיקום הסמן)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">השבת את הדברים הבאים:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(משבית באופן זמני את התאמת אזור ההקלטה על סמך מיקום הסמן, מתקבלים רק מקשי שינוי)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">לחץ כדי להגדיר את המיקוד של המקלדת ולאחר מכן הקש על המקשים והשינויים הרצויים.&#10; שילובי מקשים מסוימים אינם מותרים.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">שפת האפליקציה</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">זיהוי אוטומטי</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">שפת מערכת ההפעלה הנוכחית (אם קיימת)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">האם תרצה לתרגם את האפליקציה שלי?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">לחץ כאן לקריאת הנחיות התרגום והורדת אפליקציית המתרגם.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">לאחר מכן,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">לחץ כאן כדי לייבא</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">ובדוק את התרגום שלך.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">שלח לי אותו באמצעות</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">דוא\"ל (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">כשתסיים לתרגם אותו.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">לחץ כדי לפתוח דף אינטרנט עם ההנחיות.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">פותח את דף הייבוא</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">פותח את אפליקציית הדוא\"ל שלך</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">סטטוס</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">עוצמת הקול:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} ללא {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">בדוק שוב כמה מקום נותר.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">נקה את תיקיית המטמון. &#10; תוכל להחליט אם ברצונך לשמור על פרויקטים אחרונים או לא.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">שטח פנוי בכונן הקשיח שנבחר כעת. אנא, נקה את תיקיית המטמון או שנה את המיקום.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">אי אפשר לאחזר את פרטי הכונן.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">אין קובץ</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">קובץ {0: ##, ## 0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0: ##, ## 0} קבצים</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">אין תיקיות</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0: ##, ## 0} תיקייה</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0: ##, ## 0} תיקיות</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} בשימוש</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">נתיב</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">מטמון:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">בחר את המיקום של המטמון עבור קבצים זמניים</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">יומנים:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">בחר את המיקום של קבצי יומן השגיאות.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">עיון בתיקיה שנבחרה.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">מיקום ההגדרות</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">נתוני אפליקציה:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">מקומי:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">זה לא קיים</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">צור קובץ הגדרות מקומי ריק.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">הסר את קובץ ההגדרות.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">פתח את התיקיה שבה נמצא קובץ ההגדרות. &#x0d; החזק Ctrl תוך לחיצה כדי לפתוח את הקובץ, במידת האפשר.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• דפוס טעינת הגדרות: ברירת מחדל ◄ AppData ◄ Local.&#x0d;• אם אין קובץ הגדרות בתיקייה Local, האפליקציה מחפשת בתוך תיקיית AppData, ברירת המחדל משמשת אם אין קובץ הגדרות. &#x0d;• אם אין הגדרות מקומיות, כל ההגדרות נשמרות בקובץ ההגדרות של AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">מחק את כל הקבצים מהמטמון בעת סגירת האפליקציה.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">שאל אותי לפני מחיקת כל הקבצים מהמטמון.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">הסר באופן אוטומטי פרויקטים ישנים.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">בעת פתיחת האפליקציה, משימת רקע תמחק את כל הפרויקטים הסגורים הישנים מכמות הזמן שהוגדרה.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(בימים, כל פרויקט סגור הישן מזה יימחק לאחר פתיחת האפליקציה)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - נקה מטמון</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">האם ברצונך לנקות את תיקיית המטמון?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">כאשר אתה יוצר הקלטה או פותח משהו לעריכה, פרויקט נוצר ומאוחסן בתוך תיקיית המטמון.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">האם ברצונך להסיר פרויקטים אלה מתיקיית המטמון?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">אל תסיר פרויקטים אחרונים.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(רק הפרויקטים הישנים מ- {0} ימים, שאינם בשימוש כרגע, יוסרו)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(כל הפרויקטים, שאינם בשימוש כרגע, יוסרו)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">פרוקסי</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">מצב:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">נכה</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">ידני</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">מערכת</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(משתמש בפרוקסי המערכת)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">מארח:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">נמל:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">שם משתמש:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">סיסמא:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">העלה הגדרות קבועות מראש</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">שירות</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">כותרת</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">תיאור</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">מופעל</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">שירות העלאה</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">בחר שירות</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">בחר שירות העלאה למעלה</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">מותאם אישית</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">הפעל הגדרה מוקדמת זו.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">פרטים</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">שם:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">תיאור:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">מצב:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">אנונימי</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">מאומת</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">הרשאה</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">קבל אסימון</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">הדבק כאן את אסימון OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">שם משתמש:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">סיסמא:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">אישור</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">שם המשתמש והסיסמה לא יישמרו.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">אפשרויות</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">השתמש בקישורים ישירים.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">אלבום</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">עליך לתת להגדרה זו שם ייחודי.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">השם כבר בשימוש על ידי הגדרה מוקדמת נוספת להעלאה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">במצב אימות, עליך לסיים את תהליך האימות.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">עליך לספק את שם המשתמש והסיסמה שלך כדי לאשר יישום זה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">לא ניתן היה לקבל את אסימון ההרשאה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">כדי לאשר יישום זה, עליך לספק את אסימון ההרשאה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">ההרשאה נכשלה. בדוק אם הכל תקין ונסה שוב בעוד מספר שניות.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">לא ניתן היה לטעון את רשימת האלבומים.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">ההרשאה הושלמה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">לא מורשה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">תוקף האישור פג ב- {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">הרשאה תקפה עד {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">קבל קישורים עם סיומת Gifv במקום Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">העלה קבצי GIF לאלבום שנבחר.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">אלבום:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">שאל אותי לפני העלאה</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">טען מחדש את רשימת האלבומים.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">ברירות מחדל</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">בקש ממני למלא את פרטי ההעלאה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">סוג כתובת אתר:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">בחר אלבום (אופציונלי)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">אם תרצה, תוכל לבחור באלבום היעד:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">פרטי העלאה (אופציונלי)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">העלה פרטים</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">כותרת:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">תיאור:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">תגים:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">הפרד תגים באמצעות חצי נקודתיים (;)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">הצג רק לאנשים המגיעים באמצעות קישור ישיר.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">היסטוריית העלאות</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">תאריך</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">קבוע מראש</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">הצלחת?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">מחק ערך היסטוריה.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">קישור:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">איכות נמוכה יותר:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">קישור מחיקה:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">האם אתה בטוח שברצונך למחוק את ערך ההיסטוריה?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">לא ניתן לבטל פעולה זו. &#10; &#10; האם ברצונך למחוק את ערך ההיסטוריה שנבחר?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">כלים חיצוניים זמינים</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">לחץ כאן כדי להוריד &#x0d; {0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">מוריד ...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">הורדת &#x0d; {0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">לחץ כאן כדי לפתוח את המאפיינים של הקובץ.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">אפליקציות שמופצות על ידי חנות Microsoft לא יכולות להוריד אפליקציות אחרות. יהיה עליך להוריד אותן באופן ידני.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">מיקום FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\"> FFmpeg בחר את המיקום של קובץ ההפעלה</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">הפעלה של FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">הנתיב של קובץ ההפעלה FFMpeg מכיל תו אחד או יותר לא חוקיים. אנא בחר מיקום חוקי עבור קובץ ההפעלה.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">מיקום גיפסקי</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Gifski בחר את המיקום של ספריית </s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">ספריית גיפסקי</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">הנתיב של ספריית Gifski מכיל תו אחד או יותר לא חוקיים. אנא בחר מיקום חוקי עבור הספרייה הזו.</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation\">תיקיית SharpDx (SharpDX.dll, SharpDX.Direct3D11.dll ו- SharpDX.DXGI.dll)</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\"> SharpDx בחר את המיקום של ספריות</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">הנתיב של ספריות SharpDx מכיל תו אחד או יותר לא חוקיים. אנא בחר תיקייה תקפה עבור ספריות אלה.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">רישיון FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">רישיון גיפסקי</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">רישיון SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">חסרה הרשאת כתיבה בתיקייה</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">לא ניתן לשמור את ההורדה בתיקייה בגלל היעדר הרשאת כתיבה. &#10; &#10; האם ברצונך להפעיל את ההורדה עם זכויות ניהול כדי לסיים את ההורדה?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">לתרום</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">לתרום $</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">לתרום €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">פותח את אתר Paypal. מטבע נבחר: דולר</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">פותח את אתר Paypal. מטבע נבחר: יורו</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">פותח את אתר Paypal. עליך לבחור את המטבע.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">הירשם</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">לתרום מדי חודש באמצעות Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">לתרום מדי חודש באמצעות Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">משחקי מתנה</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">משחקי מתנה באמצעות Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">משחקי מתנה באמצעות GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">שלם על קפה באמצעות קו-פי.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">מטבעות קריפטו</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">העתק את כתובת BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">תמיכה</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">אם ברצונך לתמוך בפרויקט :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">גרסה:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">בדוק אם קיימים עדכונים</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">כבר יש לך את הגירסה העדכנית ביותר.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">מחבר: ניק מנרין</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">גירסת חנות Microsoft. חלק מהתכונות מושבתות עקב מדיניות שנאכפה.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">איש קשר</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">הצטרף לשרת</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">דף ביקור</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">חדר הצטרפות</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">טכני</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">רישיון:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(זוהי אפליקציה בחינם לחלוטין)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">קוד מקור:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">מדיניות פרטיות:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">תודה גדולה ל</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">כל התומכים שלי, אנשים שסיפקו משוב ו/או תרומות.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">לוקליזציה</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">קבלת קודי שפה ...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">מוכר כ- {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">לא מזוהה</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">המשאב התחתון ביותר הוא המשמש הנוכחי.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">כדי להחיל את המשאב המותאם אישית שלך, העבר אותו לתחתית הרשימה.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">מייצא משאבים ...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">שמור את מילון המשאבים</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">פתח מילון משאבים</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">מילון משאבים</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">מייבא משאב ...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">שם הקובץ אינו פועל לפי תבנית תקפה</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">נסה לשנות שם כמו: StringResources.en.xaml, שם 'en' צריך להיות מוחלף בקוד השפה שלך.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">לא ניתן להוסיף משאב בעל אותו שם</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">נסה להסיר את המשאב החוזר או השתמש בקוד שפה אחר.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">קוד שפה מיותר</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">הקוד\" {0} \"מיותר. נסה להשתמש במקום זאת ב-\" {1} \".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">שפה לא ידועה</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\" {0} \" ומשפחתו לא זוהו כקודי שפה תקפים.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">לא ניתן היה לייבא את משאב הלוקליזציה.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">הקלט</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">השהה</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">המשך</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">עצור</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">מחק</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">הצמד</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">גובה</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">רוחב</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">מעקב הסמן מופעל.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">לחץ כדי לעבור בין מצבי תדירות הלכידה.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">ידני</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">אינטראקציות</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">מקסימום פריימים לשנייה</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">נע בין 1 ל -60 פריימים לשנייה, עם ערכים גבוהים יותר כלומר יותר מסגרות יתפסו. &#10; כל תוספת מייצגת 16 הפרש של אלפיות השנייה.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">מסגרות מקסימליות לדקה</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">נע בין 1 ל -60 סל\"ד, עם ערכים גבוהים יותר כלומר יותר מסגרות יתפסו. &#10; כל תוספת מייצגת שנייה אחת של הפרש.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">מסגרות מקסימליות לשעה</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">נע בין 1 ל 60 קמ\"ש, עם ערכים גבוהים יותר כלומר יותר מסגרות יתפסו. &#10; כל תוספת מייצגת דקת הבדל אחת.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">לחץ או הקש על מקשים כדי ללכוד</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">הצמד לחלון (גרור ושחרר לצלם)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">טרום התחלה:</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (מושהה)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">מפסיק ...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">התחלה מוקדמת ...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">זמן הלכידה שחלף.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">ספירת המסגרות הכוללת:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">נלכד באופן ידני:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">הלכידה מושהית.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">המחשב שלך אינו תומך במצב לכידה מדויק, &#10; מה שאומר שלעולם לא ניתן להשיג את קצב מסגרות היעד.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">לא ניתן היה לצלם את המסך</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">לא ניתן היה ללכוד את המסך. שיטת הלכידה לא החזירה מסגרת לאחר 5 ניסיונות.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">לא ניתן היה להתחיל/להשהות את צילום המסך</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 ואילך נדרש לצילום המסך באמצעות ממשק ה- API של שכפול שולחן העבודה.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">ספריות SharpDx נדרשות על מנת ללכוד את המסך באמצעות ממשק ה- API של שכפול שולחני. עבור לאפשרויות>תוספות להורדתו.</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">אזור</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">בחר אזור</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">חלון</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">בחר חלון</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">מסך</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">בחר מסך</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">מסך פנימי</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">מסך כללי</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">מתאם גרפי: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">רזולוציה: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">רזולוציה מקורית: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1: 0. ##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">גרור כדי להזיז &#10; הבחירה.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">קבל</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">נסה שוב</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">קליק ימני</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">בטל את הבחירה (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">לחץ וגרור כדי לבחור אזור במסך זה</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">לחץ וגרור כדי לבחור אזור</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">לחץ כאן לבחירת חלון זה</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">לחץ כאן לבחירת מסך זה</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">הקש Esc כדי לבטל</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">לחץ על {0} כדי לעצור את ההקלטה</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">חלון המקליט יהיה ממוזער, &#10; תשחזר אותו או הקש על {0} כדי להשהות את הצילום</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">מחק את ההקלטה</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">האם אתה בטוח שאתה רוצה למחוק את ההקלטה?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\"> לא ניתן לבטל פעולה זו, פעולה זו תבטל את ההקלטה, ותסיר את כל הפריימים..</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - מקליט מצלמות אינטרנט</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">לא זוהה מכשיר וידיאו :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">בדוק אם קיימים מכשירי וידאו.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">קנה מידה: {0: 0. ##} x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">שנה את קנה המידה של הסרטון.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - מקליט לוח</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">הקלטה אוטמטית</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">מאפשר הקלטה בזמן ציור.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [החזק]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">בחירת צבע</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">בחר צבע</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">אדום</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">ירוק</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">כחול</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">אלפא</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">משושה</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">צבע ראשוני</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">צבע נוכחי</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">הצבע האחרון</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">גרור את זה לצבעים לדוגמא &#x0d;</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">לחץ וגרור כדי לבחור &#x0d; צבעים מהמסך שלך.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">מציג חריגים</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">פתוח חריג פנימי</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">סוג חריג</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">הודעה</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">מחסנית</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">מקור</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">קרה משהו לא בסדר.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">שלח דוח</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">קבוע מראש</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">מקודד</s:String>\n    <s:String x:Key=\"S.Preset.Name\">שם</s:String>\n    <s:String x:Key=\"S.Preset.Description\">תיאור</s:String>\n    <s:String x:Key=\"S.Preset.Other\">אחר</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">שמור אוטומטית כאשר אפשרות משתנה.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">כל השינויים בהגדרות המוגדרות מראש אלה (הגדרות קידוד ויצוא) צריכות להישמר באופן ידני על ידי לחיצה על כפתור השמירה.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">כל השינויים בהגדרות שנקבעו מראש (הגדרות קידוד ויצוא) יישמרו באופן אוטומטי.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">חלק מהמאפיינים של ברירת מחדל המוגדרת כברירת מחדל הם לקריאה בלבד.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">עליך לתת שם לקביעה מוגדרת מראש זו.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">יש כבר הגדרה מוקדמת עם אותו שם.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">שמירה אוטומטית</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">שינויים בהגדרה מוקדמת זו נשמרים אוטומטית.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">ברירת מחדל ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">הגדרת ברירת מחדל מראש עבור המקודד.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">לטוויטר ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">מכבד את גבולות העלאת הטוויטר (למעט גודל ורזולוציה).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">קידוד וידאו ביעילות גבוהה.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">סמנכ\"ל 8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">קודק ישן ומוכר יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">אנימציה</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">סרטון</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">תמונה</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">פרויקט</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">באיכות גבוהה</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">מתאים יותר להקלטות עם יותר צבעים ושיפועים.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">איכות גבוהה • רקע שקוף</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">תומך בשמירת האנימציה עם רקע שקוף.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">איכות גבוהה • גרפיקה</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">טוב יותר להקלטות עם כמות צבעים נמוכה יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - איכות גבוהה יותר</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">איכות תמונה גבוהה יותר, אך עם גודל קובץ גדול יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - איכות נמוכה יותר</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">איכות תמונה נמוכה יותר, אך עם גודל קובץ קטן יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">גיפסקי - איכות גבוהה יותר</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">איכות תמונה גבוהה יותר, אך עם גודל קובץ גדול יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">גיפסקי - איכות נמוכה יותר</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">איכות תמונה נמוכה יותר, אך עם גודל קובץ קטן יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">גיפסקי - קידוד באיכות נמוכה ומהירה יותר</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">אפילו איכות תמונה נמוכה יותר, עם קידוד מהיר יותר, אך עם גודל קובץ קטן יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">מערכת - באיכות נמוכה</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">קידוד באיכות נמוכה אך מהירה יותר.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - באיכות גבוהה</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">איכות תמונה גבוהה וגודל קובץ קטן, אך קידוד איטי יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - איכות נמוכה יותר</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">איכות תמונה נמוכה יותר, גודל קובץ קטן וקידוד מהיר יותר.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">באיכות גבוהה</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">איכות תמונה גבוהה וגודל קובץ קטן.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">הכנס מסגרות</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">שני הצדדים צריכים להיות באותו גודל, חלון זה מאפשר לך למקם את גודל התמונה ואת הקנבס ולשנות אותו. לחץ כדי לבחור ולשנות את הגודל.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">גודל קנבס:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">התאמת תמונה &#10; על בד</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">משנה את גודל הקנבס כך שיתאים לשתי התמונות בפנים (מהפינה השמאלית העליונה).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">יש הבדל בין גדלי מסגרות. עליך לפתור זאת לפני הכנסת המסגרות.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">מסגרות חדשות</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">מסגרות נוכחיות</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">גודל התמונה:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">מיקום התמונה:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">אפס גודל תמונה ומיקום</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">מסגרות חדשות יוכנסו לרשימת המסגרות הנוכחית של &#10;</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">לפני</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">אחרי</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">מסגרת</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">מייבא ...</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">בחר את צבע מילוי הבד</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">ייבא מסגרות מסרטון</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">יבואן:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">טוען ...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">קנה מידה:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">גודל:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">גובה:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">רוחב:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">קצב מסגרות:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">התחל:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">סוף:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">בחירה:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">מסגרות:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">משך הזמן:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">לא ניתן היה לטעון את הסרטון</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">לא ניתן היה להתחיל את התצוגה המקדימה. נסה עם יבואן אחר או בדוק אם הסרטון אינו פגום. &#x0d; אם אתה משתמש ב- MediaPlayer, בדוק אם תכונת Windows בשם\" תכונות מדיה / Windows Media Player \"מופעלת וודא שיש ברשותך את רכיב ה- Codec הנדרש.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">פסק זמן לקבלת התצוגה המקדימה של המסגרת.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">לא נבחרה מסגרת לייבוא.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">מקודד</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">קידוד ...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">מתחיל</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">הושלם</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">הועתק ללוח</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">ההעתקה נכשלה</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">הפקודה בוצעה</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">הצג את הפלט של הפקודות.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">נכשל בביצוע הפקודה</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">ההעלאה נכשלה</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + לחץ כדי לפתוח את הדף למחיקת התמונה (אם קיים).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">הזמן שחלף, בדקות:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">ניתוח:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">קידוד:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">העלה:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">העתק:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">פקודות:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">הקובץ נמחק או הועבר</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">בוטל</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">שגיאה</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">לחץ כאן להצגת פרטי שגיאה זו.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">מעלה</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">ביצוע פקודות</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">עיבוד {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">מתכוננים למעבר שני</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">עיבוד {0} - מעבר שני</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">יצירת קובץ</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">ניתוח פיקסלים ללא שינוי</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">שמירת תוצאת ניתוח</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">פתח קובץ</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">חקור תיקייה</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">הסר מהרשימה</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">הצג פרטים</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">דחה את כל הקידודים המוגמרים</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">העתק כתמונה</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">העתק את שם הקובץ</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">העתק נתיב תיקיה</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">העתק קישור</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - פלט פקודה</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">פלט פקודה</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">הודעות</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">דחה את כל ההתראות</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - עורך</s:String>\n    <s:String x:Key=\"S.Editor.File\">קובץ</s:String>\n    <s:String x:Key=\"S.Editor.Home\">בית</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">הפעלה</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">עריכה</s:String>\n    <s:String x:Key=\"S.Editor.Image\">תמונה</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">מעברים</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">סטטיסטיקה</s:String>\n    <s:String x:Key=\"S.Editor.Options\">אפשרויות</s:String>\n    <s:String x:Key=\"S.Editor.Help\">עזרה</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">תוספות</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">יש עדכון חדש!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">לחץ כאן כדי לקרוא עוד על כך.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">ספירה כוללת, ספירת בחירה, אינדקס בחירה</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">הכנת מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">טעינה לא חוקית - לא ניתן לייבא מספר קבצים בבת אחת. נסה לבחור קובץ אחד בלבד.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">טעינה לא חוקית - לא ניתן לטעון מספר פרויקטים בו זמנית. נסה לבחור רק פרויקט אחד.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">פתח קובץ מדיה (תמונה או וידאו)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">פתח מדיה (תמונה או וידאו) או קובץ פרוייקט</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">כל הקבצים הנתמכים</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">תמונה</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">סרטון</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">הנפשת png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">הנפשת GIF</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">הנפשת אינטרנט</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">סרטון אבי</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">סרטון מטרוסקה</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">סרטון Mov</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">סרטון Mp4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">סרטון Webm</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">תמונת Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">תמונת Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">תמונת Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">קובץ Zip, עם תמונות</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">פרויקט ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">פרויקט ScreenToGif כ- Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">קובץ PSD</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">עבור אל\" קובץ>חדש \"כדי להתחיל הקלטה חדשה</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">גרור ושחרר תמונות, סרטונים או פרויקטים לייבוא</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">תודה רבה על השימוש באפליקציה שלי!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">ככל שמספר המסגרות נמוך יותר, ספירת הצבעים או כמות השינויים בין המסגרות, הגודל קטן יותר</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">האם אתה רוצה לדבר? פתח את\" אפשרויות>אודות \"לשיטות יצירת קשר</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">נתקלת בבעיות? צור איתי קשר באמצעות כלי המשוב</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">האם ברצונך לנסות את המקליט החדש? &#x0d; עבור אל\" אפשרויות>מקליט \"כדי להפעיל אותו.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">הקלטה</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">מצלמת אינטרנט והקלטה</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">הקלטה לוח</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">פרויקט ריק</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">חדש</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">הקלטה</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">מצלמת אינטרנט והקלטה</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">הקלטה לוח</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">מדיה</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">הכנס</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">שמור בשם</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">טען</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">פרויקטים&#x0d;אחרונים</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">שמור פרויקט בשם</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">מחק פרויקט</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">מחסנית פעולה</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">בטל</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">בצע מחדש</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">אפס</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">לוח</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">הצג את הלוח</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">הדבק</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">גזור</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">העתק</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">זום</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">התאם לתוכן &#x0d;</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">תמונה מתאימה</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">בחירה</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">בחר &#x0d; הכל</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">עבור אל</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">הפוך</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">בטל את הבחירה</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">הפעלה</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">ראשית</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">הקודם</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">שחק</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">השהה</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">הבא</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">אחרון</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">אפשרויות השמעה</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">לולאה במהלך ההפעלה.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">נעשה שימוש רק במהלך ההפעלה. &#x0d; אם ברצונך לשנות את הגדרות הלולאה לייצוא Gifs ו- Apngs, &#x0d; הוא יהיה זמין בחלונית 'שמירה בשם' עבור כמה מקודדים.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">מחק</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">הסר &#x0d; כפילויות</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">צמצם &#x0d; מספר המסגרות</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">מחק את כל הקודם</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">מחק הכל הבא</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">סידור מחדש</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">הפוך</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">יו-יו</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">הזז &#x0d; שמאלה</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">הזז &#x0d; ימינה</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">עיכוב (משך הזמן)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">ביטול</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">הגדל או &#x0d; הפחת</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">קנה מידה</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">גודל וסיבוב</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">שינוי גודל</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">חיתוך</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">הפוך/סובב</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">טקסט</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">כיתוב</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">טקסט חופשי</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">מסגרת כותרת</s:String>\n    <!--<s:String x:Key=\"S.Editor.Image.KeyStrokes\">Key&#x0d;Strokes</s:String>-->\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">כסוי</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">חינם&#x0d;ציור</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">צורות</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">לחיצות&#x0d;עכבר</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">סימן מים</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">גבול</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">צל</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">התקדמות</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">לערפל</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">סגנונות</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">דעוך</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">שקופית</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">כללי</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">ספירת מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">משך הזמן הכולל</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">גודל מסגרת</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">משך זמן ממוצע (עיכוב)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">השעה הנוכחית</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">הזמן הנוכחי (מצטבר) בהתבסס על המסגרת הנוכחית המוצגת.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">מסגרת DPI וסולם</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">מסגרת שנבחרה</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">פעולת חיתוך</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">אי אפשר לחתוך את כל המסגרות.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">ההקלטה זקוקה לפחות למסגרת אחת.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">הסר הכל</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">האם אתה בטוח שברצונך להסיר את כל המסגרות?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">פעולה זו תבטל את הפרויקט הפתוח הנוכחי ואינה ניתנת לביטול. האם ברצונך להמשיך?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">פרויקט המחיקה</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">האם אתה בטוח שאתה רוצה למחוק את הפרויקט?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">פעולה זו תבטל את הפרויקט ותסיר את כל המסגרות. לא ניתן לבטל פעולה זו.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">האם אתה רוצה למחוק את הפרויקט הקודם?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">אם תבחר לא לעשות זאת, הפרויקט הקודם יהיה זמין לפתיחה באמצעות פרויקטים אחרונים.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">מחק מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">האם אתה בטוח שאתה רוצה למחוק?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">פעולה זו תמחק {0} מסגרות.&#x0d;תוכל לבטל זאת מאוחר יותר.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">יציאה מהעורך</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">האם אתה בטוח שאתה רוצה לצאת?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">ניתן לפתוח את הפרויקט הנוכחי שעבדת עליו שוב באמצעות 'פרויקטים אחרונים'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">ניתן לפתוח את הפרויקט הנוכחי שעבדת עליו שוב באמצעות 'פרויקטים אחרונים', אך אל תשכח שאחרי כמה ימים הוא יימחק אוטומטית.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">גרירה ושחרור לא חוקיים</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">לא ניתן לייבא קבצים מרובים בבת אחת</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">נסה לבחור קובץ אחד בלבד.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">לא ניתן לטעון קובץ</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">לא ניתן היה לטעון את הקובץ מכיוון שיש לו פורמט לא חוקי.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">לא ניתן לייבא מספר פרויקטים בבת אחת</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">נסה לבחור רק פרויקט אחד.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">אין להחיל טקסט.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">עליך לבחור לפחות מסגרת אחת להחיל עליה את הכיתוב.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">עליך לבחור לפחות מסגרת אחת להחיל עליה את הטקסט.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">עליך לבחור מסגרת אחת לפחות כדי להחיל את מסגרת הכותרת שלידה.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">עליך לבחור עובי גבול גדול מאפס בצד אחד לפחות.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">עליך לבחור לפחות מסגרת אחת להחיל עליה את הגבול.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">האטימות חייבת להיות גדולה מאפס כדי לעשות הבדל במסגרת.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">כשמשתמשים בעומק הצל וברדיוס הטשטוש כאפס, זה לא ישנה משום שהוא יוסתר מאחורי המסגרת.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">עליך לבחור לפחות פיקסל אחד כדי להחיל עליו את ה- Cinemagraph. בחר את הפיקסלים על ידי ציור מעליהם.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">מעבר דהייה</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">עליך לבחור לפחות מסגרת אחת עליה להחיל את מעבר דהייה.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">צבע שקוף לחלוטין לא יוצר שום השפעה על המעבר הזה.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">מעבר שקופיות</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">עליך לבחור לפחות מסגרת אחת ליישום עליה.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">טעינת מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">פרויקט בלתי אפשרי לטעון</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">לא ניתן היה לטעון את המסגרות מכיוון שכולן פגומות או שהתמונות אינן נוכחות במקום הצפוי להן.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">לא ניתן היה לטעון כמה מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">לא ניתן היה לטעון את המסגרות מכיוון שלא ניתן היה למצוא אותן או משום שהן פגומות.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">עליך לבחור לפחות מסגרת אחת עליה להחיל את שכבת העל.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg לא קיים. הוסף אותו למשתני סביבת הנתיב או לחץ כאן כדי לפתוח אפשרויות>תוספות להגדרת המיקום.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">גיפסקי לא קיים. הוסף אותו למשתני סביבת הנתיב או לחץ כאן כדי לפתוח אפשרויות>תוספות להגדרת המיקום.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">לא נשאר מספיק מקום בכונן שבו האפליקציה הזו מאחסן את המטמון שלה ({0}% נותרו). לחץ כאן כדי לפתוח אפשרויות>קבצים זמניים כדי לפנות מקום.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">ניסית לייבא תמונות מרובות עם DPI שונים, וזה לא נתמך. חלקן יובאו, את האחרים יש לייבא בנפרד.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">אחזור מסגרות מהמטמון</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">עדכון מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">מתכונן לייבא</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">ייבוא ??מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">ניתוח כפילויות</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">התאמת העיכוב</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">מחיקת כפילויות</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">מחיקת מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">מחיקת תיקיות</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">שינוי גודל המסגרות</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">חיתוך מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">החלת שכבת -על על מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">יצירת מסגרת כותרת</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">החלת הפוך/סובב על מסגרות</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">שינוי העיכוב</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">החלת אפקט המעבר</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">מתכונן לשמור</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">בטל את הטעינה והמחיקה.</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">מסגרת:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">תמונה פתוחה</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">חקור תיקייה</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">עבור למסגרת</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">עבור למסגרת (0 עד {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">שמור כ ...</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">הסר מסגרות שנבחרו</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">הקלטת מסך חדשה</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">הקלטת מצלמת רשת חדשה</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">הקלטת לוח חדשה</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">פרויקט חדש</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">חדש ממדיה או מפרויקט</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">הקלטה חדשה נוצרה</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">נוצרה הקלטה חדשה של מצלמת רשת</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">נוצרה הקלטת לוח חדשה</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">נוצר פרויקט חדש</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">בטל ביצוע</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">איפוס בוצע</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">בצע מחדש</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} גזרות מסגרות</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} מסגרות הועתקו</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} מסגרות הודבקו</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">זום מוגדר ל- {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">כל המסגרות נבחרו</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">מסגרת מס '{0} נבחרה</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">הבחירה הפוכה</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">כל המסגרות בוטלו</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} מסגרות נמחקו</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">רשימת המסגרות הפוכה</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">אפקט יו-יו מיושם</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">מסגרות הועברו שמאלה</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">מסגרות הועברו ימינה</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">גודל המסגרות השתנה</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">מסגרות קצוצות</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">מסגרות התהפכו/הסתובבו</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">פעולת ההפעלה חלה על המסגרות שנבחרו והסיבוב חל על כל המסגרות</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">פעולה זו חלה על כל המסגרות</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">פעולה זו חלה על מסגרות שנבחרו</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">פעולה זו חלה על כל המסגרות או המסגרות שנבחרו, בהתאם להגדרות שלך</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">סרט הקולנוע חל על כל הפריימים המבוססים על המסגרת הראשונה</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">הוחל שכבת על</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">מסגרת כותרת נוצרה</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">מסגרת הכותרת תתווסף לפני המסגרת שנבחרה</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">משך הזמן (עיכוב) השתנה</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">הוכנס מעבר</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">מספר המספרים מופחת</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">כפילויות הוסרו</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">הסתר</s:String>\n    <s:String x:Key=\"S.Action.Apply\">החל</s:String>\n    <s:String x:Key=\"S.Action.Open\">פתח</s:String>\n    <s:String x:Key=\"S.Action.Save\">שמור</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">ביטול</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">פרויקטים אחרונים</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">מחפש פרויקטים אחרונים ...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">תאריך יצירה</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">ספירת מסגרות</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">לא נבחר פרוייקט. בחר פרויקט מהרשימה שתטען.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">פרויקט זה כבר מוצג על ידי מופע עורך זה.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">פרויקט זה כבר נפתח על ידי מופע עורך אחר. לא ניתן לפתוח פרויקט בפעם השנייה אם הוא כבר פתוח בעורך אחר.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">ערכי הלוח</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">ערך הלוח:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} תמונה</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} תמונות</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">חקור תוכן</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">הסר</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">הדבק התנהגות</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">לפני מסגרת שנבחרה</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">לאחר מסגרת שנבחרה</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">הבדל</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">אפשרויות</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">פיקסלים (פיקסלים)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">אחוז (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">שמור על יחס הממדים.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">איכות:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">פנט • איכות גבוהה יותר</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">לינארית • איכות נמוכה יותר</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">השכן הקרוב ביותר • איכות נמוכה ומהירה יותר</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">איכות קנה מידה.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">עליך לבחור ערך אחר כדי להחיל עליו את פעולת הגודל.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">נקודות</s:String>\n    <s:String x:Key=\"S.Crop.Top\">למעלה:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">שמאל:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">תחתון:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">נכון:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">בחירת החיתוך צריכה להיות קטנה יותר מגודל המסגרת הנוכחי.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">בחירת החיתוך צריכה להיות גדולה מ- 10x10 פיקסלים.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">הפוך אופקי</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">הפוך אנכי</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">סובב שמאלה 90?</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">סובב ימינה 90?</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">הפחת את מספר המסגרות</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">גורם:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">הסר ספירה:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">התאמת עיכוב:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">אל תתאים</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">סכום עם המסגרת הקודמת</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">סכום שווה עם המסגרות הנותרות</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">צמצם את מספר המסגרות של הפרויקט כולו.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">אם האפשרות אינה מסומנת, עליך לבחור מספר מסגרות עוקבות, גדולות יותר מגורם ההסרה.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">היא תסיר {0} מסגרות לאחר כל {1} פריים, מבלי לספור את המסגרות שהוסרו.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">עליך לבחור את המסגרות ליישום הפחתת מספר המסגרות (או סמן את האפשרות להחיל על הפרויקט כולו).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">רשימת המסגרות שנבחרו חייבת להיות עוקבת. לא ניתן להשאיר חלק מהמסגרות מבחירות בין המסגרות שנבחרו.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">מבחר המסגרות חייב להיות גדול יותר מגורם ההסרה, על מנת שהתכונה תוכל להסיר כל דבר.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">הסר כפילויות</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">דמיון (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">הסרת מסגרת:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">הסר את המסגרת הראשונה</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">הסר את המסגרת האחרונה</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">התאמת עיכוב:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">אל תתאים</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">השתמש בממוצע</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">השתמש בסכום</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">פעולה זו מנתחת כל מסגרת (פיקסל על פיקסל) ומסירה את אלה שדומים לפחות ל- {0} % לשכנה הקרוב. &#x0d; תוכל לבחור אם ברצונך להתאים את העיכוב (משך התערוכה) של המסגרות.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">טקסט</s:String>\n    <s:String x:Key=\"S.Caption.Font\">גופן</s:String>\n    <s:String x:Key=\"S.Caption.Family\">משפחה:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">סגנון:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">משקל:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">גודל:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">צבע:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">צבע רקע:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">מתאר</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">עובי:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">פריסה</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">אנכי:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">אופקי:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">יישור:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">קישוט:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">קיצורי מקשים</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">מפתחות</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">מפריד:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">ערוך את קיצורי המקשים שלך</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">התעלם ממפתחות Ctrl, Alt, Shift ו- Windows מבלי להשתמש בהם כמשנים.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">הוא יתעלם מלחיצות מקשים בודדות כגון\" Control \", אך הוא לא יתעלם מ-\" Control + C \".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">התעלם מתוכנות הדמיות הקשות.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">הקלט רק הקשות קלט של משתמשים.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">הארך את התערוכה של קיצורי המפתח.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">התחל את תערוכת קיצורי המפתח מוקדם יותר.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">לפי (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">אין הקשות על ההקלטה שלך.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - עורך קיצורי מקשים</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">מספר מסגרת</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">זוהו מקשי מפתח</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">הסר את צירוף המקשים</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">הוסף קו מפתח:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">אותיות קטנות.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">היא מאפשרת לך להוסיף אותיות בודדות באותיות קטנות.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">מצב</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">עט</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">מחק</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">בחירה</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">מחק שבץ</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">רוחב:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">גובה:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">טיפ:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">מלבן</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">אליפסה</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">אחר:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">סימון.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Fit To Curve.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">אין להחיל ציורים על המסגרות שבחרת.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">עליך לבחור לפחות מסגרת אחת ליישום הציור החופשי.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">הכנס</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">צורות</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">רדיוס:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">מקפים:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">שולט על גודל המקפים וגודל הפערים. &#10; ניתן להגדיר מספר גדלים ליצירת סגנון מקף משוכלל. &#10; ברירת המחדל היא\" 1 0 \"או ריק, כלומר מקף. ללא פערים.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">אפס את הסיבוב</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">הסר</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">מילוי</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">לחיצות עכבר</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">צבע הלחצן השמאלי:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">צבע הכפתור האמצעי:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">צבע הלחצן הימני:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">לא זוהו קליקים על העכבר על הפרויקט שלך.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">תמונה</s:String>\n    <s:String x:Key=\"S.Watermark.File\">קובץ:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">אף אחד לא נבחר</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">אטימות:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">בחר תמונה</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">עליך לבחור תמונה להחיל על המסגרות שנבחרו.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">עליך לבחור לפחות מסגרת אחת ליישום סימן המים עליה.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">מראה</s:String>\n    <s:String x:Key=\"S.Border.Info\">השתמש בערכים שליליים כדי לגרום לגבול להרחיב את התמונה. כאשר תעשה זאת, הגבול יחול על כל המסגרות. &#10; אם לא נעשה שימוש בערך שלילי, הגבול יוחל רק על המסגרות שנבחרו.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">צבע צל:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">צבע רקע:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">כיוון:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">רדיוס טשטוש:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">עומק:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">פיקסלט</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">טשטוש</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">להחשיך</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">להבהיר</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">אפשרויות ערפול</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">גודל פיקסל:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">רמת טשטוש:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">רמת החשיכה:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">רמת הבהרה:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">חשב את הצבע הממוצע לכל בלוק מפוקסל.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">החל את הערפול על ההפוך של הבחירה.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">חלקות</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">השתמש בכלי הבחירה כדי לבחור את החלק של המסגרת שצריך להסתיר.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">השתמש בכלי הבחירה כדי לבחור את החלק של המסגרת שאסור להסתיר.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">לא בחרת כלום. אנא השתמש בכלי הבחירה כדי לבחור את המלבן שאמור להסתיר.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">סוג</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">בר</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">טקסט</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">דיוק:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">דקות</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">שניות</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">מילי שניות</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">אחוז</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">מספר מסגרת</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">תאריך/שעה בפועל</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">מותאם אישית</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">הצג את הסכום הכולל.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">פורמט:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">פורמט</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ ms = מילי שניות</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$ s = שניות</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$ m = דקות</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$ p = אחוזים</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$ f = מספר מסגרת</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">סך הכל:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">דוגמאות:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">תוכל להשתמש בפורמט התאריך והשעה מתוך .Net Framework. המפרט זמין בשני הקישורים הבאים.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">פורמטים סטנדרטיים</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">פורמטים מותאמים אישית</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">ספירה מתוך:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">מתחיל לספור את מספר המסגרת מהמספר הנבחר הזה.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">התמצאות:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">עיכוב עדכון</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">מצב עיכוב:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">(ביטול (במסרים</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">הגדל או הקטן (ב- ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">קנה מידה (באחוזים)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">ערך חדש</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">מינימום 10ms למסגרת.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">הפחת/הגדלת ערך</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">ערך קנה מידה</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">ערך חדש זה יחליף את משך הזמן (העיכוב) של כל המסגרות שנבחרו. הערך יכול להיות בין 10ms ל -25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">ערך זה יקטין/יגדיל את משך הזמן (העיכוב) של כל מסגרת שנבחרה. &#x0d; תוכל להקטין/להגדיל על ידי בחירת ערך בין -10000ms ל -10000ms, אך משך הזמן הסופי של כל פריים יוגבל בין 10ms ו- 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">קנה מידה את משך הזמן (עיכוב) של כל מסגרת שנבחרה לפי הערך באחוזים. &#x0d; תוכל לשנות את משך כל פריים על ידי בחירת ערך בין 1% ל -1000%, אך משך הזמן הסופי של כל מסגרת יוגבל ל בין 10ms ל 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">השתמש בעט כדי לבחור את הפיקסלים שלא אמורים להישאר סטטיים (שצריכים להשתנות בין המסגרות), על ידי ציור מעליהם.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">אורך המעבר</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">עיכוב מעבר</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">לדעוך ל ...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">המסגרת הבאה</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">צבע</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">צבע</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">המעבר יוחל בין המסגרת שנבחרה למסגרת הבאה.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">סוג קובץ והגדרות קבועות מראש</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">הפורמט של קובץ הפלט.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">הגדרת מראש לייצוא המכילה את כל ההגדרות המוצגות כעת. &#10; נהל את הגדרות היצוא מראש שלך באמצעות הכפתורים למטה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">תמונה מונפשת</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">סרטון</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">מסגרות</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">אחר</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">גרפיקת רשת ניידת מונפשת</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">גיף</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">פורמט החלפת גרפיקה</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">תמונת אינטרנט</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Interleave Video Audio</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">מטרוסקה</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">פורמט קובץ QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">סרט אינטרנט</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">מפת סיביות</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">קבוצת המומחים לצילום משותף</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">גרפיקת רשת ניידת</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">פרויקט</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">פרויקט ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">פסד</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">קובץ פוטושופ</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">הגדרות קבועות מראש:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">ברירת מחדל</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">הוסף הגדרה מוקדמת חדשה לייצוא.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">שמור את ההגדרות הנוכחיות להגדרה מוקדמת ייצוא זו.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">ערוך הגדרות בסיסיות מוגדרות מראש לייצוא.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">הסר את הגדרת הייצוא המוגדרת כרגע.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">אפס את ההגדרות של ייצוא מוגדר מראש זה לברירות המחדל שלו.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">מחיקת ההגדרה המוגדרת מראש</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">האם אתה בטוח שברצונך למחוק את ההגדרה המוגדרת מראש?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">לא ניתן לבטל פעולה זו. &#10; &#10; האם ברצונך למחוק את ההגדרה המוגדרת מראש שנבחרה?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">איפוס ההגדרה המוגדרת מראש</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">האם אתה בטוח שברצונך לאפס את ההגדרה המוגדרת מראש?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">לא ניתן לבטל פעולה זו. &#10; &#10; האם ברצונך לאפס את ההגדרה המוגדרת מראש שנבחרה להגדרות ברירת המחדל שלה?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">מקודד</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">מקודד ומכמת</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">מקודד האחראי ליצירת קובץ הפלט.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">מקודד מובנה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">מערכת</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">מקודד זמין על ידי המערכת.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">מקודד חיצוני, מתוצרת FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">גיפסקי</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">מקודד חיצוני, תוצרת Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">אפשרויות מקודד</s:String>\n    \n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">הפעל את המצב המתקדם.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">הזן ידנית את הפרמטרים לשליטה על המקודד.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">פרמטרים:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">רשימת פרמטרים שיועברו ל- FFmpeg. &#10; &#10; פרמטרים מיוחדים: &#10; {I} היא נתיב הקלט (המסגרות). &#10; {O} הוא נתיב הפלט (הקובץ המיוצא). &#10; {W} הוא רוחב המסגרת. &#10; {H} הוא גובה המסגרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">כדי לקודד עם 2-pass, פשוט הוסף '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">תצוגה מקדימה</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">תצוגה מקדימה של רשימת הפרמטרים שתועבר ל- FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">מסמכי Codec</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">עיצוב מסמכים</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">מסנני מסמכים</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">אפשרויות GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">אלגוריתם הפחתת צבעים (כימות).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">רשת עצבית</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">כימות נאמנות גבוהה. איטית יותר, אך טובה לכמות צבעים גבוהה יותר.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">אוקטובר</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">טוב לאנימציות עם פחות צבעים. מהיר יותר, אך עשוי לייצר חיבורי צבע.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">חתך חציוני</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">פחות טוב מאוקטובר ואיטי יותר.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">גווני אפור</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">משתמש בלוח גוונים אפור קבוע, כך שזה הרבה יותר מהיר.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">הצבעים הנפוצים ביותר</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">פשוט לוקח את הצבעים הנפוצים ביותר במסגרות.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">דגימה:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">גורם דגימה: &#10; ערך 1 יביא ל- GIF למראה טוב יותר, אך העיבוד יהיה איטי יותר.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">איכות:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">צבעים:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">מספר הצבעים המרבי (לכל מסגרת).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">השתמש בטבלת צבעים גלובלית.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">עשוי להפחית את האיכות ו/או את גודל ה- GIF.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">הכי טוב</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">המהיר ביותר</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">השתמש בתהליך קידוד מהיר עוד יותר.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">עשוי להפחית את איכות ה- gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">לולאה:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">גיף משולב.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">חזור לנצח.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">ספירה חוזרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">אפשר שקיפות.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">מאפשר את מצב השקיפות המלא, מה שהופך את הרקע של ה- gif לשקוף לגמרי. &#10; תהליך החלפת מפתחות chroma יתעלם אם אפשרות זו מופעלת.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">בחר את הצבע המוצג כשקוף.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">אם נבחר צבע, הוא יומר לשקוף והוא יופיע כשקוף ב- gif שנוצר. &#10; אם לא נבחר צבע, כל הצבעים השקופים (אלפא = 0%) יופיעו כשקופים בדרך כלל .</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">זיהוי פיקסלים ללא שינוי.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">על ידי ניתוח וגילוי פיקסלים ללא שינוי בין המסגרות, &#10; ניתן יהיה לשמור רק את החלקים הדרושים ב- gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">החלף את הפיקסלים האלה במפתח chroma.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">פיקסלים שחוזרים על עצמם/ללא שינוי יוחלפו במפתח chroma זה, &#10; מה שיאפשר שימוש בפחות צבעים לכל מסגרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">מפתח Chroma:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">הפעלה:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">סולם באייר:</s:String>\n    \n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">אפשרויות Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">תחזית:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">ללא</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">תת</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">למעלה</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">ממוצע</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">מעורבב</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">אפליקציה לולאה.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">זיהוי פיקסלים ללא שינוי.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">צייר את כל הפיקסלים ללא שינוי בצבע שקוף.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">קבוע מראש:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">ללא</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">ברירת מחדל</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">תמונה</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">תמונה</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">ציור</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">אייקון</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">טקסט</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">השתמש במצב ללא הפסדים.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">מצב:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">רגיל</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">מתקדם</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">שיטת הגדרת הפרמטרים של המקודד: &#10; רגיל: השתמש בפקדי UI רגילים. &#10; מתקדם: השתמש בתיבת טקסט כדי להקליד את הפרמטרים.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">קודק:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">מקודד הווידיאו, האחראי על המרת הפיקסלים הגולמיים לקובץ הפלט.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">קבוע מראש:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">ללא</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">איטי מאוד</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">איטי יותר</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">איטי</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">בינוני</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">מהיר</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">מהר יותר</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">מהר מאוד</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">סופר מהיר</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">מהיר במיוחד</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">איכות</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">מאוזן</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">מהירות</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">ברירת מחדל</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">ללא הפסד</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">ללא הפסד (ביצועים גבוהים)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">ביצועים גבוהים</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">באיכות גבוהה</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">דיסק בלורי</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">איחורים נמוכים</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">איחורים נמוכים (ביצועים גבוהים)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">איחורים נמוכים (איכות גבוהה)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">יחס קידוד מהירות לדחיסה, והגדרות קבועות מראש איטיות יותר עשויות לתת לך דחיסה טובה יותר (איכות לפי גודל קבצים).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">התאמת חומרה:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">כבוי</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">מופעל</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">בחירה אוטומטית</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">שולט על השימוש בחומרה ייעודית (גרפיקת וידאו). &#10; כבוי: אינו משתמש בחומרה ייעודית. &#10; מופעל: משתמש בחומרה ייעודית ומאפשר לך לבחור מקודדים מיוחדים. &#10; אוטומטי : משתמש בחומרה ייעודית ובוחר אוטומטית את המקודד הנכון, במידת האפשר.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">פורמט פיקסל:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">אוטומטי</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">שיטת סנכרון וידאו. &#10; אוטומטי: בוחר בין 1 ל -2 בהתאם ליכולות muxer (פורמט). &#10; מעבר פסח: כל פריים מועבר עם חותמות הזמן שלו למקודד. &#10; קבוע : מסגרות יוכפלו ויורדו כדי להשיג בדיוק את קצב המסגרות הקבוע המבוקש. משתנה: מסגרות עוברות עם חותמת הזמן שלהן או נשמטות כדי למנוע משתי מסגרות את אותה חותמת זמן. &#10; ירידה : כמעבר אך הורס את כל חותמות הזמן, מה שהופך את המקודד לייצר חותמות זמן חדשות המבוססות על מסגרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">מעבר</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">מסגרת קבועה</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">מסגרת משתנה</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">זרוק</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">מספר מסגרות:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">סרט</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">מותאם אישית</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">תעודה:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">גורם שיעור קבוע. &#10; הגדרת בקרת איכות ושיעור. &#10; השאר אותו ריק אם אינך מעוניין להגדיר נכס זה.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">רמת איכות:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">ערכים קטנים יותר פירושם איכות טובה יותר.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">קצב סיביות:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">קצב סיביות וידאו.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">מצב קצב סיביות:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">קבוע</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">משתנה</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">שיעור מינימלי:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">סובלנות קצב סיביות מינימלית. &#10; שימושי ביותר בעת שימוש במצב CBR. &#10; השאר אותו ריק או הגדר לאפס &#10; אם אינך רוצה להגדיר מאפיין זה.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">שיעור מקסימלי:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">סובלנות קצב סיביות מרבית. &#10; דורש גם הגדרת גודל המאגר. &#10; השאר אותו ריק או הגדר לאפס &#10; אם אינך רוצה להגדיר נכס זה.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">גודל מאגר:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">גודל מאגר בקרת התעריפים. &#10; השאר אותו ריק או הגדר לאפס &#10; אם אינך מעוניין להגדיר נכס זה.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">רכזו את התמונות.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">מייצא את התמונות בתוך תיקיה מכווצת.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">דחוס את התמונה.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">דחוס נתוני התמונה באמצעות אלגוריתם RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">שמור את נתוני ציר הזמן.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">מייצא את תזמוני המסגרות, במקום רק את המסגרות.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">אפשרויות ייצוא</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">ייצוא חלקי.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">שמור את הקובץ בתיקיה שתבחר.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">החלף (אם כבר קיים).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">שמור גם כפרויקט (אותה תיקיה, אותו שם קובץ).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">העלה את הקובץ.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">העתק ללוח.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">קובץ</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">מעתיק את קובץ הפלט ללוח.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">נתיב תיקיה</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">מעתיק את נתיב התיקיה של קובץ הפלט ללוח.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">נתיב קובץ</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">מעתיק את הנתיב של קובץ הפלט ללוח.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">קישור</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">מעתיק את הקישור שנוצר על ידי שירות ההעלאה ללוח.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">בצע פקודות קידוד פוסטים.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">הקלד פקודות שיש לבצע לאחר הקידוד. &#x0d; לביצוע פקודות מרובות, הקלד כל אחת מהן בשורה נפרדת. &#x0d; פקודות מאקרו: &#x0d; {p} = נתיב קובץ פלט. &#x0d; {f} = נתיב תיקיית פלט. &#x0d; {u} = כתובת URL של הקובץ שהועלה.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">ייצוא חלקי</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">מצב:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">בחר את שיטת הייצוא החלקי.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">ביטוי</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">מייצא חלקים מהאנימציה המבוססים על ביטוי פשוט.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">טווח מסגרות</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">מייצא רק חלק מהאנימציה בטווח המסגרות.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">טווח זמן</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">מייצא רק חלק מהאנימציה במסגרת הזמן.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">בחירה</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">מייצא רק את המסגרות שנבחרו בציר הזמן.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">לא נבחרה מסגרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">מסגרת אחת נבחרה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} מסגרות נבחרו.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">מאת:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">ל:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">ביטוי:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">הקלד מספרי מסגרות המופרדים באמצעות פסיק או רצפי מסגרות המופרדים בסימן מינוס: &#10; 1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">קובץ</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">תיקיית יעד.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">בחר את תיקיית הפלט</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">בחר את המיקום. &#x0d; הקש Shift ולחץ על &#x0d; בחר גם את שם הקובץ.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">פורמט קובץ</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">שם הקובץ. הכנס תבנית תאריך/שעה בין '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">אנימציה</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">הגדל את מספר הקובץ</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">הקטן את מספר הקובץ</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">קובץ בשם זהה כבר קיים.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">שמור בלוח.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">עליך לבחור היכן לשמור את הקובץ (בתיקייה, ללוח או להעלות למקום אחר).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">לא בחרת את סיומת הקובץ.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">בעת בחירת המצב המתקדם, עליך להקליד את הפרמטרים בשדה הפרמטרים.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">הפרמטרים המיוחדים {I} (קלט) ו/או {O} (פלט) חסרים בשדה הפרמטרים.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">כדי לבצע פקודה לקידוד פוסטים, עליך להקליד משהו בשדה הטקסט של הפקודות.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">עליך לבחור לפחות מסגרת אחת כשיש לך אפשרות לייצא מסגרות נבחרות בלבד.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">הביטוי לייצוא חלקי של הפרויקט אינו חוקי.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">לא נבחר שירות העלאה. עליך לבחור יעד.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">אינך יכול להעלות לשירות שנבחר מכיוון שהוא לא היה מורשה. עבור לאפשרויות>שירותי העלאה כדי לאשר יישום זה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">אינך יכול לבחור באפשרות להעתיק את הקישור מכיוון שלא הגדרת להעלות את הקובץ.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">עליך לבחור תיקיית פלט.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">תיקיית הפלט אינה קיימת.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">תיקיית הפלט מכילה תו לא חוקי אחד או יותר. אנא בחר תיקייה חוקית.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">עליך לבחור שם קובץ.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">שם קובץ הפלט מכיל תו אחד או יותר לא חוקיים. אנא בחר שם קובץ חוקי.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">שם קבצים כבר בשימוש. הגדר להחליף או לבחור שם קובץ או תיקיה אחרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">יש כבר פרויקט עם אותו שם קובץ. הגדר להחליף או לבחור שם קובץ או תיקיה אחרת.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">הפעולה בוטלה.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">העלה</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">בחר את ההגדרה המוגדרת מראש להעלאה, הכוללת פרטים אודות השירות המשמש להעלאה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">שירות העלאה זה מטיל גבולות.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">הוסף הגדרה מוקדמת חדשה להעלאה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">ערוך הגדרות קבועות מראש להעלאה.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">הצג את היסטוריית ההעלאות של הגדרה מוקדמת זו.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">הסר את ההגדרה המוגדרת מראש להעלאה הנוכחית.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">בחר הגדרה מוקדמת להעלאה</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">בחר אחד מהרשימה הזו.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">אין אפשרות קבועה מראש להעלות לפורמט זה</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">הוסף קביעה מוגדרת מראש באמצעות הכפתור שלהלן.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">מחיקת הגדרות קבועות מראש להעלאה</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">האם אתה בטוח שברצונך למחוק את ההגדרה המוגדרת מראש להעלאה?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">לא ניתן לבטל פעולה זו. &#10; &#10; האם ברצונך למחוק את הגדרת ההגדרה המוקדמת להעלאה?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">ייצוא מסגרות</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">האם אתה בטוח שאתה רוצה לייצא את המסגרות?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">פעולה זו תייצא {0} מסגרות ישירות לתיקייה שנבחרה.</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">תצוגה מקדימה של פקודות</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">פקודה</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">נתיב קלט</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">נתיב פלט</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">משוב</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">שלח</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">תצוגה מקדימה</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">שלח משוב</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">כותרת</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">הודעה</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">אם אתה נתקל בבאג, אל תשכח להסביר לי איך הגעת לזה, צעד אחר צעד.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">סוג המשוב</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">הצעה</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">גיליון/באג</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">הדוא\"ל שלך</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">עליך להקליד כותרת למשוב.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">עליך להקליד הודעה במשוב.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">עליך להקליד את הדוא\"ל שלך כדי לקבל תשובה מהמפתח.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">שולח ברקע. חלון זה ייסגר בקרוב.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">קבצים מצורפים (אופציונלי, 20MB לכל היותר)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">הוסף קבצים מצורפים</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">הסר את כל הקבצים המצורפים</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">אני יכול להבין אנגלית</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">ופורטוגזית (ברזילאית ואירופאית).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">זה מה שתשלח, בתוספת כל הקבצים המצורפים.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">פתרון בעיות</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">חסר חלון כלשהו?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">אם חסר אחד מהחלונות (מחוץ למסך), &#x0d; השתמש באפשרויות שלהלן כדי לאפס את מיקומו הנוכחי וההפעלה.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">הנה המקום שבו נמצא כל חלון כרגע:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">כאן ייפתח כל חלון בפעם הבאה:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">העבר את כל החלונות למסך הראשי.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">אפס את מיקום ההפעלה של כל החלונות.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">רגיל</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">נטוי</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">אלכסוני</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">שחור</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">נועז</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">דמי בולד</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">שחור במיוחד</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">מודגש במיוחד</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">אור נוסף</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">כבד</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">אור</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">בינוני</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">רגיל</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">רגיל</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">חצי מודגש</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">דק</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">אולטרה שחור</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">מודגש במיוחד</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">אולטרה לייט</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">למעלה</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">מרכז</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">תחתון</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">מתיחה</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">שמאל</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">מרכז</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">נכון</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">אופקי</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">אנכי</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">שמאל</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">נכון</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">מרכז</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">הצדיק</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">ללא</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">קו תחתון</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">חבטה</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">קו יתר</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">בסיס</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.hu.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">OK</s:String>\n    <s:String x:Key=\"S.Back\">Vissza</s:String>\n    <s:String x:Key=\"S.Cancel\">Mégse</s:String>\n    <s:String x:Key=\"S.Yes\">Igen</s:String>\n    <s:String x:Key=\"S.No\">Nem</s:String>\n    <s:String x:Key=\"S.Add\">Hozzáadás</s:String>\n    <s:String x:Key=\"S.Edit\">Szerkesztés</s:String>\n    <s:String x:Key=\"S.Id\">Azonosító</s:String>\n    <s:String x:Key=\"S.Title\">Cím</s:String>\n    <s:String x:Key=\"S.Description\">Leírás</s:String>\n    <s:String x:Key=\"S.SelectColor\">Kattints ide a szín kiválasztásához.</s:String>\n    <s:String x:Key=\"S.Documentation\">Kattints a dokumentációhoz való navigáláshoz.</s:String>\n    <s:String x:Key=\"S.Suppress\">Elrejt</s:String>\n    <s:String x:Key=\"S.Preview\">Előnézet</s:String>\n    <s:String x:Key=\"S.Size\">Méret</s:String>\n    <s:String x:Key=\"S.Background\">Háttér</s:String>\n    <s:String x:Key=\"S.Color\">Szín:</s:String>\n    <s:String x:Key=\"S.Delay\">Késleltetés</s:String>\n    <s:String x:Key=\"S.DelayMs\">Késleltetés:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Érték -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Méretezési érték:</s:String>\n    <s:String x:Key=\"S.Margin\">Margó:</s:String>\n    <s:String x:Key=\"S.Padding\">Kitöltés:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Minimális magasság:</s:String>\n    <s:String x:Key=\"S.AndOr\">és / vagy</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Ó ne, az alkalmazás összeomlott :(</s:String>\n    <s:String x:Key=\"S.Required\">Kötelező mező.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Hiányzó függőség</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">A Net Framework 4.8 nincs jelen</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Az alkalmazás megfelelő használatához le kell töltened a .Net Framework-öt.&#xd0;Szeretnéd megnyitni a weboldalt a letöltéshez?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Csak egy példány engedélyezett</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Az alkalmazás már fut</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">A ScreenToGif már fut, de úgy tűnik, nincs ablak nyitva. Ellenőrizd a rendszertálcán, a ScreenToGif ikonnak ott kell lennie.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Beállítások mentése</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Megpróbálná újra menteni?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Úgy tűnik, hogy a ScreenToGif nem rendelkezik elég jogosultsággal ahhoz, hogy a beállításokat a lemezre mentse.&#10;&#10;Szeretnéd újra megpróbálni, de ezúttal rendszergazdai jogosultságokkal?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">ScreenToGif bezárása</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Biztos vagy benne, hogy ki akarsz lépni?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Minden ablak bezárul, és a tálca ikonja eltávolításra kerül.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Grafikus adapter váltás</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Válts a megfelelő grafikus adapterre a kiválasztott képernyő rögzítéséhez</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">A DirectX egyik korlátozása miatt a ScreenToGif-nek ugyanazon a grafikus adapteren kell futnia, mint a rögzítendő képernyőnek.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Váltsd át a ScreenToGif számára beállított grafikus adaptert a Gépház > Rendszer > Kijelző > Grafikai beállítások résznél, vagy az alábbi linkre kattintva.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Válts grafikus adaptert a ScreenToGif számára a grafikus adapter grafikai beállításainak megnyitásával.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Gépház megnyitása</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Szóköz</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Jobb kattintás</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Új képernyőfelvétel</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Új webkamera-felvétel</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Új fehértábla-felvétel</s:String>\n    <s:String x:Key=\"S.Exit\">Kilépés</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Új képernyőfelvétel</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Új webkamera-felvétel</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Új fehértábla-felvétel</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Új animáció</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Képernyőfelvétel beszúrása</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Webkamera-felvétel beszúrása</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Fehértábla-felvétel beszúrása</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Beszúrás médiából (képek és videók)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Mentés másként....</s:String>\n    <s:String x:Key=\"S.Command.Load\">Fájlok betöltése (képek, videók, projektek)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Legutóbbi projektek betöltése</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Aktuális projekt elvetése</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">A képkockák késleltetésének felülbírálása</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">A képkockák késleltetésének növelése / csökkentése</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">A képkockák késleltetésének méretezése</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Nagyítás beállítása 100%-ra</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Az ablak beállítása a képkocka méretéhez</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Kép igazítása a rendelkezésre álló ablakmérethez</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Az első képkocka kijelölése</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Az előző képkocka kijelölése</s:String>\n    <s:String x:Key=\"S.Command.Play\">Animáció lejátszása</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">A következő képkocka kijelölése</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Az utolsó képkocka kijelölése</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Visszavonás</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Ismét</s:String>\n    <s:String x:Key=\"S.Command.Reset\">A projekt összes módosításának visszavonása</s:String>\n    <s:String x:Key=\"S.Command.Copy\">A kijelölt képkockák másolása és a vágólapon való tárolásuk</s:String>\n    <s:String x:Key=\"S.Command.Cut\">A kijelölt képkockák kivágása és a vágólapon való tárolásuk</s:String>\n    <s:String x:Key=\"S.Command.Paste\">A képkockák beillesztése a vágólapról</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Az összes kijelölt képkocka törlése</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Az összes előző képkocka törlése</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Az összes következő képkocka törlése</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Ismétlődések eltávolítása</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">A képkockaszám csökkentése</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Egy egyenletes ciklus létrehozása</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Fordított animáció</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Az animációt előre-hátra mozgóvá teszi</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">A kijelölt képkocka mozgatása balra</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">A kijelölt képkocka mozgatása jobbra</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Az összes képkocka átméretezése</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Az összes képkocka körülvágása</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Képkockák tükrözése vagy forgatása</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Felirat hozzáadása</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Szabadon lebegő szöveg hozzáadása</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Képkocka hozzáadása címmel</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">A felvétel közben lenyomott billentyűk beszúrása</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Szabad formák rajzolása</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Alakzatok hozzáadása</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Egérkattintások</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Kép kijelölése és vízjelként való hozzáadása</s:String>\n    <s:String x:Key=\"S.Command.Border\">Szegélyek hozzáadása</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Árnyék hozzáadása</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Az érzékeny részek elrejtése a képkockákon</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">A rajzeszközökkel válaszd ki, hogy a képkocka mely részei ne maradjanak statikusak az animáció során</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Folyamatjelző sáv vagy szöveg a lejátszás részleteivel</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Az összes képkocka kiválasztása</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navigálás képkockára az index szerint</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Képkockák kiválasztásának megfordítása</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Az összes képkocka kijelölésének megszüntetése</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Halványítás áttűnés</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Csúszás áttűnés</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Az összes befejezett kódolás törlése</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Mozgatás fel</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Mozgatás le</s:String>\n    <s:String x:Key=\"S.Command.Add\">Hozzáadás</s:String>\n    <s:String x:Key=\"S.Command.Open\">Megnyitás</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Kijelölt elem szerkesztése</s:String>\n    <s:String x:Key=\"S.Command.Save\">Kijelölt elem mentése</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Kijelölt elem eltávolítása</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Előzmények megtekintése</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Indítás</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Rögzítés</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Megnyitja a képernyőfelvevőt, ahol egyszerűen elkezdheted a képernyőd rögzítését.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webkamera</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Megnyitja a webkamera-felvevőt.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Fehértábla</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Megnyitja a fehértábla-felvevőt, ahol elkezdheted a rajzaid rögzítését.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Szerkesztő</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Megnyitja a szerkesztő ablakot, az alkalmazás központi pontját, ahol új felvételt indíthatsz és szerkesztheted.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Beállítások</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Új kiadás érhető el</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Letölti a ScreenToGif legújabb verzióját.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Frissítő</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Egy új frissítés érhető el</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Új kiadás!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Új kiadás áll rendelkezésre, Verzió {0}!&#x0d;Kattints ide további részletekért.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Úgy tűnik, hogy a rendszered már nem támogatott, vagy valami megváltozott a frissítési rendszerben. Próbáld meg manuálisan letölteni a weboldalról.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Verzió</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Hordozható</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Telepítő</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Mik az újdonságok?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Hibajavítások:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Letölthető egy új verzió.&#x0d;Szeretnéd megnyitni a böngészőt a letöltéshez?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Az alkalmazás végrehajtása a frissítés után.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Letölt</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Telepít</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Manuális telepítés</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Letöltés...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">A letöltés részleteit nem lehetett megjeleníteni.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">A frissítés letöltése nem volt lehetséges.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">A frissítés előtt meg kell várni, amíg az összes kódolás befejeződik.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Letöltő</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Letöltő</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} / {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Beállítások</s:String>\n    <s:String x:Key=\"S.Options.App\">Alkalmazás</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Felvevő</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Szerkesztő</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Feladatok</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Billentyűparancsok</s:String>\n    <s:String x:Key=\"S.Options.Language\">Nyelv</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Tárhely</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extrák</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Felhő</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Adomány</s:String>\n    <s:String x:Key=\"S.Options.About\">Névjegy</s:String>\n    <s:String x:Key=\"S.Options.Other\">Egyéb</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Hiányzik a billentyűparancs a kurzor követéséhez</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Az egérmutató követési funkciójának használatához be kell állítanod egy billentyűparancsot, amely szükség esetén bekapcsolja azt.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Indítás</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Indítás&#x0d;manuálisan</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Az alkalmazás csak akkor kerül végrehajtásra, ha manuálisan teszed.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Indítás a Windows&#10;rendszerrel</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Az alkalmazás végrehajtása a Windows indítása után történik.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Lehetetlen váltani az indítási módok között.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Egyetlen példány&#10;engedélyezése</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Az alkalmazást felhasználónként és futtatható fájlonként egyszer futtathatod,&#10;ami azt jelenti, hogy a különböző felhasználói vagy futtatható példányok egymás mellett létezhetnek.&#10;Az alkalmazás ismételt végrehajtásakor a második példány megpróbálja az elsőre adni a fókuszt és befejezni magát.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Több példány&#10;engedélyezése</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Az alkalmazást többször is, egy időben, korlátozás nélkül futtathatod.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Indítás a tálcára minimalizálva.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(A rendszertálca ikonja akkor lesz látható, ha ez a beállítás aktív)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Kezdje a következővel:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Indítási ablak</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Képernyőfelvevő</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webkamera-felvevő</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Fehértábla-felvevő</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Szerkesztő ablak</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Ablak, amelyik elsőnek jelenik meg, amikor az alkalmazás elindul)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Téma</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Színösszeállítás:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Nagyon világos</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Világos</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Közepes</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Sötét</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Nagyon sötét</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Rendszerbeállítás használata</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Egyéni</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Példa színek.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Tálcaikon</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Az alkalmazás megjelenítése a tálcán (értesítési terület).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Tartsa megnyitva az alkalmazást, még akkor is, ha az összes ablak be van zárva.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Ne tegyen semmit</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Egy ablak megnyitása</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Nincs ablak</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Az összes ablak kis méretre állítása / visszaállítása</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Az összes ablak kis méretre állítása</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Minden ablak visszaállítása</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Bal kattintás</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Bal kattintás (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Középső kattintás</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Ablak:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Különben megnyitás:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Általános</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Kerülő megoldás a \"Nincs elég kvóta...\" összeomláshoz</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Kísérleti)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Kérdés az alkalmazás bezárása előtt (a \"Kilépés\" paranccsal).</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">A hardveres gyorsítás kikapcsolása.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(A felhasználói felület szoftveres módban jelenik meg)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Fordítási frissítés keresése.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(A frissített fordítások letöltése és telepítése automatikusan megtörténik)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Frissítések ellenőrzése indításkor.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Az alkalmazás bezárása után automatikusan telepíti a frissítéseket.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Kényszerítse a hordozható verzió letöltését.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Kézi telepítést igényel a futtatható fájl kibontásával és cseréjével)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">A frissítés kényszerítése emelt szintű jogosultságokkal való futtatásra.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">A telepítés megkezdése előtt figyelmeztessen.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Felület</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Régi</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Új</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Rögzítési gyakoriság</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Kézi</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Mindegyik képkockát manuálisan rögzíted, a rögzítés gomb vagy az ezzel egyenértékű billentyűparancs megnyomásával.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Felhasználói interakció</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">A képkockák minden alkalommal rögzítésre kerülnek, amikor kattintasz vagy beírsz valamit.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Másodpercenként</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">A képkockák \"másodpercenkénti\" alapon lesznek rögzítve,&#10;a felvevő képernyőjén beállított képkockasebesség-nevező alapján.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Percenként</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">A képkockák \"percenkénti\" alapon lesznek rögzítve (timelapse),&#10;a felvevő képernyőjén beállított képkockasebesség-nevező alapján.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Óránként</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">A képkockák \"óránkénti\" alapon lesznek rögzítve (timelapse),&#10;a felvevő képernyőjén beállított képkockasebesség-nevező alapján.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Lejátszási késleltetés:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(Ms-ban, minden rögzített képkocka erre a késleltetésre lesz állítva)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Indítási késleltetés:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(ms-ban, minden egyes képkocka rögzítése ennyi ideig várakozik, mielőtt elindul)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Minden képkocka {0} időközzel lesz rögzítve.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Rögzítési mód</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Használd a régebbi rögzítési módszert, amely lassabb, és nem működik a játékok rögzítésében,&#x0d;de nem igényel további beépülő modulokat.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Használd a Desktop Duplication API rögzítési módszerét, amely gyorsabb és&#x0d;képes teljes képernyős játékokat rögzíteni, de ehhez SharpDx beépülő modul és Windows 8 vagy újabb szükséges.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Mentés&#x0d;fájlba</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Minden rögzített képkocka képként lesz lementve közvetlenül a lemezre.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Memória&#x0d;gyorsítótár</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">A rögzített képkockákat pixeltömbként először a memóriában tárolja (korábban tömöríthető).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Tömörítés:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimális</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Lassabb, de valószínűleg optimálisabb tömörítés)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Leggyorsabb</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Gyorsabb, de valószínűleg kevésbé optimális tömörítés)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Nincs tömörítés</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(A képkockák rögzítése közben nem kell tömörítést végezni)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Gyorsítótár mérete:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(MB-ban. E méret elérése után az adatokat a lemezre írják / ürítik)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Megakadályozza a teljesen fekete képkockák rögzítését.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Megakadályozza, hogy a BitBlt a memóriagyorsítótárral tévesen olyan képkockákat eredményezzen, amelyeken az összes képpont fekete)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Az egérmutató megjelenítése a felvételen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">A kurzor színének kiválasztása</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Rögzített képkockasebesség.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Állandó késleltetés, amely nem változik a felvételi késéssel)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Csak akkor rögzítsen, ha valami megváltozik.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Egy képkocka csak akkor lesz rögzítve, ha valami módosul a rögzítési területen belül)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">A rögzítési teljesítmény javítása távoli asztali kapcsolaton.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Letiltja a réteges ablakrögzítést)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Memóriatisztítás kikényszerítése rögzítés közben.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Csökkenti a memóriahasználatot a rögzítés során, de csökkenti a teljesítményt)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Segédvonalak</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Harmadszabály</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Ide kattintva válthatod a&#10;harmadszabály-segédvonal megjelenítését.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Célkereszt</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Ide kattintva válthatod a&#10;célkereszt-segédvonal megjelenítését.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">A segédvonalak csak akkor jelennek meg, ha a felvevő szünetel vagy le van állítva.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">A címsor elrejtése (vékony mód).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">A képernyő nagyító bekapcsolása</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Ez bekapcsol egy nagyítót, miközben kiválasztod a felvételi területet)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Kijelölés közben animálja a képernyőterület szegélyét.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animálás a \"menetelő hangyák\" stílus használatával)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Kijelölés pásztázásának engedélyezése.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(A kijelölés sarkának közelében egy díszítőt jelenít meg, amely lehetővé teszi a felvételi terület mozgatását)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Kompakt mód.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(A felvevő vezérlőpanel egy kisebb verzióját jeleníti meg)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Az elvetés gomb megjelenítése felvétel közben is.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normál esetben csak szüneteltetés alatt látható)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">A képernyőválasztás teljesítményének javítása.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Csökkenti az akadozást a képernyőválasztás során a képernyő statikus nézetének megjelenítésével)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">A felvételi terület előző méretének megjegyzése.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Emlékezzen a felvételi terület előző helyére.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Használjon indítás előtti visszaszámlálást.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Másodpercben, várakozás a rögzítés megkezdése előtt)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Kurzor követésének bekapcsolása</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(A felvételi terület magától áthelyezésre kerül a kurzor helye alapján)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Puffermargó képpontokban, ahol a felvételi terület áthelyeződik)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(További puffermargó képpontokban, ahol a felhasználói felület elrejtőzik)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Kérdés a felvétel elvetése előtt.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Előnézet háttere</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Rács mérete:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Nagyon kicsi</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Kicsi</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Közepes</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Nagy</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Nagyon nagy</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Szeretem a nagy négyzeteket</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Vak vagyok</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Egyéni</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Magasság</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Szélesség</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Alkalmaz</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Alapszín</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Páros szín</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Páratlan szín</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">A kódolások megjelenítése külön ablakban.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">A címsor kiterjesztése (chrome ablak)</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Az ablak méretének automatikus beállítása a képkocka méretének megfelelően, közvetlenül a betöltés után.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">A képkocka nagyításának automatikus beállítása az ablak méretének megfelelően, közvetlenül a betöltés után.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Kérdés a képkockák törlése előtt.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Kérdés egy projekt elvetése előtt.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Kérdés a szerkesztő bezárása előtt (ha van egy megnyitott projekt).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">A szöveg kijelöléséhez engedélyezze a tripla kattintást.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">A feliratok körvonalát rajzolja a betűkön kívülre.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Képkockák eldobása szükség esetén.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Kihagy egy képkockát, ha az előnézet nem tudja időben megjeleníteni.)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Kihagy egy képkockát, ha az előnézet nem tudja időben megjeleníteni.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">A visszavonási / ismétlési előzmények korlátozása.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(A régebbi műveletek a korlát elérésekor törlődnek)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(A tárolt műveletek maximális száma)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">A kimeneti mappa szinkronizálása az előbeállítások között.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Az előbeállítások ugyanazt a kimeneti útvonalat használják)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Szinkronizálja a fájlnevet is.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Az előbeállítások is ugyanazt a fájlnevet fogják használni)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Csak az azonos fájltípusú előbeállítások szinkronizálása.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Csak az azonos fájltípusú előbeállítások lesznek szinkronban)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automatizált feladat</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Automatizált feladatok listája</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Feladat</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Részletek</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Engedélyezve</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Engedélyezze ezt a feladatot.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Válassz ki egy feladatot)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Válassz ki fent egy feladatot</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Ezeket a feladatokat a program egymás után hajtja végre a lista tetejétől az aljáig.&#x0d;Ez akkor történik, amikor először nyitsz meg egy projektet a szerkesztő használatával.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globális</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Képernyőfelvevő:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Megnyitja az alapértelmezett képernyőfelvevőt)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webkamera-felvevő:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Megnyitja a webkamera-felvevőt)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Fehértábla-felvevő:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Megnyitja a fehértábla-felvevőt, így rögzítheted a rajzaid)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Szerkesztő:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Egy másik szerkesztőablak megnyitása)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Beállítások:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Megnyitja a beállítások ablakot. Egyszerre csak egyet nyithatsz meg)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Kilépés:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Bezárja az összes ablakot, és eltávolítja az alkalmazást a tálcáról)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Felvevők</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Indítás / Szünet</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Elindítja vagy szünetelteti a felvételt. Pillanatképek készítésénél használt, ha a pillanatkép mód aktiválva van)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Megállítás:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Leállítja a felvételt, és megnyitja a szerkesztőt)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Elvetés:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Elveti az aktív felvételt, ha szüneteltetve van)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Kurzor követés:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(A felvételi terület beállítását a kurzor helyzete alapján kapcsolja be)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Követés kikapcsolása:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Ideiglenesen letiltja a felvételi terület beállítását a kurzor helyzete alapján, csak a módosító billentyűk az elfogadottak)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Ide kattintva beállíthatod a billentyűzet fókuszát, majd nyomd le a kívánt billentyűket és módosítókat.&#x0d;Egyes billentyűkombinációk nem engedélyezettek.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Az alkalmazás nyelve</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Automatikus felismerés</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Aktuális operációs rendszer nyelve (ha rendelkezésre áll)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Szeretnéd lefordítani az alkalmazásomat?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Kattints ide a fordítási irányelvek elolvasásához és a Fordító alkalmazás letöltéséhez.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Ezt követően</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">kattints ide az importáláshoz</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">és a fordításod teszteléséhez.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Küldd el nekem a következőn keresztül: </s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\"> (amikor elkészültél a lefordításával)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Ide kattintva megnyithatsz egy weblapot az irányelvekkel.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Az importálási lap megnyitása</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Megnyitja a levelezőalkalmazásodat</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Állapot</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Kötet:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} szabad a {1}-ból</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Ellenőrizze újra, hogy mennyi hely maradt.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Törölje a gyorsítótár mappáját.&#10;Eldöntheted, hogy meg akarod-e tartani a legutóbbi projekteket.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Kevés a hely az aktuálisan kiválasztott merevlemezen. Tisztítsd meg a gyorsítótár mappát, vagy módosítsd a helyet.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Lehetetlen beolvasni a meghajtó részleteit.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Nincsenek fájlok</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} fájl</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} fájl</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Nincsenek mappák</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} mappa</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} mappa</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} használatban</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Elérési utak</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Gyorsítótár:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Válaszd ki a gyorsítótár helyét (ideiglenes fájlok).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Naplók:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Add meg a hibanaplófájlok helyét.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">A kiválasztott mappa tallózása.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Beállítások helye</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Helyi:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Nem létezik</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Egy üres helyi beállításfájl létrehozása.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">A beállításfájl eltávolítása.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Nyisd meg azt a mappát, amelyben a beállításfájl található.&#x0d;Tartsd lenyomva a Ctrl billentyűt, miközben kattintva megnyitod a fájlt, ha lehetséges.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Beállítások betöltési mintája: Alapértelmezett ◄ AppData ◄ Helyi.&#x0d;• Ha nincs beállításfájl a Helyi mappában, az alkalmazás az AppData mappában keres, az Alapértelmezett értéket használja, ha nincs beállításfájl jelen.&#x0d;• Ha nincs helyi beállítás, akkor az összes beállítás az AppData beállításfájlba kerül.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Törölje az összes fájlt a gyorsítótárból az alkalmazás bezárásakor.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Kérdezzen meg, mielőtt törli az összes fájlt a gyorsítótárból.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">A régi projektek automatikus eltávolítása.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Az alkalmazás megnyitásakor a háttérfeladat törli a beállítottnál régebbi lezárt projekteket.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(napokban, az ennél régebbi lezárt projektek törlődnek / elvetésre kerülnek&#x0d;az alkalmazás megnyitása után)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Gyorsítótár törlése</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Szeretnéd törölni a gyorsítótár mappáját?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Amikor létrehozol egy felvételt, vagy megnyitsz valamit szerkesztésre, a projekt a gyorsítótár mappájában jön létre és tárolódik.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Szeretnéd eltávolítani ezeket a projekteket a gyorsítótár mappából?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Ne távolítsa el a legutóbbi projekteket.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Csak a {0} napnál régebbi projektek lesznek eltávolítva, amelyek jelenleg nincsenek használatban)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Minden projekt, amely jelenleg nincs használatban, eltávolításra kerül)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Mód:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Letiltva </s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Kézi</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Rendszer</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Rendszerproxy használata)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Gazdagép:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Felhasználónév:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Jelszó:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Feltöltési előbeállítások</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Szolgáltatás</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Cím</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Leírás</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Engedélyezve</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Feltöltési szolgáltatás</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Szolgáltatás kiválasztása</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Válassz ki fent egy feltöltési szolgáltatást</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Egyéni</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Engedélyezze ezt az előbeállítást.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Részletek</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Név:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Leírás:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Mód:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Névtelen</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Hitelesített</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Engedélyezés</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Token beszerzése</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">OAuth token beillesztése ide</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Felhasználónév:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Jelszó:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Engedélyez</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">A felhasználónév és a jelszó nem kerül tárolásra.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Beállítások</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Direkt hivatkozások használata.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Ennek az előbeállításnak egyedi nevet kell adnod.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">A nevet már egy másik feltöltési előbeállítás használja.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Ha hitelesített módban vagy, be kell fejezned a hitelesítési folyamatot.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Az alkalmazás engedélyezéséhez meg kell adnod a felhasználónevedet és jelszavadat.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Nem volt lehetséges az engedélyezési token megszerzése.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Az alkalmazás engedélyezéséhez meg kell adnod az engedélyezési tokent.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Az engedélyezés sikertelen. Ellenőrizze, hogy minden rendben van-e, és néhány másodperc múlva próbálja meg újra.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Nem sikerült betölteni az albumlistát.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Az engedélyezés befejeződött.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Nem engedélyezett.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Az engedély lejárt {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Az engedély {0}-ig érvényes.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Hivatkozások Gifv kiterjesztéssel a Gif helyett.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Gifek feltöltése egy kiválasztott albumba.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Kérdés a feltöltés előtt</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Az albumlista újratöltése.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Alapértelmezések</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Kérjen meg, hogy töltsem ki a feltöltés részleteit.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url típusa:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Válassz ki egy albumot (nem kötelező)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Ha szeretnéd, kiválaszthatod a célalbumot:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Feltöltési részletek (opcionális)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Feltöltési részletek</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Cím:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Leírás:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Címkék:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">A címkéket pontosvesszővel ( ; ) válaszd el egymástól.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Csak azok számára jelenik meg, akik közvetlen linken keresztül férnek hozzá. </s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Feltöltési előzmények</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Dátum</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Előbeállítás</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Sikeres?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Előzménybejegyzés törlése.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Hivatkozás:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Alacsonybb minőség</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Törlési hivatkozás:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Biztos, hogy törölni szeretnéd az előzménybejegyzést?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Ez a művelet nem vonható vissza.&#10;&#10;Szeretnéd törölni a kiválasztott előzménybejegyzést?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Rendelkezésre álló külső eszközök</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Kattints ide a letöltéshez&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Letöltés...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Letöltve&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Kattints ide a fájl tulajdonságainak megnyitásához.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">A Microsoft Store által terjesztett alkalmazások nem tölthetnek le más alkalmazásokat. Manuálisan kell letöltened.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg helye</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Válaszd ki az FFmpeg végrehajtható fájl helyét</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg végrehajtható fájl</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Az FFMpeg végrehajtható fájl elérési útja egy vagy több érvénytelen karaktert tartalmaz. Válassz egy érvényes helyet a végrehajtható fájlhoz.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski helye</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Válaszd ki a Gifski könyvtár helyét</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski könyvtár</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">A Gifski könyvtár elérési útja egy vagy több érvénytelen karaktert tartalmaz. Válassz érvényes helyet a könyvtárhoz.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg licenc</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski licenc</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx licenc</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Hiányzó írási engedély a mappában</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">A letöltést nem lehet elmenteni a mappába az írási jogosultság hiánya miatt.&#10;&#10;Szeretnéd a letöltőprogramot rendszergazdai jogokkal elindítani, hogy befejezze a letöltést?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Adományozz</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Adományozz US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Adományozz €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Megnyitja a Paypal weboldalát. Kiválasztott pénznem: Dollár</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Megnyitja a Paypal weboldalát. Kiválasztott pénznem: Euró</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Megnyitja a Paypal weboldalát. Ki kell választanod a pénznemet.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Feliratkozás</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Adományozz havonta a Patreon-on keresztül.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Adományozz havonta a Flattr-en keresztül.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Ajándék&#x0d;játékok</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Ajándék játékok Steam-en keresztül.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Ajándék játékok a GOG-n keresztül.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Fizess egy kávét a Ko-fi-n keresztül.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Kriptovaluták</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">A BitcoinCash cím másolása.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Támogatás</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Ha támogatni kívánod a projektet :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Verzió:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Frissítések keresése</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">A legfrissebb verzióval rendelkezel.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Szerző: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">A Microsoft Store verzió. Egyes szolgáltatások a kényszerített házirendek miatt le vannak tiltva.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Kapcsolat</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Csatlakozás a szerverhez</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Oldal meglátogatása</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Csatlakozás a szobához</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Technikai</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licenc:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Ez egy teljesen ingyenes alkalmazás)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Forráskód: </s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Adatvédelmi szabályzat:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Nagy köszönet:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Minden támogatómnak, akik visszajelzést és/vagy adományokat adtak.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Honosítás:</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Nyelvi kódok beszerzése...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">{0}-ként felismerve</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Nem ismerhető fel</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">A legalsó erőforrás a jelenleg használt erőforrás.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Az egyéni erőforrás alkalmazásához helyezd át a lista aljára.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Erőforrás exportálása...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Az erőforrásszótár mentése</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Erőforrásszótár megnyitása</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Erőforrás-szótár</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Erőforrás importálása...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">A fájlnév nem érvényes mintát követ</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Próbáld meg átnevezni így: StringResources.en.xaml, ahol az \"en\"-t ki kell cserélni a nyelvkódodra.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Nem adhatsz hozzá azonos nevű erőforrást</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Próbáld meg eltávolítani az ismétlődő erőforrást, vagy használj más nyelvkódot.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Redundáns nyelvkód</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">A \"{0}\" kód redundáns. Próbáld meg inkább a következőt használni: \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Ismeretlen nyelv</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">A \"{0}\" és családja nem ismerhető fel érvényes nyelvkódként.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">A honosítási erőforrás importálása nem volt lehetséges.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Felvétel</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Szünet</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Folytatás</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Megállítás</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Elvetés</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Pillanatfelvétel</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Magasság</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Szélesség</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">A kurzorkövetés engedélyezve van.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Ide kattintva válthatsz a rögzítési frekvenciamódok között.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">kézi</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interakciók</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Maximális képkocka/másodperc</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">képkocka/másodperc</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">1 és 60 képkocka/másodperc közötti tartomány, a magasabb érték azt jelenti, hogy több képkocka lesz rögzítve.&#10;Minden növekmény 16 ezredmásodperc különbséget jelent.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Maximális képkocka/perc</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">képkocka/perc</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">1 és 60 képkocka/perc közötti tartomány, a magasabb érték azt jelenti, hogy több képkocka lesz rögzítve.&#10;Minden növekmény 1 másodperc különbséget jelent.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Maximális képkocka/óra</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">képkocka/óra</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">1 és 60 képkocka/óra közötti tartomány, a magasabb érték azt jelenti, hogy több képkocka lesz rögzítve.&#10;Minden növekmény 1 perc különbséget jelent.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Kattints vagy nyomj meg billentyűket a rögzítéshez</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Igazítás ablakhoz (Húzás és felengedés az illesztéshez)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Kezdés előtt</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (szüneteltetve)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Megállítás...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Előindítás...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Eltelt rögzítési idő.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Teljes képkockaszám:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Captured manually:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">A rögzítés szünetel.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">A számítógéped nem támogatja a pontos rögzítési módot,&#10;ami azt jelenti, hogy a megcélzott képkockasebesség soha nem érhető el.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Nem lehetett rögzíteni a képernyőt</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Nem lehetett rögzíteni a képernyőt. A rögzítési módszer 5 próbálkozás után nem adott vissza képkockát.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">A képernyő rögzítését nem lehetett elindítani / szüneteltetni</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 vagy újabb szükséges a képernyő rögzítéséhez (Desktop Duplication API használatával).</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Terület</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Egy terület kijelölése</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Ablak</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Egy ablak kijelölése</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Képernyő</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Egy képernyő kijelölése</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Belső képernyő</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Általános képernyő</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Videókártya: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Felbontás: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Natív felbontás: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Húzással helyezd át&#10;a kijelölést.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Elfogad</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Újra</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Jobb klikk</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">A kijelölés megszakítása (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Kattintással és húzással jelöld ki a képernyő egy területét</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Kattintással és húzással jelölj ki egy területet</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Kattints ide ezen ablak kiválasztásához</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Kattints ide ezen képernyő kiválasztásához</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">A megszakításhoz nyomd le az Esc billentyűt</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Nyomd meg a(z) {0} billentyűt a felvétel leállításához</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">A felvevő ablak kis méretűre lesz állítva,&#10;állítsd vissza, vagy nyomd meg a(z) {0} gombot a rögzítés szüneteltetéséhez</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Felvétel elvetése</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Biztosan elveted a felvételt?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Ez a művelet elveti a felvételt, és eltávolítja az összes képkockát.&#x0d;A művelet nem vonható vissza.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Webkamera-felvevő</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Nem található videóeszköz :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Ellenőrizze a videóeszközöket.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Méretezés: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">A videó méretezésének módosítása.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Fehértábla-felvevő</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Automatikus felvétel</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Felvétel bekapcsolása rajzolás közben.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Tartás]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Színválasztó</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Egy szín kiválasztása</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Piros</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Zöld</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Kék</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">HEX</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Kezdeti szín</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Jelenlegi szín</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Utolsó szín</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Húzd ezt a&#x0d;mintaszínekre</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Kattintással és húzással válassz ki&#x0d;színeket a képernyőről.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Kivételmegjelenítő</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Belső kivétel megnyitása</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Kivétel típusa</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Üzenet</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Verem</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Forrás</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Valami rossz történt.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Jelentés küldése</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Előbeállítás</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Kódoló</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Név</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Leírás</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Egyéb</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Automatikus mentés, amikor egy beállítás módosul.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Az előre beállított beállítások (kódolási és exportálási beállítások) minden módosítását manuálisan kell elmenteni a mentés gomb megnyomásával.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Az előre beállított beállítások (kódolási és exportálási beállítások) minden módosítása automatikusan mentésre kerül.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Az alapértelmezett előbeállítás néhány tulajdonsága csak olvasható.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Az előbeállításnak nevet kell adnod.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Már van egy ugyanilyen nevű előbeállítás.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Automatikus mentések</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Ennek az előbeállításnak a módosításai automatikusan elmentésre kerülnek.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Alapértelmezett ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">A kódoló alapértelmezett beállítása.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Twitterhez ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Tiszteletben tartja a Twitter feltöltési korlátait (kivéve a méret és a felbontás).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">Nagy hatékonyságú videókódolás.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Régebbi és ismertebb kodek.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animáció</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Videó</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Kép</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projekt</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Kiváló minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Inkább a több színnel és színátmenettel rendelkező felvételekhez alkalmas.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Kiváló minőség • Átlátszó háttér</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Támogatja az animáció mentését átlátszó háttérrel.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Kiváló minőség • Grafika</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Jobb a kisebb színmennyiségű felvételekhez.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • Alapértelmezett</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">Szokványos felhasználói felület felvételéhez ajánlott. Medián vágás kvantálót használ árnyalás nélkül.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Kiegyensúlyozott</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Jó minőség fénykép jellegű képekhez Wu kvantáló használatával árnyalás nélkül.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Magas minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Jó minőség fénykép jellegű képekhez nagyobb bitmélységet használó Wu kvantálóval és Floyd-Steinberg hibadiffúziós árnyalással.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Alacsony minőség, gyorsabb</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Minden képkocka azonos, \"webbiztos\" színeket tartalmazó palettával való kvantálása Bayer 8x8 rendezett mátrix árnyalással.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - Magasabb minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Magasabb képminőség, de nagyobb fájlméret.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - Alacsonyabb minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Alacsonyabb képminőség, de kisebb fájlméret.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski - Magasabb minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Magasabb képminőség, de nagyobb fájlméret.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski - Alacsonyabb minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Alacsonyabb képminőség, de kisebb fájlméret.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski - Alacsonyabb minőség és gyorsabb kódolás</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Még alacsonyabb képminőség, gyorsabb kódolással, de kisebb fájlmérettel.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Rendszer - Alacsony minőség</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Alacsony minőség, de gyorsabb kódolás.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - Kiváló minőség</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Magas képminőség és kis fájlméret, de lassabb kódolás.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - Alacsonyabb minőség</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Alacsonyabb képminőség, kis fájlméret és gyorsabb kódolás.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Kiváló minőség</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Magas képminőség és kis fájlméret.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Képkockák beszúrása</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Mindkét oldalnak azonos méretűnek kell lennie, ez az ablak lehetővé teszi a kép és a vászon áthelyezését és átméretezését. Kattints a kijelöléshez és átméretezéshez.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Vászon mérete:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Kép igazítása a vásznon</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Átméretezi a vásznat, hogy mindkét kép beleférjen (a bal felső sarokból).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Különbség van a képkockaméretek között. Ezt meg kell oldanod a képkockák beszúrása előtt.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Új képkocka</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Aktuális képkocka</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Kép mérete:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Kép helyzete:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Képméret és pozíció&#x0d;visszaállítása</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Az új képkockák a jelenlegi képkockalistába&#10;kerülnek beszúrásra a következő helyen:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Előtte</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Utána</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Képkocka</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importálás</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">A vászon kitöltőszínének kijelölése</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Képkockák importálása videóból</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importáló:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Betöltés...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Méretezés:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Méret:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Magasság:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Szélesség:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Képkockasebesség</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">képkocka/másodperc</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Kezdés:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Vége:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Kiválasztás:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Képkockák:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Időtartam:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Nem lehetett betölteni a videót</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Az előnézet nem indulelt el. Próbáld ki egy másik importálóval, vagy ellenőrizd, hogy a videó nem sérült-e.&#x0d;Ha a MediaPlayer programot használod, ellenőrizd, hogy a \"Médiakezelési szolgáltatások / Windows Media Player\" nevű Windows-szolgáltatás be van-e kapcsolva, és győződj meg arról, hogy rendelkezel a szükséges videókodekkel.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Időtúllépés a képkocka előnézetének megszerzésekor.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Nincs kiválasztva képkocka az importáláshoz.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Kódoló</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Kódolás...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Kezdés</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Befejezve</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">A vágólapra másolva</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">A másolás nem sikerült</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Parancs végrehajtva</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">A parancs(ok) kimenetének megjelenítése.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">A parancs végrehajtása nem sikerült</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">A feltöltés nem sikerült</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Kattintás a lap megnyitásához a kép törléséhez (ha elérhető).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Eltelt idő, percben:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Elemzés:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Kódolás:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Feltöltve:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Másolva:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Parancsok:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Fájl törölve vagy mozgatva</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Megszakítva</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Hiba</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Kattints ide ezen hiba részleteinek megjelenítéséhez.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Feltöltés</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Parancsok végrejajtása</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Feldolgozás {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Felkészülés a második menetre</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Feldolgozás {0} - 2. menet</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Fájl létrehozása</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">A változatlan képpontok elemzése</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Az elemzés eredményének mentése</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Fájl megnyitása</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Mappa felfedezése</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Eltávolítás a listából</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Részletek megjelenítése</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Az összes befejezett kódolás elvetése</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Másolás képként</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Fájlnév másolása</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Mappa elérési útjának másolása</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Link másolása</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Parancs kimenet</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Parancs kimenet</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Értesítések</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Az összes értesítés elvetése</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Szerkesztő</s:String>\n    <s:String x:Key=\"S.Editor.File\">Fájl</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Kezdőlap</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Visszajátszás</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Szerkesztés</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Kép</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Áttűnések</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statisztikák</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Beállítások</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Súgó</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extrák</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Egy új frissítés érhető el!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Kattints ide, hogy többet olvashass róla.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Teljes szám, kiválasztás darab, kijelölés index</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Képkockák előkészítése</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Érvénytelen betöltés – Egyszerre nem importálhatsz több fájlt. Próbálj csak egy fájlt választani.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Érvénytelen betöltés – Egyszerre nem tölthetsz be több projektet. Próbálj csak egy projektet választani.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Médiafájl (kép- vagy videófájl) megnyitása</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Médiafájl (kép vagy videó) vagy projektfájl megnyitása</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Minden támogatott fájl</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Kép</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Videó</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Animált Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif animáció</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp animáció</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi videó</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska videó</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov videó</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 videó</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm videó</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp kép</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg kép</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png kép, az összes kijelölt kép</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip fájl, az összes kijelölt kép</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif projekt Zip-ként</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd fájl</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Új felvétel indításához menj a \"Fájl > Új\" részhez</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Képek, videók és projektek importálása \"fogd és vidd\" használatával.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Nagyon köszönöm, hogy az alkalmazásomat használod!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Minél alacsonyabb a képkockasebesség, a színszám vagy a képkockák közötti változások mennyisége, annál kisebb a méret</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Beszélgetni lenne kedved? Nyisd meg az \"Beállítások > Névjegy\"-et az elérhetőségi módokhoz</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Gondod van? Lépj kapcsolatba velem a Visszajelzés eszköz segítségével</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Szeretnéd kipróbálni az új felvevőt?&#x0d;Lépj a \"Beállítások > Felvevő\" menüpontra az engedélyezéshez</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Felvétel</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webkamera-&#x0d;felvétel</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Fehértábla-&#10;felvétel</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Üres&#x0d;projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Új</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Felvétel</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Webkamera-&#x0d;felvétel</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Fehértábla-&#10;felvétel</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Média</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Beszúrás</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Mentés másként</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Betöltés</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Legutóbbi&#x0d;projektek</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Mentés mint&#x0d;Projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Projekt&#10;elvetése</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Akció</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Visszavonás</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Ismét</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Visszaállítás</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Vágólap</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Vágólap megjelenítése</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Beillesztés</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Kivágás</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Másolás</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Nagyítás</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Beállítás&#x0d;tartalomhoz</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Kép igazítása</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Kijelölés</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Mind&#10;kijelölése</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Ugrás</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Fordított</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Kiválasztás törlése</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Visszajátszás</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Első</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Előző</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Lejátszás</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Szünet</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Következő</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Utolsó</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Visszajátszás beállítások</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Végtelenítés lejátszás közben.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Csak lejátszás közben használható.&#x0d;Ha meg akarod változtatni a végtelenítés beállításait a Gif és Apng exportálásnak,&#x0d;egyes kódolók számára a „Mentés másként” panelen lesz elérhető.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Képkockák</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Törlés</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Ismétlődések&#10;eltávolítása</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Képkockaszám&#x0d;csökkentése</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Egyenletes&#x0d;ciklus</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Az összes előző törlése</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Az összes következő törlése</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Átrendezés</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Fordítva</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Mozgatás&#x0d;balra</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Mozgatás&#x0d;jobbra</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Késleltetés (időtartam)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Felülbírálás</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Növelés vagy&#x0d;csökkentés</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Méretezés</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Méret és forgatás</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Átméretezés</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Körülvágás</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Tükrözés / forgatás</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Szöveg</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Felirat</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Szabad szöveg</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Cím képkocka</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Billentyűleütések</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Átfedés</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Szabad&#10;rajzolás</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Alakzatok</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Egér&#x0d;események</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Vízjel</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Szegély</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Árnyék</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Folyamatjelző</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Homályosítás</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Stílusok</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Halványítás</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Csúszás</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Általános</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Képkockák száma</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Teljes időtartam</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Képkocka méret</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Átlagos időtartam (késleltetés)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Aktuális idő</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Az aktuális idő (összesített) az aktuális képkocka alapján jelenik meg.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Képkocka DPI és méretezés</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Kijelölt képkocka</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Kivágási művelet</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Nem vághatsz ki minden képkockát.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">A felvételnek legalább egy képkockára szüksége van.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Az összes eltávolítása</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Biztos vagy benne, hogy el akarod távolítani az összes képkockát?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Ez a művelet elveti az aktuálisan megnyitott projektet, és nem lehet visszavonni. Szeretnéd folytatni?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Projekt elvetése</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Biztos vagy benne, hogy el akarod vetni a projektet?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Ez a művelet elveti a projektet, eltávolítva az összes képkockát.&#x0d;A művelet nem vonható vissza.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Elveted az előző projektet?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Ha úgy döntesz, hogy nem így teszel, az előző projekt elérhető lesz a Legutóbbi projekteken keresztül.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Képkockák törlése</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Biztos vagy benne, hogy törölni akarsz?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Ez a művelet {0} képkockát töröl.&#x0d;Később visszavonhatod ezt.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Kilépés a szerkesztőből</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Biztos vagy benne, hogy ki akarsz lépni?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">A jelenlegi projekt, amelyen dolgoztál, újra megnyitható a \"Legutóbbi projektek\" segítségével.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Az aktuális projekt, amelyen dolgoztál, újra megnyitható a \"Legutóbbi projektek\" segítségével, de ne felejtsd el, hogy néhány nap múlva automatikusan törlődik.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Érvénytelen Fogd és Vidd</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Egyszerre nem importálhatsz több fájlt</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Próbálj csak egy fájlt választani.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Lehetetlen betölteni a fájlt</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">A fájl nem tölthető be, mert a formátuma érvénytelen.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Egyszerre nem importálhatsz több projektet</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Próbálj csak egy projektet választani.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Nincs alkalmazandó szöveg.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a feliratot alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a szöveget alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Legalább egy képkockát ki kell választanod, amely mellé a cím képkockát  alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Legalább az egyik oldalon nullánál nagyobb szegélyvastagságot kell kijelölni.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a szegélyt alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Az átlátszatlanságnak nullánál nagyobbnak kell lennie ahhoz, hogy bármilyen különbséget tegyen a képkockában.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Ha az árnyékmélységet és az életlenítési sugarat nullának használod, az nem változtat semmin, mert a képkocka mögé lesz rejtve.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Legalább egy képpontot ki kell jelölnöd ahhoz, hogy a Cinemagraph-ot alkalmazni tudd. Jelöld ki a képpontokat rájuk rajzolva.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Halványítás áttűnés</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a halványítás áttűnést alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">A teljesen átlátszó szín nem befolyásolja ezt az átmenetet.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Csúszás áttűnés</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a csúszás áttűnést alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Képkockák betöltése</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Lehetetlen betölteni a projektet</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Nem lehetett betölteni a képkockákat, mert mindegyik sérült, vagy a képek nincsenek jelen ott, ahol várhatók lennének.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Néhány képkocka nem tölthető be</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">A képkockákat nem lehetett betölteni, mert nem találhatók, vagy mert sérültek.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Legalább egy képkockát ki kell választanod, amelyre az átfedést alkalmazza.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg nincs jelen. Add hozzá a Path környezeti változókhoz, vagy kattints ide a Beállítások > Extrák megnyitásához és a hely beállításához.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski nincs jelen. Add hozzá a Path környezeti változókhoz, vagy kattints ide a Beállítások > Extrák megnyitásához és a hely beállításához.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Nincs elég hely a meghajtón, ahol ez az alkalmazás tárolja a gyorsítótárat ({0}% maradt). Kattints ide a Beállítások > Ideiglenes fájlok megnyitásához, hogy helyet szabadítson fel.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Több különböző DPI-vel rendelkező képet próbáltál importálni, ami nem támogatott. Néhány importálva lett, a többit külön kell importálni.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Több különböző méretű képet próbáltál importálni, ami nem támogatott. Néhányat sikerült importálni, másokat külön-külön kell importálni.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Képkockák visszanyerése a gyorsítótárból.</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Képkockák frissítése</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Importálás előkészítése</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Képkockák importálása</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Ismétlődések elemzése</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">A késleltetés beállítása</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Ismétlődések elvetése</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Képkockák elvetése</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Mappák elvetése</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Képkockák átméretezése</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Képkockák körülvágása</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Átfedés alkalmazása képkockákra</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Cím képkocka létrehozása</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Tükrözés / forgatás alkalmazása képkockákra</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">A késleltetés módosítása</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Az áttűnési hatás alkalmazása</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Mentés előkészítése</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">A betöltés megszakítása és a projekt elvetése.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">A tökéletes ciklus megtalálása</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">A ciklusban fel nem használt képkockák elvetése</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Képkocka:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Kép megnyitása</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Mappa felfedezése</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Ugrás képkockára</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Ugrás képkockára (0-tól {0}-ig)</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Mentés másként</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Kiválasztott képkockák eltávolítása</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Új képernyőfelvétel</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Új webkamera-felvétel</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Új fehértábla-felvétel</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Új projekt</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Új (médiából vagy projektből)</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Új felvétel létrehozva</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Új webkamera-felvétel készült</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Új fehértábla-felvétel készült</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Új projekt létrehozva</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Visszavonás végrehajtva</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Alaphelyzetbe állítás végrehajtva</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Ismétlés végrehajtva</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} képkocka kivágva</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} képkocka másolva</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} képkocka beillesztve</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">{0}%-ra állítva a nagyítás</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Az összes képkocka kiválasztva</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Képkocka #{0} kiválasztva</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Fordított kijelölés</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Minden képkocka kijelölése törölve</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} képkocka törölve</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">A képkockalista megfordítva</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yoyo hatás alkalmazva</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">A képkocka balra mozgatva</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">A képkocka jobbra mozgatva</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Képkockák átméretezve</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Képkockák körülvágva</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Képkockák tükrözve / forgatva</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">A tükrözési művelet a kijelölt képkockákra vonatkozik, az elforgatás pedig az összes képkockára</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Ez a művelet az összes képkockára vonatkozik</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Ez a művelet a kijelölt képkockákra vonatkozik</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Ez a művelet a beállításoktól függően az összes vagy a kijelölt képkockákra vonatkozik</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">A Cinemagraph az első képkocka alapján minden képkockára vonatkozik</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Átfedés alkalmazva</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Cím képkocka létrehozva</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">A cím képkocka a kijelölt képkocka elé lesz beillesztve.</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Időtartam (késleltetés) megváltozott</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Áttűnés beillesztve</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Képkockasebesség csökkentve</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Ismétlődések eltávolítva</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Elrejt</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Alkalmaz</s:String>\n    <s:String x:Key=\"S.Action.Open\">Megnyitás</s:String>\n    <s:String x:Key=\"S.Action.Save\">Ment</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Mégse</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Legutóbbi projektek</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Legutóbbi projektek keresése ...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Létrehozás dátuma</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Képkockák száma</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Nincs kijelölt projekt. Jelöld ki a lista egy projektjét a betöltéshez.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Ez a szerkesztőpéldány már megjeleníti ezt a projektet.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Ezt a projektet már megnyitotta egy másik szerkesztőpéldány. A projekt nem nyitható meg másodszor, ha már meg van nyitva egy másik szerkesztőben.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Vágólap bejegyzések</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Vágólap bejegyzés:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} kép</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} kép</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Tartalom felfedezése</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Eltávolít</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Beillesztés viselkedése</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">A kiválasztott képkocka elé</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">A kiválasztott képkocka után</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Különbség</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Beállítások</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixelek (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Százalék (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Képarány megtartása.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Méretezés minősége:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant (jobb minőségű)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Lineáris (gyengébb minőség)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Legközelebbi szomszéd (gyengébb minőségű és gyorsabb)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Méretezési minőség.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Az Átméretezés művelet alkalmazásához másik értéket kell választanod.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Pontok</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Fent:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Balra:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Lent:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Jobbra:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">A körülvágás kijelölésnek kisebbnek kell lennie, mint az aktuális képkocka mérete.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">A körülvágás kiválasztásának 10x10 képpontnál nagyobbnak kell lennie.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Tükrözés vízszintesen</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Tükrözés függőlegesen</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Forgatás balra 90º-kal</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Forgatás jobbra 90º-kal</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">A képkockasebesség csökkentése</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Tényező:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Eltávolítás darab:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Késleltetés beállítása:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Ne állítsa be</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Összegzés az előző képkockával</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Egyenletes összegzés a fennmaradó képkockával</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Csökkentse a teljes projekt képkockasebességét.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Ha a beállítás nincs bejelölve, több egymást követő képkockát kell kijelölnöd,&#x0d;nagyobbat, mint az eltávolítási tényező.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Minden {1} képkocka után eltávolít {0} képkockát, anélkül, hogy megszámolná az eltávolítottakat.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">A képkockákat ki kell jelölnöd a képkockacsökkentés alkalmazásához (vagy be kell jelölnöd a teljes projektre való alkalmazás lehetőségét).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">A kijelölt képkockák listájának egymás után kell lennie. A kijelölt képkockák között nem hagyhatsz kijelöletlen képkockákat.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">A képkockák kijelölésének nagyobbnak kell lennie, mint az eltávolítási tényező, hogy a funkció bármit is eltávolíthasson.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Ismétlődések eltávolítása</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Hasonlóság (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Képkocka eltávolítás:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Az első képkocka eltávolítása</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Az utolsó képkocka eltávolítása</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Késleltetés beállítása:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Ne állítsa be</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Átlag használata</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Az összeg használata</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Ez a művelet elemzi az egyes képkockákat (képpontról képpontra), és eltávolítja azokat, amelyek legalább {0} %-ban hasonlítanak a közvetlen szomszédjára.&#x0d;Kiválaszthatod, hogy módosítani szeretnéd-e a képkockák késleltetését (kiállítási időtartamát).</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Egyenletes ciklus létrehozása</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Az első figyelmen kívül hagyása: </s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Összehasonlítás innen:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Vége</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Eleje</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Megpróbál egy olyan képkockát találni, amely legalább {0} %-ban hasonlít a kezdő képkockára, és törli az összes későbbi képkockát.&#x0d; Kiválaszthatod, hogy figyelmen kívül akarsz-e hagyni néhány kezdeti képkockát, és az összehasonlítást az elejétől (a küszöbérték után) vagy a végétől kezded.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">A figyelmen kívül hagyandó képkockák számának kisebbnek kell lennie, mint a képkockák teljes száma.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">A kiválasztott beállításokkal nem lehetett egyenletes ciklust létrehozni.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Már van egy egyenletes ciklusod a kiválasztott beállítások alapján.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Szöveg</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Betűtípus</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Család:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Stílus:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Vastagság:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Méret:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Szín:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Háttérszín:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Körvonal</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Vastagság:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Elrendezés</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Függőleges:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Vízszintes:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Igazítás:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Dekoráció:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Billentyűleütések</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Billentyűk</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Elválasztó:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Billentyűleütések szerkesztése</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Hagyja figyelmen kívül a Ctrl, az Alt, a Shift és a Windows billentyűket, ha nincs módosítóként használva.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Figyelmen kívül hagyja az olyan magányos billentyűleütéseket, mint a \"Control\", de a \"Control + C\"-t nem.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">A szoftver által szimulált billentyűleütések figyelmen kívül hagyása.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Csak a felhasználó által beírt billentyűleütéseket rögzíti.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">A billentyűleütések kiállításának kibővítése.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">A billentyűleütések kiállítását korábban indítsa el.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Ennyivel (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Nincs billentyűleütés a felvételen.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Billentyűleütés-szerkesztő</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Képkocka szám</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Észlelt billentyűleütések</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Billentyűleütés eltávolítása</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Billentyűleütés hozzáadása:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Kisbetűs felirat</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Ez lehetővé teszi, hogy egybetűs kisbetűket illessz be.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Mód</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Toll</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Radír</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Kijelölés</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Vonalradír</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Szélesség:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Magasság:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Hegy:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Téglalap</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellipszis</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Egyéb:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Kiemelő.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Ívhez illeszkedik</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">A kijelölt képkockákra nem alkalmazható rajz.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a szabad rajzolást alkalmazza.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Beilleszt</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Alakzatok</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Lekerekítés:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Kötőjelek:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">A kötőjelek méretét és a hézagok méretét szabályozza.&#10;Több méretet is beállíthatsz bonyolult szaggatott stílus létrehozásához.&#10;Az alapértelmezett érték \"1 0\" vagy üres, ami hézagok nélküli kötőjelet jelent.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Forgatás visszaállítása</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Eltávolítás</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Kitöltés</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Egér események</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Egér kiemelés színe:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Bal gomb színe:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Középső gomb színe:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Jobb gomb színe:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Kép</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Fájl:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Nincs kiválasztva</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Átlátszatlanság:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Egy kép kiválasztása</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Ki kell jelölnöd egy képet, hogy a kijelölt képkocká(k)ra alkalmazza.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Legalább egy képkockát ki kell választanod, amelyre a vízjelet alkalmazza.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Megjelenés</s:String>\n    <s:String x:Key=\"S.Border.Info\">Használj negatív értékeket, hogy a szegély kibővítse a képet. Ha így teszel, akkor a szegély minden képkockára alkalmazva lesz.&#x0d;Ha nem használsz negatív értéket, akkor a szegély csak a kiválasztott képkockákra lesz alkalmazva.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Árnyék színe:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Háttér színe:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Irány:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Elmosódás sugara:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Mélység:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelezés</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Homályosítás</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Sötétítés</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Világosítás</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Homályosítás beállítások</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Pixel mérete:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Homályosítási szint:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Sötétítési szint:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Világosítási szint:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Számítsa ki az egyes pixeles blokkok átlagos színét.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Alkalmazza az elhomályosítást a kijelölés inverzére.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Simaság</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">A kijelölő eszköz használatával válaszd ki a képkocka azon részét, amit el kell homályosítani.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">A kijelölőeszközzel jelöld ki a képkockának azt a részét, amelyet nem szabad elhomályosítani.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Nem választottál ki semmit. Kérlek, hogy a Kijelölő eszköz használatával jelöld ki a téglalapot, amit elhomályosítanál.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Típus</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Sáv</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Szöveg</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Pontosság:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Percek</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Másodpercek</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Ezredmásodpercek</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Százalék</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Képkocka szám</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Aktuális dátum/idő</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Egyéni</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Az összeg megjelenítése.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formátum:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formátum</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = ezredmásodperc</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = másodperc</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = perc</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = százalék</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = képkockaszám </s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Végösszegek:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Példák:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Használhatod a .Net Framework dátum és idő formátumát.&#x0d;A specifikáció az alábbi két hivatkozásban érhető el.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Szabványos formátumok</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Egyéni formátumok</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Számolás innen:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Elindítja a képkockaszám számlálását ettől a kiválasztott számtól.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Tájolás:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Késleltetés frissítése</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Késleltetés mód:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Felülbírálás (ms-ban)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Növelés vagy csökkenés (ms-ban)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Méretezés (%-ban)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Új érték</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Legalább 10 ms képkockánként.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Érték csökkentése / növelése</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Méretezési érték</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Ez az új érték felülírja az összes kijelölt képkocka időtartamát (késleltetését). Az érték 10 ms és 25500 ms között lehet.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Ez az érték csökkenti/növeli az egyes kijelölt képkockák időtartamát (késleltetését).&#x0d;-10000 ms és 10000 ms közötti érték kiválasztásával csökkentheted/növelheted a növekményt, de az egyes képkockák végső időtartama 10 ms és 25500 ms közé lesz korlátozva.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Az egyes kiválasztott képkockák időtartamának (késleltetésének) méretezése a százalékos érték szerint.&#x0d;Az egyes képkockák időtartamát 1% és 1000% közötti érték kiválasztásával méretezheted, de az egyes képkockák végső időtartama 10 ms és 25500 ms közé lesz korlátozva.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">A toll segítségével válaszd ki azokat a pixeleket, amelyek nem maradnak statikusak (a képkockák között változniuk kell), a tetejükre való festéssel.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Áttűnés hossza</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Áttűnés késleltetés</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Halványítás erre...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">A következő&#x0d;képkocka</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Egy szín</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Szín</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Az áttűnés a kiválasztott képkocka és a következő képkocka között lesz alkalmazva.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Fájltípus és előbeállítás</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">A kimeneti fájl formátuma.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Az exportálási előbeállítás, amely az összes aktuálisan megjelenített beállítást tartalmazza.&#10;Kezeld az exportálási előbeállításokat az alábbi gombok segítségével.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Animált kép</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Videó</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Képkockák</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Egyéb</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web kép</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime fájlformátum</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Film</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bittérkép</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Projekt</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif projekt</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop fájl</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Előbeállítások:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Alapértelmezett</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Hozzáadás</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Mentés</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Szerkesztés</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Eltávolítás</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Visszaállítás</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Előbeállítás törlése</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Biztos, hogy törölni szeretné az előbeállítást?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Ez a művelet nem vonható vissza.&#10;&#10;Szeretnéd törölni a kiválasztott előbeállítást?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Az előbeállítás visszaállítása</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Biztos, hogy vissza akarod állítani az előbeállítást?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Ez a művelet nem vonható vissza.&#10;&#10;Szeretnéd visszaállítani a kiválasztott előbeállításokat az alapértelmezett beállításaikra?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kódoló</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Kódoló és kvantáló</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">A kimeneti fájl létrehozásáért felelős kódoló.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Beépített kódoló.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF kódoló.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Rendszer</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">A rendszer által rendelkezésre álló kódoló.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Külső kódoló, melyet az FFmpeg.org készített.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Külső kódoló, amelyet a Gif.ski készített.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Kódoló beállítások</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Haladó mód engedélyezése</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Kézzel add meg a paramétereket a kódoló vezérléséhez.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Paraméterek:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Az FFmpeg-nek átadott paraméterek listája.&#10;&#10;Speciális paraméterek:&#10;{I} a bemeneti elérési útvonal (a képkockáké).&#10;{O} a kimeneti elérési útvonal (az exportált fájlé).&#10;{W} a képkocka szélessége.&#10;{H} a képkocka magassága.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">A 2-pass kódoláshoz egyszerűen add hozzá a '-pass 2'-t.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Előnézet</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Az FFmpeg-nek átadásra kerülő paraméterlista előnézete.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Kodek dokumentáció</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Formátum dokumentáció</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Szűrő dokumentáció</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif beállítások</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Színcsökkentő algoritmus (kvantálás).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neurális hálózat</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Magas hűségű kvantálás. Lassabb, de jó a nagyobb mennyiségű színhez.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Kevesebb színű animációkhoz jó. Gyorsabb, de színcsíkot eredményezhet.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Medián vágás</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Kevésbé jó, mint az Octree és lassabb.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Szürkeárnyalatos</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Rögzített szürkeárnyalatos palettát használ, így sokkal gyorsabb.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Leggyakrabban használt színek</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Egyszerűen a képkockák leggyakrabban használt színeit veszi.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Mintavétel:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Mintavételi tényező:&#10;Az 1-es érték jobban kinéző gifet eredményez, de lassabb lesz a renderelés.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Minőség:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Színek:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Színek maximális száma (minden egyes képkockához).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Használjon globális színtáblázatot.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Csökkentheti a gif minőségét és/vagy méretét.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Legjobb</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Leggyorsabb</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Használjon még gyorsabb kódolási eljárást.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Csökkentheti a gif minőségét.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Végtelenítés:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Végtelenített Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Ismétlés örökké</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Ismétlések száma.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Az átlátszóság engedélyezése.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Engedélyezi a teljes áttetszőségi módot, amely a gif hátterét teljesen átlátszóvá teszi.&#10;A chroma kulcscsere folyamatát a rendszer figyelmen kívül hagyja, ha ez a beállítás engedélyezve van.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Válaszd ki, hogy melyik szín jelenjen meg átlátszóként.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Ha ki van választva egy szín, akkor az átlátszóvá lesz alakítva, és átlátszóként fog megjelenni a létrehozott gifben.&#10;Ha nincs szín kiválasztva, az összes átlátszó szín (Alfa = 0%) a szokásos módon átlátszóként fog megjelenni.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">A változatlan képpontok észlelése.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">A képkockák közötti változatlan képpontok elemzésével és észlelésével,&#10; lehetővé válik, hogy csak a szükséges részek legyenek elmentve a gifbe.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Cserélje le ezeket a képpontokat egy chroma kulcsra.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Az ismétlődő/változatlan képpontokat a rendszer lecseréli ezzel a chroma kulccsal,&#10;lehetővé téve kevesebb szín használatát képkockánként.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma kulcs:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Árnyalás:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer-skála:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Kvantáló</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Háttérszín:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Azok az alfa komponenst (átlátszóságot) tartalmazó pixelek, melyeket a kiválasztott kvantáló átlátszannak ítél, ezzel a színnel lesznek összemosva a végleges kvantált szín megállapítása előtt.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alfa küszöb:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Meghatározza azt a bemeneti alfa értéket, ami alatt a kvantált szín átlátszónak tekintendő.&#x0d;&#x0a;Ha 0, akkor az eredmény soha nem tartalmaz átlátszóságot.&#x0d;&#x0a;Ha 255, akkor csak a teljesen átlátszó pixelek lesznek a végeredményben átlátszóak.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Fehérküszöb:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Meghatározza azt a legalacsonyabb bemeneti fényességet, amitől kezdve a kimeneti érték fehérnek tekintendő.&#x0d;&#x0a;Hatással van az eredmény fényességére, bár egy hibadiffúziós árnyaló képes kompenzálni ennek a paraméternek az értékét.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Közvetlen leképezés</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Ha ki van jelölve, a kvantált szín megállapítása a palettában való legközelebbi szín keresése helyett egy közvetlen leképezéssel történik.&#x0d;&#x0a;Ez gyorsabb kvantálás eredményez, de növelheti az eredmény kontrasztját. Egy hibadiffúziós árnyaló képes kompenzálni ennek a paraméternek az értékét.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Palettaméret:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Meghatározza a képkockánkénti maximális palettaméretet.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Egyedi bitmélység</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Ha ki van jelölve, a bitmélység szabadon állítható&#x0d;&#x0a;⚠️ Vigyázat: A legmagasabb érték NAGYON sok memóriát igényelhet!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">A magasabb érték nagyobb pontosságot, nagyobb színteret, lassabb feldolgozást és nagyobb memóriahasználatot jelent.&#x0d;&#x0a;Pl. ha 1, akkor az eredmény legfeljebb 8 színű lehet, vagy 2 esetén legfeljebb 64 színű.&#x0d;&#x0a;Oktális fa és Wu kvantálók esetén meghatározza a maximálisan megkülönböztethető monokróm árnyalatok színét is.&#x0d;&#x0a;Pl. ha 5 (az alapérték Wu kvantáló esetén), akkor legfeljebb 32 monokróm árnyalat különböztethető meg.&#x0d;&#x0a;⚠️ Vigyázat: A Wu kvantáló legalább 650 MB memóriát igényel a legmagasabb érték esetén.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">Lineáris színtér</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">Ha ki van jelölve, egyes műveletek (háttérszínnel való összemosás, kvantálás, árnyalás, legközelebbi szín keresése a palettában) a lineáris szintérben történnek az sRGB színtér helyett.&#x0d;&#x0a;A lineáris színtérben való feldolgozás lassabb, de jobb minőségű eredményt biztosít, különösen, ha a kvantáló kevés színt használ.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Megjegyzés: Kevés szín használata esetén az esetleg átméretezett előnézet fényessége hibás lehet, mert a WPF az átméretezést az sRGB színtérben végzi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Fekete-fehér</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Fix 1 bites paletta fekete és fehér színekkel.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Szürkeárnyalatos 4 színű</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Fix 2 bites paletta 4 szürkeárnyalattal.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Szürkeárnyalatos 16 színű</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Fix 4 bites paletta 16 szürkeárnyalattal.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Szürkeárnyalatos 256 színű</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Fix 8 bites paletta 256 szürkeárnyalattal.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Alapértelmezett 4 bites rendszerpaletta</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Fix 4 bites paletta a szabvány 16 sRGB színnel.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Alapértelmezett 8 bites rendszerpaletta</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Fix 8 bites paletta \"webbiztos\" színekkel és átlátszósággal.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 paletta</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Fix 8 bites paletta az RGB 332-es színtér színeivel.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Oktális fa kvantáló</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Minden képkocka színeinek optimalizálása az oktális keresőfa algoritmus segítségével.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Medián vágás kvantáló</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Minden képkocka színeinek optimalizálása a medián vágás algoritmus segítségével.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu kvantáló</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Minden képkocka színeinek optimalizálása Xiaolin Wu algoritmusának segítségével.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Árnyalás</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Erősség:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">Az árnyalás erőssége, vagy 0 az erősség automatikus kalibrációjához.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Magérték:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Egy egész szám, ami egy rögzített véletlenszerű mintázatot eredményez.&#x0d;&#x0a;Üresen hagyva minden képkocka véletlenszerű magértéket fog használni.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Nincs</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">A képkockák árnyalás nélkül lesznek kvantálva.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Szerpentin feldolgozás</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Ha ki van jelölve, a kvantálási hiba propagálásának iránya sorról-sorra váltakozva történik.&#x0d;&#x0a;Ez segít enyhíteni a hibadiffúziós árnyalásra jellemző fodrozódást.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (rendezett)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">A 2x2-es Bayer mátrix mintázat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (rendezett)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">A 2x2-as Bayer mátrix mintázat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (rendezett)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">A 4x4-es Bayer mátrix mintázat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (rendezett)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">A 8x8-as Bayer mátrix mintázat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Féltónus (rendezett)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Egy féltónus árnyalást eredményező 8x8-as mátrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Kék zaj (rendezett)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Egy kék zaj mintát tartalmazó 64x64-es mátrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson 4x3-as mátrixa 6 effektív értékkel.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2-es mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">Floyd és Steinberg eredeti 3x2-es mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Jarvis, Judice és Ninke 5x3-as mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra 5x3-as mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra 5x2-es mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra 3x2-es mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Stevenson és Arce 7x4-es hexagonális mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (hiba diffúzió)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki 5x3-as mátrixa.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Véletlen zaj</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Véletlen fehér zaj.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Átlapolt gradiens zaj</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Egy képlet alapján generált nem véletlenszerű gradiens zaj.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Előnézet</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Info\">A Control + Egérgörgő használatával nagyítható az előnézeti kép.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Megjegyzés: A ténylegesen generált végső képkocka jobb minőségű lehet, ha a delta képkockák&#x0d;&#x0a;engedélyezve vannak, és a kiválasztott kvantáló képkockánként optimalizálja a színeket.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Aktuális képkocka</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Ka ki van jelölve, az előnézet az aktuális képkockán illusztrálja a beállításokat egy standard kép helyett.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">A jelen beállítások magas memóriaigénye miatt az automatikus előnézet kikapcsolva. A linkre kattintással frissíthető az előnézet.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Az előnézet generálása során hiba történt: {0}&#x0d;&#x0a;A linkre kattintással megkísérelhető az előnézet újbóli generálása.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Az animáció beállításai</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Végtelen ismétlés</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Ha ki van jelölve, az animáció vég nélkül fog ismétlődni.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Oda-vissza</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Ha ki van jelölve, az animáció oda-vissza fog ismétlődni.&#x0d;&#x0a;Mivel ezzel közel duplázódik a kódolt képkockák száma, ez nagyobb fájlmérettel és hosszabb kódolási idővel jár.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Ismétlések száma:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Meghatározza, hányszor legyen az animáció lejátszva.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Delta képkockák engedélyezése</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Ha ki van jelölve, a kódolás során kísérlet történik a változatlan pixelek detektálására.&#x0d;&#x0a;Optimalizált kvantáló esetén ez lehetővé teszi, hogy egy képkocka több mint 256 színt tartalmazzon.&#x0d;&#x0a;Ez a beállítás nincs figyelembe véve, ha a kvantáló nem használ átlátszóságot és nincs kijelölve a Levágott képkockák engedélyezése.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Megjegyzés: Ez a beállítás szemmel látható zajt okozhat a színekben vagy az árnyalási mintázatokban.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta tűréshatár:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Meghatározza a maximális tűréshatárt a változott pixelek detektálása során.&#x0d;&#x0a;Ha 0, akkor semmilyen különbség nincs tolerálva.&#x0d;&#x0a;Ha 255, akkor lehetséges, hogy egyes képkockák (vagy akár az összes) üres lesz.&#x0d;&#x0a;Optimalizált kvantáló esetén az észszerű tartomány 0 és 16 között van, míg a fix színeket alkalmazók használhatók valamivel nagyobb értékekkel, különösen árnyalás esetén.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">A túl magas delta tűréshatár gyenge minőségű eredménnyel járhat. A linkre kattintással visszaállítható a delta tűréshatár.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Levágott képkockák engedélyezése</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Ha ki van jelölve, a kódoló a tényleges felbontásnál kisebb képkockákat is hozzáadhat az animációhoz.&#x0d;&#x0a;Ha a delta képkockák nincsenek engedélyezve, akkor ez mindössze az esetlegesen átlátszó keretek levágását jelenti.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">A delta képkockák engedélyezése figyelmen kívül lesz hagyva, mert a jelenlegi konfiguráció nem használ átlátszóságot, és a Levágott képkockák engedélyezése nincs kijelölve. A linkre kattintás engedélyezi a levágott képkockákat.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">A levágott képkockák engedélyezésének nem lesz hatása, mert a jelenlegi konfiguráció nem használ átlátszóságot, és a Delta képkockák engedélyezése nincs kijelölve. A linkre kattintás engedélyezi a delta képkockákat.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng beállítások</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Előrejelzés:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Nincs</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Fel</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Átlag</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Kevert</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Végtelenített Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">A változatlan képpontok észlelése.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Az összes változatlan képpontot átlátszó színnel fesse.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Előbeállítás:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Nincs</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Alapértelmezett</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Kép</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Fotó</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Rajzolás</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Ikon</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Szöveg</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Veszteségmentes mód használata.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Mód:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normál</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Haladó</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">A kódoló paramétereinek konfigurálási módja:&#10;Normál: A szabványos UI-vezérlők használata.&#10;Haladó: Szövegdoboz használata a paraméterek beírásához.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Kodek:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">A videó kódoló, amely a nyers pixelek&#10;kimeneti fájlba való átalakításáért felel.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Előbeállítás:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Nincs</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Nagyon lassú</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Lassabb</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Lassú</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Közepes</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Gyors</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Gyorsabb</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Nagyon gyors</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Szuper gyors</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra gyors</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Minőség</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Kiegyensúlyozott</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Sebesség</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Alapértelmezett</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Veszteségmentes</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Veszteségmentes (nagy teljesítményű)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Nagy teljesítmény</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Kiváló minőség</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray lemez</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Alacsony késleltetés</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Alacsony késleltetés (nagy teljesítmény)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Alacsony késleltetés (magas minőség)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Kódolási sebesség a tömörítési arányhoz&#10;a lassabb előbeállítások jobb tömörítést adhatnak&#10;(minőség / fájlméret).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardveres gyorsítás:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Ki</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Be</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatikus kiválasztás</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">A dedikált hardver (videógrafika) használatát szabályozza.&#10;Ki: Nem használ dedikált hardvert.&#10;Be: Dedikált hardvert használ, és lehetővé teszi a speciális kódolók kiválasztását.&#10;Auto: Dedikált hardvert használ, és lehetőség szerint automatikusan kiválasztja a megfelelő kódolót.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixelformátum:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatikus</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Virt. szinkron.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Videószinkronizálási módszer.&#10;Automatikus: 1 és 2 között választ a muxer (formátum) képességeitől függően.&#10;Passthrough: Minden egyes képkocka az időbélyegekkel együtt kerül át a kódolóhoz.&#10;Állandó: A képkockák duplikálódnak és kiesnek, hogy pontosan a kért állandó képkockasebességet érjék el.&#10;Változó: A képkockák az időbélyegzőjükkel együtt kerülnek átadásra vagy elhagyásra, hogy megakadályozza, hogy 2 képkockának ugyanaz legyen az időbélyege.&#10;Eldobás: Mint a passthrough, de az összes időbélyegzőt megsemmisíti, így a kódoló a képkockasebesség alapján új időbélyegzőket generál.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Állandó képkockasebesség</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Változó képkockasebesség</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Eldobás</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Képkockasebesség:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Egyéni</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Lépés:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Állandó sebességtényező.&#10;Minőség- és sebességszabályozási beállítás.&#10;Hagyd üresen, ha nem kívánod beállítani ezt a tulajdonságot.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Minőségi szint:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">A kisebb értékek jobb minőséget jelentenek.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitráta:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Cél videó bitráta.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitráta mód:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Állandó</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Változó</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Minimális ráta:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimális bitráta-tolerancia.&#10;Leghasznosabb az állandó bitráta mód használatakor.&#10;Hagyd üresen vagy állítsd nullára, ha nem kívánod beállítani ezt a tulajdonságot.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Maximális ráta:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximális bitráta tolerancia.&#10;A puffer méretét is be kell állítani.&#10;Hagyd üresen vagy állítsd nullára, ha nem kívánod beállítani ezt a tulajdonságot.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Puffer mérete:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">A sebességszabályozó puffer mérete.&#10;Hagyd üresen vagy állítsd nullára &#10;ha nem kívánod beállítani ezt a tulajdonságot.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Kép becsomagolása Zip-be.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">A képeket egy becsomagolt mappába exportálja.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">A kép tömörítése.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Tömörítse a képadatokat a RLE algoritmus segítségével.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Az idővonal adatainak mentése.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">A képkockák időzítését exportálja, ahelyett, hogy csak a képkocákat.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Mentés beállítások</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Részleges exportálás.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">A fájl mentése egy kiválasztott mappába.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Felülírás?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Figyelmeztetés</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Csak arra figyelmeztet, hogy létezik egy másik fájl ugyanezzel a névvel.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Felszólítás</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Megkérdezi, hogy a felhasználó felül kívánja-e írni a fájlt.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Engedélyezés</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Egyszerűen felülírja a fájlt.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Mentés projektként is (ugyanaz a mappa, ugyanaz a fájlnév).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Fájl feltöltése.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Másolás a vágólapra.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Fájl</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">A kimeneti fájlt a vágólapra másolja.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Mappa elérési út</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">A kimeneti fájl mappaelérési útját a vágólapra másolja.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Fájl elérési útja</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">A kimeneti fájl elérési útját a vágólapra másolja.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">A feltöltési szolgáltatás által létrehozott hivatkozást a vágólapra másolja.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Kódolás utáni parancsok végrehajtása.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Írd be a kódolás után végrehajtandó parancsokat.&#x0d;Több parancs végrehajtásához írd be mindegyiket egy különálló sorba.&#x0d;Makrók:&#x0d;{p} = Kimeneti fájl elérési útja.&#x0d;{f} = Kimeneti mappa elérési útja.&#x0d;{u} = A feltöltött fájl URL-címe.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Részleges exportálás</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Mód:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Válaszd ki a részleges exportálási módszert.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Kifejezés</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Az animáció egyes részeinek exportálása egy egyszerű kifejezés alapján.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Képkocka tartomány</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Az animációnak csak egy részét exportálja a képkockatartományon belül.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Időintervallum</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Az animációnak csak egy részét exportálja az időkereten belül.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Kiválasztás</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Csak az idővonalon kijelölt képkockákat exportálja.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Nincs képkocka kiválasztva.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 képkocka kiválasztva.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} képkocka kiválasztva.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Kezdet:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Vég:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Kifejezés:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Írd be a képkockaszámokat vesszővel elválasztva vagy&#10;a képkockasorozatokat mínusz jellel elválasztva:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Fájl</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Cél mappa.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Válaszd ki a kimeneti mappát</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Válaszd ki a helyet.&#x0d;Nyomd le a Shift billentyűt és kattints,&#x0d;hogy a fájlnevet is kiválaszd.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Fájl formátuma</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">A fájl neve. Dátum/idő formátum beszúrása '?' közé </s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animáció</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">A fájlszám növelése</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">A fájlszám csökkentése</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Egy azonos nevű fájl már létezik.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Mentés a vágólapra.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Ki kell választanod, hogy hová szeretnéd menteni a fájlt (egy mappába, a vágólapra vagy máshová feltölteni).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Nem választottad ki a fájlkiterjesztést.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">A haladó mód kiválasztásakor a paramétereket a paraméterek mezőbe kell beírnod.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">A paraméterek mezőből hiányoznak a {I} (bemenet) és/vagy {O} (kimenet) speciális paraméterek.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">A kódolás utáni parancs végrehajtásához be kell valamit írnod a Parancsok szövegmezőbe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Legalább egy képkockát ki kell választanod, ha csak a kiválasztott képkockák exportálására van lehetőség.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">A projekt részleges exportálására vonatkozó kifejezés érvénytelen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Nincs kijelölt feltöltési szolgáltatás. Ki kell választanod egy célt.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Nem lehet feltölteni a kijelölt szolgáltatásba, mert nem volt engedélyezve. Az alkalmazás engedélyezéséhez látogass el az Beállítások > Feltöltési szolgáltatások részhez.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">A hivatkozás másolásának lehetősége nem választható ki, mert nem állítottad be a fájl feltöltését.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Ki kell jelölnöd egy kimeneti mappát.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">A kimeneti mappa nem létezik.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">A kimeneti mappa egy vagy több érvénytelen karaktert tartalmaz. Jelölj ki egy érvényes mappát.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Ki kell választanod egy fájlnevet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">A kimeneti fájlnév egy vagy több érvénytelen karaktert tartalmaz. Válassz egy érvényes fájlnevet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">A fájlnév már használatban van. Állítsd be, hogy felülírja vagy válassz egy másik fájlnevet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Már van egy projekt ugyanezzel a fájlnévvel. Állítsd be a felülírást, vagy válassz másik fájlnevet vagy mappát.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">A művelet megszakadt.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Feltöltés</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Válaszd ki a feltöltési előbeállítást, amely a feltöltéshez használt szolgáltatás adatait tartalmazza.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Ez a feltöltési szolgáltatás korlátokat szab.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Új feltöltési előbeállítás hozzáadása.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Feltöltési előbeállítások szerkesztése.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">A feltöltési előbeállítás előzményeinek megtekintése.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Az aktuálisan kiválasztott feltöltési előbeállítás eltávolítása.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Válassz ki egy feltöltési előbeállítást</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Válassz egyet a listáról.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Ehhez a formátumhoz nem áll rendelkezésre feltöltési előbeállítás</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Egy előbeállítás hozzáadása az alábbi gomb használatával.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">A feltöltési előbeállítás törlése</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Biztos, hogy törölni szeretnéd a feltöltési előbeállítást?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Ez a művelet nem vonható vissza.&#10;&#10;Szeretnéd törölni a kiválasztott feltöltési előbeállítást?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Képkockák exportálása</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Biztos vagy benne, hogy exportálni akarod a képkockákat?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Ez a művelet {0} képkockát közvetlenül a kijelölt mappába exportál.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Felülírás</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Szeretnéd felülírni a fájlt?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Egy '{0}' nevű fájl már létezik abban a mappában.\\r\\nSzeretnéd felülírni?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Szeretnéd felülírni a fájlokat?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Egy vagy több azonos nevű fájl már létezik abban a mappában.\\r\\nSzeretnéD felülírni őket?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Parancs előnézet</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Parancs</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Bemeneti elérési útvonal</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Kimeneti elérési útvonal</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Visszajelzés</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Küldés</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Előnézet</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Visszajelzés küldése</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Visszajelzés címe </s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Üzenet</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Ha egy hibát tapasztalsz, ne felejtsd el elmagyarázni, hogyan jelentkezett, lépésről lépésre.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Visszajelzés típusa</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Javaslat</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Probléma / Hiba</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Az e-mail címed</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Be kell írnod egy címet a visszajelzéshez.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Be kell írnod egy üzenetet a visszajelzésbe.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Be kell írnod az e-mail címedet, hogy választ kapj a fejlesztőtől.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Küldés a háttérben... Ez az ablak hamarosan bezáródik.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Mellékletek (Nem kötelező, 20MB Maximum)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Mellékletek hozzáadása</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Az összes melléklet eltávolítása</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Értek angolul</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">és portugálul (brazil és európai).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Ez az, amit el fogsz küldeni, valamint az összes mellékletet.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Hibaelhárítás</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Hiányzik egy ablak?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Ha valamelyik ablak hiányzik (a képernyőn kívül van),&#x0d;az alábbi beállításokkal alaphelyzetbe állíthatod az aktuális és az indítási pozícióját.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Az egyes ablakok jelenleg a következő helyen találhatók:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Az egyes ablakok a következő alkalommal itt nyílnak meg:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Az összes ablak áthelyezése a főképernyőre.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Állítsa alaphelyzetbe az összes ablak indítási pozícióját.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normál</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Dőlt </s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Ferde</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Fekete</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Félkövér</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Demi Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra fekete</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra könnyű</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Nehéz</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Könnyű</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Közepes</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normál</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Közepes</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Vékony</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra fekete</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra könnyű</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Fent</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Középre</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Lent</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Nyújtás</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Balra</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Középre</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Jobbra</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Vízszintes</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Függőleges</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Balra</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Jobbra</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Középre</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Sorkizárt</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Nincs</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Aláhúzás</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Áthúzás</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Felső vonal</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Alsó vonal</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.it.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Indietro</s:String>\n    <s:String x:Key=\"S.Cancel\">Annulla</s:String>\n    <s:String x:Key=\"S.Yes\">Sì</s:String>\n    <s:String x:Key=\"S.No\">No</s:String>\n    <s:String x:Key=\"S.Add\">Aggiungi</s:String>\n    <s:String x:Key=\"S.Edit\">Modifica</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Titolo</s:String>\n    <s:String x:Key=\"S.Description\">Descrizione</s:String>\n    <s:String x:Key=\"S.SelectColor\">Cliccare qui per selezionare il colore.</s:String>\n    <s:String x:Key=\"S.Documentation\">Fare clic per accedere alla documentazione.</s:String>\n    <s:String x:Key=\"S.Suppress\">Sopprimi</s:String>\n    <s:String x:Key=\"S.Preview\">Anteprima</s:String>\n    <s:String x:Key=\"S.Size\">Dimensione</s:String>\n    <s:String x:Key=\"S.Background\">Sfondo</s:String>\n    <s:String x:Key=\"S.Color\">Colore:</s:String>\n    <s:String x:Key=\"S.Delay\">Ritardo</s:String>\n    <s:String x:Key=\"S.DelayMs\">Ritardo (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Valore -+ (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Valore di scala:</s:String>\n    <s:String x:Key=\"S.Margin\">Margine:</s:String>\n    <s:String x:Key=\"S.Padding\">Spaziatura:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Altezza min:</s:String>\n    <s:String x:Key=\"S.AndOr\">e/o</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Oh no, l'applicazione è esplosa :(</s:String>\n    <s:String x:Key=\"S.Required\">Campo richiesto.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Dipendenza mancante</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 non è presente</s:String>\n    <!--<s:String x:Key=\"S.Warning.Net.Message\">In order to properly use this app, you need to download the correct version of the .Net Framework.&#10;Would you like to open the web page to download it?</s:String>-->\n    <s:String x:Key=\"S.Warning.Single.Title\">È permessa una sola istanza</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">L'applicazione è già in esecuzione</s:String>\n    <!--<s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif is already running, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>-->\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Salvataggio delle impostazioni</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Provare a salvarlo di nuovo?</s:String>\n    <!--<s:String x:Key=\"S.SavingSettings.Message\">Looks like ScreenToGif does not have enough privileges to save the settings to the disk.&#10;&#10;Would you like to try again, but this time using administrative privileges?</s:String>-->\n    \n    <s:String x:Key=\"S.Exiting.Title\">Uscita da SceenToGif in corso...</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Sei sicuro di voler uscire?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Tutte le finestre verranno chiuse e l'icona tray verrà rimossa.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Cambia adattatore grafico</s:String>\n    <!--<s:String x:Key=\"S.Warning.Graphics.Instruction\">Switch to the correct graphics adapter to capture the selected screen</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Message\">Due to a limitation in DirectX, ScreenToGif must be running on the same graphics adapter as the screen being captured.</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Action\">Switch the graphics adapter set for ScreenToGif by opening Windows Settings > System > Display > Graphics Settings, or by clicking on the link below.</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Switch the graphics adapter for ScreenToGif by opening the graphics settings of your graphics adapter.</s:String>-->\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Apri le impostazioni di Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Invio</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Spazio</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Clic destro</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nuova registrazione schermo</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nuova registrazione webcam</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nuova registrazione lavagna</s:String>\n    <s:String x:Key=\"S.Exit\">Esci</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nuova registrazione schermo</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nuova registrazione webcam</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nuova registrazione lavagna</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nuova animazione</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Inserisci registrazione schermo</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Inserisci registrazione webcam</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Inserisci registrazione scrivania</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Inserisci da file multimediale (immagini e video)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Salva con nome...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Carica file (immagini, video e progetti)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Carica progetti recenti</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Scarta progetto corrente</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Sovrascrivi ritardo dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Aumenta/riduci ritardo dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Scala il ritardo dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Imposta zoom al 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Corregge la finestra alle dimensioni del fotogramma</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Adatta l'immagine alla dimensione disponibile della finestra</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Selezionare il primo fotogramma</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Seleziona il fotogramma precedente</s:String>\n    <s:String x:Key=\"S.Command.Play\">Avvia l'animazione</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Seleziona fotogramma successivo</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Seleziona l'ultimo fotogramma</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Annulla</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Ripeti</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Annulla tutte le modifiche al progetto</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Copia i fotogrammi selezionati e salvali negli appunti</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Taglia i fotogrammi selezionati e salvali negli appunti</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Incolla i fotogrammi dagli appunti</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Elimina tutti i frame selezionati</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Elimina tutti i fotogrammi precedenti</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Elimina tutti i fotogrammi successivi</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Rimuovi duplicati</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Riduci conteggio fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Crea un ciclo morbido</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Inverti animazione</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Fai in modo che le animazioni vadano avanti e indietro</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Sposta il fotogramma selezionato a sinistra</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Sposta il fotogramma selezionato a destra</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Ridimensiona tutti i fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Ritaglia tutti i fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Specchia o ruota i fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Aggiungi una didascalia</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Aggiungi un testo fluttuante</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Aggiungi un fotogramma con un titolo</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Inserisci tasti premuti durante la registrazione</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Disegna forme libere</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Aggiungi forme</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Clic del mouse</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Seleziona un'immagine da aggiungere come filigrana</s:String>\n    <s:String x:Key=\"S.Command.Border\">Aggiungi bordi</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Aggiungi ombreggiatura</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Nascondi parti riservate dei propri fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Usa gli strumenti di disegno per selezionare le parti del fotogramma che non devono rimanere statici durante l'animazione</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Barra di avanzamento o testo con dettagli sulla riproduzione</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Seleziona tutti i fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Naviga tra fotogrammi tramite indice</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Inverti la selezione dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Deseleziona tutti i fotogrammi</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Transizione con sfumatura</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Transizione di scorrimento</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Azzera tutte le registrazioni completate</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Sposta su</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Sposta giù</s:String>\n    <s:String x:Key=\"S.Command.Add\">Aggiungi</s:String>\n    <s:String x:Key=\"S.Command.Open\">Apri</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Modifica elemento selezionato</s:String>\n    <s:String x:Key=\"S.Command.Save\">Salva elemento selezionato</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Rimuovi elemento selezionato</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Vedi storico</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Schermata iniziale</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Registratore</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Apre il registratore dello schermo, tramite il quale è possibile iniziare a registrare lo schermo con semplicità.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Apre il registratore della webcam.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Lavagna</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Apre il registratore lavagna, tramite il quale è possibile registrare i propri disegni.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Apre la finestra dell'editor, la parte principale di questa app, tramite la quale è possibile avviare e modificare una nuova registrazione.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Impostazioni</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nuova versione disponibile</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Scarica l'ultima versione di ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Aggiorna</s:String>\n    <s:String x:Key=\"S.Updater.Header\">È disponibile un nuovo aggiornamento</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nuova versione!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">È disponibile la nuova versione {0}! Fare clic qui per ulteriori dettagli.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Sembra che il tuo sistema non sia più supportato o che qualcosa sia cambiato nel sistema di aggiornamento. Prova a scaricarlo manualmente dal sito web.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versione</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portabile</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Programma di installazione</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Cosa c'è di nuovo?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Bug corretti:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">È disponibile una nuova versione da scaricare.&#x0d;Aprire il browser per scaricarla?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Avvia l'applicazione dopo l'aggiornamento.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Scarica</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Installa</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Installa manualmente</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Scaricamento...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Non è stato possibile mostrare i dettagli del download.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Non è stato possibile scaricare l'aggiornamento.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">È necessario attendere il completamento di tutte le codifiche prima dell'aggiornamento.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Scaricamento</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Scaricamento</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} di {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Impostazioni</s:String>\n    <s:String x:Key=\"S.Options.App\">Applicazione</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Registratore</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Task automatizzati</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Collegamenti</s:String>\n    <s:String x:Key=\"S.Options.Language\">Lingua</s:String>\n    <s:String x:Key=\"S.Options.Storage\">File temporanei</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extra</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Servizi upload</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Donazione</s:String>\n    <s:String x:Key=\"S.Options.About\">Informazioni su...</s:String>\n    <s:String x:Key=\"S.Options.Other\">Altro</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Manca la scorciatoia da tastiera per l'inseguimento del cursore</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Per usare la funzionalità di inseguimento del cursore del mouse è necessario impostare una combinazione di tasti per attivarla/disattivarla quando richiesto.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Avvio</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Avvia&#10;manualmente</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">L'applicazione verrà eseguita solo manualmente.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Avvia con&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">L'applicazione verrà eseguita dopo l'avvio di Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossibile alternare le modalità di avvio.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Consenti solo&#10;singola istanza</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Sarà possibile eseguire l'applicazione una sola volta per utente ed eseguibile;&#10;ciò significa che diverse istanze di utenti o eseguibili possono coesistere.&#10;Quando si tenta di eseguire nuovamente l'applicazione, la seconda istanza tenterà di passare lo stato attivo sulla prima e verrà chiusa.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Consenti più&#10;istanze</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Sarà possibile eseguire l'applicazione più volte contemporaneamente, senza restrizioni.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Avvia minimizzato nell'area di notifica.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(L'icona nell'area di notifica sarà visibile quando questa opzione è attiva)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Avvia con:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Finestra di avvio</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Registratore schermo</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Registratore webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Registratore lavagna</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Finestra dell'editor</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Finestra da avviare inizialmente all'avvio dell'applicazione)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Tema dell'applicazione</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Schema di colori:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Molto chiaro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Chiaro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Scuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Molto scuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Segui il sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Personalizzato</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Colori di esempio.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Area di notifica di sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Visualizza l'app nella system tray (area di notifica).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Mantieni l'app aperta anche se vengono chiuse tutte le finestre.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Non fare nulla</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Apri una finestra</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Nessuna finestra</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimizza/ripristina tutte le finestre</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimizza tutte le finestre</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Ripristina tutte le finestre</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Clic sinistro:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Clic sinistro (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Clic centrale:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Finestra:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Altrimenti apre:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Generali</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Soluzione alternativa per l'arresto anomalo \"Quota insufficiente...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Sperimentale)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Chiedi conferma prima di chiudere l'app (tramite comando 'Esci'),</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Disabilita accelerazione hardware.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(L'interfaccia utente verrà resa tramite modalità software)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Verifica aggiornamenti delle traduzioni.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Le traduzioni aggiornate verranno scaricate e installate automaticamente)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Verifica aggiornamenti.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Installa automaticamente gli aggiornamenti dopo aver chiuso l'applicazione.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Forza il download della versione portatile.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Richiede un'installazione manuale decomprimendo e sostituendo l'eseguibile)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Forza l'esecuzione dell'aggiornamento con privilegi elevati.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Chiedi conferma prima dell'avvio dell'installazione.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interfaccia</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Vecchio</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nuovo</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Frequenza di cattura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manuale</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Ogni fotogramma verrà catturato manualmente, premendo il pulsante di acquisizione o una scorciatoia da tastiera equivalente.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Interazione utente</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Frames will be captured each time you click or type something.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">All'ora</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, ogni fotogramma acquisito verrà impostato con questo ritardo)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Trigger delay:</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(In ms, ogni fotogramma acquisito attenderà questo periodo di tempo prima di iniziare)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Ogni fotogramma verrà catturato in un intervallo di {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Modalità cattura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Usa il vecchio metodo di cattura, che è lento e potrebbe non registrare i giochi,&#10;ma che non richiede estensioni aggiuntive.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Usa il metodo di cattura delle API Desktop Duplication, che sono più veloci e&#10;permette di catturare giochi a schermo intero; tuttavia richiede l'estensione SharpDx e almeno Windows 8.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Salva su&#10;file</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Ciascun fotogramma catturato verrà salvato dirette su disco come un'immagine.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Cache in&#10;memoria</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Ciascun fotogramma catturato verrà prima salvato in memoria come un elenco di pixel (potrebbero essere compressi prima)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compressione:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Ottimale</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Più lento ma probabilmente con compressione ottimale)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Il pià veloce</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Più veloce ma probabilmente con compressione non ottimale)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Nessuna compressione</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Nessuna compressione verrà fatta durante la cattura dei fotogrammi)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Dimensione cache:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. Al raggiungimento di questa soglia, i dati verranno salvati su disco)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Prevent capture of full black frames.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Prevents BitBlt with a memory cache from wrongfully resulting in frames with all pixels as black)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Mostra il cursore nella registrazione.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Seleziona il colore del cursore</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Frequenza fotogrammi fissa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Ritardo costante che non cambia con il ritardo della registrazione)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Cattura solo quando qualcosa cambia.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Un fotogramma verrà catturato solo quando qualcosa viene modificato all'interno della regione di acquisizione)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disabilita l'acquisizione di finestre a più livelli)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Forza la pulizia della memoria durante l'acquisizione.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Riduce l'utilizzo della memoria durante l'acquisizione, ma diminuisce le prestazioni)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Linee guida</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Rule of thirds</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Click to toggle the display&#10;of a rule of thirds guideline.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Mirino</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Click to toggle the display&#10;of a crosshair guideline.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">The guidelines will only be displayed while the recorder is paused or stopped.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Nascondi la barra del titolo (modalità sottile).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Abilita la lente dello schermo.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Aiuta a ridurre il ritardo nell'interfaccia durante la registrazione)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Anima il bordo della regione dello schermo durante la selezione.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Anima con lo stile 'formiche in marcia')</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Enable selection panning.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Mostra un ornamento vicino all'angolo della selezione, consentendo il movimento dell'area di registrazione)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Modalità compatta</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Mostra una versione più piccola del pannello di comando del registratore)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Visualizza il pulsante scarta anche durante la registrazione.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Di solito viene mostrato solo quando in pausa)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Improve screen selection performance.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduces the lag during screen selection by displaying a static view of the screen)</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Ricorda la dimensione precedente dell'area di registrazione.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Ricorda la posizione precedente dell'area di registrazione.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Usa conto alla rovescia prima dell'avvio.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(in secondi, attende prima di avviare la cattura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Abilita inseguimento cursore</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(L'area di registrazione si riposizionerà in base alla posizione del cursore)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Margine del buffer in pixel, dove l'area di registrazione inizia ad essere riposizionata)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Margine del buffer aggiuntivo in pixel, dove l'interfaccia utente inizia ad essere nascosta)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Chiedi conferma prima di scartare la registrazione.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Sfondo dell'editor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Dimensione griglia</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Molto piccola</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Piccola</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Media</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Molto grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Amo i quadrati grandi</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Sono cieco</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Personalizzata</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Altezza</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Larghezza</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Applica</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Colore di base</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Colore pari</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Colore dispari</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Mostra le codifiche in una finestra separata.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Estendi la barra del titolo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Corregge automaticamente la dimensione della finestra in base alla dimensione dei fotogrammi, subito dopo il caricamento.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Corregge automaticamente l'ingrandimento dei fotogrammi in base alle dimensioni della finestra, subito dopo il caricamento.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Chiedi conferma prima di eliminare fotogrammi.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Chiedi conferma prima di scartare un progetto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Chiedi conferma prima di chiudere l'editor (se un progetto è aperto).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Abilita il triplo clic per selezionare il testo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Disegna il contorno delle didascalie esterne alle lettere.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Scarta fotogrammi quando necessario.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Salta un fotogramma se l'anteprima non è in grado di visualizzarlo in tempo)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Salta un fotogramma se l'anteprima non è in grado di visualizzarlo in tempo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Imponi un limite allo storico annulla/ripristina.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Le azioni precedenti verranno rimosse al raggiungimento del limite)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Numero massimo di azioni memorizzate)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Sincronizza la cartella di output tra i preset.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(I preset useranno la stessa cartella di output)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Sincronizza anche il nome del file.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Anche i preset utilizzeranno lo stesso nome file)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Sincroniza solo tra i preset dello stesso tipo di file.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Solo i preset con lo stesso tipo di file verranno sincronizzati)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Task automatizzato</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista di task automatizzati</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Task</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Dettagli</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Abilitato</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Seleziona un task)</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Select a task above</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.Info\">Questi task vengono eseguiti in sequenza dall'inizio alla fine della lista.&#10;Questo si verifica quando un progetto viene aperto per la prima volta utilizzando l'editor.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globale</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Registratore schermo:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Apre il registratore schermo predefinito)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Registratore webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Apre il registratore webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Registratore lavagna:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Apre il registratore lavagna, in modo che possa registrare ciò che si disegna)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Apre un'altra finestra dell'editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Opzioni:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Apre la finestra delle opzioni. È possibile aprirne solo una alla volta)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Esci:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Chiude tutte le finestre e rimuove l'app dalla system tray)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Registratori</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Avvia/pausa:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Avvia o mette in pausa la registrazione. Viene utilizzato per scattare istantanee se la modalità istantanee è abilitata)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stop:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Ferma la registrazione e apre l'editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Scarta:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Scarta la registrazione attiva, quando viene messa in pausa)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Inseguimento cursore:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Attiva/disattiva la correzione dell'area di registrazione in base alla posizione del cursore)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Disabilita inseguimento:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Disabilita temporaneamente la correzione dell'area di registrazione in base alla posizione del cursore, accettati solo i tasti di scelta rapida)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Clicca per impostare il fuoco alla tastiera, quindi premere i tasti e modificatori desiderati.&#10;Alcune combinazioni di tasti non sono permesse.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Lingua dell'app</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Rileva automaticamente</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Lingua del sistema operativo (se disponibile)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Si desidera tradurre la mia app?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Fare clic qui per leggere le istruzioni per la traduzione e per scaricare l'app Translator.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Successivamente,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">fare clic qui per importare</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">e provare la propria traduzione.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Inviala tramite</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">quando la traduzione è completata.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Fare clic per aprire una pagina web con le linee guida.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Apri la pagina di importazione</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Apri la propria app dell'email</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Statp</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Disco:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} liberi su {1}</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Check\">Check again how much space left there is.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Clear\">Clear the cache folder.&#10;You'll be able to decide if you want to keep recent projects or not.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Poco spazio nel disco fisso attualmente configurato. Svuotare la cartella dei file temporanei o cambiare la posizione.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible to retrieve the drive details.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.None\">No files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.None\">No folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} folder</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} folders</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in uso</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths\">Paths</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Seleziona la posizione dei file temporanei</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Registri:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Selezionare la posizione dei file di registro degli errori</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Sfoglia la cartella selezionata.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Posizione delle impostazioni</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Locale:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Non esiste</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Crea un file locale delle impostazioni vuoto.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Rimuovi il file delle impostazioni.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Apri la cartella dove è salvato il file delle impostazioni.&#x0d;Tenere premuto il tasto CTRL e fare clic per aprire il file (se possibile).</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Criterio di caricamento impostazioni: Predefinito ◄ AppData ◄ Locale.&#x0a;• Se non c'è alcun file di impostazioni nella cartella locale, l'app cerca nella cartella AppData, i valori predefiniti vengono usati se non è presente alcun file con le impostazioni.&#x0a;• Se non ci sono impostazioni locali, tutte le impostazioni vengono salvate nel file di impostazioni nella cartella AppData.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.DeleteEverything\">Delete all files from cache when closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Ask me before deleting all files from cache.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Rimuovi automaticamente i progetti vecchi.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Quando si apre l'editor, un processo in background cancellerà i progetti più vecchi di 5 giorni.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(in giorni, qualsiasi progetto più vecchio verrà eliminato/scartato all'apertura dell'editor)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Clear Cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Header\">Would you like to clear the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Info\">When you create a recording or open something to edit, a project is created and stored inside the cache folder.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Question\">Would you like to remove these projects from the cache folder?</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Non rimuovere i progetti recenti.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Solo i progetti più vecchi di {0} giorni che non sono attualmente in uso verranno rimossi)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Tutti i progetti che non sono attualmente in uso verranno rimossi)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modalità:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Disabilitato</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manuale</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Sistema</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Utilizza il proxy di sistema)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Porta:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Nome utente:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Password:</s:String>\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Presets\">Upload presets</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Service\">Service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Title\">Title</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Descrizione</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Abilitato</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Servizio di upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Seleziona un servizio</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Seleziona un servizio di upload qui sopra</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Personalizzato</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Enable\">Enable this preset.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Dettagli</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Nome:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Descrizione:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonimo</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Autenticato</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorizzazione</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Ottieni token</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Incolla qui il token OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Nome utente:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Password:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autorizza</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Il nome utente e la password non verranno salvati.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Opzioni</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Utilizza link diretti.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">You must give this preset an unique name.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">The name is already in use by another upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">When in authenticated mode, you must finish the authentication process.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">You must provide your username and password to authorize this app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">It was not possible to get the authorization token.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Per poter autorizzare questa app è necessario fornire il token di autorizzazione.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Authorization failed. Check if everything is right and try again in a few seconds.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Non è stato possibile caricare la lista degli album.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Autorizzazione completata.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Non autorizzato.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Autorizzazione scaduta il {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorizzazione valida fino {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Ottieni i link con l'estensione Gifv invece di Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Carica le gif ad un album selezionato.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Chiedi conferma prima di caricare</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Ricarica elenco album.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Predefiniti</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Chiedidi inserire i dettagli dell'upload.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Tipo URL:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Seleziona un album (opzionale)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Se si desidera, è possibile selezionare l'album di destinazione:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details\">Upload details (optional)</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Dettagli upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Titolo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Descrizione:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tag:</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separate tags by using a semi-colon ( ; )</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Only display for those accessing via direct link.</s:String>-->\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Storico upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Data</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.History.Preset\">Preset</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Successful\">Successful?</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Elimina voce storico.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Collegamento:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Qualità più bassa:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Collegamento eliminazione:</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Are you sure that you want to delete the history entry?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected history entry?</s:String>-->\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Strumenti esterni disponibili</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Fare clic qui per scaricare&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Scaricamento...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Scaricato&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Fare clic qui per aprire le proprietà del file.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Le app distribuite tramite il Microsoft Store non possono scaricare altre app. Sarà necessario scaricarla manualmente.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Posizione FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Selezionare la posizione dell'eseguibile di FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Eseguibile FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Il percorso dell'eseguibile di FFMpeg contiene uno o più caratteri non validi. Selezionare una posizione valida dell'eseguibile.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Posizione Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Selezionare la posizione dell'eseguibile di Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Libreria Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Il percorso dell'eseguibile di Gifski contiene uno o più caratteri non validi. Selezionare una posizione valida dell'eseguibile.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licenza FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licenza Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Licenza SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Autorizzazione di scrittura mancante nella cartella</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Non è possibile salvare il download nella cartella per mancanza dei permessi di scrittura.&#10;&#10;Avviare il download con diritti di amministratore per terminare il download?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Dona</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Dona in US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Dona in €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Apri il sito di Paypal. Valuta selezionata: dollari</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Apri il sito di Paypal. Valuta selezionata: euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Apri il sito di Paypal. La valuta dovrà essere selezionata.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Sottoscriviti</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donazione mensile tramite Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Donazione mensile tramite Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Regala giochi</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Regala giochi tramite Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Regala giochi tramite GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Offrimi un caffè tramite Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto monete</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copia l'indirizzo BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Supporta</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Se vuoi supportare il progetto ;)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versione:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Controlla aggiornamenti</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Hai già l'ultima versione.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Autore: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Versione Microsoft Store. Alcune funzioni sono disabilitate a causa delle politiche applicate.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contatto</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Unisciti al server</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Visita pagina</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Unisciti alla stanza.</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Informazioni tecniche</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licenza:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Questa è un'app completamente gratuita)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Codice sorgente:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Politica sulla riservatezza:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Un caloroso ringraziamento a</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Tutti i miei sostenitori, alle persone che forniscono feedback o fanno donazioni.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Localizzazione</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Recupero codici lingua...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Riconosciuto come {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Non riconosciuto</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">La risorsa più in basso è quella attualmente in uso.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Per applicare la propria risorsa, spostarla in fondo alla lista.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Esportazione risorsa...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Salva il dizionario risorse</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Apri un dizionario risorse</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Dizionario risorse</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Importazione risorsa...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Il nome del file non segue uno schema valido</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Prova a rinominare come: StringResources.it.xaml, dove 'it' dovrebbe essere sostituito dal codice della tua lingua.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Non è possibile aggiungere una risorsa con lo stesso nome</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Provare a rimuovere la risorsa duplicata o usare un altro codice lingua.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Codice lingua ridondante</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Il codice \"{0}\" è ridondante. Provare a utilizzare \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Lingua sconosciuta</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" e la sua famiglia non sono stati riconosciuti come codici lingua validi.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Non è stato possibile importare la risorsa di localizzazione.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Registra</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pausa</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continua</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Arresta</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Scarta</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Scatto</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Altezza</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Larghezza</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">L'inseguimento del cursore è abilitato.</s:String>\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manuale</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">Interazioni</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Fotogrammi massimi al secondo</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">f/s</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fpm\">Fotogrammi massimi al minuto</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">f/m</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fph\">Fotogrammi massimi all'ora</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">f/h</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Fare clic o premere i tasti per catturare</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Allinea alla finestra (trascina e rilascia per allineare)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Pre-avvio</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (in pausa)</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.PreStarting\">Pre-starting...</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Timer.Elapsed\">Elapsed capture time.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Timer.Total\">Total frame count:</s:String>-->\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Catturato manualmente:</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Timer.Paused\">The capture is paused.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Timer.Imprecise\">Your computer does not support an accurate capture mode,&#10;which means that the target frame rate may never be achieved.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Non è stato possibile catturare lo schermo</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Non è stato possibile catturare lo schermo. Il metodo di cattura non ha restituito alcun frame dopo 5 tentativi.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Non è stato possibile avviare/mettere in pausa la cattura dello schermo</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Per catturare lo schermo tramite le API Desktop Duplication è richiesto Windows 8 o successivo.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Area</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Area.Select\">Select an area</s:String>-->\n    <s:String x:Key=\"S.Recorder.Window\">Finestra</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Window.Select\">Select a window</s:String>-->\n    <s:String x:Key=\"S.Recorder.Screen\">Schermo</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Screen.Select\">Select a screen</s:String>-->\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Schermo interno</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Schermo generico</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Graphics adapter: {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resolution: {0} x {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Native resolution: {0} x {1}</s:String>-->\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Trascina per spostare&#10;la selezione.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Accetta</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Riprova</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Annulla la selezione (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Fare clic e trascinare per selezionare un'area di questo schermo</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Fare clic e trascinare per selezionare un'area</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Fare clic qui per selezionare questa finestra</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Fare clic qui per selezionare questo schermo</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Premere Esc per annullare</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Splash.Title\">Press {0} to stop the recording</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Splash.Subtitle\">The recorder window will be minimized,&#10;restore it or press {0} to pause the capture</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Scarta registrazione</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Discard.Instruction\">Are you sure that you want to discard the recording?</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Discard.Message\">This action will discard the recording, removing all frames.&#x0d;You can't undo this operation.</s:String>-->\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Registratore webcam</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Nessun dispositivo video rilevato :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Controllare i dispositivi video.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Scala: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Riscala il video.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Registratore lavagna</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Registra automaticamente</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Abilita la registrazione durante il disegno.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [tieni premuto]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Selettore colori</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Seleziona un colore</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Rosso</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Verde</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Blu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Trasparenza</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Esadecimale</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Colore iniziale</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Colore attuale</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Ultimo colore</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Trascina questo per&#x0d;campionare i colori</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Fare clic e trascinare per&#x0d;selezionare colori dallo schermo.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Visualizzatore errori</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Apri errore interno</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Tipo di errore</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Messaggio</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Fonte</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Qualcosa è andato storto.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Invia rapporto</s:String>\n\n    <!--Presets-->\n    <!--<s:String x:Key=\"S.Preset.Title\">Preset</s:String>-->\n    <s:String x:Key=\"S.Preset.Encoder\">Codificatore</s:String>\n    <!--<s:String x:Key=\"S.Preset.Name\">Name</s:String>-->\n    <s:String x:Key=\"S.Preset.Description\">Descrizione</s:String>\n    <!--<s:String x:Key=\"S.Preset.Other\">Other</s:String>-->\n    <s:String x:Key=\"S.Preset.AutoSave\">Salva automaticamente quando un'opzione viene modificata.</s:String>\n    <!--<s:String x:Key=\"S.Preset.Info.Manual\">All changes to this preset settings (encoding and exporting settings) need to be saved manually by pressing the save button.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Automatic\">All changes to this preset settings (encoding and exporting settings) will be saved automatically.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Readonly\">Some of the properties of a default preset are read-only.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Name\">You must give a name to this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.SameName\">There's already a preset with the same name.</s:String>-->\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Autosalvataggi</s:String>\n    <!--<s:String x:Key=\"S.Preset.Autosave.Info\">Changes to this preset are automatically saved.</s:String>-->\n    <s:String x:Key=\"S.Preset.Default.Title\">Predefinito ({0})</s:String>\n    <!--<s:String x:Key=\"S.Preset.Default.Description\">Default preset for the encoder.</s:String>-->\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Per Twitter ({0})</s:String>\n    <!--<s:String x:Key=\"S.Preset.Twitter.Description\">Respects Twitter upload limits (except size and resolution).</s:String>-->\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <!--<s:String x:Key=\"S.Preset.Vp8.Description\">Older and better known codec.</s:String>-->\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animazione</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Immagine</s:String>\n    <!--<s:String x:Key=\"S.Preset.Filename.Project\">Project</s:String>-->\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Qualità alta</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Preferibile per le registrazioni con più colori e gradienti.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Qualità alta • Sfondo trasparente</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Supports saving the animation with a transparent background.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Qualità alta • Grafica</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Preferibile per le registrazioni con una qualità di colori inferiore.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Bilanciato</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Good quality for photo-like images using Wu's quantizer without dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Alta qualità</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">High quality for photo-like images using Wu's quantizer with higher bit level and Floyd-Steinberg error diffusion dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Bassa qualità, più veloce</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantizing all frames with the same predefined 'web-safe' palette and Bayer 8x8 ordered dithering.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Qualità più alta</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Higher image quality, but with a greater file size.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Qualità bassa</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Qualità delle immagini inferiore, ma con dimensione del file minore.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Qualità più alta</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Higher image quality, but with a greater file size.</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Qualità bassa</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Qualità delle immagini inferiore, ma con dimensione del file minore.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Qualità bassa e codifica più veloce</s:String>\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Even lower image quality, with a faster encoding, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Low quality</s:String>-->\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Qualità inferiore ma codifica più veloce.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Qualità alta</s:String>\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">High image quality and small file size, but slower encoding.</s:String>-->\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Qualità bassa</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Qualità delle immagini inferiore, dimensione del file minore e codifica più veloce.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Qualità alta</s:String>\n    <!--<s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">High image quality and small file size.</s:String>-->\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Inserisci fotogrammi</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Entrambi i lati dovrebbero avere la stessa dimensione, questa finestra permette di riposizionare e ridimensionare l'immagine e l'area di disegno. Fare clic per selezionare e ridimensionare.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Dimensione area di disegno:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Adatta immagine all'area di disegno</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Ridimensiona l'area di disegno per adattare entrambe le immagini all'interno (dall'angolo in alto a sinistra).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">I fotogrammi hanno una dimensione differente. È necessario risolvere questo problema prima di inserire i fotogrammi.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Nuovo/i fotogramma/i</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Fotogramma/i corrente/i</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Dimensione immagine:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Posizione immagine:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Ripristina dimensione&#x0a;e posizione dell'immagine</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">I nuovi fotogrammi verranno inseriti nell'attuale&#10;elenco dei fotogrammi alla posizione:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Prima</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Dopo</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Fotogramma</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importazione</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Seleziona il colore di riempimento dell'area di disegno</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importa fotogrammi da video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importatore:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Caricamento in corso...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Scala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Dimensione:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Altezza:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Larghezza:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Frequenza fotogrammi:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">f/s</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Inizio:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Fine:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Selezione:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Fotogrammi:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Durata:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Non è stato possibile caricare il video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Non è stato possibile avviare l'anteprima. Provare un altro importatore o verificare che il video non sia corrotto.&#x0d;Se si usa MediaPlayer, verificare che la funzionalità di Windows chiamata \"Funzionalità multimediali / Windows Media Player\" sia attivata e assicurarsi di avere i codec video richiesti.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Timeout nel recupero dell'anteprima del fotogramma.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Nessun frame selezionato da importare.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Codificatore</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Codifica...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Inizio</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Completato</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">copiato negli appunti</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Copia fallita</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Comando eseguito</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Mostra l'output dei comandi.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Esecuzione del comando fallita</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Caricamento fallito</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Clic per aprire la pagina per eliminare l'immagine (se disponibile)</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Tempo trascorso, in minuti:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analisi:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Codifica:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copia:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Comandi</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">File eliminato o spostato</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Annullato</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Errore</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Fare clic qui per visualizzare i dettagli di questo errore.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Caricamento in corso</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Esecuzione dei comandi</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Elaborazione di {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparazione per il secondo passaggio</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Elaborazione di {0} - 2° passaggio</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Creazione file in corso</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analisi dei pixel non cambiati</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Salvataggio del risultato dell'analisi</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Apri file</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Sfoglia cartella</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Rimuovi dall'elenco</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Mostra dettagli</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Ignora tutte le codifiche completate</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copia come immagine</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copia nome del file</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copia percorso della cartella</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copia link</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Output del comando</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Output del comando</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notifiche</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Respingi tutte le notifiche.</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">File</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Home</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Riproduzione</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Modifica</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Immagine</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transizioni</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistiche</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Impostazioni</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Aiuto</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extra</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">È disponibile un aggiornamento!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Clicca qui per saperne di più.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Conteggio totale, conteggio selezione, indice selezione</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Preparazione fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Caricamento non valido - Non è possibile importare più file contemporaneamente. Provare a selezionare un solo file.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Caricamento non valido - Non è possibile caricare più progetti contemporaneamente. Provare a selezionare un solo progetto.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Apri un file multimediale (immagine o video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Apri un file multimediale (immagine o video) o un file di progetto</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Tutti i file supportati</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Immagine</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Animazione PNG</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Animazione GIF</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Animazione WebP</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Video AVI</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Video Matroska</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Video MOV</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Video MP4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Video WebM</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Immagine BMP</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Immagine JPG</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Immagine PNG</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">File ZIP con immagini</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Progetto ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Progetto ScreenToGif come ZIP</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">File PSD</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Vai a \"File > Nuovo\" per iniziare una nuova registrazione</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Trascina e rilascia immagini, video o progetti per importarli</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Grazie mille per aver usato la mia app!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Minor frequenza dei fotogrammi, minore numero di colori o modifiche tra i fotogrammi comportano un file più piccolo</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Vuoi fare quattro chiacchiere? Apri \"Impostazioni > Informazioni su...\" per le modalità di contatto</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Ci sono problemi? Contattami tramite lo strumento di feedback</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Si desidera provare il nuovo registratore? Vai a \"Opzioni > Registratore\" ed abilitarlo</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Registrazione</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Registrazione&#x0a;webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Registrazione&#x0a;lavagna</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Progetto&#x0a;vuoto</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nuovo</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Registrazione</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Registrazione&#x0a;webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Registrazione&#x0a;lavagna</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Inserisci</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Salva&#x0a;con nome...</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Carica</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Progetti&#x0a;recenti</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Salva come&#x0a;progetto</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Scarta&#x0a;progetto</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Storico azioni</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Annulla</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Ripristina</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Azzera</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Appunti</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Mostra appunti</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Incolla</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Taglia</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copia</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Dimensione al&#x0d;contenuto</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Adatta immagine</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Seleziona</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Seleziona&#x0a;tutto</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Vai a</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Inverti</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Deseleziona</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Riproduzione</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Primo</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Precedente</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Avvia</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pausa</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Successivo</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Ultimo</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Opzioni riproduzione</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Riproduzione ciclica.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Usato solo durante la riproduzione.&#x0a;Le impostazioni della riproduzione ciclica per i file GIF e APNG esportati&#x0a;potrebbero essere presenti nel pannello 'Salva con nome' di alcuni codificatori.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Elimina</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Rimuovi&#x0d;Duplicati</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Riduci conteggio&#x0a;fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Ciclo&#x0d;morbido</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Elimina tutto prima</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Elimina tutto dopo</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Riordino</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Inverti</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Sposta a&#x0a;sinistra</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Sposta a&#x0a;destra</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Ritardo (durata)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Sovrascrivi</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Aumenta o&#x0a;riduci</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Scala</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Dimensione e rotazione</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Ridimensiona</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Ritaglia</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Capovolgi/ruota</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Testo</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Didascalia</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Testo libero</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titolo fotogramma</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Sequenze&#x0a;di tasti</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Sovrimpressione</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Disegno&#x0a;libero</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Forme</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Eventi&#x0d;mouse</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Filigrana</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Bordo</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Ombreggiatura</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Avanzamento</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Offusca</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Stili</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Dissolvenza</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Scorrimento</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Generali</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Numero di fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Durata totale</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Dimensione fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Durata media (ritardo)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Tempo attuale</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Il tempo attuale (cumulativo) basato sul fotogramma attualmente mostrato.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI e scala dei fotorammi</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Fotogramma selezionato</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Azione taglia</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Non è possibile tagliare tutti i fotogrammi.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">La registrazione richiede almeno un fotogramma.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Rimuovi tutto</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Rimuovere tutti i fotogrammi?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Questa azione comporta l'eliminazione del progetto attualmente aperto e non potrà essere annullata. Proseguire?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Scarta progetto</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Scartare il progetto?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Con questa azione si scarterà il progetto, rimuovendo tutti i fotogrammi.\\n\\rNon sarà possibile annullare questa operazione.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Scartare il precedente progetto?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Se non lo si fa, sarà possibile aprire il progetto precedente tramite i progetti recenti.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Elimina fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Si desidera procedere con l'eliminazione?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Verranno eliminati {0} fotogrammi.\\n\\rNon sarà possibile ripristinarli in seguito.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Uscita dall'editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Uscire?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Il progetto corrente su cui si stava lavorando può essere aperto nuovamente tramite 'Progetti recenti'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Il progetto corrente su cui si stava lavorando può essere aperto nuovamente tramite 'Progetti recenti', ma non dimenticarsi che verrà eliminato automaticamente dopo 5 giorni.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Trascinamento non valido</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Non è possibile importare più file contemporaneamente</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Provare a selezionare un file solo.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Impossibile caricare il file</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Non è stato possibile caricare il file in quanto ha un formato non valido.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Non è possibile importare più progetti contemporaneamente</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Provare a selezionare un progetto solo.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Non c'è alcun testo da applicare.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare la didascalia.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare il testo.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare il titolo al fotogramma successivo.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">È necessario selezionare uno spessore del bordo maggiore di zero per almeno un lato.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare il bordo.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">L'opacità deve essere maggiore di zero per notare differenze nel fotogramma.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Quando si usa la prodondità dell'ombreggiatura e il raggio di sfocatura a zero, non si noteranno differenze in quanto nascosti dietro il fotogramma.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">È necessario selezionare almeno un pixel cui applicare il Cinemagraph. Selezionare i pixel disegnandoci sopra.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Transizione a dissolvenza</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare la transizione a dissolvenza.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Un colore completamente trasparente non creerà alcun effetto a questa transizione.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Transizione a scorrimento</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare la transizione a scorrimento.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Caricamento dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Impossibile caricare il progetto</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Non è stato possibile caricare i fotogrammi in quanto sono corrotti oppure le immagini non sono dove avrebbero dovuto essere.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Non è stato possibile caricare alcuni fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Non è stato possibile caricare i fotogrammi in quanto non sono stati trovati o perché corrotti.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">È necessario selezionare almeno un fotogramma cui applicare la sovrimpressione.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg non è presente. Aggiungerlo alle variabili d'ambiente Path o indicarne la posizione nelle impostazioni.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski non è presente. Aggiungerlo alla variabile d'ambiente PATH o impostarne la posizione nelle impostazioni.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Non c'è abbastanza spazio libero nel disco in cui questa applicazione salva la propria cache ({0}% rimanente). Fare clic per aprire Opzioni > File temporanei per liberare un po' di spazio.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Si è cercato di importare più immagini con DPI diversi, operazione non supportata. Alcune sono state importate, le altre devono essere importate separatamente.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Si è cercato di importare più immagini con dimensioni differenti, operazione non supportata. Alcune di loro sono state importate, le altre devono essere importate separatamente.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Estrazione dei frame dalla cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Aggiornamento dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Preparazione dell'importazione</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importazione dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analisi dei duplicati in corso</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Correzione del ritardo in corso</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Scarto dei duplicati in corso</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Scarto dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Scarto delle cartelle</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Ridimensionamento dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Ritaglio dei fotogrammi</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Sovrimpressione dei fotogrammi in corso</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Creazione del fotogramma titolo</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Capovolgimento/rotazione dei fotogrammi in corso</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Modifica del ritardo in corso</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Applicazione degli effetti di transizione in corso</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Preparazione al salvataggio</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Annulla il caricamento e scarta il progetto.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Ricerca del ciclo perfetto</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Scartamento dei fotogrammi non utilizzati nel ciclo</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Fotogramma:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Apri immagine</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Sfoglia cartella</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Vai al fotogramma</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Vai al fotogramma (da 0 a {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Salva con nome...</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Rimuovi i fotogrammi selezionati</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nuova registrazione dello schermo</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nuova registrazione della webcam</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nuova registrazione lavagna</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nuovo progetto</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nuovo da media o progetto</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nuova registrazione creata</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nuova registrazione webcam creata</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nuova registrazione lavagna creata</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nuova progetto creato</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Annulla eseguiti</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Azzera eseguiti</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Ripeti eseguiti</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} fotogramma/i tagliato/i</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} fotogramma/i copiato/i</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} fotogramma/i incollato/i</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom impostato a {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Tutti i fotogrammi selezionati</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Fotogramma n° {0} selezionato</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Selezione invertita</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Tutti i fotogrammi deselezionati</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} fotogramma/i eliminato/i</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Elenco fotogrammi invertito</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Effetto yoyo applicato</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Fotogramma/i spostato/i a sinistra</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Fotogramma/i spostato/i a destra</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Fotogrammi ridimensionati</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Fotogrammi ritagliati</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Fotogrammi capovolti/ruotati</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">L'operazione di capovolgimento si applica ai fotogrammi selezionati e l'operazione di rotazione si applica a tutti i fotogrammi</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Questa operazione si applica a tutti i fotogrammi</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Questa operazione si applica ai fotogrammi selezionati</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Questa operazione si applica ai tutti i fotogrammi o ai fotogrammi selezionati, in base alle impostazioni</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Il cinemagraph si applica a tutti i fotogrammi basati sul primo fotogramma</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Sovrimpressione applicata</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Fotogramma del titolo creato</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Il fotogramma del titolo verrà inserito prima del fotogramma selezionato</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Durata (ritardo) modificata</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Transizione inserita</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Frequenza dei fotogrammi ridotta</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplicati rimossi</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Nascondi</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Applica</s:String>\n    <s:String x:Key=\"S.Action.Open\">Apri</s:String>\n    <s:String x:Key=\"S.Action.Save\">Salva</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Annulla</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Progetti recenti</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Ricerca dei progetti recenti in corso...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Data di creazione</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Numero di fotogrammi</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Non c'è alcun progetto selezionato. Selezionare nell'elenco il progetto da caricare.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Questo progetto è già stato aperto in un'altra istanza dell'editor. Un progetto non può essere aperto una seconda volta se è già aperto in un altro editor.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Voci negli appunti</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Voce negli appunti:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} immagine</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} immagini</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Esplora contenuto</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Rimuovi</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Comportamento incolla</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Prima del fotogramma selezionato</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Dopo il fotogramma selezionato</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Differenza</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <!--<s:String x:Key=\"S.Resize.Options\">Options</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.Percent\">Percent (%)</s:String>-->\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Mantieni rapporto di forma.</s:String>\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality\">Quality:</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Higher quality</s:String>-->\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Lineare • Bassa qualità</s:String>\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nearest neighbor • Lower quality and faster</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Info\">Scaling quality.</s:String>-->\n    <s:String x:Key=\"S.Resize.Warning\">È necessario selezionare un valore differente per poter applicare l'operazione di ridimensionamento.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Punti</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Alto:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Sinistra:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Basso:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Destra:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">La selezione di ritaglio deve essere più piccola della dimensione attuale dei fotogrammi.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">La selezione di ritaglio deve essere più grande di 10x10 pixel.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Capovolgi orizzontalmente</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Capovolgi verticalmente</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Rotazione antioraria di 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Rotazione oraria di 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Riduci frequenza fotogrammi</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Fattore:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Conteggio rimozione:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Regolazione ritardo:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Non regolare</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll\">Reduce the framerate of the entire project.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>-->\n    <s:String x:Key=\"S.Reduce.Info\">Verranno rimossi {0} fotogrammi ogni {1} fotogrammi, senza contare quelli rimossi.</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>-->\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Rimuovi duplicati</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Somiglianza (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Rimozione fotogramma:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Rimuovi primo fotogramma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Rimuovi ultimo fotogramma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Regolazione ritardo:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Non regolare</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Usa la media</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Usa la somma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Questa azione analizza ogni fotogramma (pixel per pixel) e rimuove quelli che sono almeno {0}% simili al suo immediato vicino.&#x0d;È possibile scegliere se si desidera regolare il ritardo (durata della visualizzazione) dei fotogrammi.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Crea ciclo morbido</s:String>\n    <!--<s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignore first:</s:String>-->\n    <s:String x:Key=\"S.SmoothLoop.From\">Compara da:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Fine</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Inizio</s:String>\n    <!--<s:String x:Key=\"S.SmoothLoop.Info\">Tries to find a frame at least {0} % similar to the start frame and deletes all later frames.&#x0d;You can choose if you want to ignore some initial frames and initiate the comparison from the start (after the threshold) or the end.</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">The number of frames to ignore needs to be smaller than the total number of frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">It was not possible to create a smooth loop with the selected settings.</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">You already have a smooth loop based on selected settings.</s:String>-->\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Testo</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Carattere</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Famiglia:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Stile:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Peso:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Dimensione:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Colore:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Colore di sfondo:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Contorno</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Spessore:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Disposizione</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Verticale:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Orizzontale:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Allineamento:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Decorazione:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Sequenze di tasti</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Tasti</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separatore</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Modifica la tua sequenza di tasti</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignora i tasti Ctrl, Alt, Maiusc, e Windows quando non sono utilizzati come modificatori.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ignorerà pressioni singole di tasti come \"Control\", ma non ignorerà \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignora le sequenze di tasti simulate via software.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Registra solo i tasti digitati dall'utente.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Estendi l'esposizione della sequenza di tasti:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Riduci l'esposizione della sequenza di tasti.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Di (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Non c'è alcuna sequenza di tasti nella registrazione.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Editor sequenza di tasti</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Numero fotogramma</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Sequenze di tasti rilevate</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Rimuovi sequenza di tasti</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Aggiungi sequenza di tasti:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Lettere minuscole.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Permette di inserire lettere in minuscolo.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modalità</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Penna</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Cancellino</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Seleziona</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Cancella tratto</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Larghezza:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Altezza:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Aiuto:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rettangolo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellisse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Altro:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Evidenziatore.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Adatta a curva</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Non c'è alcun disegno cui applicare i fotogrammi selezionati.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare il disegno libero.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Inserisci</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Forme</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Raggio:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Trattini:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controls the size of the dashes and the size of the gaps.&#10;You can set multiple sizes to create an elaborate dash style.&#10;The default is \"1 0\" or empty, meaning a dash with no gaps.</s:String>-->\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Ripristina rotazione</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Rimuovi</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Riempi</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Eventi mouse</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Colore evidenziazione mouse:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Colore pulsante sinistro:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Colore pulsante centrale:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Colore pulsante destro:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Immagine</s:String>\n    <s:String x:Key=\"S.Watermark.File\">File:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Nessuno selezionato</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacità:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Selezionare un'immagine</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">È necessario selezionare un'immagine da applicare ai fotogrammi selezionati.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">È necessario selezionare almeno un fotogramma cui applicare la filigrana.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Aspetto</s:String>\n    <s:String x:Key=\"S.Border.Info\">Usare valori negativi per far sì che il bordo espanda l'immagine. In questo caso il bordo verrà applicato a tutti i fotogrammi.&#x0d;Se non si usa un valore negativo il bordo verrà applicato solo ai fotogrammi selezionati.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Colore ombra:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Colore di sfondo:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Direzione:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Raggio sfocatura:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Prodondità:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Effetto pixel</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Sfocatura</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Scurimento</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Schiarimento</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Opzioni offuscamento</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Dimensione pixel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Livello sfocatura:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Livello oscuramento:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Livello schiaritura:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calcola il colore medio per ciascun blocco pixellato.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Applica l'offuscamento all'inverso della selezione.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Dolcezza</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Usare lo strumento di selezione per selezionare il rettangolo da pixellare.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Usa lo strumento di selezione per selezionare la parte del fotogramma che non deve essere offuscata.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Non è possibile selezionare nulla. Usare lo strumento di selezione per selezionare il rettangolo da pixellare.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tipo</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Barra</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Testo</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precisione:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuti</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Secondi</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisecondi</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Percentuale</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Numero fotogramma</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Data/ora attuali</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Personalizzato</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Mostra il totale.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formato:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formato</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = millisecondi</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = secondi</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minuti</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentuale</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = numero fotogramma</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Examples\">Esempi:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">È possibile usare il formato data/ora del framework .Net&#x0d;Le specifiche sono disponibili ai seguenti due collegamenti.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Formati predefiniti</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Formati personalizzati</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Conta da:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Inizia a contare il numero di fotogrammi da questo numero selezionato.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientamento:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Modalità ritardo</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Modalità ritardo:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Sovrascrivi (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Aumenta o riduci (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Scala (in %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nuovo valore</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimo 10ms per fotogramma.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Riduci/aumenta valore</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Valore di scala</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Questo nuovo valore sostituirà la durata (ritardo) di tutti i fotogrammi selezionati. Il valore può essere da 10ms a 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Questo valore ridurrà/aumenterà la durata (ritardo) di ogni fotogramma selezionato.&#x0a;È possibile ridurre/aumentare selezionando un valore tra -10000ms e 10000ms, tuttavia la durata finale di ciascun fotogramma verrà forzata tra 10ms e 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Ridimensiona la durata (ritardo) di ciascun fotogramma selezionato per questa percentuale.&#x0d;Puoi ridimensionare la durata di ciascun fotogramma selezionando un valore compreso tra 1% e 1000%, ma la durata finale di ciascun fotogramma sarà limitata tra 10 ms e 25500 ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Usare la penna per selezionare i pixel che non dovrebbero rimanere statici (che dovrebbero cambiare tra i fotogrammi), disegnandoci sopra.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Durata transizione</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Ritardo transizione</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Dissolvi a...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Al fotogramma successivo</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">A colore</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Colore</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">La transizione verrà applicata tra il fotogramma selezionato e quello successivo.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Tipo di file</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Type.Format\">The format of the output file.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Preset\">The export preset that holds all currently displayed settings.&#10;Manage your export presets via the buttons below.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Immagine animata</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Fotogrammi</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Type.Other\">Other</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">APNG</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Portable Network Graphics animata</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">WebP</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">AVI</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">MKV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">MOV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">Formato di file QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">MP4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">WebM</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">BMP</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">JPEG</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">PNG</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Progetto</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif project</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">File di Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Combinazioni:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Predefinito</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Aggiungi</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Salva</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Modifica</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove\">Remove the currently selected export preset.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Azzera</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Deleting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Are you sure that you want to delete the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Reseting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Are you sure that you want to reset the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">This action cannot be undone.&#10;&#10;Would you like to reset the selected preset to its default settings?</s:String>-->\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Codificatore</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Codificatore e quantizzatore</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Info\">Encoder responsible for generating the output file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Codificatore incorporato.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">Codificatore GIF KGy SOFT.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Sistema</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encoder made available by the system.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Codificatore esterno, creato da FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Codificatore esterno, creato da Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Opzioni codificatore</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Abilita la modalità avanzata.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Inserimento manuale dei parametri per controllare il codificatore.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parameters:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">List of parameters that will be passed to FFmpeg.&#10;&#10;Special parameters:&#10;{I} is the input path (the frames).&#10;{O} is the output path (the exported file).&#10;{W} is the width of the frame.&#10;{H} is the height of the frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">To encode with 2-pass, simply add '-pass 2'.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Preview</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Preview the parameter list that will be passed to FFmpeg.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Info sui codec</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Info sul formato</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Info sul filtro</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Opzioni GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Algoritmo di riduzione colori (quantizzazione).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Rete neurale</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Taglio mediano</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Meno buono di Octree e più lento.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Scala di grigi</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Colori più usati</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Qualità:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Colori:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Numero massimo di colori (per ciascun fotogramma).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Usa una tabella di colori globale.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Migliore</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Il più veloce</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Use an even faster encoding process.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">May reduce the quality of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Ciclo:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">GIF ciclica.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Ripeti per sempre.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Numero ripetizioni.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Abilita trasparenza.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Rileva pixel non modificati.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Reticolo:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Scala Bayer:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizzatore</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Colore di sfondo:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixels with alpha (transparency) that are considered opaque by the selected quantizer will be blended with this color before getting the quantized color.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Soglia trasparenza:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Determines the input alpha value under which the quantized color will be transparent.&#x0d;&#x0a;If 0, then the result will never have transparency.&#x0d;&#x0a;If 255, then only fully transparent pixels are considered transparent.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Larghezza</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Determines the lowest input brightness to consider the result color white.&#x0d;&#x0a;It affects the brightness of the result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Mappatura diretta</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">When checked, the quantized color is determined by a direct mapping rather than looking up the nearest palette entry.&#x0d;&#x0a;It speeds up quantization but may end up in a higher contrast result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Dimensione tavolozza:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Determines the maximum size of the palette per frame.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Livello di bit personalizzato.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">When checked, the bit level can be configured manually.&#x0d;&#x0a;⚠️ Warning: The highest bit level might require a LOT of memory!</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Higher value means more accuracy, larger target color space, slower processing and larger memory usage.&#x0d;&#x0a;For example, if 1, then the result can have no more than 8 colors, or when 2, no more than 64 colors.&#x0d;&#x0a;For Octree and Wu quantizers it affects also maximum number of monochromatic shades.&#x0d;&#x0a;For example, if 5 (which is the default for Wu quantizer), only 32 monochromatic shades can be differentiated.&#x0d;&#x0a;⚠️ Caution: The Wu quantizer consumes at least 650 MB with the highest value.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Bianco e nero</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Fixed 1 bpp palette with the black and white colors.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Scala di grigi a 4 colori</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Fixed 2 bpp palette with 4 grayscale entries.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Scala di grigi a 16 colori</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Fixed 4 bpp palette with 16 grayscale entries.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Scala di grigi a 256 colori</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Fixed 8 bpp palette with 256 grayscale entries.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Tavolozza predefinita di sistema a 4 bpp</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Fixed 4 bpp palette using the standard 16 sRGB colors.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Tavolozza predefinita di sistema a 8 bpp</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Fixed 8 bpp palette including the 'web-safe' colors and transparency.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">Tavolozza RGB 332</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Fixed 8 bpp palette using the RGB 332 color space.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Quantizzatore Octree</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Optimizing palette for each frame with the Octree algorithm.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut Quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimizing palette for each frame with the Median Cut algorithm.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Quantizzatore Wu</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Optimizing palette for each frame with Xiaolin Wu's algorithm.</s:String>-->\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Reticolatore:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Forza:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">The strength of the ditherer, or 0 to auto calibrate strength.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Seme:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">An integer seed to be used to produce a specific random dithering pattern.&#x0d;&#x0a;Leave empty to use a random seed for every frame.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Nessuno</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">I fotogrammi vengono quantizzati senza retinatura</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentine Processing</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">When checked, the error propagation direction is altered from line to line.&#x0d;&#x0a;This helps to reduce the ripple effect of the error diffusion dithering.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (con ordine)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">The 2x2 Bayer matrix pattern.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (con ordine)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">The 3x3 Bayer matrix pattern.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (con ordine)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">The 4x4 Bayer matrix pattern.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (con ordine)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">The 8x8 Bayer matrix pattern.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Mezzitoni punteggiati (con ordine)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">A 8x8 matrix with a dotted halftone pattern.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Rumore blu (con ordine)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">A 64x64 matrix with a blue noise pattern.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (diffusione d'errore)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Matrice di Bill Atkinson 4x3 con 6 valori effettivi.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (diffusione d'errore)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">Matrice 5x2 di D. Burkes</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (diffusione d'errore)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">The original 3x2 matrix by Floyd and Steinberg.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (diffusione d'errore)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">An 5x3 matrix by Jarvis, Judice and Ninke.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (diffusione d'errore)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Matrice 5x3 di Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (diffusione d'errore)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Matrice 5x2 di Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (diffusione d'errore)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Matrice 3x2 di Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (diffusione d'errore)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">A 7x4 hexagonal matrix by Stevenson and Arce.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (diffusione d'errore)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki's 5x3 matrix.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Rumore casuale</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Random white noise.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Interleaved Gradient Noise</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Nonrandom gradient noise generated by a formula.</s:String>-->\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Anteprima</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Mostra il fotogramma attuale.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">When checked, the preview shows the current frame instead of a standard image example.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Auto preview is disabled due to the high memory requirement of the current settings. Click to refresh the preview.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Failed to generate preview: {0}&#x0d;&#x0a;Click to try to generate it again.</s:String>-->\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Impostazioni animazione</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Ciclo infinito.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">When checked, the animation will be looped indefinitely.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Indietro e avanti.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">When checked, the animation will be played back and forth.&#x0d;&#x0a;This is achieved by duplicating the frames meaning larger file size and longer encoding time.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Numero ripetizioni:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Specifies how many times the animation will be played.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Allow delta frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">When checked, unchanged pixels are attempted to be detected during the encoding.&#x0d;&#x0a;When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors.&#x0d;&#x0a;This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Tolleranza delta:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Specifies the maximum tolerance when detecting changed pixels.&#x0d;&#x0a;If 0, then no difference is tolerated at all.&#x0d;&#x0a;If 255, then there might be frames (or even all of them) that are added with no content.&#x0d;&#x0a;Reasonable range is between 0 and 16 for an optimized quantizer. The ones with fixed colors can be used with somewhat larger values with dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">If Delta Tolerance is too high the result might have poor quality. Click to reset delta tolerance.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Permetti fotogrammi ritagliati.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">When checked, the encoder is allowed to add smaller frames than the actual resolution.&#x0d;&#x0a;If Allow Delta Frames is unchecked, then allows only clipping possible transparent borders.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Allow Delta Frames is ignored because the current configuration does not use alpha and Allow Clipped Frames is unchecked. Click to enable clipped frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Allow Clipped Frames has no effect because the current configuration does not use alpha and Allow Delta Frames is unchecked. Click to enable delta frames.</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Opzioni APNG</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Predizione:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Nessuna</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Media</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Mista</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">APNG ciclico.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Rileva pixel non modificati.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Disegna tutti i pixel non modificati con un colore trasparente</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Preset:</s:String>-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Nessuno</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Predefinito</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Immagine</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Foto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Disegno</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Icona</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Testo</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Usa modalità senza perdita.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normale:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Avanzate</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Method of configuring the encoder parameters:&#10;Normal: Use standard UI controls.&#10;Advanced: Use a text box to type the parameters.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">The video encoder, responsible for&#10;converting the raw pixels to the output file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Combinazione:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Nessuno</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Molto lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Più lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Veloce</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Più veloce</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Molto veloce</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super veloce</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Velocità ultra</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Qualità</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Bilanciato</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Velocità</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Predefinito</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Senza perdita</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Senza perdita (alte prestazioni)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Alte prestazioni</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Qualità alta</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Disco bluray</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Bassa latenza</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Bassa latenza (prestazioni elevate)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Bassa latenza (qualità elevata)</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Encoding speed to compression ratio,&#10;slower presets may give you better compression&#10;(quality per filesize).</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Acc. hardware:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Spento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Acceso</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Selezione automatica</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controls the usage of dedicated hardware (video graphics).&#10;Off: Doesn't use dedicated hardware.&#10;On: Uses dedicated hardware and lets you select special encoders.&#10;Auto: Uses dedicated hardware and automatic selects the right encoder, when possible.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Formato pixel:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatico</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Video sync method.&#10;Auto: Chooses between 1 and 2 depending on muxer (format) capabilities.&#10;Passthrough: Each frame is passed with its timestamps to the encoder.&#10;Constant: Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.&#10;Variable: Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.&#10;Drop: As passthrough but destroys all timestamps, making the encoder generate fresh timestamps based on framerate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Frequenza fotogrammi costante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Frequenza fotogrammi variabile</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Scarta</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Frequenza dei fotogrammi</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Personalizzata</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Passo:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constant Rate Factor.&#10;Quality and rate control setting.&#10;Leave it empty if you don't wish to set this property.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Livello di qualità:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Valori più piccoli significano una migliore qualità.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Target video bit rate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitrate mode:</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Costante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variabile</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Frequenza minima:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimum bitrate tolerance.&#10;Most useful when using CBR mode.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Frequenza massima:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximum bitrate tolerance.&#10;Requires the buffer size to be set too.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Dimensione buffer:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Rate control buffer size.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Comprimi le immagini con zip.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exports the images inside a zipped folder.</s:String>-->\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Comprimi l'immagine.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Comprimi i dati dell'immagine utilizzando l'algoritmo RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Salva dati timeline.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Esporta le tempistiche dei fotogrammi, invece dei soli fotogrammi.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Salva opzioni</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Esporta parzialmente.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Salva il file in una cartella personalizzata.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Sovascrivere?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Avviso</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Only warns that another file exists with the same name.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Chiedi</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Chiedi se l'utente vuole sovrascrivere il file.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Permetti</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Simply overwrites the file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Salva anche come progetto (stessa cartella, stesso nome del file).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Carica il file (funzione sperimentale).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copia negli appunti.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">File</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copia negli appunti il file di output.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Percorso cartella</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copia negli appunti il percorso della cartella del file di output.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Percorso del file</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copia negli appunti il percorso del file di output.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Collegamento</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copia negli appunti il collegamento generato dal servizio di upload</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Esegui i comandi di post-codifica.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Inserire i comandi da eseguire dopo la codifica.&#x0d;Scrivere un comando per riga per eseguire più comandi.&#x0d;Macro:&#x0d;{p} = Percorso del file di output.&#x0d;{f} = Percorso della cartella di output.&#x0d;{u} = URL del file caricato.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Esportazione parziale</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Modo:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Select the partial export method.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Espressione</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exports parts of the animation based on a simple expression.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Intervallo fotogrammi</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exports only part of the animation within the frame range.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Intervallo temporale</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exports only part of the animation within the timeframe.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Selezione</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exports only the frames selected in the timeline.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Nessun fotogramma selezionato.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 fotogramma selezionato.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} fotogrammi selezionati</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Da:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">A:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Espressione:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Type frame numbers separated by a comma or&#10;frame sequences separated by a minus sign:&#10;1, 3, 4, 6 - 9</s:String>-->\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">File</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Cartella di destinazione.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Seleziona la cartella di output</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Seleziona la posizione.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Formato di file</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Nome del file.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animazione</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Aumenta il numero del file</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Riduci il numero del file</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Un file con lo stesso nome esiste già.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Salva negli appunti.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">È necessario selezionare dove salvare il file (in una cartella, negli appunti o caricarlo da qualche altra parte).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Non è stata selezionata l'estensionei dei file</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Quando si seleziona la modalità avanzata è necessario digitare i parametri nel campo dei parametri.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">I parametri speciali {I} (input) e/o {O} non sono presenti nel campo dei parametri.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Per eseguire un comando di post-codifica è necessario inserire qualcosa nel campo di testo dei comandi.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">You must select at least one frame when having the option to export only selected frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">The expression to partially export the project is invalid.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Nessun servizio di caricamento selezionato. È necessario selezionare una destinazione</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Non è stato possibile eseguire il caricamento al servizio selezionato poichè manca l'autorizzazione. Autorizzare questa applicazione da Opzioni > Servizi upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Non è possibile selezionare l'opzione di copia del collegamento in quanto non è stato impostato il caricamento del file.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">È necessario selezionare una cartella per l'output.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">La cartella per l'output non esiste.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">La cartella per l'output contiene uno o più caratteri non validi. Selezionare una cartella valida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">È necessario selezionare un nome di file.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Il nome del file dell'output contiene uno o più caratteri non validi. Selezionare un nome di file valido.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Nome di file già in uso. Indicare di sovrascrivere o selezionare un altro nome di file.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">There's already a project with the same filename. Set to overwrite or pick another filename or folder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">L'operazione è stata annullata.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Info\">Select the upload preset, which has details about the service in use for upload.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Limit\">This upload service imposes limits.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Add\">Add a new upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Edit\">Edit upload preset settings.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.History\">View the upload history of this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Remove\">Remove the currently selected upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Select an upload preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Pick one from this list.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">No upload preset available for this format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Add a preset by using the button below.</s:String>-->\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Deleting the Upload Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Are you sure that you want to delete the upload preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected upload preset?</s:String>-->\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Esporta fotogrammi</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Esportare i fotogrammi?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Questa azione comporterà l'esportazione di {0} fotogrammi direttamente nella cartella selezionata.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Sovrascrivi</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Sovrascrivere il file?</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">A file with the name '{0}' already exists in that folder.\\r\\nWould you like to overwrite it?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Would you like to overwrite the files?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">One or more files with the same name already exist in that folder.\\r\\nWould you like to overwrite them?</s:String>-->\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Anteprima comando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Comando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Percorso input</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Percorso output</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Invia</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Anteprima</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Invia feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Titolo *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Message *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Se riscontri un bug, non dimenticare di spiegare come riprodurlo, passo per passo.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Tipo di feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Suggerimento</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problema/bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Tuo indirizzo email (facoltativo)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">È necessario inserire un titolo per il feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">È necessario inserire un messaggio per il feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Devi specificare il tuo indirizzo email per ricevere una risposta dallo sviluppatore.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Invio in corso... Questa finestra verrà chiusa a breve.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Allegati (facoltativi, 20MB massimo)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Aggiungi allegati</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Rimuovi tutti gli allegati</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Capisco l'inglese</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">e il portoghese (brasiliano ed europeo).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Questo è quello che verrà inviato, insieme a tutti gli allegati.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Risoluzione problemi</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Mancano delle finestre?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Se manca una qualsiasi finestra (al di fuori dello schermo),&#x0d;utilizzare le opzioni qui sotto per resettarne la posizione attuale e di avvio.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Ecco dove si trova attualmente ogni finestra:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Qui è dove ogni finestra si aprirà la prossima volta:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Sposta tutte le finestre nello schermo principale.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Reimposta la posizione di avvio di tutte le finestre.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normale</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Corsivo</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Obliquo</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Nero</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Grassetto</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Grassetto medio</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Nero extra</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Grassetto extra</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra-leggero</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Pesante</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Leggero</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Medio</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normale</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regolare</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi-grassetto</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Sottile</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Nero ultra</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Grassetto ultra</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Chiaro ultra</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">In alto</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Al centro</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">In basso</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Adatta</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Sinistra</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Destra</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Orizzontale</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Verticale</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Sinistra</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Destra</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Al centro</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Giustifica</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Nessuno</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Sottolineato</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Barrato</s:String>\n    <!--<s:String x:Key=\"S.TextDecorations.OverLine\">OverLine</s:String>-->\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Linea di base</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.ja.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">OK</s:String>\n    <s:String x:Key=\"S.Back\">戻る</s:String>\n    <s:String x:Key=\"S.Cancel\">キャンセル</s:String>\n    <s:String x:Key=\"S.Yes\">はい</s:String>\n    <s:String x:Key=\"S.No\">いいえ</s:String>\n    <s:String x:Key=\"S.Add\">追加</s:String>\n    <s:String x:Key=\"S.Edit\">編集</s:String>\n    <s:String x:Key=\"S.Id\">ID</s:String>\n    <s:String x:Key=\"S.Title\">タイトル</s:String>\n    <s:String x:Key=\"S.Description\">説明</s:String>\n    <s:String x:Key=\"S.SelectColor\">色を選択するには、ここをクリックしてください。</s:String>\n    <s:String x:Key=\"S.Documentation\">クリックしてドキュメントへ移動</s:String>\n    <s:String x:Key=\"S.Suppress\">(表示を)抑制</s:String>\n    <s:String x:Key=\"S.Preview\">プレビュー</s:String>\n    <s:String x:Key=\"S.Size\">サイズ</s:String>\n    <s:String x:Key=\"S.Background\">背景</s:String>\n    <s:String x:Key=\"S.Color\">色:</s:String>\n    <s:String x:Key=\"S.Delay\">遅延</s:String>\n    <s:String x:Key=\"S.DelayMs\">遅延 (ミリ秒):</s:String>\n    <s:String x:Key=\"S.ValueMs\">±数値 (ミリ秒):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">拡大比率</s:String>\n    <s:String x:Key=\"S.Margin\">マージン:</s:String>\n    <s:String x:Key=\"S.Padding\">パディング:</s:String>\n    <s:String x:Key=\"S.MinHeight\">最小高さ:</s:String>\n    <s:String x:Key=\"S.AndOr\">および/もしくは</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">アプリのクラッシュ(・へ・)</s:String>\n    <s:String x:Key=\"S.Required\">必須フィールド</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">依存ソフトが見当たりません。</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">現在.Net Framework 4.8ではありません。</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">このアプリを適切に使用するには、正しい.Net Frameworkのバージョンが必要です。ダウンロードページを開きますか？</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">単一インスタンスのみ許可</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">アプリは既に起動しています。</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGifは既に起動しています。ウィンドウが見当たらないなら、システムトレイを見てください。ScreenToGifのアイコンがそこにあるはずです。</s:String>\n    \n    <!--<s:String x:Key=\"S.SavingSettings.Title\">Saving the settings</s:String>-->\n    <!--<s:String x:Key=\"S.SavingSettings.Instruction\">Would you like to try to save it again?</s:String>-->\n    <s:String x:Key=\"S.SavingSettings.Message\">ScreenToGifには、設定をディスクに保存するための十分な権限がないようです。 &#10;&#10;管理者権限でもう一度試してみますか？</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">ScreenToGifを終了中</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">アプリを終了したいですか？</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">すべてのウィンドウは閉じられ、トレイアイコンは削除されます。</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Title\">Switch Graphics Adapter</s:String>-->\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">適切なグラフィックスアダプターに切り替えて、選択した画面をキャプチャする</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">DirectX の制限により、ScreenToGif はキャプチャされる画面と同じグラフィックアダプター上で実行される必要があります。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Windowsの「設定」→「システム」→「ディスプレイ」→「グラフィックス設定」を開くか、以下のリンクをクリックして、ScreenToGifに設定されているグラフィックスアダプターを切り替えます。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">グラフィックアダプターのグラフィック設定を開いて、ScreenToGif用のグラフィックアダプターを切り替えます。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Windowsの設定を開く</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Space\">スペース</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">新規スクリーン録画</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">新規Webカメラ録画</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">新規ボード録画</s:String>\n    <s:String x:Key=\"S.Exit\">終了</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">新規スクリーン録画</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">新規Webカメラ録画</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">新規ボード録画</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">新規プロジェクト</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">スクリーン録画を挿入</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Webカメラ録画を挿入</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">ボード録画を挿入</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">メディアから挿入(画像と動画)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">名前を付けて保存</s:String>\n    <s:String x:Key=\"S.Command.Load\">ファイルをロード (画像、動画、プロジェクト)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">最近のプロジェクトをロード</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">現在のプロジェクトを破棄</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">フレームの遅延をオーバーライド</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">フレームの遅延を増減</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">フレームの遅延をスケール</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">表示倍率を100%に設定</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">ウィンドウをフレームサイズへ調整</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">ウィンドウサイズに画像をフィット</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">先頭フレームを選択</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">前のフレームを選択</s:String>\n    <s:String x:Key=\"S.Command.Play\">アニメーション再生</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">次のフレームを選択</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">最終フレームを選択</s:String>\n    <s:String x:Key=\"S.Command.Undo\">元に戻す</s:String>\n    <s:String x:Key=\"S.Command.Redo\">やり直し</s:String>\n    <s:String x:Key=\"S.Command.Reset\">プロジェクトでのすべての変更を取り消し</s:String>\n    <s:String x:Key=\"S.Command.Copy\">選択フレームをクリップボードに格納(コピー)</s:String>\n    <s:String x:Key=\"S.Command.Cut\">選択フレームを切り取り、クリップボードに格納</s:String>\n    <s:String x:Key=\"S.Command.Paste\">クリップボードからフレームを貼り付け</s:String>\n    <s:String x:Key=\"S.Command.Delete\">選択フレームをすべて削除</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">以前のフレームをすべて削除</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">以後のフレームをすべて削除</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">重複フレームを削除</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">フレーム数を削減</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">スムーズループを作成</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">アニメーションをリバース</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">(ヨーヨーのように)反復するアニメーションを生成</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">選択フレームを左へ移動</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">選択フレームを右へ移動</s:String>\n    <s:String x:Key=\"S.Command.Resize\">すべてのフレームをリサイズ</s:String>\n    <s:String x:Key=\"S.Command.Crop\">すべてのフレームをクロップ(切り抜き)</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">フレームを反転もしくは回転</s:String>\n    <s:String x:Key=\"S.Command.Caption\">キャプションを追加</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">(適用前なら)自由に移動できるテキストを追加</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">タイトルフレームを追加</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">録画中に押下したキーを表示</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">図形を自由に描く</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">シェイプを追加</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">マウスクリック</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">選択画像を透かしとして追加</s:String>\n    <s:String x:Key=\"S.Command.Border\">帯を追加</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">ドロップシャドウ(落し影)を追加</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">フレーム上のセンシティブな部分を隠す</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">再生中、終始固定のままにするべきでないフレームの一部を選択するにはドローイングツールを使用してください。</s:String>\n    <s:String x:Key=\"S.Command.Progress\">プログレスバーもしくはテキストで再生の詳細を表示</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">すべてのフレームを選択</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">指定インデックスのフレームを表示</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">フレームの選択を反転</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">すべてのフレームを選択解除</s:String>\n    <s:String x:Key=\"S.Command.Fade\">フェードトランジション</s:String>\n    <s:String x:Key=\"S.Command.Slide\">スライドトランジション</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">完了したエンコードはすべてクリア</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">上に移動</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">下へ移動</s:String>\n    <s:String x:Key=\"S.Command.Add\">追加</s:String>\n    <s:String x:Key=\"S.Command.Open\">開く</s:String>\n    <s:String x:Key=\"S.Command.Edit\">選択項目を編集</s:String>\n    <s:String x:Key=\"S.Command.Save\">選択項目を保存</s:String>\n    <s:String x:Key=\"S.Command.Remove\">選択項目を削除</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">履歴表示</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - 起動画面</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">レコーダー</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">スクリーンレコーダーで簡単に画面の録画ができます。</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webカメラ</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Webカメラレコーダーを開きます。</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">ボード</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">描画を録画するボードレコーダーを開きます。</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">エディター</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">エディターウィンドウで新しい録画を開始したり編集したりできます。</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">オプション</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">新しいリリースがあります</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">ScreenToGifの最新バージョンをダウンロードします。</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - アップデーター</s:String>\n    <s:String x:Key=\"S.Updater.Header\">最新版が出ました</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">新しいリリース！</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">新しいバージョン {0} がリリース ! 詳細はここをクリック</s:String>\n    <s:String x:Key=\"S.Updater.Version\">バージョン</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">ポータブル</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">インストーラー</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">変更点</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">バグフィックス:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">新しいバージョンが利用できます。&#10;ブラウザでダウンロードページを開きますか？</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">更新後、アプリ実行</s:String>\n    <s:String x:Key=\"S.Updater.Download\">ダウンロード</s:String>\n    <s:String x:Key=\"S.Updater.Install\">インストール</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">手動インストール</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">ダウンロード中・・・</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">ダウンロード詳細を表示することができませんでした。</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">アップデートをダウンロードできませんでした。</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">アップデートする前に、すべてのエンコードが終了するのを待つ必要があります。</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - ダウンローダー</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">ダウンローダー</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} / {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - オプション</s:String>\n    <s:String x:Key=\"S.Options.App\">アプリケーション</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">レコーダー</s:String>\n    <s:String x:Key=\"S.Options.Editor\">エディター</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">自動化タスク</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">ショートカットキー</s:String>\n    <s:String x:Key=\"S.Options.Language\">言語</s:String>\n    <s:String x:Key=\"S.Options.Storage\">一時ファイル</s:String>\n    <s:String x:Key=\"S.Options.Extras\">外部ツール</s:String>\n    <s:String x:Key=\"S.Options.Upload\">アップロードサービス</s:String>\n    <s:String x:Key=\"S.Options.Donate\">寄付</s:String>\n    <s:String x:Key=\"S.Options.About\">アプリ情報</s:String>\n    <s:String x:Key=\"S.Options.Other\">その他</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">カーソル追従用のショートカットキーを見失い中</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">マウスカーソル追従機能を使用するためには、機能をトグルするショートカットキーの設定が必須です。</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">スクリーンキャプチャの依存ソフトが見当たりません。</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">Desktop Duplication APIで画面をキャプチャするために、SharpDxライブラリが必須です。</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">スタートアップ</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">手動&#10;開始</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">手動で開始する時のみ、アプリは実行されます。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">OS起動時&#10;開始</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">アプリはWindowsの起動後、実行されます。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">スタートアップモードを変更することができません。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">単一インスタンス&#10;のみ許可</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">ユーザーと実行ファイル(の対)毎に同時に一つ実行できます。&#10;異なるユーザーもしくは異なる実行ファイルのインスタンスは、共存できることを意味します。&#10;再びアプリを実行しようとすると、二つ目のインスタンスは、一つ目のインスタンスにフォーカス移動を試みて、終了します。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">複数インスタンス&#10;を許可</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">制限なしに、このアプリを同時に複数実行できます。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">システムトレイへ最小化して開始</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(システムトレイアイコンは、オプションが有効である間、表示されます)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">開始:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">ランチャー</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">スクリーンレコーダー</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webカメラ録画</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">ボードレコーダー</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">エディターウィンドウ</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(アプリ開始時に最初に表示するウィンドウ)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">アプリのテーマ</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">配色</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">非常に明るい</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">明るい</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">中間</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">暗い</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">とても暗い</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">システム設定に準ずる</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">カスタム</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">色の例</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">システムトレイアイコン</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">システムトレイ(通知領域)にアプリを表示</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">すべてのウィンドウを閉じてもアプリは閉じない</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">何もしない</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">ウィンドウを開く</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">ウィンドウなし</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">すべてのウィンドウを最小化またはリストア</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">すべてのウィンドウを最小化</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">すべてのウィンドウをリストア</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">左クリック:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">左クリック(2回):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">中クリック:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">ウィンドウ:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">以外の場合、開く:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">全般</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">上限容量が十分でないときのクラッシュを回避</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(実験的な機能)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">(Exitコマンドで)アプリ終了する前に確認</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">ハードウェア・アクセラレーションを使用しない</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(ユーザーインターフェースは、ソフトウェアモードでレンダリングされます)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">翻訳のアップデートを確認</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(翻訳がアップデートされたら自動的にダウンロード、インストールされます)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">アップデートを確認</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">アプリ終了後、自動的に更新をインストール</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">ポータブルバージョンのダウンロードを強制</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(実行可能ファイルの解凍と交換による手動インストールが必要です)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">アップデート実行時、昇格した特権を強制</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">インストールを開始する前にプロンプトを表示</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">インターフェース</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">旧</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">新</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">キャプチャー間隔</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">マニュアル</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">キャプチャボタンまたは同等のキーボードショートカットを押すと、各フレームは手動でキャプチャされます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">ユーザーインタラクション</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">クリックまたは入力するたびに録画されます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">秒ごと</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">レコーダーの画面で設定されたフレーム数に合わせて、秒単位でフレームが録画されます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">分ごと</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">レコーダーの画面で設定されたフレーム数に合わせて、分単位でフレームが録画されます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">時間ごと</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">レコーダーの画面で設定されたフレーム数に合わせて、時間単位でフレームが録画されます(タイムラプス)。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">再生遅延:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">各フレームにミリ秒単位で遅延時間が設定されます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">各フレームは{0}の間隔でキャプチャされます。</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">キャプチャモード</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">より古いキャプチャ法を使うと、遅くなり、ゲームをキャプチャできないかもしれません。&#10;しかしプラグインを追加する必要はありません。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Desktop Duplication APIによるキャプチャ法を使用すると、&#10;より高速化し、フルスクリーンゲームをキャプチャできます。ただし、SharpDxプラグインとWindows8以降が必須となります。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">ファイルへ&#10;保存</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">キャプチャされた各フレームは、画像ファイルとしてドライブに保存されます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">メモリー&#10;キャッシュ</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">各フレームは、初めにメモリー上にピクセル配列として蓄えられます。(その前に圧縮されるかも)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">圧縮:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">サイズ優先</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(速さよりも、サイズの小ささを優先して圧縮)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">最速</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(サイズの小ささよりも、速さを優先して圧縮)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">非圧縮</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(フレームをキャプチャしている間、非圧縮)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">キャッシュサイズ:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">MB (左記のサイズに到達後、データはディスクに書き込まれます)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">フルブラックフレームの録画を防ぐ</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">メモリキャッシュのあるBitBltで、誤って全ピクセルが黒くなってしまうのを防ぎます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">録画中にマウスカーソルを表示</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">カーソルの色を選択する</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">固定フレームレート</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(録画時のラグによる変動をせず一定します)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">変化があったときのみキャプチャーする。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">キャプチャー領域内で変化があった場合にのみ、フレームがキャプチャーされます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">リモートデスクトップ接続中のキャプチャ性能を改善</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(レイヤー化したウィンドウのキャプチャを無効)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Force memory cleanup during capture.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduces memory usage during capture, but decreases performance)</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">ガイドライン</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">三分割法</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">クリックして三分割法のガイドラインの表示を切り替えます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">十字線</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">クリックして十字線のガイドラインの表示を切り替えます。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">ガイドラインは、レコーダーが一時停止または停止している間のみ表示されます。</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">タイトルバーを隠す (薄型)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">拡大鏡を有効</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(録画領域を選択している間は拡大鏡を有効にします)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">選択中に画面領域の境界線をアニメーションさせる</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(境界線がアニメーションします)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">記録領域の移動</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(選択範囲の角の装飾で、記録領域の移動を可能にする)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">コンパクトモード</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(レコーダーのコマンドパネルが小さく表示されます)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">録画中にも廃棄ボタンを表示</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(通常は一時停止中のみ表示されます)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Improve screen selection performance.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduces the lag during screen selection by displaying a static view of the screen)</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">記録領域の大きさを記憶</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">記録領域の位置を記憶</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">開始前にカウントダウン</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(キャプチャ開始前に数秒待つ)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">カーソル追従を有効</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(録画エリアは、カーソル位置に基づき、再配置されます)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(録画エリアが再配置されたところで、ピクセル中に余白をバッファ)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(UIが隠れ始めるところで、ピクセル中に追加の余白をバッファ)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">録画を削除する前に確認する</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">エディター背景</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">グリッドサイズ</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">非常に小さい</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">小さい</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">中間</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">大きい</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">非常に大きい</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">大きい四角が好き</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">目が不自由です。</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">カスタム</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">高さ</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">幅</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">適用</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">ベースカラー</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">奇数行の色</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">偶数行の色</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">エンコーディングを別ウィンドウで表示します。</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">タイトルバー(Chrome)を拡張する</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">フレームサイズに応じてウィンドウサイズを自動調整</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">ウィンドウサイズに応じてフレームサイズを自動調整</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">フレームを削除する前に確認</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">プロジェクトを破棄する前に確認</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">エディターを閉じる前に確認 (プロジェクトが開かれている場合)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">テキスト選択をトリプルクリックにする</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">文字の外側にキャプションのアウトラインを描く</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">必要に応じてフレームを間引く</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(プレビューワーの表示が間に合わない時にフレームを飛ばします)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">プレビューワーの表示が間に合わない時にフレームを飛ばします</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">元に戻す/やり直しの履歴を制限する</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(古いアクションは上限に達すると削除されます)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(保持するアクションの最大数)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">自動化タスク</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">自動化タスクの一覧</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">タスク</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">詳細</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">有効</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">このタスクを有効にします。</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">タスクを選択</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">上からタスクを選択</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">タスクは一覧の上から下へ順番に実行されます。&#10;エディターでプロジェクトを開いたときにタスクが実行されます。</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">グローバル</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">スクリーンレコーダー:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(標準スクリーンレコーダーを開きます)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webカメラレコーダー:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Webカメラレコーダーを開きます)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">ボードレコーダー:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(ボードレコーダーでユーザーの描画を録画できます)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">エディター:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(別のエディターウィンドウを開きます)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">オプション:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(オプションウィンドウを開きます。多重起動はできません)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">終了:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(すべてのウィンドウを閉じてシステムトレイからアプリを削除します)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">レコーダー</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">開始/ポーズ:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(録画を開始/ポーズします。スナップショットモードが有効ならスナップショットを撮ります)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">停止:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(録画を停止してエディターを開きます)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">破棄:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(ポーズするとアクティブな録画を破棄します)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">カーソル追従:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(カーソル位置に基づく録画エリアの調整をトグルします)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">追従を無効化:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(一時的に、カーソル位置に基づく録画エリアの調整を無効化します。修飾子キーのみ受け付けます。)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">クリックしてから、(修飾子キーと)希望するキーを押してください。&#10;一部使用できないキーの組み合わせがあります。</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">アプリケーションの言語</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">自動検出</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">現在のOS言語 (利用可能なら)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">アプリを翻訳しますか？</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">翻訳の案内と翻訳アプリのダウンロードはこちら</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">翻訳アプリで翻訳ファイルを作成したら</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">(翻訳ファイルの)インポートはここから</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">(翻訳ファイルのテスト用)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">翻訳ファイルのテストが完了したら</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">メールアドレス: (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">まで送ってください。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">ガイドラインのウェブページを開く</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">インポート画面を開く</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">メーラーを起動</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">状態</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">ボリューム:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">空き領域 {0}/{1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">空き領域を再度確認する。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">キャッシュフォルダをクリアする。&#10;最近のプロジェクトを保存するかどうかを決めることができます。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">ハードドライブのスペースが不足しています。 一時フォルダーをクリアするか場所を変更してください。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">ドライブの詳細を取得できません。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">ファイルなし</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} ファイル</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} ファイル</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">フォルダーなし</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} フォルダー</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} フォルダー</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} 使用中</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">パス</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">キャッシュ:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">一時ファイルの場所を選択</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">ログ:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">(エラー)ログフォルダーの場所を選択</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">選択したフォルダを参照する。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">設定ファイルの場所</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">アプリデータ:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">ローカル:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">存在しません。</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">空のローカル設定ファイルを作成</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">設定ファイル削除</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">設定ファイルの保存先フォルダーを開きます。&#10;Ctrlキーを押しながらだと設定ファイルを開きます。(可能であれば)</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">・ 設定ファイル検索順: ローカル ▶ アプリデータ ▶ 標準設定&#10;　・ローカル、アプリデータに設定ファイルがなければ標準設定が使用されます。&#10;　・標準設定が使用された場合、設定ファイルはアプリデータに保存されます。</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.DeleteEverything\">Delete all files from cache when closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Ask me before deleting all files from cache.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">古いプロジェクトを自動削除</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">アプリを起動時に 「オプション」 - 「一時ファイル」で設定した日数を経過したプロジェクトは消去されます。</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(この日数を経過した古いプロジェクトは、アプリ起動時に消去/破棄されます)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - キャッシュのクリア</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">キャッシュフォルダをクリアしますか？</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">録画を作成したり何か開いて編集してたりすると、プロジェクトが作成されキャッシュフォルダ内に保存されます。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">これらのプロジェクトをキャッシュフォルダから削除しますか？</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">最近のプロジェクトは削除しない。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(現在使用していない{0}日より古いプロジェクトのみ削除されます)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(現在使用されていないプロジェクトは全て削除されます))</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">プロキシ</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">モード:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">無効</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">マニュアル</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">システム</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(システムプロキシを使用)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">ホスト:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">ポート番号:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">ユーザー名:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">パスワード:</s:String>\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Presets\">Upload presets</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Service\">Service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Title\">Title</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Description\">Description</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Enabled</s:String>-->\n    \n     <!--Options • Upload > Preset-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Title\">Upload Service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Select\">Select a service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Select an upload service above</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Custom\">Custom</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Enable\">Enable this preset.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Details\">Details</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Name\">Name:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Description\">Description:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode\">Mode:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonymous</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Authenticated</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Authorization</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Get token</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Token\">Paste the OAuth token here</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Username\">Username:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Password\">Password:</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">承認</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.NotStored\">The username and password will not be stored.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Options\">Options</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">直接リンクを使用</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">You must give this preset an unique name.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">The name is already in use by another upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">When in authenticated mode, you must finish the authentication process.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">You must provide your username and password to authorize this app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">It was not possible to get the authorization token.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">このアプリを承認するには、認証トークンが必要です。</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Authorization failed. Check if everything is right and try again in a few seconds.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">アルバムリストを読み込むことができませんでした。</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Authorization completed.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">未承認</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">{0}で承認の期限が切れます。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">承認は{0}まで有効</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Gifの代わりにGifvリンクを取得</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">選択したアルバムにgifをアップロード</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">アルバム:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">アップロードの前に確認</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Reload album list.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Defaults</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Ask me to fill out the details of the upload.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url type:</s:String>-->\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">アルバム選択(オプション)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">必要に応じて目的のアルバムを選択することができます:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details\">Upload details (optional)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Upload details</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Title:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Description:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tags:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separate tags by using a semi-colon ( ; )</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Only display for those accessing via direct link.</s:String>-->\n    \n    <!--Options • Upload > History-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Title\">Upload history</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.History.Date\">日付</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.History.Preset\">Preset</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Successful\">Successful?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Remove\">Delete history entry.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">リンク:</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Lower quality:</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">削除リンク:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">本当に履歴エントリーを削除してもよろしいですか？</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">この操作は元に戻すことができません。 &#10;&#10;選択した履歴エントリを削除しますか？</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">利用可能な外部ツール</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">クリックでダウンロード&#10;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">ダウンロード中...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">ダウンロード済み&#10;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">ファイルのプロパティを開くには、ここをクリックしてください。</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Storeにより配信されたアプリは他のアプリをダウンロードできません。手動でダウンロードしてください。</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpegの場所</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">FFmpeg実行ファイルの場所を選択</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpegの実行ファイル</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">FFmpeg実行ファイルのパスが無効です。実行ファイルの有効な場所を選択してください。</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifskiの場所</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Gifski実行ファイルの場所を選択</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski ライブラリー</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Gifski実行ファイルのパスが無効です。実行ファイルの有効な場所を選択してください。</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation\">SharpDx フォルダー (SharpDX.dll と SharpDX.Direct3D11.dll と SharpDX.DXGI.dll)</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">SharpDxライブラリの場所を選択</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">SharpDx フォルダー用のパスは、不正な文字を一つ以上含んでいます。不正な文字を含まないフォルダーを選択してください。</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg ライセンス</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski ライセンス</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx ライセンス</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">フォルダの書き込み権限がありません</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">書き込み権限がないため、ダウンロードしたものをフォルダに保存することができません。 &#10;&#10;ダウンロードを終了するために、管理者権限でダウンローダーを起動しますか？</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">寄付</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">US$ で寄付</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">€ で寄付</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Paypalのウェブサイトを開く (ドル)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Paypalのウェブサイトを開く (ユーロ)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Paypalのウェブサイトを開く (通貨選択)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">寄付</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Patreonで毎月寄付</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Flattrで毎月寄付</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">ゲームをギフト</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Steamでゲームをギフト</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">GOGでゲームをギフト</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Ko-fiでコーヒー代を払う</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">暗号通貨(仮想通貨)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">BitcoinCashアドレスをコピー</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">サポート</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">プロジェクトを支援したいなら(^.^)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">バージョン:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">作者: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Storeのバージョンでは、強制的なポリシーによりいくつかの機能が使用できません。</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">連絡先</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">サーバーに接続</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">ページ訪問</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">入室する</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">技術情報</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">ライセンス:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(フリーウェア)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">ソースコード:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">プライバシーポリシー:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">謝辞</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">フィードバックや寄付を頂いた方々</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">翻訳</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">言語コードの取得中...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">言語: {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">認識されていません</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">一番下が使用中のリソースです。</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">カスタムリソースはリストの一番下に追加されます。</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">リソースをエクスポート中...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">リソース辞書を保存</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">リソース辞書を開く</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">リソース辞書</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">リソースをインポート中...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">ファイル名が有効なパターンに従っていません</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\"> StringResources.en.xamlのように名前を変更してみてください。'en'は言語コードに置き換えてください。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">同じ名前のリソースを追加することはできません</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">リソースを削除するか、他の言語コードを使用してみてください。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">言語コードが長すぎます</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">\"{0}\"はコードが長すぎます。代わりに\"{1}\"を使用してみてください。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">未知な言語</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\"は、有効な言語コードではありません</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">リソースのインポートができませんでした。</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">録画</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">ポーズ</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">続ける</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">停止</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">破棄</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">スナップ</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">高さ</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">幅</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">カーソルフォローが有効です。</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">クリックすると、録画モードが切り替わります。</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">マニュアル</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">インタラクション</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">最大フレーム毎秒</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">フレーム毎秒</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">範囲は1〜60fpsで、値が大きいほど、より多くのフレームがキャプチャされます。&#10;各増分は、16ミリ秒の差を表します。</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">最大フレーム毎分</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">フレーム毎分</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">範囲は1〜60fpmで、値が大きいほど、より多くのフレームがキャプチャされます。&#10;各増分は、1秒の差を表します。 </s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">最大フレーム毎時</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">フレーム毎時</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">範囲は1〜60fphで、値が大きいほど、より多くのフレームがキャプチャされます。&#10;各増分は、1分の差を表します。</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">クリックまたはキーを押してキャプチャ</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">ウィンドウに吸着する (スナップしたいところへドラッグして離す)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">開始まで</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (ポーズ)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">停止中・・・</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">スタート前...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">キャプチャー時間の経過</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">総フレーム数:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">マニュアル録画:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">録画は一時停止されました</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Timer.Imprecise\">Your computer does not support an accurate capture mode,&#10;which means that the target frame rate may never be achieved.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">スクリーンをキャプチャすることができませんでした。</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">スクリーンをキャプチャすることができませんでした。このキャプチャ方法で5回試行しましたが、フレームを取得できませんでした。</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">スクリーンキャプチャを開始/ポーズすることができませんでした。</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Desktop Duplication APIを使用してスクリーンキャプチャするため、Windows 8 以降が必要です。</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">SharpDx ライブラリは、Desktop Duplication APIを使用してスクリーンキャプチャをするのに必須です。「オプション」 - 「外部ツール」からダウンロードしてください。</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">エリア</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">エリア選択</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">ウィンドウ</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">ウィンドウの選択</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">スクリーン</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">画面の選択</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">内部スクリーン</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">汎用スクリーン</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">グラフィックアダプタ: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">解像度: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">ネイティブ解像度: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">ドラッグして選択範囲を移動&#10;します。</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">OK</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">リトライ</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">右クリック</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">選択キャンセル(Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">クリック＆ドラッグで画面領域を選択</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">クリック＆ドラッグで領域を選択</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">ウィンドウを選択するには、ここをクリックしてください</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">画面を選択するには、ここをクリックしてください</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Escキーを押してキャンセル</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">{0}を押して録画を停止します</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">レコーダーのウィンドウが最小化されますので、元に戻すか、,&#10;{0}を押してキャプチャを一時停止してください。</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">録画の破棄</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">本当に録画を破棄しますか？</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">この操作は、録画を破棄し、すべてのフレームを削除します。&#x0d;この操作は元に戻せません。</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Webカメラレコーダー</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">ビデオデバイスが見つかりません。(・へ・)</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">ビデオデバイスを確認してください。</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">スケール: {0:0.##}倍</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">ビデオスケール変更</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - ボードレコーダー</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">自動録画</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">描画中も録画する</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [保持]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">色セレクター</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">色の選択</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">赤(R)</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">緑(G)</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">青(B)</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">アルファ値(A)</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">16進数</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">初期の色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">現在の色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">最新の色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">調べたい色へこのマークをドラッグして下さい</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">画面の取得したい色のところへクリック・ドラッグして下さい。</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">例外ビューアー</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">内部例外を開く</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">例外タイプ</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">メッセージ</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">スタック</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">ソース</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">不具合が発生しました。</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">レポート送信</s:String>\n\n    <!--Presets-->\n    <!--<s:String x:Key=\"S.Preset.Title\">Preset</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Encoder\">Encoder</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Name\">Name</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Description\">Description</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Other\">Other</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.AutoSave\">Automatically save when an option gets modified.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Manual\">All changes to this preset settings (encoding and exporting settings) need to be saved manually by pressing the save button.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Automatic\">All changes to this preset settings (encoding and exporting settings) will be saved automatically.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Readonly\">Some of the properties of a default preset are read-only.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Name\">You must give a name to this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.SameName\">There's already a preset with the same name.</s:String>-->\n    \n    <!--Presets • Listing-->\n    <!--<s:String x:Key=\"S.Preset.Autosave\">Autosaves</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Autosave.Info\">Changes to this preset are automatically saved.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Default.Title\">Default ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Default.Description\">Default preset for the encoder.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Twitter.Title\">For Twitter ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Twitter.Description\">Respects Twitter upload limits (except size and resolution).</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Vp8.Description\">Older and better known codec.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Animation\">Animation</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Project\">Project</s:String>-->\n\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Better suited for recordings with more colors and gradients.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">High quality • Transparent background</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Supports saving the animation with a transparent background.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">High quality • Graphics</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Better for recordings with a lower quantity of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - Higher quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Higher image quality, but with a greater file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Lower image quality, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski - Higher quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Higher image quality, but with a greater file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski - Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Lower image quality, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski - Lower quality and faster encoding</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Even lower image quality, with a faster encoding, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System - Low quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Low quality but faster encoding.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">High image quality and small file size, but slower encoding.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Lower image quality, small file size and faster encoding.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">High image quality and small file size.</s:String>-->\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">フレームを挿入</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">両方のサイズが同じである必要があるため、このウィンドウでは画像とキャンバスそれぞれの位置やサイズを変更します。</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">キャンバスサイズ:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">画像をキャンバスに合わせる</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">キャンバスサイズを(左上隅から)両方の画像に合わせて変更します。</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">フレームサイズに違いがあります。フレームを挿入する前にこれを解決する必要があります。</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">新規フレーム</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">現在のフレーム</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">画像サイズ:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">画像位置:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">画像のサイズと位置をリセット</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">新しいフレームが現在のフレームリストの位置に挿入されます。</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">前へ</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">後ろへ</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">フレーム</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">インポート中</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">キャンバスの背景色を選択</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">ビデオからフレームをインポートする</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">インポーター:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">ロード中...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">拡大比率:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">サイズ:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">高さ:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">幅:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">フレームレート:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">始まり:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">終わり:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">選択範囲:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">フレーム:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">時間:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">ビデオを読み込むことができませんでした。</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">プレビューアが開始できませんでした。他のインポーターで試すか、動画ファイルが壊れていないか検査してください。Media Playerを使用しているなら、</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">フレームプレビューを生成中にタイムアウト</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">インポートされるためにフレームが選択されませんでした。</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">エンコーダー</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">エンコード中...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">開始中</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">完了</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">クリップボードへコピー完了</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">コピー失敗</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">コマンド実行</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">コマンド出力を表示</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">コマンド実行失敗</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">アップロード失敗</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + クリックで画像削除のページを開きます。(可能な場合)</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">経過時間(分):</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">分析:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">エンコード中:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">アップロード:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">コピー:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">コマンド:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">ファイル削除 / 移動</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">キャンセルしました</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">エラー</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">エラーの詳細を表示するには、ここをクリックしてください。</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">アップロード中</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">コマンド実行中</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">実行中 {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">2パスを準備中</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">2パスを処理中{0}</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">ファイルを作成中</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">変更されていないピクセルを検出中</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">分析結果を保存</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">ファイルを開く</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">フォルダーを開く</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">リストから削除</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">詳細を表示</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">完了したエンコードを消去</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">画像としてコピー</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">ファイル名をコピー</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">フォルダーパスをコピー</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">リンクをコピー</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - コマンド出力</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">コマンド出力</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">通知</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">すべての通知を消去</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - エディター</s:String>\n    <s:String x:Key=\"S.Editor.File\">ファイル</s:String>\n    <s:String x:Key=\"S.Editor.Home\">ホーム</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">再生制御</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">フレーム操作</s:String>\n    <s:String x:Key=\"S.Editor.Image\">画像編集</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">トランジション</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">統計</s:String>\n    <s:String x:Key=\"S.Editor.Options\">オプション</s:String>\n    <s:String x:Key=\"S.Editor.Help\">ヘルプ</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">その他</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">最新版が利用できます！</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">詳細はここをクリック</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">総フレーム数(緑)、選択フレーム数(赤)、選択インデックス(青)</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">フレームを準備中</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">不正な読み込み - 一度に複数のファイルをインポートすることはできません。1つのファイルのみ選択してみてください。</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">不正な読み込み - 一度に複数のプロジェクトを読み込むことはできません。 1つのプロジェクトのみ選択してみてください。</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">メディア(画像,ビデオ)ファイルを開く </s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">メディア(画像,ビデオ)またはプロジェクトファイルを開く </s:String>\n    <s:String x:Key=\"S.Editor.File.All\">すべての対応ファイル</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">画像</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">動画</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">アニメーションPng</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gifアニメーション</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp形式</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi形式</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska形式</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov形式</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4形式</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm形式</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp形式</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg形式</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png画像/全選択画像</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">zipファイル、選択したすべてのイメージ</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGifプロジェクト</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Zip形式のScreenToGifプロジェクト</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd形式</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">新たに録画を開始するには 「ファイル」 - 「新規」グループ から</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">ドラッグ＆ドロップで画像、ビデオ、プロジェクトをインポート</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">このアプリをご使用頂き、ありがとうございます！</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">低フレームレート、フレーム間の色数または変化量が小さいほどサイズは小さくなります。</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">作者とコンタクトしますか？ 「オプション」 - 「アプリ情報」から</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">不具合があったらフィードバックツールで報告してください。</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">新インターフェースのレコーダーを試してみませんか？「オプション」 - 「レコーダー」から</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">録画</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webカメラ録画</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">ボード録画</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">空プロジェクト</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">新規</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">録画</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Webカメラ録画</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">ボード録画</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">メディア</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">挿入</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">名前を付けて保存</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">ロード</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">最近のプロジェクト</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">名前を付けてプロジェクト保存</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">プロジェクトを破棄</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">アクションスタック</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">元に戻す</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">やり直し</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">リセット</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">クリップボード</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">クリップボード表示</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">貼り付け</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">切り取り</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">コピー</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">表示倍率</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">イメージに合わせる</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">ウィンドウに合わせる</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">フレーム選択</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">すべて選択</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">フレームへ移動</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">選択を反転</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">選択解除</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">再生制御</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">先頭</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">前</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">再生</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">ポーズ</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">次</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">最後</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">再生オプション</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">ループ再生</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">(再生制御での)再生中に使用されるだけです。Gif、Apngファイルをエクスポートするときのループ設定を変更したいなら「名前を付けて保存」パネルの中に設定項目があります。</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">フレーム除去</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">削除</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">重複削除</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">フレーム数&#10;削減</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">スムーズループ</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">以前を削除</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">以後を削除</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">並び替え</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">逆順</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">ヨーヨー反復</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">左へ移動</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">右へ移動</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">遅延 (持続時間)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">オーバーライド</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">増加・減少</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">スケール</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">サイズと回転</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">リサイズ</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">切り抜き</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">反転・回転</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">テキスト</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">キャプション</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">テキスト入力</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">タイトルフレーム</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">キーストローク</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">オーバーレイ</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">フリー描画</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">シェイプ</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">マウス&#10;クリック</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">透かし</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">シネマグラフ</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">帯</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">影</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">進捗</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">難読化</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">スタイル</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">フェード</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">スライド</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">全般</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">総フレーム数</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">全期間(分:秒.ミリ秒)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">フレームサイズ(横×縦)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">平均持続時間(平均遅延)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">現在累積時間</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">先頭フレームの表示開始～選択順が早い選択フレームの表示完了までの(累積的な)時間(分:秒.ミリ秒)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">フレームDPI , スケール</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">選択されたフレーム</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">切り取り処理</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">すべてのフレームを切り取ることはできません。</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">録画には、少なくとも一つ以上のフレームが必要です。</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">すべて削除</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">すべてのフレームを削除しても良いですか？</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">このアクションは現在開いているプロジェクトを破棄します(元に戻せません)。 続行しますか？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">プロジェクトを破棄</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">すべてのフレームを削除してもよろしいですか？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">すべてのフレームを削除しようとしています。&#10;この操作は取り消すことができません。</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">直前のプロジェクトを削除しますか？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">「いいえ」を選択すると、直前のプロジェクトを「最近のプロジェクト」から開くことができます。</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">フレームを削除</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">削除してよろしいですか？</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">この操作は {0}個のフレームを削除します。後で元に戻すことができます。</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">エディター終了中</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">終了してよろしいですか？</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">作業中のプロジェクトは、「最近のプロジェクト」から再度開くことができます。</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">現在作業中のプロジェクトは、「最近のプロジェクト」から開くことができますが、&#10;「オプション」 - 「一時ファイル」で設定した日数経過後に自動削除されます。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">不正なドラッグ＆ドロップ</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">一度に複数のファイルをインポートすることはできません。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">1ファイルのみ選択してみてください。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">ファイルをロードできません。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">ファイルの形式が無効であるため、ファイルを読み込めませんでした。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">一度に複数のプロジェクトをインポートすることはできません。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">1プロジェクトのみ選択してみてください。</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">適用されるテキストはありません。</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">キャプションを適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">テキスト入力を適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">タイトルフレームを次に適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">少なくとも一辺は、ボーダー太さ(厚さ)を1以上にする必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">帯(ボーダー)を適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">透明度は0より大きくなければ(影効果適用による)違いは生まれません。</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">影の深さとぼかし半径を0として使用時は、フレームの後ろに隠れるので(影効果適用による)違いは生まれません。</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">シネマグラフを適用するには、少なくとも1つの画素を選択する必要があります。それらの上に描画されるピクセルを選択します。</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">フェードトランジション</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">フェードトランジションを適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">このトランジションでは完全に透明な色は(フェード)効果を生成しません。</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">スライドトランジション</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">スライドトランジションを適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">フレームをロード中</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">プロジェクトをロードできません。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">フレームがすべて破損しているか、イメージが存在しないためフレームを読み込むことができませんでした。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">ロードできないフレームがあります。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">フレームが見つからないか破損しているため、ロードできませんでした。</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">オーバーレイを適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpegが見つかりません。環境変数Pathにパスを追加するか、ここをクリックして「オプション」 - 「外部ツール」を開き、場所を指定してください。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifskiが見つかりません。環境変数Pathにパスを追加するか、ここをクリックして「オプション」 - 「外部ツール」を開き、場所を指定してください。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">ドライブに十分な空き容量がありません (残り {0}％)。 「オプション」 - 「一時ファイル」でスペースを確保するには、ここをクリックしてください。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">異なるDPIの多重画像のインポートはサポートされていません。一部はインポートされますが、その他は、個別にインポートする必要があります。</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">キャッシュからフレームを復旧中</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">フレームを更新中</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">インポートの準備中</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">フレームをインポート中</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">重複を解析中</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">遅延を調整中</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">重複を破棄中</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">フレームを破棄中</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">フォルダーを破棄中</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">フレームをリサイズ中</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">フレームをクロップ(切り抜き)中</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">フレームへオーバーレイを適用中</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">タイトルフレームを作成中</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">フレームの反転・回転を適用中</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">遅延を変更中</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">トランジション効果を適用中</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">保存の準備中</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">読み込みをキャンセルし、プロジェクトを破棄します。</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">フレーム:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">イメージを開く</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">フォルダーを表示</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">フレームへ移動</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">フレームへ移動 (0 ～ {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">名前を付けて保存</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">選択されたフレームを削除</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">新規スクリーン録画</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">新規Webカメラ録画</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">新規ボード録画</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">新規プロジェクト</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">メディア/プロジェクトから新規</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">新規録画作成完了</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">新規Webカメラ録画作成完了</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">新規ボード録画作成完了</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">新規プロジェクト作成完了</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">元に戻す完了</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">リセット実行完了</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">やり直し完了</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} フレーム切り取り</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} フレームコピー完了</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} フレーム貼り付け完了</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">表示倍率 {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">全フレーム選択完了</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">フレーム #{0} 選択完了</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">選択反転完了</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">全フレーム選択解除完了</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} フレーム削除完了</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">フレームリストを逆順化完了</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">ヨーヨー反復効果適用完了</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">フレーム左移動完了</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">フレーム右移動完了</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">フレームリサイズ完了</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">フレームクロップ(切り抜き)完了</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">フレームの反転・回転完了</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">反転は選択したフレームに適用され、回転はすべてのフレームに適用されます。</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">このアクションはすべてのフレームに適用されます。</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">このアクションは選択されたフレームに適用されます。</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">このアクションはすべてもしくは選択フレームに対して適用されます。設定に依存します。</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">シネマグラフは先頭フレームに基づくすべてのフレームに適用されます。</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">オーバーレイ適用完了</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">タイトルフレーム作成完了</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">タイトルフレームは選択されたフレームの前に挿入されます。</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">持続時間 (遅延)変更完了</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">トランジション挿入完了</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">フレームレート減少完了</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">重複削除完了</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">隠す</s:String>\n    <s:String x:Key=\"S.Action.Apply\">適用</s:String>\n    <s:String x:Key=\"S.Action.Open\">開く</s:String>\n    <s:String x:Key=\"S.Action.Save\">保存</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">キャンセル</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">最近のプロジェクト</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">最近のプロジェクト検索中...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">作成日</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">フレーム数</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">プロジェクトが選択されていません。リストからロードするプロジェクトを選択してください。</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">このプロジェクトは、エディタですでに表示されています。</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">別エディターでプロジェクト編集している場合、プロジェクトを開くことはできません。</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">クリップボード</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">クリップボード:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} 枚</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} 枚</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">コンテンツを確認</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">削除</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">貼り付けの振る舞い</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">選択されたフレームの前</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">選択されたフレームの後</s:String>\n    \n    <!--Editor • Resize-->\n    <!--<s:String x:Key=\"S.Resize.Difference\">Difference</s:String>-->\n    <s:String x:Key=\"S.Resize.Dpi\">DPI</s:String>\n    <s:String x:Key=\"S.Resize.Options\">設定</s:String>\n    <!--<s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.Percent\">Percent (%)</s:String>-->\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">アスペクト比を維持する</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">スケーリング品質:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">ファンタ(高画質)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">リニア(低画質)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">ニアレストネイバー(低画質・高速)</s:String>\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Info\">Scaling quality.</s:String>-->\n    <s:String x:Key=\"S.Resize.Warning\">リサイズ処理を適用するには、別の値を選択する必要があります。</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">ポイント</s:String>\n    <s:String x:Key=\"S.Crop.Top\">上:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">左:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">下:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">右:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">クロップ(切り抜き)選択は、現在のフレームサイズよりも小さくなければなりません。</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">クロップ(切り抜き)選択は、10×10 ピクセルより大きくなければなりません。</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">左右に反転</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">上下に反転</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">左へ 90º 回転</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">右へ 90º 回転</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">フレームレート減少</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">残数:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">削除数:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">遅延調整:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">調整しない</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">前のフレームに合算</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">残りフレームに均等に合算</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">プロジェクト全体のフレームレートを下げます。</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">このオプションをオフにした場合、&#10;残数で指定した値よりも多い連続したフレームを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">削除されたフレームを勘定せずに、{1}フレームごとに後の{0}個のフレームを削除します。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">フレームレート削除を適用するフレームを選択する必要があります(または、プロジェクト全体に適用するオプションにチェックを入れます)。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">選択されたフレームのリストは連続している必要があります。選択されているフレームの中で、いくつかのフレームを未選択のままにすることはできません。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">フレームの選択は機能がフレームを削除できるようにするために残数よりも大きくなければなりません。</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">重複削除</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">類似性 (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">フレーム除去:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">先頭フレーム削除</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">最終フレーム削除</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">遅延調整:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">調整しない</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">平均を使用</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">合計を使用</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">このアクションは、各フレーム(ピクセル単位)を分析し、隣接フレームと少なくとも{0}％類似するものを削除します。&#10;フレームの遅延(表示時間)を調整するかどうかを選択できます 。</s:String>\n    \n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">スムーズループ作成</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">開始しきい値:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">比較:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">最後</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">先頭</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">開始フレームに少なくとも {0} % 似ているフレームを見つけようとし、それ以降のフレームをすべて削除。&#x0d;一部の初期フレームを無視して、最初 (しきい値の後) から比較を開始するか、最後から比較を開始するかを選択できます。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">無視するフレームの数は、フレームの総数よりも少なくする必要があります。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">選択した設定ではスムーズなループを作成できませんでした。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">選択した設定に基づく滑らかなループが既にあります。</s:String>\n\n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">テキスト</s:String>\n    <s:String x:Key=\"S.Caption.Font\">フォント</s:String>\n    <s:String x:Key=\"S.Caption.Family\">ファミリー:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">スタイル:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">太さ:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">サイズ:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">色:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">背景色:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">アウトライン</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">太さ(厚さ):</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">レイアウト</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">縦位置:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">横位置:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">アライメント:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">装飾:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">キーストローク</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">キー</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">区切り:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">キーストローク編集</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ctrl、Alt、Shift、Windowsキーは修飾子キーとして使用されていない間は無視</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">\"Ctrl\"単独のようなキーの押下は無視されますが、 \"Ctrl + C\"は無視されません。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">ソフトウェアがシミュレートしたキーストロークを無視する。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">ユーザーの入力したキーストロークのみを記録する。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">キーストロークの表示延長:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">キーストロークの表示を先行して開始</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">(ミリ秒):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">録画にはキーストロークはありません。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - キーストロークエディター</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">フレーム番号</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">キーストローク検出</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">キーストローク削除</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">キーストローク追加:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">小文字記入</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">単一の小文字を挿入します。</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">モード</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">ペン</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">消しゴム</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">選択</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">一筆分消去</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">幅:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">高さ:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">先端:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">四角</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">丸</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">その他:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">蛍光ペン</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">カーブに合わせる</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">選択したフレームに適用すべき描画はありません。</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">フリー描画を適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">追加</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">シェイプ</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">角丸半径:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">破線:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controls the size of the dashes and the size of the gaps.&#10;You can set multiple sizes to create an elaborate dash style.&#10;The default is \"1 0\" or empty, meaning a dash with no gaps.</s:String>-->\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">回転をリセット</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">削除</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">塗りつぶし</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">マウスクリック</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">左クリックの色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">中クリックの色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">右クリックの色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">本プロジェクトでマウスのクリックは検出されませんでした。</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">画像</s:String>\n    <s:String x:Key=\"S.Watermark.File\">ファイル:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">選択されていません</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">不透過率:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">画像の選択</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">選択したフレームに適用する画像を選択する必要があります。</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">透かしを適用するには、少なくとも1つのフレームを選択する必要があります。</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">外観</s:String>\n    <s:String x:Key=\"S.Border.Info\">負の値を使用すると、すべてのフレームに適用されます。&#10;非負の値(0以上)を使用すると、選択フレームにのみ適用されます。</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">影の色:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">背景色:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">方向:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">ぼかし半径:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">深さ:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">モザイク</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">ぼかし</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">暗く</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">明るく</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">難読化オプション</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">ピクセルサイズ:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">強さ:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">強さ:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">強さ:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">ピクセル化された各ブロックの平均色を計算</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">選択範囲を反転する</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">滑らかさ</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">選択ツールを使用して、ピクセル化すべき範囲を選択します。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">選択ツールを使って、フレームの難読化させたくない部分を選択します。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">選択ツールを使用して、ピクセル化すべき範囲を選択してください。</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">タイプ</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">バー</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">テキスト</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">精度:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">分</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">秒</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">ミリ秒</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">比率</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">フレーム番号</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">現在日時</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">カスタム</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">総数を表示</s:String>\n    <s:String x:Key=\"S.Progress.Format\">フォーマット:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">フォーマット</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = ミリ秒</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = 秒</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = 分</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = パーセント</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = フレーム番号</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">合計:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">例:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">.Net Framework由来の日時書式を使用できます。&#10;詳細仕様は、下記二つのリンクから</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">標準フォーマット</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">カスタムフォーマット</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">開始カウント</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">この選択番号からフレーム番号のカウントを開始</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">向き:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">遅延を更新</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">遅延モード</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">オーバーライド(ミリ秒)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">増減(ミリ秒)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">スケール(%)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">新しい値</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">最低 10 (ミリ秒毎フレーム)</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">値を増やす/減らす</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">拡大比率</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">この値で選択したすべてのフレームの持続時間 (遅延)を置き換えます。値は10ms〜25500msです。</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">この値は選択されたフレーム毎の持続時間 (遅延)を減少/増加させます。-10000ms〜10000msの間の値を選択することによって減少/増加できますが、各フレームの最終的な持続時間は10ms〜25500msに制限されます。</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">この比率(%)でフレーム毎の持続期間(遅延)を拡大します。&#10;1%～1000%の範囲で持続時間(遅延)を拡大できます。最終的な持続時間(遅延)の値は、10ms～25500msの範囲に制限されます。</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">静止すべきでない(フレーム間で変更する必要がある)ピクセルをペンで選択します。</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">トランジションの長さ(フレーム数)</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">(各フレーム)トランジション遅延</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">フェード...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">次のフレーム</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">色</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">色</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">トランジションは、選択されたフレームと次のフレームの間に適用されます。</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">ファイルタイプ</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Type.Format\">The format of the output file.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Preset\">The export preset that holds all currently displayed settings.&#10;Manage your export presets via the buttons below.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Animated\">Animated image</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Frames\">Frames</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Other\">Other</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>-->\n    \n    <!--<s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String> -->\n    <!--<s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime File Format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>-->\n    \n    <!--<s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Png\">Png</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Project\">プロジェクト</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif project</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop file</s:String>-->\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">プリセット:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">デフォルト</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">追加</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">保存</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">編集</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">削除</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">リセット</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Deleting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Are you sure that you want to delete the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Reseting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Are you sure that you want to reset the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">This action cannot be undone.&#10;&#10;Would you like to reset the selected preset to its default settings?</s:String>-->\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">エンコーダー</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Encoder and quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Info\">Encoder responsible for generating the output file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Built-in encoder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">システム</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encoder made available by the system.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">External encoder, made by FFmpeg.org.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">External encoder, made by Gif.ski.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Options\">Encoder options</s:String>-->\n    \n    <!--Editor • Save as > FFmpeg-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Enable the advanced mode.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Manually input the parameters to control the encoder.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parameters:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">List of parameters that will be passed to FFmpeg.&#10;&#10;Special parameters:&#10;{I} is the input path (the frames).&#10;{O} is the output path (the exported file).&#10;{W} is the width of the frame.&#10;{H} is the height of the frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">To encode with 2-pass, simply add '-pass 2'.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Preview</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Preview the parameter list that will be passed to FFmpeg.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codec docs</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format docs</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filter docs</s:String>-->\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif オプション</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">減色アルゴリズム(量子化)</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">ニューラルネットワーク</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">速度は遅いですが、よりリアルです。色数が多い場合に適しています。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">高速ですが、色にむらが発生する可能性があります。色数の少ない場合に適しています。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">カットの中央値</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Octreeよりも性能が劣り、速度も遅い。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">白黒</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">固定されたグレースケールパレットを使用しているため、非常に高速です。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">最も使用されている色</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">フレーム内で最も使用されている色を使用します。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">サンプリング:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">サンプリングファクター:&#10;値を1にすると、GIFの見栄えが良くなりますが、レンダリングに時間がかかります。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">品質:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">色数:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">最大色数 (フレーム毎)</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">グローバルカラーテーブルを使用</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">画質やサイズが低下する場合があります。</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Best\">Best</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Use an even faster encoding process.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">May reduce the quality of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">繰り返し:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">ループ型 Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">無限ループ</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">回繰り返し</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">透明度を有効にする</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">完全透明モードを有効にすると、GIFの背景が完全に透明になります。 &#10;このオプションを有効にすると、クロマキーの置き換え処理が無視されます。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">透明として表示する色を選択してください。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">色が選択されている場合、その色は透明に変換され、生成されたGIFでは透明に表示されます。 &#10;色が選択されていない場合、すべての透明色(アルファ=0%)は、通常通り透明に表示されます。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">未変更ピクセルの検出</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">フレーム間の変化していないピクセルを解析することで、必要な部分だけをGIFに保存することが可能になります。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">画質やサイズが低下する場合があります。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">クロマキーを使って、繰り返される画素や変化する画素を置き換えることで、&#10;1フレームあたりの使用色数を減らすことができます。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">クロマキー:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Dither:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer scale:</s:String>-->\n    \n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng オプション</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Prediction:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Average</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Mixed</s:String>-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">ループ型 Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">変更されていないピクセルを検出</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">変更されていないすべてのピクセルを透明色でペイントします。</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Preset:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Default</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Picture</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Photo</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Drawing</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Icon</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Text</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Use lossless mode.</s:String>-->\n    \n    <!--Editor • Save as > Video options-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Mode:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Advanced</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Method of configuring the encoder parameters:&#10;Normal: Use standard UI controls.&#10;Advanced: Use a text box to type the parameters.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">The video encoder, responsible for&#10;converting the raw pixels to the output file.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Preset:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Very Slow</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Slower</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Slow</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Medium</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Faster</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Very Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Quality</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanced</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Speed</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Default</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Lossless</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Lossless (High Performance)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">High Performance</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">High Quality</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray Disk</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Low Latency</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Low Latency (High Performance)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Low Latency (Hight Quality)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Encoding speed to compression ratio,&#10;slower presets may give you better compression&#10;(quality per filesize).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardware Acc.:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Off</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">On</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatic selection</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controls the usage of dedicated hardware (video graphics).&#10;Off: Doesn't use dedicated hardware.&#10;On: Uses dedicated hardware and lets you select special encoders.&#10;Auto: Uses dedicated hardware and automatic selects the right encoder, when possible.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixel format:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatic</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Video sync method.&#10;Auto: Chooses between 1 and 2 depending on muxer (format) capabilities.&#10;Passthrough: Each frame is passed with its timestamps to the encoder.&#10;Constant: Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.&#10;Variable: Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.&#10;Drop: As passthrough but destroys all timestamps, making the encoder generate fresh timestamps based on framerate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Constant framerate</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Variable framerate</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Framerate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Custom</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Pass:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constant Rate Factor.&#10;Quality and rate control setting.&#10;Leave it empty if you don't wish to set this property.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Quality level:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Smaller values means better quality.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Target video bit rate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitrate mode:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constant</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variable</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Min Rate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimum bitrate tolerance.&#10;Most useful when using CBR mode.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Max Rate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximum bitrate tolerance.&#10;Requires the buffer size to be set too.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Buffer size:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Rate control buffer size.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">画像を圧縮</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exports the images inside a zipped folder.</s:String>-->\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">画像を圧縮</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">ランレングス圧縮アルゴリズムで画像データを圧縮</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">タイムラインデータを保存</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">時間調整してエクスポート</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">保存オプション</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Export partially.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">選択フォルダーにファイルを保存</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">上書き (存在していたら)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">プロジェクトとしても保存(同フォルダー、同ファイル名)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">ファイルアップロード</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">クリップボードにコピー</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">ファイル</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">出力ファイルをクリップボードにコピー</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">フォルダーパス</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">出力フォルダーパスをクリップボードにコピー</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">ファイルパス</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">出力ファイルパスをクリップボードにコピー</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">リンク</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">アップロードサービスによって生成されたリンクをクリップボードにコピー</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">エンコード後コマンド実行</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">エンコード後に実行するコマンドを入力します。&#10;複数コマンドを実行するには行を分けて入力します。&#10;{p} = 出力ファイルパス&#10;{f} = 出力フォルダーパス&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial\">Partial export</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode\">Mode:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Select the partial export method.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expression</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exports parts of the animation based on a simple expression.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Frame range</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exports only part of the animation within the frame range.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Time range</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exports only part of the animation within the timeframe.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Selection</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exports only the frames selected in the timeline.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">No frame selected.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 frame selected.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} frames selected.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.From\">From:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.To\">To:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression\">Expression:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Type frame numbers separated by a comma or&#10;frame sequences separated by a minus sign:&#10;1, 3, 4, 6 - 9</s:String>-->\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">保存先 *</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">保存先フォルダー</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">出力フォルダを選択</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">場所の選択</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">ファイルフォーマット</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">ファイル名&#10;&#10;※日時書式指定文字列を「?」で囲むことにより現在日時を入れることができます。&#10;(例 ?yyyyMMddHHmmss?)</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">アニメーション</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">ファイル番号増加</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">ファイル番号減少</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">同名ファイルが存在します。</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">クリップボードへ保存</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">ファイルの保存先(フォルダー、クリップボード、アップロード先)を選択する必要があります。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">ファイルの拡張子が選択されていません。</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">When selecting the advanced mode, you must type the parameters in the parameters field.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">The special parameters {I} (input) and/or {O} (output) are missing from the parameters field.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">エンコード後コマンド実行には、フィールドに何か入力する必要があります。</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">You must select at least one frame when having the option to export only selected frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">The expression to partially export the project is invalid.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">アップロードサービスが選択されていません。対象を選択する必要があります。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">未承認のため、選択したサービスにアップロードすることはできません。 「オプション」 - 「アップロードサービス」でアプリを承認してください。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">ファイルをアップロードするように設定していないため、リンクをコピーするオプションを選択することはできません。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">出力フォルダーを選択する必要があります。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">出力フォルダーがありません。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">出力フォルダーに無効な文字が含まれています。有効なフォルダーを選択してください。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">ファイル名を選択する必要があります。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">出力ファイル名に無効な文字が含まれています。有効なファイル名を選択してください。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">ファイルが存在します。上書きを選択するか別の名前を使ってください。</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">There's already a project with the same filename. Set to overwrite or pick another filename or folder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">操作はキャンセルされました。</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Info\">Select the upload preset, which has details about the service in use for upload.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Limit\">This upload service imposes limits.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Add\">Add a new upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Edit\">Edit upload preset settings.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.History\">View the upload history of this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Remove\">Remove the currently selected upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Select an upload preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Pick one from this list.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">No upload preset available for this format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Add a preset by using the button below.</s:String>-->\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Deleting the Upload Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Are you sure that you want to delete the upload preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected upload preset?</s:String>-->\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">フレームをエクスポート</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">フレームをエクスポートしますか？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">この操作は、{0}個のフレームを選択したフォルダーに直接エクスポートします。</s:String>\n    \n    <!--Command Preview-->\n    <!--<s:String x:Key=\"S.CommandPreviewer.Title\">Command Previewer</s:String>-->\n    <!--<s:String x:Key=\"S.CommandPreviewer.Command\">Command</s:String>-->\n    <s:String x:Key=\"S.CommandPreviewer.Input\">入力ディレクトリ</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">出力ディレクトリ</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">フィードバック</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">送信</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">プレビュー</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">フィードバックを送る</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">タイトル *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">メッセージ *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">バグを発見したら、1操作ずつ客観的に、再現手順を教えてください。(申し訳ありませんが、英語でお願いします)</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">フィードバックの種類</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">提案</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">問題点/バグ</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">メールアドレス (返信希望の場合)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">タイトルを入力する必要があります。</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">メッセージを入力する必要があります。</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">開発者から返信を希望する場合、メールアドレスを入力する必要があります。</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">送信中... このウィンドウはまもなく閉じます。</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">添付ファイル (任意、最大20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">添付を追加</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">すべての添付を削除</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">英語ならわかります。</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">あとポルトガル語も(ブラジル系とヨーロッパ系)</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">これは送信する内容です。これにすべての添付ファイルを加えます。</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">トラブルシュート</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">ウィンドウを見失いましたか？</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">(スクリーン外に)ウィンドウを見失ってしまったら&#10;下にある現在位置と次回開始位置をリセットする機能を使ってください。</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">ウィンドウの現在位置設定はこちらです。</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">次回のウィンドウ開始位置設定はこちらです。</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">メイン画面へ全ウィンドウを移動</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">全ウィンドウの開始位置をリセット</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">標準</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">イタリック体</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">斜体</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">黒(900)</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">太め(700)</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">やや太め(600)</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">極黒(950)</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">極太(800)</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">極細(200)</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">重い(900)</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">軽い(300)</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">中間(500)</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">通常(400)</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">標準(400)</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">やや太め(600)</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">薄い(100)</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">極黒(950)</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">極太(800)</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">極細(200)</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">上</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">中央</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">下</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">ストレッチ</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">左</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">中央</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">右</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">横(水平)</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">縦(垂直)</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">左</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">右</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">中央</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">正当化</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">なし</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">下線</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">取り消し線</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">オーバーライン</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">ベースライン</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.ko.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">확인</s:String>\n    <s:String x:Key=\"S.Back\">뒤로</s:String>\n    <s:String x:Key=\"S.Cancel\">취소</s:String>\n    <s:String x:Key=\"S.Yes\">예</s:String>\n    <s:String x:Key=\"S.No\">아니오</s:String>\n    <s:String x:Key=\"S.Add\">추가</s:String>\n    <s:String x:Key=\"S.Edit\">편집</s:String>\n    <s:String x:Key=\"S.Id\">ID</s:String>\n    <s:String x:Key=\"S.Title\">제목</s:String>\n    <s:String x:Key=\"S.Description\">설명</s:String>\n    <s:String x:Key=\"S.SelectColor\">여기를 눌러 색상을 선택합니다.</s:String>\n    <s:String x:Key=\"S.Suppress\">표시하지 않기</s:String>\n    <s:String x:Key=\"S.Preview\">미리보기</s:String>\n    <s:String x:Key=\"S.Size\">크기</s:String>\n    <s:String x:Key=\"S.Background\">배경</s:String>\n    <s:String x:Key=\"S.Color\">색:</s:String>\n    <s:String x:Key=\"S.Delay\">지연시간</s:String>\n    <s:String x:Key=\"S.DelayMs\">지연시간 (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">증감 값 (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">배율 값 (%):</s:String>\n    <s:String x:Key=\"S.Margin\">바깥 여백:</s:String>\n    <s:String x:Key=\"S.Padding\">안 여백:</s:String>\n    <s:String x:Key=\"S.MinHeight\">최소 높이:</s:String>\n    <!--<s:String x:Key=\"S.AndOr\">and/or</s:String>-->\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">이런, 프로그램이 예기치 않게 종료되었습니다 :(</s:String>\n    <s:String x:Key=\"S.Required\">필수 입력란을 채워주세요.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">추가 요소 존재하지 않음</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">.NET Framework 4.8을 찾을 수 없습니다</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">프로그램을 사용하기 위해, 적절한 버전의 .Net Framework를 다운로드 해야 합니다. &#10;다운로드 페이지를 여시겠습니까?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">한 작업만 수행할 수 있습니다</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">프로그램이 이미 실행 중입니다</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif는 이미 실행중입니다. 그러나 열려있는 창이 없으므로 작업 표시줄의 아이콘을 확인하십시오.</s:String>\n    <s:String x:Key=\"S.Exiting.Title\">ScreenToGif 종료</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">프로그램을 종료하겠습니까?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">모든 창을 닫고 작업 표시줄의 트레이 아이콘을 제거합니다.</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Space\">스페이스</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">새 화면 녹화</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">새 웹캠 녹화</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">새 칠판 녹화</s:String>\n    <s:String x:Key=\"S.Exit\">종료</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">새 화면 녹화 만들기</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">새 웹캠 녹화 만들기</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">새 칠판 녹화 만들기</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">새 프로젝트 만들기</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">화면 녹화 삽입하기</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">웹캠 녹화 삽입하기</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">칠판 녹화 삽입하기</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">이미지나 비디오 삽입하기</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">저장하기</s:String>\n    <s:String x:Key=\"S.Command.Load\">파일 불러오기 (이미지, 비디오, 프로젝트)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">최근 프로젝트 불러오기</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">현재 프로젝트 삭제하기</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">프레임 시간 설정하기</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">프레임 표시 시간 조정</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">프레임 시간 배율로 증감하기</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">확대 100%로 설정하기</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">프레임 크기에 맞게 창 크기 조정하기</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">창에 맞게 이미지 확대 조정하기</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">첫번째 프레임 선택하기</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">이전 프레임 선택하기</s:String>\n    <s:String x:Key=\"S.Command.Play\">프레임 쭉 재생하기</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">다음 프레임 선택하기</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">마지막 프레임 선택하기</s:String>\n    <s:String x:Key=\"S.Command.Undo\">되돌리기</s:String>\n    <s:String x:Key=\"S.Command.Redo\">다시 실행</s:String>\n    <s:String x:Key=\"S.Command.Reset\">모든 변경사항 실행 취소하기</s:String>\n    <s:String x:Key=\"S.Command.Copy\">선택된 프레임을 클립보드에 복사</s:String>\n    <s:String x:Key=\"S.Command.Cut\">선택된 프레임을 클립보드로 잘라내기</s:String>\n    <s:String x:Key=\"S.Command.Paste\">클립보드에서 프레임 붙여넣기</s:String>\n    <s:String x:Key=\"S.Command.Delete\">선택된 프레임 삭제하기</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">앞쪽 프레임 전부 삭제하기</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">뒤쪽 프레임 전부 삭제하기</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">중복 프레임 삭제하기</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">프레임레이트 줄이기</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">역재생으로 만들기</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">정재생 후 역재생하도록 하기</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">선택된 프레임 좌측으로 이동하기</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">선택된 프레임 우측으로 이동하기</s:String>\n    <s:String x:Key=\"S.Command.Resize\">모든 프레임 크기 조정하기</s:String>\n    <s:String x:Key=\"S.Command.Crop\">모든 프레임 자르기</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">프레임 뒤집기/회전하기</s:String>\n    <s:String x:Key=\"S.Command.Caption\">자막 추가하기</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">문자 추가하기</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">제목 프레임 추가하기</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">녹화 중 입력한 키 삽입하거나 편집하기</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">그림 그리기</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">도형 추가하기</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">마우스 클릭</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">워터마크 이미지 추가하기</s:String>\n    <s:String x:Key=\"S.Command.Border\">경계선 추가하기</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">그림자 추가하기</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">프레임의 일부분 모자이크하기</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">그리기 도구를 이용해 프레임의 어느 부분이 움직여야 하는지 선택하세요</s:String>\n    <s:String x:Key=\"S.Command.Progress\">진행도 막대 혹은 문자 추가하기</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">모든 프레임 선택하기</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">프레임 지정해 이동하기</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">프레임 선택 반전하기</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">모든 프레임 선택 해제하기</s:String>\n    <s:String x:Key=\"S.Command.Fade\">페이드 효과 추가하기</s:String>\n    <s:String x:Key=\"S.Command.Slide\">넘기기 효과 추가하기</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">완료된 인코딩들 지우기</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">위로 이동하기</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">아래로 이동하기</s:String>\n    <s:String x:Key=\"S.Command.Add\">추가하기</s:String>\n    <s:String x:Key=\"S.Command.Open\">열기</s:String>\n    <s:String x:Key=\"S.Command.Edit\">선택된 항목 편집하기</s:String>\n    <s:String x:Key=\"S.Command.Save\">선택된 것들 저장하기</s:String>\n    <s:String x:Key=\"S.Command.Remove\">선택된 것들 삭제하기</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - 시작</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">녹화</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">화면을 손쉽게 녹화할 수 있는 화면 녹화기를 시작합니다.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">웹캠</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">웹캠 녹화기를 시작합니다.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">칠판</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">그림 그리는 과정을 녹화할 수 있는 칠판 녹화기를 시작합니다.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">편집기</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">편집기를 시작합니다.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">설정</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">사용 가능한 새 릴리스</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">ScreenToGif의 최신 버전을 다운로드합니다.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">업데이트</s:String>\n    <s:String x:Key=\"S.Updater.Header\">새로운 버전이 있습니다</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">새 버전 출시!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">새 버전 {0}이 출시되었습니다! 여기를 눌러 자세한 내용을 확인하세요.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">버전</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">무설치판</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">설치판</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">새로운 기능</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">버그 수정 목록</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">새로운 버전을 받을 수 있습니다.&#x0d;브라우저를 열어 다운로드할까요?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">업데이트 후 프로그램 시작</s:String>\n    <s:String x:Key=\"S.Updater.Download\">다운로드</s:String>\n    <s:String x:Key=\"S.Updater.Install\">설치</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">수동 설치</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">다운로드 중...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">다운로드 상세 정보를 표시할 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">업데이트에 실패했습니다.</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - 설정</s:String>\n    <s:String x:Key=\"S.Options.App\">프로그램</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">녹화기</s:String>\n    <s:String x:Key=\"S.Options.Editor\">편집기</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">매크로</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">단축키</s:String>\n    <s:String x:Key=\"S.Options.Language\">언어</s:String>\n    <s:String x:Key=\"S.Options.Storage\">임시 파일</s:String>\n    <s:String x:Key=\"S.Options.Extras\">기타</s:String>\n    <s:String x:Key=\"S.Options.Upload\">업로드</s:String>\n    <s:String x:Key=\"S.Options.Donate\">후원</s:String>\n    <s:String x:Key=\"S.Options.About\">정보</s:String>\n    <s:String x:Key=\"S.Options.Other\">기타</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">마우스 따라다니기 단축키가 없습니다</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">마우스 따라다니기 기능을 사용하려면 언제든 키고 끌 수 있도록 단축키를 반드시 설정해야 합니다.</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">화면 녹화에 필요한 추가 요소가 없습니다</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">화면 복제 API를 사용하기 위해선 SharpDx 라이브러리를 받아야 합니다.</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">프로그램 시작</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">수동으로&#10;시작</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">프로그램이 수동으로 실행시킬 때에만 시작됩니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">윈도우 시작 시&#10;자동 시작</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">윈도우가 시작된 후 프로그램이 실행됩니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">자동 시작으로 전환할 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">오직 하나의&#10;프로그램 허용</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">한 유저에 하나의 프로그램만 실행할 수 있습니다.&#10;다른 유저가 사용한다면 여러 프로그램 창을 실행할 수 있습니다.&#10;여러 번 실행하려고 하면, 두 번째 창은 자동으로 꺼지게 됩니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">복수의&#10;프로그램 허용</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">여러 프로그램 창을 제약없이 한번에 사용할 수 있습니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">시스템 트레이에 최소화로 시작.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(시스템 트레이 아이콘은 이 옵션이 체크되었을 때 활성화 됩니다.)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">처음 화면:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">시작 화면</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">화면 녹화기</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">웹캠 녹화기</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">칠판 녹화기</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">편집기</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(프로그램이 처음 시작되었을 때 나오는 화면입니다.)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">프로그램 테마</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">색 설정</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">매우 밝게</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">밝게</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">중간</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">어둡게</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">매우 어둡게</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">사용자 설정</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">색상 예시:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">시스템 트레이 아이콘</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">작업 표시줄에 트레이 아이콘을 표시합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">모든 창이 닫혀 있어도 프로그램을 종료하지 않습니다.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">아무것도 하지 않음</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">창 열기</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">창 없음</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">모든 창 최소화/복구</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">모든 창 최소화</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">열려있던 창 복구</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">좌클릭:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">좌클릭 2회:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">가운데 클릭:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">창:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">아니면, 열기:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">일반</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">할당량 부족 문제를 방지합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(실험적)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">'트레이 > 종료' 버튼으로 프로그램을 닫기 전 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">하드웨어 가속을 비활성화합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(소프트웨어를 이용해 프로그램을 표시합니다)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">번역 업데이트를 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(번역 업데이트가 자동으로 다운로드 되고 설치됩니다)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">업데이트를 자동으로 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">앱이 닫히면 자동으로 업데이트를 설치합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">포터블 버전을 다운로드합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(수동으로 압축 해제 후 프로그램을 옮겨야 합니다)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">관리자 권한으로 업데이트를 실행합니다.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">설치 시작 전 알림</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">인터페이스</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">이전 버전</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">새 버전</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">캡처 빈도</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">수동</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">캡처버튼이나 해당 키보드 단축키를 누르면서, 각 프레임을 수동으로 캡처합니다. </s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">사용자 상호작용</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">클릭이나 타이핑할 때 프레임이 캡처됩니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">초당</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">프레임이 '초당'기준으로 캡처됩니다.&#10;녹화 화면에서 설정된 프레임레이트의 분모값을 따릅니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">분당</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">프레임이 '분당'기준으로 캡처됩니다.(타임랩스)&#10;녹화 화면에서 설정된 프레임레이트의 분모값을 따릅니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">시간당</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">프레임이 '시간당'기준으로 캡처됩니다.(타임랩스)&#10;녹화 화면에서 설정된 프레임레이트의 분모값을 따릅니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">재생 딜레이:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(밀리세컨드 단위로, 각 프레임이 이 딜레이에 맞춰집니다.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">각 프레임이 {0} 간격으로 캡처됩니다.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">녹화 모드</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">오래된 캠처 방법으로, 느리고 게임 캡처에는 부적절할 수 있습니다.&#10;그러나 추가적인 플러그인이 필요 없습니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Desktop Duplication API 캡처 방법으로, 더 빠르고 전체화면 게임을 캡처할 수 있습니다.&#10;그러나 SharpDx 플러그인과 윈도우8 이상이 필요합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">파일로&#10;저장</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">각 프레임이 디스크에 이미지로 직접 저장됩니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">메모리&#10;캐시</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">각 프레임이 메모리에 픽셀 배열로 먼저 저장됩니다.(그 전에 압축될 것입니다.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">압축:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">최적</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(느리나 압축률이 높습니다)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">빠르게</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(빠르나 압축율이 낮습니다)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">압축 없음</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(프레임 녹화 중 압축하지 않습니다)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">캐시 용량:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(MB 단위로, 용량을 채우면, 데이터는 디스크에 써지고 캐시를 비웁니다.)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">완전히 검은 프레임을 캡처하지 않습니다.</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Prevents BitBlt with a memory cache from wrongfully resulting in frames with all pixels as black)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">녹화 중 마우스 커서를 같이 녹화합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">커서의 색을 지정합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">프레임레이트 고정</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(프레임 간격을 일정하게 유지합니다)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Only capture when something changes.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(A frame will only be captured when something is changed within the capture region)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">비동기 녹화를 활성화합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(녹화 중 인터페이스 랙을 줄이는 데 도움이 됩니다)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">안내선</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">3등분 안내선</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">3등분 안내선을 표시합니다</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">크로스헤어</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Click to toggle the display&#10;of a crosshair guideline.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">The guidelines will only be displayed while the recorder is paused or stopped.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">제목 표시줄을 숨깁니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">돋보기를 활성화합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(녹화 영역을 선택할 때 돋보기를 활성화합니다)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animate the screen region border during selection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animate using the 'marching ants' style)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Enable selection panning.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Displays an adorner near the corner of the selection, allowing the movement of the recording area)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compact\">Compact mode.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Shows a smaller version of the recorder command panel)</s:String>    -->\n    <!--<s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Display the discard button also while recording.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normally, it's visible only while paused)</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.RememberSize\">Remember the previous size of the recording area.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">이전 녹화 구역을 저장합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">녹화 시작 카운트다운을 사용합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(화면 녹화를 시작하기 전 대기 시간을 초 단위로 설정합니다)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">마우스 따라다니기를 활성화합니다.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(녹화 영역이 마우스 커서를 따라 재설정됩니다)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(녹화 영역 경계에 이 수치만큼 가까이 마우스 커서가 움직이면 녹화 영역이 움직입니다)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(녹화 영역 경계에 이 수치만큼 가까이 마우스 커서가 움직이면 녹화 UI가 숨겨집니다)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Ask me before discarding the recording.</s:String>-->\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">편집기 배경 설정</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">격자 크기</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">매우 작게</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">작게</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">중간</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">크게</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">매우 크게</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">난 큰 게 좋아!</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">난 장님입니다!</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">사용자 설정</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">높이</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">폭</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">적용</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">베이스 색</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">같은 색</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">다른 색</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">인코딩을 별도 창에 표시합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">제목 표시줄 / 메뉴를 확장합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">프레임 크기에 맞게 창 크기를 자동으로 조정합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">창 크기에 맞게 프레임 크기를 자동으로 조정합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">프레임을 삭제하기 전 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">프로젝트를 삭제하기 전 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">프로젝트가 열려있을 때, 편집기를 닫기 전 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">삼중 클릭으로 텍스트를 선택합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">자막에서 글자 바깥에 외곽선을 그립니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">되돌리기 / 다시 실행 기록에 제한을 설정합니다.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(한도 초과시 오래된 편집 기록부터 삭제됩니다) </s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(저장할 편집 기록의 최대 수)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">매크로</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">매크로 작업 목록</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">작업</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">자세히</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">활성화됨</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">이 작업 활성화</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(작업 선택)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">작업은 위에서 아래로 순서대로 실행합니다.&#10;편집기를 통해 프로젝트를 열었을 때 작업을 실행합니다.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">전역 설정</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">화면 녹화기:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(화면 녹화기를 엽니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">웹캠 녹화기:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(웹캠 녹화기를 엽니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">칠판 녹화기:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(칠판 녹화기를 엽니다. 그림 그리기를 녹화할 수 있습니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">편집기:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(편집기 창을 하나 더 엽니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">설정:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(설정 창을 엽니다. 동시에 한 개의 창만 존재할 수 있습니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">종료:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(모든 창을 닫고 작업 표시줄에서 프로그램 아이콘을 제거합니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">녹화기</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">시작 / 일시정지:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(녹화를 시작하거나 정지합니다. 스냅샷 모드일 땐 스냅샷 찍는 키로 사용됩니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">정지:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(녹화를 정지하고 편집기를 엽니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">취소:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(일시 중지 상태일 때 작업 중인 녹화를 취소합니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">마우스 따라다니기:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(녹화 영역이 마우스 커서를 따라 재설정되는 것을 키고 끕니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">마우스 따라다니기 끄기:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(일시적으로 녹화 영역이 마우스 커서를 따라 재설정되는 것을 끕니다. Ctrl, Alt, Shift 키만 설정할 수 있습니다)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">이곳을 클릭한 뒤 원하는 키와 함께 Ctrl, Alt, Shift 키를 누르세요.&#10;일부 키 조합은 허용되지 않습니다.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">언어</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">자동 감지</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">현재 운영 체제에서 사용 중인 언어</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">ScreenToGif를 번역하고 싶으세요?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">여기를 눌러 번역 지침을 읽고 번역 도구를 다운로드하세요.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">그 후</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">여기를 눌러</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">프로그램으로 번역 파일을 불러와 번역이 제대로 되었는지 확인하세요.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">번역을 끝마쳤다면</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">제 이메일 (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">로 번역 파일을 보내주세요.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">웹 브라우저를 열어 번역 지침 페이지로 이동합니다.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">번역 파일을 불러옵니다.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">이메일 프로그램을 실행합니다.</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">상태</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">볼륨:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{1} 중 {0} 사용 가능</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">남은 공간 새로 고침</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">캐시를 삭제합니다. &#10;최근 프로젝트를 유지할 지 선택할 수 있습니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">하드 디스크의 여유 공간이 부족합니다. 임시 파일을 삭제하거나 폴더 위치를 변경하세요.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">드라이브 정보를 불러올 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">파일 없음</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:N0} 파일</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:N2} 파일</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">폴더 없음</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:N2} 폴더</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:N0} 폴더</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} 사용 중</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">경로</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">캐시:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">임시 파일을 저장할 경로를 선택합니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">로그:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">로그 파일을 저장할 경로를 선택합니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">선택된 폴더 보기</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">설정 파일 경로</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">로컬:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">존재하지 않습니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">빈 설정 파일을 새로 만듭니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">설정 파일을 삭제합니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">설정 파일이 위치한 폴더를 엽니다.&#x0d;Ctrl 키를 누르면서 이곳을 클릭하면 폴더가 아닌 설정 파일 자체를 열 수 있습니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• 설정 파일 불러오기 순서: 기본값 ◄ AppData ◄ 로컬.&#x0d;• 로컬 폴더에 설정 파일이 없다면 AppData 폴더에서 설정 파일을 검색하고, 여기에도 없다면 기본값을 사용합니다.&#x0d;• 로컬 설정 파일이 없다면 AppData 설정 파일에 모든 설정을 저장합니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">오래된 프로젝트를 자동으로 삭제합니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">프로그램을 실행할 때, 설정한 시간 이상으로 오래된 프로젝트를 백그라운드에서 삭제합니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(프로그램을 실행할 때 얼마나 오래된 프로젝트를 제거할지 일 단위로 설정합니다)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - 캐시 삭제</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Header\">Would you like to clear the cache folder?</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">녹화 또는 편집 시 프로젝트가 캐시 폴더에 저장됩니다.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">아래의 프로젝트를 캐시 폴더에서 삭제할까요?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">최근 프로젝트 삭제하지 않음</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Only the projects older than {0} days, that are not currently in use, will be removed)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(All the projects, that are not currently in use, will be removed)</s:String>-->\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">프록시</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">모드:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">비활성화</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">수동</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">시스템</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(시스템 프록시를 사용합니다)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">호스트:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">포트:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">사용자 이름:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">비밀번호:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Get\">OAuth 토큰 발급</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">여기에 인증 토큰을 넣어주세요</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">인증</s:String>\n    <s:String x:Key=\"S.Options.Upload.Refresh\">갱신</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">삭제</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (익명)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">직접 링크를 사용합니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Gif 대신 Gifv 링크를 받습니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">선택한 앨범에 Gif를 업로드합니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">앨범:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">업로드 전에 확인하기</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">Imgur 인증 토큰을 받기 위한 웹 페이지를 확인할 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">이 프로그램을 인증하기 위해 인증 토큰을 제공해야 합니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Imgur 인증을 완료했습니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Imgur 인증에 실패했습니다. 잠시 후 다시 시도하거나 새 토큰을 발급받으세요.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">앱 인증에 실패했습니다</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">토큰이 올바른지 확인하고 인터넷 연결을 점검해보세요</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">이 프로그램에 대한 인증을 갱신하기 위해 먼저 인증 절차를 마쳐야 합니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">인증되지 않았습니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">{0}에 인증이 만료됩니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">{0}까지 인증이 유효합니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Imgur 인증을 제거했습니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">앨범 목록을 불러오는데 실패했습니다.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat (익명)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">OAuth 토큰:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">사이트 선택</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">앨범 지정 (선택)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">필요하다면 목적지 앨범을 선택할 수 있습니다:</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">사용 가능한 외부 도구</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">여기를 눌러 다운로드&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">다운로드 중...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">다운로드 완료&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">여기를 눌러 파일의 속성을 확인합니다.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Store에서 설치한 프로그램은 다른 프로그램을 다운로드할 수 없습니다. 수동으로 다운로드해야 합니다.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg 경로</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">FFmpeg 파일 경로 지정</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg 프로그램</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">FFMpeg 파일의 경로가 유효하지 않은 문자를 포함하고 있습니다. 올바른 위치를 선택해 주세요.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski 위치</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Gifski 파일 경로 지정</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski 라이브러리</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Gifski 파일의 경로가 유효하지 않은 문자를 포함하고 있습니다. 올바른 위치를 선택해 주세요.</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation\">SharpDx 폴더 (SharpDX.dll, SharpDX.Direct3D11.dll, SharpDX.DXGI.dll)</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">SharpDx 라이브러리 위치 선택</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">The path for the SharpDx libraries contains one or more invalid characters. Please, select a valid folder for those libraries.</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg 라이선스</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski 라이선스</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx 라이센스</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">기부</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">미화 달러 기부</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">유로화 기부</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Paypal 웹 사이트를 엽니다. 미화 달러로 선택되어 있습니다.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Paypal 웹 사이트를 엽니다. 유로화로 선택되어 있습니다.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Paypal 웹 사이트를 엽니다. 직접 통화를 선택해야 합니다.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">구독</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">매월 Patreon을 통해 기부합니다.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">매월 Flattr를 통해 기부합니다.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">게임 선물</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Steam으로 게임 선물</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">GOG로 게임 선물</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Ko-fi로 커피 비용 지불</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">암호 화폐</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">BitCoinCash 주소 복사</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">후원</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">프로젝트를 지원하고 싶다면 :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">버전:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">개발자: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store 판. Microsoft Store의 정책을 준수하기 위해 몇몇 기능이 제한되어 있습니다.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">연락처</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">서버 참가</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">페이지 방문</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">채팅방 참가</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">프로젝트 정보</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">소프트웨어 라이선스:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(이 소프트웨어는 무료 소프트웨어입니다.)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">소스 코드 (GitHub):</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">개인정보처리방침</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">도움을 준 사람들</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">피드백 또는 후원으로 저에게 도움을 주신 분들께 깊은 감사를 표합니다.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">번역</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">언어 코드 가져오는 중...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">{0}로 인식됨</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">알 수 없음</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">맨 밑의 언어 파일을 사용합니다.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">사용자 지정 언어 파일을 적용하려면 맨 밑으로 이동시키십시오.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">리소스 내보내는 중...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">리소스 사전 저장</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">리소스 사전 열기</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">리소스 사전</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">리소스 불러오는 중...</s:String>\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">StringResources.en.xaml과 같이 저장하되, en을 대상 언어 코드로 교체하세요.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">같은 이름을 가진 리소스를 추가할 수 없습니다</s:String>\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">불필요한 언어 코드</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">\"{0}\" 코드는 불필요합니다. \"{1}\"을 대신 사용해 보세요.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">알 수 없는 언어</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" 또는 기타 하위 항목은 올바르지 않은 언어 코드입니다.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">녹화</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">일시정지</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">이어서 녹화</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">정지</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">취소</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">크기</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">높이</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">폭</s:String>\n    <!--<s:String x:Key=\"S.Recorder.CursorFollowing\">Cursor following is enabled.</s:String>-->\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <s:String x:Key=\"S.Recorder.Manual.Short\">수동</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">상호 작용</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">최대 초당 프레임 수</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fpm\">최대 분당 프레임 수</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.SnapToWindow\">창 맞춤(끌어서 창에 놓으세요)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">타이머</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (일시 정지)</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>-->\n    <s:String x:Key=\"S.Recorder.PreStarting\">미리 시작 중...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">화면을 캡처할 수 없습니다</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">It was not possible to capture the screen. The capture method returned no frame after 5 tries.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">It was not possible to start/pause capturing the screen</s:String>-->\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">화면 복제 API를 사용하기 위해선 Windows 8 이상을 필요로 합니다</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">화면 복제 API를 사용하기 위해선 SharpDx 라이브러리가 필요합니다. 옵션 > 기타에서 다운로드하세요.</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">사각형</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Area.Select\">Select an area</s:String>-->\n    <s:String x:Key=\"S.Recorder.Window\">창</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">창 선택</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">전체 화면</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">화면 선택</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">내장 화면</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Generic screen</s:String>-->\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">그래픽 어댑터: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">해상도: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">원본 해상도: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">끌어서 선택을 이동합니다.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">확인</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">다시실행</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">우클릭</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">선택 취소 (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">클릭 후 드래그하여 녹화할 구역을 선택하세요.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">클릭 후 드래그하여 녹화할 구역 선택하기</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">이 창 선택하기</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">이 화면 선택하기</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">ESC를 눌러 취소</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Splash.Title\">Press {0} to stop the recording</s:String>-->\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">녹화 메뉴가 최소화됩니다.&#10;되돌리거나 {0}을 눌러 녹화를 중지합니다</s:String>\n    \n    <!--<s:String x:Key=\"S.Recorder.Discard.Title\">Discard recording</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Discard.Instruction\">Are you sure that you want to discard the recording?</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Discard.Message\">This action will discard the recording, removing all frames.&#x0d;You can't undo this operation.</s:String>-->\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - 웹캠 녹화기</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">인식된 장치가 없습니다 :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">비디오 장치 목록 새로고침</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">배율: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">비디오 배율 변경하기</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - 칠판 녹화기</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">자동 녹화</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">그릴 때 자동으로 녹화합니다.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [누르기]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">색 선택기</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">색을 선택하세요</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">빨강</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">초록</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">파랑</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">알파</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">기존 색</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">현재 색</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">선택 색</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">드래그하여&#x0d;색 스포이드</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">화면에서 색상을 선택해&#x0d;뽑아내려면 드래그하세요.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">예외 발생</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">내부 예외 열기</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">예외 타입</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">메시지</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">스택</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">소스</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">오류가 발생했습니다.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">보고서 전송</s:String>\n\n    <!--FFmpeg preset-->\n    <s:String x:Key=\"S.FfmpegPreset.Title\">FFmpeg 프리셋</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Name\">이름</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Parameters\">파라미터</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">두 번 처리하길 원하면 명령어에 '-pass 2'를 추가해주세요.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Name\">이름을 입력해야 합니다.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">파라미터를 입력해야 합니다.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">똑같은 이름의 프리셋이 이미 있습니다.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">프레임 삽입</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">양쪽이 똑같은 크기여야 합니다. 클릭하여 이미지와 캔버스의 위치와 크기를 조정하세요.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">캔버스 크기:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">캔버스 크기를 이미지에 맞추기</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">양쪽 이미지에 맞도록 캔버스 크기를 조정합니다 (왼위쪽 기준).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">프레임 크기가 다릅니다. 프레임을 삽입하기 전에 변경하십시오.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">삽입될 프레임</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">현재 프레임</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">이미지 크기:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">이미지 위치:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">이미지 크기&#x0d;및 위치 초기화</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">기존 프레임 기준 새 프레임이 삽입될 위치:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">프레임 앞에</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">프레임 뒤에</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">프레임</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">불러오는 중</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">배경색 채우기</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">비디오에서 프레임 불러오기</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Importer\">Importer:</s:String>-->\n    <s:String x:Key=\"S.ImportVideo.Loading\">로드 중...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">배율:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">크기:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">높이:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">폭:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">프레임레이트:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">시작:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">끝:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">선택됨:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">프레임:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">길이:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">비디오를 불러오지 못 했습니다.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">미리 보기를 시작할 수 없습니다. </s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">다음 프레임 미리보기를 불러오는 중 시간을 초과하였습니다.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">불러올 프레임이 선택되지 않았습니다.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">인코더</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">인코딩 중...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">시작하는 중</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">완료</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">클립보드에 복사됨</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">클립보드에 복사 실패</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">명령어 실행됨</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">명령어 출력 보기</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">명령어 실행 실패</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">업로드 실패</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + 클릭하여 이미지 삭제 페이지 열기 (가능할 시)</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">경과 시간 (분):</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">분석:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">인코딩:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">업로드:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">복사:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">명령어:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">존재하지 않거나 이동된 파일</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">취소됨</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">에러</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">이 오류의 세부 정보를 표시하려면 여기를 클릭하십시오.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">업로딩 중</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">명령어 실행 중</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">처리 중 {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">두 번째 확인 준비 중</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">두 번째 처리 중 {0}</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">파일 생성 중</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">중복 픽셀 분석중</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">분석 결과 저장 중</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">파일 열기</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">폴더 탐색</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">기록 삭제</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">세부사항 보기</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">완료된 인코딩 무시</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">이미지 복사</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">파일명 복사</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">폴더 경로 복사</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">링크 복사</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - 명령어 출력</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">명령어 출력</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">알림</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">모든 알림 삭제</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - 편집기</s:String>\n    <s:String x:Key=\"S.Editor.File\">파일</s:String>\n    <s:String x:Key=\"S.Editor.Home\">홈 화면</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">재생</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">편집</s:String>\n    <s:String x:Key=\"S.Editor.Image\">이미지</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">전환 효과</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">통계</s:String>\n    <s:String x:Key=\"S.Editor.Options\">설정</s:String>\n    <s:String x:Key=\"S.Editor.Help\">도움말</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">더 보기</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">새 버전이 있습니다</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">자세한 정보는 여길 클릭하세요</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">총 프레임 수, 선택한 프레임 수, 선택한 프레임 위치</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">프레임 준비 중</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">한번에 여러 파일을 불러올 수 없습니다. 하나만 선택하세요.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">한번에 여러 프로젝트를 불러올 수 없습니다. 하나만 선택하세요.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">미디어 파일 열기 (사진이나 동영상)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">미디어 파일 (사진이나 동영상) 이나 프로젝트 파일 열기</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">지원하는 파일 모두</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">이미지</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">영상</s:String>\n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif 프로젝트</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif 애니메이션</s:String>\n    <s:String x:Key=\"S.Editor.File.Apng\">움직이는 PNG</s:String>\n    <s:String x:Key=\"S.Editor.File.Avi\">Avi 영상</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">마트료시카 영상</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 영상</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm 영상</s:String>\n    <s:String x:Key=\"S.Editor.File.Wmv\">Windows media 영상</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">압축 파일 (Zip), 선택된 이미지 모두</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png 이미지, 선택된 이미지 모두</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">압축된 (Zip) ScreenToGif 프로젝트</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd 파일</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">\"파일 > 새로 만들기\"에서 새 녹화를 시작하세요</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">이미지, 비디오, 프로젝트를 드래그 앤 드롭으로 불러오세요</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">이 프로그램을 사용해주셔서 감사합니다!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">프레임레이트가 낮을수록, 색상과 프레임 수가 적을수록 용량은 작아집니다</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">개발자한테 전할 말이 있나요? \"설정 > 정보\" 에서 연락처를 확인하세요</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">문제가 있나요? 피드백을 통해 연락해주세요</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">새 녹화 UI를 시도해보고 싶나요? \"설정 > 녹화기\" 에서 활성화할 수 있습니다</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">녹화</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">웹캠&#x0d;녹화</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">칠판&#x0d;녹화</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">빈&#x0d;프로젝트</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">새로 만들기</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">녹화</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">웹캠&#x0d;녹화</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">칠판&#x0d;녹화</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">파일&#x0d;불러오기</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">삽입</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">저장</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">파일&#x0d;불러오기</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">최근&#x0d;프로젝트</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">프로젝트&#x0d;로 저장</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">프로젝트&#x0d;삭제</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">작업 내역</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">실행 취소</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">다시 실행</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">초기화</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">클립보드</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">클립보드 확인</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">붙여넣기</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">잘라내기</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">복사</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">확대 / 축소</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">프레임에 맞게&#x0d;창 조절</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">창에 맞게 조정</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">선택</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">모두&#x0d;선택</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">프레임으로&#x0d;이동</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">선택 반전</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">선택 해제</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">재생</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">맨 처음으로</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">이전 프레임</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">재생</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">일시정지</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">다음 프레임</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">맨 마지막으로</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">재생 옵션</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">재생 중 반복하기</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">프로그램에서 재생할 때 반복합니다.&#x0d;저장될 GIF나 Apng의 반복 여부를 바꿀려면&#x0d;저장 패널에서 설정할 수 있습니다.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">프레임</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">현재 프레임&#x0d;삭제</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">중복 프레임&#x0d;삭제</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">프레임레이트&#x0d;줄이기</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">앞쪽 프레임 전부 삭제</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">뒤쪽 프레임 전부 삭제</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">이동</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">역재생</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">역재생 프레임 뒤에 추가</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">좌측으로&#x0d;이동</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">우측으로&#x0d;이동</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">프레임 지연시간</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">설정</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">증감</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">배율</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">사이즈 및 위치</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">사이즈</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">자르기</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">뒤집기/회전</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">문자</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">자막</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">문자 추가</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">제목 프레임 추가</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">입력한&#x0d;키 표시</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">오버레이</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">그리기</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">도형</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">마우스&#x0d;클릭</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">워터마크</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">시네마그래프</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">경계선</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">그림자</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">진행도</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">모자이크</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">화면 전환</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">페이드</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">넘기기</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">일반</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">프레임 수</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">총 길이</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">프레임 크기</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">평균 프레임 길이</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">현재 시간</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">현재 프레임까지 프레임 시간의 총합입니다.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">프레임 DPI / 배율</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">선택한 프레임 길이</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">잘라내기</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">모든 프레임을 잘라낼 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">적어도 한 프레임 이상 남아있어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">모두 지우기</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">모든 프레임을 지우겠습니까?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">현재 프로젝트를 삭제합니다. 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">모두 제거</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">모든 프레임을 삭제합니까?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">모든 프레임을 삭제합니다.&#x0d;이 작업은 되돌릴 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">이전 프로젝트를 삭제하겠습니까?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">삭제하지 않는다면 이전 프로젝트는 '최근 프로젝트'에서 다시 열 수 있습니다.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">프레임 삭제</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">프레임을 삭제하겠습니까?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">{0} 프레임을 삭제합니다.&#x0d;이 작업은 나중에 되돌릴 수 있습니다.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">프로그램 종료</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">프로그램을 종료하겠습니까?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">현재 작업 중인 프로젝트는 '최근 프로젝트'를 통해 다시 열 수 있습니다.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">현재 작업 중인 프로젝트는 '최근 프로젝트'를 통해 다시 열 수 있습니다. 하지만 며칠 후 자동으로 삭제되는 점을 참고하세요.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">올바르지 않은 드래그 앤 드랍</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">여러 파일을 한번에 불러올 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">한번에 한 개의 파일만 불러오세요.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">파일 열기 불가</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">지원하지 않는 형식의 파일입니다.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">여러 프로젝트를 한번에 불러올 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">한번에 한 개의 프로젝트만 불러오세요.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">적용될 문자가 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">자막을 적용할 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">문자를 적용할 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">제목 프레임 앞에 설정될 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">적어도 한 면의 모서리 굵기가 1 이상이여야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">모서리를 적용할 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">그림자 효과를 만들기 위해선 투명도가 0보다 커야합니다.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">그림자 깊이와 흐림반경을 0으로 설정하면 아무 그림자도 생기지 않습니다.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">시네마그래프를 적용할 픽셀이 하나 이상 선택되어야 합니다. 마우스로 그려서 선택하십시오.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">페이드 효과</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">페이드 효과가 적용될 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">투명 색은 페이드 효과를 생성할 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">넘기기 효과</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">넘기기 효과가 적용될 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">프레임 로드중</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">프로젝트를 불러올 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">모든 프레임이 손상됐거나 기존 위치에서 찾을 수 없어 열 수 없었습니다.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">몇몇 프레임이 로드되지 않았습니다.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">프레임을 찾을 수 없거나 손상되어 열 수 없었습니다.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">오버레이를 적용할 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg가 존재하지 않습니다. 이 메시지를 클릭하여 '설정 > 기타' 에서 경로를 지정하십시오.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski가 존재하지 않습니다. 이 메시지를 클릭하여 '설정 > 기타' 에서 경로를 지정하십시오.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">이 프로그램이 임시 파일을 저장하는 드라이브에 충분한 공간이 없습니다 ({0}% 남음). 이 메시지를 클릭하여 '설정 > 임시 파일' 에서 공간을 확보하십시오.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">서로 다른 DPI를 가진 이미지를 불러오는 것은 지원하지 않습니다. 이미지 일부만 불러왔으며 나머지는 별도로 불러와야 합니다.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">캐시에서 프레임 불러오는 중</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">프레임 업데이트중</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">불러오기 준비 중</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">프레임 불러오는 중</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">중복 프레임 분석 중</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">지연시간 조정 중</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">중복 프레임 제거 중</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">프레임 삭제 중</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">폴더 삭제 중</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">프레임 크기 조정 중</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">프레임 자르는 중</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">프레임에 오버레이 적용 중</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">제목 프레임 생성 중</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">뒤집기/회전 적용 중</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">프레임 지연시간 변경 중</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">화면 전환 효과 적용 중</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">저장 준비 중</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">로딩을 취소하고 프로젝트를 저장하지 않습니다</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">프레임:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">이미지 열기</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">폴더 열기</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">이미지 내보내기</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">프레임 찾기</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">이동할 프레임을 지정하십시오 (0 to {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">저장</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">선택된 프레임 삭제</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">새 녹화</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">새 웹캠 녹화</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">새 칠판 녹화</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">새 빈 프로젝트</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">새 파일 불러오기</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">새 녹화 생성됨</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">새 웹캠 녹화 생성됨</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">새 칠판 녹화 생성됨</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">새 프로젝트 생성됨</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">되돌리기</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">실행 초기화</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">다시 실행</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} 프레임 잘라내기됨</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} 프레임 복사됨</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} 프레임 붙여넣기됨</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">확대/축소 {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">모든 프레임 선택됨</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">#{0}번째 프레임 선택됨</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">선택 반전됨</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">모든 프레임 선택 해제됨</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} 프레임 삭제됨</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">프레임 역순됨</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">적용 효과 되돌리기</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">프레임 왼쪽으로 이동됨</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">프레임 오른쪽으로 이동됨</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">프레임 크기 조정됨</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">프레임 자르기됨</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">프레임 뒤집기/회전됨</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">뒤집기 작업은 선택된 프레임에, 회전 작업은 모든 프레임에 적용됩니다</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">이 작업은 모든 프레임에 적용됩니다</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">이 작업은 선택된 프레임에 적용됩니다</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">이 작업은 사용자 설정에 따라 모든 혹은 선택된 프레임에 적용됩니다</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">시네마그래프는 첫 프레임을 기준으로 모든 프레임에 적용됩니다</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">워터마크 적용됨</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">제목 프레임 생성됨</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">선택된 프레임 앞에 제목 프레임이 삽입됩니다</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">프레임 지연시간 변경됨</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">전환 효과 추가됨</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">프레임레이트 줄여짐</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">중복 프레임 삭제됨</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">숨기기</s:String>\n    <s:String x:Key=\"S.Action.Apply\">적용</s:String>\n    <s:String x:Key=\"S.Action.Open\">열기</s:String>\n    <s:String x:Key=\"S.Action.Save\">저장</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">취소</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">최근 프로젝트</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">최근 프로젝트 탐색 중...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">생성일</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">프레임 숫자</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">프로젝트가 선택되지 않았습니다. 로드할 프로젝트를 선택하세요.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">이미 같은 프로젝트가 열려 있습니다.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">이 프로젝트는 이미 다른 편집기에서 작업중인 프로젝트입니다. 다른 편집기에서 이미 열려있는 경우 프로젝트를 열 수 없습니다.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">클립보드 항목</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">클립보드 항목:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">이미지 {0}장</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">이미지 {0}장</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">항목 확인</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">클립보드에서 삭제</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">붙여넣을 위치</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">선택된 프레임 앞</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">선택된 프레임 뒤</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">현재 설정</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">새 설정</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">비율 유지.</s:String>\n    <s:String x:Key=\"S.Resize.Options\">설정</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">스케일링 품질:</s:String>\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant (higher quality)</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear (lower quality)</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nearest neighbor (lower quality and faster)</s:String>-->\n    <s:String x:Key=\"S.Resize.Warning\">사이즈 조정을 위해선 다른 값을 입력해야 합니다.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">크기</s:String>\n    <s:String x:Key=\"S.Crop.Top\">상:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">좌:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">하:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">우:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">자를 부분이 현재 프레임 사이즈보다 크게 설정될 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">자를 부분이 10x10 픽셀보다 커야합니다.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">좌우 반전</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">상하 반전</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">좌측 90º 회전</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">우측 90º 회전</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">프레임레이트 줄이기</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">건너뛸 수:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">제거할 수:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">딜레이 조정:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">조정하지 않음</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>-->\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">프로젝트 전체의 프레임율 줄이기</s:String>\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>-->\n    <s:String x:Key=\"S.Reduce.Info\">매 {1} 프레임 후에 {0} 프레임을 삭제합니다.</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>-->\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">중복 프레임 삭제</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">유사도 (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">삭제할 프레임:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">앞 프레임 삭제</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">뒤 프레임 삭제</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">지연시간 조정</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">조정 안 함</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">중복 프레임의 평균값 사용</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">중복 프레임의 총합 사용</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">각 프레임을 픽셀 단위로 분석하여 이웃한 프레임과 {0} % 유사한 프레임을 삭제합니다.&#x0d;프레임 지연시간을 조정할 수 있습니다.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">문자</s:String>\n    <s:String x:Key=\"S.Caption.Font\">글꼴</s:String>\n    <s:String x:Key=\"S.Caption.Family\">글꼴:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">글꼴 스타일:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">굵기:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">크기:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">색상:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">배경색:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">외곽선</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">두께:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">위치 설정</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">수직:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">수평:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">입력한 키</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">키</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">입력한 키 구분:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">입력한 키 수정하기</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">다른 키와 조합되지 않은 Ctrl, Alt, Shift, Windows 키 무시하기</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">예를 들어 \"Ctrl\"을 단독으로 누른 것은 무시하지만, \"Ctrl + C\"는 무시하지 않습니다.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">입력한 키 표시 지속하기</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">입력한 키 미리 표시하기</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">밀리초 (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">녹화본에 입력한 키가 없습니다</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - 입력한 키 편집기</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">프레임 번호</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">인식된 입력한 키</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">입력한 키 삭제하기</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">입력한 키 추가:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">소문자로 추가하기.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">키 하나를 입력할 때 소문자로 추가합니다.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">도구</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">펜</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">지우개</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">선택</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">단계 지우개</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">폭:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">높이:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">촉 모양:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">사각형</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">타원</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">기타:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">형광펜</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">곡선 보정</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">적용될 그림이 없습니다.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">그림을 적용할 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">삽입</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">도형</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">반지름:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">점선:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controls the size of the dashes and the size of the gaps.&#10;You can set multiple sizes to create an elaborate dash style.&#10;The default is \"1 0\" or empty, meaning a dash with no gaps.</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">제거</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">채우기</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">마우스 클릭</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">프로젝트에 인식된 마우스 클릭이 없습니다.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">이미지</s:String>\n    <s:String x:Key=\"S.Watermark.File\">파일:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">선택되지 않음</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">투명도:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">이미지 선택</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">선택된 프레임에 적용될 이미지를 선택해야 합니다.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">워터마크를 적용할 프레임이 하나 이상 선택되어야 합니다.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">설정</s:String>\n    <s:String x:Key=\"S.Border.Info\">이미지 밖으로 경계선을 확장하려면 음수를 사용하세요. 이 경우 경계선은 모든 프레임에 적용됩니다.&#x0d;양수를 사용한다면 경계선은 선택된 프레임에만 적용됩니다.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">그림자 색:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">배경 색:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">방향:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">흐림 반경:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">깊이:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">모자이크</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">블러</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">어둡게 하기</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">밝게 하기</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">모자이크 옵션</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">픽셀 크기:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">블러 세기:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">어두움 정도:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">밝음 정도:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">모자이크할 부분의 평균색을 계산하기</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">선택하지 않은 부분을 편집합니다.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">부드럽게</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">모자이크할 부분을 선택하세요.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">선택 도구를 이용해 편집하지 않을 부분을 선택합니다.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">선택된 부분이 없습니다. 모자이크할 부분을 선택해주세요.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">종류</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">막대</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">문자</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">표시 단위:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">분</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">초</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">밀리초</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">백분율</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">프레임 숫자</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">실제 날짜/시간</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">사용자 설정</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">전체시간 표시</s:String>\n    <s:String x:Key=\"S.Progress.Format\">형식:</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = 밀리초</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = 초</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = 분</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = 백분율</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = 프레임 번호</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">총:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">예시:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">.NET Framework의 날짜/시간 형식을 사용할 수 있습니다.&#x0d;자세한 설명은 밑의 두 링크를 참고하세요.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">표준 형식</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">사용자 지정 형식</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">시작 숫자:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">프레임 숫자를 이 숫자부터 시작해 매깁니다.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">방향:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">지연시간 변경</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">프레임 지연시간 모드:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">설정 (ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">증감 (ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">배율 (%)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">새 지연시간</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">프레임 길이는 10ms 이하일 수 없습니다.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">증가/감소 값</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">백분율 값</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">설정한 값을 선택된 프레임의 지연시간으로 설정합니다.&#x0d;새 지연시간은 10ms ~ 25500ms 사이여야 합니다.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">설정한 값만큼 선택된 프레임의 지연시간을 증감합니다.&#x0d;-10000ms ~ 10000ms까지 값을 설정할 수 있지만, 증감 후 지연시간은 10ms ~ 25500ms 사이여야 합니다.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">선택된 프레임의 지연시간을 설정된 배율로 조정합니다.&#x0d;1% ~ 1000%까지 값을 설정할 수 있지만, 조정 후 지연시간은 10ms ~ 25500ms 사이여야 합니다.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">프레임간 움직여야할 부분만을 펜으로 그려 선택하세요.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">효과 길이</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">전환 효과 지연시간</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">페이드 효과 대상</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">다음 프레임</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">색상</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">색상</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">전환 효과는 선택된 프레임과 다음 프레임 사이에 적용됩니다.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">파일 종류</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">이미지 (프레임)</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">프로젝트</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">비디오</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">인코더</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Tooltip\">Octree 알고리즘 사용</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">시스템</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">기본 팔레트 사용</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng\">1.0</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">ScreenToGif가 개발한 인코더</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif 설정</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">색상 축소 (양자화)</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">신경망</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">고품질 양자화. 느리나 다양한 색에 적합합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">색이 다양하지 않은 애니메이션에 적합하나, 색이 층으로 나뉘어 보일 수 있습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">중간점 자르기</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">느리고 Octree보다 덜 좋음 </s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">흑백</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">고정된 흑백 팔레트를 사용하여 매우 빠릅니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">가장 많이 사용된 색</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">프레임에서 가장 많이 사용된 색을 선택합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">샘플링:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">샘플링 비율:%#10; 1로 지정시 Gif의 품질이 좋아지나 렌더 속도가 느려질 수 있습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">품질:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">최대 색상:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">각 프레임당 최대 색상의 수</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">반복:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">반복 사용</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">계속 반복</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">회 반복</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">투명도 활성화</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">완전 투명 모드를 활성화합니다. Gif의 배경을 완전히 투명하게 합니다. 활성화 시 크로마 키 교체 과정을 건너뜁니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">투명으로 표시할 색 지정</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">색상이 선택되었을 경우 투명으로 변환되며, 생성된 Gif에 투명으로 나타납니다. 선택되지 않았을 경우 모든 투명 색 (알파 0%)이 정상적으로 투명하게 나타납니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">중복 픽셀 감지</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">다음 픽셀을 크로마 키로 교체합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">반복되거나 바뀌지 않은 픽셀을 크로마 키로 대체하여&#10;프레임 당 색상을 줄입니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">크로마 키:</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng 설정</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">반복 사용</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">중복 픽셀 감지</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">중복 픽셀을 투명 색으로 표시</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">비디오 설정</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">Fps:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">수직으로 비디오 뒤집기.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">이미지 설정</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">파일 압축하기</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions\">Psd 설정</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">이미지 압축하기</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">RLE 알고리즘을 사용하여 이미지 데이터를 압축합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">타임라인 데이터 저장하기</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">프레임뿐만 아니라 프레임 지연시간까지 같이 내보냅니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.ProjectOptions\">프로젝트 설정</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">기타:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets\">프리셋:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">기본</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">추가</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">저장</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">수정</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">삭제</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">프리셋 삭제</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">프리셋을 삭제하겠습니까?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">이 작업은 되돌릴 수 없습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">초기화</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">프리셋 초기화</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">프리셋의 파라미터를 기본값으로 초기화하겠습니까?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">이 작업은 되돌릴 수 없습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">FFmpeg 프리셋이 선택되지 않았습니다.</s:String>\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">저장 옵션</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">지정 경로에 파일 저장하기</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">파일 덮어쓰기 (이미 존재할 경우)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">프로젝트도 저장하기 (동일 경로, 동일 이름으로)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">파일 업로드하기</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">업로드 사이트</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">클립보드에 복사하기</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">파일</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">저장된 파일을 클립보드에 복사합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">폴더 경로</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">저장 폴더 경로를 클립보드에 복사합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">파일 경로</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">저장된 파일 경로를 클립보드에 복사합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">링크</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">업로드된 파일의 링크를 클립보드에 복사합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">인코딩 후 명령어 실행</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">인코딩 후 실행될 명령어를 입력하세요.&#x0d;다수의 명령어를 실행하려면 한 줄에 하나의 명령어를 입력하세요.&#x0d;사전 정의된 변수:&#x0d;{p} = 저장된 파일 경로.&#x0d;{f} = 저장 폴더 경로.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">파일</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">저장 경로.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">경로를 선택하십시오.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">파일 형식</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">저장될 파일 이름.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">애니메이션</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">파일 번호 증가</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">파일 번호 감소</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">같은 이름을 가진 파일이 이미 존재합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">클립보드에 저장합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">어디에 파일을 저장할지 설정해야 합니다. (폴더, 클립보드, 업로드 등)</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">인코딩 후 명령어를 실행하려면 명령어 창을 채워야합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">업로드 사이트가 설정되지 않았습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">인증키가 없어 이 사이트에 업로드를 할 수 없습니다. '설정 > 업로드'에서 이 프로그램을 인증하십시오.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">파일 업로드를 설정하지 않았으므로 링크 복사 옵션을 설정할 수 없습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">저장 경로를 설정해야 합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">선택한 저장 경로가 존재하지 않습니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">출력 폴더 이름에 올바르지 않은 문자가 포함되어 있습니다. 올바른 이름을 설정해주세요.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">파일 이름을 설정해야 합니다.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">출력 파일 이름에 올바르지 않은 문자가 포함되어 있습니다. 올바른 이름을 설정해주세요.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">이미 사용 중인 이름입니다. 덮어쓰기 옵션을 설정하거나 다른 이름으로 설정하세요.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">작업 취소됨</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">프레임 내보내기</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">이 프레임을 내보내겠습니까?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">{0} 프레임을 선택 폴더에 내보냅니다.</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">피드백</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">전송</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">미리보기</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">피드백 내용 보내기</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">제목 *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">내용 *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">버그가 있다면, 버그를 재현할 수 있는 방법을 단계별로 알려주세요.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">피드백 종류</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">제안</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">버그/문제</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">이메일 (선택)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">피드백의 제목을 입력해주세요.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">피드백의 내용을 입력해주세요.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">답장을 위해 이메일 주소가 필요합니다.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">보내는 중... 끝난 후 창이 닫힙니다.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">첨부 파일 선택 (최대 20MB까지)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">파일 첨부</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">첨부 파일 모두 삭제</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">저는 영어와</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">포르투갈어를 이해할 수 있습니다</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">보내질 피드백 내용입니다 (첨부파일 포함)</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">문제 해결</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">창이 사라졌습니까?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">만약 어떤 창이 사라지거나 화면 밖으로 나갔다면,&#x0d;밑의 옵션을 사용하여 현재 위치와 시작 위치를 초기화세요.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">각 창이 현재 위치한 곳:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">각 창이 다음에 열릴 위치:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">모든 창을 주 화면으로 옮기기</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">모든 창의 시작 위치를 초기화</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">보통</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">이탤릭체</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">기울임</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">검정</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">굵게</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">약간 굵게</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">매우 검정</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">매우 굵게</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">매우 가늘게</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">검정</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">가늘게</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">중간</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">보통</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">보통</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">약간 굵게</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">가장 가늘게</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">가장 검정</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">매우 굵게</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">매우 가늘게</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">위쪽</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">가운데</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">아래쪽</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">늘리기</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">왼쪽</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">가운데</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">오른쪽</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">수평</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">수직</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.nl.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">OK</s:String>\n    <s:String x:Key=\"S.Back\">Terug</s:String>\n    <s:String x:Key=\"S.Cancel\">Annuleren</s:String>\n    <s:String x:Key=\"S.Yes\">Ja</s:String>\n    <s:String x:Key=\"S.No\">Nee</s:String>\n    <s:String x:Key=\"S.Add\">Toevoegen</s:String>\n    <s:String x:Key=\"S.Edit\">Bewerken</s:String>\n    <s:String x:Key=\"S.Id\">ID</s:String>\n    <s:String x:Key=\"S.Title\">Titel</s:String>\n    <s:String x:Key=\"S.Description\">Omschrijving</s:String>\n    <s:String x:Key=\"S.SelectColor\">Klik hier om de kleur te kiezen.</s:String>\n    <s:String x:Key=\"S.Documentation\">Klik om naar de documentatie te gaan.</s:String>\n    <s:String x:Key=\"S.Suppress\">Onderdrukken</s:String>\n    <s:String x:Key=\"S.Preview\">Voorvertoning</s:String>\n    <s:String x:Key=\"S.Size\">Grootte</s:String>\n    <s:String x:Key=\"S.Background\">Achtergrond</s:String>\n    <s:String x:Key=\"S.Color\">Kleur:</s:String>\n    <s:String x:Key=\"S.Delay\">Vertraging</s:String>\n    <s:String x:Key=\"S.DelayMs\">Vertraging (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Waarde -+ (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Schaal:</s:String>\n    <s:String x:Key=\"S.Margin\">Marge:</s:String>\n    <s:String x:Key=\"S.Padding\">Randvulling:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Min. hoogte:</s:String>\n    <s:String x:Key=\"S.AndOr\">en/of</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">O nee, het programma is vastgelopen :(</s:String>\n    <s:String x:Key=\"S.Required\">Verplicht veld.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Ontbrekende afhankelijkheid</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 is niet aangetroffen</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Om deze app correct te gebruiken, moet je de juiste versie van .Net Framework downloaden.&#10;Wilt u de webpagina openen om deze te downloaden?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Slechts één instantie toegestaan</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">De app is al actief</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif draait al, maar blijkbaar zonder venster geopend. Controleer het systeemvak, er moet een ScreenToGif-pictogram zijn.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Instellingen opslaan</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Wil je het opnieuw proberen op te slaan?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Het lijkt erop dat ScreenToGif niet genoeg rechten heeft om de instellingen op de schijf op te slaan.&#10;&#10; Wil je het opnieuw proberen, maar deze keer met beheerdersrechten?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">ScreenToGif afsluiten</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Weet je zeker dat je wilt afsluiten?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Alle vensters worden gesloten en het pictogram wordt van de taakbalk verwijderd.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Grafische adapter wisselen</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Schakel over naar de juiste grafische adapter om het geselecteerde scherm vast te leggen</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Vanwege een beperking in DirectX moet ScreenToGif worden uitgevoerd op dezelfde grafische adapter als het scherm dat wordt vastgelegd.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Verander de grafische adapter set voor ScreenToGif door Windows Instellingen> Systeem> Beeldscherm> Grafische instellingen te openen, of door op de onderstaande link te klikken.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Verwissel de grafische adapter voor ScreenToGif door de grafische instellingen van uw grafische adapter te openen.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Windows Instellingen openen</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Spatie</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Rechtermuisklik</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nieuwe Schermopname</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nieuwe Webcam-opname</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nieuwe Whiteboard-opname</s:String>\n    <s:String x:Key=\"S.Exit\">Afsluiten</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nieuwe schermopname</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nieuwe webcam-opname</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nieuwe whiteboard-opname</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nieuwe animatie</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Schermopname invoegen</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Webcam-opname invoegen</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Whiteboard-opname invoegen</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Invoegen vanaf media (afbeeldingen en video's)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Opslaan als...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Bestanden laden (afbeeldingen, video's en projecten)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Recente projecten laden</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Gooi het huidige project weg</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Framevertraging overschrijven</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Vertraging van frames vergroten/verkleinen</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Vertraging van frames schalen</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">100% zoom instellen</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Pas het venster aan de framegrootte aan</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Afbeelding aanpassen aan de beschikbare venstergrootte</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Selecteer het eerste frame</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Selecteer het vorige frame</s:String>\n    <s:String x:Key=\"S.Command.Play\">Animatie afspelen</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Selecteer het volgende frame</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Selecteer het laatste frame</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Ongedaan maken</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Opnieuw</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Maak alle wijzigingen in het project ongedaan</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Kopieer de geselecteerde frames en sla ze op het klembord op</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Knip de geselecteerde frames en bewaar ze op het klembord</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Plak de frames van het klembord</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Alle geselecteerde frames verwijderen</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Alle voorgaande frames verwijderen</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Alle volgende frames verwijderen</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Duplicaten verwijderen</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Verminder het aantal frames</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Een vloeiende lus aanmaken</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Animatie omkeren</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Laat de animatie vooruit en achteruit gaan</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Verplaats het geselecteerde frame naar links</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Verplaats het geselecteerde frame naar rechts</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Alle frames schalen</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Alle frames bijsnijden</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Frames spiegelen of roteren</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Bijschrift toevoegen</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Voeg een vrij zwevende tekst toe</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Voeg een frame toe met een titel erop</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Voegt toetsen in die tijdens de opname zijn ingedrukt</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Teken vrije vormen</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Vormen toevoegen</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Muisklikken</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Selecteer een afbeelding en voeg toe als watermerk</s:String>\n    <s:String x:Key=\"S.Command.Border\">Randen toevoegen</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Slagschaduw toevoegen</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Verberg gevoelige delen op uw frames</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Gebruik het tekengereedschap om te selecteren welke delen van het frame tijdens de animatie niet statisch mogen blijven</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Voortgangsbalk of tekst met afspeeldetails</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Alle frames selecteren</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navigeer naar frame per index</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Selectie van frames omkeren</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Selectie van alle frames opheffen</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Overgang vervagen</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Dia-overgang</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Alle voltooide coderingen wissen</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Omhoog verplaatsen</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Omlaag verplaatsen</s:String>\n    <s:String x:Key=\"S.Command.Add\">Toevoegen</s:String>\n    <s:String x:Key=\"S.Command.Open\">Openen</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Het geselecteerde item bewerken</s:String>\n    <s:String x:Key=\"S.Command.Save\">Geselecteerd item opslaan</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Geselecteerd iten verwijderen</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Geschiedenis bekijken</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Startscherm</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Opname</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Opent de Schermopname, waarmee in een handomdraai opnames van het scherm kunnen worden gemaakt.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Opent de Webcam-opname.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Whiteboard</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Opent de Whiteboard-opname, waarmee opnames van tekeningen kunnen worden gemaakt.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Opent het Editorscherm, de centrale plek van deze applicatie. Hier kunnen nieuwe opnames worden gestart en bestaande opnames bewerkt.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Instellingen</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Een nieuwe uitgave is beschikbaar</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Download de nieuwste versie van ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Update</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Er is een nieuwe update beschikbaar</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nieuwe uitgave!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Nieuwe uitgave beschikbaar, Versie {0}!&#10;Klik hier voor meer details.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Het lijkt erop dat jouw systeem niet langer wordt ondersteund of dat er iets is veranderd in het updatesysteem. Probeer het handmatig te downloaden van de website.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versie</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portable</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Installatieprogramma</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Wat is er nieuw?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Bugfixes:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Er is een nieuwe versie beschikbaar om te downloaden.&#10;Wil je de browser openen om deze te downloaden?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Start de app na de update.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Downloaden</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Installeren</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Handmatig installeren</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Downloaden...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Het was niet mogelijk om de downloaddetails te tonen.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">De update kon niet worden gedownload.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Je moet wachten tot alle coderingen zijn voltooid voordat je kunt updaten.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Downloader</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Downloader</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} van {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Instellingen</s:String>\n    <s:String x:Key=\"S.Options.App\">Programma</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Opname</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Bewerker</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Taken</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Sneltoetsen</s:String>\n    <s:String x:Key=\"S.Options.Language\">Taal</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Opslag</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extra's</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Upload-diensten</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Doneren</s:String>\n    <s:String x:Key=\"S.Options.About\">Over</s:String>\n    <s:String x:Key=\"S.Options.Other\">Overige</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Geen sneltoets voor het volgen van de cursor</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Om de functie voor het volgen van de muiscursor te gebruiken, moet je een sneltoets instellen om deze indien nodig te wisselen.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Opstarten</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Handmatig&#10;starten</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">De app wordt alleen uitgevoerd als je dit handmatig doet.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Opstarten met&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">De app wordt uitgevoerd na het opstarten van Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Onmogelijk om af te wisselen tussen opstartmodi.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Maar één&#10;enkele instantie toestaan</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Je kunt de app één keer per gebruiker en uitvoerbaar programma uitvoeren, wat betekent dat verschillende gebruikers- of uitvoerbare instanties naast elkaar kunnen bestaan. Wanneer u de app opnieuw probeert uit te voeren, zal de tweede instantie proberen de eerste focus te geven en zichzelf te beëindigen.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Meerdere instanties&#10;toestaan</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Je kunt de app meerdere keren tegelijkertijd uitvoeren, zonder beperking.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Start geminimaliseerd naar het systeemvak.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Het systeemvakpictogram is zichtbaar terwijl deze optie actief is)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Starten met:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Startscherm</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Schermopname</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webcam-opname</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Whiteboard-opname</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Editorscherm</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Venster dat als eerste verschijnt wanneer de app start)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Thema van de app</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Kleurenschema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Zeer licht</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Licht</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Gemiddeld</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Donker</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Zeer donker</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Systeem</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Aangepast</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Voorbeeldkleuren.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Systeemvakpictogram</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Pictogram in het systeemvak van de taakbalk (meldingencentrum) weergeven.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">De toepassing openhouden, zelfs als alle vensters gesloten zijn.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Doe niets</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Open een venster</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Geen venster</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimaliseer/herstel alle vensters</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimaliseer alle vensters</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Alle vensters herstellen</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Linkermuisknop:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Linkermuisknop (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Middenmuisknop:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Venster:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Of anders, opent:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Algemeen</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Tijdelijke oplossing voor de crash 'Not enough quota ...'.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimenteel)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Bevestiging vragen bij het sluiten van het programa (d.m.v. 'Afsluiten').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Hardwareversnelling uitschakelen.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(De gebruikersinterface wordt weergegeven via softwaremodus)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Controleren op nieuwe vertalingen.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Bijgewerkte vertalingen worden automatisch gedownload en geïnstalleerd)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Controleer op updates bij het opstarten.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Updates automatisch installeren na het sluiten van de app.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Forceer het downloaden van de draagbare versie.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Vereist een handmatige installatie door het uitvoerbare bestand uit te pakken en te vervangen)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Afdwingen dat de update met verhoogde rechten wordt uitgevoerd.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Vraag me voordat de installatie begint.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">Download updates op netwerken met een datalimiet.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(Maakt het downloaden van updates mogelijk op netwerken met een datalimiet)</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Oud</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nieuw</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Opname-frequentie</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Handmatig</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Elk frame wordt handmatig door u vastgelegd door op de opnameknop of een gelijkwaardige sneltoets te drukken.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Gebruikersinteractie</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Elke keer dat u op iets klikt of typt, worden frames vastgelegd.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per seconde</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames worden vastgelegd op basis van 'per seconde', &#10;gebaseerd op de framerate noemer die is ingesteld op het recorderscherm.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minuut</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames worden vastgelegd op basis van 'per minuut' (timelapse), &#10;gebaseerd op de framerate-noemer die op het recorderscherm is ingesteld.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per uur</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames worden vastgelegd op basis van 'per uur' (timelapse), &#10;gebaseerd op de framerate noemer die op het recorderscherm is ingesteld.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Terugspeel-vertraging:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, elk vastgelegd frame wordt op deze vertraging ingesteld)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Startvertraging:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(In ms, de vertragingstijd voor de start van elke frame-opname)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Elk frame wordt vastgelegd met een interval van {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Opnamemodus</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Gebruik de oudere vastlegmethode, die langzamer is en mogelijk niet werkt bij het vastleggen van games,&#10;maar waarvoor geen extra plug-ins nodig zijn.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Gebruik de Desktop Duplication API-opnamemethode, die sneller is en games op volledig scherm kan vastleggen, maar vereist de SharpDx-plug-in en Windows 8 of nieuwer.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Opslaan naar&#10;bestand</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Elk vastgelegd frame wordt direct opgeslagen als een afbeelding op schijf.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Geheugencache</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Elk vastgelegd frame wordt eerst als een pixelmatrix in het geheugen opgeslagen (kan eerder worden gecomprimeerd).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compressie:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimaal</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Langzamere maar waarschijnlijk meer optimale compressie)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Snelste</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Snellere maar waarschijnlijk minder optimale compressie)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Geen compressie</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Er mag geen compressie worden uitgevoerd tijdens het vastleggen van frames)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Tijdelijke opslag:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. Na het bereiken van deze grootte worden de gegevens weggeschreven / gespoeld naar de schijf)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Voorkom het vastleggen van volledig zwarte frames.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Voorkomt dat BitBlt met een geheugencache ten onrechte leidt tot frames met alleen zwarte pixels)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Muiscursor tijdens opname weergeven.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Kleur muiscursor selecteren.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Vaste framerate.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Constante framerate die niet verandert bij opnamevertraging)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Leg alleen vast als er iets verandert.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Er wordt alleen een frame vastgelegd als er iets is gewijzigd binnen het opnamegebied)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Opnameprestaties bij een externe desktopverbinding verbeteren.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Schakelt gelaagde vensteropname uit)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Geheugenopruiming forceren tijdens de opname.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Vermindert geheugengebruik tijdens de opname, maar verlaagt de prestaties)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Richtlijnen</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Regel van derden</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Klik om de weergave van een regel van een derde richtlijn in of uit te schakelen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Draadkruis</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Klik om de weergave van een draadkruisrichtlijn in of uit te schakelen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">De richtlijnen worden alleen weergegeven als de recorder is gepauzeerd of gestopt.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Titelbalk verbergen (thin mode).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Vergrootglas inschakelen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Bij het vastleggen van het opnamegebied)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Opnamegebied tijdens de selectie voorzien van animatie.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animatie in 'marcherende mieren'-stijl)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Selectie pannen inschakelen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Geeft een handle weer in de buurt van de hoek van de selectie, waarmee het opnamegebied kan worden verplaatst)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Compacte weergave.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Toont een kleinere versie van het opdrachtpaneel van de recorder)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">De knop Annuleren ook tijdens de opname weergeven.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normaal gesproken alleen zichtbaar wanneer de opname is gepauzeerd)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Prestaties van de schermselectie verbeteren.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Vermindert de vertraging tijdens schermselectie door een statische weergave van het scherm weer te geven)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Afmetingen van opnamegebied onthouden.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Locatie van opnamegebied onthouden.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Aftellen voor opname.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(de wachttijd [sec] voordat de opname wordt gestart)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Cursor volgen inschakelen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Het opnamegebied zal zichzelf verplaatsen op basis van de locatie van de cursor)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Buffermarge in pixels, waar het opnamegebied wordt verplaatst)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Extra buffermarge in pixels, waar de gebruikersinterface verborgen begint te raken)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Bevestiging vragen voor het weggooien van een opname.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Editor-achtergrond</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Rastergrootte</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Zeer klein</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Klein</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Gemiddeld</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Groot</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Zeer groot</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Ik houd van grote vierkanten</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Ik ben blind</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Aangepast</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Hoogte</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Breedte</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Toepassen</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Basiskleur</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Even-kleur</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Oneven-kleur</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Coderingen in een apart venster weergeven.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Titelbalk uitbreiden (window chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Bij het laden de venstergrootte automatisch aanpassen aan de framegrootte.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Bij het laden het frame-zoomniveau automatisch aanpassen aan de schermgrootte.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Bevestiging vragen bij het wissen van frames.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Bevestiging vragen bij het verwijderen van een project.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Bevestiging vragen bij het afsluiten van de editor (als er een project geopend is).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Driedubbel-klik gebruiken om tekst te selecteren.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Contouren van tekstkaders tekenen.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Frames zo nodig verminderen.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Sla een frame over als de voorbeeldweergave het niet op tijd kan weergeven)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Sla een frame over als de voorbeeldweergave het niet op tijd kan weergeven.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Limiet op de geschiedenis van ongedaan maken/opnieuw uitvoeren.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Oudere acties worden verwijderd wanneer de limiet is bereikt)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximaal aantal opgeslagen acties)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">De uitvoermap met de voorinstellingen synchroniseren.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Voorinstellingen gebruiken hetzelfde uitvoerpad)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Bestandsnaam ook synchroniseren.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Voorinstellingen gebruiken ook dezelfde bestandsnaam)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Alleen voorinstellingen van hetzelfde bestandstype synchroniseren.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Alleen voorinstellingen van hetzelfde bestandstype worden gesynchroniseerd)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Taak</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lijst met automatische taken</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Taak</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Details</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Geactiveerd</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Deze taak activeren.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Kies een taak)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Kies hierboven een taak</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Deze taken worden opeenvolgend uitgevoerd vanaf de bovenkant van de lijst aan de bodem.&#10;Dit gebeurt wanneer u voor het eerst een project opent met behulp van de editor.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Algemeen</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Schermopname:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Opent standaard de Schermopname)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webcam-opname</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Opent de Webcam-opname)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Whiteboard-opname:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Opent de Whiteboard-opname)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Opent een nieuw Editorvenster)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Opties:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Opent het Instellingenvenster)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Afsluiten:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Sluit alle vensters en verwijdert het programma uit de taakbalk)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Opname</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Start/Pauze:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Start/pauzeert de opname. In Foto-modus wordt een enkele opname genomen)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stop:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Stopt de opname en opent de Editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Afbreken:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Breekt een actieve/gepauzeerde opname af)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Cursor volgt:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Schakelt de aanpassing van het opnamegebied om op basis van de positie van de cursor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Schakel het volgende uit:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Schakelt de aanpassing van het opnamegebied tijdelijk uit op basis van de positie van de cursor, alleen modificatietoetsen geaccepteerd)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Klik dit veld en druk vervolgens op het toetsenbord de gewenste toets(combinatie). &#10;Sommige toetscombinaties zijn niet toegestaan.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Programmataal</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Automatisch detecteren</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Huidige OS-taal (indien beschikbaar)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Wil je mijn programma vertalen?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Lees hier de vertaalinstructies en download de Translator app.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Daarna,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">importeren in het programma</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">om deze te testen.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Wanneer de vertaling helemaal compleet is, vraag ik je mij deze te </s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">e-mailen (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">als je klaar bent met vertalen.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Open hier de webpagina de laatste versie van het vertaalbestand</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Opent het importeerscherm</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Opent uw e-mailprogramma</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} vrij van {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Controleer nogmaals hoeveel ruimte er nog is.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Wis de cachemap. &#10;Je kunt beslissen of je recente projecten wilt behouden of niet.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Beperkte schijfruimte. Ruim tijdelijke bestanden op of wijzig de opslaglocatie van tijdelijke bestanden.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Onmogelijk om de schijfdetails op te halen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Geen bestanden</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} bestand</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} bestanden</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Geen mappen</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} map</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} mappen</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in gebruik</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Paden</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Kies een locatie voor de tijdelijke bestanden</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logbestanden:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Kies een locatie voor de foutrapportages</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Blader door de geselecteerde map.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Instellingen</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Lokaal:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Het bestaat niet</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Een leeg instellingenbestand aanmaken.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Instellingenbestand verwijderen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Open de map waar het instellngenbestand is opgeslagen. &#10;Houd Ctrl ingedrukt bij het openen van het bestand bestand.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Instellingen laden: Standaard ◄ AppData ◄ Lokaal. &#10;• Als de lokale map geen instellingenbestand bevat dan zoekt de applicatie in de AppData map. Indien geen instellingenbestand gevonden wordt, komen de standaardinstellingen van kracht&#10;• Als er geen lokale instellingenbestand gevonden wordt, worden alle instellingen in AppData opgeslagen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Bij het sluiten van de app alle bestanden uit de cache verwijderen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Vraag het me voordat je alle bestanden uit de cache verwijdert.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Oude projecten automatisch verwijderen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Bij de start zal een achtergrondtaak van het programma alle gesloten projecten wissen die ouder zijn dan een ingestelde tijd.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(in dagen, oudere projecten worden verwijderd bij het openen van de Editor)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Cache wissen</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Wil je de cachemap wissen?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Wanneer u een opname maakt of iets opent om te bewerken, wordt een project gemaakt en opgeslagen in de cachemap.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Wil je deze projecten uit de cachemap verwijderen?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Verwijder geen recente projecten.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Alleen de projecten die ouder zijn dan {0} dagen en die momenteel niet in gebruik zijn, worden verwijderd)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Alle projecten die momenteel niet in gebruik zijn, worden verwijderd)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modus:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Uitgeschakeld</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Handmatig</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Systeem</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Systeemproxy gebruiken)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Poort:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Gebruikersnaam:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Wachtwoord:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Voorinstellingen uploaden</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Dienst</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Titel</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Omschrijving</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Ingeschakeld</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Uploadservice</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Kies een dienst:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Kies hierboven een uploadservice</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Aangepast</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Deze voorinstelling gebruiken</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Details</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Naam:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Omschrijving:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Modus:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anoniem</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Geverifieerd</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorisatie</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Token krijgen</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Plak hier het OAuth-token</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Gebruikersnaam:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Wachtwoord:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autoriseren</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">De gebruikersnaam en het wachtwoord worden niet opgeslagen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Opties</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Gebruik directe links.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Je moet deze voorinstelling een unieke naam geven.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">De naam wordt al gebruikt door een andere uploadvoorinstelling.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">In de geauthenticeerde modus moet je het authenticatieproces voltooien.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Je moet je gebruikersnaam en wachtwoord opgeven om deze app te autoriseren.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Het was niet mogelijk om het autorisatietoken op te halen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Voordat deze applicatie geautoriseerd kan worden, dien je een geldige autorisatiesleutel op te geven.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Autorisatie mislukt. Controleer of alles klopt en probeer het over een paar seconden opnieuw.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Het album kon niet worden geladen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Autorisatie voltooid.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Niet geautoriseerd.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Autorisatie loopt af in {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorisatie geldig tot {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Links verkrijgen met de Gifv extensie in plaats van Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Gifs naar geselecteerd album uploaden.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Bevestiging vragen voor uploaden</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Albumlijst opnieuw laden.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Standaardwaarden</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Vraag me om de details van de upload in te vullen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url-type:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Selecteer een album (optioneel)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Selecteer desgewenst een doelalbum:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Uploaddetails (optioneel)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Upload details</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Titel:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Omschrijving:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Labels:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Labels scheiden een puntkomma (;)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Alleen weergeven voor degenen die toegang hebben via een directe link.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Uploadgeschiedenis</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Datum</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Voorinstelling</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Geslaagd?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Geschiedenis-item verwijderen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Koppeling:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Lagere kwaliteit:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Verwijderingskoppeling:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Weet je zeker dat je het geschiedenisitem wilt verwijderen?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Deze actie kan niet ongedaan worden gemaakt.&#10;&#10;Wil je het geselecteerde geschiedenisitem verwijderen?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Beschikbare externe applicaties</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Klik hier om te downloaden &#10;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Downloaden…</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Gedownload&#10;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Klik hier om de bestandseigenschappen te openen.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Apps die door de Microsoft Store worden gedistribueerd, kunnen geen andere apps downloaden. Je moet het handmatig downloaden.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Locatie FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Locatie van FFmpeg selecteren</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg uitvoerbaar bestand</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Het pad van FFmpeg bevat een of meer ongeldige tekens. Selecteer de juiste locatie van het bestand.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">FFmpeg-versie</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Locatie Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Locatie van Gifski selecteren</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski-bibliotheek</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Het pad van Gifski bevat een of meer ongeldige tekens. Selecteer de juiste locatie van het bestand.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg licentie</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski licentie</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx-licentie</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Geen bewerkingsrechten voor deze map</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Het is niet mogelijk om de download in de map op te slaan vanwege een gebrek aan schrijfrechten. &#10;&#10;Wil je de downloader starten met beheerdersrechten om de download te voltooien?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Doneren</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">US$ Doneren</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">€ Doneren</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Opent Paypal website. Geselecteerde munteenheid: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Opent Paypal website. Geselecteerde munteenheid: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Opent Paypal website. U kunt zelf de munteenheid selecteren.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Abonneren</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Doneer maandelijks via Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Doneer via Stripe.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Cadeauspellen</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Cadeauspellen via Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Cadeauspellen via GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Betaal een kopje koffie via Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Cryptovaluta</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Kopieer het BitcoinCash-adres.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Ondersteuning</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Als je het project wilt steunen :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versie:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Controleren op updates</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Dit is al de jongste versie.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Auteur: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store versie. Sommige functies zijn niet beschikbaar door opgelegde beperkingen.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contact</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Bij server aanmelden</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Pagina bezoeken</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Bij room aanmelden</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Technisch</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licentie:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Dit programma is geheel gratis)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Broncode:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Privacybeleid:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Veel dank verschuldigd aan</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Alle supporters en mensen die reacties en/of donaties hebben gegeven.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Lokalisatie</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Taalcodes ophalen...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Herkend als {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Niet herkend</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">De onderste vertaalbestand is hetgeen wordt gebruikt.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Om het eigen gemaakte vertaalbestand te gebruiken, verplaats het naar onderkant lijst.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Bron exporteren...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Opslaan als Bronnenwoordenboek</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Bronnenwoordenboek openen</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Bronnenwoordenboek</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Bron importeren...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">De bestandsnaam volgt geen geldig patroon</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Probeer de naam te wijzigen zoals: StringResources.en.xaml, waarbij 'en' moet worden vervangen door jouw taalcode.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Je kunt geen bron met dezelfde naam toevoegen</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Probeer de herhaalde bron te verwijderen of gebruik een andere taalcode.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Overbodige taalcode</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">De \"{0}\"-code is overbodig. Gebruik in plaats daarvan '{1}'.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Onbekende taal</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">De '{0}' en zijn familie werden niet herkend als geldige taalcodes.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Het was niet mogelijk om de lokalisatiebron te importeren.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Opnemen</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pauze</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Doorgaan</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Stoppen</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Afbreken</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Foto</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Hoogte</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Breedte</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Cursor volgen is ingeschakeld.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Klik om te schakelen tussen de modi van opnamefrequentie.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">handmatig</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interacties</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Maximum frames per seconde</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Varieert van 1 tot 60 fps, met hogere waarden voor meer vastgelegde frames per seconde. &#10;Elke stap vertegenwoordigt 16 milliseconden verschil.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minuut</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Varieert van 1 tot 60 fpm, met hogere waarden voor meer vastgelegde frames per minuut. &#10;Elke stap vertegenwoordigt 1 seconde verschil.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Maximum frames per uur</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Varieert van 1 tot 60 fph, met hogere waarden voor meer vastgelegde frames per uur. &#10;Elke stap vertegenwoordigt 1 minuut verschil.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Klik of druk een toets voor opname</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Aanpassen aan venstergrootte (Sleep en laat los om aan te passen)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Aftellen</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (gepauzeerd)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Stoppen...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Opstarten...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Opnametijd verlopen.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Totaal aantal frames:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Handmatige opgenomen:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">De opname is gepauzeerd.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Uw computer ondersteunt geen nauwkeurige opnamemodus.&#10; De beoogde framesnelheid wordt mogelijk niet bereikt.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Het was niet mogelijk om het scherm vast te leggen</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Het was niet mogelijk om het scherm vast te leggen. De opnamemethode heeft na 5 pogingen geen frame geretourneerd.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Het vastleggen/pauzeren van het scherm was niet mogelijk</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 of nieuwer is vereist om het scherm vast te leggen met de Desktop Duplication API.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Gebied</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Selecteer een gebied</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Venster</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Selecteer een venster</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Scherm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Selecteer een scherm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Intern schemr</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Algemeen scherm</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Grafische adapter: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resolutie: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Natuurlijke resolutie: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.###}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Sleep om de selectie&#10;te verplaatsen.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Accepteren</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Opnieuw proberen</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Rechtermuisklik</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Selectie annuleren (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Klik en sleep om een gedeelte van dit scherm te selecteren</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Klik en sleep om een gebied te selecteren</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Klik hier om dit venster te selecteren</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Klik hier om dit scherm te selecteren</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Druk Esc om te annuleren</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Druk op {0} om de opname te stoppen</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Het opnamevenster wordt geminimaliseerd,&#10;herstel het of druk op {0} om de opname te pauzeren</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Opname weggooien</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Weet je zeker dat je de opname wilt verwijderen?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Met deze actie wordt de opname verwijderd en worden alle frames verwijderd. &#10;Je kunt deze bewerking niet ongedaan maken.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Webcam Recorder</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Geen apparaat voor video-opname gedetecteerd :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Controleer op apparaten voor video-opname.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Schaal: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">De schaal van de video aanpassen.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Whiteboard-opname</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Automatische opname</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Maakt opname tijdens het tekenen mogelijk.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [ingedrukt houden]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Kleurkiezer</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Kies een kleur</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Rood</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Groen</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Blauw</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Beginkleur</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Huidige kleur</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Eindkleur</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Sleep dit om&#10;kleuren te bemonsteren</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Klik en sleep om kleuren&#10;van je scherm te kiezen.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Interne foutmelding</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Interne foutmelding openen</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Uitzondering</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Boodschap</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Bron</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Er is iets fout gegaan.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Rapport verzenden</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Voorinstelling</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Encoder</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Naam</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Omschrijving</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Overig</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Automatisch opslaan wanneer een optie wordt gewijzigd.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Alle wijzigingen aan deze voorinstellingen (instellingen voor coderen en exporteren) moeten handmatig worden opgeslagen door op de knop Opslaan te drukken.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Alle wijzigingen aan deze voorinstellingen (instellingen voor coderen en exporteren) worden automatisch opgeslagen.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Sommige eigenschappen van een standaardvoorinstelling zijn alleen-lezen.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Je moet deze voorinstelling een naam geven.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Er is al een preset met dezelfde naam.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Automatisch opslaan</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Wijzigingen in deze voorinstelling worden automatisch opgeslagen.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Standaard ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Standaardinstelling voor de encoder.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Voor Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respecteert de uploadlimieten van Twitter (behalve grootte en resolutie).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Oudere en beter bekende codec.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animatie</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Afbeelding</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Project</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Hoge kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Beter geschikt voor opnames met meer kleuren en verlopen.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Hoge kwaliteit • Transparante achtergrond</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Ondersteunt het opslaan van de animatie met een transparante achtergrond.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Hoge kwaliteit • Grafische afbeeldingen</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Beter voor opnames met een kleinere hoeveelheid kleuren.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • Standaard</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">Aanbevolen voor schermopname van de reguliere gebruikersinterface. Gebruikt Mediaan Cut-quantizer zonder dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Gebalanceerd</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Goede kwaliteit voor afbeeldingen van fotokwaliteit met Wu's kwantisator zonder dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Hoge kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Hoge kwaliteit voor afbeeldingen van fotokwaliteit met Wu's kwantisator met hoger bitniveau en Floyd-Steinberg foutdiffusie dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Lage kwaliteit, sneller</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Kwantificering van alle frames met hetzelfde vooraf gedefinieerde 'webveilige' palet en Bayer 8x8 geordende dithering.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - Hogere kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Hogere beeldkwaliteit, maar met een grotere bestandsgrootte.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - Lagere kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Lagere beeldkwaliteit, maar met een kleinere bestandsgrootte.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski - Hoge kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Hogere beeldkwaliteit, maar met een grotere bestandsgrootte.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski - Lage kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Lagere beeldkwaliteit, maar met een kleinere bestandsgrootte.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski - Lagere kwaliteit en snellere codering</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Nog lagere beeldkwaliteit, met een snellere codering, maar met een kleinere bestandsgrootte.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Systeem - Lage kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Lage kwaliteit, maar snellere codering.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - Hoge kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Hoge beeldkwaliteit en kleine bestandsgrootte, maar langzamere codering.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - Lagere kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Lagere beeldkwaliteit, kleine bestandsgrootte en snellere codering.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Hoge kwaliteit</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Hoge beeldkwaliteit en kleine bestandsgrootte.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Frames toevoegen</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Beide kanten moeten dezelfde grootte hebben. In dit venster kan je de afbeelding ten opzichte van canvas herpositioneren of veranderen qua grootte. Klik op afbeelding om te selecteren.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Canvasgrootte:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Afbeelding aanpassen aan canvas</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Canvasgrootte aanpassen om beide afbeeldingen passend te maken (t.o.v. linkerbovenhoek).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Er is een verschil in framegrootte. Dit moet worden opgelost voordat de frames toegevoegd kunnen worden.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Nieuwe frame(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Huidige frame(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Afbeeldinggrootte:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Afbeeldingpositie:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Afbeeldingsgrootte &#10;en -positie herstellen</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Nieuwe frames worden toegevoegd in de huidige&#10;lijst van frames op de positie:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Voor</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Na</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Frame</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importeren</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Canvaskleur kiezen</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Frames uit video importeren</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importprogramma:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Laden…</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Schaal:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Bestandsgrootte:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Hoogte:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Breedte:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Framerate:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Start:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Einde:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Selectie:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Frames:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Duur:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Het was niet mogelijk om de video te laden</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">De previewer kon niet starten. Probeer het met een andere importeur of controleer of de video niet beschadigd is. Als u de MediaPlayer gebruikt, controleer dan of de Windows-functie genaamd \"Media-functies / Windows Media Player\" is ingeschakeld en zorg ervoor dat u over de benodigde videocodec beschikt.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Time-out bij het ophalen van het framevoorbeeld.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Geen frame geselecteerd om te importeren.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Encoder</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Coderen...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Starten</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Voltooid</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Gekopieerd naar klembord</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Kopieeractie is mislukt</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Uitgevoerde opdrachten</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Opdrachtuitvoer weergeven.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Uitvoer van opdracht mislukt</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Uploaden mislukt</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + muisklik om pagina te openen waarmee afbeelding verwijderd kan worden (indien beschikbaar).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Verstreken tijd [minuten]:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analyse:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Coderen:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Uploaden:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopieëren:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Opdrachten:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Verwijderd of verplaatst bestand</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Geannuleerd</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Fout</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Klik hier om details van de foutmelding te tonen.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Uploaden</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Opdrachten uitvoeren</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Verwerking {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Tweede voortgangsslag voorbereiden</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Verwerking {0} - 2e voortgangsslag</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Bestand aanmaken</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Ongewijzigde pixels analyseren</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Analyseresultaat opslaan</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Bestand openen</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Map verkennen</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Uit lijst verwijderen</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Details tonen</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Alle voltooide coderingen afwijzen</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Als afbeelding kopiëren</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Bestandsnaam kopiëren</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Maplocatie kopiëren</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Snelkoppeling kopiëren</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Opdrachtuitvoer</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Opdrachtuitvoer</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Meldingen</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Alle meldingen negeren</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Bestand</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Start</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Afspelen</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Bewerken</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Afbeelding</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Overgangen</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistieken</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Instellingen</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Help</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extra's</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Er is een nieuwe update beschikbaar!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Klik hier om er meer over te lezen.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Totaaltelling, telling selectie, selectie index</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Frames voorbereiden</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Laden niet mogelijk - Je kunt niet meerdere bestanden tegelijk importeren. Probeer elk bestand apart.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Laden niet mogelijk - Je kunt niet meerdere projecten tegelijk imporeren. Probeer elk project apart.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Mediabestand (afbeelding of video) openen</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Mediabestand (afbeeldng of video) of een project openen</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Alle ondersteunde bestanden</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Afbeelding</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Animated Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif-animatie</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp-video</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi-video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska-video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov-video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4-video</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm-video</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp-afbeelding</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg-afbeelding</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png-afbeelding</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip-bestand, incl. afbeeldingen</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project (zip)</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd-bestand</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Ga naar \"Bestand > Nieuw\" om een nieuwe opname te starten</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Sleep afbeeldingen, videos of projecten om te importeren</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Hartelijk bedankt voor het gebruik van mijn programma!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Hoe lager de framerate, aantal gebruikte kleuren of aantal veranderingen tussen frames, hoe kleiner de bestandsgrootte</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Wil je praten? Open \"Instellingen > Over\" voor contactmogelijkheden</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Problemen? Neem contact op met de Feedback tool</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Wil je de nieuwe opnamemethode gebruiken? Ga naar \"Instellingen > Opname\" om deze te activeren</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Opname</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webcam&#10;opname</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Whiteboard&#10;Opname</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Blanco&#10;Project</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nieuw</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Opname</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Webcam&#10;opname</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Whiteboard&#10;Opname</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Invoegen</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Opslaan als</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Laden</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Recente&#10;projecten</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Opslaan als&#10;Project</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Project&#10;weggooien</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Actielijst</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Ongedaan maken</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Herhalen</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Alles herstellen</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Klembord</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Klembord tonen</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Plakken</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Knippen</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopiëren</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoomen</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Aanpassen aan&#10;inhoud</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Afbeelding passend maken</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Selecteren</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Alles&#10;selecteren</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Ga naar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Selectie omkeren</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Deselecteren</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Afspelen</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Eerste</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Vorige</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Spelen</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pauze</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Volgende</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Laatste</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Afspeelopties</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Afspelen met herhaling.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Alleen gebruikt tijdens afspelen.&#10;Als je de lusinstellingen voor het exporteren van Gifs en Apngs wilt wijzigen,&#10;is deze voor sommige encoders beschikbaar in het paneel 'Opslaan als'.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Frames</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Verwijderen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Duplicaten&#10;verwijderen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Frames&#10;verminderen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Vloeiende&#x0d;Lus</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Alles hiervoor verwijderen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Alles hierna verwijderen</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Herschikken</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Omkeren</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Jojo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Naar links&#10;verplaatsen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Naar rechts&#10;verplaatsen</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Vertraging (duur)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Overschrijven</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Verhogen of&#10;Verlagen</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Schaal</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Grootte en rotatie</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Grootte&#10;aanpasssen</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Bijsnijden</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Spiegelen/Roteren</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Bijschrift</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Vrije tekst</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titelframe</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Toets-&#10;aanslagen</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Overlay</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Vrije&#10;tekening</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Vormen</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Muis&#x0d;gebeurtenissen</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Watermerk</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Rand</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Schaduw</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Voortgang</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Versluieren</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Stijlen</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Vervagen</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Dia</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Algemeen</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Aantal frames</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Totale duur</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Framegrootte</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Gemiddelde duur (vertraging)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Huidige tijd</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">De huidige tijd (cumulatief) op basis van het huidige frame dat wordt weergegeven.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Frame-DPI en -schaling</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Geselecteerde frame</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Knip-actie</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Je kunt niet alle frames knippen.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">De opname dient tenminste 1 frame te bevatten.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Alles verwijderen</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Weet je zeker dat u alle frames wilt verwijderen?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Dit zal het huidige project afbreken en kan niet ongedaan worden gemaakt. Wil je doorgaan?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Project weggooien</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Weet je zeker dat u het project wilt weggooien?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Dit zal het project en alle frames weggooien.\\n\\rDeze actie is onherroepelijk.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Wil je het vorige project weggooien?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Als je dit niet doet, dan blijft het vorige project beschikbaar via Recente projecten.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Frames verwijderen</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Weet je zeker dat je dit wilt verwijderen?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Deze actie zal {0} frames verwijderen.\\n\\rJe kunt deze actie later ongedaan maken.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Editor afsluiten</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Weet je zeker dat je wilt afsluiten?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Het huidige project kan worden heropend via 'Recente projecten'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Het huidige project kan worden heropend via 'Recente projecten', maar zal na 5 dagen automatisch worden verwijderd.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Ongeldige sleepactie</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Je kunt niet meerdere bestanden tegelijk importeren</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Kies één enkel bestand.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Het bestand kan niet worden geladen</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Het bestand kan niet geladen worden, vanwege een verkeerde bestandsindeling.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Je kunt niet meerdere projecten tegelijk importeren</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Kies één enkel project.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Er is geen tekst om toe te passen.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Selecteer tenminste 1 frame om een Tekst toe te voegen.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Selecteer tenminste 1 frame om de tekst toe te voegen.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Selecteer tenminste 1 frame om een Titelframe toe te voegen</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Selecteer een randdikte van groter dan nul.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Selecteer tenminste 1 frame om een rand toe te passen.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">De dekking moet groter zijn dan nul om enig verschil in het frame te maken.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Wanneer de schaduwdiepte en de vervagingstraal als nul worden gebruikt, maakt het geen verschil omdat het achter het frame wordt verborgen.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Selecteer tenminste 1 pixel om Cinemagraph toe te passen. Selecteer de pixels door erop te tekenen.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Vervagingsovergang</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Selecteer tenminste 1 frame om Vervagingsovergang op toe te passen</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Een volledig transparante kleur levert geen effect op deze overgang.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Dia-overgang</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Selecteer tenminste 1 frame om een dia-overgang toe te kunnen passen.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Frames laden</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Project niet kunnen laden</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Het was niet mogelijk om de frames te laden, want ze zijn allemaal beschadigd of de afbeeldingen zijn niet beschikbaar op de plek waar ze verwacht werden.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Sommige frames konden niet geladen worden</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Het was niet mogelijk om de frames te laden, want ze konden niet worden gevonden of zijn mogelijk beschadigd.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Selecteer tenminste 1 frame om een overlay toe te passen.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg is niet beschikbaar. Voeg deze toe aan de PATH systeemvariabele of stel de locatie in bij Instellingen.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski is niet beschikbaar. Voeg deze toe aan de PATH systeemvariabele of stel de locatie in bij Instellingen.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Er is niet onvoldoende ruimte beschikbaar op de harde schijf ({0}% over). Klik hier om Instellingen > Tijdelijke bestanden te openen en extra vrije ruimte te maken.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Je hebt geprobeerd meerdere afbeeldingen met verschillende DPI's te importeren, wat niet wordt ondersteund. Sommige zijn geïmporteerd, de andere moeten apart worden geïmporteerd.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">U heeft geprobeerd meerdere afbeeldingen met verschillende formaten te importeren, wat niet wordt ondersteund. Sommige afbeeldingen zijn ingelezen, anderen moeten afzonderlijk worden geïmporteerd.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Frames ophalen uit de tijdelijke opslag</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Frames bijwerken</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Importeeractie voorbereiden</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Frames importeren</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Duplicaten analyseren</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Vertraging aanpassen</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Duplicaten weggooien</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Frames weggooien</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Mappen weggooien</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Framegrootte aanpassen</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Frames bijsnijden</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Overlay op frames toepassen</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Titelframe aanmaken</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Frames spiegelen/roteren</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Vertraging aanpassen</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Overgangseffect toepassen</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Opslaan voorbereiden</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Annuleer het laden en gooi het project weg.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">De perfecte lus zoeken</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Ongebruikte frames verwijderen</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Frame:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Afbeelding openen</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Map verkennen</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Ga naar frame</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Ga naar frame (van 0 tot {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Opslaan Als</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Geselecteerde frames wissen</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nieuwe Schermopname</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nieuwe Webcam-opname</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nieuwe Whiteboard-opname</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nieuw Project</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nieuw van Media of Project</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nieuwe opname aangemaakt</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nieuwe Webcam-opname aangemaakt</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nieuwe Whiteboard-opname aangemaakt</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nieuw project aangemaakt</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Ongedaan gemaakt</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Herstelactie uitgevoerd</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Actie opnieuw uitgevoerd</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} frame(s) geknipt</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} frame(s) gekopieerd</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} frame(s) geplakt</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom ingesteld op {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Alle frames zijn geselecteerd</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Frame #{0} geselecteerd</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Selectie omgekeerd</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Alle frames zijn gedeselecteerd</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} frame(s) verwijderd</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Framelijst omgekeerd</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Jojo-effect toegepast</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Frame(s) naar links verplaatst</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Frame(s) naar rechts verplaatst</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Framegrootte aangepast</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Frames bijgesneden</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Frames gespiegeld/geroteerd</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">De spiegelactie wordt toegepast op alle geselecteerde frames en de rotatieactie op alle frames</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Deze actie toepassen op alle frames</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Deze actie toepassen op alle geselecteerde frames</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Deze actie is van toepassing op alle of geselecteerde frames, afhankelijk van uw instellingen</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph wordt toegepast op alle frames op basis van eerste frame</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Overlay toegepast</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Titelframe aangemaakt</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Het Titelframe wordt ingevoegd voor de geselecteerde frame</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Duur (vertraging) aangepast</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Overgang toegevoegd</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Framerate verminderd</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplicaten verwijderd</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Verbergen</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Toepassen</s:String>\n    <s:String x:Key=\"S.Action.Open\">Openen</s:String>\n    <s:String x:Key=\"S.Action.Save\">Opslaan</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Annuleren</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Recente projecten</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Recente projecten opzoeken…</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Aanmaakdatum</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Aantal frames</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Er is geen project geselecteerd. Selecteer een project uit de lijst om te laden.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Dit project wordt al weergegeven door deze editorinstantie.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Dit project werd al geopend door een andere editor. Een project kan niet een tweede keer worden geopend.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Klembord-items</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Klembord-item:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} afbeelding</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} afbeeldingen</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Inhoud verkennen</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Verwijderen</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Plakgedrag</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Voor geselecteerde frame</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Na geselecteerde frame</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Verschil</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Options</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Procent (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Beeldverhouding behouden.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Schaalkwaliteit:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant (hogere kwaliteit)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Lineair (lagere kwaliteit)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Naaste buur (lagere kwaliteit en sneller)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Schaalkwaliteit.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Kies een andere waarde om de grootte aan te passen.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Punten:</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Boven:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Links:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Onder:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Rechts:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">De bijsnijdselectie dient kleiner te zijn dan de huidige framegrootte.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">De bijsnijdselectie dient groter te zijn dan 10x10 pixels.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Horizontaal spiegelen</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Verticaal spiegelen</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">90º linksom roteren</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">90º rechtsom roteren</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Framerate verminderen</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Factor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Telling verwijderen:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Aanpassing vertraging:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Niet aanpassen</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Toevoegen aan de vorige frame</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Gelijkmatig toevoegen aan de resterende frames</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Verminder de framerate van het hele project.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Als de optie niet is aangevinkt, moet je meerdere opeenvolgende frames selecteren, &#10;groter dan de verwijderingsfactor.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Deze actie zal {0} frame(s) verwijderen na elke {1} frame(s), zonder de verwijderde frame(s) te tellen.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Je moet de frames selecteren om de framerate-reductie toe te passen (of vink de optie aan om op het hele project toe te passen).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">De lijst met geselecteerde frames moet opeenvolgend zijn. Je kunt sommige frames niet ongeselecteerd laten tussen geselecteerde.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">De selectie van frames moet groter zijn dan de verwijderingsfactor, anders kan de functie niets verwijderen.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Duplicaten verwijderen</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Overeenkomstigheid (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Frame-verwijdering:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Eerste frame verwijderen</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Laatste frame verwijderen</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Vertraging aanpassen:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Niet aanpassen</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Gemiddelde gebruiken</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Totaal gebruiken</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Deze actie analyseert elk frame (pixel per pixel) en verwijderd alle frames die op zijn minst {0} % gelijk zijn aan frame ervoor of erna.&#10;U kunt kiezen of de vertraging van de frames (duur van de vertoningen) aangepast moet worden.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Vloeiende lus maken</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Eerste negeren:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Vergelijken met:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Einde</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Begin</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Probeert een frame te vinden dat minstens {0}% lijkt op het startframe en verwijdert alle latere frames.&#x0d; Je kunt kiezen of je enkele initiële frames wilt negeren en de vergelijking vanaf het begin (na de drempel) of het einde wilt starten.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Het aantal te negeren frames moet kleiner zijn dan het totale aantal frames.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Met de geselecteerde instellingen was het niet mogelijk om een vloeiende lus te maken.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Er is al een vloeiende lus op basis van geselecteerde instellingen.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Lettertype</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Familie:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Stijl:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Gewicht:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Grootte:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Kleur:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Achtergrond kleur:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Contour</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Dikte:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Opmaak</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Verticaal:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontaal:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Uitlijning:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Decoratie:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Toetsaanslagen</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Toetsen</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Scheidingsteken:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Toetsaanslagen bewerken</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ctrl, Alt, Shift en Windows-toetsen negeren als deze geen doel hadden.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Met deze optie worden losse toetsaanslagen zoals \"Control\" genegeerd, maar \"Control + C\" wordt niet genegeerd.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Negeer door software gesimuleerde toetsaanslagen.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Neem alleen toetsaanslagen van gebruikersinvoer op.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Weergave van de toetsaanslagen uitbreiden.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Weergave van de toetsaanslagen eerder starten.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Per (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Er zijn geen toetsenbordaanslagen in je opname.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Toetsaanslag Editor</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Framenummer</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Gedetecteerde toetsaanslagen</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Toetsaanslag verwijderen</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Toetsaanslag toevoegen:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Kleine letters.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Hiermee kun je kleine letters invoegen.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modus</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Pen</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Gum</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Selectie</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Object-gum</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Breedte:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Hoogte:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Tip:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rechthoek</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellips</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Overige:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Marker</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Aanpassen aan curve.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Er zijn geen tekeningen om toe te passen op geselecteerde frames.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Selecteer tenminste 1 frame om de vrije tekening op toe te passen.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Invoegen</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Vormen</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radius:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Arcering:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Bepaalt de lengte van de streepjes en de tussenruimte. &#10;Je kunt beide maten instellen om een eigen streepjespatroon te creëren. &#10;De standaardwaarde is \"1 0\" of leeg, wat resulteert in een streepje zonder tussenruimte.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Rotatie herstellen</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Verwijderen</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Vulling</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Muisgebeurtenissen</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Highlightkleur van de muis:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Kleur middenknop</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Kleur rechterknop</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Kleur linkerknop</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">Kleur 1e extra knop:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">Kleur 2e extra knop:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Afbeelding</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Bestand:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Niets geselecteerd</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Dekking:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Selecteer een afbeelding</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Selecteer een afbeelding om toe te voegen in geselecteerde frame(s).</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Selecteer tenminste 1 frame om een watermerk toe te passen.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Uiterlijk</s:String>\n    <s:String x:Key=\"S.Border.Info\">Gebruik negatieve waarden om de rand de afbeelding te laten vergroten. Daarbij wordt de rand op alle frames toegepast.&#10;Als er geen negatieve waarde wordt gebruikt, wordt de rand alleen toegepast op de geselecteerde frames.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Schaduwkleur:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Achtergrondkleur:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Richting:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Vervagingsradius:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Diepte:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Korrelig maken</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Vervagen</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Donkerder maken</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Lichter maken</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Verduisteringsopties (korreligheid)</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Pixelgrootte:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Vervagingsniveau:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Verduistering:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Verlichtingsniveau:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Bereken de gemiddelde kleur voor elke korrelig blok.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Pas de verduistering toe op de inverse van de selectie.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Gladheid</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Selecteer een rechthoek die korrelig gemaakt moet worden.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Gebruik het selectiegereedschap om het deel van het frame te selecteren dat niet mag worden verduisterd.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Er is niets geselecteerd. Selecteer een rechthoek die korrelig gemaakt moet worden.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Type</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Balk</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precisie:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuten</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Seconden</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milliseconden</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Percentage</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Framenummer</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Actuele datum/tijd</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Aangepast</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Totaal tonen.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formaat:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formaat</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconden</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconden</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minuten</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = framenummer</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Totaal:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Voorbeelden:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Je kunt het datum- en tijdformaat van .Net Framework gebruiken.&#10;De specificatie is beschikbaar in deze twee onderstaande links.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standaard formaten</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Aangepaste formaten</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Tel vanaf:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Begint het framenummer te tellen vanaf dit geselecteerde nummer.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Oriëntatie:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Update uitstellen</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Vertragingsmodus:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Overschrijven (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Verhogen of verlagen (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Schaal (in%)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nieuwe waarde</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimaal 10ms per frame.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Waarde verminderen/verhogen</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Schaal</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Deze nieuwe waarde zal de duur (vertraging) vervangen van alle geselecteerde frames. De waarde dient tussen 10ms tot en met 25500ms te liggen.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Deze waarde zal de duur (vertraging) van elke geselecteerde frame toe of af laten nemen.&#10;Je kunt een hogere of lagere waarde kiezen tussen -10000ms en 10000ms, maar de totale duur van elke frame is beperkt tot een waarde tussen 10ms en 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">De duur (vertraging) van elk geselecteerd frame procentueel verlengen.&#10;Je kunt de duur van elk frame verlengen met 1-10000% , maar de uiteindelijke duur van elk frame blijft beperkt tot een waarde tussen 10ms en 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Gebruik de pen om de pixels te selecteren die niet ongewijzgd moeten blijven (oftewel veranderen tussen frames), </s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Overgangsduur</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Overgangsvertraging</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Vervagen naar…</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Volgende frame</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Een kleur</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Kleur</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">De overgang wordt toegepast op de geselecteerde frame en de volgende frame</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Bestandsformaat</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Het formaat van het uitvoerbestand.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">De exportvoorinstelling die alle momenteel weergegeven instellingen bevat. &#10;Beheer je exportvoorinstellingen via de onderstaande knoppen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Geanimeerde afbeelding</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Frames</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Overige</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web-afbeelding</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime bestandsformaat</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Project</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif project</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop-bestand</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Voorinstellingen:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Standaard</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Toevoegen</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Opslaan</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Bewerken</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Verwijderen</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Herstellen</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">De voorinstelling wordt verwijderd</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Weet je zeker dat je de voorinstelling wilt verwijderen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Deze actie kan niet ongedaan worden gemaakt. &#10; &#10; Wil je de geselecteerde voorinstelling verwijderen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Voorinstelling opnieuw instellen</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Weet je zeker dat je de voorinstelling opnieuw wilt instellen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Deze actie kan niet ongedaan worden gemaakt. &#10; &#10; Wil je de geselecteerde voorinstelling terugzetten naar de standaardinstellingen?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Encoder</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Encoder en kwantiseerder</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Encoder die verantwoordelijk is voor het genereren van het uitvoerbestand.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Ingebouwde encoder</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Systeem</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encoder ter beschikking gesteld door het systeem.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Externe encoder, gemaakt door FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Externe encoder, gemaakt door Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Encoderopties</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Schakel de geavanceerde modus in.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Voer handmatig de parameters in om de encoder te besturen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parameters:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Lijst met parameters die worden doorgegeven aan FFmpeg. &#10; &#10; Speciale parameters: &#10; {I} is het invoerpad (de frames). &#10; {O} is het uitvoerpad (het geëxporteerd bestand). &#10; {W} is de breedte van het frame. &#10; {H} is de hoogte van het frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Om te coderen met 2-pass, voeg je eenvoudig '-pass 2' toe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Voorbeeld</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Bekijk een voorbeeld van de parameterlijst die zal worden doorgegeven aan FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codecdocumentatie</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Formaatdocumentatie</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filterdocumentatie</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif-opties</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Kleurreductie-algoritme (kwantisatie).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neuraal netwerk</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Kwantitatieve kwantisatie. Langzamer, maar goed voor meer kleuren.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Goed voor animaties met minder kleuren. Sneller, maar kan kleurstrepen veroorzaken.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Minder goed dan Octree en langzamer.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grijswaarden</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Gebruikt een vaste grijswaardenschaal waarmee het veel sneller gaat.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Meest gebruikte kleuren</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Neemt gewoon de meest gebruikte kleuren in de frames.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Bemonstering:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Bemonsteringsfactor: &#10;een waarde van 1 zal resulteren in een beter uitziende gif, maar zal trager worden weergegeven.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Kwaliteit:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Kleuren:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maximum aantal kleuren (voor elke frame)</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Gebruik een globale kleurentabel.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Kan de kwaliteit en/of grootte van het gif verminderen.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Beste</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Snelste</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Gebruik een nog sneller coderingsproces.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Kan de kwaliteit van de gif verminderen.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Lus:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif met herhaling.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Oneindig herhalen.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Aantal keer herhalen.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Transparantie inschakelen.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Maakt de volledige transparantiemodus mogelijk, waardoor de achtergrond van de gif volledig transparant is. &#10;Het chromasleutelvervangingsproces wordt genegeerd als deze optie is ingeschakeld.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Selecteer welke kleur als transparant moet worden weergegeven.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Als een kleur is geselecteerd, wordt deze geconverteerd naar transparant en wordt deze als transparant weergegeven in de gegenereerde gif. &#10;Als er geen kleur is geselecteerd, worden alle transparante kleuren (Alpha = 0%) normaal als transparant weergegeven.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Ongewijzigde pixels detecteren.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Door ongewijzigde pixels tussen de frames te analyseren en te detecteren, &#10;is het mogelijk om alleen de benodigde delen op te slaan in de gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Vervang deze pixels door een chromasleutel.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Herhaalde/ongewijzigde pixels worden vervangen door deze chromasleutel, &#10;waardoor het mogelijk is om minder kleuren per frame te gebruiken.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma sleutel:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Dither:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer-schaal:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Achtergrondkleur:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixels met alfa (transparantie) die door de geselecteerde kwantificator als ondoorzichtig worden beschouwd, worden met deze kleur gemengd voordat de gekwantificeerde kleur wordt verkregen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alfa-drempelwaarde:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Bepaalt de invoer alfawaarde waaronder de gekwantificeerde kleur transparant zal zijn.&#x0d;&#x0a; Bij waarde 0 zal het resultaat nooit transparant zijn.&#x0d;&#x0a; Bij waarde 255 worden alleen volledig transparante pixels als transparant beschouwd.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Wit-drempelwaarde:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Bepaalt de laagste ingangshelderheid om de resultaatkleur wit vast te stellen.&#x0d;&#x0a; Het beïnvloedt de helderheid van het resultaat. Een foutdiffusie dithering kan de waarde van deze parameter echter compenseren.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Direct mapping</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Indien aangevinkt, wordt de gekwantificeerde kleur bepaald door een directe mapping in plaats van de dichtstbijzijnde paletinvoer op te zoeken.&#x0d;&#x0a; Het versnelt de kwantisering, maar kan leiden tot een verhoogd contrast. Een foutdiffusie dithering kan de waarde van deze parameter echter compenseren.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Paletgrootte:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Bepaalt de maximale grootte van het palet per frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Aangepast bitniveau.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Indien aangevinkt, kan het bitniveau handmatig worden geconfigureerd.&#x0d;&#x0a; ⚠️ Waarschuwing: het hoogste bitniveau vereist mogelijk VEEL geheugen!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Pixels met alfa (transparantie) die door de geselecteerde kwantificator als ondoorzichtig worden beschouwd, worden met deze kleur gemengd voordat de gekwantificeerde kleur wordt verkregen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">Lineaire kleurruimte</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">Als deze optie is ingeschakeld, worden sommige bewerkingen (alfa-menging met achtergrondkleur, kwantiseren, dithering, het opzoeken van de dichtstbijzijnde kleuren in het palet) uitgevoerd in de lineaire kleurruimte in plaats van in de sRGB-kleurruimte. Werken in de lineaire kleurruimte is langzamer, maar levert een resultaat van betere kwaliteit op, vooral wanneer de quantizer slechts een paar kleuren gebruikt. ⚠️ Opmerking:  Als u slechts een paar kleuren gebruikt, kan de helderheid van een mogelijk verkleinde voorvertoning onjuist zijn omdat WPF het formaat in de sRGB-kleurruimte wijzigt.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Zwart-wit</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">1 bpp palet met de kleuren zwart en wit.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">4 Grijstinten</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">2 bpp palet met 4 grijstinten.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">16 Grijstinten</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">4 bpp palet met 16 grijstinten.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">256 Grijstinten</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">8 bpp palet met 256 grijstinten.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Systeemstandaard 4 bpp palet</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">4 bpp palet dat gebruik maakt van de standaard 16 sRGB kleuren.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Systeemstandaard 8 bpp palet</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">8 bpp palet dat gebruik maakt van de 'web-safe' kleuren plus transparantie.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 palet</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">8 bpp palet dat gebruikt maakt van de RGB 332 kleurruimte</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Palet optimaliseren voor elk frame met het Octree-algoritme.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Een geoptimaliseerd palet voor elk frame met het Median Cut-algoritme.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu Quantizer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Palet optimaliseren voor elk frame met het algoritme van Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Ditherer</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Sterkte:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">De sterkte van de ditherer, of 0 om de sterkte automatisch te kalibreren.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Startwaarde:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Een geheel getal dat moet worden gebruikt om een specifiek willekeurig ditheringpatroon te produceren.&#x0d;&#x0a; Laat leeg om voor elk frame een willekeurige startwaarde te gebruiken.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Geen</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Frames worden gekwantificeerd zonder mengkleuren.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentine Processing</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Indien aangevinkt, wordt de opeenvolgende lijnen heen en weer gecodeerd.&#x0d;&#x0a; Dit helpt het rimpeleffect van de foutdiffusie te verminderen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Geordend)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">Het Bayer 2x2 matrixpatroon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Het Bayer 2x2 matrixpatroon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">Het Bayer 2x2 matrixpatroon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Geordend)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">Het Bayer 4x4 matrixpatroon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Geordend)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">Het Bayer 8x8 matrixpatroon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Gestippelde halftonen (Geordend)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Een 8x8 matrix met een gestippeld halftoonpatroon.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blauwe ruis (Geordend)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Een 64x64 matrixpatroon met blauwe ruis.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson's 4x3 matrix met 6 effectieve waarden.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">De originele 3x2 matrix van Floyd and Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Een 5x3 matrix van Jarvis, Judice en Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra's 5x3 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra's 5x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra's 3x2 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Een 7x4 hexagonmatrix van Stevenson en Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Error Diffusion)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki's 5x3 matrix.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Willekeurige ruis</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Willekeurige witte ruis.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Interleaved Gradient Noise</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Niet-willekeurige verloopruis door een formule gegenereerd.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Voorbeeldweergave</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Huidig frame weergeven.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Indien aangevinkt, toont het voorbeeld het huidige frame in plaats van een standaard beeldvoorbeeld.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Automatische weergave is uitgeschakeld vanwege de hoge geheugenvereiste van de huidige instellingen. Klik om het voorbeeld te vernieuwen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Kan geen voorbeeld genereren: {0}&#x0d;&#x0a; Klik om het opnieuw te proberen.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Animatie-instellingen</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Eindeloze lus.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Indien aangevinkt, wordt de animatie oneindig herhaald.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Heen-en-weer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Indien aangevinkt, wordt de animatie heen en weer afgespeeld.&#x0d;&#x0a; Dit wordt bereikt door de frames te dupliceren. Dit gaat gepaard met een groter bestand en een langere coderingstijd.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Aantal herhalingen:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Geeft aan hoe vaak de animatie wordt afgespeeld.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Delta-frames toestaan</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Indien aangevinkt wordt geprobeerd om tijdens de codering ongewijzigde pixels te detecteren.&#x0d; &#x0a; Bij gebruik met een geoptimaliseerde kwantificator maakt deze optie het mogelijk dat een frame meer dan 256 kleuren heeft.&#x0d;&#x0a; Deze optie wordt genegeerd als de kwantificator geen transparantie gebruikt en als Bijsnijden van frames is uitgeschakeld.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta-tolerantie:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Specificeert de maximale tolerantie bij het detecteren van gewijzigde pixels.&#x0d;&#x0a; Bij waarde 0 wordt helemaal geen verschil getolereerd.&#x0d;&#x0a; Bij waarde 255 kunnen er frames zijn (of zelfs allemaal) die zonder inhoud worden toegevoegd.&#x0d;&#x0a; Redelijk bereik ligt tussen 0 en 16 voor een geoptimaliseerde kwantificator. Bij frames met vaste kleuren kunnen wat hogere waarden worden gebruikt met dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Bij een te hoge Delta-tolerantie kan het resultaat een slechte kwaliteit krijgen. Klik om de tolerantie van de delta opnieuw in te stellen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Bijsnijden van frames toestaan.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Indien aangevinkt, mag de encoder kleinere frames toevoegen dan de werkelijke resolutie.&#x0d;&#x0a; Als de optie Delta Frames is uitgeschakeld, is het alleen mogelijk om eventuele transparante randen bij te snijden.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Delta-frames toestaan wordt genegeerd omdat de huidige configuratie geen alpha gebruikt en Bijsnijden van frames toestaan niet is aangevinkt. Klik om Bijsnijden van frames in te schakelen.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Toestaan van geknipte frames heeft geen effect omdat de huidige configuratie geen alpha gebruikt en Delta-frames niet is aangevinkt. Klik om deltaframes in te schakelen.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng-opties</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Voorspelling:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Geen</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Omhoog</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Gemiddeld</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Gemengd</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng met herhaling.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Ongewijzigde pixels detecteren.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Kleur alle ongewijzigde pixels transparant.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Voorinstelling:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Geen</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Standaard</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Afbeelding</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Foto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Tekening</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Pictogram</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Verliesloze modus gebruiken</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Modus:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normaal</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Geavanceerd</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Configuratiemethode van de encoderparameters:&#10;Normaal: Gebruik standaard UI-besturingselementen.&#10;Geavanceerd: gebruik een tekstvak om de parameters in te voeren.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">De video-encoder, verantwoordelijk voor &#10; het converteren van de onbewerkte pixels naar het uitvoerbestand.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Voorinstelling:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Geen</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Zeer traag</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Langzamer</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Langzaam</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Snel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Sneller</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Zeer snel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Supersnel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultrasnel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Kwaliteit</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Gebalanceerd</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Snelheid</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Standaard</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Verliesloos</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Lossless (hoge prestaties)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Hoge prestaties</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Hoge kwaliteit</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray Disk</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Lage latentie</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Lage latentie (hoge prestaties)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Lage latentie (hoge kwaliteit)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Verhouding Coderingssnelheid/compressieverhouding, &#10; langzamere instellingen kunnen een betere compressie geven &#10; (kwaliteit bij bestandsgrootte).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardwareversn.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Uit</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Aan</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatisch selecteren</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Regelt het gebruik van speciale hardware (videobeelden).&#10;Uit: gebruikt geen speciale hardware.&#10;Aan: gebruikt speciale hardware en laat je speciale encoders selecteren.&#10;Auto: gebruikt speciale hardware en automatisch selecteert de juiste encoder, indien mogelijk.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixel-formaat:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatisch</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Videosynchronisatiemethode.&#10;Auto: Kiest tussen 1 en 2 afhankelijk van de mogelijkheden van muxer (formaat).&#10;Passthrough: elk frame wordt met zijn tijdstempels doorgegeven aan de encoder.&#10;Constant: frames worden gedupliceerd en laten vallen om precies de gevraagde constante framesnelheid te bereiken. &#10; Variabel: frames worden doorgelaten met hun tijdstempel of worden verwijderd om te voorkomen dat 2 frames dezelfde tijdstempel hebben.&#10;Drop: als doorvoer maar vernietigt alle tijdstempels , waardoor de encoder nieuwe tijdstempels genereert op basis van framerate.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Constante framerate</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Variabele framerate</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Frame rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Aangepast</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Ronde:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constante-snelheidsfactor. &#10; Instelling voor kwaliteits- en tariefcontrole. &#10; Laat het veld leeg als je deze eigenschap niet wilt instellen.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Kwaliteitsniveau:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Kleinere waarden betekenen hogere kwaliteit.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Doelvideo-bitsnelheid.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitrate modus:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constant</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variabel</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Min rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimale bitrate-tolerantie. &#10; Het handigst bij gebruik van de CBR-modus. &#10; Laat het leeg of stel het in op nul &#10; als je deze eigenschap niet wilt instellen.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Max rate:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximale bitrate-tolerantie. &#10; Vereist dat ook de buffergrootte wordt ingesteld. &#10; Laat het leeg of stel het in op nul &#10; als je deze eigenschap niet wilt instellen.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Buffergrootte:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">De buffergrootte van de rate-controle. &#10; Laat het leeg of stel het in op nul &#10; als je deze eigenschap niet wilt instellen.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">De afbeeldingen in zip inpakken.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exporteert de afbeeldingen in een gecomprimeerde map.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Afbeelding comprimeren.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">De afbeelding comprimeren met het RLE-algoritme.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Tijdlijngegevens opslaan.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exporteert de tijden van de frames, in plaats van alleen de frames.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Opties opslaan</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Gedeeltelijk exporteren.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Sla het bestand op in een map naar keuze.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Overschrijven?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Waarschuwen</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Alleen waarschuwen als er al een bestand met dezelfde naam bestaat.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Vragen</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Vraagt of de gebruiker wil dat het bestand wordt overschreven.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Toestaan</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Overschrijft gewoon het bestand.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Project ook opslaan (dezelfde map, dezelfde bestandsnaam).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Bestand uploaden.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Naar klembord kopiëren.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Bestand</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Kopieert het resultaatbestand naar het klembord.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Maplocatie</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Kopieert maplocatie van het resultaatbestand naar het klembord.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Bestandslocatie</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Kopieert pad van het resultaatbestand naar het klembord.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Kopieert de link die is gegenereerd door de upload-dienst naar het klembord.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Aanvullende opdrachten uitvoeren.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Voer de opdrachten in die na de codering moeten worden uitgevoerd.&#10; Om meerdere opdrachten uit te voeren, typt u elk op een gescheiden regel.&#10;Macro's: &#10;{p} = bestandsuitvoer-pad.&#10;{f} = uitvoermap-pad.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Gedeeltelijke export</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Modus:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Selecteer de gedeeltelijke exportmethode.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expressie</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exporteert delen van de animatie op basis van een eenvoudige uitdrukking.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Frame bereik</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exporteert maar een deel van de animatie binnen het framebereik.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Tijdspanne</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exporteert maar een deel van de animatie binnen het tijdsbestek.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Selectie</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exporteert alleen de frames die in de tijdlijn zijn geselecteerd.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Geen frame geselecteerd.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 frame geselecteerd.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} frames geselecteerd.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Van:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Aan:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Expressie:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Typ framenummers gescheiden door een komma of &#10;framereeksen gescheiden door een minteken: &#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Bestand</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Doelmap.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Selecteer de uitvoermap</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Locatie kiezen.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Bestandsformaat</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Bestandsnaam. Datum/tijd-notatie invoegen tussen '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animatie</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Nummer in bestandsnaam verhogen</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Nummer in bestandsnaam verminderen</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Een bestand met dezelfde naam bestaat al.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Op klembord bewaren.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Geef aan waar het uitvoerbestand moet worden opgeslagen (map, klembord of uploadlocatie).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Je hebt de bestandsextensie niet geselecteerd.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Bij het selecteren van de geavanceerde modus, moet je de parameters in het veld parameters typen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">De speciale parameters {I} (invoer) en/of {O} (uitvoer) ontbreken in het parameterveld.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Om na codering opdrachten uit te laten voeren, zul je iets in het opdrachten-tekstveld moeten noteren.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Je moet ten minste één frame selecteren als je de optie hebt om alleen geselecteerde frames te exporteren.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">De uitdrukking om het project gedeeltelijk te exporteren is ongeldig.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Geen upload-dienst geselecteerd. Geef een een bestemming op.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Uploaden naar de geselecteerde dienst is niet beschikbaar, want deze dienst was nog niet geautoriseerd. Ga naar Instellingen --> Upload-diensten om deze dienst te autoriseren</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">De optie link kopiëren is niet beschikbaar, omdat er nog geen bestand voor uploaden is geselecteerd.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Geef een locatie op voor het bestand.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">De locatie voor het exportbestand bestaat niet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">De locatie voor het exportbestand bevat een of meer ongeldige tekens. Corrigeer de locatie van map.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Kies een bestandsnaam.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">De bestandsnaam van het exportbestand bevat een of meer ongeldige tekens. Corrigeer de bestandsnaam.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Bestandsnaam bestaat al. Wijzig de optie om het bestand te overschrijven of kies andere bestandsnaam.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Er is al een project met dezelfde bestandsnaam. Stel in om te overschrijven of kies een andere bestandsnaam of map.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">De actie is afgebroken.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Uploaden</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Selecteer de uploadvoorinstelling, die details bevat over de service die wordt gebruikt voor het uploaden.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Deze uploadservice legt limieten op.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Voeg een nieuwe uploadvoorinstelling toe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Uploadvoorinstelling bewerken</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Bekijk de uploadgeschiedenis van deze voorinstelling.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Verwijder de geselecteerde uploadvoorinstelling.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Selecteer een uploadvoorinstelling</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Kies er een uit deze lijst.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Geen uploadvoorinstelling beschikbaar voor dit formaat</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Voeg een voorinstelling toe met behulp van de onderstaande knop.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">De uploadvoorinstelling verwijderen</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Weet je zeker dat je de uploadvoorinstelling wilt verwijderen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Deze actie kan niet ongedaan worden gemaakt.&#10;&#10;Wil je de geselecteerde uploadvoorinstelling verwijderen?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Frames exporteren</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Weet je zeker dat je de frames wilt exporteren?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Deze actie zal {0} frames direct in geselecteerde map exporteren</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Overschrijven</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Mag het bestand overschreven worden?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Een bestand met de naam '{0}' bestaat al in deze map.\\r\\nMag dit overschreven worden?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Mogen deze bestanden overschreven worden?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Een of meer bestanden met dezelfde naam staan al in deze map.\\r\\nMogen deze overschreven worden?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Opdrachtweergave</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Opdracht</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Bronmap</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Doelmap</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Reacties</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Verzenden</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Voorvertoning</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Reactie versturen</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Onderwerp *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Bericht *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Als je een bug ervaart, vergeet dan niet om me stap voor stap uit te leggen hoe je deze hebt gekregen.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Type reactie</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Suggestie</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Probleem/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Je e-mailadres (optioneel)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Geef je bericht een onderwerp.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Je moet een bericht typen in de feedback.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Je moet uw e-mailadres typen om een antwoord van de ontwikkelaar te ontvangen.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Verzending in de achtergrond… Dit venster sluit binnenkort.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Bijlagen (optioneel, 20MB maximum)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Bijlagen toevoegen</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Alle bijlagen verwijderen</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Ik begrijp Engels</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">en (Braziliaans/Europees) Portugees.</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Dit is wat je verstuurt, incl. alle bijlagen.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Probleemanalyse</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Ontbreekt er een venster?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Als een van de vensters ontbreekt (buiten het scherm),&#10;gebruik dan de onderstaande opties om de positie opnieuw in te stellen.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Hier bevinden zich alle vensters:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Hier komen alle vensters de volgende keer:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Alle vensters naar het hoofdscherm verplaatsen.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">De startposities van alle vensters herstellen.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normaal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Cursief</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Schuin</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Zwaar</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Vet</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Half vet</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra zwaar</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra vet</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra licht</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Zwaar</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Licht</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normaal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regulier</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Halfvet</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Dun</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra zwart</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra vet</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra licht</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Boven</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Midden</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Onder</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Uitrekken</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Links uitlijnen</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centreren</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Rechts uitlijnen</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontaal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Verticaal</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Links</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Rechts</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Gecentreerd</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Uitlijnen</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Geen</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Understrepen</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Doorhalen</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Overstrepen</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Basis</s:String>\n</ResourceDictionary>\n"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.pl.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">OK</s:String>\n    <s:String x:Key=\"S.Back\">Cofnij</s:String>\n    <s:String x:Key=\"S.Cancel\">Anuluj</s:String>\n    <s:String x:Key=\"S.Yes\">Tak</s:String>\n    <s:String x:Key=\"S.No\">Nie</s:String>\n    <s:String x:Key=\"S.Add\">Dodaj</s:String>\n    <s:String x:Key=\"S.Edit\">Edytuj</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Tytuł</s:String>\n    <s:String x:Key=\"S.Description\">Opis</s:String>\n    <s:String x:Key=\"S.SelectColor\">Kliknij tutaj, aby wybrać kolor.</s:String>\n    <!--<s:String x:Key=\"S.Documentation\">Click to navigate to the documentation.</s:String>-->\n    <s:String x:Key=\"S.Suppress\">Zwolnij</s:String>\n    <s:String x:Key=\"S.Preview\">Podgląd</s:String>\n    <s:String x:Key=\"S.Size\">Rozmiar</s:String>\n    <s:String x:Key=\"S.Background\">Tło</s:String>\n    <s:String x:Key=\"S.Color\">Kolor:</s:String>\n    <s:String x:Key=\"S.Delay\">Opóźnienie</s:String>\n    <s:String x:Key=\"S.DelayMs\">Opóźnienie (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Wartość -+ (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Wartość skali</s:String>\n    <s:String x:Key=\"S.Margin\">Margines:</s:String>\n    <s:String x:Key=\"S.Padding\">Padding:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Minimalna wysokość:</s:String>\n    <!--<s:String x:Key=\"S.AndOr\">and/or</s:String>-->\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">O nie, aplikacja przestała działać :(</s:String>\n    <s:String x:Key=\"S.Required\">Pole wymagane.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Brakująca zależność</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 nie jest zainstalowany</s:String>\n    <!--<s:String x:Key=\"S.Warning.Net.Message\">In order to properly use this app, you need to download the correct version of the .Net Framework.&#10;Would you like to open the web page to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Title\">Only one instance permitted</s:String>-->\n    <s:String x:Key=\"S.Warning.Single.Header\">Aplikacja już jest uruchomiona</s:String>\n    <!--<s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif is already running, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.SavingSettings.Title\">Saving the settings</s:String>-->\n    <!--<s:String x:Key=\"S.SavingSettings.Instruction\">Would you like to try to save it again?</s:String>-->\n    <!--<s:String x:Key=\"S.SavingSettings.Message\">Looks like ScreenToGif does not have enough privileges to save the settings to the disk.&#10;&#10;Would you like to try again, but this time using administrative privileges?</s:String>-->\n    \n    <s:String x:Key=\"S.Exiting.Title\">Zamykanie ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Czy jesteś pewien, że chcesz zakończyć?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Wszystkie okna zostaną zamknięte i ikonka programu zniknie z zasobnika.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Title\">Switch Graphics Adapter</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Instruction\">Switch to the correct graphics adapter to capture the selected screen</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Message\">Due to a limitation in DirectX, ScreenToGif must be running on the same graphics adapter as the screen being captured.</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Action\">Switch the graphics adapter set for ScreenToGif by opening Windows Settings > System > Display > Graphics Settings, or by clicking on the link below.</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Switch the graphics adapter for ScreenToGif by opening the graphics settings of your graphics adapter.</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Graphics.Switch\">Open Windows Settings</s:String>-->\n    \n    <!--Keys-->\n    <!--<s:String x:Key=\"S.Keys.Enter\">Enter</s:String>  -->\n    <!--<s:String x:Key=\"S.Keys.Esc\">Esc</s:String>  -->\n    <s:String x:Key=\"S.Keys.Space\">Spacja</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Prawy przycisk</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nowe nagranie ekranu</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nowe nagranie z kamery</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nowe nagranie tablicy</s:String>\n    <s:String x:Key=\"S.Exit\">Wyjście</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nowe nagranie ekranu</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nowe nagranie z kamery</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nowe nagranie tablicy</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nowa animacja</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Dodaj nagranie ekranu</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Dodaj nagranie z kamery</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Dodaj nagranie tablicy</s:String>\n    <!--<s:String x:Key=\"S.Command.InsertFromMedia\">Insert from media (images and videos)</s:String>-->\n    <s:String x:Key=\"S.Command.SaveAs\">Zapisz jako...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Otwórz pliki (obrazy, wideo i projekty)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Wczytaj ostatni projekt</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Anuluj obecny projekt</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Nadpisz opóźnienie klatek</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Zwiększ/zmniejsz opóźnienie klatek</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Skaluj opóźnienie klatek</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Ustaw zoom na 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Dopasuj okno do rozmiaru klatki</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Dopasuj obraz do dostępnego rozmiaru okna</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Wybierz pierwszą klatkę</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Wybierz poprzednią klatkę</s:String>\n    <s:String x:Key=\"S.Command.Play\">Odtwórz animację</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Wybierz następną klatkę</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Wybierz ostatnią klatkę</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Cofnij</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Powtórz</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Cofnij wszystkie zmiany w projekcie</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Kopiuj wybrane klatki i przechowuj je w schowku systemowym</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Wytnij wybrane klatki i przechowuj je w schowu systemowym</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Wklej klatki ze schowka</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Usuń wszystkie wybrane klatki</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Usuń wszystkie poprzednie klatki</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Usuń wszystkie następne klatki</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Usuń duplikaty</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Zmniejsz liczebność klatek</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Utwórz płynne zapętlenie</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Odwróć animację</s:String>\n    <!--<s:String x:Key=\"S.Command.Yoyo\">Makes the animation go forward and backwards</s:String>-->\n    <s:String x:Key=\"S.Command.MoveLeft\">Przesuń wybraną klatkę w lewo</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Przesuń wybraną klatkę w prawo</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Przeskaluj wszystkie klatki</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Przytnij wszystkie klatki</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Przerzuć lub obróć klatki</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Dodaj napis</s:String>\n    <!--<s:String x:Key=\"S.Command.FreeText\">Add a free-floating text</s:String>-->\n    <s:String x:Key=\"S.Command.TitleFrame\">Dodaj klatkę z tytułem</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Dodaj klawisze wcisnięte podczas nagrania</s:String>\n    <!--<s:String x:Key=\"S.Command.FreeDrawing\">Draw free forms</s:String>-->\n    <s:String x:Key=\"S.Command.Shapes\">Dodaj kształt</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Kliknięcia myszy</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Wybierz obraz i dodaj jako znak wodny</s:String>\n    <s:String x:Key=\"S.Command.Border\">Dodaj obramowanie</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Dodaj cień</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Ukryj wrażliwe elementy na klatkach</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Użyj tego narzędzia aby wybrać które części nie powinny zostać statyczne w trakcie animacji</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Pasek postępu lub tekst ze szczegółami nagrania</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Wybierz wszystkie klatki</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Przejdź do klatki według indeksu</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Odwróć zaznaczenie klatek</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Odznacz wszystkie klatki</s:String>\n    <!--<s:String x:Key=\"S.Command.Fade\">Fade transition</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Slide\">Slide transition</s:String>-->\n    <s:String x:Key=\"S.Command.ClearAll\">Usuń wszystkie skończone zadania.</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Przesuń w góre</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Przesuń w dół</s:String>\n    <s:String x:Key=\"S.Command.Add\">Dodaj</s:String>\n    <s:String x:Key=\"S.Command.Open\">Otwórz</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Edytuj wybrany element</s:String>\n    <s:String x:Key=\"S.Command.Save\">Zapisz wybrany element</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Usuń wybrany element</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Pokaż historię</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - uruchomienie</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Nagrywanie</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Otwiera nagrywanie ekranu, gdzie łatwo możesz rozpocząć przechwytywanie swojego monitora.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Kamera</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Otwiera nagrywanie z kamery.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Tablica</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Otwiera tablicę, gdzie możesz nagrywać swoje rysunki.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Edytor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Otwiera okno edytora, głównego narzędzia tej aplikacji, gdzie łatwo możesz nagrywać i edytować.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Opcje</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nowa wersja dostępna</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Pobiera najnowszą wersję ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Aktualizacja</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Nowa aktualizacja jest dostępna</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nowa wersja!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Nowa wersja dostępna, numer {0}! Kliknij tu po więcej informacji.</s:String>\n    <!--<s:String x:Key=\"S.Updater.NoNewRelease.Info\">It appears that your system is no longer supported or something changed in the update system. Try downloading it manually from the website.</s:String>-->\n    <s:String x:Key=\"S.Updater.Version\">Wersja</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Przenośny</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Instalator</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Co nowego?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Poprawki:</s:String>\n    <!--<s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">A new version is available for you to download.&#x0d;Would you like to open the browser to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.RunAfter\">Execute the app after the update.</s:String>-->\n    <s:String x:Key=\"S.Updater.Download\">Pobierz</s:String>\n    <!--<s:String x:Key=\"S.Updater.Install\">Install</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.InstallManually\">Install manually</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Downloading\">Downloading...</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Show\">It was not possible to show the download details.</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Download\">It was not possible to download the update.</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Encoding\">You need to wait for all encodings to finish before updating.</s:String>-->\n    \n    <!--Downloader-->\n    <!--<s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Downloader</s:String>-->\n    <!--<s:String x:Key=\"S.Downloader.Header\">Downloader</s:String>-->\n    <s:String x:Key=\"S.Downloader.Size\">{0} z {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Opcje</s:String>\n    <s:String x:Key=\"S.Options.App\">Aplikacja</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Rejestrator</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Edytor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Zautomatyzowane zadania</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Skróty klawiszowe</s:String>\n    <s:String x:Key=\"S.Options.Language\">Język</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Pliki tymczasowe</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Dodatki</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Usługi hostingowe</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Dotacja</s:String>\n    <s:String x:Key=\"S.Options.About\">O programie</s:String>\n    <s:String x:Key=\"S.Options.Other\">Inne</s:String>\n    <!--<s:String x:Key=\"S.Options.Warning.Follow.Header\">Missing shortcut key for cursor following</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.Follow.Message\">In order to use the mouse cursor following feature, you must set a shortcut key to toggle it when needed.</s:String>-->\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Uruchamianie</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Uruchom&#10;ręcznie</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Aplikacja uruchomi się tylko jeśli to zrobisz samemu.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Uruchom razem z&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Aplikacja uruchomi się po starcie Windows</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossible to alternate between startup modes.</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Pozwalaj na jedno&#10;uruchomienie na raz</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">You'll be able to run the app once per user and executable,&#10;meaning that different user or executable instances can co-exist.&#10;When trying to execute the app again, the second instance will try to give focus to the first one and end itself.</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Pozwalaj na wiele&#10;uruchomień na raz</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">You'll be able to run the app multiple times at the same time, without restriction.</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Uruchom w zasobniku systemowym</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(System tray icon will be visible while this option is active)</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Uruchom na:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Okno uruchomienia</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Nagrywanie ekranu</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Nagrywanie z kamery</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Tablica</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Okno edytora</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Window which shows up first when the app starts)</s:String>-->\n    <s:String x:Key=\"S.Options.App.Theme\">Motyw aplikacji</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Schemat kolorów</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Bardzo jasny</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Jasny</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Średni</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Ciemny</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Bardzo ciemny</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Jak systemowy</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Niestandardowy...</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Przykładowe kolory</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Ikona zasobnika systemowego</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Wyświetl aplikację w zasobniku (obszar powiadomień).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Pozostaw aplikację otwartą, nawet jeżeli wszystkie okna są zamknięte.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Nic nie rób</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Otwóz okno</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Brak okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Zminimalizuj/przywróć wszystkie okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Zminimalizuj wszystkie okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Przywróć wszystkie okna</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Lewy przycisk:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Lewy przycisk (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Środkowy przycisk:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Okno:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Lub otwórz:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Ogólne</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Workaround for the 'Not enough quota...' crash.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Potwierdź przed zamknięciem aplikacji (poprzez komendę 'Wyjdź').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Wyłącz akcelerację sprzętową.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(The user interface will be rendered via software mode)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Sprawdź dostępność aktualizacji.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Zaktualizowane tłumaczenia zostaną pobrane i zainstalowane automatycznie)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Sprawdzaj aktualizacje.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Automatically install updates after closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.PortableUpdate\">Force the download of the portable version.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Requires a manual installation by unzipping and replacing the executable)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Force the update to run with elevated privileges.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.PromptToInstall\">Prompt me before the installation starts.</s:String>-->\n\n    <!--Options • Recorder-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Stary</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nowy</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Częstotliwość przwchwytywania</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Ręczna</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">User interaction</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Klatki zostaną przechwycone za każdym razem gdy coś naciśniesz lub napiszesz.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Co sekundę</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Co minutę</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Co godzinę</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Trigger delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(In ms, each frame capture will wait this amount of time before starting)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Tryb przechwytywania</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Use the older capture method, which is slower and may not work capturing games,&#10;but requires no additional plug-ins.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Use the Desktop Duplication API capture method, which is faster and&#10;is able to capture fullscreen games, but requires Windows 8 or newer.</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.File\">Zapisz do&#10;pliku</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.File.Info\">Each frame captured will be saved directly as an image on disk.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache\">Memory&#10;cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache.Info\">Each frame captured will be stored as a pixel array on memory first (may be compressed before).</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression\">Compression:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Slower but likely more optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Faster but likely less optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">No compression</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(No compression should be performed while capturing frames)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize\">Cache size:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. After reaching this size, the data will be written/flushed to the disk)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Zapobiebaj przechwytywaniu całych czarnych klatek</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Prevents BitBlt with a memory cache from wrongfully resulting in frames with all pixels as black)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Pokaż kursor myszy na nagraniu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Wybierz kolor kursora</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Stała częstotliwość klatek.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Stałe opóźnienie, które nie zmienia się podczas opóźnienia nagrywania)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Only capture when something changes.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(A frame will only be captured when something is changed within the capture region)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Force memory cleanup during capture.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduces memory usage during capture, but decreases performance)</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines\">Guidelines</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Rule of thirds</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Click to toggle the display&#10;of a rule of thirds guideline.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Crosshair</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Click to toggle the display&#10;of a crosshair guideline.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">The guidelines will only be displayed while the recorder is paused or stopped.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Ukryj pasek tytułowy (tryb cienki).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Włącz powiększanie ekranu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Włącza powiększanie ekranu podczas wybierania obszaru nagrywania)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animate the screen region border during selection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animate using the 'marching ants' style)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Enable selection panning.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Displays an adorner near the corner of the selection, allowing the movement of the recording area)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compact\">Compact mode.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Shows a smaller version of the recorder command panel)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Display the discard button also while recording.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normally, it's visible only while paused)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Improve screen selection performance.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduces the lag during screen selection by displaying a static view of the screen)</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Zapamiętaj poprzedni rozmiar przechwytywanego obszaru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Zapamiętają poprzednią pozycję przechwytywanego obszaru.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Użyj odliczania przed startem.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(w sekundach, czeka przed rozpoczęciem nagrywania)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Włącz śledzenie kursora</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Obszar nagrywania zostanie przepozycjonowany do lokalizacji kursora)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Buffer margin in pixels, where the recording area starts getting repositioned)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Additional buffer margin in pixels, where the UI starts getting hidden)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Zapytaj przed odrzuceniem nagrania</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Tło edytora</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Wielkość siatki</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Bardzo mały</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Mały</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Średni</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Duży</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Przeogromne</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Lubię duże kwadraty ( ͡° ͜ʖ ͡°)</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Jestem ślepy</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Niestandardowy</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Wysokość</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Szerokość</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Zastosuj</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Podstawowy kolor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Kolor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Dziwny kolor</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Rozszerz pasek tytułowy.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Automatycznie dopasuj rozmiar okna w zależności od rozmiaru klatki, zaraz po załadowaniu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Automatycznie dopasuj rozmiar klatki w zależności od rozmiaru okna, zaraz po załadowaniu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Potwierdź przed usunięciem klatek.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Potwierdź przed odrzuceniem projektu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Potwierdź przed zamknięciem edytora (gdy jest otwarty projekt).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Włącz potrójne kliknięcie do zaznaczenia tekstu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Rysuj kontur napisów na zewnątrz liter.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Pomiń klatki jeżeli wymagane.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Pomiń klatkę jeżeli podgląd nie jest w stanie wyświetlić jej na czas)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Pomiń klatkę jeżeli podgląd nie jest w stanie wyświetlić jej na czas.</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impose a limit to the undo/redo history.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Starsze akcje zostaną usunięte po osiągnięciu limitu)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maksimum przechowywanych akcji)</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Sync the output folder among presets.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Presets will use the same output path)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Also sync the filename.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Presets will also use the same filename)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Only sync among presets of the same file type.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Only presets of the same file type will be in sync)</s:String>-->\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Zautomatyzowane zadanie</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista zautomatyzowanych zadań</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Zadanie</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Szczegóły</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Wybierz zadnie)</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Select a task above</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Info\">These tasks are executed sequentially from the top of the list to the bottom.&#10;It happens when you first open a project using the editor.</s:String>-->\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globalne</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Nagrywanie ekranu:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Otwiera domyślne nagrywanie ekranu)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Nagrywanie kamery:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Otwiera nagrywanie kamery)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Nagrywanie tablicy:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Otwiera nagrywanie tablicy, gdzie możesz nagrywać swoje rysunki)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Edytor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Otwiera nowe okna edytora)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Opcje:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Otwiera okno opcji. Może być otwarte tylko jedno naraz)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Wyjście:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Zamyka wszystkie okna i usuwa aplikację z zasobnika)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Nagrywanie</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Start/Pauza:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Zaczyna lub pauzuje nagrywanie. Wykonuje zrzuty ekranu, jeżeli tryb migawki jest włączony)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stop:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Zatrzymuje nagrywanie i otwiera edytor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Odrzuć:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Odrzuca aktywne nagrywanie, jeśli jest zapauzowane)</s:String>\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Cursor following:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Toggles the adjustment of the recording area based on the position of the cursor)</s:String>-->\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Wyłącz następujące:</s:String>\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Temporarily disables the adjustment of the recording area based on the position of the cursor, only modifier keys accepted)</s:String>-->\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Kliknij, aby ustawić aktywne pole, a potem naciśnij żądane klawisze i modyfikatory.&#10;Niektóre kombinacje klawiszy nie są dozwolone.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Język aplikacji</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Wykryj automatycznie</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Obecny język systemu (jeżeli dostępny)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Chciałbyś przetłumaczyć moją aplikację?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Kliknij tutaj, żeby przeczytać wskazówki oraz pobrać aplikację do tłumaczenia.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Następnie,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">kliknij tutaj, aby zaimportować</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">i przetestować twoje tłumaczenia.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Wyślij je do mnie przez</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">kiedy skończysz tłumaczyć.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Kliknij, żeby otworzyć stronę z najnowszymi plikami do tłumaczenia</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Otwiera stronę importu</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Otwiera twoją aplikację do emaili</s:String>\n    \n    <!--Options • Storage-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} free of {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Check\">Check again how much space left there is.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Clear\">Clear the cache folder.&#10;You'll be able to decide if you want to keep recent projects or not.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Na aktualnie ustawionym dysku jest mało miejsca. Proszę o wyczyszczenie folderu temp lub zmianę lokalizacji.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible to retrieve the drive details.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.None\">No files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.None\">No folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} folder</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in use</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths\">Paths</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Wybierz lokalizację dla plików tymczasowych</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Wybierz lokalizację dla plików z logami błędów</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Browse\">Browse the selected folder.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Settings\">Lokalizacja ustawień</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Nie istnieje</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Utwórz pusty plik z ustawieniami lokalnymi.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Usuń plik z ustawieniami.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Otwórz folder z plikiem ustawień.&#x0d;Przytrzymaj Ctrl podczas kliknięcia w plik, jeżeli to możliwe.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Sposób ładowania ustawień: Default ◄ AppData ◄ Local.&#x0d;• Jeżeli nie ma pliku z ustawieniami z folderze Local, aplikacja szuka go w folderze AppData, Default jest używany jeżeli nie ma żadnego pliku z ustawieniami.&#x0d;• Jeżeli nie ma żadnych lokalnych ustawień, wszystkie ustawienia są zapisywane w pliku w folderze AppData.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.DeleteEverything\">Delete all files from cache when closing the app.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Zapytaj przed usunięciem plików z pamięci podręcznej.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Automatycznie usuwaj stare projekty.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Podczas otwierania edytora, projekty starsze niż 5 dni zostaną usunięte w tle.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(w dniach, każdy projekt starszy niż to będzie usunięty po otwarciu edytora)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Clear Cache</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Czy chcesz upróżnić katalog pamięci podręcznej?</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Info\">When you create a recording or open something to edit, a project is created and stored inside the cache folder.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Question\">Would you like to remove these projects from the cache folder?</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Nie usuwaj ostatnich projektów.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Only the projects older than {0} days, that are not currently in use, will be removed)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(All the projects, that are not currently in use, will be removed)</s:String>-->\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Tryb:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Wyłączone</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manualne</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Systemowe</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Używa proxy systemowego)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Nazwa użytkownika:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Hasło:</s:String>\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Presets\">Upload presets</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Service\">Service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Title\">Title</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Description\">Description</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Enabled</s:String>-->\n    \n     <!--Options • Upload > Preset-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Title\">Upload Service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Select\">Select a service</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Select an upload service above</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Custom\">Custom</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Enable\">Enable this preset.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Details\">Details</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Name\">Name:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Description\">Description:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode\">Mode:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonymous</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Authenticated</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Authorization</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Get token</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Token\">Paste the OAuth token here</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Username\">Username:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Password\">Password:</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autoryzuj</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.NotStored\">The username and password will not be stored.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Options\">Options</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Użyj bezpośrednich linków.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Album\">Album</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">You must give this preset an unique name.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">The name is already in use by another upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">When in authenticated mode, you must finish the authentication process.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">You must provide your username and password to authorize this app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">It was not possible to get the authorization token.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Żeby zautoryzować tę aplikację, musisz podać token autoryzacyjny.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Authorization failed. Check if everything is right and try again in a few seconds.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Nie można było załadować listy albumów.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Authorization completed.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Nie zautoryzowano.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Autoryzacja wygasła w: {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autoryzacja ważna do: {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Użyj linków do rozszerzenia Gifv zamiast Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Prześlij gify do wybranego albumu.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Pytaj przed przesłaniem</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Reload album list.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Defaults</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Ask me to fill out the details of the upload.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url type:</s:String>-->\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Wybierz album (opcjonalne)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Jeżeli chcesz, możesz wybrać docelowy album:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details\">Upload details (optional)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Upload details</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Title:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Description:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tags:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separate tags by using a semi-colon ( ; )</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Only display for those accessing via direct link.</s:String>-->\n    \n    <!--Options • Upload > History-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Title\">Upload history</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Date\">Date</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Preset\">Preset</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Successful\">Successful?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Remove\">Delete history entry.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Lower quality:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Deletion link:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Are you sure that you want to delete the history entry?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.History.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected history entry?</s:String>-->\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Dostępne zewnętrzne narzędzia</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Kliknij tutaj by pobrać&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Pobieranie...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Pobrano&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Kliknij tutaj by otworzyć właściwości pliku</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Aplikacje dostarczane przez Microsoft Store, nie mogą pobierać innych aplikacji. Musisz pobrać je ręcznie.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Lokalizacja FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Wybierz lokalizację FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Plik wykonywalny FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Ścieżka do FFMpeg zawiera jeden lub więcej nieprawidłowych znaków. Wybierz właściwą lokalizację FFMpeg.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">Wersja FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Lokalizacja Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Wybierz lokalizację Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Biblioteka Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Ścieżka do Gifski zawiera jeden lub więcej nieprawidłowych znaków. Proszę, wybierz właściwą ścieżkę.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licencja FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licencja Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Licencja SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Brak uprawnień do zapisu do katalogu</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.Permission.Observation\">It's not possible to save the download in the folder due to a lack of write permission.&#10;&#10;Would you like to start the downloader with administrative rights to finish the download?</s:String>-->\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Wsparcie</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Wesprzyj autora - $</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Wesprzyj autora - €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Otwiera stronę Paypala. Wybrana waluta: dolar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Otwiera stronę Paypala. Wybrana waluta: euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Otwiera stronę Paypala. Musisz wybrać walutę.</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe\">Subscribe</s:String>-->\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Wersprzyj co miesiąc przez Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Wesprzyj co miesiąc przez Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Podaruj gry</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Podaruj gry przez Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Podaruj gry przez GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Zapłac za kawę przez Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Kryptowaluty</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Skopiuj address BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Wsparcie</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Jeśli chcesz wesprzez projekt :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Wersja:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Sprawdź uaktualnienia</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Posiadasz najnowszą wersję.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Autor: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Wersja z Microsoft Store. Niektóre funkcjonalności wyłączone ze względu na wymuszane polityki.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Kontakt</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Dołącz do serwera</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Odwiedź stronę</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Dołącz do pokoju</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Sprawy techniczne</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licencja:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Ta aplikacja jest kompletnie darmowa)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Kod źródłowy:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Polityka prywatności:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Duże podziękowania dla:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Wszystkich ludzi, którzy mnie wspierają, przekazują opinie i/lub dotacje.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Lokalizacja</s:String>\n    <!--<s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>-->\n    <s:String x:Key=\"S.Localization.Recognized\">Rozpoznano jako {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Nie rozpoznano.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Ostatni na dole plik jest używany.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Aby użyć twojego pliku, przenieś go na sam dół listy.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Zduplikowany kod języka</s:String>\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>-->\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Nieznany język</s:String>\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Nagrywanie</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pauza</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Kontynuuj</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Stop</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Odrzuć</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Snap</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Wysokość</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Szerokość</s:String>\n    <!--<s:String x:Key=\"S.Recorder.CursorFollowing\">Cursor following is enabled.</s:String>-->\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Interaction.Short\">interactions</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fps\">Maksymalna liczba klatek na sekundę</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.ClickOrPress\">Click or press keys to capture</s:String>-->\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Zrzut selektywny (Przeciągnij i upuść, by zrobić zrzut)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Przed startem</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Zapauzowane)</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.PreStarting\">Pre-starting...</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Timer.Elapsed\">Elapsed capture time.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Timer.Total\">Total frame count:</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Timer.Manual\">Captured manually:</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Timer.Paused\">The capture is paused.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Timer.Imprecise\">Your computer does not support an accurate capture mode,&#10;which means that the target frame rate may never be achieved.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">It was not possible to capture the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">It was not possible to capture the screen. The capture method returned no frame after 5 tries.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">It was not possible to start/pause capturing the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 or newer is required for capturing the screen using the Desktop Duplication API.</s:String>-->\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Obszar</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Area.Select\">Select an area</s:String>-->\n    <s:String x:Key=\"S.Recorder.Window\">Okno</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Window.Select\">Select a window</s:String>-->\n    <s:String x:Key=\"S.Recorder.Screen\">Ekran</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Screen.Select\">Select a screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Internal screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Generic screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Graphics adapter: {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resolution: {0} x {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Native resolution: {0} x {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Move\">Drag to move&#10;the selection.</s:String>-->\n    <s:String x:Key=\"S.Recorder.Accept\">Akceptuj</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Ponów</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Anuluj zaznaczenie (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Kliknij i przeciągnij aby zaznaczyć obszar tego ekranu</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Kliknij i przeciągnij aby wybrać obszar</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Kliknij tutaj by wybrać te okno</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Kliknij tutaj by wybrać ten ekran</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Naciśnij ESC, aby anulować</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Splash.Title\">Press {0} to stop the recording</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Splash.Subtitle\">The recorder window will be minimized,&#10;restore it or press {0} to pause the capture</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Discard.Title\">Discard recording</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Discard.Instruction\">Are you sure that you want to discard the recording?</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Discard.Message\">This action will discard the recording, removing all frames.&#x0d;You can't undo this operation.</s:String>-->\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Nagrywanie z kamery</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Nie znaleziono urządzeń wideo :c</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Sprawdzanie urządzeń wideo.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Skala: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Zmień skalę wideo.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Nagrywanie tablicy</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Automatyczne nagrywanie</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Włącz nagrywanie podczas rysowania.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Przytrzymaj]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Wybór koloru</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Wybierz kolor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Czerwony</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Zielony</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Niebieski</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Kolor początkowy</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Aktualny kolor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Ostatni kolor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Przeciągnij&#10;aby wybrać kolory</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Kliknij i przeciągnij&#x0d;aby wybrać kolory ze swojego ekranu</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Podgląd wyjątków</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Otwórz wewnętrzne wyjątki</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Typ wyjątku</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Wiadomość</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Stos</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Źródło</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Stało się coś złego.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Zgłoś</s:String>\n\n    <!--Presets-->\n    <!--<s:String x:Key=\"S.Preset.Title\">Preset</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Encoder\">Encoder</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Name\">Name</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Description\">Description</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Other\">Other</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.AutoSave\">Automatically save when an option gets modified.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Manual\">All changes to this preset settings (encoding and exporting settings) need to be saved manually by pressing the save button.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Info.Automatic\">All changes to this preset settings (encoding and exporting settings) will be saved automatically.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Readonly\">Some of the properties of a default preset are read-only.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.Name\">You must give a name to this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Warning.SameName\">There's already a preset with the same name.</s:String>-->\n    \n    <!--Presets • Listing-->\n    <!--<s:String x:Key=\"S.Preset.Autosave\">Autosaves</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Autosave.Info\">Changes to this preset are automatically saved.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Default.Title\">Default ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Default.Description\">Default preset for the encoder.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Twitter.Title\">For Twitter ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Twitter.Description\">Respects Twitter upload limits (except size and resolution).</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Vp8.Description\">Older and better known codec.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Animation\">Animation</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Filename.Project\">Project</s:String>-->\n\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Better suited for recordings with more colors and gradients.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">High quality • Transparent background</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Supports saving the animation with a transparent background.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">High quality • Graphics</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Better for recordings with a lower quantity of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Balanced</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Good quality for photo-like images using Wu's quantizer without dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">High quality for photo-like images using Wu's quantizer with higher bit level and Floyd-Steinberg error diffusion dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Low quality, faster</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantizing all frames with the same predefined 'web-safe' palette and Bayer 8x8 ordered dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Higher quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Higher image quality, but with a greater file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Lower image quality, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Higher quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Higher image quality, but with a greater file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Lower image quality, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Lower quality and faster encoding</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Even lower image quality, with a faster encoding, but with a smaller file size.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Low quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Low quality but faster encoding.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">High image quality and small file size, but slower encoding.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Lower image quality, small file size and faster encoding.</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">High quality</s:String>-->\n    <!--<s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">High image quality and small file size.</s:String>-->\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Wstawianie klatek</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Obie strony powinny mieć ten sam rozmiar, to okno umożliwia ci zmianę pozycji i rozmiarów obrazu na płótnie. Kliknij, aby wybrać i zmienić rozmiar.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Rozmiar płótna:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Dopasuj obraz do płótna</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Zmień rozmiar płótna, tak żeby dopasować oba obrazy do środka (od lewego górnego rogu).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Jest różnica między rozmiarami klatek. Musisz to rozwiązać przed wstawianiem klatek.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Wstawione klatki</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Aktualna klatka(tki)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Rozmiar obrazu:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Położenie obrazu:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Resetuj rozmiar&#x0d;i położenie obrazu</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Nowe klatki będą wstawione do obecnej&#10;listy klatek w położeniu:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Przed</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Po</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Klatka</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importowanie</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Wybierz kolor wypełnienia</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importuj klatki z filmu</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Importer\">Importer:</s:String>-->\n    <s:String x:Key=\"S.ImportVideo.Loading\">Ładowanie...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Skala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Rozmiar:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Wysokość:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Szerokość:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Częstotliwość klatek:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Start:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Koniec:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Zaznaczenie:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Klatki:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Długość trwania:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Nie jest możliwe wczytanie wideo.</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Error.Detail\">The previewer could not start. Try with another importer or check if the video is not corrupted.&#x0d;If you are using the MediaPlayer, check if the Windows feature called \"Media Features / Windows Media Player\" is turned on and make sure that you have the necessary video codec.</s:String>-->\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Przekroczono czas generowania podglądu klatki.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Nie wybrako klatek do zaimportowania.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Enkoder</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>-->\n    <s:String x:Key=\"S.Encoder.Starting\">Startowanie</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Zakończone</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Skopiowano do schowka</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Problem z kopiowaniem</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Polecenie wykonane</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Pokaż wynik poleceń.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Problem z wykonaniem polecenia</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Nie udało się przesłać</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Kliknięcie otworzy stronę do usunięcia obrazka (jeżeli dostępna).</s:String>\n    \n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>-->\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analiza:</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>-->\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Wgrywanie:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopia:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Polecenia:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Plik usunięty lub przeniesiony</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Anulowano</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Błąd</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Kliknij by pokazać szczegóły błędu.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Wgrywanie</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Wykonywanie poleceń</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Przetwarzanie {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Przygotowanie dla drugiego przejścia</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Przetwarzanie {0} - 2gie przejście</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Tworzenie pliku</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analizowanie niezmienionych pikseli</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Zapisywanie wyników analizy</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Otwórz plik</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Przeglądaj folder</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Usuń z listy</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Pokaż szczegóły</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>-->\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Kopiuj jako obraz</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Kopiuj nazwę pliku</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Kopiuj ścieżkę pliku</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Kopiuj link</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Wyjście Polecenia</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Wyjście Polecenia</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Powiadomienia</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Anuluj wszystkie powiadomienia</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Edytor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Plik</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Strona główna</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Odtwarzanie</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Edytuj</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Obraz</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Przejścia</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statystyki</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Ustawienia</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Pomoc</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Opcje</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Dostępne uaktualnienie!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Kliknij tutaj aby przeczytać więcej.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Całkowita liczba klatek, liczba wybranych klatek, indeks wybranych klatek</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Przygotowanie klatek</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Błąd ładowania - Nie możesz importować wielu plików naraz. Spróbuj wybrać tylko jeden.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Błąd ładowania - Nie możesz importować wielu projektów jednocześnie. Spróbuj wybrać tylko jeden.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Otwórz Media (obraz lub film)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Otwórz media (obraz lub film) lub projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Wszystkie wspierane pliki</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Obraz</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Wideo</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Animacja Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Animacja Gif</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Animacja Webp</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Film Avi</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>-->\n    <s:String x:Key=\"S.Editor.File.Mov\">Wideo Mov</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Wideo Mp4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Wideo Webm</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Obraz Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Obraz Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Obraz Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Archiwum, z obrazami</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Projekt ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Projekt ScreenToGif jako Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Plik Psd</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Przejdź do \"Plik > Nowy\", aby zacząć nowe nagrywanie</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Przeciągnij i upuść obrazy, wideo lub projekty, aby zaimportować</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Dziękuję Ci serdecznie za używanie mojej aplikacji!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Im mniejsza częstotliwość klatek, liczba kolorów lub liczba zmian pomiędzy klatkami, tym mniejszy rozmiar</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Chcesz porozmawiać? Otwórz \"Opcje > O programie\", żeby zobaczyć metody kontaktu</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Potrzebujesz pomocy? Skontaktuj się ze mną przez \"Wsparcie\"</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Chciałbyś wypróbować nowe nagrywanie? Przejdź do \"Opcje > Rejestrator\", żeby je włączyć</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Nowa &#x0d;nagranie</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Nagranie z&#x0d;kamery</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Tablica</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Nowa&#x0d;animacja</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Nowy</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Wstaw nowe&#x0d;nagranie</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Nagranie z &#x0d;kamery</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Nagranie&#10;Tablicy</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Wstaw</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Zapisz jako</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Otwórz</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Ostatnie&#x0d;projekty</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Zapisz jako&#x0d;projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Odrzuć&#x0d;projekt</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Historia operacji</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Cofnij</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Ponów</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Resetuj</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Schowek</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Pokaż schowek</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Wklej</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Wytnij</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopiuj</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Powiększ</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Dopasuj do&#x0d;zawartości</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Dopasuj obraz</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Zaznacz</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Zaznacz&#x0d;wszystko</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Idź do</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Odwróć</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Odznacz</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Odtwarzanie</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Pierwszy</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Poprzedni</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Odtwórz</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pauzuj</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Następny</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Ostatni</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Opcje odtwarzania</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Zapętl podczas odtwarzania.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Używane tylko podczas odtwarzania.&#x0d;Jeżeli chcesz zmienić ustawienia pętli dla exportu Gif i Apngs,&#x0d;ustawienie będzie dostępne wewnątrz panelu 'Zapisz jako' dla niektórych enkoderów.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Klatki</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Usuń</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Usuń&#x0d;Duplikaty</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Zmniejsz&#x0d;liczbę klatek</s:String>\n    <!--<s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Smooth&#x0d;Loop</s:String>-->\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Usuń wszystkie poprzednie klatki</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Usuń wszystkie następne klatki</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Zmiana kolejności</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Od tyłu</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Przesuń w&#x0d;lewo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Przesuń w&#x0d;prawo</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Opóźnienie (czas trwania)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Nadpisz</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Zwiększ lub&#x0d;zmniejsz</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Skaluj</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Rozmiar i pozycja</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Przeskaluj</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Przytnij</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Odwróć/obróć</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Podpis</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Dowolny tekst</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Klatka tytułowa</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Wciśnięcia&#x0d;klawiszy</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Nakładka</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Rysowanie</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Kształty</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Zdarzenia&#10;Myszy</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Znak wodny</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Ramka</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Cień</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Postęp</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Zaciemnij</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Style</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Wygaszenie</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Przesunięcie</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Ogólne</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Liczba klatek</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Całkowity czas trwania</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Rozmiar klatki</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Średni czas trwania (opóźnienie)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Aktualny czas</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Aktualny czas (łącznie) bazuje na obecnie widocznych klatkach.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI i skala klatki</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Wybrana klatka</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Wycinanie</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Nie możesz wyciąć wszystkich klatek.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Nagranie potrzebuje co najmniej jednej klatki.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Usuń wszystkie</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Czy jesteś pewien, że chcesz usunąć wszystkie klatki?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Ta akcja porzuci aktualnie otwarty projekt i nie może zostać cofnięta. Czy chcesz kontynuować?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Usuń wszystkie</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Czy na pewno chcesz usunąć wszystkie klatki?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Próbujesz usunąć wszystkie klatki.&#x0d;\\rNie możesz cofnąć tej operacji.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Czy chcesz odrzucić poprzedni projekt?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Jeżeli wybierzesz nie, poprzedni projekt będzie dostępny w Ostatnich Projektach.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Usuń klatki</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Na pewno chcesz usunąć?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">To polecenie usunie {0} klatek.\\n\\rOperację można cofnąć.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Opuszczanie edytora</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Czy na pewno chcesz wyjść?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Projekt nad którym aktualnie pracowałeś może zostać otwarty przez 'Ostatnie projekty'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Projekt nad którym aktualnie pracowałeś może zostać ponownie otwarty przez 'Ostatnie projekty', ale pamiętaj, że po 5 dniach zostanie automatycznie usunięty.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Nieprawidłowe \"Przeciągnij i upuść\"</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Nie możesz importować kilku plików na raz</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Spróbuj wybrać tylko jeden plik.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Nie można załadować pliku</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Plik nie może zostać załadowany, ponieważ ma niewłaściwy format.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Nie możesz importować wielu projektów jednocześnie.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Spróbuj wybrać tylko jeden projekt.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Brak tekstu do dodania.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, by dodać podpis.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, by dodać tekst.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, aby dodać klatkę tytułową obok niej.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Wielkość ramki powinna wynosić więcej niż 0 na co najmniej 1 stronie.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, by dodać ramkę.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Nieprzezroczystość musi być większa od zera, aby miała wpływ na klatki.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">When using the shadow depth and blur radius as zero, it won't make any difference because it will be hidden behind the frame.</s:String>-->\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Musisz wybrać co najmniej jeden piksel, aby dodać Cinemagraph. Wybierz piksele rysując na nich.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Przejście z wygaszeniem</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, aby dodać przejście z wygaszeniem.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">W pełni przezroczysty kolor, nie wpyłnie na to przejście.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Przejście z przesunięciem</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, aby dodać przejście z przesunięciem.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Ładowanie klatek...</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Nie można załadować projektu</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Nie można było załadować klatek, ponieważ wszystkie są uszkodzone albo nie ma ich w oczekiwanym miejscu.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Część klatek nie mogła być załadowana</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Nie można było załadować klatek, ponieważ nie można ich odnaleźć lub są uszkodzone.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Musisz wybrać przynajmniej jedną klatkę, żeby zastosować dla nich nakładkę.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">Kodek FFmpeg nieznaleziony. Dodaj ścieżkę do zmiennej środowiskowej PATH lub ustaw lokalizację w ustawieniach.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Kodek Gifski nieznaleziony. Dodaj ścieżkę do zmiennej środowiskowej PATH lub ustaw lokalizację w ustawieniach.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Nie ma wystarczająco miejsca na dysku, na którym ta aplikacja zapisu pliki cache (pozostało {0}%). Kliknij tutaj, żeby otworzyć Opcje > Pliki tymczasowe i zwolnić trochę miejsca.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Warning.DifferentDpi\">You tried to import multiple images with different DPIs, which is not supported. Some of them got imported, others need to be imported separately.</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.Warning.DifferentSize\">You tried to import multiple images with different sizes, which is not supported. Some of them got imported, others need to be imported separately.</s:String>-->\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Odzyskiwanie klatek z pamięci</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Aktualizowanie klatek</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Przygotowanie do importu</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importowanie klatek</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analizowanie duplikatów</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Dopasowywanie opóźnienia</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Pozbywanie się duplikatów</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Odrzucanie klatek</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Odrzucanie folderów</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Zmiana rozmiaru klatek</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Przycinanie klatek</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Dodawanie nakładki do klatek.</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Tworzenie klatki tytułowej</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Dodawanie odwrócenia/obrotu do klatek</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Zmiana opóźnienia</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Dodawanie efektu przejścia</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Przygotowanie do zapisu</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Anuluj wczytywanie i porzuć projekt</s:String>\n    <!--<s:String x:Key=\"S.Editor.FindingLoop\">Finding perfect loop</s:String>-->\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Odrzuć klatki nieużyte w zapętleniu</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Klatka:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Otwórz obraz</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Przeglądaj folder</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Idź do klatki</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Idź do klatki (0 do {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Zapisz jako</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Usuń wybrane klatki</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nowe nagranie</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nowe nagranie z kamery</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nowe nagranie tablicy</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nowa animacja</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nowy plik z Media lub projektu</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nowe nagranie utworzone</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nowe nagranie z kamery utworzone</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nowe nagranie tablicy utworzone</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nowy projekt utworzony</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Cofnięto</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Zresetowano</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Ponowiono</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">Liczba wyciętych klatek: {0}</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">Liczba skopiowanych klatek: {0}</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">Liczba wklejonych klatek: {0}</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Powiększenie: {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Wszystkie klatki zostały zaznaczone</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Klatka #{0} zaznaczona</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Zaznaczenie odwrócone</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Wszystkie klatki zostały odznaczone</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">Liczba odznaczonych klatek: {0}</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Lista klatek odwrócona</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Zastosowano efekt Yoyo</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Klatki przeniesione do lewej strony</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Klatki przeniesione do prawej strony</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Zmieniono rozmiary klatek</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Przycięto klatki</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Odbito/Obrócono klatki</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Odbicie dotyczy zaznaczonych klatek a obrócenie dotyczy wszystkich klatek</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Ta akcja dotyczy wszystkich klatek</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Ta akcja dotyczy wybranych klatek</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Ta akcja dotyczy wszystkich lub wybranych klatek, w zależności od ustawień</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph dotyczy wszystkich klatek na podstawie pierwszej klatki</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Zastosowano nakładkę</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Utworzono klatkę tytułową</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Klatka tytułowa będzie wstawiona przed zaznaczoną klatką</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Zmieniono czas trwania (opóźnienie)</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Wstawiono przejście</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Zmniejszono liczbę klatek na sekundę</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Duplikaty usunięte</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Ukryj</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Zastosuj</s:String>\n    <s:String x:Key=\"S.Action.Open\">Otwórz</s:String>\n    <s:String x:Key=\"S.Action.Save\">Zapisz</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Anuluj</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Ostatnie projekty</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Szukam ostatnich projektów...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Data utworzenia</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Liczba klatek</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Żaden projekt nie jest wybrany. Zaznacz projekt z listy, żeby go załadować.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Projekt jest już otwarty w innej instacji edytora. Projekt nie może być otwarty drugi raz, jeżeli jest już otwarty w innym edytorze.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Wpisy ze schowka</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Wpis schowka:</s:String>\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>-->\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>-->\n    <s:String x:Key=\"S.Clipboard.Explore\">Przeglądaj...</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Usuń</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Wklej</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Przed wybraną klatką</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Następna po wybranej klatce</s:String>\n    \n    <!--Editor • Resize-->\n    <!--<s:String x:Key=\"S.Resize.Difference\">Difference</s:String>-->\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <!--<s:String x:Key=\"S.Resize.Options\">Options</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.Percent\">Percent (%)</s:String>-->\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Zachowaj proporcje.</s:String>\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality\">Quality:</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Higher quality</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear • Lower quality</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nearest neighbor • Lower quality and faster</s:String>-->\n    <!--<s:String x:Key=\"S.Resize.ScalingQuality.Info\">Scaling quality.</s:String>-->\n    <s:String x:Key=\"S.Resize.Warning\">Musisz wybrać inną wartość, by przeskalować.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Punkty</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Góra:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Lewo:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Dół:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Prawo:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Przycięcie musi być mniejsze niż aktualny rozmiar klatki.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Przycięcie musi być większe niż 10x10 pikseli.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Odwróć w poziomie</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Odwróć w pionie</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Obróć o 90º w lewo</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Obróć o 90º w prawo</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Zmniejsz liczbę klatek na sekundę</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Okres:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Liczba do usunięcia:</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Delay\">Delay adjustment:</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Don't adjust</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll\">Reduce the framerate of the entire project.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>-->\n    <s:String x:Key=\"S.Reduce.Info\">Po każdej kolejnej ilości klatek o tej liczbie: {1} (bez wliczania w to usuwanych) zostanie usunięta następujące liczba klatek: {0}.</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>-->\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Usuń duplikaty</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Podobieństwo (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Usuwanie klatek:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Usuń pierwszą klatkę</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Usuń ostatnią klatkę</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Dopasowanie opóźnienia:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Nie dopasowuj</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Użyj średniej</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Użyj sumy</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Ta akcja analizuje każdą klatkę (piksel po pikselu) i usuwa te, które są przynajmniej w {0} % podobne do ich bezpośrednich sąsiadów.&#x0d;Jeżeli chcesz, możesz zmienić opóźnienie (długość pokazania) klatek.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Header\">Create smooth loop</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignore first:</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.From\">Compare from:</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.From.Last\">End</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.From.First\">Start</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Info\">Tries to find a frame at least {0} % similar to the start frame and deletes all later frames.&#x0d;You can choose if you want to ignore some initial frames and initiate the comparison from the start (after the threshold) or the end.</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">The number of frames to ignore needs to be smaller than the total number of frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">It was not possible to create a smooth loop with the selected settings.</s:String>-->\n    <!--<s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">You already have a smooth loop based on selected settings.</s:String>-->\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Czcionka</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Rodzina:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Styl:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Waga:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Rozmiar:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Kolor:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Kolor tła:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Kontur</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Grubość:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Układ</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Pionowy:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Poziomy:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Położenie:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Dekoracja:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Wciśnięcia klawiszy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Klawisze</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separator</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Edytuj twoje wciśnięcia klawiszy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignoruj klawisze Ctrl, Alt, Shift i Windows, jeżeli nie są używane jako modyfikatory.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Zignoruje pojedyncze wciśnięcia klawiszy, takie jak \"Control\", ale nie zignoruje \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Pomiń naciśnięcia klawiszy wygenerowane programowo.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Nagrywaj tylko naciśnięcia klawiszy użytkownika.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Wydłuż czas pokazywania się wciśnięć klawiszy:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Pokaż wciśnięcia klawiszy wcześniej.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">O tyle milisekund:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Nie ma żadnych wciśnięć klawiszy na twoim nagraniu.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Edytor wciśnięć klawiszy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Numer klatki</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Wykryte wciśnięcia klawiszy</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Usuń wciśnięcie klawisza</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Dodaj wciśnięcie klawisza:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Małe litery.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Pozwala wstawić pojedyncze małe litery.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Tryb</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Długopis</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Gumka</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Wybierz</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Usuwanie linii</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Szerokość:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Wysokość:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Kształt:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Prostokąt</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elipsa</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Inne:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Zakreślacz</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Dopasuj do krzywej</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Brak rysunków, które mogłyby zostać dodane.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, by móc dodać rysunki.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Wstaw</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Kształty</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Promień:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Kreski:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controls the size of the dashes and the size of the gaps.&#10;You can set multiple sizes to create an elaborate dash style.&#10;The default is \"1 0\" or empty, meaning a dash with no gaps.</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>-->\n    <s:String x:Key=\"S.Shapes.Fill\">Wypełnij</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Zdarzenia Myszy</s:String>\n    <!--<s:String x:Key=\"S.MouseHighlight.Color\">Mouse Highlight Color:</s:String>-->\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Kolor dla lewego przycisku:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Kolor dla środkowego przycisku:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Kolor dla prawego przycisku:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Obraz</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Plik:</s:String>\n    <!--<s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>-->\n    <s:String x:Key=\"S.Watermark.Opacity\">Przezroczystość:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Wybierz obraz</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Musisz wybrać obraz dla wybranych klatek.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Musisz wybrać co najmniej jedną klatkę, aby dodać znak wodny.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Wygląd</s:String>\n    <!--<s:String x:Key=\"S.Border.Info\">Use negative values to make the border expand the image. When doing so, the border will be applied to all frames.&#10;If no negative value being used, the border will be applied only to the selected frames.</s:String>-->\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Kolor cienia:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Kolor tła:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Kierunek:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Promień rozmycia:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Głębia:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <!--<s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelate</s:String>-->\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Rozmycie</s:String>\n    <!--<s:String x:Key=\"S.Obfuscate.Type.Darken\">Darken</s:String>-->\n    <!--<s:String x:Key=\"S.Obfuscate.Type.Lighten\">Lighten</s:String>-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Opcje zaciemniania</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Rozmiar piksela:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Poziom rozmycia:</s:String>\n    <!--<s:String x:Key=\"S.Obfuscate.DarkenLevel\">Darkening level:</s:String>-->\n    <!--<s:String x:Key=\"S.Obfuscate.LightenLevel\">Lightening level:</s:String>-->\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Oblicz średni kolor dla każdego wypikselowanego bloku.</s:String>\n    <!--<s:String x:Key=\"S.Obfuscate.Invert\">Apply the obfuscation to the inverse of the selection.</s:String>-->\n    <!--<s:String x:Key=\"S.Obfuscate.Smoothness\">Smoothness</s:String>-->\n    <s:String x:Key=\"S.Obfuscate.Info\">Użyj narzędzia selekcji aby zaznaczyć prostokąt, który powinien zostać wypikselowany.</s:String>\n    <!--<s:String x:Key=\"S.Obfuscate.Info2\">Use the selection tool to select the part of the frame that should not be obfuscated.</s:String>-->\n    <s:String x:Key=\"S.Obfuscate.Warning\">Nie zaznaczyłeś nic. Użyj narzędzia selekcji aby zaznaczyć prostokąt, który powinien zostać wypikselowany.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Typ</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Pasek</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Tekst</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Dokładność:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuty</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekundy</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milisekundy</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Procent</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Numer klatki</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Aktualna data/czas</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Własna</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Pokaż całość.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Format:</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Date\">You can use the date and time format from .Net Framework.&#x0d;The specification is available in these two links below.</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Domyślne formaty</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Własne formaty</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Licz od:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Zacznij zliczać klatki od wybranej liczby.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientacja:</s:String>\n    \n    <!--Editor • Delay-->\n    <!--<s:String x:Key=\"S.Delay.Update\">Delay update</s:String>-->\n    <s:String x:Key=\"S.Delay.Mode\">Tryb opóźnienia</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Zastąp (w ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Zwiększ lub zmniejsz (w ms):</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Skala (w %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nowa wartość</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minimalnie 10ms na klatkę.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Zmniejsz/Zwiększ wartość</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Wartość skali</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Ta nowa wartość zastąpi czas trwania (opóźnienie) wszystkich wybranych klatek. Wartość może zawierać się w przedziale od 10 ms do 25500 ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Ta wartość zmniejszy/zwiększy czas trwania (opóźnienie) każdej wybranej klatki.&#x0d;Możesz zmniejszyć/zwiększyć poprzez wybranie wartości z przedziału od -10000ms do 10000ms, ale ostateczna długość trwania każdej klatki będzie ograniczona to przedziału od 10ms do 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Skaluj czas trwania (opóźnienia) każdej wybranej klatki o wartość procentową.&#x0d;Możesz skalować czas trwania każdej ramki poprzez wybór wartości pomiędzy 1% a 1000%, lecz finalny czas trwania każdej ramki będzie się mieścił pomiędzy 10ms a 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Użyj długopisu, aby wybrać piksele, które nie są statyczne (które powinny się zmieniać w kolejnych klatkach), poprzez rysowanie nad nimi.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Długość przejścia</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Opóźnienie przejścia</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Wygaś do...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Następnej klatki</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Koloru</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Kolor</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Przejście zostanie dodane między aktualnie wybraną, a następną klatką.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Typ pliku</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Type.Format\">The format of the output file.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Preset\">The export preset that holds all currently displayed settings.&#10;Manage your export presets via the buttons below.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Animated\">Animated image</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Frames\">Frames</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Type.Other\">Other</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>-->\n    \n    <!--<s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String> -->\n    <!--<s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime File Format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>-->\n    \n    <!--<s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Png\">Png</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Projekt</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif project</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Psd\">Plik PSD</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop file</s:String>-->\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Przedstawia</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Domyślny</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Dodaj</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Zapisz</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Edytuj</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Usuń</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Reset</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Deleting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Are you sure that you want to delete the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Reseting the Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Are you sure that you want to reset the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">This action cannot be undone.&#10;&#10;Would you like to reset the selected preset to its default settings?</s:String>-->\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Enkoder</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Encoder and quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Info\">Encoder responsible for generating the output file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Built-in encoder.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">System</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Encoder made available by the system.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">External encoder, made by FFmpeg.org.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">External encoder, made by Gif.ski.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Encoder.Options\">Encoder options</s:String>-->\n\n    <!--Editor • Save as > FFmpeg-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Enable the advanced mode.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Manually input the parameters to control the encoder.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parameters:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">List of parameters that will be passed to FFmpeg.&#10;&#10;Special parameters:&#10;{I} is the input path (the frames).&#10;{O} is the output path (the exported file).&#10;{W} is the width of the frame.&#10;{H} is the height of the frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">To encode with 2-pass, simply add '-pass 2'.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Preview</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Preview the parameter list that will be passed to FFmpeg.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Codec docs</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Format docs</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Filter docs</s:String>-->\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Opcje gifu</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Jakość</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Kolory:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maksymalna liczba kolorów (dla każdej klatki).</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Best\">Best</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Use an even faster encoding process.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">May reduce the quality of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Pętla:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Zapętlony GIF.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Powtarzaj w nieskończoność.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Liczba powtórzeń.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Wyszukaj niezmienione piksele.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Dither:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer scale:</s:String>-->\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Background Color:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixels with alpha (transparency) that are considered opaque by the selected quantizer will be blended with this color before getting the quantized color.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alpha Threshold:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Determines the input alpha value under which the quantized color will be transparent.&#x0d;&#x0a;If 0, then the result will never have transparency.&#x0d;&#x0a;If 255, then only fully transparent pixels are considered transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">White Threshold:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Determines the lowest input brightness to consider the result color white.&#x0d;&#x0a;It affects the brightness of the result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Direct Mapping</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">When checked, the quantized color is determined by a direct mapping rather than looking up the nearest palette entry.&#x0d;&#x0a;It speeds up quantization but may end up in a higher contrast result. An error diffusion dithering may compensate for the value of this parameter though.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Palette Size:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Determines the maximum size of the palette per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Custom bit level.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">When checked, the bit level can be configured manually.&#x0d;&#x0a;⚠️ Warning: The highest bit level might require a LOT of memory!</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Higher value means more accuracy, larger target color space, slower processing and larger memory usage.&#x0d;&#x0a;For example, if 1, then the result can have no more than 8 colors, or when 2, no more than 64 colors.&#x0d;&#x0a;For Octree and Wu quantizers it affects also maximum number of monochromatic shades.&#x0d;&#x0a;For example, if 5 (which is the default for Wu quantizer), only 32 monochromatic shades can be differentiated.&#x0d;&#x0a;⚠️ Caution: The Wu quantizer consumes at least 650 MB with the highest value.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Black and White</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Fixed 1 bpp palette with the black and white colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Grayscale 4 colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Fixed 2 bpp palette with 4 grayscale entries.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Grayscale 16 colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Fixed 4 bpp palette with 16 grayscale entries.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Grayscale 256 colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Fixed 8 bpp palette with 256 grayscale entries.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">System default 4 bpp palette</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Fixed 4 bpp palette using the standard 16 sRGB colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">System default 8 bpp palette</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Fixed 8 bpp palette including the 'web-safe' colors and transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 palette</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Fixed 8 bpp palette using the RGB 332 color space.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree Quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Optimizing palette for each frame with the Octree algorithm.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut Quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Optimizing palette for each frame with the Median Cut algorithm.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu Quantizer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Optimizing palette for each frame with Xiaolin Wu's algorithm.</s:String>-->\n\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Ditherer</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Strength:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">The strength of the ditherer, or 0 to auto calibrate strength.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Seed:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">An integer seed to be used to produce a specific random dithering pattern.&#x0d;&#x0a;Leave empty to use a random seed for every frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Frames are quantized without dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Serpentine Processing</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">When checked, the error propagation direction is altered from line to line.&#x0d;&#x0a;This helps to reduce the ripple effect of the error diffusion dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Ordered)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">The 2x2 Bayer matrix pattern.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Ordered)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">The 3x3 Bayer matrix pattern.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Ordered)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">The 4x4 Bayer matrix pattern.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Ordered)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">The 8x8 Bayer matrix pattern.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Dotted Halftone (Ordered)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">A 8x8 matrix with a dotted halftone pattern.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Blue Noise (Ordered)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">A 64x64 matrix with a blue noise pattern.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson's 4x3 matrix with 6 effective values.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes' 5x2 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">The original 3x2 matrix by Floyd and Steinberg.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">An 5x3 matrix by Jarvis, Judice and Ninke.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra's 5x3 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra's 5x2 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra's 3x2 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">A 7x4 hexagonal matrix by Stevenson and Arce.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Error Diffusion)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki's 5x3 matrix.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Random Noise</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Random white noise.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Interleaved Gradient Noise</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Nonrandom gradient noise generated by a formula.</s:String>-->\n\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Preview</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Show current frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">When checked, the preview shows the current frame instead of a standard image example.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Auto preview is disabled due to the high memory requirement of the current settings. Click to refresh the preview.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Failed to generate preview: {0}&#x0d;&#x0a;Click to try to generate it again.</s:String>-->\n\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Animation Settings</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Endless loop.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">When checked, the animation will be looped indefinitely.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Back and forth.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">When checked, the animation will be played back and forth.&#x0d;&#x0a;This is achieved by duplicating the frames meaning larger file size and longer encoding time.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Repeat Count:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Specifies how many times the animation will be played.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Allow delta frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">When checked, unchanged pixels are attempted to be detected during the encoding.&#x0d;&#x0a;When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors.&#x0d;&#x0a;This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Delta Tolerance:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Specifies the maximum tolerance when detecting changed pixels.&#x0d;&#x0a;If 0, then no difference is tolerated at all.&#x0d;&#x0a;If 255, then there might be frames (or even all of them) that are added with no content.&#x0d;&#x0a;Reasonable range is between 0 and 16 for an optimized quantizer. The ones with fixed colors can be used with somewhat larger values with dithering.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">If Delta Tolerance is too high the result might have poor quality. Click to reset delta tolerance.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Allow clipped frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">When checked, the encoder is allowed to add smaller frames than the actual resolution.&#x0d;&#x0a;If Allow Delta Frames is unchecked, then allows only clipping possible transparent borders.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Allow Delta Frames is ignored because the current configuration does not use alpha and Allow Clipped Frames is unchecked. Click to enable clipped frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Allow Clipped Frames has no effect because the current configuration does not use alpha and Allow Delta Frames is unchecked. Click to enable delta frames.</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Opcje Apng</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Prediction:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Average</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Mixed</s:String>-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Zapętlony Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Wykryj niezmienione piksele.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Rysuj wszystkie niezmienione piksele jako przeźroczyste.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Preset:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Default</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Picture</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Photo</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Drawing</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Icon</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Text</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Use lossless mode.</s:String>-->\n    \n    <!--Editor • Save as > Video options-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Mode:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Advanced</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Method of configuring the encoder parameters:&#10;Normal: Use standard UI controls.&#10;Advanced: Use a text box to type the parameters.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">The video encoder, responsible for&#10;converting the raw pixels to the output file.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Preset:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">None</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Very Slow</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Slower</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Slow</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Medium</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Faster</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Very Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra Fast</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Quality</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanced</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Speed</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Default</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Lossless</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Lossless (High Performance)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">High Performance</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">High Quality</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray Disk</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Low Latency</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Low Latency (High Performance)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Low Latency (Hight Quality)</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Encoding speed to compression ratio,&#10;slower presets may give you better compression&#10;(quality per filesize).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Hardware Acc.:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Off</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">On</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Automatic selection</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controls the usage of dedicated hardware (video graphics).&#10;Off: Doesn't use dedicated hardware.&#10;On: Uses dedicated hardware and lets you select special encoders.&#10;Auto: Uses dedicated hardware and automatic selects the right encoder, when possible.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Pixel format:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automatic</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Video sync method.&#10;Auto: Chooses between 1 and 2 depending on muxer (format) capabilities.&#10;Passthrough: Each frame is passed with its timestamps to the encoder.&#10;Constant: Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.&#10;Variable: Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.&#10;Drop: As passthrough but destroys all timestamps, making the encoder generate fresh timestamps based on framerate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passthrough</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Constant framerate</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Variable framerate</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Drop</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Framerate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Film</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Custom</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Pass:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Constant Rate Factor.&#10;Quality and rate control setting.&#10;Leave it empty if you don't wish to set this property.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Quality level:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Smaller values means better quality.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Bitrate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Target video bit rate.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Bitrate mode:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constant</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variable</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Min Rate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Minimum bitrate tolerance.&#10;Most useful when using CBR mode.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Max Rate:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Maximum bitrate tolerance.&#10;Requires the buffer size to be set too.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Buffer size:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Rate control buffer size.&#10;Leave it empty or set to zero &#10;if you don't wish to set this property.</s:String>-->\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zarchiwizuj obrazy.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exports the images inside a zipped folder.</s:String>-->\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Kompresuj obraz.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Kompresuj obraz używając algorytmu RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Zapisz dane osi czasu.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Eksportuj czasy klatek, zamiast tylko klatki.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Opcje zapisu</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Export partially.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Zapisz plik do wybranego folderu.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Overwrite?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Warn</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Only warns that another file exists with the same name.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Prompt</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Asks if the user wants to overwrite the file.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Allow</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Simply overwrites the file.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Zapisz również jako projektu (ten sam folder, ta sama nazwa pliku).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Wgraj ten plik (eksperymentalna opcja).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Kopiuj do schowka.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Plik</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Kopiuje plik wynikowy do schowka.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Ścieżka katalogu</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Kopiuje ścieżkę folderu wynikowego do schowka.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Ścieżka pliku</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Kopiuje ścieżkę wynikową do schowka.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Kopiuje wygenerowany link do schowka.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Wykonaj polecenia po enkodowaniu.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Wpisz polecenia, które mają zostać wykonany po enkodowaniu.&#x0d;Żeby wykonać wiele poleceń, wpisz każde na oddzielnej linii.&#x0d;Makra:&#x0d;{p} = ścieżka wyjściowa.&#x0d;{f} = folder wyjściowy.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial\">Partial export</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode\">Mode:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Select the partial export method.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expression</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exports parts of the animation based on a simple expression.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Frame range</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exports only part of the animation within the frame range.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Time range</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exports only part of the animation within the timeframe.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Selection</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exports only the frames selected in the timeline.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">No frame selected.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 frame selected.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} frames selected.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.From\">From:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.To\">To:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression\">Expression:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Type frame numbers separated by a comma or&#10;frame sequences separated by a minus sign:&#10;1, 3, 4, 6 - 9</s:String>-->\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Plik</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Folder docelowy.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.File.SelectFolder\">Select the output folder</s:String>-->\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Wybierz lokalizację.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Format pliku</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Nazwa pliku.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animacja</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Zwiększ numer pliku</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Zmniejsz numer pliku</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Plik z taką samą nazwą już istnieje.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Zapisz w schowku.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Musisz wybrać, gdzie zapisać plik (do folderu, do schowka lub przesłać gdzieś indziej).</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Extension\">You didn't select the file extension.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">When selecting the advanced mode, you must type the parameters in the parameters field.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">The special parameters {I} (input) and/or {O} (output) are missing from the parameters field.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Aby wykonać polecenie po enkodowaniu, musisz wpisać coś w polu tekstowym polecenień.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">You must select at least one frame when having the option to export only selected frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">The expression to partially export the project is invalid.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Nie wybrano usługi hostingowej. Musisz wybrać cel.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Nie możesz przesłać do wybranej usługi, ponieważ nie została zautoryzowana. Wybierz Opcje > Usługi hostingowe, żeby autoryzować tę aplikację.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Nie możesz wybrać opcji kopiowania linku, ponieważ nie ustawiłeś przesyłania pliku.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Musisz wybrać folder zapisu.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Folder zapisu nie istnieje.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Folder zapisu zawiera jeden lub więcej nieprawidłowych znaków. Wybierz prawidłowy folder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Musisz wybrać nazwę pliku.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Nazwa pliku zawiera jeden lub więcej nieprawidłowych znaków. Wybierz prawidłową nazwę pliku.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Istnieje już plik o tej nazwie. Zaznacz, aby nadpisać lub wybierz inną nazwę.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">There's already a project with the same filename. Set to overwrite or pick another filename or folder.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Operacja została anulowana.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Info\">Select the upload preset, which has details about the service in use for upload.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Limit\">This upload service imposes limits.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Add\">Add a new upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Edit\">Edit upload preset settings.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.History\">View the upload history of this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Remove\">Remove the currently selected upload preset.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Select an upload preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Pick one from this list.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">No upload preset available for this format</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Add a preset by using the button below.</s:String>-->\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Deleting the Upload Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Are you sure that you want to delete the upload preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">This action cannot be undone.&#10;&#10;Would you like to delete the selected upload preset?</s:String>-->\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Eksportuj klatki</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Czy chcesz wyeksportować klatki?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Polecenie wyeksportuje {0} klatek to wybranego folderu.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Overwrite</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Would you like to overwrite the file?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">A file with the name '{0}' already exists in that folder.\\r\\nWould you like to overwrite it?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Would you like to overwrite the files?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">One or more files with the same name already exist in that folder.\\r\\nWould you like to overwrite them?</s:String>-->\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Podgląd polecenia</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Polecenie</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Ścieżka wejściowa</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Ścieżka docelowa</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Wsparcie</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Wyślij</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Podgląd</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Wyślij wsparcie</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Tytuł *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Wiadomość *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Jeśli napotkasz błąd, nie zapomnij wyjaśnić jak to się stało, krok po kroku.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Typ wsparcia</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Sugestia</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problem/Błąd</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Twój e-mail (opcjonalne)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Musisz wpisać tytuł.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Musisz wpisać wiadomość.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Musisz wprowadzić adres e-mail, aby dostać wiadomość od programisty.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Wysyłanie... To okno zamknie się wkrótce po ukończeniu.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Załączniki (opcjonalne, maksymalnie 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Dodaj załącznik</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Usuń wszystkie załączniki</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Rozumiem język angielski</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">lub portugalski (brazylijski lub europejski).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">To zostanie wysłane, łącznie ze wszystkimi załącznikami.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Rozwiązywanie problemów</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Czy brakuje jakiegoś okna?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Jeżeli brakuje któregokolwiek z oknien (są poza ekranem),&#x0d;użyj opcji poniżej aby resetować aktualną pozycję do pozycji domyślnej.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Oto gdzie każde okno jest aktualnie położone:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Oto gdzie każde okno zostanie otwarte następnym razem:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Przenieś wszystkie okna do ekranu głównego.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Resetuj pozycję startową wszystkich okien.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normalny</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Kursywa</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Pochyły</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Czarna</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Pogrubiona</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Demi pogrubiona</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra czarna</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra pogrubiona</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra lekka</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Ciężka</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Lekka</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Średnia</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normalna</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regularna</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi pogrubiona</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Cienka</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra czarna</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra pogrubiona</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra lekka</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Góra</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Środek</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Dół</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Rozciągnięcie</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Lewo</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Środek</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Prawo</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Poziomo</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Pionowo</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Do lewej</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Do prawej</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Do środka</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Wyjustuj</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Brak</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Podkreślenie</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Przekreślenie</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Linia nad</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Linia bazowa</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.pt-PT.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Voltar</s:String>\n    <s:String x:Key=\"S.Cancel\">Cancelar</s:String>\n    <s:String x:Key=\"S.Yes\">Sim</s:String>\n    <s:String x:Key=\"S.No\">Não</s:String>\n    <s:String x:Key=\"S.Add\">Adicionar</s:String>\n    <s:String x:Key=\"S.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Id\">Cód.</s:String>\n    <s:String x:Key=\"S.Title\">Título</s:String>\n    <s:String x:Key=\"S.Description\">Descrição</s:String>\n    <s:String x:Key=\"S.SelectColor\">Clique aqui para selecionar a cor.</s:String>\n    <s:String x:Key=\"S.Documentation\">Clique para navegar até à documentação.</s:String>\n    <s:String x:Key=\"S.Suppress\">Suprimir</s:String>\n    <s:String x:Key=\"S.Preview\">Pré-visualização</s:String>\n    <s:String x:Key=\"S.Size\">Tamanho</s:String>\n    <s:String x:Key=\"S.Background\">Fundo</s:String>\n    <s:String x:Key=\"S.Color\">Cor:</s:String>\n    <s:String x:Key=\"S.Delay\">Atraso</s:String>\n    <s:String x:Key=\"S.DelayMs\">Atraso:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Valor -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Valor de Escala:</s:String>\n    <s:String x:Key=\"S.Margin\">Margem:</s:String>\n    <s:String x:Key=\"S.Padding\">Preenchimento:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Altura mínima:</s:String>\n    <s:String x:Key=\"S.AndOr\">e/ou</s:String>\n\n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Oh não, a aplicação parou de funcionar :(</s:String>\n    <s:String x:Key=\"S.Required\">Preenchimento obrigatório.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Dependência em falta</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">O Net Framework 4.8 não está instalado</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Para utilizar a aplicação, é necessário fazer-se o download da versão correta do .Net Framework.&#10;Gostaria de abrir a página de download?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Apenas uma instância permitida</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">A aplicação já está em execução</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif já está em execução, mas aparentemente nenhuma janela está aberta. Verifique o tabuleiro do sistema, um ícone do ScreenToGif deve estar lá.</s:String>\n\n    <s:String x:Key=\"S.SavingSettings.Title\">A guardar as configurações</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Gostaria de tentar guardar novamente?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Parece que o ScreenToGif não tem privilégios suficientes para guardar as configurações do disco.&#10;&#10;Gostaria de tentar novamente, mas desta vez com privilégios de administrador?</s:String>\n\n    <s:String x:Key=\"S.Exiting.Title\">A fechar o ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Tem certeza que quer fechar?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Todas as janela do ScreenToGif serão fechadas e o ícone da área de notificação será removido.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Trocar Adaptador Gráfico</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Mude para o adaptador gráfico correto para capturar o ecrã selecionado</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Devido a uma limitação no DirectX, o ScreenToGif deve estar a ser executado no mesmo adaptador gráfico que o ecrã que está a ser capturado.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Troque o adaptador gráfico definido para ScreenToGif abrindo as Definições do Windows > Sistema > Ecrã > Definições Gráficas ou clicando no link abaixo.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Troque o adaptador gráfico para o ScreenToGif abrindo as definições gráficas do seu adaptador gráfico.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Abra as Definições do Windows</s:String>\n\n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Espaço</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Botão direito</s:String>\n\n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nova gravação de ecrã</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nova gravação de webcam</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nova gravação de quadro</s:String>\n    <s:String x:Key=\"S.Exit\">Fechar</s:String>\n\n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nova gravação de ecrã</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nova gravação de webcam</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nova gravação de quadro</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nova animação</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Inserir gravação de ecrã</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Inserir gravação de webcam</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Inserir gravação de quadro</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Inserir imagens e vídeos</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Guardar como...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Carregar ficheiros (imagens, vídeos e projetos)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Carregar projetos recentes</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Descartar projeto atual</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Alterar tempo de exibição dos quadros</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Aumentar/Diminuir tempo de exibição dos quadros</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Escalar o tempo de exibição dos quadros</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Colocar o zoom a 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Ajustar a janela do editor para o tamanho do quadro</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Fazer a imagem caber no espaço disponível na janela do editor</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Selecione o primeiro quadro</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Selecione o quadro anterior</s:String>\n    <s:String x:Key=\"S.Command.Play\">Pré-visualize a animação</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Selecione o próximo quadro</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Selecione o último quadro</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Anular</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Refazer</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Desfaça todas as alterações no projeto</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Copie os quadros selecionados e armazene-os na área de transferência</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Corte os quadros selecionados e armazene-os na área de transferência</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Cole os quadros da área de transferência</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Remover todos os quadros selecionados</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Remover todos os quadros anteriores</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Remover todos os próximos quadros</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Remover quadros duplicados</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Reduzir a quantidade de quadros</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Criar um animação com loop suave</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Reverter a animação</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Transformar a animação em ioiô, indo para frente e para trás</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Mover o quadro selecionado para a esquerda</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Mover o quadro selecionado para a direita</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Redimensionar todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Cortar todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Girar ou rodar os quadros</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Adicionar uma legenda</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Adicionar um texto</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Adicionar um quadro com um título</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Teclas pressionadas: inserir teclas pressionadas durante a gravação</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Desenhe livremente</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Adicione formas geométricas</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Cliques do rato</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Selecione uma imagem e adicione como marca d'água</s:String>\n    <s:String x:Key=\"S.Command.Border\">Adicionar bordas</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Adicionar sombra</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Ofuscar: esconda partes dos seus quadros</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Use a ferramenta de desenho para selecionar quais partes do quadro não devem permanecer estáticas através da animação</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Barra de progresso ou texto com detalhes de execução</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Selecione todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navegue até ao quadro a partir do número</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Inverta a seleção de quadros</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Deselecione todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Transição de desvanecimento</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Transição de deslizamento</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Limpe todas as codificações finalizadas</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Mover para cima</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Mover para baixo</s:String>\n    <s:String x:Key=\"S.Command.Add\">Adicionar</s:String>\n    <s:String x:Key=\"S.Command.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Editar item selecionado</s:String>\n    <s:String x:Key=\"S.Command.Save\">Guardar item selecionado</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Remover item selecionado</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Ver a história</s:String>\n\n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Início</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Gravador</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Abrir o gravador de ecrã.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Câmara</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Abre o gravador de câmara.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Quadro</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Abre o gravador de quadro.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Abre o editor. O local central da aplicação.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Opções</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nova versão disponível</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Mostra o ecrã de download da versão mais recente do ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Atualizador</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Uma nova atualização está disponível</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nova versão!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Nova versão disponível, Versão {0}!&#x0d;Clique aqui para mais detalhes.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Aparentemente o seu sistema não é mais suportado ou algo mudou na última atualização. Tente fazer o download manual a partir da página web.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versão</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portátil</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Instalador</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">O que há de novo?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Correções de bugs:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Uma nova versão está disponível para download.&#x0d;Gostaria de abrir o navegador para descarregá-la?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Abra a aplicação após a atualização</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Download</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Instalar</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Instalar manualmente</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">A descarregar...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Não foi possível mostrar os detalhes da atualização.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Não foi possível fazer o download da atualização.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">É necessário esperar até que todas as codificações finalizem para atualizar a aplicação.</s:String>\n\n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Descarregar</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Descarregar</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} de {1}</s:String>\n\n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Opções</s:String>\n    <s:String x:Key=\"S.Options.App\">Geral</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Gravador</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tarefas</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Atalhos</s:String>\n    <s:String x:Key=\"S.Options.Language\">Idioma</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Armazenamento</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Nuvem</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Doação</s:String>\n    <s:String x:Key=\"S.Options.About\">Sobre</s:String>\n    <s:String x:Key=\"S.Options.Other\">Outras configurações</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Atalho de teclado ausente para a gravação com o rato</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Para usar o rato como guia para mover a área de gravação, é necessário primeiro definir uma tecla de atalho para poder ativar quando necessário.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Inicialização</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Iniciar&#10;manualmente</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">A aplicação vai abrir só quando for executada.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Iniciar com&#10;o Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">A aplicação será executada assim que o Windows iniciar, após o login.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossível alternar entre os modos de inicialização.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Permitir apenas&#10;uma instância</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Só pode abrir uma instância por utilizador e executável.&#10;Isto significa que uma instância de um utilizador ou executável diferentes podem co-existir.&#10;Quando reabrir a aplicação, a aplicação vai tentar colocar foco na instância que já está aberta.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Permitir múltiplas&#10;instâncias</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Poderá abrir a aplicação várias vezes ao mesmo tempo, sem restrições.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Iniciar minimizado na bandeja do sistema.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(O ícone no tabuleiro do sistema estará visível enquanto esta opção estiver ativa)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Iniciar com:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Janela de início</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Gravador de ecrã</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Gravador de câmara</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Gravador de quadro</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Janela do editor</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(A janela que aparecerá primeiro quando a aplicação inicializar)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Tema da aplicação</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Esquema de cores</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Muito claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Escuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Muito escuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Mesmo do sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Cores de exemplo.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Ícone no tabuleiro do sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Mostrar a aplicação no tabuleiro do sistema (área de notificação).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Manter a aplicação aberta mesmo se todas as janelas estiverem fechadas.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Fazer nada</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Abrir uma janela</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Nenhuma janela</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimizar/restaurar todos janelas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimizar todas janelas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restaurar todas janelas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Botão esquerdo:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Botão esquerdo (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Botão do meio:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Janela:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Senão, abrir:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Geral</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Tentar corrigir o erro de 'Sem quota suficiente...'.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Perguntar-me antes de fechar a aplicação (via o comando 'Sair').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Desativar a aceleração por hardware.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(A interface será renderizada via software)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Procurar atualizações das traduções.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Traduções atualizadas serão descarregadas e instaladas automaticamente)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Procurar atualizações ao iniciar a aplicação.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Descarregar e instalar atualizações automaticamente ao fechar a aplicação.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Forçar o download da versão portátil.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Requer a instalação manual, descompactando e trocando o executável)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Forçar a atualização para executar com privilégios de administrador.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Avisar-me antes do início da instalação.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Antiga</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nova</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Frequência de captura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Cada quadro será capturado manualmente por si, ao pressionar o botão de captura ou atalho de teclado equivalente.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Interação de utilizador</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Quadros serão capturados sempre que clicar ou escrever no teclado.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Por segundo</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Os Quadros serão capturados em base de 'por segundo',&#10;considerando o denominador de taxa de captura definido no ecrã do gravador.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Por minuto</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Os quadros serão capturados em base de 'por minuto' (timelapse)&#10;considerando o denominador de taxa de captura definido no ecrã do gravador.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Por hora</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Os quadros serão capturados em base de 'por hora' (timelapse),&#10;considerando o denominador de taxa de captura definido no ecrã do gravador.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Duração de reprodução:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(Em ms, cada quadro capturado receberá essa duração)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Atraso:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(Em ms, tempo aguardado antes da captura de cada quadro)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Cada quadro será capturado em intervalos de {0}.</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Mode\">Modo de captura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Usar o modo de captura antigo, que é mais lento e pode não funcionar para capturar jogos,&#10;mas não requer download the ferramentas ou plug-ins externos.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Usar o modo de captura por duplicação de ambiente de trabalho, que é mais rápido e&#10;pode capturar jogos em ecrã inteiro, mas requer Windows 8 ou superior.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Guardar para&#10;ficheiro</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Cada quadro é capturado e guardado diretamente como um ficheiro de imagem em disco.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Cache de&#10;memória</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Cada quadro é capturado e guardado como uma lista de píxeis na memória primeiro para depois ser guardado em disco (pode ser feita compressão de dados antes).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compressão:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Ótima</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Mais lento mas provavelmente possui compressão superior)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Rápida</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Mais rápida mas provavelmente compressão inferior)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Sem compressão</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Nenhuma compressão será feita na captura de quadros)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Tamanho da cache:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(Em MB. Depois de chegar a esse tamanho, os dados serão guardados em disco)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Prevenir a captura de quadros todos em preto.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Prevenir o BitBlt com cache de memória de resultar erradamente em quadros com todos os píxeis em preto)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Mostrar o rato na gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Selecione a cor do rato</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Taxa de quadros por segundo fixa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Atraso constante que não muda com o atraso da gravação)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Capturar apenas quando algo mudar no ecrã.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Um quadro será capturado só quando alguma coisa mudar dentro da região de captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Melhorar o desempenho de captura numa ligação remota.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Desativar a captura de janelas em camadas)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Forçar limpeza de memória durante a captura.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduz o uso de memória durante a captura, mas diminui o desempenho)</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Guias</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Regra de terços</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Clicar para alternar a exibição&#10;da guia de regra de terços.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Mira</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Clicar para alternar a exibição&#10;da guia de mira.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">As guias serão só exibidas enquanto o gravador estiver pausado ou parado.</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Esconder barra de título (modo reduzido).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Ativar a lupa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(A lupa garante um zoom durante a seleção da área de gravação)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animar a borda da região de captura durante a seleção.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animar usando o estilo de 'formigas marchantes')</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Ativar a movimentação da seleção.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Mostrar um adorno perto do canto da seleção, permitindo o movimento da área de captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Modo compacto.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Mostrar uma versão menor do painel de controlos de gravação)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Mostrar o botão de descartar também durante a gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normalmente, o botão só fica visível durante a pausa)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Melhorar o desempenho da seleção de ecrã.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduz os travamentos durante a seleção de região de captura ao mostrar uma visão estática do ecrã)</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Lembrar do tamanho anterior da área de gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Lembrar da localização anterior da área de gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Usar uma contagem regressiva.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Em segundos, aguarda antes de iniciar a captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Habilitar gravação com o cursor.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(A área de gravação vai-se posicionar conforme a posição do cursor)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Margem de onde a área de gravação começará a ajustar-se)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Margem adicional de onde a interface começará a ser escondida para ser movida)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Perguntar-me antes de descartar a gravação.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Plano de fundo do pré-visualizador</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Tamanho da grade:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Muito pequeno</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Pequeno</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Muito grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Eu adoro quadrados grandes</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Sou cego</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Largura</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Cor de fundo</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">1ª Cor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">2ª Cor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Mostrar as codificações numa janela separada.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Estender barra de títulos.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Ajustar automaticamente o tamanho da janela com base no tamanho do quadro, logo após carregar o projeto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Ajustar automaticamente o zoom da imagem com base no tamanho da janela, logo após carregar o projeto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Perguntar-me antes de remover quadros.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Perguntar-me antes de descartar um projeto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Perguntar-me antes de fechar o Editor (se um projeto estiver aberto).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Habilitar triplo clique para selecionar o texto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Aplicar a borda das legendas por fora das letras.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Largar quadros quando necessário.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Largar um quadro se o pré-visualizador não for capaz de exibi-lo a tempo)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Largar um quadro se o pré-visualizador não for capaz de exibi-lo a tempo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impor um limite para o histórico de desfazer/refazer.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Ações mais antigas serão removidas quando o limite for alcançado)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Número máximo de ações armazenadas)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Sincronizar a pasta de exportação entre os perfis.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Os perfis usarão a mesma pasta de exportação)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Sincronizar também o nome do ficheiro.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Os perfis também usarão o mesmo nome de ficheiro)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Sincronizar apenas entre perfis do mesmo tipo de ficheiro.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Apenas perfis do mesmo tipo de ficheiro estarão em sincronia)</s:String>\n\n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Tarefas Automáticas</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista de tarefas automáticas</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Tarefa</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detalhes</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Ativado</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Ativar esta tarefa.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Selecionar uma tarefa)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Selecionar uma tarefa acima</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Essas tarefas são executadas sequencialmente do topo da lista para o último elemento.&#10;Isso acontece quando o projeto é aberto pela primeira vez no editor.</s:String>\n\n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Gravador de ecrã:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Abre o gravador de ecrã padrão)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Gravador de webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Abre o gravador de webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Gravador de quadro:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Abre o gravador de quadro)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Abre outra janela do editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Opções:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Abre a janela de opções, só pode abrir uma janela destas uma de cada vez)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Fechar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Fecha todas as janelas do sistema e remove a aplicação da área de notificação)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Gravadores</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Gravar/Pausar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Inicia ou pausa a gravação)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Parar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Para a gravação e abre o editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Descartar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Descarta a gravação atual quando estiver pausado)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Gravação via cursor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Habilita/Desabilita o reposicionamento da área de gravação conforme a posição do cursor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Desab. grav. via cursor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Temporariamente desabilita o reposicionamento da área de gravação conforme a posição do cursor. Apenas teclas de modificação são aceites)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Clicar para ganhar foco do teclado, depois pressione as teclas desejadas.&#10;Algumas combinações não são permitidas.</s:String>\n\n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Idioma da aplicação</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Detetar automaticamente</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Idioma atual do Sistema Operativo (se disponível)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Gostaria de traduzir a minha aplicação?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Clique aqui para ler descobrir como traduzir e para descarregar a aplicação de tradução.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Depois,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">clique aqui para importar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">e testar a sua tradução.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Envie a tradução para mim via</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">quando finalizar.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Clique para abrir a página com o passo a passo de como traduzir.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Abre a página de importação</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Abre a sua aplicação de e-mail</s:String>\n\n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Situação</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} livre de {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Analisar novamente quanto espaço livre existe.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Limpar a pasta da cache.&#10;Poderá escolher se quer manter os projetos recentes ou não.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Pouco espaço na unidade de armazenamento atual. Por favor, apague os ficheiros da pasta temporária ou utilize uma outra unidade.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Impossível obter os detalhes da unidade de armazenamento.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Nenhum ficheiro</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} ficheiro</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} ficheiros</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Nenhuma pasta</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} pasta</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} pastas</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} em uso</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Caminhos</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Escolha a localização da cache (ficheiros temporários).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Escolha a pasta para guardar os ficheiros de erros.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Navegue até à pasta selecionada.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Localização das configurações</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Não existe</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Criar um ficheiro de configurações em branco.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Remover o ficheiro de configurações.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Abra a pasta que contém o ficheiro de configurações.&#x0d;Pressione a tecla Ctrl enquanto clica para abrir diretamente o ficheiro.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Padrão de carregamento de configurações: Configurações padrão ◄ AppData ◄ Local.&#x0d;• Se não existe ficheiro de configurações presente na pasta Local, a aplicação procura dentro da pasta AppData,&#10;&#x09;as Configurações padrão são usadas se nenhum ficheiro de configuração existir.&#x0d;• Se não existirem configurações locais, todas as configurações são guardadas na pasta AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Remover todos os ficheiros de cache ao fechar a aplicação.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Perguntarme antes de excluir todos os ficheiros de cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Remover automaticamente projetos antigos.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Quando a aplicação abrir, uma tarefa em segundo plano vai apagar projetos antigos que não estão abertos (depende da configuração).</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(em dias, qualquer projeto mais antigo e que esteja fechado será apagado/descartado após abrir a aplicação)</s:String>\n\n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Limpar Cache</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Gostaria de limpar a pasta de cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Quando é feita uma gravação ou é aberta alguma coisa para editar, um projeto é criado e armazenado dentro da pasta de cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Gostaria de remover esses projetos da pasta de cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Não remover projetos recentes.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Apenas os projetos mais antigos que {0} dias, que não estão abertos, serão removidos)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Todos os projetos, que não estão abertos, serão removidos)</s:String>\n\n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Desativado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Sistema</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Usa o proxy do sistema)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Endereço:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Porta:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Utilizador:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Senha:</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Presets\">Predefinições de upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Serviço</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Título</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Descrição</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Ativado</s:String>\n\n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Serviço de Upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Selecione um serviço</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Selecione um serviço de upload acima</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Habilitar esta predefinição.</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Detalhes</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Nome:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Descrição:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anónimo</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Autenticado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorização</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Obter token</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Cole o token OAuth aqui</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Nome de utilizador:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Senha:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autorizar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">O nome de utilizador e a senha não serão armazenados.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Opções</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Obter links diretos.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Álbum</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Esta predefinição tem de ter um nome único.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">O nome já está a ser utilizador por outra predefinição de upload.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Quando estiver no modo autenticado, é necessário terminar o processo de autenticação.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">É necessário fornecer o seu nome de utilizador e senha para autorizar esta aplicação.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Não foi possível obter o token de autorização.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Para autorizar esta aplicação, é necessário fornecer o token de autorização.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">A autorização falhou. Verifique se está tudo correto e tente novamente em alguns segundos.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Não foi possível carregar a lista de álbuns.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Autorização concluída.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Não autorizado.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Autorização expirada em {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorização válida até {0}.</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Obter links com a extensão Gifv em vez de Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Fazer upload dos gifs para um álbum.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Álbum:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Perguntar-me antes de enviar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Recarregar a lista de álbuns.</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Padrões</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Pedir-me para preencher os detalhes do upload.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Tipo de url:</s:String>\n\n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Escolha um álbum de destino (opcional)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Se quiser, escolha um álbum de destino:</s:String>\n\n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Detalhes do upload (opcional) </s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Detalhes de upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Título:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Descrição:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tags:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separe as etiquetas usando um ponto e vírgula ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Apenas para quem acessar via link direto.</s:String>\n\n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Histórico de upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Data</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Predefinição</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Bem sucedido?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Remover entrada de histórico.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Menor qualidade:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Link de exclusão:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Tem certeza de que quer excluir a entrada do histórico?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de excluir a entrada de histórico selecionada?</s:String>\n\n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Ferramentas externas</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Clique aqui para descarregar&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">A descarregar...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Presente&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Clique aqui para abrir as propriedades do ficheiro.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Aplicações distribuídas pela Microsoft Store não podem descarregar outras aplicações. Terá que ser descarregada manualmente.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Localização do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Selecione a pasta de localização do executável do FFmpeg.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Executável do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">O caminho do executável FFMpeg contém um ou mais caracteres inválidos. Por favor, selecione um caminho válido para o executável.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Localização do Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Selecione a localização da biblioteca Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Biblioteca Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">O caminho da biblioteca Gifski contém um ou mais caracteres inválidos. Por favor, selecione um caminho válido para o executável.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licença do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licença do Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Licença do SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Sem permissão de gravação na pasta</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Não é possível guardar o download na pasta devido à falta de permissão de gravação.&#10;&#10;Gostaria de iniciar o downloader como administrador para finalizar o download?</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Doar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Doar US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Doar €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Abre o site do Paypal. Moeda selecionada: Dólar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Abre o site do Paypal. Moeda selecionada: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Abre o site do Paypal. Selecione a moeda.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Inscrever</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Doar mensalmente via Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Doar mensalmente via Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Doe jogos</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Doe jogos via Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Doe jogos via GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Pague por um café via Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto moedas</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copie o endereço de BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Dê suporte</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Se quiser dar suporte ao projeto :)</s:String>\n\n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versão:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Verifique se há atualizações </s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Já tem a versão mais recente.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Autor: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Versão da Microsoft Store. Alguns recursos estão desabilitadas devido a políticas aplicadas.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contacto</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Entrar no servidor</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Visitar página</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Entrar na sala</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Técnico</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licença:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Esta aplicação é completamente gratuíta)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Código fonte:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Política de privacidade:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Um grande obrigado para</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Todos os meus ajudantes, pessoas que me forneceram comentários e/ou doações.</s:String>\n\n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Traduções</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">A procurar códigos de idiomas...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Reconhecida como {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Não reconhecida</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">O recurso mais para baixo é o atual sendo utilizado.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Para aplicar sua tradução, mova para a última posição da lista.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">A exportar o dicionário de idioma...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Guarde o dicionário de idiomas</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Abrir um dicionário de idiomas</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Dicionário de idiomas</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">A importar o dicionário...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">O nome do ficheiro não está a seguir um padrão válido</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Tente renomear como: StringResources.en.xaml, onde o 'en' deve ser substituído pelo código do idioma.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Não é possível adicionar um dicionário com o mesmo nome</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Tente remover o dicionário repetido ou use outro código de idioma.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Código redundante do idioma</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">O código \"{0}\" é redundante. Tente usar \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Idioma desconhecido</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">O código \"{0}\" e a sua família não foram reconhecidos como códigos de idiomas válidos.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Não foi possível importar o dicionário de idioma.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Gravar</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continuar</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Parar</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Descartar</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Foto</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Largura</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">O seguimento do cursor está ativado.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Clique para circular entre as frequências de captura.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interações</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Quantidade máxima de quadros por segundo</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">qps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Pode variar de 1 até 60 qps, com valores mais altos significando que mais quadros serão capturados.&#10;Cada incremento representa 16 milisegundos de diferença.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Quantidade máxima de quadros por minuto</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">qpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Pode variar de 1 até 60 qpm, com valores mais altos significando que mais quadros serão capturados.&#10;Cada incremento representa 1 segundo de diferença.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Quantidade máxima de quadros por hora</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">qph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Pode variar de 1 até 60 qph, com valores mais altos significando que mais quadros serão capturados.&#10;Cada incremento representa 1 minuto de diferença.</s:String>\n\n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Clique ou pressione teclas para capturar</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Enquadre na Janela (Arraste e solte para enquadrar)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Contagem Regressiva</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Pausado)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">A parar...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">A pré-iniciar...</s:String>\n\n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Tempo de captura decorrido.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Quantidade total de quadros:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Capturados manualmente:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">A captura está em pausa.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Seu computador não suporta um modo de captura preciso,&#10;significando que a taxa de captura poderá nunca ser atingida.</s:String>\n\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Não foi possível capturar o ecrã</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Não foi possível capturar o ecrã. O método de captura não retornou quadros após 5 tentativas.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Não foi possível começar/pausar a captura de ecrã</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 ou superior é necessário para capturar o ecrã utilizando a API de duplicação de ambiente de trabalho.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Área</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Selecione uma área</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Janela</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Selecione uma janela</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Ecrã</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Selecione um ecrã</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Ecrã interno</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Ecrã genérico</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Adaptador gráfico: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resolução: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Resolução nativa: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Arraste para mover&#10;a seleção.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Aceitar</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Limpar</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Botão direito do rato</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Cancelar a seleção (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Clique e arraste para selecionar uma área deste monitor</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Clique e arraste para selecionar uma área</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Clique aqui para selecionar esta janela</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Clique aqui para selecionar este ecrã</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Pressione Esc para cancelar</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Pressione {0} para parar a gravação</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">A janela do gravador será minimizada,&#10;restaure ou pressione {0} para pausar a captura</s:String>\n\n    <s:String x:Key=\"S.Recorder.Discard.Title\">Descartar gravação</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Tem certeza que deseja descartar a gravação?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Esta ação irá descartar a gravação, removendo todos os quadros.&#x0d;Não pode desfazer esta operação.</s:String>\n\n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Gravador de Câmara</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Nenhum dispositivo de vídeo encontrado :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Verificar dispositivos de vídeo.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Escala: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Trocar a escala do vídeo.</s:String>\n\n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Gravador de Quadro</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Auto Gravar</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Habilita a gravação automática enquanto desenha.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Pressione]</s:String>\n\n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Seletor de Cor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Selecione uma Cor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Vermelho</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Verde</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Azul</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Transparência</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hexa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Cor Inicial</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Cor Atual</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Última Cor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Arraste isto para&#x0d;escolher cores</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Clique e arraste para escolher&#x0d;cores de outras partes do seu ecrã.</s:String>\n\n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Visualizador de Exceções</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Abrir Exceção Interna</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Tipo da exceção</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Mensagem</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Pilha de chamadas</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Fonte da exceção</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Ocorreu um erro.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Enviar relatório</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Predefinição</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Codificador</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Nome</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Descrição</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Outro</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Guardar automaticamente quando uma opção for modificada.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Todas as alterações nestas configurações de predefinição (configurações de codificação e exportação) precisam de ser guardadas manualmente pressionando o botão de gravação.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Todas as alterações nestas configurações de predefinição (configurações de codificação e exportação) serão guardadas automaticamente.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Algumas das propriedades de uma predefinição padrão são somente leitura.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">É necessário dar um nome a esta predefinição.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Já existe uma predefinição com o mesmo nome.</s:String>\n\n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Gravação automática</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">As alterações nesta predefinição são automaticamente guardadas.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Padrão ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Predefinição padrão para o codificador.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Para Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respeita os limites de upload do Twitter (excepto tamanho e resolução).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Codec mais antigo e mais conhecido.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animação</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Vídeo</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projeto</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Mais adequado para gravações com mais cores e gradientes.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Alta qualidade • Fundo transparente</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Suporta guardar a animação com um fundo transparente.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Alta qualidade • Gráficos</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Melhor para gravações com menor quantidade de cores.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Balanceado</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Boa qualidade para imagens semelhantes a fotos usando o quantizador de Wu sem pontilhamento.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Alta qualidade para imagens semelhantes a fotos usando o quantizador de Wu com nível de bits mais alto e pontilhamento de difusão de erro Floyd-Steinberg.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Baixa qualidade, mais rápido</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantização de todos os quadros com a mesma paleta 'web-safe' predefinida e pontilhamento ordenado Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Qualidade superior</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Qualidade de imagem superior, mas com um tamanho de ficheiro maior.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Menor qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Menor qualidade de imagem, mas com um tamanho de ficheiro menor.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Maior qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Maior qualidade de imagem, mas com maior tamanho de ficheiro.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Menor qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Menor qualidade de imagem, mas com um tamanho de ficheiro menor.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Menor qualidade e codificação mais rápida</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Qualidade de imagem ainda menor, com uma codificação mais rápida, mas com um tamanho de ficheiro menor.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Sistema • Baixa qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Baixa qualidade, mas codificação mais rápida.</s:String>\n\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Alta qualidade de imagem e tamanho de ficheiro pequeno, mas codificação mais lenta.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Baixa qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Menor qualidade de imagem, tamanho de ficheiro pequeno e codificação mais rápida.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Alta qualidade de imagem e tamanho do ficheiro pequeno.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Inserir Quadros</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Ambos os lados devem ter o mesmo tamanho, esta janela permite o reposicionamento e redimensionamento da imagem e o plano de fundo. Clique para selecionar e redimensionar.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Tamanho do plano de fundo:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Ajustar a imagem no plano</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Redimensiona o plano de fundo para caber as duas imagens dentro (a partir do canto superior esquerdo).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Existe uma diferença de tamanho entre os quadros. É necessário resolver isso antes de inseri-los.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Novo(s) Quadro(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Quadro(s) Atual(is)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Tamanho da imagem:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Posição da imagem:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Redefinir o tamanho da&#x0d;imagem e a posição</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Novos quadros serão inseridos na lista&#10;atual de quadros na posição:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Antes</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Depois</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Quadro</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">A importar</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Selecione a Cor de Fundo</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importar Quadros do Vídeo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importador:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">A carregar...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Escala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Tamanho:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Largura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Taxa de Quadros:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Início:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Fim:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Seleção:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Quadros:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Duração:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Não foi possível carregar o vídeo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">O pré-visualizador não foi iniciado. Tente utilizar outro importador ou verifique se o vídeo não está corrompido.&#x0d;Se estiver a usar o MediaPlayer, verifique se o recurso do Windows chamado \"Recursos de Multimédia / Windows Media Player\" está ativado e verifique se tem o codec de vídeo necessário.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Tempo limite de resposta atingido a tentar pré-visualizar o vídeo.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Nenhum quadro selecionado para ser importado.</s:String>\n\n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Codificador</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">A codificar...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">A iniciar</s:String>\n\n    <s:String x:Key=\"S.Encoder.Completed\">A finalizar</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Copiado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Falha ao copiar</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Comando executado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Mostra a resposta dos comando(s).</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Falha ao executar comando</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Falha ao enviar</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Clique para abrir uma página para remover a imagem (se disponível).</s:String>\n\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Tempo decorrido, em minutos:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Análise:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Codificação:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Envio:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Cópia:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Comandos:</s:String>\n\n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Ficheiro removido ou movido</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Cancelado</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Erro</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Clique aqui para mostrar os detalhes do erro.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">A enviar</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">A executar comandos</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">A processar {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">A preparar para 2º passe</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">A processar {0} - 2º passe</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">A criar ficheiro</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">A analisar píxeis não modificados</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">A guardar resultado da análise</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Abrir ficheiro</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Explorar pasta</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Remover da lista</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Mostrar detailhes</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Limpar as codificações</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copiar como imagem</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copiar caminho completo</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copiar caminho da pasta</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copiar link</s:String>\n\n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Resultado do comando</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Resultado do comando</s:String>\n\n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notificações</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Limpar todas as notificações</s:String>\n\n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Ficheiro</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Início</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Reprodução</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transições</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Estatísticas</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Opções</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Ajuda</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Uma nova atualização está disponível!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Clique aqui para ler mais a respeito.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Quantidade total, quantidade selecionada, índice selecionado</s:String>\n\n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">A preparar Quadros</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Carregamento inválido - Não pode carregar múltiplos ficheiros de uma só vez. Tente escolher apenas um ficheiro.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Carregamento inválido - Não pode carregar múltiplos projetos de uma só vez. Tente escolher apenas um projeto.</s:String>\n\n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Abrir Imagem ou Vídeo</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Abrir Imagem ou Vídeo ou um Projeto</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Todos os ficheiros suportados</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Vídeo</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Animação em Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Animação em Gif</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Animação em Webp</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Avi\">Vídeo Avi</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Vídeo Matroska</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Vídeo Mov</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Vídeo Mp4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Vídeo Webm</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Imagem Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Imagem Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Imagem Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Ficheiro Zip</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Project\">Projeto do ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Projeto ScreenToGif como Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Ficheiro Psd</s:String>\n\n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Para iniciar uma nova gravação, navegue até \"Ficheiro > Novo\"</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Arraste e largue imagens, vídeos ou projetos para importar</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Muito obrigado por usar a minha aplicação!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Quanto menor a taxa de quadros, a quantidade de cores ou a quantidade de mudanças entre quadros, menor o tamanho do ficheiro</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Quer conversar? Abra \"Opções > Sobre\" para encontrar métodos de contacto</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Algum problema? Entre em contacto através da ferramenta de Comentários</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Gostaria de experimentar o novo gravador de ecrã? Navegue até \"Opções > Gravador\" para habilitá-lo</s:String>\n\n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Gravação</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Câmera</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Quadro</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Animação&#x0d;em Branco</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Novo</s:String>\n\n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Gravação</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Câmara</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Quadro</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Imagens e vídeos</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Inserir</s:String>\n\n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Guardar&#x0d;como</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Abrir</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Projetos&#x0d;Recentes</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Guardar como&#x0d;Projeto</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Descartar&#x0d;Projeto</s:String>\n\n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Pilha de Ações</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Desfazer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Refazer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Redefinir</s:String>\n\n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Área de Transferência</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Mostrar Área de Transferência</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Colar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Recortar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copiar</s:String>\n\n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Ajustar&#x0d;Janela</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Enquadrar Imagem</s:String>\n\n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Selecionar</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Selecionar&#x0d;Todos</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Ir Para</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Inverter</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Desselecionar</s:String>\n\n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Reprodução</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Primeiro</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Anterior</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Reproduzir</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Próximo</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Último</s:String>\n\n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Opções de Reprodução</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Loop durante a reprodução.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Opção apenas válida para a reprodução do pré-visualizador.&#x0d;Se desejar alterar as opções de loop para gifs e apngs exportados,&#x0d;isso estará disponível dentro do painel de 'Guardar Como' para alguns codificadores.</s:String>\n\n    <!--Editor • Edit tab • Frames-->\n    <s:String x:Key=\"S.Editor.Edit.Frames\">Quadros</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Remover</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Remover&#x0d;Duplicados</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Reduzir&#x0d;Quant. de Quadros</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Loop&#x0d;Suave</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Remover Todos Anteriores</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Remover Todos Próximos</s:String>\n\n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">A reordenar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Reverter</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Ioiô</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Mover para&#x0d;Esquerda</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Mover para&#x0d;Direita</s:String>\n\n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Atraso (Duração)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Substituir</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Incrementar ou&#x0d;Decrementar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Escala</s:String>\n\n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Tamanho e Posição</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Redimensionar</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Cortar</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Girar/Espelhar</s:String>\n\n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Legenda</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Texto Livre</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Quadro de Título</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Teclas&#x0d;Pressionadas</s:String>\n\n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Sobreposição</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Desenho&#x0d;Livre</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Formas&#x0d;Geométricas</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Cliques&#x0d;do Rato</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Marca D'água</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagrafia</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Borda</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Sombra</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Indicador de&#x0d;Progresso</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Ofuscar</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Estilos</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Desvanecer</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Deslizar</s:String>\n\n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Geral</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Quantidade de quadros</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Duração total</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Tamanho do quadro</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Duração média (atraso)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Tempo atual</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">O tempo atual (cumulativo) baseado no quadro selecionado.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI e escala da imagem</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Quadro selecionado</s:String>\n\n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Recortar</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Não pode recortar todos os quadros.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">A gravação precisa de pelo menos um quadro.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Remover Todos Os Quadros</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Tem certeza de que quer remover todos quadros?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Esta ação vai descartar o projeto aberto e não pode ser desfeita. Quer continuar?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Descartar o Projeto</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Tem certeza de que quer descartar o projeto?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Esta ação vai remover todos os quadros.&#x0d;Não pode desfazer essa operação.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Descartar o projeto anterior?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Se optar por não fazer isso, o projeto anterior estará disponível para abrir via Projetos Recentes.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Remover Quadros</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Tem certeza de que quer remover?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Esta ação vai remover {0} quadro(s).&#x0d;Poderá desfazer esta ação depois.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">A fechar o Editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Tem certeza de que quer sair?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">O projeto atual em que estava a trabalhar pode ser aberto novamente em 'Projetos Recentes'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">O projeto atual em que estava a trabalhar pode ser aberto novamente em 'Projetos Recentes', mas não se esqueça de que em alguns dias será removido automaticamente.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Arrastar e Soltar Inválido</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Não pode importar múltiplos ficheiros de uma só vez</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Tente escolher apenas um ficheiro.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Impossível carregar ficheiro</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">O ficheiro não pode ser carregado porque possui um formato incorreto.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Não pode importar múltiplos projetos de uma só vez</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Tente escolher apenas um projeto.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">O texto para ser aplicado está vazio.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar a Legenda.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar o Texto.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar o Quadro de Título a seguir a ele.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">É necessário definir uma espessura de borda maior do que zero no mínimo num dos lados.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar a Borda.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">A opacidade deve ser maior que zero para fazer alguma diferença no quadro.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Ao usar a profundidade da sombra e raio do borrado como zero, não fará diferença nenhuma porque a sombra estará escondida atrás do quadro.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">É necessário selecionar no mínimo um píxel para aplicar a Cinemagrafia. Selecione os píxeis desenhando em cima deles.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Desvanecer</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar a transição de desvanecimento.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Uma cor totalmente transparente não cria nenhum efeito na transição.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Deslizar</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar a transição de deslizamento.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">A carregar quadros</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Não foi possível carregar o projeto</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Não foi possível carregar os quadros porque estão todos corrompidos ou porque não foi possível encontrar as imagens.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Alguns quadros não puderam ser carregados</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Não foi possível carregar os quadros porque eles não foram encontrados ou porque estão corrompidos.</s:String>\n\n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">É necessário selecionar no mínimo um quadro para aplicar a camada.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg não está presente no seu sistema ou não foi encontrado. Adicione-o para as variáveis de ambiente do sistema (Path) ou clique aqui para abrir Opções > Extras para configurar a localização.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski não está presente no seu sistema ou não foi encontrado. Adicione-o para as variáveis de ambiente do sistema (Path) ou clique aqui para abrir Opções > Extras para configurar a localização.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Não há espaço suficiente na unidade de armazenamento em que esta aplicação guarda o seu cache ({0}% restantes). Clique aqui para abrir Opções > Ficheiros Temporários para libertar algum espaço.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Tentou importar múltiplas imagens com DPIs diferentes, o que não é suportado. Algumas delas foram importadas, outras precisam ser importadas separadamente.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Tentou importar múltiplas imagens com tamanhos diferentes, o que não é suportado. Algumas delas foram importadas, outras precisam ser importadas separadamente.</s:String>\n\n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">A procurar quadros de cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">A atualizar quadros</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">A preparar para importar</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">A importar quadros</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">A analisar quadros duplicados</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">A ajustar o atraso dos quadros</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">A descartar quadros duplicados</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">A descartar quadros</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">A descartar pastas</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">A redimensionar quadros</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">A cortar quadros</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">A aplicar sobreposição nos quadros</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">A criar o quadro título</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">A aplicar girar/espelhar nos quadros</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">A trocar o atraso</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">A aplicar efeito de transição</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">A preparar para guardar</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Cancelar carregamento e descartar projeto.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">A procurar loop perfeito</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">A descartar quadros não utilizados no loop</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Quadro:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Abrir Imagem</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Explorar Pasta</s:String>\n\n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Ir Para Quadro</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Ir para quadro (0 a {0})</s:String>\n\n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Guardar Como</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Remover Quadros Selecionados</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nova Gravação</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nova Gravação da Câmara</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nova Gravação de Quadro</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nova Animação em Branco</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nova imagem/vídeo ou Projeto</s:String>\n\n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nova gravação criada</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nova gravação de webcam criada</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nova gravação de quadro criada</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nova animação criada</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Desfazer ação</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Redefinir ação</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Refazer ação</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} quadros(s) recortado(s)</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} quadros(s) copiado(s)</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} quadros(s) colado(s)</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom em {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Todos os quadros foram selecionados</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Quadro #{0} selecionado</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Seleção invertida</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Todos os quadros foram desselecionados</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} quadros(s) removidos</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Lista de quadros invertida</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Efeito ioiô aplicado</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Quadro(s) movidos para a esquerda</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Quadro(s) movidos para a direita</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Quadros redimensionados</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Quadros cortados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Quadros girados/espelhados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">A ação de espelhar aplica-se aos quadros selecionados e a ação de girar aplica-se a todos os quadros</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Esta ação aplica-se a todos os quadros</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Esta ação aplica-se a os quadros selecionados</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Esta ação aplica-se a todos os quadros ou apenas aos selecionados, dependendo da sua configuração</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">A cinemagrafia aplica-se a todos os quadros, baseando-se no primeiro quadro</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Sobreposição aplicada</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Quadro de título criado</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">O quadro de título será inserido antes do quadro selecionado</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Atraso (duração) alterado</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Transição inserida</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Quantidade de quadros reduzida</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Quadros duplicados removidos</s:String>\n\n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Esconder</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Action.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Action.Save\">Guardar</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Cancelar</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Projetos Recentes</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">A procurar por projetos recentes...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Data de criação</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Nº de quadros</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Nenhum projeto selecionado. Selecione um projeto da lista para carregar.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Este projeto já está aberto neste editor.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Este projeto já foi aberto por outra instância do editor. Um projeto não pode ser aberto ao mesmo tempo por mais do que um editor.</s:String>\n\n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Área de Transferência</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Item:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} imagem</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} imagens</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Explorar Conteúdo</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Remover</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Modo de Inserção</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Antes do quadro selecionado</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Após quadro selecionado</s:String>\n\n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Diferença</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Ppp</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Opções</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Píxeis (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Percentagem (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">PPP:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Manter a proporção do aspecto.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Qualidade:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Alta qualidade</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear • Baixa qualidade</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Vizinho mais próximo • Baixa qualidade e mais rápido</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Qualidade de escala de píxeis.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">É necessário selecionar um valor diferente para aplicar o redimensionamento.</s:String>\n\n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Pontos</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Topo:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Esquerda:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Em Baixo:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Direita:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Para cortar, é necessário selecionar um retângulo menor do que o tamanho da imagem.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Para cortar, é necessário selecionar um retângulo maior do que 10x10 píxeis.</s:String>\n\n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Virar Horizontalmente</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Virar Verticalmente</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Rodar para Esquerda 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Rodar para Direita 90º</s:String>\n\n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Reduzir quantidade de quadros</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Fator:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Quantidade a remover:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Ajuste de duração:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Não ajustar</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Somar ao quadro anterior</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Somar aos quadros restantes</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Reduza a taxa de quadros do projeto inteiro.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Se a opção estiver desmarcada, é necessário selecionar múltiplos quadros consecutivos,&#10;numa quantidade maior do que o fator de remoção.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Esta ferramenta irá remover {0} quadro(s) após cada {1} quadros(s), não contando com os que foram removidos.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">É necessário selecionar os quadros para aplicar a redução de taxa de quadros (ou verifique a opção para aplicar para o projeto inteiro).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">A lista de quadros selecionados deve ser consecutiva. Não pode deixar alguns quadros não selecionados no meio de outros quadros selecionados.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">A seleção de quadros deve ser maior que o fator de remoção, de modo que a funcionalidade seja capaz de remover algum quadro.</s:String>\n\n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Remover quadros duplicados</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Similaridade (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Remoção de quadros:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Remover o primeiro quadros</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Remover o último quadro</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Ajuste de duração:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Não ajustar</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Utilizar a média</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Utilizar a soma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Esta ação analiza cada quadro (píxel por píxel) e remove aqueles que são no mínimo {0} % similares ao seu vizinho imediato.&#x0d;Pode escolher para ajustar a duração da exibição dos quadros.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Criar loop suave</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignorar primeiros:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Comparar do:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Fim</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Início</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Tenta encontrar um quadro com no mínimo {0} % de similaridade do quadro inicial e remove todos os quadros próximos.&#x0d;Pode escolher se quer ignorar alguns quadros iniciais e/ou executar a verificação do início (depois dos quadros ignorados) ou do fim.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">O número de quadros para serem ignorados precisa de ser menor que o número de quadros totais.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Não foi posssível criar um loop suave com as configurações atuais.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Já existe um loop suave a basear-se nas configurações atuais.</s:String>\n\n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Fonte</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Família:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Estilo:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Peso:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Tamanho:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Cor:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Cor de fundo:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Borda</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Espessura:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Posicionamento</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Vertical:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontal:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Alinhamento:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Decoração:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Teclas Pressionadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separador</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Editar as suas teclas pressionadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignorar as teclas Ctrl, Alt, Shift e Windows enquanto não estiverem a ser usadas como modificadoras.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Pressionamentos de teclas modificadoras sem formar nenhum comando serão ignoradas,&#x0d;por exemplo, a tecla \"Control\" sozinha será ignorada, mas o comando \"Control + C\" já não.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignorar as teclas simuladas de software.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Apenas capturar os pressionamentos de teclas do utilizador.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Extender a exibição do pressionamento de teclas:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Mostrar o pressionamento de tecla mais cedo:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Por (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Não existem pressionamentos de tecla na sua gravação.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Editor de Pressionamento de Teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Nº do quadro</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Teclas pressionadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Remover o comando de tecla</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Adicione um comando:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Letras minúsculas.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Permite inserir letras em minúsculas (apenas letras sem teclas de modificação).</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Caneta</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Borracha</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Selecionar</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Borracha\\nde Linhas</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Largura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Ponta:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Retângulo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Outros:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Marcador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Ajustar à Curva</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Não foi desenhado nada para ser aplicado no quadro(s) selecionado.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar o Desenho Livre.</s:String>\n\n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Inserir</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Formas Geométricas</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Raio:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Traços:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controla o tamanho dos traços e das lacunas.&#10;Pode definir vários tamanhos para criar um estilo de traço elaborado.&#10;O padrão é \"1 0\" ou vazio, o que significa um traço sem lacunas.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Desfazer rotação</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Remover</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Preenchimento</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Cliques do rato</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Cor do botão esquerdo:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Cor do botão do meio:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Cor do botão direito:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Não foram detetados cliques do rato no seu projeto.</s:String>\n\n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Ficheiro:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Nenhum selecionado</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacidade:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Selecione uma Imagem</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">É necessário selecionar uma imagem para aplicar a marca d'água.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">É necessário selecionar no mínimo um quadro para aplicar a Marca D'água.</s:String>\n\n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Aparência</s:String>\n    <s:String x:Key=\"S.Border.Info\">Use valores negativos para fazer a borda expandir a imagem. Quando estiver a fazer isso, a borda vai ser aplicada para todos os quadros.&#x0d;Se nenhum valor negativo for utilizado, a borda vai ser aplicada apenas nos quadros selecionados.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Cor da sombra:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Cor de fundo:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Direção:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Raio do borrado:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Profundidade:</s:String>\n\n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelar</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Desfocar</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Escurecer</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Iluminar</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Opções de ofuscação</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Tamanho do píxel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Nível do desfocamento:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Nível de escurecimento:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Nível de iluminação:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calcular a cor média para cada bloco de píxeis.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Aplicar a ofuscação na seleção inversa.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Suavidade</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Usar a ferramenta de seleção para selecionar uma parte da imagem que deve ser pixelada.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Usar a ferramenta de seleção para selecionar uma parte da imagem que não deve ser pixelada.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Não foi selecionada nenhuma parte da imagem. Selecione uma parte da imagem para aplicar o efeito de pixelamento.</s:String>\n\n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tipo</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Barra</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precisão:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Segundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milisegundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Percentagem</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Número do Quadro</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Data/horário atual</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Mostrar o total</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formato:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formato</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milisegundos</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = segundos</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutos</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentagem</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = número do quadro</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Totais:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Exemplos:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Pode usar os formatos de data e horário do .Net Framework.&#x0d;A especificação está disponível nos dois links seguintes.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Formatos padrão</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Formatos personalizados</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Contar a partir de:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Começa a contar o número do quadro a partir deste número.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientação:</s:String>\n\n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Atualização de atraso</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Modo de atraso:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Substituir (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Incrementar ou decrementar (em ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Escala (em %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Novo Valor</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Mínimo de 10 ms por quadro.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Diminuir/Aumentar Valor</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Valor de Escala</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Este novo valor substituirá a duração (atraso) de todos os quadros selecionados. O valor deve ficar entre 10 ms e 25.500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Esse valor irá aumentar/diminuir a duração (atraso) de cada quadro selecionado.&#x0d;Pode incrementar/decrementar, selecionando um valor entre -10.000ms e 10.000ms, mas a duração de cada quadro deve permanecer entre 10 ms e 25.500ms.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Altere a escala de duração de cada quadro selecionado pelo valor em percentual.&#x0d;Pode alterar a escala de duração de cada quadro selecionando um valor entre 1% e 1000%, mas a duração de cada quadro deve permanecer entre 10 ms e 25.500ms.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Usar a caneta para selecionar os píxeis que não devem permanecer estáticos (que devem mudar entre quadros), ao pintar por cima deles.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Duração da Transição</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Atraso da Transição</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Desvanecer para...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">O próximo&#10;quadro</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Uma cor</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Cor</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">A transição vai ser aplicada entre o quadro selecionado e próximo.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Tipo de ficheiro</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">O formato do ficheiro de saída.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">O predefinição de exportação que detém todas as configurações exibidas atualmente.&#10;Configure as suas predefinições de exportação através dos botões seguintes.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Imagem animada</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Vídeo</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Quadros</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Outro</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime File Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Project\">Projeto</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">Projeto do ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Ficheiro do Photoshop</s:String>\n\n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Perfil:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Padrão</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Adicionar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Guardar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Remover</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Redefinir</s:String>\n\n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">A excluir a predefinição</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Tem certeza de que quer remover a predefinição?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de remover a predefinição selecionada?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">A redefinir a predefinição</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Tem certeza de que quer redefinir a predefinição?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de redefinir a predefinição selecionada para as configurações padrão?</s:String>\n\n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Codificador</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Codificador e quantizador</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Codificador responsável por gerar o ficheiro final.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Codificador embutido.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">Codificador de Gif do KGy SOFT.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Codificador disponibilizado pelo sistema.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Codificador externo, desenvolvido por FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Codificador externo, desenvolvido por Gif.ski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Opções do codificador</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Habilitar o modo avançado.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Inserir manualmente os parâmetros para controlar o codificador.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parâmetros:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Lista de parâmetros que serão passados para FFmpeg.&#10;&#10;Parâmetros especiais:&#10;{I} é o caminho de entrada (os quadros).&#10;{O} é o caminho de saída (o ficheiro exportado).&#10;{W} é a largura do quadro.&#10;{H} é a altura do quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Para codificar com 2 passes, basta adicionar '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Pré-visualizar</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Pré-visualize a lista de parâmetros que será passada para FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Documentação dos codec</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Documentação do formato</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Documentação dos filtros</s:String>\n\n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Opções do Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Algoritmo de redução de cores (quantização).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Rede neural</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Quantização de alta fidelidade. Mais lento, porém melhor para animações com alta quantidade de cores.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Melhor para animações com menos cores. Mais rápido, porém pode produzir bandas de cor.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Corte médio</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Não tão bom quanto Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Escala de cinza</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Utiliza uma paleta fixa de cores em escala de cinza, por isso é bem rápido.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Cores mais utilizadas</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simplesmente escolhe as cores mais utilizadas na animação.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Amostragem:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Fator de amostragem:&#10;Um valor de 1 vai resultar num gif melhor, porém vai ser mais lento para ser codificado.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Qualidade:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Cores:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Quantidade máxima de cores (para cada quadro).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Utilize uma tabela de cores global.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Pode reduzir a qualidade e/ou tamanho do Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Melhor</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Utilizar um processo de codificação ainda mais rápido.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Pode reduzir a qualidade do gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Loop:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif com repetições.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Repetir para sempre.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">repetições.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Ativar transparência.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Ativa o modo de transparência completo, que faz com que o plano de fundo do Gif se torne transparente.&#10;O proceso de substituição do chroma key será ignorado se esta opção estiver ativa.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Selecione qual cor para mostrar como transparente.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Se uma cor for selecionada, será convertida para transparente e será exibida como transparente no Gif.&#10;Se nenhuma cor for selecionada, todas as cores transparentes (Alpha = 0%) aparecerão como transparente normalmente.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Detetar píxeis não modificados.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Ao analizar e detetar píxeis não modificados entre os quadros,&#10;é possível guardar apenas as partes necessárias no Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Substitua esses píxeis por um chroma key.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Píxeis repetidos ou não modificados serão substituídos pelo chroma key,&#10;tornando possível utilizar menos cores por quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Pontilhado:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Escala Bayer:</s:String>\n\n<!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizador</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Cor de Fundo:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Píxeis com alfa (transparência) que são considerados opacos pelo quantizador selecionado serão misturados com esta cor antes de obter a cor quantizada.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Limiar Alfa:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Determina o valor alfa de entrada sob o qual a cor quantizada será transparente.&#x0d;&#x0a;Se 0, então o resultado nunca terá transparência.&#x0d;&#x0a;Se 255, apenas os píxeis totalmente transparentes são considerados transparentes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Limiar Branco:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Determina o brilho de entrada mais baixo para considerar o resultado da cor branca.&#x0d;&#x0a;Afeta o brilho do resultado. Um pontilhador de difusão de erro pode compensar o valor deste parâmetro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Mapeamento Direto</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Quando marcada, a cor quantizada é determinada por um mapeamento direto em vez de procurar a entrada da paleta mais próxima.&#x0d;&#x0a;Ele acelera a quantização, mas pode resultar num resultado de contraste mais alto. Um pontilhamento de difusão de erro pode compensar o valor desse parâmetro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Tamanho da Paleta:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Determina o tamanho máximo da paleta por quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Nível de bits personalizado.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Quando marcado, o nível de bits pode ser configurado manualmente.&#x0d;&#x0a;⚠️ Aviso: O nível de bit mais alto pode exigir MUITA memória!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Um valor mais alto significa mais precisão, maior espaço de cores de destino, processamento mais lento e maior uso de memória.&#x0d;&#x0a;Por exemplo, se 1, então o resultado não pode ter mais de 8 cores, ou quando 2, não mais de 64 cores.&#x0d;&#x0a;Para os quantizadores Octree e Wu, afeta também o número máximo de tons monocromáticos.&#x0d;&#x0a;Por exemplo, se 5 (que é o padrão para o quantizador Wu), apenas 32 tons monocromáticos podem ser diferenciados.&#x0d;&#x0a;⚠️ Cuidado: O quantizador Wu consome pelo menos 650 MB com o valor mais alto.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Preto e Branco</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Paleta fixa de 1 bpp com as cores preto e branco.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Tons de cinza com 4 cores</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Paleta fixa de 2 bpp com 4 entradas em tons de cinza.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Escala de cinza com 16 cores</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Paleta fixa de 4 bpp com 16 entradas em tons de cinza.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Escala de cinza com 256 cores</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Paleta fixa de 8 bpp com 256 entradas em tons de cinza.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Paleta de 4 bpp padrão do sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Paleta fixa de 4 bpp usando as 16 cores padrão de sRGB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Paleta de 8 bpp padrão do sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Paleta fixa de 8 bpp, incluindo as cores e transparência 'seguras para a web'.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">Paleta RGB 332</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Paleta fixa de 8 bpp usando o espaço de cores RGB 332.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Quantizador Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">A otimizar a paleta para cada quadro com o algoritmo Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Quantizador de corte mediano</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">A otimizar a paleta para cada quadro com o algoritmo de corte mediano.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Quantizador Wu</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">A otimizar a paleta para cada quadro com o algoritmo de Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Pontilhador</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Força:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">A força do pontilhador, ou 0 para calibrar automaticamente a força.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Semente:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Um número inteiro a ser usado para produzir um padrão de pontilhamento aleatório específico.&#x0d;&#x0a;Deixe em branco para usar uma semente aleatória para cada quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Os quadros são quantizados sem pontilhamento.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Processamento de Serpentina</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Quando marcada, a direção de propagação do erro é alterada de linha para linha.&#x0d;&#x0a;Isso ajuda a reduzir o efeito cascata do pontilhamento de difusão de erro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">O padrão de matriz 2x2 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">O padrão de matriz 3x3 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">O padrão de matriz 4x4 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">O padrão de matriz 8x8 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Meio-tom pontilhado (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Uma matriz 8x8 com um padrão de meio-tom pontilhado.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Ruído Azul (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Uma matriz 64x64 com um padrão de ruído azul.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Matriz 4x3 de Bill Atkinson com 6 valores efetivos.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">Matriz 5x2 de D. Burkes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">A matriz 3x2 original de Floyd e Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Uma matriz 5x3 de Jarvis, Judice e Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Matriz 5x3 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Matriz 5x2 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Matriz 3x2 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Uma matriz hexagonal 7x4 por Stevenson e Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Matriz 5x3 de Stucki.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Ruído Aleatório</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Ruído branco aleatório.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Ruído de Dradiente Intercalado</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Ruído de gradiente não aleatório gerado por uma fórmula.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Visualizar</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Mostrar quadro atual.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Quando marcada, a visualização mostra o quadro atual em vez de um exemplo de imagem padrão.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">A visualização automática está desativada devido ao alto requisito de memória das configurações atuais. Clique para atualizar a visualização.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Falha ao gerar visualização: {0}&#x0d;&#x0a;Clique para tentar gerá-lo novamente.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Configurações de Animação</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Loop infinito.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Quando marcada, a animação será repetida indefinidamente.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Vai e volta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Quando marcada, a animação será reproduzida para frente e para trás.&#x0d;&#x0a;Isso é obtido duplicando os quadros, o que significa um tamanho de ficheiro maior e um tempo de codificação mais longo.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Repetições:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Especifica quantas vezes a animação será reproduzida.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Permitir quadros delta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Quando marcado, os píxeis inalterados tentam ser detetados durante a codificação.&#x0d;&#x0a;Ao usar com um quantizador otimizado, esta opção possibilita que um quadro tenha mais de 256 cores.&#x0d;&#x0a;Esta opção é ignorada se o quantizador não usar transparência e a opção Permitir Quadros Recortados estiver desmarcada.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Tolerância Delta:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Especifica a tolerância máxima ao detetar píxeis alterados.&#x0d;&#x0a;Se 0, então nenhuma diferença é tolerada.&#x0d;&#x0a;Se 255, então pode haver quadros (ou mesmo todos eles) que são adicionados sem conteúdo.&#x0d;&#x0a;O intervalo razoável está entre 0 e 16 para um quantizador otimizado. Aqueles com cores fixas podem ser usados com valores um pouco maiores com dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Se a tolerância Delta for muito alta, o resultado pode ter baixa qualidade. Clique para redefinir a tolerância delta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Permitir quadros recortados.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Quando marcado, o codificador pode adicionar quadros menores do que a resolução real.&#x0d;&#x0a;Se Permitir Quadros Delta estiver desmarcado, permite apenas o recorte de possíveis bordas transparentes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Permitir Quadros Delta é ignorado porque a configuração atual não usa alfa e Permitir Quadros Recortados está desmarcada. Clique para habilitar quadros recortados.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Permitir quadros cortados não tem efeito porque a configuração atual não usa alfa e Permitir quadros delta está desmarcada. Clique para habilitar quadros delta.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Opções do Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Predição:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Cima</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Média</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Misto</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng em loop.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Detetar píxeis não modificados.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Pinte todos os píxeis não modificados com uma cor transparente.</s:String>\n\n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Predefinição:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Padrão</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Imagem</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Foto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Desenho</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Ícone</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Texto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Use o modo sem perdas.</s:String>\n\n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Avançado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Método de configuração dos parâmetros do codificador:&#10;Normal: Use controlos de interface de utilizador padrão.&#10;Avançado: Use uma caixa de texto para digitar os parâmetros.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">O codificador de vídeo, responsável por&#10;converter os píxeis para o ficheiro de saída.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Predefinição:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Muito Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Mais Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Mais Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Muito Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Qualidade</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanceado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Veloz</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Padrão</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Sem Perdas</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Sem Perdas (Alto Desempenho)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Alto Desempenho</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Alta Qualidade</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Disco Bluray</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Baixa Latência</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Baixa latência (Alto Desempenho)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Baixa Latência (Alta Qualidade)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Relação entre velocidade de codificação para compressão,&#10;predefinições mais lentas podem gerar melhor compressão &#10;(qualidade por ficheiro).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Ac. de Hardware:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Desligado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Ligado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Seleção automática</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controla o uso de hardware dedicado (gráficos de vídeo).&#10;Off: Não usa hardware dedicado.&#10;Ligado: Usa hardware dedicado e permite selecionar codificadores especiais.&#10;Auto: Usa hardware dedicado e seleciona automaticamente o codificador certo, quando possível.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Formato do píxel:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automático</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Método de sincronização de vídeo.&#10;Auto: Escolhe entre 1 e 2, dependendo dos recursos muxer (formato) .&#10;Passe: Cada quadro é passado com seus tempos para o codificador.&#10;Constante: Os quadros serão duplicados e descartados para alcançar exatamente a solicitada taxa constante de quadros.&#10;Variável: Os quadros são passados com seus cronos ou descartados de modo a evitar que 2 quadros tenham o mesmo fuso horário.&#10;Pular: Como passe, mas destrói todos os tempos, fazendo com que o codificador gere novos fusos de tempo com base na taxa de quadros.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passe</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Taxa de quadros constante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Taxa de quadro variável</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Saltar</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Taxa de quadros:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Filme</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Passe:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Fator de taxa constante.&#10;Configuração de controlo de qualidade e taxa.&#10;Coloque-o vazio se não quiser definir esta propriedade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Nível de qualidade:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Valores menores significam melhor qualidade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Taxa de bits:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Taxa de bits de vídeo de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Modo de taxa:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variável</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Taxa mín:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Tolerância mínima de bitrate.&#10;Mais útil ao usar o modo CBR.&#10;Deixe-o vazio ou zero&#10;se não quiser definir esta propriedade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Taxa max:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Tolerância máxima de bitrate.&#10;Requer que o tamanho do buffer seja definido também.&#10;Deixe-o vazio ou zero&#10;se não quiser definir esta propriedade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Tamanho do buffer:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Tamanho do buffer de controlo de taxa.&#10;Deixe-o vazio ou zero&#10;se não quiser definir esta propriedade.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Comprimir num zip.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exporta as imagens dentro de uma pasta comprimida.</s:String>\n\n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Comprimir a imagem.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Comprime os dados da imagem usando o algoritmo RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Exportar os dados da timeline.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exporta os tempos de cada frame, em vez de exportar apenas as imagens.</s:String>\n\n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Opções de exportação</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Exporte parcialmente.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Exporte o ficheiro de uma pasta à sua escolha.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Substituir?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Avisar</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Apenas avisa que existe um ficheiro com o mesmo nome.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Perguntar</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Pergunta se o utilizador quer substituir o ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Permitir</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Simplesmente substitui o ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Exportar como projeto também (mesma pasta, mesmo nome).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Fazer upload do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copiar para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Ficheiro</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copia o ficheiro para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Pasta</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copia o caminho da pasta onde o ficheiro foi gerado para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Caminho do ficheiro</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copia o caminho do ficheiro gerado para a área de trasferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copia o link gerado pelo serviço de upload para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Executar comandos após a codificação.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Digite comandos para serem executados após a codificação.&#x0d;Para executar multiplos comandos, escreva cada comando em linhas diferentes.&#x0d;Macros:&#x0d;{p} = Caminho do ficheiro.&#x0d;{f} = Caminho da pasta.&#x0d;{u} = URL do ficheiro enviado.</s:String>\n\n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Exportação parcial</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Selecione o método de exportação parcial.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expressão</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exporta partes da animação com base numa expressão simples.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Faixa de quadros</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exporta apenas parte da animação dentro da faixa de quadros.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Faixa de tempo</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exporta apenas parte da animação dentro do tempo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Seleção</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exporta apenas os quadros selecionados na linha do tempo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Nenhum quadro selecionado.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 quadro selecionado.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} quadros selecionados.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">De:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Para:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Expressão:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Digite números de quadros separados por uma vírgula ou&#10;sequências de quadros separadas por um sinal de menos:&#10;1, 3, 4, 6 - 9</s:String>\n\n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Ficheiro</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Pasta de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Selecione a pasta de destino</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Escolha a pasta.&#x0d;Pressione Shift e clique para selecionar&#x0d;o nome do ficheiro também.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Formato do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Nome do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animação</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Incremente o nome do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Decremente o nome do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Um ficheiro com o mesmo nome já existe na pasta selecionada.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Guardar na área de transferência.</s:String>\n\n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">É necessário selecionar onde guardar o ficheiro (numa pasta, na área de transferência ou para fazer upload).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">É necessário selecionar a extensão do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Ao selecionar o modo avançado, é necessário digitar os parâmetros no campo de parâmetros.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Alguns parâmetros especiais de {I} (entrada) e/ou {O} (saída) estão em falta no campo de parâmetros.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Para executar um comando após a codificação, é necessário o comando na caixa de texto.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">É necessário selecionar pelo menos um quadro quando tiver a opção de exportar apenas os quadros selecionados.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">A expressão para exportar parcialmente o projeto está inválida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Nenhum serviço de upload selecionado. É necessário selecionar um destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Não foi possível enviar para o serviço selecionado porque não foi autorizado. Navegue até Opções > Serviços de Upload para autorizar esta aplicação.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Não é possível selecionar a opção de copiar o link porque não escolheu para fazer o upload do ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">É necessário selecionar uma pasta de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">A pasta de destino não existe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">A pasta de destino contém um ou mais caracteres inválidos. Por favor, selecione uma pasta válida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">É necessário escrever um nome para o ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">O nome do ficheiro de destino contém um ou mais caracteres inválidos. Por favor, escreva um nome válido para o ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Nome do ficheiro já está em utilização. Habilite a opção de substituir ou escolha um outro nome para o ficheiro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Já existe um projeto com o mesmo nome de ficheiro. Escolha para substituir ou escolha outro nome de ficheiro ou pasta.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">A operação foi cancelada.</s:String>\n\n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Selecione a predefinição de upload, que tem detalhes sobre o serviço em uso para upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Este serviço de upload impõe limites.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Adicione uma nova predefinição de upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Editar configurações de predefinição de upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Veja o histórico de upload desta predefinição.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Remova a predefinição de upload selecionada no momento.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Selecione uma predefinição de upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Escolha um desta lista.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Sem predefinição de upload disponível para este formato</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Adicione uma predefinição usando o botão abaixo.</s:String>\n\n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">A remover a Predefinição do Upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Tem certeza de que quer remover a predefinição do upload?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de remover a predefinição de upload selecionada?</s:String>\n\n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Exportar Quadros</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Tem a certeza de que quer exportar os quadros?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Esta ação exportará {0} quadros diretamente para a pasta selecionada.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Substituir</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Tem a certeza de que quer substituir o ficheiro?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Um ficheiro com o nome '{0}' já existe na pasta.\\r\\nGostaria de substitui-lo?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Tem a certeza de que quer substituir os ficheiros?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Já existe um ou mais ficheiros com o mesmo nome na pasta.\\r\\nGostaria de substitui-los?</s:String>\n\n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Visualizador de comando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Comando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Caminho de entrada</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Caminho de saída</s:String>\n\n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Comentários</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Enviar</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Pré-visualização</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Enviar comentário</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Título</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Mensagem</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Se estiver com algum problema na aplicação, não se esqueça de me explicar como chegou ao erro, passo a passo.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Tipo de comentário</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Sugestão</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problema/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Seu e-mail</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">É necessário escrever o título do comentário.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">É necessário escrever a mensagem do comentário.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">É necessário escrever o seu e-mail, para poder receber uma resposta do programador.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">A enviar em plano de fundo... Esta janela irá ser fechada logo a seguir.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Anexos (Opcional, Máximo de 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Adicionar anexos</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Remover todos os anexos</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Eu consigo entender inglês</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">e Português (Brasileiro e Europeu).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Isto é o que me vai enviar, incluindo todos os anexos.</s:String>\n\n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Solucionar problemas</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Alguma janela está escondida?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Se qualquer uma das janelas está escondida (fora do ecrã),&#x0d;use as opções abaixo para redefinir sua posição atual e de inicialização.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Esta é a posição atual das janelas:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Esta é a posição de onde as janelas irão abrir na próxima vez:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Mova todas as janelas para o ecrã principal.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Redefinir a posição de inicialização de todas as janelas.</s:String>\n\n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Itálico</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Oblíquo</s:String>\n\n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Grosso</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Pouco Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra Grosso</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra Leve</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Pesado</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Leve</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regular</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Fino</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra Grosso</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra Leve</s:String>\n\n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Topo</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Fundo</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Esticar</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Esquerda</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Direita</s:String>\n\n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertical</s:String>\n\n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Esquerda</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Direita</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Justificado</s:String>\n\n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Sublinhado</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Tachado</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Linha do topo</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Linha de base</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.pt.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Voltar</s:String>\n    <s:String x:Key=\"S.Cancel\">Cancelar</s:String>\n    <s:String x:Key=\"S.Yes\">Sim</s:String>\n    <s:String x:Key=\"S.No\">Não</s:String>\n    <s:String x:Key=\"S.Add\">Adicionar</s:String>\n    <s:String x:Key=\"S.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Id\">Cód.</s:String>\n    <s:String x:Key=\"S.Title\">Título</s:String>\n    <s:String x:Key=\"S.Description\">Descrição</s:String>\n    <s:String x:Key=\"S.SelectColor\">Clique aqui para selecionar a cor.</s:String>\n    <s:String x:Key=\"S.Documentation\">Clique para navegar até a documentação.</s:String>\n    <s:String x:Key=\"S.Suppress\">Suprimir</s:String>\n    <s:String x:Key=\"S.Preview\">Pré-visualização</s:String>\n    <s:String x:Key=\"S.Size\">Tamanho</s:String>\n    <s:String x:Key=\"S.Background\">Plano de fundo</s:String>\n    <s:String x:Key=\"S.Color\">Cor:</s:String>\n    <s:String x:Key=\"S.Delay\">Atraso</s:String>\n    <s:String x:Key=\"S.DelayMs\">Atraso:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Valor -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Valor de Escala:</s:String>\n    <s:String x:Key=\"S.Margin\">Margem:</s:String>\n    <s:String x:Key=\"S.Padding\">Preenchimento:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Altura mínima:</s:String>\n    <s:String x:Key=\"S.AndOr\">e/ou</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">Oh não, o aplicativo parou de funcionar :(</s:String>\n    <s:String x:Key=\"S.Required\">Preenchimento obrigatório.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Dependência Ausente</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">O Net Framework 4.8 não está instalado</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Em ordem para utilizar o aplicativo, você precisa fazer o download da versão correta do .Net Framework.&#10;Gostaria de abrir a página de download?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Apenas uma instância permitida</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">O aplicativo já está executando</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif já está executando, mas aparentemente nenhuma janela está aberta. Verifique a bandeja do sistema, um ícone do ScreenToGif deve estar lá.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Salvando as Configurações</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Gostaria de tentar salvar novamente?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Parece que o ScreenToGif não tem privilégios suficientes para salvar as configurações do disco.&#10;&#10;Gostaria de tentar novamente, mas desta vez usando privilégios administrativos?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Fechando ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Você tem certeza que deseja fechar?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Todas as janela do ScreenToGif serão fechadas e o ícone da área de notificação será removido.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Trocar Adaptador Gráfico</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Mude para o adaptador gráfico correto para capturar a tela selecionada</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Devido a uma limitação no DirectX, ScreenToGif deve estar executando no mesmo adaptador gráfico que a tela que está sendo capturada.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Troque o adaptador gráfico definido para ScreenToGif abrindo Configurações do Windows > Sistema > Vídeo > Configurações Gráficas ou clicando no link abaixo.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Troque o adaptador gráfico para ScreenToGif abrindo as configurações gráficas do seu adaptador gráfico.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Abra as Configurações do Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Backspace\">Backspace</s:String>\n    <s:String x:Key=\"S.Keys.Tab\">Tab</s:String>\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.PauseBreak\">Pause/Break</s:String>\n    <s:String x:Key=\"S.Keys.CapsLock\">Caps Lock</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Espaço</s:String>\n    <s:String x:Key=\"S.Keys.PageUp\">Page Up</s:String>\n    <s:String x:Key=\"S.Keys.PageDown\">Page Down</s:String>\n    <s:String x:Key=\"S.Keys.Home\">Home</s:String>\n    <s:String x:Key=\"S.Keys.End\">End</s:String>\n    <s:String x:Key=\"S.Keys.Left\">Seta Esquerda</s:String>\n    <s:String x:Key=\"S.Keys.Up\">Seta Cima</s:String>\n    <s:String x:Key=\"S.Keys.Right\">Seta Direita</s:String>\n    <s:String x:Key=\"S.Keys.Down\">Seta Baixo</s:String>\n    <s:String x:Key=\"S.Keys.PrintScreen\">Print Screen</s:String>\n    <s:String x:Key=\"S.Keys.Insert\">Insert</s:String>\n    <s:String x:Key=\"S.Keys.Delete\">Excluir</s:String>\n    <s:String x:Key=\"S.Keys.NumLock\">Num Lock</s:String>\n    <s:String x:Key=\"S.Keys.ScrollLock\">Scroll Lock</s:String>\n    <s:String x:Key=\"S.Keys.Shift\">Shift</s:String>\n    <s:String x:Key=\"S.Keys.LeftShift\">Shift Esquerdo</s:String>\n    <s:String x:Key=\"S.Keys.RightShift\">Shift Direito</s:String>\n    <s:String x:Key=\"S.Keys.Alt\">Alt</s:String>\n    <s:String x:Key=\"S.Keys.LeftAlt\">Alt Esquerdo</s:String>\n    <s:String x:Key=\"S.Keys.RightAlt\">Alt Direito</s:String>\n    <s:String x:Key=\"S.Keys.Ctrl\">Control</s:String>\n    <s:String x:Key=\"S.Keys.LeftCtrl\">Ctrl Esquerdo</s:String>\n    <s:String x:Key=\"S.Keys.RightCtrl\">Ctrl Direito</s:String>\n    <s:String x:Key=\"S.Keys.Windows\">Windows</s:String>\n    <s:String x:Key=\"S.Keys.LeftWindows\">Windows Esquerdo</s:String>\n    <s:String x:Key=\"S.Keys.RightWindows\">Windows Direito</s:String>\n    <s:String x:Key=\"S.Keys.NextTrack\">Próxima Faixa</s:String>\n    <s:String x:Key=\"S.Keys.PreviousTrack\">Faixa Anterior</s:String>\n    <s:String x:Key=\"S.Keys.PlayPause\">Play/Pause</s:String>\n    <s:String x:Key=\"S.Keys.Stop\">Parar</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Botão direito</s:String>  \n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Nova gravação de tela</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Nova gravação da webcam</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Nova gravação de quadro</s:String>\n    <s:String x:Key=\"S.Exit\">Fechar</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Nova gravação de tela</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Nova gravação de webcam</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Nova gravação de quadro</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Nova animação</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Inserir gravação de tela</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Inserir gravação de webcam</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Inserir gravação de quadro</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Inserir mídia (imagens e vídeos)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Salvar como...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Carregar arquivos (imagens, vídeos e projetos)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Carregar projetos recentes</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Descartar projeto atual</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Alterar tempo de exibição dos quadros</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Aumentar/Diminuir tempo de exibição dos quadros</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Escalar o tempo de exibição dos quadros</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Colocar o zoom em 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Ajustar a janela do editor para o tamanho do quadro</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Fazer a imagem caber no espaço disponível na janela do editor</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Selecione o primeiro quadro</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Selecione o quadro anterior</s:String>\n    <s:String x:Key=\"S.Command.Play\">Pré-visualize a animação</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Selecione o próximo quadro</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Selecione o último quadro</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Desfazer</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Refazer</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Desfaça todas as alterações no projeto</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Copie os quadros selecionados e armazene-os na área de transferência</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Corte os quadros selecionados e armazene-os na área de transferência</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Cole os quadros da área de transferência</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Remover todos os quadros selecionados</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Remover todos os quadros anteriores</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Remover todos os próximos quadros</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Remover quadros duplicados</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Reduzir a quantidade de quadros</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Criar um animação com loop suave</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Reverter a animação</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Transformar a animação em ioiô, indo para frente e para trás</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Mover o quadro selecionado para a esquerda</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Mover o quadro selecionado para a direita</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Redimensionar todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Cortar todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Girar ou rotacionar os quadros</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Adicionar uma legenda</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Adicionar um texto</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Adicionar um quadros com um título</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Pressionamentos de tecla: inserir teclas pressionadas durante a gravação</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Desenhe livremente</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Adicione formas geométricas</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Cliques do mouse</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Selecione uma imagem e adicione como marca d'água</s:String>\n    <s:String x:Key=\"S.Command.Border\">Adicionar bordas</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Adicionar sombra</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Ofuscar: esconda partes de seus quadros</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Use a ferramenta de desenho para selecionar quais partes do quadro não devem permanecer estáticas através da animação</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Barra de progresso ou texto com detalhes de execução</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Selecione todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navegue até o quadro a partir do número</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Inverta a seleção de quadros</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Deselecione todos os quadros</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Transição de esmaecimento</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Transição de deslizamento</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Limpe todas as codificações finalizadas</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Mover para cima</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Mover para baixo</s:String>\n    <s:String x:Key=\"S.Command.Add\">Adicionar</s:String>\n    <s:String x:Key=\"S.Command.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Editar item selecionado</s:String>\n    <s:String x:Key=\"S.Command.Save\">Salvar item selecionado</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Remover item selecionado</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Ver a história</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Início</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Gravador</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Abre o gravador de tela.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Câmera</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Abre o gravador de câmera.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Quadro</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Abre o gravador de quadro.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Abre o editor. O local central deste aplicativo.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Opções</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Nova versão disponível</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Exibe a tela de download da versão mais recente do ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Atualizador</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Uma nova atualização está disponível</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Nova versão!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Nova versão disponível, Versão {0}!&#x0d;Clique aqui para mais detalhes.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Aparentemente seu sistema não é mais suportado ou algo mudou no sistema de atualização. Tente fazer o download manual a partir da página web.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versão</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Portátil</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Instalador</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">O que há de novo?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Correções de bugs:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Uma nova versão está disponível para você baixar.&#x0d;Você gostaria de abrir o navegador para baixá-la?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Abra o aplicativo após a atualização</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Download</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Instalar</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Instalar manualmente</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Baixando...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Não foi possível exibir os detalhes da atualização.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Não foi possível fazer o download da atualização.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Você precisa esperar todas as codificações finalizarem para atualizar o aplicativo.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Baixar</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Baixar</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} de {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Opções</s:String>\n    <s:String x:Key=\"S.Options.App\">Geral</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Gravador</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editor</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Tarefas</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Atalhos</s:String>\n    <s:String x:Key=\"S.Options.Language\">Idioma</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Armazenamento</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Nuvem</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Doação</s:String>\n    <s:String x:Key=\"S.Options.About\">Sobre</s:String>\n    <s:String x:Key=\"S.Options.Other\">Outras configurações</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Atalho de teclado ausente para a gravação via cursor</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Em ordem para usar o cursor do mouse como guia para mover a área de gravação, você deve definir uma tecla de atalho para poder desabilitar quando necessário.</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Inicialização</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Iniciar&#10;manualmente</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">O aplicativo vai abrir somente quando você executá-lo.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Iniciar com&#10;o Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">O aplicativo será executado assim que o Windows iniciar, após o login.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossível alternar entre os modos de inicialização.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Permitir apenas&#10;uma instância</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Você poderá somente abrir uma instância por usuário e executável.&#10;Significa que uma instância de um usuário ou executável diferentes podem co-existir.&#10;Quando tentar executar o aplicativo novamente, uma segunda vez, o aplicativo vai tentar colocar foco na instância que já está aberta.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Permitir múltiplas&#10;instâncias</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Você poderá abrir o aplicativo várias vezes ao mesmo tempo, sem restrições.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Inicie minimizado na bandeja do sistema.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(O ícone na bandeja do sistema estará visível enquanto essa opção estiver ativa)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Inicie com:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Janela de início</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Gravador de tela</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Gravador de câmera</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Gravador de quadro</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Janela do editor</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(A janela que aparecerá primeiro quando o aplicativo inicializar)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Tema do aplicativo</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Esquema de cores</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Muito claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Claro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Escuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Muito escuro</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Mesmo do sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Cores de exemplo.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Ícone da bandeja do sistema</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Exibir o aplicativo na bandeja do sistema (área de notificação).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Manter o aplicativo aberto mesmo se todas as janelas estiverem fechadas.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Faça nada</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Abrir uma janela</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Nenhuma janela</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimizar/restaurar todos janelas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimizar todas janelas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restaurar todas janelas</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Botão esquerdo:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Botão esquerdo (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Botão do meio:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Janela:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Senão, abra:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Geral</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Tentar corrigir o erro de 'Sem quota suficiente...'.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Pergunte-me antes de fechar o aplicativo (via o comando 'Sair').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Desabilite a aceleração por hardware.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(A interface será renderizada via software)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Buscar atualizações das traduções.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Traduções atualizadas serão baixadas e instaladas automaticamente)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Buscar atualizações ao iniciar o aplicativo.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Baixar e instalar atualizações automaticamente ao fechar o aplicativo.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Force o download da versão portátil.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Requirer a instalação manual, descompactando e trocando o executável)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Force a atualização para executar com privilégios de administrador.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Avisar-me antes do início da instalação.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">Baixe atualizações em redes limitadas.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(Permite baixar atualizações em redes com download limitado)</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Antiga</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Nova</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Frequência de captura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Cada quadro será capturado manualmente por você, ao pressionar o botão de captura ou atalho de teclado equivalente.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Interação de usuário</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Quadros serão capturados toda vez que você clicar ou digitar algo.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Por segundo</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Quadros serão capturados em base de 'por segundo',&#10;considerando o denominador de taxa de captura definido na tela do gravador.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Por minuto</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Quadros serão capturados em base de 'por minuto' (timelapse)&#10;considerando o denominador de taxa de captura definido na tela do gravador.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Por hora</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Quadros serão capturados em base de 'por hora' (timelapse),&#10;considerando o denominador de taxa de captura definido na tela do gravador.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Duração de reprodução:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(Em ms, cada quadro capturado receberá essa duração)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Atraso:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(Em ms, tempo aguardado antes da captura de cada quadro)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Cada quadro será capturado em intervalos de {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Modo de captura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Use o modo de captura antigo, que é mais devagar e pode não funcionar para capturar jogos,&#10;mas não requer download the ferramentas ou plug-ins externos.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Use o modo de captura por duplicação de área de trabalho, que é mais rápido e&#10;pode capturar jogos em tela cheia, mas requer Windows 8 ou superior.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Salvar para&#10;arquivo</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Cada quadro é capturado e salvo diretamente como um arquivo de imagem em disco.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Cache de&#10;memória</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Cada quadro é capturado e salvo como uma lista de pixels na memória primeiro para depois ser salvo em disco (pode ser feita compressão de dados antes).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Compressão:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Ótima</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Mais devagar mas provavelmente possui compressão superior)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Rápida</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Mais rápida porém provavelmente compressão inferior)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Sem compressão</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Nenhuma compressão será feita na captura de quadros)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Tamanho do cache:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(Em MB. Após chegar nesse tamanho, os dados serão gravados em disco)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Previnir a captura de quadros todos em preto.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Previne o BitBlt com cache de memória de resultar errôneamente em quadros com todos os pixels em preto)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Mostre o cursor na gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Selecione a cor do Cursor</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Taxa de quadros por segundo fixa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Atraso constante que não muda com o atraso da gravação)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Capture apenas quando algo mudar na tela.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Um quadro será capturado somente quando alguma coisa mudar dentro da região de captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Melhora a performance captura em uma conexão remota.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disabilita a captura de janelas em camadas)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Forçar limpeza de memória durante a captura.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Reduz o uso de memória durante a captura, mas diminui a performance)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Guias</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Regra de terços</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Clique para alternar a exibição&#10;da guia de regra de terços.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Mira</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Clique para alternar a exibição&#10;da guia de mira.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">As guias serão somente exibidas enquanto o gravador estiver pausado ou parado.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Esconder barra de título (modo reduzido).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Habilitar a lupa.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(A lupa garante um zoom durante a seleção da área de gravação)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Animar a borda da região de captura durante a seleção.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Animar usando o estilo de 'formigas marchantes')</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Habilitar a movimentação da seleção.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Exibe um adorno perto do canto da seleção, permitindo o movimento da área de captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Modo compacto.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Exibe uma versão menor do painel de controles de gravação)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Exibe o botão de descartar também durante a gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normalmente, o botão só fica visível durante a pausa)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Melhore a performance da seleção de tela.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Reduz os travamentos durante a seleção de região de captura ao exibir uma visão estática da tela)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Lembre-se do tamanho anterior da área de gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Lembrar da localização anterior da área de gravação.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Use uma contagem regressiva.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Em segundos, aguarda antes de iniciar a captura)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Habilitar gravação via cursor.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(A área de gravação vai se posicionar conforme a posição do cursor)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Margem onde a área de gravação começará a se ajustar)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Margem adicional onde a interface começará a ser escondida para ser movida)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Me pergunte antes de descartar a gravação.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Plano de fundo do pré-visualizador</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Tamanho da grade:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Muito pequeno</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Pequeno</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Muito grande</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Eu adoro quadrados grandes</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Sou cego</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Largura</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Cor de fundo</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">1ª Cor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">2ª Cor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Exibir as codificações em uma janela separada.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Estender barra de títulos.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Ajustar automaticamente o tamanho da janela com base no tamanho do quadro, logo após carregar o projeto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Ajustar automaticamente o zoom da imagem com base no tamanho da janela, logo após carregar o projeto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Me pergunte antes de remover quadros.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Me pergunte antes de descartar um projeto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Me pergunte antes de fechar o Editor (se um projeto estiver aberto).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Habilitar triplo clique para selecionar o texto.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Aplique a borda das legendas por fora das letras.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Pule quadros quando necessário.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Pule um quadro se o pré-visualizador não for capaz de exibi-lo a tempo)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Pule um quadro se o pré-visualizador não for capaz de exibi-lo a tempo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impor um limite para o histórico de desfazer/refazer.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Ações mais antigas serão removidas quando o limite for alcançado)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Número máximo de ações armazenadas)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Sincronize a pasta de exportação entre os perfis.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Os perfis usarão a mesma pasta de exportação)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Sincronize também o nome do arquivo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Os perfis também usarão o mesmo nome de arquivo)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Sincronize apenas entre perfis do mesmo tipo de arquivo.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Apenas perfis do mesmo tipo de arquivo estarão em sincronia)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Tarefas Automáticas</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista de tarefas automáticas</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Tarefa</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detalhes</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Ativado</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Ative esta tarefa.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Selecione uma tarefa)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Selecione uma tarefa acima</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Essas tarefas são executadas sequencialmente do topo da lista para o último elemento.&#10;Isso acontece quando o projeto é aberto pela primeira vez no editor.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Gravador de tela:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Abre o gravador de tela padrão)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Gravador de webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Abre o gravador de webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Gravador de quadro:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Abre o gravador de quadro)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Abre outra janela do editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Opções:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Abre a janela de opções, você só pode abrir uma janela dessas por vez)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Fechar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Fecha todas as janelas do sistema e remove o aplicativo da área de notificação)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Gravadores</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Gravar/Pausar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Inicia ou pausa a gravação)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Parar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Para a gravação e abre o editor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Descartar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Descarta a gravação atual quando estiver pausado)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Gravação via cursor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Habilita/Desabilita o reposicionamento da área de gravação conforme a posição do cursor)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Desab. grav. via cursor:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Temporariamente desabilita o reposicionamento da área de gravação conforme a posição do cursor. Apenas teclas de modificação são aceitas)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Clique para ganhar foco do teclado, depois pressione as teclas desejadas.&#10;Algumas combinações não são permitidas.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Idioma do Aplicativo</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Detectar automáticamente</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Idioma atual do Sistema Operacional (se disponível)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Gostaria de traduzir meu aplicativo?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Click aqui para ler descobrir como traduzir e para baixar o aplicativo de tradução.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Depois,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">click aqui para importar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">e testar sua tradução.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Envie a tradução para mim via</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">quando você finalizar.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Click para abrir a página com o passo a passo de como traduzir.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Abre a página de importação</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Abre seu aplicativo de e-mail</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Situação</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} livre de {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Analizar novamente quanto espaço livre existe.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Limpar a pasta do cache.&#10;Você poderá escolher se você quer manter os projetos recentes ou não.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Pouco espaço na unidade de armazenamento atual. Por favor, apague os arquivos da pasta temporária ou utilize uma outra unidade.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Impossível de obter os detalhes da unidade de armazenamento.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Nenhum arquivo</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} arquivo</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} arquivos</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Nenhuma pasta</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} pasta</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} pastas</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} em uso</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Caminhos</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Escolha a localização do cache (arquivos temporários).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Escolha a pasta para guardar os arquivos de erros.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Navegue até a pasta selecionada.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Localização das configurações</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Não existe</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Criar um arquivo de configurações em branco.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Remover o arquivo de configurções.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Abra a pasta que contém o arquivo de configurações.&#x0d;Pressione a tecla Ctrl enquanto clicando para abrir diretamente o arquivo, se possível.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Padrão de carregamento de configurações: Configurações padrão ◄ AppData ◄ Local.&#x0d;• Se não existe arquivo de configurações presente na pasta Local, o aplicativo busca dentro da pasta AppData,&#10;&#x09;as Configurações padrão são usadas se nenhum arquivo de configuração presente.&#x0d;• Se não existir configurações locais, todas as configurações são salvas na pasta AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Exclua todos os arquivos do cache ao fechar o aplicativo.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Me pergunte antes de excluir todos os arquivos do cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Remover automaticamente projectos antigos.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Quando o aplicativo abrir, uma tarefa em segundo plano vai apagar projetos antigos que não estão abertos (depende da configuração).</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(em dias, qualquer projeto mas antigo que isso e que esteja fechado será apagado/descartado após abrir o aplicativo)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Limpar Cache</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Você gostaria de limpar a pasta de cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Quando você faz uma gravação ou abre alguma coisa para editar, um projeto é criado e armazenado dentro da pasta de cache.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Você gostaria de remover esses projetos da pasta de cache?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Não remover projetos recentes.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Apenas os projetos mais antigos que {0} dias, que não estão abertos, serão removidos)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Todos os projetos, que não estão abertos, serão removidos)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Desativado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manual</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Sistema</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Usa o proxy do sistema)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Endereço:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Porta:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Usuário:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Senha:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Predefinições de upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Serviço</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Título</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Descrição</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Habilitado</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Serviço de Upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Selecione um serviço</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Selecione um serviço de upload acima</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Habilite esta predefinição.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Detalhes</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Nome:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Descrição:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">odo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anônimo</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Autenticado</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Autorização</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Obter token</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Cole o token OAuth aqui</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Nome de usuário:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Senha:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Autorizar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">O nome de usuário e a senha não serão armazenados.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Opções</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Obter links diretos.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Álbum</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Você deve dar a esta predefinição um nome único.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">O nome já está em uso por outra predefinição de upload.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Quando estiver no modo autenticado, você deve terminar o processo de autenticação.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Você deve fornecer seu nome de usuário e senha para autorizar este aplicativo.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Não foi possível obter o token de autorização.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Para autorizar este aplicativo, é necessário fornecer o token de autorização.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">A autorização falhou. Verifique se está tudo certo e tente novamente em alguns segundos.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Não foi possível carregar a lista de álbuns.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Autorização concluída.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Não autorizado.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Autorização expirada em {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Autorização válida até {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Obter links com a extensão Gifv ao invés de Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Fazer upload dos gifs para um álbum.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Álbum:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Me pergunte antes de enviar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Recarregar a lista de álbuns.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Padrões</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Me peça para preencher os detalhes do upload.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Tipo de url:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Escolha um álbum de destino (opcional)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Se você deseja, escolha um álbum de destino:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Detalhes do upload (opcional) </s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Detalhes de upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Título:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Descrição:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Tags:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Separe as etiquetas usando um ponto e vírgula ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Somente para quem acessar via link direto.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Histórico de upload</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Data</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Predefinição</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">em-sucedido?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Excluir entrada de histórico.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Menor qualidade:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Link de exclusão:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Tem certeza de que deseja excluir a entrada do histórico?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de excluir a entrada de histórico selecionada?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Ferramentas externas</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Clique aqui para baixar&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Baixando...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Presente&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Clique aqui para abrir as propriedades do arquivo.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Aplicativos distribuídos pela Microsoft Store não podem baixar outros aplicativos. Você vai ter que baixar manualmente.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Localização do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Selecione a pasta de localização do executável do FFmpeg.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Executável do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">O caminho do executável FFMpeg contém um ou mais caracteres inválidos. Por favor, selecione um caminho válido para o executável.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">Versão do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Localização do Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Selecione a localização da biblioteca Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Biblioteca Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">O caminho da biblioteca Gifski contém um ou mais caracteres inválidos. Por favor, selecione um caminho válido para o executável.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Licença do FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Licença do Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Licença do SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Sem permissão de gravação na pasta</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Não é possível salvar o download na pasta devido à falta de permissão de gravação.&#10;&#10;Gostaria de iniciar o downloader como administrador para finalizar o download?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Doar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Doar US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Doar €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Abre o site do Paypal. Moeda selecionada: Dólar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Abre o site do Paypal. Moeda selecionada: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Abre o site do Paypal. Você deve selecionar a moeda.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Inscrever</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Doar mensalmente via Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Doar via Stripe.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Doe jogos</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Doe jogos via Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Doe jogos via GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Pague por um café via Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto moedas</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copie o endereço de BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Dê suporte</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Se você quiser dar suporte ao projeto :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Versão:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Verifique se há atualizações </s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">Você já tem a versão mais recente.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Autor: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Versão da Microsoft Store. Alguns recursos estão desabilitadas devido a politicas aplicadas.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Contato</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Entrar no servidor</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Visitar página</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Entrar na sala</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Técnico</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licença:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Este aplicativo é completamente gratuíto)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Código fonte:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Política de privacidade:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Um grande obrigado para</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Todos os meus ajudantes, pessoas que me forneceram comentários e/ou doações.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Traduções</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Buscando códigos de idiomas...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Reconhecida como {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Não reconhecida</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">O recurso mais para baixo é o atual sendo utilizado.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Para aplicar sua tradução, mova para a última posição da lista.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Exportando o dicionário de idioma...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Salve o dicionário de idiomas</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Abrir um dicionário de idiomas</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Dicionário de idiomas</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Importando o dicionário...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">O nome do arquivo não segue um padrão válido</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Tente renomear como: StringResources.en.xaml, onde o 'en' deve ser substituído pelo código do idioma.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Você não pode adicionar um dicionário com o mesmo nome</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Tente remover o dicionário repetido ou use outro código de idioma.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Código redundante do idioma</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">O código \"{0}\" é redundante. Tente usar \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Idioma desconhecido</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">O código \"{0}\" e sua família não foram reconhecidos como códigos de idiomas válidos.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Não foi possível importar o dicionário de idioma.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Gravar</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Continuar</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Parar</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Descartar</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Foto</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Altura</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Largura</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">O seguimento do cursor está ativado.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Clique para circular entre as frequências de captura.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">interações</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Quantidade máxima de quadros por segundo</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">qps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Pode variar de 1 até 60 qps, com valores mais altos significando que mais quadros serão capturados.&#10;Cada incremento representa 16 milisegundos de diferença.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Quantidade máxima de quadros por minuto</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">qpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Pode variar de 1 até 60 qpm, com valores mais altos significando que mais quadros serão capturados.&#10;Cada incremento representa 1 segundo de diferença.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Quantidade máxima de quadros por hora</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">qph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Pode variar de 1 até 60 qph, com valores mais altos significando que mais quadros serão capturados.&#10;Cada incremento representa 1 minuto de diferença.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Clique ou pressione teclas para capturar</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Enquadre na Janela (Arraste e solte para enquadrar)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Contagem Regressiva</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Pausado)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Parando...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Pré-iniciando...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Tempo de captura decorrido.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Quantidade total de quadros:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Capturados manualmente:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">A captura está em pausa.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Seu computador não suporta um modo de captura preciso,&#10;significando que a taxa de captura poderá nunca ser atingida.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Não foi possível capturar a tela</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Não foi possível capturar a tela. O método de captura não retornou quadros após 5 tentativas.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Não foi possível começar/pausar a captura de tela</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 ou superior é necessário para capturar a tela utilizando a API de duplicação de área de trabalho.</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Área</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Selecione uma área</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Janela</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Selecione uma janela</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Tela</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Selecione uma tela</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Tela interna</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Tela genérica</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Adaptador gráfico: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Resolução: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Resolução nativa: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Arraste para mover&#10;a seleção.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Aceitar</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Limpar</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Botão direito do mouse</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Cancelar a seleção (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Clique e arraste para selecionar uma área deste monitor</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Clique e arraste para selecionar uma área</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Clique aqui para selecionar essa janela</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Clique aqui para selecionar essa tela</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Pressione Esc para cancelar</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Pressione {0} para parar a gravação</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">A janela do gravador será minimizada,&#10;restaure ou pressione {0} para pausar a captura</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Descartar gravação</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Você tem certeza que deseja descartar a gravação?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Esta ação irá descartar a gravação, removendo todos os quadros.&#x0d;Você não pode desfazer esta operação.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Gravador de Câmera</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Nenhum dispositivo de vídeo encontrado :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Checar dispositivos de vídeo.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Escala: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Trocar a escala do vídeo.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Gravador de Quadro</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Auto Gravar</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Habilita a gravação automática enquanto você desenha.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Pressione]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Seletor de Cor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Selecione uma Cor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Vermelho</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Verde</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Azul</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Transparência</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hexa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Cor Inicial</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Cor Atual</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Última Cor</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Arraste isso para&#x0d;escolher cores</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Clique e arraste para escolher&#x0d;cores de outras partes da sua tela.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Visualizador de Exceções</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Abrir Exceção Interna</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Tipo da exceção</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Mensagem</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Pila de chamadas</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Fonte da exceção</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Algo de errado aconteceu.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Enviar relatório</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Predefinição</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Codificador</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Nome</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Descrição</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Outro</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Salvar automaticamente quando uma opção for modificada.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Todas as alterações nessa configurações de predefinição (configurações de codificação e exportação) precisam ser salvas manualmente pressionando o botão de salvamento.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Todas as alterações nessas configurações de predefinição (configurações de codificação e exportação) serão salvas automaticamente.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Algumas das propriedades de uma predefinição padrão são somente leitura.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Você deve dar um nome a esta predefinição.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Já há uma predefinição com o mesmo nome.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Auto salva</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">As alterações nesta predefinição são automaticamente salvas.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">Padrão ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Predefinição padrão para o codificador.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Para Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Respeita os limites de upload do Twitter (exceto tamanho e resolução).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Codec mais antigo e mais conhecido.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Animação</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Vídeo</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Projeto</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Mais adequado para gravações com mais cores e gradientes.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Alta qualidade • Fundo transparente</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Suporta salvar a animação com um fundo transparente.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Alta qualidade • Gráficos</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Melhor para gravações com menor quantidade de cores.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • Padrão</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">Recomendado para gravações de tela normais. Usa quantizador Median Cut sem pontilhamento.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Balanceado</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Boa qualidade para imagens semelhantes a fotos usando o quantizador de Wu sem pontilhamento.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Alta qualidade para imagens semelhantes a fotos usando o quantizador de Wu com nível de bits mais alto e pontilhamento de difusão de erro Floyd-Steinberg.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Baixa qualidade, mais rápido</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Quantização de todos os quadros com a mesma paleta 'web-safe' predefinida e pontilhamento ordenado Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Qualidade superior</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Qualidade de imagem superior, mas com um tamanho de arquivo maior.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Menor qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Menor qualidade de imagem, mas com um tamanho de arquivo menor.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Maior qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Maior qualidade de imagem, mas com maior tamanho de arquivo.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Menor qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Menor qualidade de imagem, mas com um tamanho de arquivo menor.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Menor qualidade e codificação mais rápida</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Qualidade de imagem ainda menor, com uma codificação mais rápida, mas com um tamanho de arquivo menor.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">Sistema • Baixa qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Baixa qualidade, mas codificação mais rápida.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Alta qualidade de imagem e tamanho de arquivo pequeno, mas codificação mais lenta.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Baixa qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Menor qualidade de imagem, tamanho de arquivo pequeno e codificação mais rápida.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Alta qualidade</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Alta qualidade de imagem e tamanho do arquivo pequeno.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Inserir Quadros</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Ambos os lados devem ter o mesmo tamanho, esta janela permite o reposicionamento e redimensionamento da imagem e o plano de fundo. Clique para selecionar e redimensionar.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Tamanho do plano de fundo:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Ajustar a imagem no plano</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Redimensiona o plano de fundo para caber as duas imagens dentro (a partir do canto superior esquerdo).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Existe uma diferença de tamanho entre os quadros. Você precisa resolver isso antes de inseri-los.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Novo(s) Quadro(s)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Quadro(s) Atual(is)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Tamanho da imagem:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Posição da imagem:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Redefinir o tamanho da&#x0d;imagem e a posição</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Novos quadros serão inseridos na lista&#10;atual de quadros na posição:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Antes</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Depois</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Quadro</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importando</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Selecione a Cor de Fundo</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importar Quadros do Vídeo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Importador:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Carregando...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Escala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Tamanho:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Largura:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Taxa de Quadros:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Início:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Fim:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Seleção:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Quadros:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Duração:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Não foi possível carregar o vídeo</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">O pré-visualizador não foi iniciado. Tente utilizar outro importador ou verifique se o vídeo não está corrompido.&#x0d;Se você está usando o MediaPlayer, verifique se o recurso do Windows chamado \"Recursos de Mídia / Windows Media Player\" está ativado e verifique se você tem o codec de vídeo necessário.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Tempo limite de resposta atingido em tentando pré-visualizar o vídeo.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Nenhum quadro selecionado para ser importado.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Codificador</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Codificando...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Iniciando</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Finalizado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Copiado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Falha ao copiar</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Comando executado</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Exibe a resposta dos comando(s).</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Falha ao executar comando</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Falha ao enviar</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Clique para abrir uma página para deletar a imagem (se disponível).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Tempo decorrido, em minutos:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Análise:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Codificação:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Envio:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Cópia:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Comandos:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Arquivo Removido or Movido</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Cancelado</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Erro</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Clique aqui para exibir detalhes do erro.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Enviando</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Executando comandos</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Processando {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparando para 2º passe</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Processando {0} - 2º passe</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Criando arquivo</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analisando pixels não modificados</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Salvando resultado da análise</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Abrir arquivo</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Explorar pasta</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Remover da lista</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Mostrar detailhes</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Limpar as codificações</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Copiar como imagem</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Copiar caminho completo</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Copiar caminho da pasta</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Copiar link</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Resultado do comando</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Resultado do comando</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Notificações</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Limpar todas as notificações</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editor</s:String>\n    <s:String x:Key=\"S.Editor.File\">Arquivo</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Início</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Reprodução</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Transições</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Estatísticas</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Opções</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Ajuda</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extras</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Uma nova atualização está disponível!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Clique aqui para ler mais a respeito.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Quantidade total, quantidade selecionada, índice selecionado</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Preparando Quadros</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Carregamento Inválido - Você não pode carregar múltiplos arquivos de uma vez só. Tente escolher apenas um arquivo.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Carregamento Inválido - Você não pode carregar múltiplos projetos de uma vez só. Tente escolher apenas um projeto.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Abrir Mídia (Imagem ou Vídeo)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Abrir Mídia (Imagem ou Vídeo) ou um Projeto</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Todos os arquivos suportados</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Vídeo</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Animação em Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Animação em Gif</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Animação em Webp</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Vídeo Avi</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Vídeo Matroska</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Vídeo Mov</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Vídeo Mp4</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Vídeo Webm</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Imagem Bmp</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Imagem Jpeg</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Imagem Png</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Arquivo Zip</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Projeto do ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Projeto ScreenToGif como Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Arquivo Psd</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Para iniciar uma nova gravação, navegue até \"Arquivo > Novo\"</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Arraste e largue imagens, vídeos ou projetos para importar</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Muito obrigado por usar meu aplicativo!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Quanto menor a taxa de quadros, a quantidade de cores ou a quantidade de mudanças entre quadros, menor o tamanho do arquivo</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Você quer conversar? Abra \"Opções > Sobre\" para encontrar métodos de contato</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Algum problema? Entre em contato via a ferramenta de Comentários</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Você gostaria de provar o novo gravador de tela? Navegue até \"Opções > Gravador\" para habilitá-lo</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Gravação</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Câmera</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Quadro</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Animação&#x0d;em Branco</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Novo</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Gravação</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Câmera</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Quadro</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Mídia</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Inserir</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Salvar&#x0d;como</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Abrir</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Projetos&#x0d;Recentes</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Salvar como&#x0d;Projeto</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Descartar&#x0d;Projeto</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Pilha de Ações</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Desfazer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Refazer</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Redefinir</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Área de Transferência</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Mostrar Área de Transferência</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Colar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Recortar</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Copiar</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Ajustar&#x0d;Janela</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Enquadrar Imagem</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Selecionar</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Selecionar&#x0d;Todos</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Ir Para</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Inverter</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Desselecionar</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Reprodução</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Primeiro</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Anterior</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Reproduzir</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pausar</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Próximo</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Último</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Opções de Reprodução</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Loop durante a reprodução.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Opção apenas válida para a reprodução do pré-visualizador.&#x0d;Se você deseja alterar as opções de loop para gifs e apngs exportados,&#x0d;isso estará disponível dentro do painel de 'Salvar Como' para alguns codificadores.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Quadros</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Remover</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Remover&#x0d;Duplicados</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Reduzir&#x0d;Quant. de Quadros</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Loop&#x0d;Suave</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Remover Todos Anteriores</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Remover Todos Próximos</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Reordenando</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Reverter</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Ioiô</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Mover para&#x0d;Esquerda</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Mover para&#x0d;Direita</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Atraso (Duração)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Substituir</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Incrementar ou&#x0d;Decrementar</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Escala</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Tamanho e Posição</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Redimensionar</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Cortar</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Girar/Espelhar</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Legenda</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Texto Livre</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Quadro de Título</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Teclas&#x0d;Pressionadas</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Sobreposição</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Desenho&#x0d;Livre</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Formas&#x0d;Geométricas</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Cliques&#x0d;do Mouse</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Marca D'água</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagrafia</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Borda</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Sombra</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Indicador de&#x0d;Progresso</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Ofuscar</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Estilos</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Esmaecer</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Deslizar</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Geral</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Quantidade de quadros</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Duração total</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Tamanho do quadro</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Duração média (atraso)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Tempo atual</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">O tempo atual (cumulativo) baseado no quadro selecionado.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI e escala da imagem</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Quadro selecionado</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Recortar</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Você não pode recortar todos os quadros.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">A gravação precisa de pelo menos um quadro.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Remover Todos Os Quadros</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Você tem certeza que deseja remover todos quadros?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Esta ação vai descartar o projeto aberto e não pode ser desfeita. Deseja continuar?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Descartar o Projeto</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Tem certeza de que deseja descartar o projeto?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Esta ação vai remover todos os quadros.&#x0d;Você não pode desfazer essa operação.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Você quer descartar o projeto anterior?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Se você optar por não fazer isso, o projeto anterior estará disponível para abrir via Projetos Recentes.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Remover Quadros</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Tem certeza de que deseja excluir?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Esta ação vai remover {0} quadro(s).&#x0d;Você poderá desfazer esta ação depois.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Fechando o Editor</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Você tem certeza que deseja sair?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">O projeto atual em que vocês estava trabalhando pode ser aberto novamente em 'Projetos Recentes'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">O projeto atual em que vocês estava trabalhando pode ser aberto novamente em 'Projetos Recentes', mas não se esqueça que em alguns dias ele será apagado automaticamente.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Arrastar e Soltar Inválido</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Você não pode importar múltiplos arquivos de uma vez</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Tente escolher apenas um arquivo.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Impossível carregar arquivo</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">O arquivo não pode ser carregado porque possui um formato incorreto.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Você não pode importar múltiplos projetos de uma vez</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Tente escolher apenas um projeto.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">O texto para ser aplicado está vazio.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Você precisa selecionar no mínimo um quadro para aplicar a Legenda.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Você precisa selecionar no mínimo um quadro para aplicar o Texto.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Você precisa selecionar no mínimo um quadro para aplicar o Quadro de Título próximo à ele.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Você deve informar uma espessura de borda maior do que zero no mínimo em um dos lados.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Você deve selecionar no mínimo um quadro para aplicar a Borda.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">A opacidade deve ser maior que zero para fazer alguma diferença no quadro.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Ao usar a profundidade da sombra e raio do borrado como zero, não fará diferença alguma porque a sombra estará escondida atrás do quadro.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Você deve selecionar no mínimo um pixel para aplicar a Cinemagrafia. Selecione os pixels desenhando em cima deles.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Esmaecer</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Você deve selecionar no mínimo um quadro para aplicar a transição de esmaecimento.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Uma cor totalmente transparente não criar efeito algum na transição.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Deslizar</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Você deve selecionar no mínimo um quadro para aplicar a transição de deslizamento.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Carregando quadros</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Não foi possível carregar o projeto</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Não foi possível carregar os quadros porque estão todos corrompidos ou porque não foi possível encontrar as imagens.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Alguns quadros não puderam ser carregados</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Não foi possível carregar os quadros porque eles não foram encontrados ou porque estão corrompidos.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Você deve selecionar no mínimo um quadro para aplicar a camada.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg não está presente no seu sistema ou não foi encontrado. Adicione-o para as variáveis do sistema (Path) ou clique aqui para abrir Opções > Extras para configurar a localização.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski não está presente no seu sistema ou não foi encontrado. Adicione-o para as variáveis do sistema (Path) ou clique aqui para abrir Opções > Extras para configurar a localização.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Não há espaço suficiente na unidade de armazenamento em que este aplicativo guarda seu cache ({0}% restantes). Clique aqui para abrir Opções > Arquivos Temporarios para liberar algum espaço.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Você tentou importar múltiplas imagens com DPIs diferentes, o que não é suportado. Algumas delas foram importadas, outras precisam ser importadas separadamente.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Você tentou importar múltiplas imagens com tamanhos diferentes, o que não é suportado. Algumas delas foram importadas, outras precisam ser importadas separadamente.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Buscando quadros do cache</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Atualizando quadros</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Preparando para importar</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importando quadros</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analisando quadros duplicados</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Ajustando o atraso dos quadros</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Descartando quadros duplicados</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Descartando quadros</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Descartando pastas</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Redimensionando quadros</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Cortando quadros</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Aplicando sobreposição nos quadros</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Criando o quadro título</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Aplicando girar/espelhar nos quadros</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Trocando o atraso</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Aplicando efeito de transição</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Preparando para salvar</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Cancelar carregamento e descartar projeto.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Procurando loop perfeito</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Descartando quadros não usados no loop</s:String>\n    \n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Quadro:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Abrir Imagem</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Explorar Pasta</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Ir Para Quadro</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Ir para quadro (0 a {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Salvar Como</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Remover Quadros Selecionados</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Nova Gravação</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Nova Gravação da Câmera</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Nova Gravação de Quadro</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nova Animação em Branco</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Novo de Mídia ou Projeto</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Nova gravação criada</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Nova gravação de webcam criada</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Nova gravação de quadro criada</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nova animação criada</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Desfazer executado</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Redefinir executado</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Refazer executado</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} quadros(s) recortado(s)</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} quadros(s) copiado(s)</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} quadros(s) colado(s)</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom em {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Todos os quadros foram selecionados</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Quadro #{0} selecionado</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Seleção invertida</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Todos os quadros foram desselecionados</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} quadros(s) removidos</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Lista de quadros invertida</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Efeito ioiô aplicado</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Quadro(s) movidos para a esquerda</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Quadro(s) movidos para a direita</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Quadros redimensionados</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Quadros cortados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Quadros girados/espelhados</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">A ação de espelhar se aplica para os quadros selecionados e a ação de girar se aplica a todos os quadros</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Esta ação se aplica a todos os quadros</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Esta ação se aplica a os quadros selecionados</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Esta ação se aplica a todos os quadros ou apenas os selecionados, dependendo da sua configuração</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">A cinemagrafia se aplica a todos os quadros, baseando-se no primeiro quadro</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Sobreposição aplicada</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Quadro de título criado</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">O quadro de título será inserido antes do quadro selecionado</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Atraso (duração) alterado</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Transição inserida</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Quantidade de quadros reduzida</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Quadros duplicados removidos</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Esconder</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Aplicar</s:String>\n    <s:String x:Key=\"S.Action.Open\">Abrir</s:String>\n    <s:String x:Key=\"S.Action.Save\">Salvar</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Cancelar</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Projetos Recentes</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Procurando por projetos recentes...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Data de criação</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Nº de quadros</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Nenhum projeto selecionado. Selecione um projeto da lista para carregar.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Este projeto já está sendo exibido por este editor.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Esse projeto já foi aberto por outra instância do editor. Um projeto não pode ser aberto ao mesmo tempo por mais de um editor.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Área de Transferência</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Item:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} imagem</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} imagens</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Explorar Conteúdo</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Remover</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Modo de Inserção</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Antes do quadro selecionado</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Após quadro selecionado</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Diferença</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Ppp</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Opções</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Pixels (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Porcento (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">PPP:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Manter a proporção do aspecto.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Qualidade:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Alta qualidade</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear • Baixa qualidade</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Vizinho mais próximo • Baixa qualidade e mais rápido</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Qualidade de escala de pixels.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Você precisa selecionar algum valor diferente para aplicar o redimensionamento.</s:String>\n   \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Pontos</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Topo:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Esquerda:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Em Baixo:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Direita:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Para cortar, você precisa selecionar um retângulo menor do que o tamanho da imagem.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Para cortar, você precisa selecionar um retângulo maior do que 10x10 pixels.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Virar Horizontalmente</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Virar Verticalmente</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Rodar para Esquerda 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Rodar para Direita 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Reduzir quantidade de quadros</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Fator:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Quantidade a remover:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Ajuste de duração:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Não ajuste</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Some ao quadro anterior</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Some aos quadros restantes</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Reduza a taxa de quadros do projeto inteiro.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Se a opção estiver desmarcada, você deverá selecionar múltiplos quadros consecutivos,&#10;em uma quantidade maior que a fator de remoção.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Esta ferramenta irá remover {0} quadro(s) após cada {1} quadros(s), não contando os que foram removidos.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Você deve selecionar os quadros para aplicar a redução de taxa de quadros (ou verifique a opção para aplicar para o projeto inteiro).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">A lista de quadros selecionados deve ser consecutiva. Você não pode deixar alguns quadros não selecionados no meio de outros quadros selecionados.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">A seleção de quadros deve ser maior que o fator de remoção, de modo que a funcionalidade seja capaz de remover algum quadro.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Remover quadros duplicados</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Similaridade (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Remoção de quadros:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Remover o primeiro quadros</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Remover o último quadro</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Ajuste de duração:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Não ajuste</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Utilize a média</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Utilize a soma</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Esta ação analiza cada quadro (pixel por pixel) e remove aqueles que são no mínimo {0} % similares ao seu vizinho imediato.&#x0d;Você pode escolher para ajustar a duração da exibição dos quadros.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Criar loop suave</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ignorar primeiros:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Comparar do:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Fim</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Início</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Tenta encontrar um quadro com no mínimo {0} % de similaridade do quadro inicial e deleta todos os próximos quadros.&#x0d;Você pode escolher se você quer ignorar alguns quadros iniciais e/ou executar a verificação do início (depois dos quadros ignorados) ou do fim.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">O número de quadros para serem ignorados precisa ser menor que o número de quadros totais.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Não foi posssível criar um loop suave com as configurações atuais.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Você já tem um loop suave baseando-se nas configurações atuais.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Fonte</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Família:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Estilo:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Peso:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Tamanho:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Cor:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Cor de fundo:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Borda</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Espessura:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Posicionamento</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Vertical:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horizontal:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Alinhamento:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Decoração:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Teclas Pressionadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Separador</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Edite suas teclas pressionadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignore as teclas Ctrl, Alt, Shift e Windows enquanto não estiverem sendo usadas como modificadoras.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Pressionamentos de teclas modificadoras sem formar nenhum comando serão ignoradas,&#x0d;por exemplo, a tecla \"Control\" sozinha será ignorada, mas o comando \"Control + C\" não.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ignore as teclas simuladas de software.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Apenas capture os pressionamentos de teclas do usuário.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Translate\">Traduza as teclas especiais.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Translate.Info\">Útil se o idioma do aplicativo não é inglês.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Extender a exibição do pressionamento de teclas:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Exiba o pressionamento de tecla mais cedo:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Por (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Não existem pressionamentos de tecla na sua gravação.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Editor de Pressionamento de Teclas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Nº do quadro</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Teclas pressionadas</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Remover o comando de tecla</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Adicione um comando:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Letras minúsculas.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Permite você inserir letras em minúsculo (apenas letras sem teclas de modificação).</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Modo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Caneta</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Apagador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Selecionar</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Apagador\\nde Linhas</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Largura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Altura:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Ponta:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Retângulo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elipse</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Outros:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Marcador</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Ajustar à Curva</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Você não desenhou algo para ser aplicado no quadro(s) selecionado.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Você precisa selecionar no mínimo um quadro para aplicar o Desenho Livre.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Inserir</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Formas Geométricas</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Raio:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Traços:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Controla o tamanho dos traços e das lacunas.&#10;Você pode definir vários tamanhos para criar um estilo de traço elaborado.&#10;O padrão é \"1 0\" ou vazio, o que significa um traço sem lacunas.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Desfazer rotação</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Remover</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Preenchimento</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Cliques do Mouse</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Cor do botão esquerdo:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Cor do botão do meio:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Cor do botão direito:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">Cor do 1º botão extra:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">Cor do 2º botão extra:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Não há cliques de mouse detectados no seu projeto.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Imagem</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Arquivo:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Nenhum selecionado</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Opacidade:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Selecione uma Imagem</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Você precisa selecionar uma imagem para aplicar a marca d'água.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Você precisa selecionar no mínimo um quadro para aplicar a Marca D'água.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Aparência</s:String>\n    <s:String x:Key=\"S.Border.Info\">Use valores negativos para fazer a borda expandir a imagem. Quando fazendo isso, a borda vai ser aplicada para todos os quadros.&#x0d;Se nenhum valor negativo for utilizado, a borda vai ser aplicada apenas nos quadros selecionados.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Cor da sombra:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Cor de fundo:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Direção:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Raio do borrado:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Profundidade:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Pixelar</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Borrar</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Escurecer</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Iluminar</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Opções de ofuscação</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Tamanho do pixel:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Nível do borrão:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Nível de escurecimento:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Nível de iluminação:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Calcular a cor média para cada bloco de pixels.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Aplique a obfuscação no inverso da seleção.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Suavidade</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Use a ferramenta de seleção para selecionar uma parte da imagem que deve ser pixelada.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Use a ferramenta de seleção para selecionar uma parte da imagem que não deve ser pixelada.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Você não selecionou alguma parte da imagem. Selecione uma parte da imagem para aplicar o efeito de pixelamento.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tipo</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Barra</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Texto</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precisão:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minutos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Segundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Milisegundos</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Percentagem</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Número do Quadro</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Data/horário atual</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Exibir o total</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Formato:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Formato</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milisegundos</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = segundos</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutos</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = porcentagem</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = número do quadro</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Totais:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Exemplos:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Você pode usar os formatos de data e horário do .Net Framework.&#x0d;A especificação está disponível nesses dois links abaixo.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Formatos padrão</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Formatos personalizados</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Contar a partir de:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Começa a contar o número do quadro a partir deste número.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientação:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Atualização de atraso</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Modo de atraso:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Substituir (in ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Incrementar ou decrementar (em ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Escala (em %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Novo Valor</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Mínimo de 10 ms por quadro.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Diminuir/Aumentar Valor</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Valor de Escala</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Este novo valor substituirá a duração (atraso) de todos os quadros selecionados. O valor deve ficar entre 10 ms e 25.500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Esse valor irá aumentar/diminuir a duração (atraso) de cada quadro selecionado.&#x0d;Você pode incrementar/decrementar, selecionando um valor entre -10.000ms e 10.000ms, mas a duração de cada quadro deve permanecer entre 10 ms e 25.500ms.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Altere a escala de duração de cada quadro selecionado pelo valor em percentual.&#x0d;Você alterar a escala de duração de cada quadro selecionando um valor entre 1% e 1000%, mas a duração de cada quadro deve permanecer entre 10 ms e 25.500ms.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Use a caneta para selecionar os pixels que não devem permanecer estáticos (que devem mudar entre quadros), ao pintar em cima deles.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Duração da Transição</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Atraso da Transição</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Esmaecer para...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">O próximo&#10;quadro</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Uma cor</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Cor</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">A transição vai ser aplicada entre o quadro selecionado e próximo.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Tipo de arquivo</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">O formato do arquivo de saída.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">O predefinição de exportação que detém todas as configurações exibidas atualmente.&#10;Gerencie suas predefinições de exportação através dos botões abaixo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Imagem animada</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Vídeo</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Quadros</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Outro</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime File Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Projeto</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">Projeto do ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Arquivo do Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Perfil:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Padrão</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Adicionar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Salvar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Editar</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Remover</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Redefinir</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Excluindo o Predefinição</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Tem certeza de que deseja excluir a predefinição?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de excluir a predefinição selecionada?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Redefinindo o Predefinição</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Tem certeza que quer redefinir a predefinição?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Esta ação não pode ser desfeita.&#10;&#10;Gostaria de redefinir a predefinição selecionada para as configurações padrão?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Codificador</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Codificador e quantizador</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Codificador responsável por gerar o arquivo final.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Codificador embutido.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">Codificador de Gif do KGy SOFT.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Codificador disponibilizado pelo sistema.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Codificador externo, desenvolvido por FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Codificador externo, desenvolvido por Gif.ski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Opções do codificador</s:String>\n    \n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Habilite o modo avançado.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Insira manualmente os parâmetros para controlar o codificador.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Parâmetros:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Lista de parâmetros que serão passados para FFmpeg.&#10;&#10;Parâmetros especiais:&#10;{I} é o caminho de entrada (os quadros).&#10;{O} é o caminho de saída (o arquivo exportado).&#10;{W} é a largura do quadro.&#10;{H} é a altura do quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Para codificar com 2 passes, basta adicionar '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Pré-visualizar</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Pré-visualize a lista de parâmetros que será passada para FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Documentação dos codec</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Documentação do formato</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Documentação dos filtros</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Opções do Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Algoritmo de redução de cores (quantização).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Rede neural</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Quantização de alta fidelidade. Mais lento, porém melhor para animações com alta quantidade de cores.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Melhor para animações com menos cores. Mais rápido, porém pode produzir bandas de cor.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Corte médio</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Não tão bom quanto Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Escala de cinza</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Utiliza uma paleta fixa de cores em escala de cinza, por isso é bem rápido.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Cores mais utilizadas</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simplesmente pega as cores mais utilizadas na animação.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Amostragem:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Fator de amostragem:&#10;Um valor de 1 vai resultar em um gif melhor, porém vai ser mais lento para ser codificado.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Qualidade:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Cores:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Quantidade máxima de cores (para cada quadro).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Utilize uma tabela de cores global.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Melhor</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Use um processo de codificação ainda mais rápido.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Pode reduzir a qualidade do gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Loop:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif com repetições.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Repetir para sempre.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">repetições.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Ativar transparência.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Ativa o modo de transparência completo, que faz com que o plano de fundo do gif se torne transparente.&#10;O proceso de substituição do chroma key será ignorado se esta opção estiver ativa.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Selecione qual cor para exibir como transparente.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Se uma cor for selecionada, será convertida para transparente e será exibida como transparente no gif.&#10;Se nenhuma cor for selecionada, todas as cores transparentes (Alpha = 0%) aparecerão como transparente normalmente.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Detectar pixels não modificados.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Ao analizar e detectar pixels não modificados entre os quadros,&#10;é possível salvar apenas as partes necessárias do gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Substitua esses pixels por um chroma key.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Pixels repetidos ou não modificados serão substituídos pelo chroma key,&#10;tornando possível utilizar menos cores por quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Pontilhado:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Escala Bayer:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Quantizador</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Cor de Fundo:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Pixels com alfa (transparência) que são considerados opacos pelo quantizador selecionado serão misturados com esta cor antes de obter a cor quantizada.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Limiar Alfa:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Determina o valor alfa de entrada sob o qual a cor quantizada será transparente.&#x0d;&#x0a;Se 0, então o resultado nunca terá transparência.&#x0d;&#x0a;Se 255, somente pixels totalmente transparentes são considerados transparentes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Limiar Branco:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Determina o brilho de entrada mais baixo para considerar o resultado da cor branca.&#x0d;&#x0a;Afeta o brilho do resultado. Um pontilhador de difusão de erro pode compensar o valor deste parâmetro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Mapeamento Direto</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Quando marcada, a cor quantizada é determinada por um mapeamento direto em vez de procurar a entrada da paleta mais próxima.&#x0d;&#x0a;Ele acelera a quantização, mas pode resultar em um resultado de contraste mais alto. Um pontilhamento de difusão de erro pode compensar o valor desse parâmetro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Tamanho da Paleta:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Determina o tamanho máximo da paleta por quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Nível de bits personalizado.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Quando marcado, o nível de bits pode ser configurado manualmente.&#x0d;&#x0a;⚠️ Aviso: O nível de bit mais alto pode exigir MUITA memória!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Um valor mais alto significa mais precisão, maior espaço de cores de destino, processamento mais lento e maior uso de memória.&#x0d;&#x0a;Por exemplo, se 1, então o resultado não pode ter mais de 8 cores, ou quando 2, não mais de 64 cores.&#x0d;&#x0a;Para os quantizadores Octree e Wu, afeta também o número máximo de tons monocromáticos.&#x0d;&#x0a;Por exemplo, se 5 (que é o padrão para o quantizador Wu), apenas 32 tons monocromáticos podem ser diferenciados.&#x0d;&#x0a;⚠️ Cuidado: O quantizador Wu consome pelo menos 650 MB com o valor mais alto.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">Espaço de cor linear</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">Quando marcado, algumas operações (mistura de alfa com plano de fundo, quantização, pontilhamento, procurar cores próximas na palete) são feitas no espaço de cor linear ao invés de no sRGB.&#x0d;&#x0a;Trabalhar no espaço de cores linear é mais lento, mas proporciona um resultado de melhor qualidade, especialmente quando o quantizador usa apenas algumas cores.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Observação: Ao usar apenas algumas cores, o brilho de uma visualização possivelmente redimensionada pode estar incorreto porque o WPF realiza o redimensionamento no espaço de cores sRGB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Preto e Branco</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Paleta fixa de 1 bpp com as cores preto e branco.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Tons de cinza com 4 cores</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Paleta fixa de 2 bpp com 4 entradas em tons de cinza.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Escala de cinza com 16 cores</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Paleta fixa de 4 bpp com 16 entradas em tons de cinza.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Escala de cinza com 256 cores</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Paleta fixa de 8 bpp com 256 entradas em tons de cinza.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Paleta de 4 bpp padrão do sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Paleta fixa de 4 bpp usando as 16 cores padrão de sRGB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Paleta de 8 bpp padrão do sistema</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Paleta fixa de 8 bpp, incluindo as cores e transparência 'seguras para a web'.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">Paleta RGB 332</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Paleta fixa de 8 bpp usando o espaço de cores RGB 332.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Quantizador Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Otimizando a paleta para cada quadro com o algoritmo Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Quantizador de corte mediano</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Otimizando a paleta para cada quadro com o algoritmo de corte mediano.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Quantizador Wu</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Otimizando a paleta para cada quadro com o algoritmo de Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Pontilhador</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Força:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">A força do pontilhador, ou 0 para calibrar automaticamente a força.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Semente:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Um número inteiro a ser usado para produzir um padrão de pontilhamento aleatório específico.&#x0d;&#x0a;Deixe em branco para usar uma semente aleatória para cada quadro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Os quadros são quantizados sem pontilhamento.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Processamento de Serpentina</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Quando marcada, a direção de propagação do erro é alterada de linha para linha.&#x0d;&#x0a;Isso ajuda a reduzir o efeito cascata do pontilhamento de difusão de erro.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">O padrão de matriz 2x2 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">O padrão de matriz 3x3 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">O padrão de matriz 4x4 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">O padrão de matriz 8x8 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Meio-tom pontilhado (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Uma matriz 8x8 com um padrão de meio-tom pontilhado.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Ruído Azul (Ordenado)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Uma matriz 64x64 com um padrão de ruído azul.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Matriz 4x3 de Bill Atkinson com 6 valores efetivos.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">Matriz 5x2 de D. Burkes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">A matriz 3x2 original de Floyd e Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Uma matriz 5x3 de Jarvis, Judice e Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Matriz 5x3 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Matriz 5x2 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Matriz 3x2 de Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Uma matriz hexagonal 7x4 por Stevenson e Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (Difusão de Erro)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Matriz 5x3 de Stucki.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Ruído Aleatório</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Ruído branco aleatório.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Ruído de Dradiente Intercalado</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Ruído de gradiente não aleatório gerado por uma fórmula.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Visualizar</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Mostrar quadro atual.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Quando marcada, a visualização mostra o quadro atual em vez de um exemplo de imagem padrão.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">A visualização automática está desativada devido ao alto requisito de memória das configurações atuais. Clique para atualizar a visualização.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Falha ao gerar visualização: {0}&#x0d;&#x0a;Clique para tentar gerá-lo novamente.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Configurações de Animação</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Loop infinito.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Quando marcada, a animação será repetida indefinidamente.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Vai e volta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Quando marcada, a animação será reproduzida para frente e para trás.&#x0d;&#x0a;Isso é obtido duplicando os quadros, o que significa um tamanho de arquivo maior e um tempo de codificação mais longo.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Repetições:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Especifica quantas vezes a animação será reproduzida.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Permitir quadros delta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Quando marcado, os pixels inalterados tentam ser detectados durante a codificação.&#x0d;&#x0a;Ao usar com um quantizador otimizado, esta opção possibilita que um quadro tenha mais de 256 cores.&#x0d;&#x0a;Esta opção é ignorada se o quantizador não usar transparência e a opção Permitir Quadros Recortados estiver desmarcada.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ Observação: Esta opção pode causar artefatos visíveis nas cores ou no padrão de pontilhamento.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Tolerância Delta:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Especifica a tolerância máxima ao detectar pixels alterados.&#x0d;&#x0a;Se 0, então nenhuma diferença é tolerada.&#x0d;&#x0a;Se 255, então pode haver quadros (ou mesmo todos eles) que são adicionados sem conteúdo.&#x0d;&#x0a;O intervalo razoável está entre 0 e 16 para um quantizador otimizado. Aqueles com cores fixas podem ser usados com valores um pouco maiores com dithering.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Se a tolerância Delta for muito alta, o resultado pode ter baixa qualidade. Clique para redefinir a tolerância delta.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Permitir quadros recortados.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Quando marcado, o codificador pode adicionar quadros menores do que a resolução real.&#x0d;&#x0a;Se Permitir Quadros Delta estiver desmarcado, permite apenas o recorte de possíveis bordas transparentes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Permitir Quadros Delta é ignorado porque a configuração atual não usa alfa e Permitir Quadros Recortados está desmarcada. Clique para habilitar quadros recortados.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">Permitir quadros cortados não tem efeito porque a configuração atual não usa alfa e Permitir quadros delta está desmarcada. Clique para habilitar quadros delta.</s:String>\n    \n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Opções do Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Predição:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Cima</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Média</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Misto</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng em loop.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Detectar pixels não modificados.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Pinte todos os pixels não modificados com uma cor transparente.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Predefinição:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">Padrão</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Imagem</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Foto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Desenho</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Ícone</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Texto</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Use o modo sem perdas.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Avançado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Método de configuração dos parâmetros do codificador:&#10;Normal: Use controles de interface do usuário padrão.&#10;Avançado: Use uma caixa de texto para digitar os parâmetros.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Codec:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">O codificador de vídeo, responsável por&#10;converter os pixels para o arquivo de saída.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Predefinição:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Muito Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Mais Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Lento</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Mais Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Muito Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Super Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ultra Rápido</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Qualidade</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Balanceado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Veloz</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">Padrão</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Sem Perdas</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Sem Perdas (Alto Desempenho)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Alto Desempenho</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Alta Qualidade</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Disco Bluray</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Baixa Latência</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Baixa latência (Alto Desempenho)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Baixa Latência (Alta Qualidade)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Relação entre velocidade de codificação para compressão,&#10;predefinições mais lentas podem gerar melhor compressão &#10;(qualidade por arquivo).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Ac. de Hardware:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Desligado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Ligado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Seleção automática</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Controla o uso de hardware dedicado (gráficos de vídeo).&#10;Off: Não usa hardware dedicado.&#10;Ligado: Usa hardware dedicado e permite selecionar codificadores especiais.&#10;Auto: Usa hardware dedicado e seleciona automaticamente o codificador certo, quando possível.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Formato do pixel:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Automático</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Método de sincronização de vídeo.&#10;Auto: Escolhe entre 1 e 2, dependendo dos recursos muxer (formato) .&#10;Passe: Cada quadro é passado com seus tempos para o codificador.&#10;Constante: Os quadros serão duplicados e descartados para alcançar exatamente o solicitado taxa constante de quadros.&#10;Variável: Os quadros são passados com seus cronos ou descartados de modo a evitar que 2 quadros tenham o mesmo fuso horário.&#10;Pular: Como passe, mas destrói todos os tempos, fazendo com que o codificador gere novos fusos de tempo com base na taxa de quadros.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Passe</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Taxa de quadros constante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Taxa de quadro variável</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Pular</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Taxa de quadros:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Filme</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Personalizado</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Passe:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Fator de taxa constante.&#10;Configuração de controle de qualidade e taxa.&#10;Deixe-o vazio se você não quiser definir esta propriedade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Nível de qualidade:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Valores menores significam melhor qualidade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Taxa de bits:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Taxa de bits de vídeo de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Modo de taxa:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Constante</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Variável</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Taxa mín:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Tolerância mínima de bitrate.&#10;Mais útil ao usar o modo CBR.&#10;Deixe-o vazio ou zero&#10;se você não deseja definir esta propriedade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Taxa max:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Tolerância máxima de bitrate.&#10;Requer que o tamanho do buffer seja definido também.&#10;Deixe-o vazio ou zero&#10;se você não deseja definir esta propriedade.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Tamanho do buffer:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Tamanho do buffer de controle de taxa.&#10;Deixe-o vazio ou zero&#10;se você não deseja definir esta propriedade.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Compactar em um zip.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Exporta as imagens dentro de uma pasta compactada.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Comprimir a imagem.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Comprime os dados da imagem usando o algoritmo RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Exportar os dados da timeline.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exporta os tempos de cada frame, ao invés de exportar apenas as imagens.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Opções de exportação</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Exporte parcialmente.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Exporte o arquivo em uma pasta de sua escolha.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Sobrescrever?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Avisar</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Apenas avisa que existe um arquivo com o mesmo nome.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Perguntar</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Pergunta se o usuário quer sobrescrever o arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Permitir</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Simplesmente sobrescreve o arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Exportar como projeto também (mesma pasta, mesmo nome).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Fazer upload do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Copiar para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Arquivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Copia o arquivo para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Pasta</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Copia o caminho da pasta onde o arquivo foi gerado para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Caminho do arquivo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Copia o caminho do arquivo gerado para a área de trasferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Copia o link gerado pelo serviço de upload para a área de transferência.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Executar comandos após a codificação.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Digite comandos para serem executados após a codificação.&#x0d;Para executar multiplos comandos, escreva cada comando em linhas diferentes.&#x0d;Macros:&#x0d;{p} = Caminho do arquivo.&#x0d;{f} = Caminho da pasta.&#x0d;{u} = URL do arquivo enviado.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Exportação parcial</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Modo:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Selecione o método de exportação parcial.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Expressão</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Exporta partes da animação com base em uma expressão simples.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Faixa de quadros</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Exporta apenas parte da animação dentro da faixa de quadros.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Faixa de tempo</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Exporta apenas parte da animação dentro do tempo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Seleção</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Exporta apenas os quadros selecionados na linha do tempo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Nenhum quadro selecionado.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 quadro selecionado.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} quadros selecionados.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">De:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">Para:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Expressão:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Digite números de quadros separados por uma vírgula ou&#10;sequências de quadros separadas por um sinal de menos:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Arquivo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Pasta de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Selecione a pasta de destino</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Escolha a pasta.&#x0d;Pressione Shift e clique para selecionar&#x0d;o nome do arquivo também.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Formato do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Nome do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animação</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Incremente o nome do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Decremente o nome do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Um arquivo com o mesmo nome já existe na pasta selecionada.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Salvar na área de transferência.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Você precisa selecionar onde salvar o arquivo (em uma pasta, na área de transferência ou para fazer upload).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Você não selecionou a extensão do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">Ao selecionar o modo avançado, você deve digitar os parâmetros no campo de parâmetros.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Alguns parâmetros especiais de {I} (entrada) e/ou {O} (saída) estão faltando do campo de parâmetros.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Para executar um comando após a codificação, você precisa escrever o comando na caixa de texto.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Você deve selecionar pelo menos um quadro quando tiver a opção de exportar apenas os quadros selecionados.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">A expressão para exportar parcialmente o projeto está inválida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Nenhum serviço de upload selecionado. Você precisa selecionar um destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Você não pode enviar para o serviço selecionado porque você não foi autorizado. Navegue até Opções > Serviços de Upload para autorizar este aplicativo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Você não pode selecionar a opção de copiar o link porque você não escolheu para fazer o upload do arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Você precisa selecionar uma pasta de destino.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">A pasta de destino não existe.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">A pasta de destino contém um ou mais caracteres inválidos. Por favor, selecione uma pasta válida.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Você precisa informar um nome para o arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">O nome do arquivo de destino contém um ou mais caracteres inválidos. Por favor, informe um nome válido para o arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Nome do arquivo já em uso. Habilite a opção de sobrescrever ou escolha um outro nome para o arquivo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Já existe um projeto com o mesmo nome de arquivo. Escolha para substituir ou escolha outro nome de arquivo ou pasta.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">A operação foi cancelada.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Selecione a predefinição de upload, que tem detalhes sobre o serviço em uso para upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Este serviço de upload impõe limites.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Adicione uma nova predefinição de upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Editar configurações de predefinição de upload.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Veja o histórico de upload desta predefinição.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Remova a predefinição de upload selecionada no momento.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Selecione uma predefinição de upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Escolha um desta lista.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Sem predefinição de upload disponível para este formato</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Adicione uma predefinição usando o botão abaixo.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Excluindo a Predefinição do Upload</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Tem certeza de que deseja excluir a predefinição do upload?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Esta ação não pode ser desfeita.&#10;&#10;Você gostaria de excluir a predefinição de upload selecionada?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Exportar Quadros</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Tem certeza de que deseja exportar os quadros?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Essa ação exportará {0} quadros diretamente para a pasta selecionada.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Sobrescrever</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Você deseja sobrescrever o arquivo?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Um arquivo com o nome '{0}' já existe naquela pasta.\\r\\nVocê gostaria de sobrescrevê-lo?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Você deseja sobrescrever os arquivos?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Já existe um ou mais arquivos com o mesmo nome nessa pasta.\\r\\nVocê gostaria de sobrescrevê-los?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Visualizador de comando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Comando</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Caminho de entrada</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Caminho de saída</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Comentários</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Enviar</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Pré-visualização</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Enviar comentário</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Título</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Mensagem</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Se você estiver sofrendo com algum problema com o aplicativo, não esqueça de me explicar como você chegou nesse error, passo a passo.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Tipo de comentário</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Sugestão</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problema/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Seu e-mail</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Voce precisa informar o título do comentário.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Voce precisa informar a mensagem do comentário.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Você precisa digitar o seu email, para receber uma resposta do desenvolvedor.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Enviando em plano de fundo... Esta janela fechará logo.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Anexos (Opcional, Máximo de 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Adicionar Anexos</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Remover Todos Anexos</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Eu consigo entender Inglês</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">e Português (Brasileiro e Europeu).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Isso é o que você vai me enviar, incluindo todos os anexos.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Solucionar problemas</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Alguma janela está escondida?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Se qualquer uma das janelas está escondida (fora da tela),&#x0d;use as opções abaixo para redefinir sua posição atual e de inicialização.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Essa é a posição atual das janelas:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Essa é posição onde as janelas irão abrir na próxima vez:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Mova todas as janelas para a tela principal.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Redefinir a posição de inicialização de todas as janelas.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Itálico</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Oblíquo</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Grosso</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Pouco Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra Grosso</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra Leve</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Pesado</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Leve</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Médio</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Regular</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Fino</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra Grosso</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra Negrito</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra Leve</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Topo</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Fundo</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Esticar</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Esquerda</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Direita</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horizontal</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertical</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Esquerda</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Direita</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Centro</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">Justificado</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Nenhum</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Sublinhado</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Tachado</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Linha do topo</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Linha de base</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.ru.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">ОК</s:String>\n    <s:String x:Key=\"S.Back\">Назад</s:String>\n    <s:String x:Key=\"S.Cancel\">Отмена</s:String>\n    <s:String x:Key=\"S.Yes\">Да</s:String>\n    <s:String x:Key=\"S.No\">Нет</s:String>\n    <s:String x:Key=\"S.Add\">Добавить</s:String>\n    <s:String x:Key=\"S.Edit\">Редактировать</s:String>\n    <s:String x:Key=\"S.Id\">ID</s:String>\n    <s:String x:Key=\"S.Title\">Заголовок</s:String>\n    <s:String x:Key=\"S.Description\">Описание</s:String>\n    <s:String x:Key=\"S.SelectColor\">Нажмите здесь, чтобы выбрать цвет.</s:String>\n    <s:String x:Key=\"S.Documentation\">Нажмите, чтобы перейти к документации.</s:String>\n    <s:String x:Key=\"S.Suppress\">Подавить</s:String>\n    <s:String x:Key=\"S.Preview\">Предпросмотр</s:String>\n    <s:String x:Key=\"S.Size\">Размер</s:String>\n    <s:String x:Key=\"S.Background\">Фон</s:String>\n    <s:String x:Key=\"S.Color\">Цвет:</s:String>\n    <s:String x:Key=\"S.Delay\">Задержка</s:String>\n    <s:String x:Key=\"S.DelayMs\">Задержка (мс):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Значение (мс):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Фактор:</s:String>\n    <s:String x:Key=\"S.Margin\">Отступ:</s:String>\n    <s:String x:Key=\"S.Padding\">Заполнение:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Мин. высота:</s:String>\n    <s:String x:Key=\"S.AndOr\">и/или</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">О нет, программа рухнула :(</s:String>\n    <s:String x:Key=\"S.Required\">Обязательное поле.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Отсутствует зависимость</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Отсутствует Net Framework 4.8</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Для того, чтобы использовать это приложение, вам необходимо загрузить правильную версию .Net Framework.&#10;Открыть веб-страницу загрузки?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Разрешен только один экземпляр</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Приложение уже запущено</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif уже работает, но, по-видимому, нет открытого окна. Проверьте системный трей, значок ScreenToGif должен быть там.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Сохранение настроек</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Хотите попробовать сохранить его снова?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Похоже, у ScreenToGif недостаточно прав для сохранения настроек на диск.&#10;&#10;Хотите попробовать еще раз, но уже с правами администратора?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Выход из ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Вы уверены, что хотите выйти?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Все окна и значок в трее будут закрыты.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Переключите графический адаптер</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Переключитесь на правильный графический адаптер, чтобы сделать снимок выбранного экрана.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Из-за ограничений DirectX ScreenToGif должен работать на том же графическом адаптере, что и захватываемый экран.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Переключите графический адаптер, установленный для ScreenToGif, открыв Windows Settings > System > Display > Graphics Settings или нажав на ссылку ниже.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Переключите графический адаптер для ScreenToGif, в настройках графического адаптера.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Открыть настройки Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>  \n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>  \n    <s:String x:Key=\"S.Keys.Space\">Space</s:String>  \n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Щелчок  ПКМ</s:String>  \n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Новая запись с экрана</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Новая запись с веб-камеры</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Новая запись с доски</s:String>\n    <s:String x:Key=\"S.Exit\">Выход</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Новая запись экрана</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Новая запись веб-камеры</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Новая запись доски</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Новая анимация</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Вставить запись экрана</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Вставить запись веб-камеры</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Вставить запись доски</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Вставить изображение или видео</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Сохранить как...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Загрузить файлы (изображений, видео или проектов)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Загрузить последние проекты</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Удалить текущий проект</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Переопределить задержку кадров</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Увеличить/уменьшить задержку кадров</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Масштабировать задержку кадров</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Установить масштаб в 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Установить окно по размеру кадра</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Установить изображение по размеру окна</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Выбрать первый кадр</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Выбрать предыдущий кадр</s:String>\n    <s:String x:Key=\"S.Command.Play\">Воспроизвести анимацию</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Выбрать следующий кадр</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Выбрать последний кадр</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Отменить</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Вернуть</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Отменить все изменения в проекте</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Копировать выбранные кадры в буфер обмена</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Вырезать выбранные кадры в буфер обмена</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Вставить кадры из буфера обмена</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Удалить выбранные кадры</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Удалить все предыдущие кадры</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Удалить все следующие кадры</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Удалить дубликаты</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Уменьшить количество кадров</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Создать плавную петлю</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Реверс анимации</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Йойо, т.е. анимация + реверс</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Переместить выбранный кадр влево</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Переместить выбранный кадр вправо</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Изменить размер всех кадров</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Обрезать все кадры</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Отразить или повернуть кадры</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Добавить заголовок</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Добавить текст</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Добавить титульный кадр</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Нажатие клавиш: вставляет клавиши, нажатые во время записи</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Рисование свободных форм</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Добавить фигуры</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Щелчки мыши</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Выбрать и добавить изображение как водяной знак</s:String>\n    <s:String x:Key=\"S.Command.Border\">Добавить границы</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Добавить тень</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Пикселизация: скрыть нежелательные части кадров</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Используйте инструменты рисования, чтобы выбрать, какие части кадра не должны оставаться статичными на протяжении всей анимации</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Прогресс бар или текст с деталями воспроизведения</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Выбрать все кадры</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Переход к кадру по индексу</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Инвертировать выбор кадров</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Отменить выбор кадров</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Плавный переход</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Скользящий переход</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Очистить все завершенные кодировки</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Переместить вверх</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Переместить вниз</s:String>\n    <s:String x:Key=\"S.Command.Add\">Добавить</s:String>\n    <s:String x:Key=\"S.Command.Open\">Открыть</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Изменить выбранный элемент</s:String>\n    <s:String x:Key=\"S.Command.Save\">Сохранить выбранный элемент</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Удалить выбранный элемент</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Просмотр истории</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Запуск</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Запись</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Запись с экрана, легкий старт.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Веб-камера</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Запись с веб-камеры.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Доска</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Запись с доски, рисуйте и записывайте</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Редактор</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Редактор, здесь можно начать новую запись или редактировать существующую.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Настройки</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Доступна новая версия</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Загрузка последней версии программы.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Обновление</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Доступно обновление</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Новая версия!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Доступна новая версия {0}! Показать детали.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Возможно ваша система больше не поддерживается или что-то мешает обновлению. Попробуйте загрузить его вручную с сайта.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Версия</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Портативная</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Установщик</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Что нового?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Исправления:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Доступна новая версия.&#x0d;Открыть браузер, чтобы загрузить ее?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Запустить приложение после обновления.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Загрузить</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Установить</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Установить вручную</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Загрузка...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Не удалось показать детали загрузки.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Не удалось загрузить обновление</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Перед обновлением нужно дождаться завершения всех обработок.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Загрузчик</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Загрузчик</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} из {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Настройки</s:String>\n    <s:String x:Key=\"S.Options.App\">Программа</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Захват экрана</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Редактор</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Автозадачи</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Горячие клавиши</s:String>\n    <s:String x:Key=\"S.Options.Language\">Язык</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Файлы и папки</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Дополнительно</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Онлайн сервисы</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Поддержать</s:String>\n    <s:String x:Key=\"S.Options.About\">О программе</s:String>\n    <s:String x:Key=\"S.Options.Other\">Прочее</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Нет сочетания клавиш - следовать за курсором</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Необходимо установить сочетание клавиш для переключения этой функции.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Автозапуск</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Вручную</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Без автозапуска.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">В авто-&#10;загрузку</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Будет запущено после запуска Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Невозможно чередовать режимы запуска.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Один&#10;экземпляр</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Один экземпляр приложения для пользователя и исполняемого файла.&#10;Разные экземпляры все равно могут быть запущены:&#10;1. не с одного исполняемого файла,&#10;2. с одного исполняемого файла, но от разных пользователей.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Много&#10;экземпляров</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Вы сможете запускать приложение несколько раз одновременно, без ограничений.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Запускать свернутым в трей.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Значок в системном трее будет всегда виден)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Сначала показывать:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Панель запуска</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Запись с экрана</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Запись с веб-камеры</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Запись с доски</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Окно редактора</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Окно при запуске прораммы)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Тема программы</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Цветовая схема</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Очень светлая</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Светлая</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Средняя</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Темная</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Очень темная</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Системная</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Своя</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Пример цвета.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Значок в системном трее</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Показывать значок в системном трее.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Не выгружать программу, даже если все окна закрыты.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Ничего не делать</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Открыть окно</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Без окна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Свернуть / восстановить все окна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Свернуть все окна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Восстановить все окна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">ЛКМ:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">x2 ЛКМ:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">СКМ:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">окно:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">иначе:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Общие</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Обходной путь для ошибки \"Недостаточно квоты...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Эксперимент)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Подтверждать закрытие (по команде 'Выход').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Отключить аппаратное ускорение.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Программная отрисовка интерфейса)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Проверять обновления перевода.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Автозагрузка и автоустановка)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Проверять обновления при запуске.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Автоустановка обновления после закрытия приложения.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Принудительно загрузить портативную версию.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Потребуется ручная распаковка ZIP и замена исполняемого файла)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Принудительно запускать обновление с повышением прав.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Запрос установки</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Интерфейс</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Старый</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Новый</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Частота захвата</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Вручную</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Каждый кадр будет захватываться по нажатию кнопкм захвата или эквивалентного сочетания клавиш.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Действия</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Кадры будут захватываться только когда вы нажимаете или вводите что-то.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">В секунду</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Кадры будут захватываться столько раз \"в секунду\",&#10;сколько установлено в окне рекордера.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">В минуту</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Кадры будут захватываться столько раз \"в минуту\",&#10;сколько установлено в окне рекордера.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">В час</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Кадры будут захватываться столько раз \"в час\",&#10;сколько установлено в окне рекордера.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Задержка кадра:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(В мс, каждому кадру будет установлена эта задержка)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Задержка запуска:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(Задержка захвата каждого кадра, в мс)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Каждый кадр будет захвачен с интервалом {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Режим захвата</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Старый метод захвата, он не требует плагинов,&#10;но медленнее и может не работать в играх.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Метод захвата Desktop Duplication API, он быстрее и способен захватывать&#10;полноэкранные игры, но требует SharpDx плагин и Windows 8 или новее.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Сохранить&#10;в файл</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Каждый кадр будет сохранен как изображение на диске.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Кэшировать&#10;в памяти</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Каждый кадр сначала сохранеяется в памяти (можно сжать).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Сжатие:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Оптимальное</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Медленно, но верно)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Быстрое</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Быстрее, но больше размер)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Не сжимать</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Сжатие не будет выполняться)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Размер кэша (в МБ):</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(При достижении этого размера данные будут сброшены на диск)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Предотвращать захват черных кадров.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Для BitBlt с кэшированием в памяти)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Показывать курсор на записи.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Выберите цвет курсора</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Постоянная частота кадров.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Не меняется с задержкой захвата)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Захват только при изменениях.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(В пределах области записи)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Производительный захват удаленного экрана.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Без многослойности)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Освобождать память при захвате.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Снижает производительность)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Линии разметки</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Правило третей</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Переключить отображение&#10;линий правила третей.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Перекрестие</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Переключить отображени&#10;линий перекрестия.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Линии разметки будут отображаться только, если запись на паузе или остановлена.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Скрыть заголовок (тонкая рамка).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Активировать увеличение</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Включает лупу при выборе области записи)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Анимация границы.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Пунктирная анимация при выборе области)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Элемент перемещения области записи.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Адортер рядом с областью записи)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Компактный режим.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Уменьшенная панель команд рекордера)</s:String>    \n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Отображать кнопку отмены во время записи.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Иначе только при паузе)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Производительный выбор области/окна.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Статический экран при выборе)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Запоминать предыдущий размер области записи.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Запоминать предыдущее расположение области записи.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Задержка начала записи.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(в секундах)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Включить следование за курсором</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Центрировать область записи по курсору)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Поле начала смещения, от края области записи)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Дополнительное поле скрытия UI, от края поля смещения)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Подтверждать отмену записи.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Фон редактора</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Размер сетки</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Очень маленький</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Маленький</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Средний</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Большой</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Очень большой</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Гигантский</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Я слепой</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Свой</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Высота</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Ширина</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Применить</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Базовый цвет</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Четный цвет</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Нечетный цвет</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Показать кодировки в отдельном окне.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Растянуть заголовок (window chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Автонастройка размера окна по размеру кадра (при старте).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Автонастройка размера кадра по размеру окна (при старте).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Подтверждать удаление кадров.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Подтверждать удаление проекта.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Подтверждать выход из редактора (если открыт проект).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Тройной клик - выбор текста.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Отрисовывать контур вокруг букв.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Пропускать кадры при предпросмотре.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">если не удается отобразить их вовремя.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Пропускать кадры при необходимости.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Лимит истории отмен/повторов,</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">будут удаляться более старые действия.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">Максимум сохраненных действий.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Синхронизировать папку вывода в пресетах.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(В пресетах будет одинаковый путь вывода)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Также синхронизировать имя файла.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(В пресетах будет одинаковое имя файла)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Синхронизировать только пресеты с одинаковыми типами файла.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Синхронизировать только пресеты с одинаковыми типами файла)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Автозадача</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Список автозадач</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Задача</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Подробности</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Включен</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Включить эту задачу.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Выбор задачи)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Выберите задачу выше</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Эти задачи выполняются последовательно сверху-вниз списка.&#10;Это происходит, при открытии проекта с помощью редактора.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Общесистемные</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Запись с экрана:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Открывает запись экрана по умолчанию)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Запись с веб-камеры:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Открывает запись с веб-камеры)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Запись с доски:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Открывает запись с доски, записывайте свои рисунки)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Редактор:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Открывает другое окно редактора)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Параметры:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Открывает окно параметров)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Выход:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Закрывает все окна и значок в системном трее)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Записи</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Старт/пауза:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Старт/пауза записи. Или захват в режиме моментальных снимков)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Стоп:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Останавливает запись и открывает редактор)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Отменить:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Отменяет активную запись на паузе)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Следовать за курсором:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Переключает следование за курсором)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Отключить следование:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Временно отключает следование за курсором (только с модификатором))</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Нажмите, чтобы установить фокус, затем нажмите нужные клавиши и модификаторы.&#10;Некоторые комбинации клавиш недоступны.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Язык программы</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Автоопределение</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Язык системы (если доступен)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Хотите перевести? </s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Открыть руководство и загрузить программу-переводчик.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Потом,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">нажмите чтоб импортировать</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">и протестировать свой перевод</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Отправьте перевод на</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">как закончите.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Отрыть страницу руководства.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Открыть страницу импорта</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Открыть почтовый клиент</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Статус</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Объем:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} свободно из {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Обновить информацию объема.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Очистка папки кэша.&#10;Вы можете решить, сохранять ли последние проекты или нет.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Недостаточно места на выбранном диске. Очистите временную папку или измените расположение.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Невозможно получить информацию о диске.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Нет файлов</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} файл</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} файлов</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Нет папок</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} папка</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} папок</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} ипользуется</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Пути</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Кэш:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Выберите расположение временных файлов</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Журналы:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Выберите путь к файлам журналов ошибок.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Обзор выбранной папки.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Путь к настройкам</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Путь:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Не существует</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Создать пустой файл настроек.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Удалить файл настроек.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Открыть папку файла настроек.&#x0d;С Ctrl, открыть файл, если это возможно.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Если файл настроек не найден рядом с EXE, программа использует AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Удалить все файлы из кеша при закрытии программы.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Подтверждать удаление всех файлов из кеша.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Автоудаление старых проектов, в днях</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">При открытии программы удаляются все закрытые проекты, возраст которых превышает заданное время.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">Любой закрытый проект старше этого времени будет удален при открытии программы.</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Очистка кэша</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Хотите очистить папку кеша?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Когда вы делаете запись или открываете что-то для редактирования, проект создается и хранится в папке кэша.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Хотите удалить эти проекты из папки кэша?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Не удалять последние проекты.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Будут удалены только проекты старше {0} дней, и неиспользуемые сейчас)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Все проекты, которые сейчас не используются, будут удалены)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Прокси</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Отключен</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Вручную</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Системный</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Использовать системное прокси)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Хост:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Порт:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Пользователь:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Пароль:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Пресеты загрузки</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Сервис</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Заголовок</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Описание</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Включен</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Сервис загрузки</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Выберите сервис</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Выберите сервис загрузки выше</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Свой</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Включить этот пресет.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Подробности</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Имя:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Описание:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Анонимно</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Аутентифиция</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Авторизация</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Получить токен</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Вставьте сюда токен OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Логин:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Пароль:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Авторизация</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Логин и пароль не будут сохранены.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Параметры</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Использовать прямые ссылки.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Альбом</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Дайте этому пресету уникальное имя.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Это имя уже используется в другом пресете.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">В режиме аутентификации необходимо завершить процесс аутентификации.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Предоставьте свое имя пользователя и пароль для авторизации приложения..</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Не удалось получить токен авторизации.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Чтобы авторизовать приложение, необходимо предоставить токен авторизации..</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Авторизация не удалась. Перероверьте и повторите попытку через несколько секунд.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Не удалось загрузить список альбомов.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Авторизация завершена.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Не авторизован.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Авторизация закончилась {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Авторизация действительна до {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Получать ссылки на Gifv вместо Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Загружать GIF в выбранный альбом.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Альбом:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Подтверждать загрузку</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Обновить список альбомов.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">По умолчанию</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Напоминать заполнить сведения о загрузки.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Тип URL:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Выберите альбом (необязательно)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">При желании вы можете выбрать целевой альбом:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Сведения о загрузке (необязательно)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Сведения о загрузке</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Заголовок:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Описание:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Теги:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Разделяйте теги точкой с запятой ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Отображаются только по прямой ссылке.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">История загрузок</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Дата</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Пресет</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Успешно?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Удалить запись в истории.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Ссылка:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Низкое качество:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Ссылка для удаления:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Удалить запись в истории?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Это действие не может быть отменено.&#10;&#10;Удалить выбранную запись истории?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Доступные внешние инструменты</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Нажмите здесь, чтобы загрузить&#x0d;{0} </s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Загрузка...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Загружен&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Нажмите здесь, чтобы открыть свойства файла.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Приложения магазина Microsoft, не могут загружать другие приложения. Вам придется загрузить его вручную.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Путь к FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Укажите путь к FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Исполняемый FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Путь к FFMpeg содержит недопустимые символы. Выберите правильное расположение файла.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Путь к Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Укажите путь к Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Библиотека Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Путь к Gifski содержит недопустимые символы. Выберите правильное расположение файла.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Лицензия FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Лицензия Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Лицензия SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Отсутствует разрешение на запись в папку</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Невозможно сохранить загрузку в папке из-за отсутствия разрешения на запись.&#10;&#10;Запустить загрузчик с правами администратора, чтобы завершить загрузку?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Donate</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">U$D</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">€UR</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Открыть сайт PayPal. Валюта: USD</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Открыть сайт PayPal. Валюта: EUR</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Открыть сайт PayPal. Выбор валюты.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Подписки</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Ежемесячное пожертвование через Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Ежемесячное пожертвование через Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Подарить игры</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Подарить игры через Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Подарить игры через GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Оплатить кофе через Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Криптовалюты</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Копировать адрес BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Поддержка</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Если вы хотите поддержать проект :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Версия:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Проверить обновления</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">У вас последняя версия.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Автор: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Версия магазина Microsoft. Некоторые функции отключены из-за принудительных политик.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Контакты</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Присоединиться к серверу</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Посетить страницу</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Присоединиться к комнате</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Лицензия и коды программы:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Лицензия:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Данное ПО полностью бесплатное)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Исходный код:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Конфиденциальность:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Огромное спасибо</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">И всем, кто пишет отзывы, предложения, качественные переводы и финансово поддерживает.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Локализация</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Получение языковых кодов...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Распознан как {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Не распознан</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Самый нижний ресурс - текущий используемый.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Чтобы применить свой ресурс, переместите его в конец списка.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Экспорт ресурса...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Сохранить словарь ресурсов</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Открыть словарь ресурсов</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Словарь ресурсов</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Импорт ресурса...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Имя файла вне допустимого шаблона</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Попробуйте переименовать как: StringResources.en.xaml, где 'en' должен быть заменен вашим языковым кодом.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Нельзя добавлять ресурс с тем же именем</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Попробуйте удалить дубль ресурс или использовать другой языковой код.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Избыточный языковой код</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Код \"{0}\" избыточен. Попробуйте вместо него \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Неизвестный язык</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" и его семья не признаны действительными языковыми кодами.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Импорт локализации не удался.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Запись</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Пауза</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Продолжить</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Стоп</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Отмена</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Снимок</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Высота</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Ширина</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Следование за курсором включено.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Переключить режим частоты захвата.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">Вручную</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">Действия</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Максимум кадров в секунду</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">кадр.\\с</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Диапазон от 1 до 60 кадров в секунду.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Максимум кадров в минуту</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">кадр.\\м</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Диапазон от 1 до 60 кадров в минуту.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Максимум кадров в час</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">кадр.\\ч</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Диапазон от 1 до 60 кадров в час.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Щелкните или нажмите клавиши захвата</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Снимок окна (потяните и отпустите над окном)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Подготовка</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Пауза)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Остановка...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Ожидание старта...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Время захвата.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Всего кадров:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Ручной захват:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Пауза захвата.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Ваш ПК не поддерживает режим точного захвата,&#10;т.е. целевая частота кадров может быть не достигнута.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Не удалось захватить экран</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Не удалось захватить экран. Метод захвата не вернул ни одного кадра после 5 попыток.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Не удалось запустить / приостановить захват экрана</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 или новее требуется для захвата экрана с помощью Desktop Duplication API.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Регион</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Выбор области</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Окно</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Выбор окна</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Весь экран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Выбор экрана</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Внутренний экран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Общий экран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Графический адаптер: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Разрешение: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Родное разрешение: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Переместить&#10;перетаскиванием.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Принять</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Повторить</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">ПКМ</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Отменить выбор (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Нажмите и тяните, для выбора региона.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Нажмите и тяните, для выбора области экрана</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Нажмите здесь, чтобы выбрать это окно</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Нажмите здесь, чтобы выбрать этот экран</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Нажмите ESC для отмены</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Нажмите {0}, чтобы остановить запись</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Окно рекордера будет свернуто,&#10;нажмите {0}, чтобы приостановить захват.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Отмена записи</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Вы уверены, что хотите отказаться от записи?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Это действие приведет к отмене записи и удалению всех кадров&#x0d;Вы не сможете отменить эту операцию.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - запись с веб-камеры</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">У вас нет веб-камеры :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Поиск видео устройств.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Масштаб: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Изменить масштаб видео.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - запись с доски</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Автозапись</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Включать запись во время рисования.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl (удерживать)</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Выбор цвета</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Выберите цвет</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Красный</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Зеленый</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Синий</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Альфа</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Первоначальный цвет</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Текущий цвет</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Конечный цвет</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Перетащите&#x0d;образец цвета</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Перетащите для выбора&#x0d;цвета с экрана.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Просмотр ошибок</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Открыть Inner Exceptions</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Тип исключения</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Сообщение</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Стек</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Источник</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Что-то пошло не так.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Отправить отчет.</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Пресет</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Кодировщик</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Имя</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Описание</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Другое</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Автосохранение при изменении параметра.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Изменения в пресетах кодирования и экспорта придется сохранять вручную, кнопкой сохранения.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Изменения в пресетах кодирования и экспорта будут сохранены автоматически.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Некоторые свойства пресета по умолчанию, доступны только для чтения.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">Дайте имя этому пресету.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">Пресет с таким же именем уже существует.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Автосохранение</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Изменения в этом пресете сохраняются автоматически.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">По умолчанию ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Пресет по умолчанию для кодировщика.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Для Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Соблюдает ограничения Twitter (кроме размера и разрешения).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Более старый и более известный кодек.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Анимация</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Видео</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Изображение</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Проект</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Высокое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Для записей с большим количеством цветов и градиентов.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Высокое качество • Прозрачный фон</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Поддерживает сохранение анимации с прозрачным фоном.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Высокое качество • Графика</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Для записей с малым количеством цветов.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Сбалансированный</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Хорошее качество, для фотоподобных, исп. квантователь Wu без искажений.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Высокое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Высокое качество, для фотоподобных, исп. квантователь Wu с более высоким битовым уровнем и рассеиванием ошибок Floyd-Steinberg.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Низкое качество, более быстрое кодирование</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Квантование всех кадров с одной предопределенной палитрой \"web-safe\" и упорядоченным рассеиванием Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Более высокое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Более высокое качество, но с большим размером файла.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Более низкое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Более низкое качество, но с меньшим размером файла.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Более высокое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Более высокое качество, но с большим размером файла.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Более низкое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Более низкое качество, но с меньшим размером файла.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Более низкое качество с быстрым кодирование</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Еще более низкое качество, но более быстрое кодирование и меньший размер файла.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Низкое качество</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Низкое качество, но более быстрое кодирование.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Высокое качество</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Высокое качество, небольшой размер файла, но более медленное кодирование.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Более низкое качество</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Более низкое качество, небольшой размер файла и более быстрое кодирование.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Высокое качество</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Высокое качество и небольшой размер файла.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Вставка кадров</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Обе стороны должны быть одного размера, это окно позволяет переместить и изменить размер изображения и холста.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Размер холста:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Вписать изображение в холст</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Изменить размер холста чтобы вписать оба изображения (от верхнего левого угла).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Кадры имеют различный размер. Необходимо подогнать их перед добавлением.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Новые кадры</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Текущие кадры</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Размер изображения:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Позиция изображения:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Сбросить размер&#x0d;и положение</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Новый кадр будет добавлен:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Перед</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">После</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Кадр</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Импорт</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Выбрать цвет заливки холста</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Импортировать кадры из видео</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Импортер:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Загрузка...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Масштаб:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Размер:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Высота:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Ширина:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Частота кадров:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">FPS</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Старт:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Конец:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Выделение:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Кадры:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Продолжительность:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Не удалось загрузить видео.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Не удалось запустить предпросмотр. Попробуйте использовать другой импортер, проверьте, не повреждено ли видео.&#x0d;Если вы используете MediaPlayer, проверьте, включен ли компонент Windows - \"Компоненты для работы с мультимедиа/Проигрыватель  Windows Media\" и убедитесь, что у вас установлен необходимый видеокодек.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Тайм-аут при предпросмотре кадра.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Не выбраны кадры для импорта.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Кодер</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Кодирование...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Запуск</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Готово</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Скопировано в буфер обмена.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Не удалось скопировать</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Команда выполнена</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Показывать вывод команд(ы).</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Не удалось выполнить команду</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Не удалось загрузить</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Click, чтобы открыть страницу для удаления изображения (если доступно).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Прошедшее время, в минутах:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Анализ:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Кодирование:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Загрузка:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Копирование:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Команды:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Файл удален или перемещен</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Отменено</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Ошибка</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Нажмите сюда, чтобы показать подробности ошибки</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Загрузка</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Выполненные команды</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Обработка {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Подготовка ко второму проходу</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Обработка {0} - 2-й проход</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Создание файла</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Анализ неизменных пикселей</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Сохранение результата анализа</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Открыть файл</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Обзор папки</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Удалить из списка</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Показать детали</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Очистить готовые</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Копировать как изображение</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Скопировать имя файла</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Скопировать путь к папке</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Скопировать ссылку</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Команды вывода</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Команды вывода</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Уведомления</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Отменить все</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Редактор</s:String>\n    <s:String x:Key=\"S.Editor.File\">Файл</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Редактор</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Воспроизведение</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Кадры</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Рисование</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Переходы</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Статистика</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Настройки</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Справка</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Дополнительно</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Доступно обновление!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Нажмите здесь, чтобы узнать больше.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Всего \\ Выделено \\ Текущий</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Подготовка кадров</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Невозможно загрузить - вы не можете загружать несколько файлов за раз. Выберите только один файл.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Невозможно загрузить - вы не можете загружать несколько проектов за раз. Выберите только один проект.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Открыть файл (изображение или видео)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Открыть файл (изображение, видео или проект)</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Все файлы</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Изображения</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Видео</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Анимированный PNG</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Анимированный GIF</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Анимированный Webp</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">AVI-видео</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">MKV-видео</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov видео</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">MP4-видео</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm-видео</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">BMP-изображение</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">JPEG-изображение</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">PNG-изображение</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">ZIP-файл с изображениями</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Проект ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Проект ScreenToGif как ZIP</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">PSD-файл</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Перейдите в \"Файл > Создать запись\" чтобы начать новую запись.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Перетащите сюда файл для импорта в редактор.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Большое спасибо за использование программы!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Чем меньше частота кадров, кол-во цветов и\\или число изменений между кадрами, тем меньше размер файла.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Хотите поговорить? Откройте \"Настройки > О программе\" чтобы узнать мои контакты.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Нашли ошибку? Свяжитесь со мной через Feedback tool.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Хотите попробовать новый рекордер? Перейдите в \"Настройки > Захват экрана\" и активируйте его.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Запись&#x0d;с экрана</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Запись&#x0d;с веб-камеры</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Запись&#x0d;с доски</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Новый&#x0d;проект</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Начать новую запись</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Запись&#x0d;с экрана</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Запись&#x0d;с веб-камеры</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Запись&#x0d;с доски</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Вставить&#x0d;медиа</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Вставить</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Сохранить&#x0d;как</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Открыть&#x0d;файл</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Недавние&#x0d;проекты</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Сохранить как&#x0d;проект</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Удалить&#x0d;проект</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Действия</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Отмена</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Повтор</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Сброс</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Буфер обмена</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Показать буфер</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Вставить</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Вырезать</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Копировать</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Масштаб</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Окно по&#x0d;контенту</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Контент&#x0d;по окну</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Выбранные кадры</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Выбрать&#x0d;все</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Перейти к&#x0d;кадру...</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Инвертировать</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Снять выбор</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Воспроизведение</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Первый</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Назад</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Старт</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Пауза</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Вперед</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Последний</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Параметры</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Зациклить воспроизведение (петля)</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Только для воспроизведения.&#x0d;Если вы хотите изменить настройки циклов для экспорта GIF и Apng,&#x0d;то они доступны на панели \"Сохранить как\" для некоторых кодеров.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Кадры</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Удалить&#x0d;выбранные</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Удалить&#x0d;дубликаты</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Удалить&#x0d;несколько</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Плавная&#x0d;петля</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Удалить&#x0d;до начала</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Удалить&#x0d;до конца</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Порядок кадров</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Реверс&#x0d;(все)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Йо-йо&#x0d;(все)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Переместить&#x0d;влево</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Переместить&#x0d;вправо</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Задержка кадра</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Изменить&#x0d;все</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Увеличить&#x0d;уменьшить</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Изменить&#x0d;выбранные</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Размер и поворот</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Размер</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Обрезать</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Отразить&#x0d;повернуть</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Текст</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Заголовок&#x0d;кадра</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Текст</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Титульный&#x0d;кадр</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Нажатия&#x0d;клавиш</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Наложение</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Рисование</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Фигуры</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">События&#x0d;мыши</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Водяной знак</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Синемаграф</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Рамка</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Тень</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Прогресс</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Пикселизация</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Стили переходов</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Замещение</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Слайд</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Общее</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Число кадров</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Общее время</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Размер кадра</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Средняя задержка</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Текущее время</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Текущее время (нарастающее) на основе текущего кадра.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI и масштаб</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Выбранный кадр</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Вырезать</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Нельзя вырезать все кадры.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Записи нужен хотя бы один кадр.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Удалить все</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Вы уверены в том, что хотите удалить все кадры?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Это действие приведет к необратимой потери текущего проекта. Сбросить данный проект?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Удалить все</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Вы действительно хотите удалить все кадры?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Вы пытаетесь удалить проект и все его кадры.&#x0d;Данное действие отменить нельзя.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Удалить предыдущий проект?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Если вы так поступите, предыдущий проект все же будет доступен в недавних проектах.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Удалить кадры</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Вы уверены что хотите удалить?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Данным действием вы удалите {0} кадров.\\n\\rДействие можно будет отменить.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Выход из редактора</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Вы уверены, что хотите выйти?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Проект, над которым вы работаете, может быть открыт заново через меню \"Недавние проекты\"</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Проект, над которым вы работали, можно снова открыть с помощью \"Недавние проекты\", но не забывайте, что, в зависимости от настроек, он будет удален через несколько дней или при перезагрузке ПК.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Ошибка перетаскивания</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Нельзя импортировать несколько файлов за раз</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Выберите только один файл.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Невозможно открыть файл</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Невозможно открыть файл. Файл имеет неверный формат.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Нельзя импортировать несколько проектов за раз</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Выберите только один проект.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Вы не ввели текст.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить заголовок.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить текст.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить титульный кадр.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Нужно выбрать толщину рамки хотя-бы с одной стороны.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить рамку.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Непрозрачность должна быть больше нуля.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">При использовании глубины тени и радиуса размытия = 0, это не будет иметь эффекта, так как будет скрыто за кадром.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Выберите хотя бы один пиксел, чтобы добавить синемаграф. Выберите пиксели, рисуя поверх них.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Переход замещением</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить замещение.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Полностью прозрачный цвет не будет оказывать никакого влияния на этот переход.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Переход слайдом</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Выберите хотя бы один кадр, чтобы применить слайд.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Загрузка кадров</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Невозможно загрузить проект</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Не удалось загрузить кадры, поскольку все они повреждены или изображения отсутствуют там, где они ожидаются.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Некоторые кадры невозможно загрузить.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Не удалось загрузить кадры, потому что их не удалось найти или они повреждены.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Необходимо выбрать, по крайней мере, один кадр, чтобы применить наложение.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg отсутствует. Добавьте его к переменным средам или установите расположение в настройках.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski нет. Добавьте его в переменные окружения Path или нажмите здесь, чтобы открыть \"Настройки > Дополнительно\" и указать путь.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">На диске недостаточно места для хранения файлов кэша ({0}%). Нажмите здесь, чтобы открыть \"Настройки > Файлы и папки\" для освобождения места.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Попытка импорта нескольких изображений с разными DPI. Импорт частичен, импортируйте пропущенные изображения отдельно.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Вы пытались добавить несколько изображений с разными размерами, это не поддерживается. Некоторые из них были добавлены, другие придется добавлять отдельно.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Извлечение кадров из кэша</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Обновление кадров</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Подготовка к импорту</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Импорт кадров</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Анализ дубликатов</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Регулировка задержки</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Удаление дубликатов</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Удаление кадров</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Удаление папок</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Изменение размера кадров</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Обрезка кадров</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Добавление наложения к кадрам</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Создание кадра заглавия</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Применение отражения/поворота к кадрам</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Изменение задержки</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Применение эффекта перехода</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Подготовка к сохранению</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Отменить загрузку и удалить проект.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Поиск идеальной петли</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Удаление кадров, не используемых в петле</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Кадр:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Открыть изображение</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Обзор папки</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Перейти к кадру</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Перейти к кадру (0 из {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Сохранить как</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Удалить выбранные кадры</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Новая запись экрана</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Новая запись с веб-камеры</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Новая запись с доски</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Новый проект</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Открыть проект или запись</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Создана новая запись с экрана</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Создана новая запись с веб-камеры </s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Создана новая запись с доски</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Создан новый проект</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Выполнена отмена действия</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Выполнен сброс списка всех изменений</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Повтор действия выполнен</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} кадров вырезано</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} кадров скопировано.</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} кадров вставлено</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Выбрано увеличение {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Были выбраны все кадры</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Выбран кадр #{0}</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Выделение инвертировано</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Все кадры были удалены</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} кадров удалено</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Реверс списка кадров</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Эффект цикла применен</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Кадр(ы) сдвинуты влево</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Кадр(ы) сдвинуты вправо</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Размер кадра изменен</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Кадры обрезаны</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Кадры отражены/повернуты</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Отражение применяется к выбранным, а поворот ко всем кадрам.</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Данное действие применимо ко всем кадрам</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Данное действие применимо к выбранным кадрам</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Это действие затронет все или выбранные кадры, зависит от ваших настроек</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Синемаграф применяется ко всем кадрам, основываясь на первом.</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Наложение применено</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Создан титульный кадр</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Титульный кадр будет вставлен перед выбранным</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Продолжительность изменена</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Переход вставлен</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Частота кадров снижена</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Дубликаты удалены</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Скрыть</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Применить</s:String>\n    <s:String x:Key=\"S.Action.Open\">Открыть</s:String>\n    <s:String x:Key=\"S.Action.Save\">Сохранить</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Отмена</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Недавние проекты</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Поиск недавних проектов...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Дата создания</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Кол-во кадров</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Проект не выбран. Выберите проект из списка для его загрузки.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Этот проект уже отображается этим экземпляром редактора.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Этот проект уже был открыт другим экземпляром редактора. Один проект не может быть открыт дважды.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Содержание буфера</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Запись в буфере:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} изображение</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} изображений</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Обзор содержимого</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Удалить</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Режим вставки</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Перед текущим кадром</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">После текущего кадра</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Разница</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">DPI</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Настройки</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Пиксели (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Проценты (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Сохранить пропорции.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Качество:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant (высокое качество)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Linear (низкое качество)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Nearest neighbor (низкое качество, быстрее)</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Качество масштабирования.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Необходимо выбрать другое значение, чтобы применить размер.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Точки</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Сверху:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Слева:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Снизу:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Справа:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Обрезаемый кадр должен быть меньше текущего размера кадра.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Обрезаемый кадр должен быть боле чем 10х10 пикселей.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Отразить по горизонтали</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Отразить по вертикали</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Повернуть влево на 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Повернуть вправо на 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Уменьшить количество кадров</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">После каждого:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Количество:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Коррекция задержки:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Не коррекстировать</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Суммировать с предыдущим кадром</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Суммировать ровняя с оставшимися кадрами</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Уменьшить частоту кадров всего проекта.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Если параметр не установлен, придется выбрать несколько кадров подряд,&#10;больше фактора удаления.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Будет удалено {0} кадров, после каждого {1} кадра. Удаленные не считаются.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Выберите кадры, что бы уменьшить их частоту (или отметьте чек всего проекта).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Выбранные кадры должны быть последовательными.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Надо выбрать кадров больше фактора удаления.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Удалить дубликаты</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Сходство (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Удалить кадры:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Первый кадр</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Пследний кадр</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Регулировка времени:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Не настраивать</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Среднее</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Сумма</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Анализирует каждый кадр (пиксель за пикселем) и удаляет те, которые больше чем на {0}% похожи на ближайшего соседа.&#x0d; Вы можете отрегулировать продолжительность кадров.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Создание плавной петли</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Игнорировать первые:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Сравнить с:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Конец</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Начало</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Пытатся найти кадр, хотя бы на {0} % похожий на начальный кадр, и удалить все последующие кадры.&#x0d;Вы можете выбрать, хотите ли вы игнорировать некоторые начальные кадры и начать ли сравнение с начала (после порога) или с конца.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Количество игнорируемых кадров должно быть меньше, чем общее количество кадров.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Не удалось создать плавную петлю с этими настройками.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">У вас уже есть плавная петля на основе выбранных настроек.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Текст</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Шрифт</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Семейство:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Стиль:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Начертание:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Размер:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Цвет:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Фоновый цвет:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Обводка</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Толщина:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Макет</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">По вертикали:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">По горизонтали:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Выровнять:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Оформление:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Нажатия клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Клавиши</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Разделитель</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Изменить нажатия клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Игнорировать клавиши Ctrl, Alt, Shift и Win, если они не используются как модификаторы.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Игнорировать нажатия одиночных клавиш, типа \"Ctrl\", но не игнорировать \"Ctrl + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Игнорировать программы имитирующие нажатия клавиш.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Записывать только пользовательские нажатия клавиш.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Увеличить длительность показа</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Начать показ нажатий клавиш раньше</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">на (мс):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">На вашей записи нет нажатий клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Редактор нажатий клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Номера кадров</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Обнаружение нажатий клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Удаление нажатий клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Добавление нажатий клавиш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Строчные буквы.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Позволяет вставлять строчные одиночные буквы.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Режим</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Карандаш</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Ластик</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Выбрать</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Стереть линию</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Ширина:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Высота:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Перо:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Прямоугольник</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Эллипс</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Другие:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Маркер (рисовать в фоне)</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Сглаживание</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Рисунок не будет применен к выбранным кадрам.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить рисунок.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Вставка</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Фигуры</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Радиус:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Штрихи:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Управление размерами штрихов и промежутков.&#10;Вы можете установить несколько размеров, чтобы создать сложный стиль тире.&#10;Значение по умолчанию - \"1 0\" или пусто, что означает прочерк без пробелов..</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Сброс поворота</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Убрать</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Заливка</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">События мыши</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Цвет подсветки курсора:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Цвет левой кнопки:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Цвет средней кнопки:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Цвет правой кнопки:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Изображение</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Файл:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Ничего не выбрано</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Прозр.:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Выберите изображение</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Вы не выбрали изображение.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Выберите хотя бы один кадр, чтобы добавить водяной знак.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Внешний вид</s:String>\n    <s:String x:Key=\"S.Border.Info\">Используйте отрицательные значения, чтобы расширить границу. При этом граница будет применена ко всем кадрам.&#x0d;Если отрицательное значение не используется, граница будет применена только к выбранным кадрам.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Цвет тени:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Цвет фона:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Направление:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Блюр (радиус):</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Глубина:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Пикселизация</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Блюр (размытие)</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Затемнение</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Освещение</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Параметры пикселизации</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Размер пикселя:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Уровень размытия:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Уровень затемнения:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Уровень освещения:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Вычисление среднего цвета для каждого пикселизированного блока.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Применить запутывание с инверсией области выбора.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Сглаживание</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Выберите прямоугольную область, которая должна быть пикселизирована.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Используйте выбор, чтобы выбрать часть кадра, которая не должна быть запутана.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Вы ничего не выбрали. Выберите мышью прямоугольную область, которая должна быть пикселизирована.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Тип</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Прогрессбар</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Текст</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Точность:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Минуты</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Секунды</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Миллисекунды</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Проценты</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Номер кадра</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Текущие дата/время</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Другое</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Показать общее.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Формат:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Формат</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = миллисекунды</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = секунды</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = минуты</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = проценты</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = номера кадров</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Всего:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Примеры:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Вы можете использовать формат даты и времени из .Net Framework.&#x0d;Спецификация доступна по ссылкам ниже.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Пресеты форматов</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Свои форматы</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Отсчет от:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Начинает отсчет кадров от выбранного номера.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Ориентация:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Задержка обновления</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Режим задержки:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Переопределение (в мс)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Увеличение или уменьшение (в мс)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Масштаб (в %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Новое значение</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Минимум 10 мс/кадр.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Уменьшить / увеличить значение</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Изменение значения</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Изменяет продолжительность всех выбранных кадров.&#x0d;&#x0d;Можно выбрать от 10 мс до 25500 мс.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Уменьшит / увеличит продолжительность каждого кадра.&#x0d;&#x0d;Можно выбрать от 10 мс до 25500 мс.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Изменяет продолжительность каждого выбранного кадра на указанный процент.&#x0d;&#x0d;Допустимо от 1% до 1000%, но конечная продолжительность каждого кадра будет ограничена 10 - 25500 мс</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Используйте карандаш, чтобы выбрать НЕ статичные пиксели (которые должны изменяться между кадрами), рисуя поверх них.&#x0d;&#x0d;Влияет на конечный размер файла.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Время перехода</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Задержка перехода</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Замещать этим...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">След. кадр</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Цвет</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Цвет</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Переход будет создан между выбранным кадром и следующим, добавлением новых кадров.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Предустановки форматов</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Формат выходного файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Пресет экспорта, содержащий все отображаемые настройки.&#10;Управляйте пресетами экспорта кнопками ниже.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Анимация</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Видео</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Кадр</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Другое</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">APNG</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Веб-изображение</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">AVI</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">MKV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String> \n    <s:String x:Key=\"S.SaveAs.Mov\">MOV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">Формат QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">MP4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Веб-видео</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">BMP</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">JPEG</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">PNG</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Project</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">Проект ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Файл Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Пресеты:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">По умолчанию</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Добавить новый пресет экспорта.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Сохранить текущие настройки в этом пресете экспорта.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Изменить настройки в базовом пресете экспорта.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Удалить выбранный пресет экспорта.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Сбросить настройки этого пресета экспорта.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Удаление преета</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Удалить пресет?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Это действие не может быть отменено.&#10;&#10;Удалить выбранный пресет</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Сброс настроек пресета</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Сбросить пресет?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Это действие не может быть отменено.&#10;&#10;Сбросить настройки пресета?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Кодировщик</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Кодировщик и квантователь</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Кодировщик, ответственный за генерацию выходного файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Встроенный кодировщик.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT кодировщик.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Системный</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Кодировщик, доступный в системе.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Внешний кодировщик, созданный FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Внешний кодировщик, созданный Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Параметры кодировщика</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Включить расширенный режим.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Введите параметры кодировщика.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Параметры:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Список параметров передаваемых FFmpeg.&#10;&#10;Специальные параметры:&#10;{I} - путь ввода (кадры).&#10;{O} - путь вывода (файл экспорта)&#10;{W} - ширина кадра.&#10;{H} - высота кадра.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Чтобы кодировать в 2 прохода, добавьте '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Предпросмотр</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Предпросмотр списка параметров, передаваемых FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Документация кодировщика</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Документация формата</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Документация фильтров</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Настройки GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Алгоритм уменьшения цвета (квантование).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Нейронная сеть</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Высокая точность квантования. Медленнее, но хорошо для большого количества цветов.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Дерево октантов</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Подходит для малого количества цветов. Быстрее, но может расслоить цвета.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Средний срез</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Менее хорош, чем дерево октантов и медленнее.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Полутона</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Использует фиксированную палитру оттенков серого, так что намного быстрее.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Частые цвета</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Просто берет самые используемые цвета в кадрах.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Выборка:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Фактор выборки:&#10;Значение 1 приведет к улучшению GIF,  но отрисовка будет медленнее.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Качество:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Цвета:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Макс. кол-во цветов (для каждого кадра):</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Использовать глобальную таблицу цветов.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Может уменьшить качество и/или размер GIF.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Лучший</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Быстрейший</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Более быстрый процесс кодирования.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Может привести к снижению качества gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Циклы:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Зацикленный gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Повторять бесконечно.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Число повторов.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Включить прозрачность.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Включает режим полной прозрачности фона GIF.&#10;Если включен, то хромакей будет проигнорирован.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Выберите, какой цвет отображать как прозрачный.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Если цвет выбран, он будет преобразован в прозрачный и отображаться как прозрачный в созданном GIF.&#10;Если цвет не выбран, все прозрачные цвета (Альфа = 0%) будут отображаться как прозрачные.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Определять неизменные пиксели.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Обнаружив неизменные пиксели между кадрами, можно будет&#10;пересохранять в gif только изменяемые части изображений.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Заменить неизменные хромакеем.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Повторяющиеся/неизмененные пиксели будут заменены этим&#10;хромакеем, что позволит использовать меньше цветов на кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Хромакей:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Рассеивание (сглаживание):</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Шкала Bayer:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Квантование</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Цвет фона:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Пиксели с альфа-каналом (прозрачность), которые выбранный квантователь считает непрозрачными, будут смешиваться с этим цветом.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Порог альфа:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Входное значение альфа-канала, при котором квантованный цвет будет прозрачным.&#x0d;&#x0a;Если 0, то результат никогда не будет прозрачным.&#x0d;&#x0a;Если 255, то прозрачными считаются только полностью прозрачные пиксели.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Порог белого:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Входное значение яркости, при котором результирующий цвет будет белым.&#x0d;&#x0a;Влияет на яркость результата. Однако рассеивание ошибок может компенсировать значение этого параметра.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Прямое сопоставление</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Когда включен, квантованный цвет определяется прямым сопоставлением, а не поиском ближайшей записи палитры.&#x0d;&#x0a;Это ускоряет квантование, но может привести к более высокому контрасту. Однако рассеивание ошибок может компенсировать значение этого параметра.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Размер палитры:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Определяет максимальный размер палитры для каждого кадра.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Свой битовый уровень.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Если включен, уровень битности можно настроить вручную.&#x0d;&#x0a;⚠️ Предупреждение: Высокий битовый уровень может потребовать МНОГО памяти!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Чем выше значение тем больше: точность, цветовое пространство, время обработки и использование памяти.&#x0d;&#x0a;Например, если 1, то результат может иметь не более 8 цветов, а если 2, то не более 64 цветов.&#x0d;&#x0a;Для квантователей Octree и Wu это также влияет на максимум монохроматических оттенков.&#x0d;&#x0a;Например, если 5 (по умолчанию для Wu), то только 32 монохроматических оттенка.&#x0d;&#x0a;⚠️ Предупреждение: Квантователь Wu потребляет не менее 650 Мбайт при наивысшем значении.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Черный и белый</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">1 bpp палитра с черным и белым цветами.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Оттенки серого 4 цвета</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">2 bpp палитра с 4 оттенками серого.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Оттенки серого 16 цветов</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">4 bpp палитра с 16 оттенками серого.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Оттенки серого 256 цветов</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">8 bpp палитра с 256 оттенками серого.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Системная палитра 4 bpp</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">4 bpp палитра с 16 стандартными цветами sRGB.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Системная палитра 8 bpp</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">8 bpp палитра с 'web-safe' цветами и прозрачностью.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 палитра</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">8 bpp палитра с цветовым пространством RGB 332.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree квантователь </s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Оптимизация палитры для каждого кадра алгоритмом Octree.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Median Cut квантователь</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Оптимизация палитры для каждого кадра алгоритмом Median Cut.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu квантователь</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Оптимизация палитры для каждого кадра алгоритмом Xiaolin Wu.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Рассеивание (сглаживание)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Сила:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">Сила рассеивания, или 0 для авто калибровки.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Зерно:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Целочисленное начальное значение, для создания случайного шаблона рассеивания.&#x0d;&#x0a;Оставьте пустым, чтобы использовать случайное начальное число для каждого кадра.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Нет</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Кадры квантуются без рассеивания.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Змеиная обработка</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">Если включен, направление распространения ошибки меняется от строки к строке.&#x0d;&#x0a;Это помогает уменьшить волновой эффект рассеивания ошибок.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 (упорядоченный)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">Матрица 2x2 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3 (упорядоченный)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">Матрица 3x3 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4 (упорядоченный)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">Матрица 4x4 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8 (упорядоченный)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">Матрица 8x8 Bayer.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Пунктирный полутон (упорядоченный)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Матрица 8x8 с пунктирным полутоновым шаблоном.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Синий шум (упорядоченный)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Матрица 64x64 с синим шумовым шаблоном.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Матрица 4х3 Bill Atkinson с 6 эффективными значениями.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">Матрица 5x2 D. Burkes.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">Матрица 3x2 Floyd-Steinberg.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Матрица 5x3 Jarvis-Judice-Ninke.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Матрица 5x3 Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Матрица 5x2 Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Матрица 3x2 Frankie Sierra.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Шестиугольная матрица 7x4 Stevenson-Arce.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (рассеивание ошибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Матрица 5x3 Stucki.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Случайный шум</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Случайный белый шум.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Чередующийся градиентный шум</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Неслучайный градиентный шум, генерируемый по формуле.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Предпросмотр</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Показать текущий кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Если включен, в предпросмотре вместо примера отображается текущий кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Автопредпросмотр отключен, поскольку текущие настройки требуют много памяти. Нажмите, чтобы обновить предпросмотр.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Не удалось создать предпросмотр: {0}&#x0d;&#x0a;Нажмите, чтобы повторить попытатку.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Настройки анимации</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Бесконечный цикл.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Если включен, анимация будет бесконечной.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Туда-сюда.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Если включен, анимация будет воспроизводиться вперед и назад.&#x0d;&#x0a;Это достигается за счет дублирования кадров, что означает больший размер файла и более длительное время кодирования.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Количество повторов:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Указывает, сколько раз будет воспроизводиться анимация.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Поиск похожих кадров.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Если включен, во время кодирования предпринимается попытка обнаружить неизмененные пиксели.&#x0d;&#x0a;При использовании с оптимизированным квантователем этот параметр позволяет иметь кадру более 256 цветов.&#x0d;&#x0a;Этот параметр игнорируется, если квантователь не использует прозрачность и не включен параметр 'Разрешить обрезанные кадры'.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Допуск похожих кадров:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Максимальный допуск при обнаружении измененных пикселей.&#x0d;&#x0a;Если 0, то разница вообще не допускается.&#x0d;&#x0a;Если 255, то могут быть добавлены кадры (или даже все) без содержимого.&#x0d;&#x0a;Разумный диапазон от 0 до 16 для оптимизированного квантователя. Те, у которых фиксированные цвета, можно использовать с несколько большими значениями с рассеиванием.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Если допуск слишком высок, результат может быть плохим. Нажмите, чтобы сбросить допуск.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Разрешить обрезанные кадры.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Если включен, кодировщику разрешено добавлять кадры меньшего размера.&#x0d;&#x0a;Если 'Поиск похожих кадров' отключен, то разрешается обрезать только предположительно прозрачные границы.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">'Поиск похожих кадров' игнорируется, поскольку текущая конфигурация не использует альфа-канал, а параметр 'Разрешить обрезанные кадры' отключен. Щелкните, чтобы включить 'Разрешить обрезанные кадры'.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">'Разрешить обрезанные кадры' не будет иметь эффекта, поскольку в текущей конфигурации не используются альфа-канал и 'Поиск похожих кадров'. Щелкните, чтобы включить 'Поиск похожих кадров'.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Настройки Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Упреждение:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Нет</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Среднее</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Смешанное</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Цикличный Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Определять неизменные пиксели.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Закрашивать неизменные пиксели прозрачным цветом.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Пресет:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Нет</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">По умолчанию</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Изображение</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Фотография</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Рисунок</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Значок</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Текст</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Режим без потерь.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Обычный</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Расширенный</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Способ настройки параметров кодировщика:&#10;Обычный: стандартное управление через GUI.&#10;Расширенный: текстовое поле для ввода параметров.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Кодировщик:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">Видеокодер, отвечающий за&#10;преобразование 'raw → вывод'</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Пресет:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Нет</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Очень медленно</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Медленно</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Медленнее</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Средне</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Быстрее</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Быстро</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Еще быстрее</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Очень быстро</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Сверх быстро</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Качество</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Баланс</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Скорость</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">По умолчанию</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Без потерь</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Без потерь (производительность)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Производительность</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Высокое качество</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Bluray диск</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Низкая задержка</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Низкая задержка (производительность)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Низкая задержка (качество)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Скорость кодирования и степень сжатия,&#10;медленные пресеты могут дать лучшее сжатие,&#10;при том же качестве.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Аппаратное уск.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Нет</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Да</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Авто</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Использование выделенного оборудования (видео-графики).&#10;Нет: не использовать.&#10;Да: использовать.&#10;Авто: использует и выбирает правильный кодер, когда это возможно.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Формат пикселей:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Авто</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Vsync:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Метод синхронизации видео.&#10;Авто: выбор от 1 до 2 в зависимости от возможностей мультиплексора (формата).&#10;Сквозной: каждый кадр передается кодировщику с отметками времени.&#10;Постоянный: кадры дублируются или отбрасываются для достижения заданной частоты кадров.&#10;Переменный: кадры пропускаются с временной меткой или отбрасываются так, чтобы 2 кадра не имели одной и той же временной метки.&#10;Отклоняющий: как сквозной, но кодировщик генерирует новые временные метки на основе частоты кадров.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Сквозной</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Постоянный</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Переменный</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Отклоняющий</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Частота кадров:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Фильм</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Свое</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Проходов:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Постоянный коэффициент скорости.&#10;Настройка контроля качества и скорости.&#10;Оставьте пустым, если не хотите устанавливать это свойство.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Уровень качества:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Меньшие значения означают лучшее качество.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Битрейт:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Целевой битрейт видео.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Режим битрейта:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Постоянный</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Переменный</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Мин. битрейт:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Допуск минимального битрейта.&#10;Полезно при использовании режима CBR.&#10;Оставьте пустым или установите ноль,&#10;если не хотите устанавливать это свойство.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Макс. битрейт:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Допуск максимального битрейта.&#10;Требует установленного размера буфера.&#10;Оставьте пустым или установите ноль,&#10;если не хотите устанавливать это свойство.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Размер буфера:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Размер буфера управления битрейтом.&#10;Оставьте пустым или установите ноль,&#10;если не хотите устанавливать это свойство.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions\">Свойства изображения</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Создать ZIP архив.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Сжать изображение.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Сжатие изображения по алгоритму RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Сохранить данные шкалы времени.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Экспортирует еще и время кадров, а не только кадры.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Параметры сохранения</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Частичный экспорт.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Сохраните файл в папку по вашему выбору.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Перезаписать?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Предупреждение</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Предупреждать, что существует другой файл с таким же именем.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Запрос</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Запрос, хочет ли пользователь перезаписать файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Разрешить</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Просто перезапишет файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Проект тоже сохранить (те же имя и папка).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Загрузить файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Копировать в буфер обмена.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Файл</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Копировать файл вывода в буфер обмена.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Путь к папке</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Копировать путь к папке вывода в буфер обмена.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Путь к файлу</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Копировать путь к файлу вывода в буфер обмена.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Ссылка</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Копировать полученную ссылку в буфер обмена.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Выполнить команды после кодирования.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Введите команды, которые будут выполняться после кодирования.&#x0d;Чтобы выполнить несколько команд, введите их в отдельной строке.&#x0d;Макросы:&#x0d;{p} = Путь файла вывода.&#x0d;{f} = Путь папки вывода.&#x0d;{u} = URL загрузки на хостинг.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Частичный экспорт</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Выбрать метод частичного экспорта.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Выражение</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Экспорт части анимации, основанный на простом выражении.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Диапазон кадров</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Экспорт части анимации в пределах диапазона кадров.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Диапазон времени</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Экспорт части анимации в пределах диапазона времени.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Выбранное</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Экспорт выбранных на временной шкале кадров.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Нет выбранных кадров</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">Выбран 1 кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">Выбрано {0} кадра(ов).</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">От:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">До:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Выражение:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Введите номера кадров, разделенные запятой,&#10;или диапазоны кадров, разделенные дефисом:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Файл вывода</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Папка назначения.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Выберите папку вывода</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Выберите расположение.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Формат файла</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Имя файла. Вставте формат даты/времени между '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Анимация</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Повысить номер файла</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Понизить номер файла</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Файл с таким именем уже существует.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Сохр. в буфере обмена.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Вам нужно выбрать, где сохранить файл (в папку, в буфер обмена или загрузить в другое место).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Вы не выбрали расширение файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">При выборе расширенного режима необходимо ввести параметры в поле параметров.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">Специальные параметры {I} (ввод) и/или {O} (вывод) отсутствуют в поле параметров.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Для выполнения команды после кодирования нужно ввести что-то в текстовое поле команды.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Вы должны выбрать хотя бы один кадр, если хотите экспортировать только выбранные кадры.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">Неверное выражение для частичного экспорта проекта.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Не выбрано приложение для загрузки. Вам нужно выбрать пункт назначения.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Вы не можете загрузить выбранную услугу, потому что она не авторизована. Перейдите к \"Параметры\" > \"Загрузить службы\", чтобы разрешить это приложение.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Вы не можете выбрать вариант копирования ссылки, потому что вы не загрузили файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Вы должны выбрать папку назначения.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Папка назначения не существует.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Имя папки содержит недопустимые символы. Введите правильное имя файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Вы должна выбрать имя файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Имя файла содержит недопустимые символы. Введите правильное имя файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Имя файла уже используется. Перезапишите его или выберите другое имя файла.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Уже существует проект с таким именем файла. Установите флажок перезаписать или выберите другое имя файла или папки.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Операция была отменена.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Загрузка</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Выберите пресет загрузки, с настройками используемого сервиса.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Этот сервис загрузки накладывает ограничения.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Добавить новый пресет загрузки.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Изменить настройки сервиса загрузки.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Просмотреть историю загрузки этим пресетом.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Удалить выбранный пресет загрузки.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Выбрать пресет загрузки</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Выберите один из списка.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Пресет загрузки недоступен для этого формата</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Добавьте пресет кнопкой ниже.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Удаление пресета загрузки</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Удалить пресет загрузки?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Это действие не может быть отменено.&#10;&#10;Удалить выбранный пресет загрузки?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Экспорт кадров</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Вы уверены что хотите выполнить экспорт кадров?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Данное действие выполнит экспорт {0} кадров в выбранную папку.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Перезапись</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Хотите перезаписать файл?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Файл с именем '{0}' уже существует в этой папке.\\r\\nХотите перезаписать его?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Хотите перезаписать файлы?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">Один или несколько файлов с таким же именем уже существуют в этой папке.\\r\\nХотите перезаписать их?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Предпросмотр команд</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Команда</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Путь ввода</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Путь вывода</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Послать отзыв</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Послать</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Предпросмотр</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Послать отзыв</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Заголовок *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Сообщение *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Если вы получили ошибку, не забывайте объяснить мне, как вы ее получили, шаг за шагом.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Тип отзыва</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Предложение</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Проблема/баг</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Ваш Email (желательно указать, для обратной связи)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Необходимо указать заголовок для вашего отзыва.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Необходимо добавить сообщение в ваш отзыв.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Вам нужно ввести свой Email, чтобы получить ответ от разработчика.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Идет отправка... Окно закроется после отправки.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Вложение (необязательно, 20MB максимум)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Добавить вложения</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Удалить все вложения</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Я знаю английский</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">и португальский (бразильский и европейский)</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Это то, что вы отправите, плюс все вложения.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Устранение проблем</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Не хватает какого-нибудь окна?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Если какое-либо из окон отсутствует (вне экрана),&#x0d;используйте параметры ниже, чтобы сбросить текущую и начальную позицию.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Вот где в настоящее время находится каждое окно:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Вот где каждое окно откроется в следующий раз:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Переместить все окна на главный экран.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Сбросить начальную позицию всех окон.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Нормальный</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Курсив</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Наклонный</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Жирный</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Полужирный</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Почти полужирный</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Еще жирнее</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Экстра-полужирный</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Экстра-светлый</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Более жирный</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Светлый</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Средний</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Обычный</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Нормальный</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Полу-полужирный</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Тонкий</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Супер-жирный</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ультра-жирный</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Сверх-светлый</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Сверху</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">По центру</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Снизу</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Растянуть</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Слева</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">По центру</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Справа</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Горизонтально</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Вертикально</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Слева</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Справа</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">По центру</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">По ширине</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Нет</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Подчеркнутый</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Зачеркнутый</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Линия сверху</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">На линии</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.sv.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Ok</s:String>\n    <s:String x:Key=\"S.Back\">Bakåt</s:String>\n    <s:String x:Key=\"S.Cancel\">Avbryt</s:String>\n    <s:String x:Key=\"S.Yes\">Ja</s:String>\n    <s:String x:Key=\"S.No\">Nej</s:String>\n    <s:String x:Key=\"S.Add\">Lägg till</s:String>\n    <s:String x:Key=\"S.Edit\">Redigera</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Titel</s:String>\n    <s:String x:Key=\"S.Description\">Beskrivning</s:String>\n    <s:String x:Key=\"S.SelectColor\">Tryck här för att välja färg.</s:String>\n    <s:String x:Key=\"S.Suppress\">Dämpa</s:String>\n    <s:String x:Key=\"S.Preview\">Förhandsvisa</s:String>\n    <s:String x:Key=\"S.Size\">Storlek</s:String>\n    <s:String x:Key=\"S.Background\">Bakgrund</s:String>\n    <s:String x:Key=\"S.Color\">Färg:</s:String>\n    <s:String x:Key=\"S.Delay\">Fördröjning</s:String>\n    <s:String x:Key=\"S.DelayMs\">Fördröjning:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Värde -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Skalvärde:</s:String>\n    <s:String x:Key=\"S.Margin\">Marginal:</s:String>\n    <s:String x:Key=\"S.Padding\">Spaltfyllnad:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Minsta höjd:</s:String>\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">Oh nej, appen kraschade :(</s:String>\n    <s:String x:Key=\"S.Required\">Obligatoriskt fält.</s:String>\n    <!--<s:String x:Key=\"S.Warning.Net.Title\">Missing Dependency</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 is not present</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Message\">In order to properly use this app, you need to download the correct version of the .Net Framework.&#10;Would you like to open the web page to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Title\">Only one instance permitted</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Header\">The app is already running</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif is already running, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>-->\n    <s:String x:Key=\"S.Exiting.Title\">Avslutar ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Är det säkert du vill avsluta?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Alla fönster kommer att stängas och aviseringsikonen kommer att tas bort.</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Ny skärminspelning</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Ny webbkamerainspelning</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Ny ritbordsinspelning</s:String>\n    <s:String x:Key=\"S.Exit\">Avsluta</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Ny skärminspelning</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Ny webbkamerainspelning</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Ny ritbordinspelning</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Ny animering</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Infoga skärminspelning</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Infoga webbkamerainspelning</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Infoga ritbordsinspelning</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Infoga från media (bilder och videor)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Spara som...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Ladda filer (bilder, videor och projekt)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Ladda de senaste projekten</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Förkasta aktuellt projekt</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Åsidosätt fördröjning av bildrutor</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Öka/Minska fördröjningen av bildrutor</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Skala fördröjning av bildrutor</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Ställ zoom till 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Justera fönstret till bildrutsstorlek</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Anpassa bilden till den tillgängliga fönsterstorleken</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Gå till första bildrutan</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Gå till föregående bildruta</s:String>\n    <s:String x:Key=\"S.Command.Play\">Spela upp animeringen</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Gå till nästa bildruta</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Gå till sista bildrutan</s:String>\n    <!--<s:String x:Key=\"S.Command.Undo\">Undo</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Redo\">Redo</s:String>-->\n    <s:String x:Key=\"S.Command.Reset\">Ångra all ändringar i projektet</s:String>\n    <!--<s:String x:Key=\"S.Command.Copy\">Copy the selected frames and store them in the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Cut\">Cut the selected frames and store them in the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Paste\">Paste the frames from the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Delete\">Delete all selected frames</s:String>-->\n    <s:String x:Key=\"S.Command.DeletePrevious\">Radera alla föregående bildrutor</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Radera alla efterföljande bildrutor</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Ta bort dubbletter</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Minska antalet bildrutor</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Omvänd animation</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Yoyo, får animationen att gå framåt och bakåt</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Flytta markerad bildruta till vänster</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Flytta markerad bildruta till höger</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Ändra storlek på alla bildrutor</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Beskär alla bildrutor</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Vänd eller rotera bildrutorna</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Lägg till en bildtext</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Lägg till en fritt flytande text</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Lägg till en bildruta som har en titel</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Tangenttryckningar: infogar knapptryckningar i inspelningen</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Rita fritt</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Lägg till former</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Musklick</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Välj en bild och lägg till den som vattenstämpel</s:String>\n    <s:String x:Key=\"S.Command.Border\">Lägg till kant</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Lägg till skugga</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Mosaik: dölj känsliga delar på dina bildrutor</s:String>\n    <!--<s:String x:Key=\"S.Command.Cinemagraph\">Use the drawing tools to select which parts of the frame should not remain static throughout the animation</s:String>-->\n    <s:String x:Key=\"S.Command.Progress\">Förloppsindikator eller text med uppspelningsdetaljer</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Markera alla bildrutor</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Navigera till bildruta efter index</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Omvänd markering av bildrutor</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Avmarkera alla bildrutor</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Tona övergången</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Glidövergång</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Rensa alla slutförda kodningar</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Flytta upp</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Flytta ner</s:String>\n    <s:String x:Key=\"S.Command.Add\">Lägg till</s:String>\n    <s:String x:Key=\"S.Command.Open\">Öppna</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Redigera valt objekt</s:String>\n    <s:String x:Key=\"S.Command.Save\">Spara markerade objekt</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Ta bort markerade objekt</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Uppstart</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Inspelare</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Öppnar skärminspelaren, där du enkelt kan börja spela in din skärm.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webbkamera</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Öppnar Webbkamerainspelaren.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Ritbord</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Öppnar ritbordsinspelaren, där du kan börja spela in dina egna ritningar.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Redigerare</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Öppnar redigeringsfönstret, den centrala punkten i denna applikation, där du kan starta och redigera en ny inspelning.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Alternativ</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Ny version tillgänglig</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Laddar ner den senaste versionen av ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Uppdatera</s:String>\n    <!--<s:String x:Key=\"S.Updater.Header\">A new update is available</s:String>-->\n    <s:String x:Key=\"S.Updater.NewRelease\">Ny uppdatering!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Ny version tillgänglig, Version {0}! Tryck här för mer info.</s:String>\n    <!--<s:String x:Key=\"S.Updater.Version\">Version</s:String>-->\n    <s:String x:Key=\"S.Updater.Portable\">Portabel</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Installeraren</s:String>\n    <!--<s:String x:Key=\"S.Updater.Info.WhatsNew\">What's new?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Info.BugFixes\">Bug fixes:</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">A new version is available for you to download.&#x0d;Would you like to open the browser to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.RunAfter\">Execute the app after the update.</s:String>-->\n    <s:String x:Key=\"S.Updater.Download\">Ladda ner</s:String>\n    <!--<s:String x:Key=\"S.Updater.Install\">Install</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Downloading\">Downloading...</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Show\">It was not possible to show the download details.</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Download\">It was not possible to download the update.</s:String>-->\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Alternativ</s:String>\n    <s:String x:Key=\"S.Options.App\">Applikation</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Inspelare</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Redigerare</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Automatiserade uppgifter</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Snabbkommandon</s:String>\n    <s:String x:Key=\"S.Options.Language\">Språk</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Temporära filer</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Extra</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Uppladdnings-&#10;tjänster</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Donera</s:String>\n    <s:String x:Key=\"S.Options.About\">Om</s:String>\n    <s:String x:Key=\"S.Options.Other\">Övrigt</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Snabbkommando saknas till följ markören</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">För att du ska kunna använda följ markören, måste du ange ett snabbkommando för att kunna aktivera/inaktivera funktionen</s:String>\n    <!--<s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">Missing dependencies for screen capture</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">In order to capture the screen with the Desktop Duplication API, you must download the SharpDx libraries.</s:String>-->\n    \n    <!--Options • Application-->\n    <!--<s:String x:Key=\"S.Options.App.Startup\">Startup</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Start&#10;manually</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">The app will only be executed when you manually do so.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Start with&#10;Windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">The app will be executed after Windows startup.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossible to alternate between startup modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Allow only a&#10;single instance</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">You'll be able to run the app once per user and executable,&#10;meaning that different user or executable instances can co-exist.&#10;When trying to execute the app again, the second instance will try to give focus to the first one and end itself.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Allow multiple&#10;instances</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">You'll be able to run the app multiple times at the same time, without restriction.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray\">Start minimized to the system tray.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(System tray icon will be visible while this option is active)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window\">Start with:</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Uppstartsfönster</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Skärminspelning</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Webbkamerainspelning</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Ritbordsinspelning</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Redigeringsfönster</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Window which shows up first when the app starts)</s:String>-->\n    <s:String x:Key=\"S.Options.App.Theme\">Apptema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Färgschema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Mycket ljus</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Ljus</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Mörk</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Mycket mörk</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Anpassad</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Example colors.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray\">System tray icon</s:String>-->\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Visa appen i systemfältet (aviseringsområdet)</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Håll appen öppen även om alla fönster är stängda.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Do nothing</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Open a window</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">No window</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimize/restore all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimize all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restore all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Left click:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Left click (x2):</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Middle click:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Window:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Or else, opens:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General\">General</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Workaround for the 'Not enough quota...' crash.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Fråga mig innan jag stänger appen (via 'Exit'-kommandot)</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Inaktivera maskinvaruacceleration.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(The user interface will be rendered via software mode)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Sök efter översättningsuppdateringar.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Uppdaterade språkfiler kommer att laddas ner och installeras automatiskt.)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Sök efter uppdateringar.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Automatically install updates after closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Force the update to run with elevated privileges.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.PromptToInstall\">Prompt me before the installation starts.</s:String>-->\n\n    <!--Options • Recorder-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface.Old\">Old</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface.New\">New</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency\">Capture frequency</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Mode\">Capture mode</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Use the older capture method, which is slower and may not work capturing games,&#10;but requires no additional plug-ins.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Use the Desktop Duplication API capture method, which is faster and&#10;is able to capture fullscreen games, but requires the SharpDx plug-in and Windows 8 or newer.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.File\">Save to&#10;file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.File.Info\">Each frame captured will be saved directly as an image on disk.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache\">Memory&#10;cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache.Info\">Each frame captured will be stored as a pixel array on memory first (may be compressed before).</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression\">Compression:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Slower but likely more optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Faster but likely less optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">No compression</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(No compression should be performed while capturing frames)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize\">Cache size:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. After reaching this size, the data will be written/flushed to the disk)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Visa muspekaren i inspelningen.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Välj muspekarfärg</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Använd en nerräknare före start.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(i sekunder, väntar med att starta inspelningen)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Konstant bildhastighet.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Konstant fördröjning, förändras inte med inspelningseftersläpning)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">Aktivera osynkroniserad inspelning</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(Hjälper till att minska gränssnittseftersläpningar vid inspelning)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Dölj titelraden (tunt läge).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Aktivera skärmförstorning.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(När du markerar inspelningsområdet aktiveras ett förstorningsglas)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Aktivera följ markören.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Inspelningsområdet förflyttar sig själv efter markörens placering)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Buffertmarginal där inspelningsområdet börjar förflyttas)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Ytterligare buffertmarginal där användargränssnittet börjar bli dold)</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Redigerarbakgrund</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Rutnätsstorlek</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Väldigt liten</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Liten</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Stor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Väldigt stor</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Jag gillar stora fyrkanter</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Jag är blind</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Anpassad</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Höjd</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Bredd</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Tillämpa</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Basfärger</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Jämn färg</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Udda färg</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Förläng titelraden (fönstret chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Justera automatiskt fönsterstorleken baserat på bildrutans storlek, direkt efter laddning.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Justera automatiskt bildrutans zoom baserat på fönsterstorleken, direkt efter laddning.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Fråga mig innan jag raderar bildrutor.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Fråga mig innan jag förkastar ett project.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Fråga mig innan jag stänger redigeraren (om ett projekt är öppet).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Aktivera trippelklicka för att välja text.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Rita konturerna med bildtexter utanför bokstäverna.</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impose a limit to the undo/redo history.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Older actions will be removed when the limit is reached)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximum number of actions stored)</s:String>-->\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Automatiserad uppgift</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Lista över automatiska uppgifter</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Uppgifter</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detaljer</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Välj en uppgift)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Dessa uppgifter utförs i följd från toppen av listan till botten.&#10;Det händer när du först öppnar ett projekt med redigeraren.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Globalt</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Skärminspelare:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Öppnar standardskärminspelaren)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Webbkamerainspelare:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Öppnar webbinspelaren)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Ritbordinspelare:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Öppnar ritbordinspelaren, så att du kan spela in dina teckningar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Redigerare:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Öppnar ett annat redigeringsfönster)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Alternativ:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Öppnar alternativfönstret. Du kan bara ha en öppen åt gången)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Avsluta:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Stänger alla fönster och tar bort appen från systemfältet)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Inspelare</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Start/Paus:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Det startar eller pausar inspelningen. Det används för att ta stillbilder om stillbildsläget är aktiverat)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Stopp:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Stoppar inspelningen och öppnar redigeraren)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Förkasta:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Förkastar den aktiva inspelningen när den är pausad)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Följ markören:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Växlar justering av inspelningsområdet baserat på markörens position)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Inaktivera följ markören</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Inaktiverar tillfälligt justeringen av inspelningsområdet baserat på markörens position av markören, endast modifieringstangenter accepteras)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Klicka för att ställa in tangentbordsfokus, tryck sedan på önskade knappar och modifierare.&#10;Vissa tangentkombinationer är inte tillåtna.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Applikationsspråk</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Detektera automatiskt</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Nuvarande OS-språk (om tillgängligt)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Vill du översätta min applikation?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Tryck här för att läsa riktlinjerna för att översätta och att ladda ner applikationen Translator.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Efteråt,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">tryck här för att importera</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">och testa din översättning.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Skicka den sen till mig på</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">e-postadressen (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">när du är klar med översättningen.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Tryck för att öppna en hemsidan med riktlinjer</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Öppnar importsidan</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Öppnar din e-postapplikation</s:String>\n    \n    <!--Options • Storage-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} free of {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Check\">Check again how much space left there is.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Clear\">Clear the cache folder.&#10;You'll be able to decide if you want to keep recent projects or not.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Lite med plats på den nuvarande hårddisken. Rensa då den temporära mappen eller ändra lagringsplatsen.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible to retrieve the drive details.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.None\">No files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.None\">No folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} folder</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in use</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths\">Paths</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Välj plats för de temporära filerna</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Välj plats för felloggsfiler</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Browse\">Browse the selected folder.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Settings\">Inställningsplats</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Lokalt:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Det finns inte</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Skapa en tom lokal inställningsfil.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Ta bort inställningsfilen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Öppna mappen där inställningsfilen är.&#x0d;Håll ner Ctrl medans du klickar för att öppna filen, om möjligt.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Laddningsmönster för inställningar: Standard ◄ AppData ◄ Local.&#x0d;• Om det inte finns någon inställningsfil i den lokala mappen söker appen i AppData-mappen. Standardmappen används om ingen inställningsfil finns.&#x0d;• Om det inte finns någon lokal inställningsfil sparas alla inställningar i AppData-mappen.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Ta automatiskt bort gamla projekt.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">När du öppnar appen tar en bakgrundsuppgift bort alla stängda projekt som är äldre än den inställda tiden.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(i dagar, kommer alla stängda projekt äldre än detta att tas bort/förkastas efter att appen har öppnats)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Clear Cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Header\">Would you like to clear the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Info\">When you create a recording or open something to edit, a project is created and stored inside the cache folder.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Question\">Would you like to remove these projects from the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Don't remove recent projects.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Only the projects older than {0} days, that are not currently in use, will be removed)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(All the projects, that are not currently in use, will be removed)</s:String>-->\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Läge:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Inaktiverad</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Manuellt</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">System</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">Använder systemets proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Värd:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Användarnamn:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Lösenord:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Get\">Hämta OAuth-token</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">Klistra in auktorisationstoken här</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Auktoriserad</s:String>\n    <s:String x:Key=\"S.Options.Upload.Refresh\">Uppdatera</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">Rensa</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (anonym)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Använd direktlänkar.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Få länkar med Gifv-tillägget i stället för Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Ladda upp gifs till ett valt album.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Fråga mig innan uppladdning</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">Det gick inte att öppna sidan för att få Imgur-auktorisationstoken.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">För att auktorisera den här appen måste du ange en auktorisationstoken.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Imgur-auktorisation slutfört.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Imgur-auktorisationen misslyckades. Försök igen om några sekunder eller skaffa en ny token.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">It was not possible to authorize the app</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">Check if you provided the correct token and if you have an internet connection.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">För att uppdatera auktorisationen för denna app måste du först avsluta auktorisationsprocessen.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Inte auktoriserad.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Auktorisationen upphörde om {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Auktorisationen är giltig till {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Imgur-auktorisationen har tagits bort.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Det gick inte att ladda albumlistan.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat (anonym)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">OAuth-token:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">Välj ett mål</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Välj ett album (valfritt)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Om du vill, kan du välja målalbum:</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Tillgängliga externa verktyg</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Tryck här för att ladda ner&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Laddar ner...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Nerladdad&#10;</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Tryck här för att öppna filens egenskaper.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Appar som distribueras av Microsoft Store kan inte ladda ner andra appar. Du måste ladda ner den manuellt.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Sökväg till FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Ange sökvägen till den körbara FFmpeg-filen</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg executable</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Sökvägen till FFmpeg innehåller ett eller flera ogiltiga tecken. Välj en giltig sökväg för filen.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Sökväg till Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Ange sökvägen till den körbara Gifski-filen</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski library</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Sökvägen till Gifski innehåller ett eller flera ogiltiga tecken. Välj en giltig sökväg för filen.</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation\">SharpDx folder (SharpDX.dll, SharpDX.Direct3D11.dll and SharpDX.DXGI.dll)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">Select the location of the SharpDx libraries</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">The path for the SharpDx libraries contains one or more invalid characters. Please, select a valid folder for those libraries.</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg-licens</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski-licens</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx license</s:String>-->\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Donera</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Donera USD</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Donera Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Öppnar Paypals hemsida. Välj valutan: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Öppnar Paypals hemsida. Välj valutan: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Öppnar Paypals hemsida. Du måste själv välja valutan.</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe\">Subscribe</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donate monthly via Patreon.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Donate monthly via Flattr.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift\">Gift games</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift.Steam\">Gift games via Steam.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift.Gog\">Gift games via GOG.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Kofi\">Pay for a coffee via Ko-fi.</s:String>-->\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Crypto-valutor</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copy the BitcoinCash address.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Support\">Support</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Support.Visit\">If you wish to support the project :)</s:String>-->\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Version:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Upphovsman: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store-version. Vissa funktioner är inaktiverade på grund av tillämpad policy.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Kontakt</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Gå med i servern</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Besök sidan</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Gå med i rummet</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Regelrätt</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Licens:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Denna app är helt gratis)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Källkod:</s:String>\n    <!--<s:String x:Key=\"S.Options.About.Technical.Privacy\">Privacy policy:</s:String>-->\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Ett stort tack till</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Alla de som stöder mig, de som skickat och/eller donerat.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Lokalisering</s:String>\n    <!--<s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Recognized\">Recognized as {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.NotRecognized\">Not recognized</s:String>-->\n    <s:String x:Key=\"S.Localization.Usage.First\">Den nedersta filen är den som används.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Om du vill använda din översatta fil flyttar du den längst ner i listan.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant\">Redundant language code</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown\">Unknown language</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Spela in</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Pausa</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Fortsätt</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Stopp</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Förkasta</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Stillbild</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Höjd</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Bredd</s:String>\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fps\">Maximalt antal bildrutor per sekund</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Fäst mot fönster (Dra och släpp för att fästa)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Förhandsstarta</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (pausad)</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">It was not possible to capture the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">It was not possible to capture the screen. The capture method returned no frame after 5 tries.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">It was not possible to start/pause capturing the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 or newer is required for capturing the screen using the Desktop Duplication API.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">The SharpDx libraries are required in order to capture the screen using the Desktop Duplication API. Go to Options > Extras to download it.</s:String>-->\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Område</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Fönster</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Skärm</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Acceptera</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Försök igen</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Avbryt det markerade (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Klicka och dra för att välja ett område på den här skärmen</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Klicka och dra för att välja ett område.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Klicka här för att välja det här fönstret</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Klicka här för att välja den här skärmen</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Tryck på Esc för att avbryta</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Webbkamerainspelare</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Ingen videoenhet upptäcktes :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Leta efter videoenheter.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Skala: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Ändra skala på videon.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Ritbordsinspelaren</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Automatisk inspelning</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Aktiverar inspelning medans du ritar.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Håll in]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Färgväljaren</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Välj en färg</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Röd</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Grön</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Blå</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Inledande färg</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Nuvarande färg</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Senaste färg</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Dra detta till&#10;provfärgerna</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Tryck och dra för att plocka&#10;färger från din skärm.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Undantagsvisare</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Öppna inre undantag</s:String>\n    <!--<s:String x:Key=\"S.ExceptionViewer.Type\">Exception type</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>-->\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Något gick fel.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Skicka rapport</s:String>\n\n    <!--FFmpeg preset-->\n    <s:String x:Key=\"S.FfmpegPreset.Title\">FFmpeg förinställt</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Name\">Namn</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Parameters\">Parametrar</s:String>\n    <!--<s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">To encode with 2-pass, simply add '-pass 2' to the command.</s:String>-->\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Name\">Du måste ange ett namn på förinställningen.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">Du måste ange några parametrar på förinställningen.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">Det finns redan en förinställning med detta namnet.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Infoga bildrutor</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Båda sidor måste ha samma storlek, detta fönster tillåter dig att ompositionera och ändra storlek på bilden och duken. Klicka för att markera och ändra storlek.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Dukstorlek:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Passa bild till duk</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Ändra duken så den passar båda bilderna inuti (från det övre vänstra hörnet).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Det finns en skillnad mellan bildrutstorlekarna. Du måste lösa detta innan du infogar bildrutorna.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Nya bildrutor</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Nuvarande bildrut(a|or)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Bildstorlek:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Bildposition:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Återställ bildstorlek&#10;och position</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Nya bildrutor vill bli infogade i dn nuvarande&#10;listan av bildrutor på den utvalda platsen:\t</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Före</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Efter</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Bildruta</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Importerar</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Ange fyllningsfärg för duken</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Importera bildrutor från video</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Importer\">Importer:</s:String>-->\n    <s:String x:Key=\"S.ImportVideo.Loading\">Laddar...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Skala:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Storlek:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Höjd:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Bredd:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Bildhastighet:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Start:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Slut:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Markerade:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Bildrutor:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Varaktighet:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Det var inte möjligt att ladda videon.</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Error.Detail\">The previewer could not start. Try with another importer or check if the video is not corrupted.&#x0d;If you are using the MediaPlayer, check if the Windows feature called \"Media Features / Windows Media Player\" is turned on and make sure that you have the necessary video codec.</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Timeout\">Timeout in getting the frame preview.</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Nothing\">No frame selected to be imported.</s:String>-->\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Kodare</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>-->\n    <s:String x:Key=\"S.Encoder.Starting\">Startar</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Klara</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Kopierad till urklippet</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Misslyckades att kopiera</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Kommandot utfört</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Visa resultatet av kommandot</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Misslyckades att utföra kommandot</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Misslyckades att ladda upp</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + tryck för att öppna sidan för att radera bilden (om tillgänglig)</s:String>\n    \n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analysis:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copy:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commands:</s:String>-->\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Fil raderad eller flyttad</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Avbruten</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Fel</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Tryck här för att visa mer detaljer om felet.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Laddar upp</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Kör kommandon</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Bearbetar {0}</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparing for second pass</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Processing.Second\">Processing {0} - 2nd pass</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.CreatingFile\">Creating file</s:String>-->\n    <s:String x:Key=\"S.Encoder.Analyzing\">Analyserar oförndrade bildpunkter</s:String>\n    <!--<s:String x:Key=\"S.Encoder.SavingAnalysis\">Saving analysis result</s:String>-->\n    <s:String x:Key=\"S.Encoder.OpenFile\">Öppna fil</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Utforska mappen</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Ta bort från listan</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Visa detaljer</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>-->\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Kopiera som bild</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Kopiera filnamn</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Kopiera mappsökväg</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Kopiera länk</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Kommandoutmatning</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Kommandoutmatning</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Aviseringar</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Avvisa alla aviseringar</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Redigerare</s:String>\n    <s:String x:Key=\"S.Editor.File\">Fil</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Hem</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Uppspelning</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Redigera</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Bild</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Övergångar</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Statistik</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Alternativ</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Hjälp</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Extra</s:String>\n    <!--<s:String x:Key=\"S.Editor.UpdateAvailable\">A new update is available!</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Click here to read more about it.</s:String>-->\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Totalt antal, urvalsantal, urvalsindex</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Förbereder bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Ogiltig laddning - Du kan inte importera flera filer samtidigt. Försök att välja endast en fil.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Ogiltig laddning - Du kan inte läsa in flera projekt samtidigt. Försök att välja endast ett projekt.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Öppna mediafil (bild eller video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Öppna media- eller projektfil (bild eller video)</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.All\">All supported files</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Apng\">Animated Png</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Wmv\">Windows media video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Zip\">Zip file, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Png\">Png image, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project as Zip</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Psd\">Psd file</s:String>-->\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Gå till \"Fil > Ny\" för att starta en ny inspelning</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Dra och släpp bilder, videor eller projekt för att importera</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Tack för att du använder min app!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Ju lägre bildhastighet, färgantalet eller mängden förändringar mellan bildrutorna, desto mindre blir filstorleken</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Vill du komma i kontakt? Öppna \"Alternativ > Om\" för olika sätt att kontakta mig</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Har du problem? Kontakta mig då via feedback-verktyget</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Vill du prova den nya inspelaren? Gå till \"Alternativ > Inspelare\" för att aktivera det</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Inspelning</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Webbkamera-&#10;inspelning</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Ritbords-&#10;inspelning</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Blankt&#10;projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Ny</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Inspelning</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Webbkamera-&#10;inspelning</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Ritbords-&#10;inspelning</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Media</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Infoga</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Spara som</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Ladda</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Senaste projekt</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Spara projekt&#10;som</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Förkasta&#10;projekt</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Åtgärder</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Ångra</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Gör om</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Återställ</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Urklipp</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Visa urklippet</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Klistra in</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Klipp ut</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopiera</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Zoom</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Anpassa till&#10;innehållet</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Anpassa bilden</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Markera</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Markera&#10;allt</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Gå till</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Omvänd</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Avmarkera</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Uppspelning</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Första</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Föregående</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Spela upp</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Pausa</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Nästa</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Sista</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Uppspelningsalternativ</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Spela upp i slinga.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Används endast under uppspelning.&#10;Om du vill ändra slinginställningarna för att exportera Gifs och Apngs,&#10;kommer de att finnas tillgängliga i panelen 'Spara som' för vissa kodare.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Radera</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Ta bort dubbletter</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Minska antal bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Radera alla tidigare</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Radera alla nästa</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Flytta om</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Omvänd</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Flytta&#10;vänster</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Flytta&#10;höger</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Fördröjning (längd)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Skriv över</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Öka eller minska</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Skala</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Storlek och rotation</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Ändra storlek</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Beskär</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Vänd/Rotera</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Text</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Rubrik</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Fritext</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Titelbildruta</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Tangent-&#10;nertryckningar</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Överlägg</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Frihands-&#10;rita</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Former</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Musklick</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Vattenmärke</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagrafi</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Kant</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Skugga</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Framsteg</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Mosaik</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Stilar</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Toning</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Glidning</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Allmänt</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Antal bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Total varaktighet</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Bildrutsstorlek</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Genomsnittlig varaktighet (fördröjning)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Aktuell tid</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Den aktuella tiden (kumulativ) baserat på den aktuella bildrutan som visas.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Bildruts-DPI och skala</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Markerad bildruta</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Beskäråtgärd</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Du kan inte beskära alla ramar.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Inspelningen behöver åtminstonde en bildruta.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Ta bort alla</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Är det säkert att du vill ta bort alla bildrutor?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Denna åtgärd förkastar det nuvarande öppna projektet och kan inte ångras. Vill du fortsätta?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Förkasta projektet</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Är det säkert att du vill förkasta projektet?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Du försöker att ta bort alla bildrutor.&#10;Du kan inte ångra den här åtgärden.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Vill du förkasta det föregående projektet?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Om du väljer att inte göra så, kommer det föregående projektet att finnas tillgängligt i senaste projekten.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Radera bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Är det säkert att du vill radera?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Denna åtgärd kommer att radera {0} bildrut(a|or).&#10;Du har mölighet att ångra detta senare.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Avslutar redigeraren</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Är det säkert att du vill avsluta?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Nuvarande projekt som du arbetar med kan öppnas igen från 'Senaste projekt'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Nuvarande projekt som du arbetar med kan öppnas igen från 'Senaste projekt', men glöm inte bort att efter några dagar, kommer det att raderas automatiskt.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Ogiltigt dra och släpp</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Du kan inte importera flera filer samtidigt</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Prova att välja endast en fil.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Det gick inte att ladda filen</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Filen gick inte att ladda därför att det var ett ogiltigt filformat.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Du kan inte importera flera projekt samtidigt</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Prova att välja endast ett projekt.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Det finns ingen text att tillämpa.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Du måste välja åtminstone en bildruta att tillämpa bildtexten till.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Du måste välja åtminstone en bildruta att tillämpa texten till.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Du måste välja åtminstone en bildruta för att tillämpa titelbildrutan bredvid.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Du måste ange en gräns för ramtjockleken, större än noll på åtminstone en sida.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Du måste välja åtminstone en bildruta att tillämpa bildrutan till</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Genomskinligheten måste vara större än noll för att göra någon skillnad i bildrutan.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">När du använder skuggdjupet och oskärpradien som noll, kommer det inte att göra någon skillnad eftersom det kommer att döljas bakom bildrutan.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Du måste välja åtminstone en bildpunkt att tillämpa cinemagrafin till. Markera bildpunkterna genom att rita ovanpå dem.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Toningsövergång</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Du måste välja åtminstone en bildruta att tillämpa toningsövergången till.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">En helt transparent färg kommer inte att skapa någon effekt på denna övergång.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Bildrutsväxlingen</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Du måste välja åtminstone en bildruta att tillämpa bildrutsväxlingen till.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Laddar bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Det gick inte att öppna projektet</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Det var inte möjligt att öppna bildrutorna eftersom de var alla trasiga eller så var inte bilderna där de förväntades att vara.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Där var bildrutor som inte gick att ladda</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Det gick inte att ladda bildrutorna därför de hittades inte eller så var de trasiga.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Du måste välja minst en bildruta att ansätta överliggande delen på.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg är inte tillgänglig, Lägg till det i sökvägens miljövariabel eller tryck här för att öppna Alternativ > Extra för att ange platsen.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski är inte tillgänglig, Lägg till det i sökvägens miljövariabel eller tryck här för att öppna Alternativ > Extra för att ange platsen.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Det finns inte tillräckligt med utrymme på den disken som denna appen lagrar sin cache ({0}% kvar). Tryck här för att öppna Alternativ > Temporära filer för att frigöra utrymme.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Warning.DifferentDpi\">You tried to import multiple images with different DPIs, which is not supported. Some of them got imported, the others need to be imported separately.</s:String>-->\n    \n    <!--Editor • Status-->\n    <!--<s:String x:Key=\"S.Editor.RetrievingFromCache\">Retrieving frames from the cache</s:String>-->\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Uppdaterar bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Förbereder importering</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Importerar bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Analysera dubbletter</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Justerar fördröjningen</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Förkastar dubletter</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Förkasta bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Förkasta mappar</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Ändra bildstorlek</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Beskär bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Tillämpar överlägg till bildrutorna</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Skapar titelbildrutor</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Tillämpar Flip/Rotation till bildrutor</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Ändra fördröjningen</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Tillämpar övergångseffekt</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Förbereder att spara</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Bildruta:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Öppna bild</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Utforska mapp</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">Exportera bild</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Gå till bildruta</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Gå till bildruta (0 till {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Spara som</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Ta bort markerade bildrutor</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Ny skärminspelning</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Ny webbkamerainspelning</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Ny ritbordinspelning</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Nytt projekt</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Nytt från media eller projekt</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Ny inspelning skapades</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Ny webbkamerainspelning skapades</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Ny ritbordinspelning skapades</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Nytt projekt skapades</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Ångra</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Återställ</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Göra om</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} bildrutor beskurna</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} bildrutor kopierade</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} bildrutor klistrades in</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Zoom satt till {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Alla bildrutor har markerats</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Bildruta #{0} markerad</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Välj invers</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Alla bildrutor har avmarkerats</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} bildrutor raderade</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Bildrutor omvända</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yoyo-effekt applicerad</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Bildrutor flyttade till vänster</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Bildrutor flyttade till höger</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Bildrutor storleksändrade</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Bildrutor beskurna</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Bildrutor vända/roterade</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Vändåtgärden tillämpas på de markerade bildrutorna och roteringen tillämpas på alla bildrutor</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Denna åtgärd tillämpas på alla bildrutor</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Denna åtgärd tillämpas på de valda bildrutorna</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Denna åtgärd tillämpas på alla eller på de valda bildrutorna, beroende på dina inställningar</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagrafin tillämpas på alla bildrutor som bygger på den första bildrutan</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Överlägg applicerades</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Titelram skapad</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Titelramen kommer att införas före den valda bildrutan</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Varaktighet (fördröjning) ändras</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Överföring infogad</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Bildhastighet reducerat</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Dubblettter har tagits bort</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Dölj</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Tillämpa</s:String>\n    <s:String x:Key=\"S.Action.Open\">Öppna</s:String>\n    <s:String x:Key=\"S.Action.Save\">Spara</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Avbryt</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Senaste projekten</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Letar efter senaste projekten...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Skapad datum</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Bildruteantal</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Inget projekt är markerat. Markera ett projekt i listan du vill ladda.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Detta projektet var redan öppnat av en annan redigerare. Ett projekt kan bara öppnas i en redigerare åt gången.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Urklippsposter</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Urklippspost:</s:String>\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>-->\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>-->\n    <s:String x:Key=\"S.Clipboard.Explore\">Utforskarinnehåll</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Ta bort</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Klistra in beteendet</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Före markerad bildruta</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Efter markerad bildruta</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">Nuvarande egenskaper</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">Nya egenskaper</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Bibehåll bildförhållande.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Du måste välja ett annat värde för att tillämpa storleksändringen.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Punkter</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Överst:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Vänster:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Nedre:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Höger:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Beskärningsvalet måste vara mindre än den aktuella bildstorleken.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Beskärningsvalet måste vara större än 10x10 bildrutor.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Vänd vågrätt</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Vänd lodrätt</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Rotera vänster 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Totera höger 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Minska bildhastighet</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Faktor:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Ta bort räknare:</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Delay\">Delay adjustment:</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Don't adjust</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll\">Reduce the framerate of the entire project.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>-->\n    <s:String x:Key=\"S.Reduce.Info\">Kommer att ta bort {0} bildrutr efter varje {1} bildruta, utan att räkna de bortagna.</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>-->\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Ta bort dubletter</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Likhet (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Borttagning av bildrutor:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Ta bort den första bildrutan</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Ta bort den sista bildrutan</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Fördröjningsjustering:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Justera inte</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Använd genomsnittet</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Använd summan</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Den här åtgärden analyserar varje bildruta (pixel för pixel) och tar bort de som är minst {0}% lika med sin omedelbara granne.&#10;Du kan välja om du vill justera fördröjningen (utställningens varaktighet) för bildrutorna.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Text</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Typsnitt</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Typsnitt:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Stil:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Vikt:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Storlek:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Färg:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Bakgrundsfärg:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Översikt</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Tjocklek:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Layout</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Vertikal:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Horisontell:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Tangenttryckningar</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Tangenter</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Avskiljare:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Redigera dina tangentkombinationer</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ignorera tangenterna Ctrl, Alt, Skift och Windows-tangenten medan de inte används som modifierare.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ensamma tangenttryckningar kommer att ignoreras, men inte \"Kontroll + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Förläng utställning av tangenttryckningarna.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Starta utställningen av tangentkombinationer tidigare.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Med (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Det finns inga tangenttryckningar på din inspelning.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Tangenttrycksredigerare</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Bildrutenummer</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Upptäckta tangentkombinationer</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Ta bort tangentkombinationer</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Lägg till en tangentkombinationer:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Gemena bokstäver.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Det låter dig infoga gemena bokstäver.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Läge</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Penna</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Suddgummi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Markera</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Strecksuddgummi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Bredd:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Höjd:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Tips:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Rektangel</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Ellips</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Andra:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Överstrykning.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Kurvanpassning</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Det finns ingen teckning som skall tillämpas på de bildrutor du valt.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Du måste välja åtminstone en bildruta för att tillämpa den fria teckning till.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Infoga</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Former</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Radie:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Streck:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>-->\n    <s:String x:Key=\"S.Shapes.Fill\">Fyll</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Musklick</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Det finns inga upptäckta musklick i ditt projekt.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Bild</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Fil:</s:String>\n    <!--<s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>-->\n    <s:String x:Key=\"S.Watermark.Opacity\">Genomskinlighet:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Välj en bild</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Du måste välja en bild som gäller för de(n) valda bildrut(orna|an).</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Du måste välja åtminstone en bildruta för att tillämpa en vattenstämpel till.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Utseende</s:String>\n    <s:String x:Key=\"S.Border.Info\">Använd negativa värden för att gränsen ska expandera bilden. När du gör det kommer gränsen att tillämpas på alla bildrutorna. Om inget negativt värde används kommer gränsen att tillämpas endast på de valda bildrutorna.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Skuggfärg:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Bakgrundsfärg:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Riktning:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Oskärperadie:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Djup:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Förvrängningsalternativ</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Bildpunktsstorlek:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Beräkna medelfärgen för varje pixelat block.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Använd markeringsverktyget för att välja rektangeln som ska pixlas.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Du valde ingenting. Använd markeringsverktyget för att välja rektangeln som ska pixeleras.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Typ</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Rad</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Text</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Precision:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Minuter</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekunder</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisekunder</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Procent</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Bildrutenummer</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Faktisk datum/tid</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Anpassad</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Visa total.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Format:</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Date\">Du kan använda datum- och tidsformatet från .Net Framework.&#10;Specifikationen finns i dessa två länkar nedan.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standardformat</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Anpassat format</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Räkna från:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Börja räkna bildrutsnummer från det markerade numret.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Orientering:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Fördröj uppdatering</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Fördröjningsläge:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Åsidosätt (i ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Öka eller minska (i ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Skala (i %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Nytt värde</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Minst 10ms per bildruta.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Minska/öka värde</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Skalvärde</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Detta nya värde kommer att ersätta varaktighet (fördröjning) av alla valda bildrutor. Värdet kan vara från 10ms till 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Detta värde kommer att minska/öka varaktigheten (fördröjning) av varje markerad bildruta.&#10;Du kan minska/öka genom att välja ett värde mellan -10000ms och 10000ms, men den slutliga längden på varje bildruta kommer att begränsas till mellan 10ms och 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Skalvaraktighet (fördröjning) för varje vald bildruta med procentvärdet.&#x0d;Du kan skala varje bildrutas längd genom att välja ett värde mellan 1% och 1000%, men den slutliga varaktigheten för varje bildruta kommer att begränsas till mellan 10ms och 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Använd pennan för att välja de pixlar som inte bör förbli statisk (det skulle förändras mellan ramar), genom att måla på dem.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Övergångslängd</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Övergångsfördröjning</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Tona till...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Nästa bildruta</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">En färg</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Färg</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Övergången kommer att tillämpas mellan den markerade bildrutan och nästa.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Filtyp</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">Bilder (bildrutor)</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">Projekt</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">Video</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kodare</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Encoder.System\">System</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">Använder en standardpalett.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">Kodare gjord av ScreenToGif-utvecklaren.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif-alternativ</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Kvalitet:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Färger:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Maximala antalet färger (för varje bildruta).</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Slinga:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Slinga Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Slinga för alltid.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Antal slingor</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Detektera oförändrade pixlar.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng-alternativ</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Slinga Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Upptäck oförändrade pixlar.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Måla alla oförändrade pixlar med en transparent färg.</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">Videoalternativ</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">Fps:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">Vänd videon (vertikalt).</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">Bildalternativ</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Packa bilderna med ZIP.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions\">PSD-alternativ</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Komprimera bilden.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Komprimera bilden med RLE-algoritmen.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Spara tidslinjedata.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Exporterar tiderna av bildrutorna i stället för bara bildrutorna.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ProjectOptions\">Project options</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">Extra:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets\">Förinställningar:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Standard</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Lägg till</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Spara</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Redigera</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Ta bort</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">Ta bort förinställning</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">Vill du ta bort förinställningen?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">Du kan inte ångra den här åtgärden, men du kan lägga till förinställningen igen senare.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Återställ</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">Återställ förinställningen</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">Vill du återställa förinställningen till dess standardparametrar?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">Du kan inte ångra den här åtgärden, men du kan redigera förinställningen igen senare.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">Ingen förinställning vald för FFmpeg, välj en.</s:String>\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Alternativ för spara</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Spara filen till den mapp du väljer.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">Skriv över (om den redan finns).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Spara också som projekt (samma mapp, samma filnamn).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Ladda upp filen.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">Uppladdningsmål</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Kopiera till urklippet.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Fil</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Kopierar utdatafilen till urklippet.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Mappsökväg</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Kopierar mappsökvägen av utdatafilen till urklippet.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Filsökväg</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Kopierar sökvägen av utdatafilen till urklippet.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Länk</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Kopierar länken som genereras av uppladdningstjänsten till urklippet.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Kör postkodningskommandon.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Skriv kommandon som ska köras efter kodningen.&#x0d;Om du vill köra flera kommandon skriver du var och en på en separat rad.&#x0d;Makron:&#x0d;{p} = Utdatafilens sökväg.&#x0d;{f} = Utdatamappens sökväg.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">Fil</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Målmapp.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Välj plats.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Filformat</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Namn på filen. Infoga datum-/tidformat mellan '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animation</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Öka filnumret</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Minska filnumret</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">En fil med samma namn finns redan.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Spara till urklippet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Du måste välja var du vill spara filen (i en mapp, till urklippet eller ladda upp någon annanstans).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">För att köra ett postkodningskommando måste du skriva något i kommandotextfältet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Ingen uppladdningstjänst vald. Du måste välja ett mål.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Du kan inte ladda upp till den valda tjänsten eftersom den inte var auktoriserad. Gå till Alternativ > Uppladdningstjänster för att godkänna denna appen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Du kan inte välja alternativet att kopiera länken eftersom du inte ställt in att ladda upp filen.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Du måste välja en destinations mapp.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Destinations filen finns inte.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Utdatamappnamnet innehåller ett eller flera ogiltiga tecken. Välj ett giltigt mappnamn.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Du måste välja ett filnamn.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Utdatafilnamnet innehåller ett eller flera ogiltiga tecken. Välj ett giltigt filnamn.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Filnamnet används redan. Sätt till att skriva över eller välja ett annat filnamn.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Åtgärden avbröts.</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Exportera bildrutor</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Är det säkert att du vill exportera bildrutorna?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Den här åtgärden exporterar {0} bildrutor direkt till den valda mappen.</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Skicka</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Förhandsvisning</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Skicka feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Titel</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Meddelande</s:String>\n    <!--<s:String x:Key=\"S.Feedback.Message.Info\">If you are experiencing a bug, don't forget to explain to me how you got it, step by step.</s:String>-->\n    <s:String x:Key=\"S.Feedback.Type\">Typ av feedback</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Förslag</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Problem/Fel</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Din e-postadress</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Du måste age en titel för feedbacken</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Du måste skriva ett meddelande i feedbacken.</s:String>\n    <!--<s:String x:Key=\"S.Feedback.Warning.Email\">You need to type your email, to receive a reply from the developer.</s:String>-->\n    <s:String x:Key=\"S.Feedback.Sending\">Skickar i bakgrunden... Detta fönster kommer stängas inom kort.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Bifogade filer (valbart, 20MB maximalt)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Bifoga filer</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Ta bort alla bifogade filer</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Jag förstår Engelska</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">och Portugisiska (Brasilianska och Europeiska).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Detta är vad du skickar, plus alla bifogade filer.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Felsök</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Saknas det något fönster?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Om något av fönstren saknas (är utanför skärmen),&#10;använd alternativen nedan för att återställa dess nuvarande position och startposition.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Här är var varje fönster för närvarande finns:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Här är var varje fönster kommer att öppnas nästa gång:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Flytta alla fönster till huvudskärmen.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Återställ startpositionen för alla fönster.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Kursivt</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Sned</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Svart</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Fetstil</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Demi fetstil</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Extra svart</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Extra fetstil</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Extra lätt</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Tung</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Lätt</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Medium</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Vanlig</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Semi fetstil</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Tunn</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra svart</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra fetstil</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra lätt</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Överst</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Centrera</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Botten</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Sträcka</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Vänster</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Centrera</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Höger</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Horisontell</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Vertikal</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.sw.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Sawa</s:String>\n    <s:String x:Key=\"S.Back\">Nyuma</s:String>\n    <s:String x:Key=\"S.Cancel\">Ghairi</s:String>\n    <s:String x:Key=\"S.Yes\">Ndio</s:String>\n    <s:String x:Key=\"S.No\">Hapana</s:String>\n    <s:String x:Key=\"S.Add\">Ongeza</s:String>\n    <s:String x:Key=\"S.Edit\">Hariri</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Kichwa</s:String>\n    <s:String x:Key=\"S.Description\">Ufafanuzi</s:String>\n    <s:String x:Key=\"S.SelectColor\">Bofya hapa kuchagua rangi.</s:String>\n    <s:String x:Key=\"S.Suppress\">Kandamiza</s:String>\n    <s:String x:Key=\"S.Preview\">Uhakiki</s:String>\n    <s:String x:Key=\"S.Size\">Ukubwa</s:String>\n    <s:String x:Key=\"S.Background\">Mandarinyuma</s:String>\n    <s:String x:Key=\"S.Color\">Rangi</s:String>\n    <s:String x:Key=\"S.Delay\">Ucheleweshaji</s:String>\n    <s:String x:Key=\"S.DelayMs\">Ucheleweshaji</s:String>\n    <s:String x:Key=\"S.ValueMs\">Dhamani -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Dhamani ya kipimo:</s:String>\n    <s:String x:Key=\"S.Margin\">Pambizo:</s:String>\n    <s:String x:Key=\"S.Padding\">Pambizo</s:String>\n    <s:String x:Key=\"S.MinHeight\">Kipeochini cha urefu:</s:String>\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">Woi! App imecrash, manze :(</s:String>\n    <s:String x:Key=\"S.Required\">Uga unaohitajika</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Kitegemezi kinakosekana</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 haipo</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Ili kutumia hii app ipasavyo, unahitaji kupakua tokeo sahihi ya .Net Framework.&#10;Je, ungependa kufungua ukurasa wa tovuti kuipakua?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Tukio moja tu inakubalika</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">App tayari inaendelea</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif tayari inafanya kazi, lakini inaonekana hakuna kidirisha kilicho wazi. Tazama chano chako. Ni lazima kuwe na ikoni ya ScreenToGif hapo.</s:String>\n    <s:String x:Key=\"S.Exiting.Title\">Inaondoka kutoka ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Una uhakika unataka kuondoka?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Madirisha yote yatafungwa na ikoni ya chano itatolewa.</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Rekodi mpya ya skrini</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Rekodi mpya ya kamera-wavuti</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Rekodi mpya ya bodi</s:String>\n    <s:String x:Key=\"S.Exit\">Ondoka</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Rekodi mpya ya skrini</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Rekodi mpya ya kamera-wavuti</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Rekodi mpya ya bodi</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Uhuishaji upya</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Ingiza rekodi ya skrini</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Ingiza rekodi ya kamera-tovuti</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Ingiza kirekodi cha bodi</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Ingiza kutoka midia (picha na video)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Hifadhi kama</s:String>\n    <s:String x:Key=\"S.Command.Load\">Paikia faili (picha, video na miradi)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Pakia miradi ya hivi majuzi</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Tupa mradi wa sasa</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Batilisha kuchelewa kwa fremu</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Ongeza/Punguza ucheleweshaji wa fremu</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Pimisha ucheleweshaji wa fremu</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Weka ukuzaji uwe 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Rekebisha dirisha hadi ukubwa wa fremu</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Tosheleza picha kwenye ukubwa wa kidirisha upatikanao</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Teua fremu ya kwanza</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Teua fremu ya awali</s:String>\n    <s:String x:Key=\"S.Command.Play\">Chezesha uhuishaji</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Teua fremu ifuatayo</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Teua fremu ya mwisho</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Tendua</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Rudia</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Tendua mabadiliko yote ya mradi</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Nakili fremu chaguzi na uziweke kwenye ubao-nakili</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Kata fremu teuzi na uzinakili kwenye ubao-nakili</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Bandika fremu kutoka ubao-nakili</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Futa fremu zote teule</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Futa fremu zote za awali</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Futa fremu zote zifuatazo</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Ondoa virudufu</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Punguza idadi ya fremu</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Pindua uhuishaji</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Hufanya uhuishaji uende mbele na nyuma</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Sogeza fremu teuzi kwenda kushoto</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Sogeza fremu teuzi kwenda kulia</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Badilisha ukubwa wa fremu zote</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Puna fremu zote</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Geuza au zungusha fremu</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Ongeza manukuu</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Ongeza matini yanayoelea</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Ongeza fremu iliyo na kichwa</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Huingiza vitufe vilivyobonyezwa wakati wa kurekodi</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Chora umbizo huru</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Ongeza maumbo</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Mbofyo wa kipanya:</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Teua picha na ongeza kama taswira fifi</s:String>\n    <s:String x:Key=\"S.Command.Border\">Ongeza boda</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Ongeza kivuli kunjuzi</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Ficha sehemu nyeti za fremu zako</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Tumia zana za kuchora kuteua pande zipi za fremu zitabaki tuli katika uhuishaji wote</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Mwambaa wa maendeleo au matini yenye sifa za uchezaji</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Teua fremu zote</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Abiri hadi fremu kutumia kielezo</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Geuza uteuzi wa fremu</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Tendua fremu zote</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Mpitio wa kufifia</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Mpitio wa kuteleza</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Futa simbizo zote</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Sogeza juu</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Sogeza chini</s:String>\n    <s:String x:Key=\"S.Command.Add\">Ongeza</s:String>\n    <s:String x:Key=\"S.Command.Open\">Fungua</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Hariri kipengee teule</s:String>\n    <s:String x:Key=\"S.Command.Save\">Hifadhi kipengee teuzi</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Ondoa kipengee teuzi</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Mwanzo</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Kirekodi</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Inafungua kirekodi skrini, unapoweza anza kurekodi skrini yako</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Kamera-tovuti</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Inafungua kirekodi kamera-tovuti.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Bao</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Inafungua kirekodi cha bodi, unapoweza anza kurekodi michoro yako.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Kihariri</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Inafungua kidirisha cha kihariri, sehemu kati ya app hii, unapoweza anza na kuhariri rekodi mpya.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Chaguo</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Toleo jipya linapatikana</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Inapakua toleo la mwisho la ScreenToGif</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Kisasishaji</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Sasisha mpya inapatikana</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Toleo jipya!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Toleo jipya linapatikana, Toleo {0}!&#x0d;Bofya hapa kupata maelezo zaidi.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Toleo</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Inayobebeka</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Kisakinishaji</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Nini kipya?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Virekebisho vya hitilafu</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Kuna toleo jipya ulipakue.&#x0d;Ungependa kufungua kivinjari ili uipakue?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Tekeleza app baada ya usasisho.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Pakua</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Sakinisha</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Inapakua...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Haikuwezekana kuonyesha taarifa za upakuaji.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Upakuaji wa kisasisho haukuwezekana.</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Chaguo</s:String>\n    <s:String x:Key=\"S.Options.App\">Programu-tumizi</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Kirekodi</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Kihariri</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Kazi</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Njiamikato</s:String>\n    <s:String x:Key=\"S.Options.Language\">Lugha</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Hifadhio</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Ziada</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Wingu</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Toa mchango</s:String>\n    <s:String x:Key=\"S.Options.About\">Kuhusu</s:String>\n    <s:String x:Key=\"S.Options.Other\">Nyingine</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Kibonye njiamkato cha kufuata kielekezi kinakosekana </s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">In utumie ufuataji wa kielekezi cha kipanya, unapaswa kuweka kitufe cha njiamkato kuitogoa inapohitajika.</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">Vitegemezi vya kunasa skrini vinakosekana</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">Ili kunasa skrini na API ya Desktop Duplication, unapaswa kupakua maktaba ya SharpDx.</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Uwashaji</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Anza&#10;kikuli</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">App itatekelezwa ukiifanya kikuli.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Anza na&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">App itatekelezwa baada ya Windows kuanza.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Haiwezi kubadilisha mitindo ya uanzaji.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Ruhusu tukio&#10;moja tu</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Utaweza kuedesha pp mara moja kwa kila mtumiaji na kitekelezaji,&#10;kumaanisha kwamba mtumiaji mwingine au vitekelezaji vingine vinawezaendelea sawia&#10;Utakapojaribu kutekeleza app tena, tukio la pili litajaribu kupea lengo kwa ile ya kwana na kujifunga.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Ruhusu tukio&#10;anuwai</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Utaweza kuendesha app mara nyingi wakati huo huo, bila vidhibiti.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Anza ikiwa imepunguzwa hadi chano</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Chano cha mfumo kitaonekana wakati chaguo hili ni amilifu)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Anza na:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Kidirisha cha uwashaji</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Kirekodi skrini</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Kirekodi kamera-tovuti</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Kirekodi bao</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Kidirisha cha kihariri</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Kidirisha ambayo huonekana kwanza app ikianza)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Mandhari</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Mpango wa rangi:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Mwangaza nyingi</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Nyepesi</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Wastani</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Kolevu</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Giza nyingi</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Maalum</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Example colors.</s:String>-->\n    <s:String x:Key=\"S.Options.App.Tray\">Ikoni ya chano mfumo</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Onyesha app kwenye chano (eneo la arifa)</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Wacha app wazi hata kama vidirisha vyote vimefungwa.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Usifanye chochote</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Fungua kidirisha</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Hakuna kidirisha</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Punguza/rudisha dirisha zote</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Punguza dirisha zote</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Rejesha vidirisha vyote</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Bonyeza kushoto:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Bonyeza kushoto (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Bofya kati:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Dirisha:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">La sivyo, inafungua:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Jumla</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Suluhu ya kuacha kufanya ya \"Quota haitoshi\"</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Ya majaribio)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Niulize kabla ya kufunga app (kupitia amrisho la 'Ondoka')</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Lemaza mchapuko wa maunzi</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Kiolesura cha mtumiaji kitatungwa kupitia mtindo wa software)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Tafuta visasisho vya lugha.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Tafsiri zilizosasishwa zitapakuliwa na kusakinishwa kiotomatiki)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Tafuta visasisho inapoanza.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Sakinisha visasisho kiotomatiki baada ya kufunga app.</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Lazimisha sasisho itekelezwe kutumia ongezeko la upendeleo</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Nistue kabla usakinishaji uanze.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Kiolesura</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Mzee</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Mpya</s:String>\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency\">Capture frequency</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>-->\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Mtindo wa kunasa</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Tumia mbinu zee ya unasaji, ambayo ni polepole zaidi na inawezakosa kufanya kazi kunasa michezo,&#10;lakini haihitaji programu-jalizi anuwai.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Tumia mbinu ya unasaji ya API ya Desktop Duplication, ambayo ni haraka zaidi na&#10;inaweza kunasa michezo ya skrini nzima, lakini inahitaji programu-tumizi ya SharpDx na Windos 8 au mpya.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Hifadhi hadi&#10;faili</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Kila fremu itanaswa na kuhifadhiwa ana kwa ana kama picha kwenye diski.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Kumbukumbu&#10;kashe</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Kila fremu itanaswa na kuhifadhiwa kama mkusanyiko wa pikseli kwenye kumbukumbu kwanza (huenda ikafinyazwa kabla).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Ufinyazi:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Ubora wa kabisa</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Polepole</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Haraka zaidi</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Haraka zaidi lakini ufinyazi hafifu)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Hakuna ufinyazi</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Ufinyazi haufai kutekelezwa wakati wa kunasa fremu)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Ukubwa wa kache:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(katika MB. Baada ya kufika ukubwa huu, data itaandikwa kwa diski)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Onyesha kielekezi cha kipanya katika rekodi.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Teua rangi ya kielekezi</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Tumia </s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Kwa sekunde, hungoja kabla ya kuanza)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Kasi funge ya fremu </s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Mchelewesho usiobadilika na mchelewesho wa kurekodi)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">Wezesha kurekodi solandanifu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(Husaidi kupunguza ucheleweshaji wa kiolesura wakati wa kurekodi)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Ficha upaokichwa (mtindo konde)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Wezesha kikuzi skrini.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Huwezesha kikuzi wakati wa kuteua eneo la kurekodi)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Wezesha kufuata kielekezi.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Eneo la kurekodi itajibadilishia nafasi kulingana na eneo ya kielekezi)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Pambizo la bafa katika pikseli, ambapo rekodi huanza kubadilishwa nafasi)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Pambizo la ziada bafa katika pikseli, ambapo rekodi huanza kubadilishwa nafasi)</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Mandharinyuma ya uhakiki</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Ukubwa wa jedwali</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Ndogo sana</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Ndogo</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Wastani</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Kubwa</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Kubwa sana</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Ninapenda miraba mikubwa</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Siwezi kuona</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Maalum</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Urefu</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Upana</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Tekeleza</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Rangi msingi</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Rangi shufwa</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Rangi witiri</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Refusha upaokichwa (dirisha kromu)</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Rekebisha kiotomatiki ukubwa wa fremu kulingana na ukubwa wa dirisha, punde tu baada ya kupakia.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Rekebisha kiotomatiki ukuzaji wa fremu kulingana na ukubwa wa dirisha, punde tu baada ya kupakia.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Niulize kabla ya kufuta fremu.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Niulize kabla ya kutupa mradi.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Niulize kabla ya kufunga kihariri (kama kuna mradi umefunguliwa).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Wezesha bofya-tatu kuchagua matini.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Chora kiolezi cha manukuu nje ya matini.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Weka kikomo kwenye historia ya tendua/rudia.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Matendo mazee yatatolewa kipimo kikifikiwa)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Kipeojuu cha idadi ya matendo inayohifadhiwa)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Kazi ya kiotomatiki</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Orodha ya tekelezi za kiotomatiki</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Kazi</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Maelezo</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Teua kazi)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Kazi hizi zinatekelezwa zikifuatana kutoka juu hadi chini ya orodha.&#10;Inafanyika unapofungua mradi kwa mara ya kwanza ukitumia kihariri.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Ulimwengu</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Kirekodi skrini:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Hufungua kirekodi chaguo-msingi)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Kirekodi kamera-tovuti</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Hufungua kirekodi kamera-tovuti)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Kirekodi bao:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Hufungua kirekodi ubao, ili uweze kurekodi michoro yako)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Kihariri:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Hufungua kidirisha kihakiki kingine)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Chaguo:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Hufungua kidirisha cha chaguo.  Waweza fungua moja tu kwa wakati)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Ondoka:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Hufunga vidirisha vyote na kuondoa app kutoka chano cha mfumo)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Virekodi</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Anza/Sitisha:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Huanza au kusitisha kurekodi. Hutumika kunasa skrini iwapo mtindo wa kunasa umewashwa)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Simamisha:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Husitisha rekodi na kufungua kihariri)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Tupa:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Hutupa kirekodi kinachoendelea, wakati kimesitishwa)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Kielekezi inafuatwa:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Hutogoa urekebisho wa eneo la kurekodi kulingana na eneo la kielekezi)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Lemaza zifuatazo:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Kwa muda mfupi, hulemaza urekebishaji wa eneo la kurekodi kulingana na pahali kielekezo ilipo, vibonye rekebishi tu vinakubalika)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Bofya kuweka mlengo wa baobonye, kisha bonyeza vitufe tamanishi na virekebishi.&#10;Vitufe ambatani fulani havikubaliki.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Lugha ya app</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Gundua-kioto</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Lugha ya OS iliyopo (kama ipo)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Ungependa kutafsiri app yangu?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Bofya hapa kusoma mielekezo ya utafsiri na kupakua app ya kutafsiri.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Baadae</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">bofya hapa kuleta</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">na pima tafsiri yako.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Nitumie kupitia</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">barua pepe (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">utakapomaliza kutafsiri</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Bofya kufungua ukurasa wa wavuti ulio na mielekezo.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Inafungua ukurasa wa uletezi</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Inafungua app yako ya barua pepe</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Hali</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Kihifadhi:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} huru kutoka {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Angalia tena ni nafasi gani ipo.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Futa folda ya kashe.&#10;Utaweza kuamua iwapo unataka kuhifadhi miradi ya hivi majuzi au la.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Kiendeshi kuu kilichochaguliwa kina nafasi kidogo. Tafadhali futa folda ya kashe au badilisha eneo.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Haiwezi kuepue taarifa za kiendeshi.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Hakuna faili</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">faili }0:##,##0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">faili {0:##,##0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Hakuna folda</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">folda {0:##,##0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">folda {0:##,##0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} inatumika</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Vijia</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Kashe:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Chagua eneo la kache (faili za muda).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Batli</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Chagua eneo la faili batli ya matatizo.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Vinjari folda iliyochaguliwa</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Eneo la mipangilio</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Ya ndani:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Haipatikani</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Tengeneza faili tupu la mipangilio ya ndani</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Ondoa faili ya mipangilio</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Fungua folda ambapo faili ya mipangilio upo.&#x0d;Shikilia Ctrl unapobofya kufungua faili, iwezekanapo.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Ruwaza ya kupakia mipangilio: Chaguo-msingi ◄ AppData ◄ Local.&#x0d;• Iwapo hakuna mipangilio inayopatikana kwenye folda ya ndani, app itatafuta ndani ya folda ya Appdata, Chaguo-msingi itatumika kama hakuna faili ya mipangilio inayopatikana.&#x0d;• Iwapo hakuna mipangilio ya ndani, mipangilio yote itahifadhiwa kwenye faili ya mipangilio ya APpdata.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Ondoa miradi ya kitambo kiotomatiki.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Unapofungua app, kazi ya mandharinyuma itafuta miradi yoyote iliyofungwa zilizo mzee kuliko wakati wa kusanidiwa.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(masiku, mradi wowote nzee kuliko hii utafutwa/utatupwa baada ya kufungua app)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Futa kashe</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Ungependa kufuta folda ya kashe?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Utakapotengeneza kirekodi au kufungua kitu kukihariri, mradi unaundwa na kuhifadhiwa ndani ya folda kashe.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Ungependa kuondoa miradi hii kutoka folda ya kashe?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Usiondoe miradi ya hivi majuzi.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Miradi nzee kuliko siku {0}, ambazo hazitumiki kwa sasa, itatolewa)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Miradi yote, ambazo kwa sasa hazitumiki, zitatolewa)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proksi</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Mtindo:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Imelemazwa</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Kikuli</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Mfumo</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Inatumia proksi ya mfumo)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Kipangishi</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Kituo-tarishi:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Jina la mtumiaji:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Nywila:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Get\">Pata tokeni ya OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">Bandika tokeni ya udhibitishaji hapa</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Idhinisha</s:String>\n    <s:String x:Key=\"S.Options.Upload.Refresh\">Onyesha upya</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">Futa</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (kisirisiri)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Tumia viungo vya moja-kwa-moja.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Pata viungu vya Gifv badala ya Gif</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Pakia gifs hadi albamu teule.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Albamu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Niulize kabla ya kupakia.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">Haikuwezekana kufungua ukurasa ili kupata token ya udhibitishaji ya Imgure</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Ili kuidhinisha app hii, unahitaji token ya uidhinishaji.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Uidhishaji wa Imgur umekamilika.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Uidhishaji wa Imgur haukufaulu. Jaribu tena baada ya sekunde chache, au tafuta tokeni mpya.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">It was not possible to authorize the app</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">Check if you provided the correct token and if you have an internet connection.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">Ili kupakia upya uidhinishaji wa app hii, unahitaji kwanza kumaliza mchakato wa uidhinishaji.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Haijaidhinishwa</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Uidhinishaji uliisha muda mnamo {0}</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Uidhinishaji ni halisi hadi {0}</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Uidhishaji wa Imgur umeondolewa.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Upakiaji wa orodha la albamu hakukuwezekana.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">Tokeni ya OAuth:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">Chagua fikio</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Chagua albamu (hiari)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Iwapo ungependa, unaweza kuteua albamu fikio:</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Zana za nje zilizopo</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Bofya hapa kupakua&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Inapakua...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Imepakua&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Bofya hapa kufungua sifa za faili.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Apps zinazosambazwa na Duka la Microsoft haziweza pakua apps zingine. Itabidi upakue kikuli.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Eneo la FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Teua eneo la kiendeshaji cha FFmpeg</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg executable</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Kijia cha maktaba ya kiendeshaji cha FFMpeg ina vibambo batili moja au zaidi. Tafadhali, chagua folda halali ya kiendeshaji hicho.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Eneo la Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Teua eneo la maktaba ya Gifski</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski library</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Kijia cha maktaba ya Gifskiina vibambo batili moja au zaidi. Tafadhali, chagua folda halali ya maktaba hiyo.</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation\">Folda ya SharpDx (SharpDX.dll, SharpDX.Direct3D11.dll na SharpDX.DXGI.dll)</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">Teua eneo la maktaba ya SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">Kijia cha maktaba ya SharpDx ina vibambo batili moja au zaidi. Tafadhali, chagua folda halali ya maktaba hizo.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Leseni ya FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Leseni ya Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Leseni ya SharpDx</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Toa mchango</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Toa mchango US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Toa mchango €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Inafungua tovuti la Paypal. Sarafu iliyoteuliwa: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Inafungua tovuti la Paypal. Sarafu iliyoteuliwa: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Inafungua tovuti la Paypal. Lazima uteue sarafu.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Jisajili</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Toa mchango kila mwezi kupitia Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Toa mchango kila mwezi kupitia Flatter.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Tuza michezo</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Tuza michezo kupitia Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Tuza michezo kupitia GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Lipia kahawa kupitia Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Fedha fichamishi</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Nakili anwani ya BitcoinCash</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Saidia</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Iwapo ungependa kusimama nasi :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Toleo:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Mwandishi: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Toleo la Microsoft Store. </s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Wasiliana</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Ingia seva</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Tembelea ukurasa</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Ingia chumba</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Kiufundi</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Leseni:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Hii app ni bure bilashi)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Msimbo wa chanzo</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Sera ya faragha:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Shukrani nyingi kwa</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Mashabiki wangu wote, watu waliotoa maoni na/au michango.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Ujanibishaji</s:String>\n    <!--<s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Recognized\">Recognized as {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.NotRecognized\">Not recognized</s:String>-->\n    <s:String x:Key=\"S.Localization.Usage.First\">Rasilimali ya chini kabisa ndiyo inayotumika.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Kutekeleza rasilimali yako maalu, isogeze hadi chini ya orodha.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant\">Redundant language code</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown\">Unknown language</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Rekodi</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Sitisha</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Endelea</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Simamisha</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Tupa</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Peusha</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Urefu</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Upana</s:String>\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fps\">Kipeojuu cha fremu kila sekunde</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Peusha hadi kidirisha (kokota na uachilie kupeusha)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Kabla kuanza</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (imesitishwa)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Inasimamisha...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Kunasa skrini hakukuwezekana.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Kunasa skrini hakukuwezekana. Mtindo wa unasaji haukurudisha fremu yoyote hata baada ya kujaribu mara 5.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Haikuwezekana kuanza/kusitisha unasaji wa skrini</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 au mpya zaidi inahitajika kunasa skrini kutumia API ya Desktop Duplication</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">Maktaba za SharpDx zinahitajika ili kuweza kunasa skrini kwa kutumia API ya Dekstop Duplication. Nenda Chaguo > Zaidi kupakua.</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Eneo</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Dirisha</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Skrini</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Kubali</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Jaribu upya</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Ghairi uteuzi (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Bofya na buruta ili kuchagua eneo la skrini hii</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Bofya na buruta ili kuchagua eneo</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Bofya hapa kuchagua dirisha hii</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Bofya hapa kuchagua skrini hii</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Bofya Esc kughairi</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Kirekodi kamera-tovuti</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Hakuna kifaa cha video kilichogunduliwa :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Tafuta vifaa vya video.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Kipimo: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Badilisha uzani wa video</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Kirekodi Bodi</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Rekodi-kioto</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Huwezesha kurekodi unapochora.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Shikilia]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Kichagua rangi:</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Teua rangu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Nyekundu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Kijani</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Buluu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alfa</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Rangi ya kwanza</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Rangi iliyopo</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Rangi ya mwisho</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Kokota hi hadi&#x0d;rangi za sampuli</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Bofya na buruta ili kuchukua&#x0d;rangi kutoka skrini yako.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Kionyeshi vighairi</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Fungua kighairi cha ndani</s:String>\n    <!--<s:String x:Key=\"S.ExceptionViewer.Type\">Exception type</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>-->\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Kuna kitu kisicho sahihi kilichotokea</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Tuma ripoti</s:String>\n\n    <!--FFmpeg preset-->\n    <s:String x:Key=\"S.FfmpegPreset.Title\">Setiawali ya FFmpeg</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Name\">Jina</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Parameters\">Parameta</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">Kusimbika na 2-pass, ongeza tu '-pass 2' kwenye amri</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Name\">Inabidi uupe mradi huu jina.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">Inabidi uchape parameta kadhaa za setiawali hii.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">Tayari kuna setiawali iliyo na jina sawia.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Ingiza fremu</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Pande zote zinafaa kuwa na ukubwa sawia, dirisha hii hukurusu kuibadilisha nafasi na kubadilisha ukubwa picha na turubai. Bofya kuteua na kubadilisha ukubwa.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Ukubwa wa turubai</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Tosheleza picha kwenye turubai</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Badilisha ukubwa </s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Kuna tofauti kati za ukubwa wa fremu. Unafaa utatue hili kabla ya kuingisha fremu.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Fremu mpya</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Fremu (z)ili(z)opo</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Ukubwa wa picha</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Sehemu ya picha</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Seti ukubwa wa picha upya&#x0d;na nafasi</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Fremu mpya zitaingizwa kwenye orodha&#10;ya sasa ya fremu kwenye nafasi:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Kabla</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Baada</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Fremu</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Inaleta</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Teua rangi ya kujaza turubai</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Leta fremu kutoka video.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Kiletaji:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Inapakia...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Kipimo:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Ukubwa:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Urefu:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Upana:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Kiwango cha fremu</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Anza</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Mwisho:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Uteuzi:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Fremu</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Muda:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Haikuwezekana kupakia video</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Kihakiki hakikuweza kuanza. Jaribu kutumia kiletaji kingine aut angalia kama video si mbovu.&#x0d;Iwapo unatumia MediaPlayer, angalia kama kipengee kiitwacho \"Media Features / Windows Media Player\" imewashwa na uhakikishe kuwa unayo codec ya video inayotakikana.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Muda umeisha kazi kupata kihakiki cha fremu.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Hakuna fremu iliyoteuliwa kuletwa</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Kisimbaji</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>-->\n    <s:String x:Key=\"S.Encoder.Starting\">Inaanza</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Imekamilika</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Imenakiliwa kwa ubao-nakili</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Haikuweza kunakili</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Amri iliyotekelezwa</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Onyesha towe ya (ma)amrisho.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Haikuweza kutekeleza amri</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Haikuweza kupakia</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Bofya kufungua ukurasa wa kufuta picha (kama ipo)</s:String>\n    \n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analysis:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copy:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commands:</s:String>-->\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Faili ilifutwa au kusogezwa</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Imeghairiwa</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Tatizo</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Bofya hapa kuonyesha taarifa za tatizo hili.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Inapakia</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Tekeleza maamrisho</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Inachakatisha {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Inajitayarisha kwa mpitio wa pili</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Inachakatisha {0} - mpitio wa pili</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Inatengeneza faili</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Inachanganua pikseli zisizobadilika</s:String>\n    <!--<s:String x:Key=\"S.Encoder.SavingAnalysis\">Saving analysis result</s:String>-->\n    <s:String x:Key=\"S.Encoder.OpenFile\">Fungua faili</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Kagua folda</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Ondoa kutoka orodha</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Onyesha mafafanuzi</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>-->\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Nakili kama picha</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Nakili jina la faili</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Nakili kijia cha folda</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Nakili kiungo</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Amri Towe</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Amri towe</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Arifa</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Puuza maarifa yote</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Kihariri</s:String>\n    <s:String x:Key=\"S.Editor.File\">Faili</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Nyumbani</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Uchezaji</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Hariri</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Picha</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Mapitio</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Takwimu</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Chaguo</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Usaidizi</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Ziada</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Sasisha mpya inapatikana!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Bofya hapa kusoma zaidi kuihusu.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Jumla ya idadi, idadi ya uteuzi, kielezo cha uteuzi</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Inatayarisha fremu</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Upakiaji ni batili - huwezi kuleta faili anuwai mara moja. Jaribu kuchagua faili moja tu.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Upakiaji ni batili - huwezi kuleta miradi anuwai mara moja. Jaribu kuchagua mradi mmoja tu.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Fungua faili ya midia (picha au video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Fungua faili ya midia (picha au video) au faili ya mradi</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.All\">All supported files</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Apng\">Animated Png</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Wmv\">Windows media video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Zip\">Zip file, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Png\">Png image, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project as Zip</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Psd\">Psd file</s:String>-->\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Nenda pale \"Faili > Mpya\" ili uanze rekodi mpya</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Kokota na dondosha picha, video au miradi kuleta</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Ahsante sana kwa kutumia app yangu!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Kasi ya fremu inapopunguzwa, idadi ya rangi au ya mabadiliko kati ya fremu, ukubwa unapunguka</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Ungependa kuongea? Fungua \"Chaguo > Kuhusu\" kupata mbinu za mawasiliano.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Unapata shida? Wasiliana nami kupitia zana ya kutoa maoni</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Ungependa kujaribu kutumia kirekodi kipya?&#x0d;Enda kwa \"Chaguo > Kirekodi\" kuiwezesha</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Inarekodi</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Kamera-tovuti&#x0d;Inarekodi</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Bao&#x0d;Inarekodi</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Tupu&#x0d;Mradi</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Mpya</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Inarekodi</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Kamera-tovuti&#x0d;Inarekodi</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Bao&#x0d;Inarekodi</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Midia</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Ingiza</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Hifadhi kama</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Pakia</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Miradi&#x0d;hivi karibuni</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Hifadhi kama&#x0d;Mradi</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Tupa&#x0d;Mradi</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Mpororo wa matendo</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Tendua</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Rudia</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Seti upya</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Ubao-nakili</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Onyesha ubao-nakili</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Bandika</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Kata</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Nakili</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Kuza</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Rekebisha hadi&#x0d;Yaliyomo</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Tosheleza picha</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Teua</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Teua&#x0d;zote</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Nenda hadi</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Mgeuko</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Ondoa uteuzi</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Uchezaji</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Ya kwanza</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Iliyopita</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Cheza</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Sitisha</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Inayofuata</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Mwisho</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Chaguo za uchezaji</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Rejeleza uchezeshaji.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Hutumika tu wakati wa kuchezesha.&#x0d;Iwapo ungependa kubadilisha mipangilio ya rejelezi ya kusafirisha GIF na Apng,&#x0d;itakuwepo katika paneli ya 'Hifadhi Kama' kwa visimbiko kadhaa.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Fremu</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Futa</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Ondoa&#x0d;virudufu</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Punguza&#x0d;kasi-fremu</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Futa zote za awali</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Futa zote zifuatazo</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Inapanga upya</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Pindua</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Sogeza&#x0d;Kushoto</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Sogeza&#x0d;Kulia</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Ucheleweshaji (muda)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Batilisha</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Ongeza au&#x0d;Punguza</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Kipimo</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Ukubwa na mzunguko</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Badilisha ukubwa</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Puna</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Geuza/zungusha</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Matini</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Manukuu</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Matini huru</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Fremu ya kichwa</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Vitufe&#x0d;Vitufe</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Tandazo</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Matini&#x0d;Mchoro</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Maumbo</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Kipanya&#x0d;Mibofyo</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Taswira fifi</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Boda</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Kivuli</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Maendeleo</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Chujua:</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Mtindo</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Fifia</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Teleza</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Jumla</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Idadi ya fremu</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Muda wa jumla</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Ukubwa wa fremu</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Muda wastani (mchelewo)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Wakati uliopo</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Wakati wa sasa (nyongeza) kutegemea na fremu ya sasa inayoonyeshwa.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI na kipimo ya fremu</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Fremu teule</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Kata Amri</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Huwezi kata fremu zote.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Rekodi inahitaji angalau fremu moja.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Ondoa yote</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Una uhakika unataka kuondoa fremu zote?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Kitendo hiki kitapuuza mradi uliofunguliwa kwa sasa na haiwezi tenduliwa. Ungependa kuendelea?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Tupa mradi</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Una uhakika unataka kupuuza mradi?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Kitendo hiki kitapuuza mradi, ikiondoa fremu zote.&#x0d;Huwezi kutendua operesheni hii.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Ungependa kutupa mradi uliopita?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Iwapo hutaki, mradi wa awali utapatikana kwenye Miradi ya Awali</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Futa fremu</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Una uhakika unataka kufuta?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Kitendo hiki kitafuta fremu {0}.&#x0d;Utaweza kutendua hii baadae.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Inaondoka kutoka kihariri</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Una uhakika unataka kuondoka?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Mradi wa sasa uliokuwa ukiitendekea unaweza kufunguliwa tena kupitia 'Miradi ya hivi sasa'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Mradi wa sasa uliokuwa ukiitendekea unaweza kufunguliwa tena kupitia 'Miradi ya hivi sasa', lakini usisahau kuwa baada ya siku chache, itafutika kiotomatiki.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Kokota-dondosha ni batili</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Huwezi leta faili anuwai mara moja.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Jaribu kuchagua faili moja tu.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Haiwezi kupakia faili</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Faili haikuweka kupakiwa kwa sababu ina msimbo batili.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Huwezi leta miradi anuwai mara moja.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Jaribu kuchagua mradi mmoja tu.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Hakuna matini ya kutekelezwa.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea manukuu.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea matini.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea fremu ya kichwa kando yake.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Unapaswa kuchagua unene wa boda iliyo kubwa kuliko 0 kwenye upande angalau mmoja.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Unapaswa kuchagua angalau fremu moja ya kutekelezea boda.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Upitishaji wa nuru lazima iwe kubwa kulizo sufuri ili kuleta mabadiliko kwenye fremu.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Unapotumia kina cha kivuli na nusukipenyo ya ukungu kama sufuri, haijalishi kwa sababu itafichwa nyuma ya fremu.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Unapaswa kuchagua angalau pikseli moja kutekelezea Cinemagraph. Chagua pikseli kwa ku(z)ichorea juu.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Mpitio wa kufifia</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea mpito wa kufifia.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Rangi iliyo na uangavu wote haitaleta madoido yoyote kwenye mpitio huu.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Mpitio wa kuteleza</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea mpito wa kuteleza.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Pakia fremu</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Haiwezi kupakia mradi</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Haikuwezekana kupakia fremu kwa sababu zote ni mbovu au picha hazipatikani zinapotarajika kupatikana.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Fremu kadhaa hazingeweza kupakiwa</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Haikuwezekana kupakia fremu kwa sababu hazikupatikana au ni mbovu.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Unapaswa kuchagua angalau fremu moja kutekelezea tandazo.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg haipo. Iongeze kwenye kijia cha mazingira au bofya hapa kufungua Chaguo > Ziada kuseti eneo.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski haipo. Iongeze kwenye kijia cha mazingira au bofya hapa kufungua Chaguo > Ziada kuseti eneo.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Hakuna nafsai huru inayotosha kwenye kiendeshi ambacho app hii huhifadhi kashe yake ({0}% imebaki). Bofya hapa kufungua Chaguo > Faili za hivi punde kukomboa nafasi kiasi.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Ulijaribu kuleta picha anuwai zilizo na DPI tofauti, ambayo haiauniwi. Zingine zililetwa, zilizobaki zinafaa kuletwa kivyao.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Inaepua fremu kutoka kashe</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Inasasisha fremu</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Inatayarisha kuleta</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Inaleta fremu</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Inachanganua nakala rudufu</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Inarekebisha kuchelewa</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Inatupa rudufu</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Inatupa fremu</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Inatupa folda</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Inabadilisha ukubwa wa fremu</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Inapuna fremu</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Inatekeleza mtandazo kwa fremu</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Inatengeneza fremu ya kichwa</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Inatekeleza geuza/zungusha kwa fremu</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Inabadilisha kuchelewa.</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Inatekeleza mpitio</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Inatayarisha kuhifadhi</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Fremu:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Fungua picha</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Kagua folda</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">Kagua picha</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Nenda hadi fremu</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Nenda hadi fremu (0 hadi {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Hifadhi kama</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Ondoa fremu teuzi</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Rekodi mpya ya skrini</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Rekodi mpya ya kamera-wavuti</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Rekodi mpya ya bodi</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Mradi mpya</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Mpya kutoka media au mradi</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Rekodi mpya imetengenezwa</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Rekodi mpya ya kamera-wavuti imeundwa</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Rekodi mpya ya bodi imeundwa</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Mradi mpya umeundwa</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Tendua zilizotekelezwa</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Seti upya iliyotekelezwa</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Rudia iliyotekelezwa</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">fremu {0} zimekatwa</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">fremu {0} zimenakiliwa</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">fremu {0} zimebandikwa</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Kuza imewekwa kuwa {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Fremu zote zimeteuliwa</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Fremu #{0} imechaguliwa</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Uteuzi umepinduzwa</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Fremu zote zimetenguliwa</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">fremu {0} zimefutwa</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Orodha-kinyume ya fremu</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Athari ya yoyo imetekelezwa</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Fremu (z)imesogezwa kuenda kushoto</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Fremu (z)imesogezwa kuenda kulia</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Fremu zilizobadilishwa ukubwa</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Fremu zilizopunwa</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Fremu zilizogeuzwa/zungushwa</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Tendo la kugeuza hutekelezwa kwa fremu zilizoteuliwa na la kugueza hutekelezwa kwa fremu zote</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Kitendo hiki inatumika kwa kila fremu</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Kitendo hiki inatumika kwa fremu teule</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Kitendo hiki inatumika kwa fremu zote au zile teule, kulingana na mipangilio yako</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph inatekelezeka kwa fremu zote kulingana na fremu ya kwnaza</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Tandazo imetekelezwa</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Fremu ya kichwa imeundwa</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Kichwa cha fremu kitaingizwa kabla fremu teuzi</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Muda (ucheleweshaji) umebadilishwa</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Mpitio umeingizwa</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Kiwango cha fremu kimepunguzwa</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Rudufu zimeondolewa</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Ficha</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Tekeleza</s:String>\n    <s:String x:Key=\"S.Action.Open\">Fungua</s:String>\n    <s:String x:Key=\"S.Action.Save\">Hifadhi</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Ghairi</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Miradi ya hivi karibuni</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Inatafuta miradi ya hivi majuzi...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Tarehe iliyoundwa</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Idadi ya fremu</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Hakuna mradi uliochaguliwa. Chagua mradi kwa orodha kupakia.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Mradi huu tayari ulifunguliwa na tukio kingine la kihariri. Mradi haiwezi funguliwa kama tayari imefunguliwa kwenye kihariri kingine.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Viingizo vya ubao-nakili</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Kiingizo cha ubao-nakili</s:String>\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>-->\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>-->\n    <s:String x:Key=\"S.Clipboard.Explore\">Kagua yaliyomo</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Ondoa</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Tabia ya kubandika</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Kabla ya fremu chaguzi</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Baada ya fremu chaguzi</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">Sifa zilizopo</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">Sifa mpya</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Hifadhi uwiano wa kimo-upana</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Unapaswa kuchagua dhamani tofauti kutekelezea tendo la kubadili kipimo.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Pointi</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Juu:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Kushoto:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Chini:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Kulia:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Uteuzi wa upunaji lazima iwe ndogo kiliko ukubwa wa sasa wa fremu.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Uteuzi wa upunaji lazima iwe kubwa kuliko pikseli 10x10.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Geuza mlalo</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Geuza kiwima</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Zungusha kushoto 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Zungusha kulia 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Punguza kasi-fremu</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Fakta:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Ondoa hesabu:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Urekebisho wa ucheleweshaji:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Usirekebishe</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Jumlisha na fremu ya awali</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Jumlisha sawa na fremu zilizobaki</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Punguza kasi-fremu ya mradi mzima.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Kama chaguo haijateuliwa, unapaswa kuchagua fremu fuatanishi anuwa,&#10;kubwa kuliko ukamilifu wa kutoa.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Itatoa fremu {0} baada ya kila fremu {1}, bila kuhesabu zilizotolewa.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Inabidi uteue fremu za kutekelezea upunguzaji wa kasi ya fremu (au teua chaguo la kutekelezea mradi mzima)</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Orodha ya fremu teuzi lazima iwe na mfuatano. Huwezi kosa kuchagua fremu kadhaa kati ya fremu zilizochaguliwa.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Uteuzi wa fremu lazima iwe kubwa kuliko ukamilifu wa kutoa, ili kipengee kiweze kutoa kitu.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Ondoa virudufu</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Mfanano (%)</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Uondoaji wa fremu</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Ondoa fremu ya kwanza</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Ondoa fremu ya mwisho</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Urekebisho wa ucheleweshaji:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Usirekebishe</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Tumia wastani</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Tumia jumla</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Kitendo hiki hukagua kila fremu (pikseli moja kwa nyingine) na kuondoa zinazotofautiana na za jirani kwa {0} %.&#x0d;Waweza chagua iwapo wataka kubadilisha mchelewo wa fremu.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Matini</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Fonti</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Familia:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Mtindo:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Uzani:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Ukubwa:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Rangi:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Rangi ya Mandharinyuma:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Kiolezi</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Unene:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Mpangilio</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Wima:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Mlalo</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Charazo za vitufe</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Vitufe</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Kitenganishi</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Hariri vichapo vyako vya vitufe</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Puuza Ctrl, Alt, Shift, na kitufe cha Windows wakati hazitumiki kama virekebishi.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Itapuuza ubofyaji wa vitufe moja moja kama \"Control\", lakini haitapuuza \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Refusha maonyesho ya vichapisho vya vitufe</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Anza maonyesho ya vitufe vilivyobonyezwa mapema.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Kwa (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Hakuna charazo za vitufe kwa rekodi yako.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Kihariri cha vitufe vilivyobonyezwa</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Nambari ya fremu</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Gundua vitufe vilivyocharazwa</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Ondoa mpigo wa kitufe</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Ongeza mpigo wa kibonye</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Mwandiko wa herufindogo.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Inakuruhusu kuingiza herufi ndogo mojamoja.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Mtindo</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Kalamu</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Kifutio</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Teua</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Kifutio suguzi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Upana:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Urefu:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Kidokezo:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Mstatili</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Umbo yai</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Nyingine:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Kidhulishi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Tosheleza kwenye mtao</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Hakuna michoro itakayotekelezwa kwenye fremu ulizoteua.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea uchoraji huru.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Ingiza</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Maumbo</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Nusu-kipenyo</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Vistari</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>-->\n    <s:String x:Key=\"S.Shapes.Fill\">Jaza</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Mibofyo ya kipanya</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Hakuna mbofyo wa kipanya uliogunduliwa kwa mradi wako.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Picha</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Faili:</s:String>\n    <!--<s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>-->\n    <s:String x:Key=\"S.Watermark.Opacity\">Kutopitisha nuru</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Teua picha</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Unapaswa kuchagua picha kutekelezea fremu teule.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Unapaswa kuchagua angalau fremu moja kutekelezea taswira fifi.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Mwonekano</s:String>\n    <s:String x:Key=\"S.Border.Info\">Tumia hasi</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Rangi ya kivuli</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Rangi ya mandharinyuma</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Mwelekeo</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Nusukipenyo wa ukungu</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Kina:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Chagua za uchujushaji</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Ukubwa wa pikseli:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Kokotoa rangi ya wastani ya kila fungu lililowekwa pikseli.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Tumia zana ya uteuzi kuteua mstatili itakayofanywa pixeli.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Hukuchagua chochote. Tafadhali tumia zana ya uteuzi kuteua mstatili ambao utawekwa pikseli.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">AIna</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Upau</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Matini</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Usahihi</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Dakika</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Sekunde</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Millisekunde</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Asilimia</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Nambari ya fremu</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Tarehe/saa halisi</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Maalum</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Onyesha jumla.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Umbizo:</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Date\">Unaweza kutumia mtindo wa saa na tarehe kutoka .Net Framework.&#x0d;Ubainishaji unapatika kwenye viungo mbili hapo chini.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Maumbizo sanifu</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Maumbizo maalum</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Hesabu kutoka:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Huanza kuhesabu nambari za fremu kutoka nambari hii.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Uelekeo</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Chelewesha kisasisho</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Mtindo wa ucheleweshaji</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Batilisha (ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Ongeza au punguza (ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Kipimo (%)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Dhamani mpya</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Kipeochini cha 10ms kila fremu</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Punguza/Ongeza dhamani</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Dhamani ya kipimo</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Dhamani hii mpya itabadilisha muda (mchelewo) wa fremu zote. Dhamani hii inaweza kuwa kati ya 10ms na 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Dhamani hii itapunguza/itaongeza muda (mchelewo) wa kila fremu.&#x0d;Unaweza ongeza/punguza kwa kuchagua dhamani kati ya -10000ms na 10000ms, lakini muda wa kila fremu itakuwa kati ya 10ms na n25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Pimisha muda (wa ucheleweshaji) wa kila fremu teule kutumia asilimia.&#x0d;Unaweza pimisha muda wa kila fremu kwa dhamani kati ya 1% na 100%, lakini muda wa kila fremu itazuiliwa kuwa kati ya 10ms na 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Tumia kalamu kuchagua pixeli zisizofaa kubaki.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Urefu wa mpitio</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Kuchelewa kwa mpitio</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Fifia hadi...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Fremu ifuatayo</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Rangi</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Rangi</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Mpitio utatekelezwa katikati ya fremu teuzi na ile ifuatayo.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Aina ya faili</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">Picha (fremu)</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">Pangama</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">Video</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kisimbaji</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Mfumo</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">Inatumia paleti chaguo-msingi.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">Kisimbaji kiliundwa na msanidi wa ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Chaguo za gif</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Ubora</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Rangi:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Kipeojuu cha idadi ya rangi (kwa kila fremu).</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Rejeleza:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif iliyorejelezwa.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Rudia milele.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Rudia hesabu.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Gundua pikseli zisizobadilika.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Mipangilio ya Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Apng iliyorejelezwa.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Gundua pikseli zisizobadilika.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Paka rangi kwa pikseli zote zilizo na rangi angavu</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">Chaguo za video</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">Fps:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">Geuza video (kiwima)</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">Chaguo za picha</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Zip picha</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions\">Chaguo za PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Finyaza picha</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Finyaza picha ukitumia algoriti ya RLE</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Hifadhi mfululizo wa data.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Kagua upangaji saa wa fremu, sio tu fremu pekee</s:String>\n    <s:String x:Key=\"S.SaveAs.ProjectOptions\">Chaguo za kupangama</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">Ziada:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets\">Setiawali:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Chaguo-msingi</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Ongeza</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Hifadhi</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Hariri</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Ondoa</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">Ondoa setiawali</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">Ungependa kuondo setiawali?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">Huwezi kufaka operesheni hii, lakini unaweza ongeza setiawali tena baadae.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Seti upya</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">Seti upya setiawali</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">Ungependa kuweka upya setiawali hadi parameta zake chaguo-msingi?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">Huwezi tendua operesheni hii, lakini unaweza kuhariri setiawali tena baadae.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">Hakuna setiawali ya FFmpeg iliyoteuliwa, tafadhali teua moja.</s:String>\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Chaguo za kuhifadhi</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Hifadhi faili kwa folda utakalochagua</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">Andikia juu (iwapo ipo)</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Hifadhi kama mradi pia (folda ile ile, jinafaili ile ile).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Pakia faili.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">Fikio la kupakia</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Nakili hadi ubao-nakili.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Faili</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Hunakili faili toezi hadi ubao-nakili</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Kijia cha folda</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Hunakili kijia cha folda cha faili toezi hadi ubao-nakili</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Kijia cha faili</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Hunakili kijia cha faili toezi kwenye ubao-nakili</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Kiungo</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Hunakili kiungo iliyoundwa na huduma ya upakiaji kwenye ubao-nakili</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Tekeleza maamirisho ya baada ya usimbaji</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Bofya maamrisho ambazo zinafaa kutekelezwa baada ya usimbiko.&#x0d;Kutekeleza maamrisho anuwai, charaza kila moja kwenye laini tofauti.&#x0d;Macro:&#x0d;{p} = Kijia cha faili towe.&#x0d;{f} = Kijia cha folda towe.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">Faili</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Folda fikio</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Chagua eneo.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Umbizo la faili</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Jina la faili. Ingiza umbizo la Tarehe/Wakati katikati ya '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Uhuishaji</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Ongeza nambari ya faili</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Punguza nambari ya faili</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Faili iliyo na jina sawia tayari ipo</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Hifadhi kwenye ubao-nakili.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Unahitaji kuchagua mahali ambapo utahifadhi faili (folda, ubao-nakili au kupakia kwengine)</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Kutekeleza amri ya baada ya msimbo, unapaswa kuandika kitu kwenye uga wa matini.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Hakuna huduma ya kupakia uliyochagua. Unahitaji kuchagua fikio.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Huwezi kupakia hadi huduma teule kwa sababu haikuidhinishwa. Enda kwa \"Chaguo > Huduma za kupakia kuidhinisha app hii.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Huwezi teua chaguo la kunakili kiungu kwasababu haukuteua kupakia faili.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Unahitaji kuchagua folda fikio.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Folda towe haipo.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Folda towe ina vibambo batili moja au zaidi. Tafadhali, chagua folda halali.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Unahitaji kuteua jina la faili.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Jina la faili towe ina vibambo batili. Tafadhali chagua jina halali.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Failijina tayari inatumika. Teua kuandikia juu au chagua failijina nyingine.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Operesheni ilighairiwa.</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Kagua fremu</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Una uhakika unataka kuhamisha fremu?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Kitendo hiki kitahamisha fremu {0} moja-kwa-moja hadi folda teuzi.</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Maoni</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Tuma</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Uhakiki</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Tuma maoni</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Kichwa</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Ujumbe</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Iwapo unapata hitilafu, usisahau kunielezea jinsi ulivyoipata, hatua kwa hatua.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Aina ya maoni</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Oni</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Suala/Hitilafu</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Pepe yako</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Unahitaji kuandika kichwa ya maoni.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Unahitaji kuandika ujumbe kwenye maoni.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Unahitaji kuandika barua pepe, ili upokee jibu kutoka msanidi-programu.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Inatuma kwenye mandarinyuma... Kidirisha hiki kitafungwa hivi punde.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Viambatisho (Si lazima, kipejuu cha 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Ongeza viambatisho</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Ondoa viambatisho vyote</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Ninaelewa Kimombo</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">na Kireno (Brazil na Ulaya).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Hii ndiyo utakayotuma, pamoja na viambatisho vyote.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Tafutatua</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Kuna kidirisha chochote kinachokosekana?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Kama kidirisha chochote hakipo (nje ya skrini),&#x0d;tumia chaguo hapo chini kuweka upya nafasi ya sasa na ya mwanzo.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Hapa ndipo kila kidirisha kinapopatikana:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Hapa ndipo kila kidirisha kitafungulika wakati mwingine:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Sogeza dirisha zote hadi skrini kuu</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Seti upya nafasi ya vidirisha vyote katika uazishaji</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Kawaida</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Italiki</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Mshazari</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Nyeusi</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Koza</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Kolevu nusu</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Nyeusi zaidi</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Koza zaidi</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Mwangaza zaidi</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Nzito</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Nyepesi</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Wastani</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Kawaida</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Kawaida</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Kolevu nusu</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Konde</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Nyeusi kabisa</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Koza kabisa</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Nyepesi kabisa</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Tuu</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Katikati</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Chini</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Refusha</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Kushoto</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Katikati</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Kulia</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Mlalo</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Wima</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.ta.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">சரி</s:String>\n    <s:String x:Key=\"S.Back\">பின்</s:String>\n    <s:String x:Key=\"S.Cancel\">நீக்கறல்</s:String>\n    <s:String x:Key=\"S.Yes\">ஆம்</s:String>\n    <s:String x:Key=\"S.No\">இல்லை</s:String>\n    <s:String x:Key=\"S.Add\">சேர்</s:String>\n    <s:String x:Key=\"S.Edit\">திருத்து</s:String>\n    <s:String x:Key=\"S.Id\">அடையாளம்</s:String>\n    <s:String x:Key=\"S.Title\">தலைப்பு</s:String>\n    <s:String x:Key=\"S.Description\">விளக்கம்</s:String>\n    <s:String x:Key=\"S.SelectColor\">வண்ணத்தைத் தேர்ந்தெடுக்க இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Documentation\">ஆவணப்படுத்தலுக்குச் செல்ல சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Suppress\">அடக்கு</s:String>\n    <s:String x:Key=\"S.Preview\">முன்னோட்டம்</s:String>\n    <s:String x:Key=\"S.Size\">அளவு</s:String>\n    <s:String x:Key=\"S.Background\">பின்னணி</s:String>\n    <s:String x:Key=\"S.Color\">நிறம்:</s:String>\n    <s:String x:Key=\"S.Delay\">தாமதம்</s:String>\n    <s:String x:Key=\"S.DelayMs\">தாமதம்:</s:String>\n    <s:String x:Key=\"S.ValueMs\">மதிப்பு -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">அளவீட்டு மதிப்பு:</s:String>\n    <s:String x:Key=\"S.Margin\">விளிம்பு:</s:String>\n    <s:String x:Key=\"S.Padding\">திணிப்பு:</s:String>\n    <s:String x:Key=\"S.MinHeight\">குறைந்தஅளவு உயரம்:</s:String>\n    <s:String x:Key=\"S.AndOr\">மற்றும்/அல்லது</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">ஐயோ, செயலிழந்தது :(</s:String>\n    <s:String x:Key=\"S.Required\">தேவையான புலம்</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">சார்புநிலை காணவில்லை</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">வலை கட்டமைப்பு 4.8 இல்லை</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">இந்த செயலியை சரியாகப் பயன்படுத்த, .வலை கட்டமைப்பின் சரியான பதிப்பை நீங்கள் பதிவிறக்க வேண்டும்.&#10;இதைப் பதிவிறக்க வலைப்பக்கத்தைத் திறக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">ஒரே ஒரு நிகழ்வு மட்டுமே இசைவுக்கப்படுகிறது</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">பயன்பாடு ஏற்கனவே இயங்குகிறது</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">திரையைவபவக்கு ஏற்கனவே இயங்குகிறது, ஆனால் வெளிப்படையாக எந்த சாளரமும் திறக்கப்படவில்லை. உங்கள் முறைமை தட்டைச் சரிபார், ஒரு திரையைவபவக்கு சின்னம் இருக்க வேண்டும்.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">அமைப்புகளைச் சேமிக்கிறது</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">அதை மீண்டும் சேமிக்க முயற்சிக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">திரையைவபவக்கு அமைப்புகளை வட்டில் சேமிக்க போதுமான சலுகைகள் இல்லாதது போல் தெரிகிறது.&#10;&#10;நீங்கள் மீண்டும் முயற்சிக்க விரும்புகிறீர்களா, ஆனால் இந்த முறை நிர்வாக சலுகைகளைப் பயன்படுத்துகிறீர்களா?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">திரையைவபவக்கு ஐ வெளியேற்றுகிறது</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">நீங்கள் வெளியேற விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">அனைத்து சாளரங்களும் மூடப்படும் மற்றும் தட்டு சின்னம் அகற்றப்படும்.</s:String>  \n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">வரைகலை இசைவாக்கிக்கு மாற்றவும்</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">தேர்ந்தெடுக்கப்பட்ட திரையைப் பிடிக்க சரியான வரைகலை இசைவாக்கிக்கு மாறவும்</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">நேரடிஃ இல் உள்ள வரம்பு காரணமாக, திரை பிடிக்கப்படும் அதே வரைகலை இசைவாக்கியில் திரையைவபவக்கு இயங்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">திரையைவபவக்கு க்கான வரைகலை இசைவாக்கியை சாளரங்கள் அமைப்புகள் > முறைமை > வரைகலை அமைப்புகள் > திறப்பதன் மூலம் அல்லது கீழே உள்ள இணைப்பைக் சொடுக்குவதன் மூலம் மாற்று.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">உங்கள் வரைகலை இசைவாக்கியின் வரைகலை அமைப்புகளைத் திறப்பதன் மூலம் திரையைவபவக்கு-க்கான வரைகலை இசைவாக்கியை மாற்று.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">சாளரங்கள் அமைப்புகளைத் திற</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">உள்ளிடு</s:String>  \n    <s:String x:Key=\"S.Keys.Esc\">தப்பி</s:String>  \n    <s:String x:Key=\"S.Keys.Space\">இடைவெளி</s:String>  \n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">வலது-சொடுக்கு</s:String>  \n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">புதிய திரைப் பதிவு</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">புதிய வலைநிழற்படக் கருவி பதிவு</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">புதிய பலகை பதிவு</s:String>\n    <s:String x:Key=\"S.Exit\">வெளியேறு</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">புதிய திரை பதிவு</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">புதிய வலைநிழற்படக் கருவி பதிவு</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">புதிய பலகை பதிவு</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">புதிய அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">திரை பதிவைச் செருகு</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">வலைநிழற்படக் கருவி பதிவைச் செருகு</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">பலகை பதிவைச் செருகு</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">ஊடகத்திலிருந்து செருகு (படங்கள் மற்றும் காணொளிக்கள்)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">என சேமி...</s:String>\n    <s:String x:Key=\"S.Command.Load\">கோப்புகளை ஏற்று (படங்கள், காணொளிக்கள் மற்றும் திட்டங்கள்)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">அண்மைக் கால திட்டங்களை ஏற்று</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">தற்போதைய திட்டத்தை புறக்கணி</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">சட்டங்களின் தாமதத்தை மீறு</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">சட்டங்களின் தாமதத்தை அதிகரித்தல்/குறைத்தல்</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">சட்டங்களின் தாமதம் அளவிடுதல்</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">பெரிதாக்கை 100% ஆக அமை</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">சாளரத்தை சட்டக அளவிற்கு சரிசெய்யவும்</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">கிடைக்கக்கூடிய சாளர அளவிற்கு படத்தை பொருத்தவும்</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">முதல் சட்டகத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">முந்தைய சட்டகத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Command.Play\">அசைவுட்டத்தை இயக்கு</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">அடுத்த சட்டகத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">கடைசி சட்டத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Command.Undo\">செயல்தவிர்</s:String>\n    <s:String x:Key=\"S.Command.Redo\">மீண்டும் செய்</s:String>\n    <s:String x:Key=\"S.Command.Reset\">திட்டத்தில் உள்ள அனைத்து மாற்றங்களையும் செயல்தவிர்</s:String>\n    <s:String x:Key=\"S.Command.Copy\">தேர்ந்தெடுக்கப்பட்ட சட்டங்களை நகலெடுத்து இடைநிலைப் பலகையில் சேமி</s:String>\n    <s:String x:Key=\"S.Command.Cut\">தேர்ந்தெடுக்கப்பட்ட சட்டங்களை வெட்டி இடைநிலைப் பலகையில் சேமி</s:String>\n    <s:String x:Key=\"S.Command.Paste\">இடைநிலைப் பலகையிலிருந்து சட்டங்களை ஒட்டு</s:String>\n    <s:String x:Key=\"S.Command.Delete\">தேர்ந்தெடுக்கப்பட்ட அனைத்து காட்சிகள் நீக்கு</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">முந்தைய எல்லா காட்சிகளையும் நீக்கு</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">அடுத்த எல்லா காட்சிகளையும் நீக்கு</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">நகல்களை நீக்கு</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">சட்ட ​​எண்ணிக்கையைக் குறை</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">மென்மையான சுழற்சியை உருவாக்கு</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">தலைகீழ் அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">அசைவுட்டத்தை முன்னோக்கியும் பின்னோக்கியும் செல்ல வைக்கிறது</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">தேர்ந்தெடுக்கப்பட்ட காட்சிகளை இடதுபுறமாக நகர்த்து</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">தேர்ந்தெடுக்கப்பட்ட காட்சிகளை வலதுபுறமாக நகர்த்து</s:String>\n    <s:String x:Key=\"S.Command.Resize\">அனைத்து காட்சிகளின் அளவை மாற்று</s:String>\n    <s:String x:Key=\"S.Command.Crop\">அனைத்து காட்சிகளையும் செதுக்கு</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">சட்டங்களை புரட்டவும் அல்லது சுழற்று</s:String>\n    <s:String x:Key=\"S.Command.Caption\">தலைப்பைச் சேர்</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">சுதந்திரமாக மிதக்கும் உரையைச் சேர்</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">ஒரு சட்டத்தைச் சேர் அதில் ஒரு தலைப்புடன்</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">பதிவின் போது அழுத்தப்பட்ட விசைகளைச் செருகுகிறது</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">சுதந்திரமாக வரையும் படிவங்கள்</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">வடிவங்களைச் சேர்</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">சுட்டி நிகழ்வுகள்</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">ஒரு படத்தைத் தேர்ந்தெடுத்து நீர்குறியாகச் சேர்</s:String>\n    <s:String x:Key=\"S.Command.Border\">எல்லைகளைச் சேர்</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">துளி நிழலைச் சேர்</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">உங்கள் காட்சிகளில் உள்ள முக்கிய பகுதிகளை மறை</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">அசைவுட்டம் முழுவதும் சட்டத்தின் எந்தப் பகுதிகள் நிலையானதாக இருக்கக்கூடாது என்பதைத் தேர்ந்தெடுக்க வரைதல் கருவிகளைப் பயன்படுத்து</s:String>\n    <s:String x:Key=\"S.Command.Progress\">மீண்டும் இயக்கு விவரங்களுடன் முன்னேற்றப் பட்டி அல்லது உரை</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">அனைத்து காட்சிகளையும் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">குறியீட்டின்படி சட்டத்திற்குச் செல்லவும்</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">காட்சிகளின் தேர்வைத் தலைகீழாக மாற்று</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">அனைத்து காட்சிகளையும் தேர்ந்தெடுக்க வேண்டாம்</s:String>\n    <s:String x:Key=\"S.Command.Fade\">மங்கலான மாற்றம்</s:String>\n    <s:String x:Key=\"S.Command.Slide\">சறுக்கி மாற்றம்</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">முடிக்கப்பட்ட அனைத்து குறியாக்கங்களையும் அழி</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">மேலே நகர்த்து</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">கீழே நகர்த்து</s:String>\n    <s:String x:Key=\"S.Command.Add\">சேர்</s:String>\n    <s:String x:Key=\"S.Command.Open\">திற</s:String>\n    <s:String x:Key=\"S.Command.Edit\">தேர்ந்தெடுக்கப்பட்ட உருப்படியைத் திருத்து</s:String>\n    <s:String x:Key=\"S.Command.Save\">தேர்ந்தெடுக்கப்பட்ட உருப்படியைச் சேமி</s:String>\n    <s:String x:Key=\"S.Command.Remove\">தேர்ந்தெடுக்கப்பட்ட உருப்படியை நீக்கு</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">வரலாற்றைக் காண்க</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">திரையைவபவக்கு - தொடக்கம்</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">பதிபான்</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">திரை பதிபானைத் திறக்கிறது,&#10;அங்கு நீங்கள் உங்கள் திரையை எளிதாகப் பதிவு செய்யத் தொடங்கலாம்.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">வலைநிழற்படக் கருவி</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">வலைநிழற்படக் கருவி பதிபானைத் திறக்கிறது.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">பலகை</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">பலகை பதிபானைத் திறக்கிறது,&#10;அங்கு நீங்கள் உங்கள் வரைபடங்களைப் பதிவு செய்யத் தொடங்கலாம்.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">திருத்தி</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">இந்த பயன்பாட்டின் மையப் புள்ளியான திருத்தி சாளரத்தைத் திறக்கிறது,&#10;அங்கு ஒரு புதிய பதிவு செய்யத் தொடங்கலாம் மற்றும் திருத்தலாம்.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">புதிய பதிப்பு கிடைக்கிறது</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">திரையைவபவக்கு இன் அண்மைக் கால பதிப்பைப் பதிவிறக்குகிறது.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">திரையைவபவக்கு - புதுப்பிப்பான்</s:String>\n    <s:String x:Key=\"S.Updater.Header\">புதிய புதுப்பிப்பு கிடைக்கிறது</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">புதிய வெளியீடு!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">புதிய வெளியீடு கிடைக்கிறது, பதிப்பு {0}!&#x0d;மேலும் விவரங்களுக்கு இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">உங்கள் முறைமை இனி ஆதரிக்கப்படவில்லை அல்லது புதுப்பிப்பு முறைமை மாற்றப்பட்டுள்ளது போல் தெரிகிறது. வலைத்தளத்திலிருந்து கைமுறையாக பதிவிறக்கம் செய்து பாருங்கள்.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">பதிப்பு</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">எடுத்துசெல்லதக்க</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">நிறுவி</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">புதியது என்ன?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">பிழை திருத்தங்கள்:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">நீங்கள் பதிவிறக்கம் செய்ய ஒரு புதிய பதிப்பு உள்ளது.&#x0d;அதைப் பதிவிறக்க உலாவியைத் திறக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">புதுப்பித்தலுக்குப் பிறகு பயன்பாட்டை இயக்கு.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">பதிவிறக்கம்</s:String>\n    <s:String x:Key=\"S.Updater.Install\">நிறுவு</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">கைமுறையாக நிறுவு</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">பதிவிறக்குகிறது...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">பதிவிறக்க விவரங்களைக் காட்ட முடியவில்லை.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">புதுப்பிப்பைப் பதிவிறக்குவது வாய்பில்லை.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">எல்லா குறியாக்கங்களும் முடிவடையும் வரை நீங்கள் காத்திருக்க வேண்டும் புதுப்பிக்கிறது.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">திரையைவபவக்கு - பதிவிறக்கி</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">பதிவிறக்கி</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0}/{1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">திரையைவபவக்கு - விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.Options.App\">பயன்பாடு</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">பதிபான்</s:String>\n    <s:String x:Key=\"S.Options.Editor\">திருத்தி</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">பணிகள்</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">குறுக்குவழிகள்</s:String>\n    <s:String x:Key=\"S.Options.Language\">மொழி</s:String>\n    <s:String x:Key=\"S.Options.Storage\">சேமிப்பகம்</s:String>\n    <s:String x:Key=\"S.Options.Extras\">கூடுதல்</s:String>\n    <s:String x:Key=\"S.Options.Upload\">முகில்</s:String>\n    <s:String x:Key=\"S.Options.Donate\">நன்கொடை</s:String>\n    <s:String x:Key=\"S.Options.About\">பற்றி</s:String>\n    <s:String x:Key=\"S.Options.Other\">மற்றவை</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">சுட்டியைப் பின்தொடர்வதற்கான குறுக்குவழி விசை இல்லை</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">சுட்டி காட்டியைப் பின்தொடரும் நற்பண்பைப் பயன்படுத்த, தேவைப்படும்போது அதை மாற்ற ஒரு குறுக்குவழி விசையை அமைக்க வேண்டும்.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">தொடக்கம்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">கைமுறையாகத்&#10;தொடங்கு</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">நீங்கள் கைமுறையாகச் செய்யும்போது மட்டுமே பயன்பாடு செயல்படுத்தப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">சாளரங்கள் உடன்&#10;தொடங்கு</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">சாளரங்கள் தொடக்கத்திற்குப் பிறகு பயன்பாடு செயல்படுத்தப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">தொடக்க முறைகளுக்கு இடையில் மாற்றுவது வாய்பில்லை.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">ஒரு ஒற்றை நிகழ்வை&#10;மட்டும் இசைவு</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">நீங்கள் ஒரு பயனருக்கு ஒரு முறை பயன்பாட்டை இயக்க முடியும் மற்றும் செயல்படுத்தக்கூடியதாக இருக்கும்,&#10;அதாவது வெவ்வேறு பயனர் அல்லது செயல்படுத்தக்கூடிய நிகழ்வுகள் இணைந்து இருக்கலாம்.&#10;பயன்பாட்டை மீண்டும் இயக்க முயற்சிக்கும்போது, ​​இரண்டாவது நிகழ்வு முதல் ஒன்றை கவனம் செலுத்தி கொண்டு தன்னைத்தானே முடிக்க முயற்சிக்கும்.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">இசைவு பல&#10;நிகழ்வுகள்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">நீங்கள் ஒரே நேரத்தில் பல முறை பயன்பாட்டை இயக்க முடியும், எந்த கட்டுப்பாடும் இல்லாமல்.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">கணினி தட்டில் சிறிதாக்கத் தொடங்குங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(இந்த விருப்பம் செயலில் இருக்கும்போது கணினி தட்டு சின்னம் தெரியும்)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">இதனுடன் தொடங்குங்கள்:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">தொடக்க சாளரம்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">திரை பதிபான்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">வலைநிழற்படக் கருவி பதிபான்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">பலகை பதிபான்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">திருத்தி சாளரம்</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(பயன்பாடு தொடங்கும் போது முதலில் தோன்றும் சாளரம்)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">கருப்பொருள்</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">நிறம் திட்டம்:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">மிகவும் ஒளியானது</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">ஒளியானது</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">நடுத்தரமானது</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">இருண்டது</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">மிகவும் இருண்டது</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">இயக்கத்தை பின்தொடருங்கள்</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">தனிப்பயன்</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">எடுத்துக்காட்டு வண்ணங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">முறைமை தட்டு சின்னம்</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">முறைமை தட்டில் (அறிவிப்பு பகுதி) பயன்பாட்டைக் காண்பி.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">எல்லா சாளரங்களும் மூடப்பட்டிருந்தாலும் பயன்பாட்டைத் திறந்தே வைத்திருங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">எதுவும் செய்ய வேண்டாம்</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">திற சாளரம்</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">சாளரம் இல்லை</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">அனைத்து சாளரங்களையும் சிறிதாக்கு/மீட்டெடு</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">அனைத்து சாளரங்களையும் சிறிதாக்கு</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">அனைத்து சாளரங்களையும் மீட்டெடு</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">இடது சொடுக்கு:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">இடது சொடுக்கு (x2)::</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">நடு சொடுக்கு:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">சாளரம்:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">இல்லை என்றால், திறக்கும்:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">பொது</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">'போதுமான அளவு ஒதுக்கீடு இல்லை...' செயலிழப்புக்கான தீர்வு.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(பரிசோதனை)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">பயன்பாட்டை மூடுவதற்கு முன் ('வெளியேறு' கட்டளை வழியாக) என்னிடம் கேள்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">வன்பொருள் முடுக்கத்தை முடக்கு.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(பயனர் இடைமுகம் மென்பொருள் பயன்முறை வழியாக வழங்கப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">மொழிபெயர்ப்பு புதுப்பிப்புகளைச் சரிபார்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(புதுப்பிக்கப்பட்ட மொழிபெயர்ப்புகள் தானாகவே பதிவிறக்கம் செய்யப்பட்டு நிறுவப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">தொடக்கத்தில் புதுப்பிப்புகளைச் சரிபார்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">பயன்பாட்டை மூடிய பிறகு தானாகவே புதுப்பிப்புகளை நிறுவவும்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">கையடக்க பதிப்பை பதிவிறக்க கட்டாயப்படுத்தவும்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(செயல்படுத்தக்கூடியதை அவிழ்த்து மாற்றுவதன் மூலம் கைமுறை நிறுவல் தேவை)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">மேம்படுத்தப்பட்ட சலுகைகளுடன் புதுப்பிப்பை இயக்க கட்டாயப்படுத்துங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">நிறுவல் தொடங்குவதற்கு முன் என்னைத் தூண்டவும்.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">அளவிடப்பட்ட பிணையங்களில் புதுப்பிப்புகளைப் பதிவிறக்கு.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">(அளவிடப்பட்ட பிணையங்களில் புதுப்பிப்புகளைப் பதிவிறக்க இசைவுக்கிறது)</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">இடைமுகம்</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">பழைய</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">புதிய</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">பிடிப்பு அதிர்வெண்</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">கையேடு</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">பிடிப்பு பொத்தானை அல்லது அதற்கு சமமான விசைப்பலகை குறுக்குவழியை அழுத்துவதன் மூலம் ஒவ்வொரு சட்டகமும் உங்களால் கைமுறையாகப் பிடிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">பயனர் தொடர்பு</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">நீங்கள் ஒவ்வொரு முறை சொடுக்கும்போதும் அல்லது தட்டச்சு செய்யும்போதும் காட்சிகள் பிடிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">வினாடிக்கு</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">பதிபான் திரையில் அமைக்கப்பட்ட காட்சி வீத வகுப்பைக் கருத்தில் கொண்டு,&#10;காட்சிகள் 'வினாடிக்கு' அடிப்படையில் (கழிந்தநேரம்) பிடிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">நிமையத்திற்கு</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">திரை பதிபானில் அமைக்கப்பட்ட காட்சி வீத வகுப்பைக் கருத்தில் கொண்டு,&#10;காட்சிகள் 'நிமையத்திற்கு' அடிப்படையில் (கழிந்தநேரம்) பிடிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">ஒரு மணி நேரத்திற்கு</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">காட்சிகள் 'ஒரு மணி நேரத்திற்கு' (கழிந்தநேரம்) அடிப்படையில் பிடிக்கப்படும்,&#10;பதிபான் திரையில் அமைக்கப்பட்ட காட்சி வீத வகுப்பைக் கருத்தில் கொண்டு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">மீண்டும் இயக்கு தாமதம்:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(மிநொ இல், கைப்பற்றப்பட்ட ஒவ்வொரு சட்டமும் இந்த தாமதத்திற்கு அமைக்கப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">தூண்டுதல் தாமதம்:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(மிநொ இல், ஒவ்வொரு காட்சி பிடிப்பும் தொடங்குவதற்கு முன் இந்த அளவு நேரம் காத்திருக்கும்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">ஒவ்வொரு சட்டகம் {0} இடைவெளியில் பிடிக்கப்படும்.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">பிடிப்பு முறை</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">பழைய பிடிப்பு முறையைப் பயன்படுத்து, இது மெதுவானது மற்றும் விளையாட்டுகளைப் பிடிக்க வேலை செய்யாமல் போகலாம்,&#10;ஆனால் கூடுதல் செருகுநிரல்கள் தேவையில்லை.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">பணிமேடை நகலி பநிஇ பிடிப்பு முறையைப் பயன்படுத்து, இது வேகமானது மற்றும்&#10;முழுத்திரை விளையாட்டுகளைப் பிடிக்கக்கூடியது, ஆனால் சாளரங்கள் 8 அல்லது அதற்கு தேவைப்படுகிறது புதியது.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">கோப்பில்&#10;சேமி</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">பிடிக்கப்பட்ட ஒவ்வொரு சட்டமும் நேரடியாக வட்டில் ஒரு படமாகச் சேமிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">நினைவகம்&#10;தற்காலிக கோப்புகள்</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">பிடிக்கப்பட்ட ஒவ்வொரு சட்டமும் முதலில் நினைவகத்தில் புள்ளி வரிசையாகச் சேமிக்கப்படும் (முன்பு சுருக்கப்படலாம்).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">சுருக்கம்:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">உகந்த</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(மெதுவாக ஆனால் அதிக உகந்த சுருக்கம்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">வேகமானது</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(வேகமானது ஆனால் குறைவான உகந்த சுருக்கம்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">சுருக்கம் இல்லை</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(சட்டங்களைப் பிடிக்கும்போது எந்த சுருக்கமும் செய்யப்படக்கூடாது)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">தற்காலிக கோப்புகள் அளவு:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(எம்பி இல். இந்த அளவை அடைந்த பிறகு, தரவு வட்டில் எழுதப்படும்/சுத்தப்படுத்தப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">முழு கருப்பு காட்சிகளைப் பிடிப்பதைத் தடு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(நினைவு தற்காலிக கோப்புகள் கொண்ட இருமம்பிஎல்டி அனைத்து புள்ளிகளும் கருப்பு நிறத்தில் உள்ள காட்சிகளில் தவறாக விளைவதைத் தடுக்கிறது)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">பதிவில் சுட்டி காட்டியைக் காட்டு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">சுட்டியின் நிறத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">நிலையான காட்சி வீதம்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(பதிவுசெய்தல் தாமதத்துடன் மாறாத நிலையான தாமதம்)</s:String>    \n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">ஏதாவது மாறும்போது மட்டும் பிடிப்பு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(பிடிப்புப் பகுதிக்குள் ஏதாவது மாற்றப்படும்போது மட்டுமே ஒரு காட்சி பிடிக்கப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">தொலை பணிமேடை இணைப்பில் பிடிப்பு செயல்திறனை மேம்படுத்தவும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(அடுக்கு சாளர பிடிப்பை முடக்குகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">பிடிப்பின் போது கட்டாய நினைவு துடைப்பு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(பிடிப்பின் போது நினைவக பயன்பாட்டைக் குறைக்கிறது, ஆனால் செயல்திறனைக் குறைக்கிறது)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">வழிகாட்டுதல்கள்</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">மூன்றில் ஒரு பங்கு விதி</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">மூன்றில் ஒரு பங்கு&#10;வழிகாட்டுதலின் காட்சியை மாற்ற சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">குறுக்குமுடி</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">குறுக்குமுடி வழிகாட்டுதலின் காட்சியை மாற்ற சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">பதிபான் இடைநிறுத்தப்பட்டிருக்கும்போது அல்லது நிறுத்தப்பட்டிருக்கும்போது மட்டுமே வழிகாட்டுதல்கள் காட்டப்படும்.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">தலைப்புப் பட்டியை மறை (மெல்லிய பயன்முறை).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">திரை உருப்பெருக்கியை இயக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(பதிவு செய்யும் பகுதியைத் தேர்ந்தெடுக்கும்போது இது உருப்பெருக்கியை இயக்குகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">தேர்வின் போது திரைப் பகுதி எல்லையை அசைவுட்டம் செய்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">('அணிவகுப்பு எறும்புகள்' பாணியைப் பயன்படுத்தி அசைவுட்டம் செய்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">தேர்வு உருப்பெருக்கியை இயக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(தேர்வின் மூலைக்கு அருகில் ஒரு அலங்கரிப்பைக் காட்டுகிறது, பதிவின் பகுதி இயக்கத்தை இசைவுக்கிறது.)(Displays an adorner near the corner of the selection, allowing the movement of the recording area)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">சிறிய பயன்முறை.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(பதிபான் கட்டளைப் பலகத்தின் சிறிய பதிப்பைக் காட்டுகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">பதிவு செய்யும் போது புறக்கணி பொத்தானையும் காட்டவும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(பொதுவாக, இடைநிறுத்தப்பட்டிருக்கும் போது மட்டுமே இது தெரியும்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">திரை தேர்வு செயல்திறனை மேம்படுத்தவும்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(திரை தேர்வின் போது தாமதத்தைக் குறைக்கிறது திரையின் நிலையான காட்சியைக் காண்பிப்பதன் மூலம்)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">பதிவு செய்யும் பகுதியின் முந்தைய அளவை நினைவில் கொள்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">பதிவு செய்யும் பகுதியின் முந்தைய இடத்தை நினைவில் கொள்.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">முன் தொடக்க கீழே எண்ணியைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(வினாடிகளில், படம்பிடிக்கத் தொடங்குவதற்கு முன் அது காத்திருக்கும்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">சுட்டியைப் பின்தொடர்வதை இயக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(பதிவு செய்யும் பகுதி சுட்டியின் இடம்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(புள்ளிகளில் இடையக விளிம்பு, பதிவு செய்யும் பகுதி மறுநிலைப்படுத்தப்படத் தொடங்கும் இடம்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(புள்ளிகளில் கூடுதல் இடையக விளிம்பு, இமு மறைக்கப்படத் தொடங்கும் இடம்)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">பதிவை புறக்கணிப்பதற்கு முன் என்னிடம் கேள்.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">முன்னோட்டம் பின்னணி</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">கட்ட அளவு:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">மிகச் சிறியது</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">சிறியது</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">நடுத்தரம்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">பெரியது</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">மிகப் பெரியது</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">எனக்கு பெரிய சதுரங்கள் பிடிக்கும்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">நான் பார்வையற்றவன்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">தனிப்பயன்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">உயரம்:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">அகலம்:</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">இடு</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">அடிப்படை நிறம்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">சம நிறம்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">ஒற்றை வண்ணம்</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">குறியாக்கங்களை ஒரு தனி சாளரத்தில் காண்பி.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">தலைப்புப்பட்டியை (சாளர நிறமி) நீட்டவும்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">ஏற்றப்பட்ட உடனேயே, சட்டக அளவைப் பொறுத்து சாளர அளவைத் தானாக சரிசெய்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">ஏற்றப்பட்ட உடனேயே, சாளர அளவைப் பொறுத்து சட்டக அளவைத் தானாக சரிசெய்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">காட்சிகளை நீக்குவதற்கு முன் என்னிடம் கேள்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">ஒரு திட்டத்தை புறக்கணிப்பதற்கு முன் என்னிடம் கேள்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">திருத்தியை மூடுவதற்கு முன் என்னிடம் கேள் (ஒரு திட்டம் திறந்திருந்தால்).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">உரையைத் தேர்ந்தெடுக்க மூன்று முறை சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">எழுத்துக்களுக்கு வெளியே தலைப்புகளின் வெளிப்புறத்தை வரையவும்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">தேவைப்படும்போது காட்சிகளை விடுங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(முன்னோக்கி பார்ப்பவர் சரியான நேரத்தில் அதைக் காட்ட முடியாவிட்டால் சட்டத்தைத் தவிர்)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">முன்னோக்கி பார்ப்பவர் அதைக் காட்ட முடியாவிட்டால் சட்டத்தைத் தவிர் நேரம்.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">நீக்கு/மீண்டும் செய் வரலாற்றுக்கு ஒரு வரம்பை விதி.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(வரம்பை அடையும் போது பழைய செயல்கள் அகற்றப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(சேமிக்கப்பட்ட அதிகஅளவு செயல்களின் எண்ணிக்கை)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">வெளியீட்டு கோப்புறையை முன்னமைவுகளுக்கு இடையில் ஒத்திசை.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(முன்னமைவுகள் ஒரே வெளியீட்டு பாதையைப் பயன்படுத்தும்)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">கோப்புப் பெயரையும் ஒத்திசை.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(முன்னமைவுகளும் அதே கோப்புப் பெயரைப் பயன்படுத்தும்)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">ஒரே கோப்பு வகையின் முன்னமைவுகளில் மட்டும் ஒத்திசை.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(ஒரே கோப்பு வகையின் முன்னமைவுகள் மட்டுமே ஒத்திசைவில் இருக்கும்)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">தானியங்கி பணி</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">தானியங்கி பணிகளின் பட்டியல்</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">பணி</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">விவரங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">இயக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">இந்தப் பணியை இயக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">ஒரு பணியைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">மேலே உள்ள பணியைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">இந்தப் பணிகள் பட்டியலின் மேலிருந்து கீழாக தொடர்ச்சியாகச் செயல்படுத்தப்படும்.&#10;நீங்கள் முதலில் திருத்தியைப் பயன்படுத்தி ஒரு திட்டத்தைத் திறக்கும்போது இது நடக்கும்.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">உலகளாவிய</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">திரை பதிபான்:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(இயல்புநிலை திரை பதிபானைத் திறக்கும்)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">வலைநிழற்படக் கருவி பதிபான்:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(வலைநிழற்படக் கருவி பதிபானைத் திறக்கிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">பலகை பதிபான்:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(உங்கள் வரைபடங்களைப் பதிவுசெய்ய பலகை பதிப்பானைத் திறக்கிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">திருத்தி:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(மற்றொரு திருத்தி சாளரத்தைத் திறக்கிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">விருப்பங்கள்:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(விருப்பங்கள் சாளரத்தைத் திறக்கிறது. நீங்கள் ஒரு நேரத்தில் ஒன்றை மட்டுமே திறக்க முடியும்)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">வெளியேறு:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(அனைத்து சாளரங்களையும் மூடிவிட்டு கணினி தட்டில் இருந்து பயன்பாட்டை நீக்குகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">பதிபான்கள்</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">தொடங்கு/இடைநிறுத்தம்:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(இது பதிவைத் தொடங்குகிறது அல்லது இடைநிறுத்துகிறது. நிழற்படம் பயன்முறை செயல்படுத்தப்பட்டால் நிழற்படங்களை எடுக்கப் பயன்படுகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">நிறுத்து:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(இது நிறுத்தப்படும் பதிவைத் திறந்து திருத்தியைத் திறக்கிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">புறக்கணி:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(இடைநிறுத்தப்படும்போது செயலில் உள்ள பதிவை புறக்கணிக்கிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">சுட்டி பின்தொடர்தல்:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(நிலை காட்டியின் நிலையைப் பொறுத்து பதிவு செய்யும் பகுதியின் சரிசெய்தலை மாற்றுகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">பின்தொடர்வதை முடக்கு:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(நிலை காட்டியின் நிலையைப் பொறுத்து பதிவு செய்யும் பகுதியின் சரிசெய்தலை தற்காலிகமாக முடக்குகிறது, மாற்றியமைக்கும் விசைகள் மட்டுமே ஏற்றுக்கொள்ளப்படும்)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">விசைப்பலகை கவனத்தை அமைக்க சொடுக்கி, விரும்பிய விசைகள் மற்றும் மாற்றிகளை அழுத்தவும்.&#10;சில விசை சேர்க்கைகள் இசைவுக்கப்படாது.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">பயன்பாட்டின் மொழி</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">தானாகக் கண்டறிதல்</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">தற்போதைய முஇ மொழி (கிடைத்தால்)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">எனது செயலியை மொழிபெயர்க்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">மொழிபெயர்ப்பு வழிகாட்டுதல்களைப் படி, மொழிபெயர்ப்பு செயலியைப் பதிவிறக்கு இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">பின்னர்,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">இறக்குமதி செய்ய இங்கே சொடுக்கு</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">மற்றும் உங்கள் மொழிபெயர்ப்பைச் சோதிக்கவும்.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">எனக்கு\nஅனுப்புங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">மின்னஞ்சல் (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">நீங்கள் மொழிபெயர்த்து முடித்ததும்.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">வழிகாட்டுதல்களுடன் கூடிய வலைப்பக்கத்தைத் திறக்க சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">இறக்குமதி பக்கத்தைத் திறக்கிறது</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">உங்கள் மின்னஞ்சல் பயன்பாட்டைத் திறக்கிறது</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">நிலை</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">தொகுதி:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} காலி {1}இல்</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">எவ்வளவு இடம் மீதமுள்ளது என்பதை மீண்டும் சரிபார்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">தற்காலிக கோப்புறையை அழி.&#10;அண்மைக் கால திட்டங்களை வைத்திருக்க விரும்புகிறீர்களா அல்லது இல்லை.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">தற்போதைய தேர்ந்தெடுக்கப்பட்ட வன்வட்டில் இடம் குறைவாக உள்ளது. தயவுசெய்து, தற்காலிக கோப்புறையை சுத்தம் செய்யவும் அல்லது இருப்பிடத்தை மாற்று.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">வட்டு விவரங்களை மீட்டெடுப்பது வாய்பில்லை.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">கோப்புகள் இல்லை</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} கோப்பு</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} கோப்புகள்</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">கோப்புறைகள் இல்லை</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} கோப்புறை</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} கோப்புறைகள்</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} பயன்பாட்டில் உள்ளது</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">பாதைகள்</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">தற்காலிக கோப்புகள்:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">தற்காலிக கோப்புகள் இருப்பிடத்தைத் தேர்வுசெய்க.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">பதிவுகள்:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">பிழை பதிவு கோப்புகளுக்கான இடத்தைத் தேர்வுசெய்யவும்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">தேர்ந்தெடுக்கப்பட்ட கோப்புறையை உலாவு.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">அமைப்புகள் இடம்</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">பயன்தரவு:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">உள்ளகம்:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">இது இல்லை</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">காலியான உள்ளக அமைப்புகளை உருவாக்கும் கோப்பு.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">அமைப்புகள் கோப்பை அகற்று.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">அமைப்புகள் கோப்பு அமைந்துள்ள கோப்புறையைத் திற.&#x0d;முடிந்தால், கோப்பைத் திறக்க கட்டு ஐ அழுத்திப் பிடி.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• அமைப்புகள் ஏற்றுதல் முறை: இயல்புநிலை ◄ பயன்தரவு ◄ உள்ளகம்.&#x0d;• உள்ளக கோப்புறையில் எந்த அமைப்புக் கோப்பும் இல்லை என்றால், பயன்பாடு பயன்தரவு கோப்புறைக்குள் தேடுகிறது, அமைப்புகள் கோப்பு இல்லை என்றால் இயல்புநிலை பயன்படுத்தப்படும்.&#x0d;• உள்ளக அமைப்புகள் இல்லை என்றால், அனைத்து அமைப்புகளும் பயன்தரவு அமைப்புகள் கோப்பில் சேமிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">மூடும்போது அனைத்து கோப்புகளையும் தற்காலிக சேமிப்பிலிருந்து நீக்கு பயன்பாடு.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">தற்காலிக சேமிப்பிலிருந்து எல்லா கோப்புகளையும் நீக்குவதற்கு முன் என்னிடம் கேள்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">பழைய திட்டங்களை தானாக அகற்று.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">பயன்பாட்டைத் திறக்கும்போது, ​​ஒரு பின்னணி பணி, உள்ளமைக்கப்பட்ட நேரத்தை விட பழைய எந்தவொரு மூடிய திட்டப்பணியையும் அழிக்கும்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(நாட்களில், இதை விட பழைய எந்த மூடிய திட்டப்பணியும் பயன்பாட்டைத் திறந்த பிறகு அழிக்கப்படும்/புறக்கணிக்கப்படும்)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">திரையைவபவக்கு - தற்காலிக சேமிப்பை அழி</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">தற்காலிக சேமிப்பை அழிக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">நீங்கள் ஒரு பதிவை உருவாக்கும்போதோ அல்லது திருத்துவதற்கு ஏதாவது ஒன்றைத் திறக்கும்போதோ, ஒரு திட்டம் உருவாக்கப்பட்டு, தற்காலிக சேமிப்பில் சேமிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">இந்தத் திட்டங்களை தற்காலிக சேமிப்பிலிருந்து அகற்ற விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">அண்மைக் கால திட்டங்களை அகற்ற வேண்டாம்.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(தற்போது பயன்பாட்டில் இல்லாத {0} நாட்களுக்கு மேல் பழமையான திட்டங்கள் மட்டுமே அகற்றப்பட்டது)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(தற்போது பயன்பாட்டில் இல்லாத அனைத்து திட்டப்பணிகளும் அகற்றப்படும்)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">பதிளாள்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">பயன்முறை:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">முடக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">கையேடு</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">முறைமை</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(கணினி பதிளாளைப் பயன்படுத்துகிறது)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">புரவலன்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">துறைமுகம்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">பயனர்பெயர்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">கடவுச்சொல்:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">முன்னமைவுகளைப் பதிவேற்று</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">சேவை</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">தலைப்பு</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">விளக்கம்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">இயக்கப்பட்டது</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">பதிவேற்று சேவை</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">ஒரு சேவையைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">மேலே பதிவேற்ற சேவையைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">தனிபயன்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">இந்த முன்னமைவை இயக்கு.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">விவரங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">பெயர்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">விளக்கம்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">பயன்முறை:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">பெயரிலி</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">ஒப்புதல் அளிக்கப்பட்ட</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">ஒப்புதல்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">சிட்டையைப் பெறு</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">ஒஒப்புதல் சிட்டையை இங்கே ஒட்டவும்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">பயனர்பெயர்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">கடவுச்சொல்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">ஒப்புதல் அளி</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">பயனர்பெயர் மற்றும் கடவுச்சொல் சேமிக்கப்படாது.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">நேரடி இணைப்புகளைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">செருகேடு</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">இந்த முன்னமைவுக்கு நீங்கள் ஒரு தனித்துவமான பெயரைக் கொடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">பெயர் ஏற்கனவே மற்றொரு பதிவேற்ற முன்னமைவால் பயன்பாட்டில் உள்ளது.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">ஒப்புதல் அளிக்கப்பட்ட பயன்முறையில் இருக்கும்போது, ​​நீங்கள் ஒப்புதல் செயல்முறையை முடிக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">இதை ஒப்புதல் அளிக்க உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லை வழங்க வேண்டும் பயன்பாடு.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">ஒப்புதல் சிட்டையைப் பெறுவது வாய்பில்லை.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">இந்த பயன்பாட்டை ஒப்புதல் அளிக்க, நீங்கள் ஒப்புதல் சிட்டையை வழங்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">ஒப்புதல் தோல்வியடைந்தது. எல்லாம் சரியாக இருக்கிறதா என்று சரிபார்த்து, சில வினாடிகள் கழித்து மீண்டும் முயற்சி.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">செருகேடு பட்டியலை ஏற்ற முடியவில்லை.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">ஒப்புதல் முடிந்தது.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">ஒப்புதல் இல்லை.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">ஒப்புதல் {0} இல் காலாவதியானது.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">ஒப்புதல் {0} வரை செல்லுபடியாகும்.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">வபவ-க்குப் பதிலாக வபவv நீட்டிப்புடன் இணைப்புகளைப் பெறுங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">தேர்ந்தெடுக்கப்பட்ட செருகேடுடில் வபவ-களைப் பதிவேற்றுங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">செருகேடு:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">பதிவேற்றுவதற்கு முன் என்னிடம் கேள்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">செருகேடுப் பட்டியலை மீண்டும் ஏற்று.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">இயல்புநிலைகள்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">பதிவேற்றத்தின் விவரங்களை நிரப்பச் சொல்லுங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">முகவரி வகை:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">ஒரு செருகேடைத் தேர்ந்தெடு (விரும்பினால்)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">நீங்கள் விரும்பினால், நீங்கள் இலக்கு செருகேடைத் தேர்ந்தெடுக்கலாம்:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">பதிவேற்று விவரங்கள் (விரும்பினால்)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">பதிவேற்று விவரங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">தலைப்பு:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">விளக்கம்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">குறிச்சொற்கள்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">அரைப்புள்ளியைப் பயன்படுத்தி குறிச்சொற்களைப் பிரி ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">நேரடி இணைப்பு வழியாக அணுகுபவர்களுக்கு மட்டும் காட்சிப்படுத்தவும்.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">பதிவேற்ற வரலாறு</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">தேதி</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">முன்னமைவு</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">வெற்றிகரமாக உள்ளதா??</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">வரலாற்று உள்ளீட்டை நீக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">இணைப்பு:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">குறைவான தரம்:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">நீக்குதல் இணைப்பு:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">வரலாற்றுப் பதிவை நீக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">இந்தச் செயலைச் செயல்தவிர்க்க முடியாது.&#10;&#10;தேர்ந்தெடுக்கப்பட்ட வரலாற்றுப் பதிவை நீக்க விரும்புகிறீர்களா?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">கிடைக்கும் வெளிப்புறக் கருவிகள்</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">பதிவிறக்க இங்கே சொடுக்கு&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">பதிவிறக்குகிறது...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">பதிவிறக்கப்பட்டது&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">கோப்பின் பண்புகளைத் திறக்க இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">நுண்மென் கடையில் விநியோகிக்கப்படும் பயன்பாடுகள் பிற பயன்பாடுகளைப் பதிவிறக்க முடியாது. நீங்கள் அதை கைமுறையாக பதிவிறக்கம் செய்ய வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">வேமுபநிகு இடம்</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">வேமுபநிகு இயங்கக்கூடிய கோப்பின் இருப்பிடத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">வேமுபநிகு இயங்கக்கூடிய</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">வேமுபநிகு இயங்கக்கூடிய கோப்பின் பாதையில் ஒன்று அல்லது அதற்கு மேற்பட்ட செல்லாத எழுத்துக்கள் உள்ளன. அந்த இயங்கக்கூடிய இடத்திற்கு ஒரு செல்லுபடியாகும் இடத்தைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">வேமுபநிகு பதிப்பு</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">வபவசுகி இடம்</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">வபவசுகி நூலகத்தின் இருப்பிடத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">வபவசுகி நூலகம்</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">வபவசுகி நூலகத்தின் பாதையில் ஒன்று அல்லது அதற்கு மேற்பட்ட செல்லாத எழுத்துக்கள் உள்ளன. அந்த நூலகத்திற்கு ஒரு செல்லுபடியாகும் இடத்தைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">வேமுபநிகு உரிமம்</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">வபவசுகி உரிமம்</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">கூர்டிஎஃ உரிமம்</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">கோப்புறையில் எழுத இசைவு இல்லை</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">எழுதும் இசைவு இல்லாததால் கோப்புறையில் பதிவிறக்கத்தைச் சேமிக்க முடியாது.&#10;&#10;நிர்வாக உரிமைகளுடன் பதிவிறக்கியைத் தொடங்க விரும்புகிறீர்களா? பதிவிறக்கம்?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">நன்கொடை</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">அமேரிக்க$ நன்கொடை அளி</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">€ நன்கொடை அளி</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">செலுத்துநண்பா வலைத்தளத்தைத் திறக்கிறது. தேர்ந்தெடுக்கப்பட்ட நாணயம்: டாலர்</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">செலுத்துநண்பா வலைத்தளத்தைத் திறக்கிறது. தேர்ந்தெடுக்கப்பட்ட நாணயம்: யூரோ</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">செலுத்துநண்பா வலைத்தளத்தைத் திறக்கிறது. நீங்கள் நாணயத்தைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">சந்தா பெறுங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">பேட்ரியான் வழியாக திங்கள்தோறும் நன்கொடை அளி.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">பட்டை வழியாக நன்கொடை அளி.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">பரிசு விளையாட்டுகள்</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">நீராவி வழியாக பரிசு விளையாட்டுகள்.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">சீஒசீ வழியாக பரிசு விளையாட்டுகள்.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">கோ-பி வழியாக ஒரு காபிக்கு பணம் செலுத்துங்கள்.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">குறியாக்க நாணயங்கள்</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">இருமம்காசுபணம் முகவரியை நகலெடு.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">ஆதரவு</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">நீங்கள் திட்டத்தை ஆதரிக்க விரும்பினால் :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">பதிப்பு:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">புதுப்பிப்புகளைச் சரிபார்</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">உங்களிடம் ஏற்கனவே அண்மைக் கால பதிப்பு உள்ளது.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">ஆசிரியர்: நிக்கே மனரின்</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">நுண்மென் கடை பதிப்பு. செயல்படுத்தப்பட்ட கொள்கைகள் காரணமாக சில நற்பொருத்தங்கள் முடக்கப்பட்டுள்ளன.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">தொடர்பு</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">சேவையகத்தை சேர்</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">பக்கத்தைப் பார்வையிடு</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">அறையில் சேர்</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">தொழில்நுட்பம்</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">உரிமம்:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(இது முற்றிலும் இலவசமான செயலி)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">மூலக் குறியீடு:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">தனியுரிமைக் கொள்கை:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">நன்றிகடன்</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">எனது அனைத்து ஆதரவாளர்களுக்கும், கருத்துகளை வழங்கியவர்களுக்கும் மற்றும்/அல்லது நன்கொடைகள்.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">உள்ளூர்மயமாக்கல்</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">மொழி குறியீடுகளைப் பெறுதல்...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">{0} என ஒப்புதல் அளிக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">ஒப்புதல் அளிக்கப்படவில்லை</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">கீழே உள்ள வளம் தற்போது பயன்படுத்தப்படுகிறது.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">உங்கள் தனிப்பயன் வளத்தைப் பயன்படுத்த, அதை பட்டியலின் அடிப்பகுதிக்கு நகர்த்தவும்.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">வளத்தை ஏற்றுமதி செய்கிறது...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">வள அகராதியைச் சேமி</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">வள அகராதியைத் திற</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">வள அகராதி</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">வளத்தை இறக்குமதி செய்கிறது...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">கோப்புப் பெயர் செல்லுபடியாகும் வடிவத்தைப் பின்பற்றவில்லை</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">StringResources.ta.xaml போல மறுபெயரிட முயற்சி, அங்கு 'ta' உங்கள் மொழியால் மாற்றப்பட வேண்டும் குறியீடு.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">ஒரே பெயரில் ஒரு ஆதாரத்தை நீங்கள் சேர்க்க முடியாது</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">மறுநிகழ்வு ஆதாரத்தை அகற்ற முயற்சி அல்லது பிற மொழி குறியீட்டைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">மிகவும் அதிகமான மொழி குறியீடு</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">\"{0}\" குறியீடு தேவையற்றது. அதற்கு பதிலாக \"{1}\" ஐப் பயன்படுத்த முயற்சி.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">தெரியாத மொழி</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" மற்றும் அதன் குடும்பம் செல்லுபடியாகும் மொழி குறியீடுகளாக ஒப்புதல் அளிக்கப்படவில்லை.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">உள்ளூர்மயமாக்கல் வளத்தை இறக்குமதி செய்ய முடியவில்லை.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">பதிவு</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">இடைநிறுத்தம்</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">தொடர்</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">நிறுத்து</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">புறக்கணி</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">நிழற்படம்</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">உயரம்</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">அகலம்</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">சுட்டி பின்தொடர்தல் இயக்கப்பட்டது.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">பிடிப்பு அதிர்வெண் முறைகளுக்கு இடையில் மாற சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">கைமுறை</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">இடைவினைகள்</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">வினாடிக்கு அதிகஅளவு காட்சிகள்</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">நொகா</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">1 முதல் 60 நொகா வரையிலான வரம்புகள், அதாவது அதிக மதிப்புகளுடன் அதிக காட்சிகள் கைப்பற்றப்படும்.&#10;ஒவ்வொரு அதிகரிப்பும் 16 மில்லி விநாடிகள் வேறுபாட்டைக் குறிக்கிறது.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">ஒரு நிமையத்திற்கு அதிகஅளவு காட்சிகள்</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">நிகா</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">1 முதல் 60 வரையிலான வரம்புகள் நிகா, அதிக மதிப்புகளுடன், அதாவது அதிக காட்சிகள் பிடிக்கப்படும்.&#10;ஒவ்வொரு அதிகரிப்பும் 1 நொடி வேறுபாட்டைக் குறிக்கிறது.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">ஒரு மணி நேரத்திற்கு அதிகஅளவு காட்சிகள்</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">மகா</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">1 முதல் 60 மகா வரையிலான வரம்புகள், அதிக மதிப்புகளுடன், அதிக காட்சிகள் பிடிக்கப்படும்.&#10;ஒவ்வொரு அதிகரிப்பும் 1 நிமிட வேறுபாட்டைக் குறிக்கிறது.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">பிடிக்க விசைகளைக் சொடுக்கு அல்லது அழுத்தவும்</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">சாளரத்திற்கு விற்பூட்டு செய்யவும் (விற்பூட்டு செய்ய இழுத்து விடுங்கள்)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">முன் தொடக்கம்:</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">திரையைவபவக்கு (இடைநிறுத்தப்பட்டது)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">நிறுத்துகிறது...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">முன் தொடக்கம்...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">கடந்த பிடிப்பு நேரம்.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">மொத்த காட்சி எண்ணிக்கை:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">கைமுறையாகப் பிடிக்கப்பட்டது:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">பிடிப்பு இடைநிறுத்தப்பட்டது.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">உங்கள் கணினி துல்லியமான பிடிப்பு பயன்முறையை ஆதரிக்கவில்லை,&#10;அதாவது இலக்கு காட்சி வீதத்தை ஒருபோதும் அடைய முடியாது.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">திரையைப் பிடிக்க முடியவில்லை</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">திரையைப் பிடிக்க முடியவில்லை. 5 முயற்சிகளுக்குப் பிறகு பிடிப்பு முறை எந்த சட்டத்தையும் வழங்கவில்லை.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">திரையைப் பிடிக்கத் தொடங்க/இடைநிறுத்த முடியவில்லை</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">பணிமேடை நகல் பநிஇ ஐப் பயன்படுத்தி திரையைப் பிடிக்க சாளரங்கள் 8 அல்லது அதற்குப் பிந்தையது தேவை.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">பகுதி</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">ஒரு பகுதியைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">சாளரம்</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">ஒரு சாளரத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">திரை</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">ஒரு திரையைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">உள் திரை</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">பொதுவான திரை</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">வரைகலை இசைவாக்கி: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">தெளிவுத்திறன்: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">சொந்த தெளிவுத்திறன்: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">ஒஅபு: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">தேர்வை நகர்த்த &#10;இழு.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">ஏற்றுக்கொள்</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">மீண்டும் முயற்சி</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">வலது சொடுக்கு</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">தேர்வை நீக்கறல் (தப்பி)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">இந்தத் திரையின் ஒரு பகுதியைத் தேர்ந்தெடுக்க சொடுக்கி இழு</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">ஒரு பகுதியைத் தேர்ந்தெடுக்க சொடுக்கி இழு</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">இந்த சாளரத்தைத் தேர்ந்தெடுக்க இங்கே சொடுக்கு</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">இந்தத் திரையைத் தேர்ந்தெடுக்க இங்கே சொடுக்கு</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">நீக்கறல் செய்ய தப்பி ஐ அழுத்தவும்</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">பதிவை நிறுத்த {0} ஐ அழுத்தவும்</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">பதிபான் சாளரம் சிறிதாக்கப்படும், &#10;அதை மீட்டமை அல்லது பிடிப்பை இடைநிறுத்த {0} ஐ அழுத்தவும்</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">பதிவை புறக்கணி</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">பதிவை புறக்கணிக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">இந்தச் செயல் பதிவை நிராகரிக்கும், அனைத்து காட்சிகளையும் நீக்கும்.&#x0d;இந்தச் செயல்பாட்டை நீங்கள் செயல்தவிர்க்க முடியாது.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">திரையைவபவக்கு - வலைநிழற்படக்கருவி பதிபான்</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">எந்த காணொளி சாதனமும் கண்டறியப்படவில்லை :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">காணொளி சாதனங்களைச் சரிபார்.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">அளவிடல்: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">காணொளியின் அளவை மாற்று.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">திரையைவபவக்கு - பலகை பதிபான்</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">தானியங்கு பதிவு</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">வரையும்போது பதிவை இயக்குகிறது.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">கட்டு [பிடி]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">வண்ணத் தேர்வி</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">ஒரு நிறத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">சிவப்பு</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">பச்சை</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">நீலம்</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">ஆன்னா</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">பதிண்மம்</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">ஆரம்ப நிறம்</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">தற்போதைய நிறம்</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">அண்மைக் கால நிறம்</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">இதை மாதிரிக்கு இழு நிறங்கள்</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">உங்கள் திரையில் இருந்து வண்ணங்களைத் தேர்ந்தெடுக்க&#x0d; சொடுக்கி இழு.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">விதிவிலக்கு பார்வையாளர்</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">உள் விதிவிலக்கைத் திற</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">விதிவிலக்கு வகை</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">செய்தி</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">அடுக்கு</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">மூலம்</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">ஏதோ தவறு நடந்தது.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">அறிக்கையை அனுப்பு</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">முன்னமை</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">குறியீட்டாளர்</s:String>\n    <s:String x:Key=\"S.Preset.Name\">பெயர்</s:String>\n    <s:String x:Key=\"S.Preset.Description\">விளக்கம்</s:String>\n    <s:String x:Key=\"S.Preset.Other\">மற்றவை</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">விருப்பம் மாற்றப்படும்போது தானாகவே சேமி.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">இந்த முன்னமைக்கப்பட்ட அமைப்புகளில் (குறியீடு மற்றும் ஏற்றுமதி அமைப்புகள்) அனைத்து மாற்றங்களையும் சேமி பொத்தானை அழுத்துவதன் மூலம் கைமுறையாக சேமிக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">இந்த முன்னமைக்கப்பட்ட அமைப்புகளில் செய்யப்படும் அனைத்து மாற்றங்களும் (குறியீடு மற்றும் ஏற்றுமதி அமைப்புகள்) தானாகவே சேமிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">இயல்புநிலை முன்னமைவின் சில பண்புகள் படிக்க மட்டுமே.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">இந்த முன்னமைவுக்கு நீங்கள் ஒரு பெயரைக் கொடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">இதே பெயரில் ஏற்கனவே ஒரு முன்னமைவு உள்ளது.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">தானியங்கி சேமிப்புகள்</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">இந்த முன்னமைவில் செய்யப்படும் மாற்றங்கள் தானாகவே சேமிக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">இயல்புநிலை ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">குறியாக்கிக்கான இயல்புநிலை முன்னமைவு.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">கீச்சகத்துக்கு ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">கீச்சகம் பதிவேற்ற வரம்புகளை (அளவு மற்றும் தெளிவுத்திறன் தவிர) மதிக்கிறது.</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">எசிவிசி ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">உயர் செயல்திறன் காணொளி குறியீட்டு முறை.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">விபி8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">பழைய மற்றும் நன்கு அறியப்பட்ட குறிமறைகுறி.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">காணொளி</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">படம்</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">திட்டம்</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">அதிக வண்ணங்கள் மற்றும் சாய்வுகளுடன் கூடிய பதிவுகளுக்கு மிகவும் பொருத்தமானது.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">உயர் தரம் • வெளிப்படையான பின்னணி</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">வெளிப்படையான பின்னணியுடன் அசைவுட்டத்தைச் சேமிப்பதை ஆதரிக்கிறது.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">உயர் தரம் • வரைகலை</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">குறைந்த அளவிலான வண்ணங்களைக் கொண்ட பதிவுகளுக்கு சிறந்தது.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">கேசீஒய் மென்மை • இயல்புநிலை</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">வழக்கமான இமு இன் திரைப் பதிவுக்குப் பரிந்துரைக்கப்படுகிறது. கலக்கம் இல்லாமல் நடுவன் வெட்டு அளப்பானைப் பயன்படுத்துகிறது.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">கேசீஒய் மென்மை • சமப்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">கலக்கம் இல்லாமல் வூவின் அளப்பானைப் பயன்படுத்தி புகைப்படம் போன்ற படங்களுக்கு நல்ல தரம்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">கேசீஒய் மென்மை • உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">உயர் இருமம் நிலை மற்றும் ஃபிலாய்ட்-ச்டீன்பெர்க் பிழை பரவல் கலக்கம் கொண்ட வூவின் அளப்பானைப் பயன்படுத்தி புகைப்படம் போன்ற படங்களுக்கு உயர் தரம்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">கேசீஒய் மென்மை • குறைந்த தரம், வேகமானது</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">அனைத்து காட்சிகளையும் ஒரே மாதிரியான 'வலை-பாதுகாப்பான' தட்டு மற்றும் பேயர் 8x8 வரிசை செய்யப்பட்ட கலக்கம் மூலம் அளவிடுதல்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">வேமுபநிகு • உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">உயர் படத் தரம், ஆனால் அதிக கோப்பு அளவுடன்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">வேமுபநிகு • குறைந்த தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">குறைந்த படத் தரம், ஆனால் சிறிய கோப்பு அளவுடன்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">வபவசுகி • உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">அதிக படத் தரம், ஆனால் அதிக கோப்பு அளவுடன்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">வபவசுகி • குறைந்த தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">குறைந்த படத் தரம், ஆனால் சிறிய கோப்பு அளவுடன்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">வபவசுகி • குறைந்த தரம் மற்றும் வேகமான குறியாக்கம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">வேகமான குறியாக்கத்துடன், ஆனால் சிறிய கோப்பு அளவுடன்.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">முறைமை • குறைந்த தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">குறைந்த தரம் ஆனால் வேகமான குறியாக்கம்.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">வேமுபநிகு • உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">உயர் படத் தரம் மற்றும் சிறிய கோப்பு அளவு, ஆனால் மெதுவான குறியாக்கம்.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">வேமுபநிகு • குறைந்த தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">குறைந்த படத் தரம், சிறிய கோப்பு அளவு மற்றும் வேகமான குறியாக்கம்.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">உயர் படத் தரம் மற்றும் சிறிய கோப்பு அளவு.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">சட்டங்களைச் செருகு</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">இரண்டு பக்கங்களும் ஒரே அளவைக் கொண்டிருக்க வேண்டும், இந்த சாளரம் படத்தையும் சித்திரப்பாடத்தையும் மறுசீரமை மறுஅளவிடவும் உங்களை இசைவுக்கிறது. தேர்ந்தெடு அளவை மாற்றவும் சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">சித்திரப்பாட அளவு:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">சித்திரப்பாடத்தில் &#10;படத்தை பொருத்து</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">இரண்டு படங்களையும் உள்ளே (மேல் இடது மூலையில் இருந்து) பொருத்த சித்திரப்பாடத்தை மறுஅளவிடுகிறது.</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">சட்ட ​​அளவுகளுக்கு இடையே வேறுபாடு உள்ளது. காட்சிகளைச் செருகுவதற்கு முன் இதை நீங்கள் தீர்க்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">புதிய காட்சி(கள்)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">தற்போதைய காட்சி(கள்)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">பட அளவு:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">பட நிலை:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">பட அளவு மற்றும் நிலையை &#x0d;மீட்டமை</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">புதிய காட்சிகள் தற்போதைய நிலையில்&#10; காட்சிகளின் பட்டியலில் செருகப்படும்:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">முன்</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">பின்</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">சட்டகம்</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">இறக்குமதி செய்கிறது...</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">சித்திரப்பாட நிரப்பு நிறத்தைத் தேர்ந்தெடு</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">காணொளிவிலிருந்து காட்சிகளை இறக்குமதி செய்</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">இறக்குமதியாளர்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">ஏற்றுகிறது...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">மறுஅளவிடல்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">அளவு:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">உயரம்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">அகலம்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">காட்சி விகிதம்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">நொகா</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">தொடக்கம்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">முடிவு:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">தேர்வு:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">காட்சிகள்:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">கால அளவு:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">காணொளியை ஏற்றுவது வாய்பில்லை</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">முன்னோட்டக் கருவியைத் தொடங்க முடியவில்லை. வேறொரு இறக்குமதியாளரைப் பயன்படுத்தி முயற்சி அல்லது காணொளி சிதைக்கப்படவில்லையா என்று சரிபார்.&#x0d;நீங்கள் ஊடக இயக்கியைப் பயன்படுத்துகிறீர்கள் என்றால், \"ஊடக நற்பண்புகள் / சாளரங்கள் ஊடக இயக்கி\" எனப்படும் சாளரங்கள் அம்சம் இயக்கப்பட்டுள்ளதா எனச் சரிபார்த்து, தேவையான காணொளி குறிமறைகுறி உங்களிடம் உள்ளதா என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">சட்ட ​​மாதிரிக்காட்சியைப் பெறுவதில் நேரம் முடிந்தது.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">இறக்குமதி செய்ய எந்த சட்டமும் தேர்ந்தெடுக்கப்படவில்லை.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">குறியாக்கி</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">குறியாக்கம்...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">தொடங்குதல்</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">முடிந்தது</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">இடைநிலைப் பலகையில் நகலெடுக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">நகலெடுக்கத் தவறிவிட்டது.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">கட்டளை செயல்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">கட்டளை(களின்) வெளியீட்டைக் காட்டு.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">கட்டளையை செயல்படுத்தத் தவறியது</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">பதிவேற்றத் தவறியது</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">படத்தை நீக்க பக்கத்தைத் திறக்க கட்டு + சொடுக்கு (கிடைத்தால்).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">கடந்த நேரம், நிமிடங்களில்:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">பகுப்பாய்வு:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">குறியீடு:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">பதிவேற்றம்:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">நகல்:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">கட்டளைகள்:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">கோப்பு நீக்கப்பட்டது அல்லது நகர்த்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">நீக்கறல்செய்யப்பட்டது</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">பிழை</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">இந்தப் பிழையின் விவரங்களைக் காட்ட இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">பதிவேற்றுதல்</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">கட்டளைகளை செயல்படுத்துதல்</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">செயல்படுத்துதல் {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">இரண்டாவது கடவுக்குத் தயாராகிறது</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">செயல்படுத்துதல் {0} - 2வது கடவு</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">கோப்பை உருவாக்குகிறது</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">மாறாத புள்ளிகளை பகுப்பாய்வு செய்கிறது</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">பகுப்பாய்வு முடிவைச் சேமிக்கிறது</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">கோப்பைத் திற</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">கோப்பை உலாவு</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">பட்டியலில் இருந்து அகற்று</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">விவரங்களைக் காட்டு</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">முடிக்கப்பட்ட அனைத்து குறியாக்கங்களையும் நிராகரி</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">படமாக நகலெடு</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">கோப்புப் பெயரை நகலெடு</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">கோப்புறை பாதையை நகலெடு</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">இணைப்பு நகலெடு</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">திரையைவபவக்கு - கட்டளை வெளியீடு</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">கட்டளை வெளியீடு</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">அறிவிப்புகள்</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">எல்லா அறிவிப்புகளையும் நிராகரி</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">திரையைவபவக்கு - திருத்தி</s:String>\n    <s:String x:Key=\"S.Editor.File\">கோப்பு</s:String>\n    <s:String x:Key=\"S.Editor.Home\">முகப்பு</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">மீண்டும் இயக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">திருத்து</s:String>\n    <s:String x:Key=\"S.Editor.Image\">படம்</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">மாற்றங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">புள்ளிவிவரங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.Options\">விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.Help\">உதவி</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">கூடுதல்</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">ஒரு புதிய புதுப்பிப்பு கிடைக்கிறது!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">அதைப் பற்றி மேலும் படிக்க இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">மொத்த எண்ணிக்கை, தேர்வு எண்ணிக்கை, தேர்வு குறியீடு</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">சட்டங்களைத் தயாரித்தல்</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">தவறான ஏற்றுதல் - ஒரே நேரத்தில் பல கோப்புகளை இறக்குமதி செய்ய முடியாது. ஒரே ஒரு கோப்பை மட்டும் தேர்வுசெய்ய முயற்சி.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">தவறான ஏற்றுதல் - ஒரே நேரத்தில் பல திட்டங்களை ஏற்ற முடியாது. ஒரே ஒரு திட்டத்தை மட்டும் தேர்வுசெய்ய முயற்சி.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">ஒரு ஊடக (படம் அல்லது காணொளி) கோப்பைத் திற</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">ஒரு ஊடக (படம் அல்லது காணொளி) அல்லது ஒரு திட்டக் கோப்பைத் திற</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">அனைத்து ஆதரிக்கப்படும் கோப்புகள்</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">படம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">காணொளி</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">எபிவ அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">வபவ அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">வலைப அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Avif\">எவிஐஎப் அசைவுட்டம்</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">எவிஐ காணொளி</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">மடரோச்கா காணொளி</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">திரைப் காணொளி</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">எம்பி4 காணொளி</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">வலைதி காணொளி</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">இவப படம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">இபநிகு படம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">எபிவ படம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">படங்களுடன் கூடிய சுருக்கு கோப்பு</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">திரையைவபவக்கு திட்டம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">திரையைவபவக்கு திட்டத்தை சுருக்கு</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">பிஎச்டி கோப்பு</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">புதிய பதிவைத் தொடங்க \"கோப்பு > புதிய\" க்குச் செல்</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">படங்கள், காணொளிக்கள் அல்லது திட்டங்களை இறக்குமதி செய்ய இழுத்து விடுங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">என்னுடைய செயலியை பயன்படுத்தியதற்கு மிக்க நன்றி !</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">காட்சிவிகிதம் குறைவாக இருந்தால், வண்ண எண்ணிக்கை அல்லது காட்சிகளுக்கு இடையிலான மாற்றங்களின் அளவு குறைவாக இருந்தால், அளவு சிறியதாக இருக்கும்</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">நீங்கள் பேச விரும்புகிறீர்களா? தொடர்பு முறைகளுக்கு \"விருப்பங்கள் > பற்றி\" என்பதைத் திற</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">சிக்கல் உள்ளதா? கருத்துக் கருவி வழியாக என்னைத் தொடர்பு கொள்ளவும்</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">புதிய பதிபானை முயற்சிக்க விரும்புகிறீர்களா?&#x0d;அதை இயக்க \"விருப்பங்கள் > பதிபான்\" என்பதற்குச் செல்லவும்.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">பதிவு செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">வலைநிழற்படக்கருவி&#x0d;பதிவு செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">பலகை&#x0d;பதிவு செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">வெற்று&#x0d;திட்டம்</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">புதிய</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">பதிவு செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">வலைநிழற்படக்கருவி&#x0d;பதிவு செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">பலகை&#x0d;பதிவு செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">ஊடகம்</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">செருகு</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">என சேமி</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">ஏற்று</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">அண்மைக் கால&#x0d;திட்டங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">திட்டம்&#x0d;என சேமி</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">திட்டம்&#x0d;நிராகரி</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">செயல் அடுக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">செயல்தவிர்</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">மீண்டும் செய்</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">மீட்டமை</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">இடைநிலைப் பலகைடு</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">இடைநிலைப் பலகைடு காட்டு</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">ஒட்டு</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">வெட்டு</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">நகல்</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">பெரிதாக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">உள்ளடக்கத்திற்கு&#x0d;பொருத்து</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">படம் பொருத்து</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">அனைத்தும்&#x0d;தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">செல்</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">தலைகீழ்</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">தேர்வை நீக்கு</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">மீண்டும் இயக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">முதல்</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">முந்தைய</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">இயக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">இடைநிறுத்து</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">அடுத்து</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">கடைசி</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">மீண்டும் இயக்கு விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">மீண்டும் இயக்கும் போது சுழல் செய்.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">மீண்டும் இயக்கும் போது மட்டுமே பயன்படுத்தப்படும்.&#x0d;வபவகள் மற்றும் அஎபிவகளை ஏற்றுமதி செய்வதற்கான சுழல் அமைப்புகளை மாற்ற விரும்பினால்,&#x0d;சில குறியாக்கிகளுக்கு 'என சேமி' பலகைக்குள் இது கிடைக்கும்.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">காட்சிகள்</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">நீக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">நகல்களை&#x0d;அகற்று</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">சட்டக எண்ணிக்கை&#x0d;குறை</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">மென்மையான&#x0d;வளையம்</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">முந்தைய அனைத்தையும் நீக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">அடுத்து அனைத்தையும் நீக்கு</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">மறுவரிசைப்படுத்துதல்</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">தலைகீழ்</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">யோ-யோ</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">இடதுபுறம்&#x0d;நகர்த்து</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">வலதுபுறம்&#x0d;நகர்த்து</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">தாமதம் (கால அளவு)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">மேல்எழுது</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">அதிகரி அல்லது&#x0d;குறை</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">அளவிடவும்</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">அளவு மற்றும் சுழற்சி</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">மறுஅளவிடு</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">செதுக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">புரட்டு/சுழற்சி</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">உரை</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">தலைப்பு</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">விடுதலை உரை</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">தலைப்பு சட்டகம்</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">விசை&#x0d;அடிகள்</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">மேலடுக்கு</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">விடுதலை&#x0d;வரைதல்</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">வடிவங்கள்</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">சுட்டி&#x0d;நிகழ்வுகள்</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">நீர்குறி</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">சினிமாவரைபடம்</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">எல்லை</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">நிழல்</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">முன்னேற்றம்</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">இருளாக்கு</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">பாணிகள்</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">மங்குதல்</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">சறுக்கி</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">பொது</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">சட்டக எண்ணிக்கை</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">மொத்த கால அளவு</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">சட்டகம் அளவு</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">சராசரி கால அளவு (தாமதம்)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">தற்போதைய நேரம்</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">காட்டப்படும் தற்போதைய சட்டகத்தின் அடிப்படையில் தற்போதைய நேரம் (திரட்டல்).</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">சட்டகம் ஒஅபு மற்றும் அளவுகோல்</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">தேர்ந்தெடுக்கப்பட்ட சட்டகம்</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">வெட்டு செயல்</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">நீங்கள் எல்லா காட்சிகளையும் வெட்ட முடியாது.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">பதிவுக்கு குறைந்தது ஒரு சட்டகம் தேவை.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">அனைத்தையும் அகற்று</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">நீங்கள் காட்சிகள் அனைத்தையும் அகற்ற விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">இந்தச் செயல் தற்போதைய திறந்திருக்கும் திட்டத்தை நிராகரிக்கும், மேலும் அதைச் செயல்தவிர்க்க முடியாது. நீங்கள் தொடர விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">திட்டத்தை நிராகரி</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">திட்டத்தை நிராகரிக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">இந்தச் செயல் திட்டத்தை நிராகரிக்கும், அனைத்து காட்சிகளையும் நீக்குகிறது.&#x0d;இந்தச் செயல்பாட்டை நீங்கள் செயல்தவிர்க்க முடியாது.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">நீங்கள் நிராகரிக்க விரும்புகிறீர்களா?முந்தைய திட்டமா?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">நீங்கள் அவ்வாறு செய்ய வேண்டாம் என்று தேர்வுசெய்தால், முந்தைய திட்டம் அண்மைக் கால திட்டங்கள் வழியாகத் திறக்கக் கிடைக்கும்.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">காட்சிகளை நீக்கு</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">நீங்கள் உறுதியாக நீக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">இந்தச் செயல் {0} காட்சிகளை நீக்கும்.&#x0d;இதை நீங்கள் பின்னர் செயல்தவிர்க்க முடியும்.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">திருத்தியிலிருந்து வெளியேறுதல்</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">நீங்கள் வெளியேற விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">நீங்கள் பணிபுரிந்து கொண்டிருந்த தற்போதைய திட்டத்தை 'அண்மைக் கால திட்டங்கள்' வழியாக மீண்டும் திறக்க முடியும்.The current project that you were working on can be opened again via 'Recent Projects'.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">நீங்கள் பணிபுரிந்து கொண்டிருந்த தற்போதைய திட்டத்தை 'அண்மைக் கால திட்டங்கள்' வழியாக மீண்டும் திறக்க முடியும், ஆனால் சில நாட்களுக்குப் பிறகு, அது தானாகவே நீக்கப்படும் என்பதை மறந்துவிடாதீர்கள்.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">தவறான இழுத்து விடுதல்</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">ஒரே நேரத்தில் பல கோப்புகளை இறக்குமதி செய்ய முடியாது</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">ஒரே ஒரு கோப்பை மட்டும் தேர்வு செய்ய முயற்சி.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">கோப்பை ஏற்றுவது வாய்ப்பில்லை</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">கோப்பு தவறான வடிவமைப்பைக் கொண்டிருப்பதால் அதை ஏற்ற முடியவில்லை.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">ஒரே நேரத்தில் பல திட்டங்களை இறக்குமதி செய்ய முடியாது</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">ஒரே ஒரு திட்டத்தை மட்டும் தேர்வு செய்ய முயற்சி.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">பயன்படுத்த எந்த உரையும் இல்லை.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">தலைப்பைப் பயன்படுத்த குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">உரையைப் பயன்படுத்த குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">தலைப்பு சட்டகத்தை அதற்கு அடுத்ததாகப் பயன்படுத்த குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">குறைந்தஅளவு ஒரு பக்கத்திலாவது சுழித்தை விட அதிகமான எல்லைத் தடிமனைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">எல்லையைப் பயன்படுத்த குறைந்தஅளவு ஒரு சட்டகத்தையாவது</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">சட்டகத்தில் ஏதேனும் வேறுபாட்டை ஏற்படுத்த, ஒளிபுகாநிலை சுழித்தை விட அதிகமாக இருக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">நிழல் ஆழத்தையும் மங்கலான ஆரத்தையும் சுழிமாகப் பயன்படுத்தும்போது, ​​அது சட்டகத்தின் பின்னால் மறைக்கப்படுவதால் எந்த வேறுபாடையும் ஏற்படுத்தாது.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">சினிமாவரைபடத்தைப் பயன்படுத்த குறைந்தஅளவு ஒரு புள்ளியாவது தேர்ந்தெடுக்க வேண்டும். புள்ளிகளின் மேல் வரைந்து அவற்றைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">மங்கலான மாற்றம்</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">மங்கலான மாற்றத்தைப் பயன்படுத்த நீங்கள் குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">முழுமையான வெளிப்படையான நிறம் இந்த மாற்றத்தில் எந்த விளைவையும் உருவாக்காது.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">சருக்கல் மாற்றம்</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">சருக்கல் மாற்றத்தைப் பயன்படுத்த நீங்கள் குறைந்தஅளவு ஒரு சட்டகத்தைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">சட்டங்களை ஏற்றுகிறது</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">திட்டத்தை ஏற்றுவது சாத்தியமில்லை</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">காட்சிகள் அனைத்தும் சிதைந்திருப்பதாலோ அல்லது படங்கள் எதிர்பார்க்கப்படும் இடத்தில் இல்லாததாலோ அவற்றை ஏற்றுவது சாத்தியமில்லை.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">சில காட்சிகளை ஏற்ற முடியவில்லை</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">காட்சிகளைக் கண்டுபிடிக்க முடியாததாலோ அல்லது அவை சிதைந்திருப்பதாலோ அவற்றை ஏற்றுவது சாத்தியமில்லை.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">மேலோட்டைப் பயன்படுத்த குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">வேமுபநிகு இல்லை. பாதை சூழல் மாறிகளில் அதைச் சேர் அல்லது இருப்பிடத்தை அமைக்க விருப்பங்கள் > கூடுதல்களைத் திறக்க இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">வபவசிகி இல்லை. பாதை சூழல் மாறிகளில் அதைச் சேர் அல்லது இருப்பிடத்தை அமைக்க விருப்பங்கள் > கூடுதல்களைத் திறக்க இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">இந்த பயன்பாடு அதன் தற்காலிக சேமிப்பை சேமிக்கும் டிரைவில் போதுமான இடம் இல்லை ({0}% மீதம்). சிறிது இடத்தை விடுவிக்க விருப்பங்கள் > தற்காலிக கோப்புகளைத் திறக்க இங்கே சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">நீங்கள் வெவ்வேறு ஒஅபுகளுடன் பல படங்களை இறக்குமதி செய்ய முயற்சித்தீர்கள், இது ஆதரிக்கப்படவில்லை. அவற்றில் சில இறக்குமதி செய்யப்பட்டன, மற்றவை தனித்தனியாக இறக்குமதி செய்யப்பட வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">நீங்கள் வெவ்வேறு அளவுகளில் பல படங்களை இறக்குமதி செய்ய முயற்சித்தீர்கள், இது ஆதரிக்கப்படவில்லை. அவற்றில் சில இறக்குமதி செய்யப்பட்டன, மற்றவை தனித்தனியாக இறக்குமதி செய்யப்பட வேண்டும்.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">தற்காலிக சேமிப்பிலிருந்து காட்சிகளை மீட்டெடுக்கிறது</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">காட்சிகளைப் புதுப்பித்தல்</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">இறக்குமதி செய்யத் தயாராகிறது</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">காட்சிகளை இறக்குமதி செய்கிறது</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">நகல்களை பகுப்பாய்வு செய்கிறது</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">சரிசெய்தல் தாமதம்</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">நகல்களை நிராகரித்தல்</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">காட்சிகளை நிராகரித்தல்</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">கோப்புறைகளை நிராகரித்தல்</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">காட்சிகளை மறுஅளவிடுதல்</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">காட்சிகளை செதுக்குதல்</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">காட்சிகளுக்கு மேலடுக்கைப் பயன்படுத்துதல்</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">தலைப்பு சட்டத்தை உருவாக்குதல்</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">காட்சிகளுக்கு புரட்டு/சுழற்சி செய்தல்</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">தாமதத்தை மாற்றுதல்</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">மாற்ற விளைவைப் பயன்படுத்துதல்</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">சேமிக்கத் தயாராகுதல்</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">ஏற்றுவதை நீக்கறல்செய்து திட்டத்தை நிராகரி.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">சரியான சுழலை கண்டறிதல்</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">சுழலில் பயன்படுத்தப்படாத காட்சிகளை நிராகரித்தல்</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">சட்டம்:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">படத்தைத் திற</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">கோப்புறையை ஆராயுங்கள்</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">சட்டகத்திற்குச் செல்</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">சட்டகத்திற்குச் செல்லவும் (0 முதல் {0} வரை)</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">இவ்வாறு சேமி...</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">தேர்ந்தெடுக்கப்பட்ட காட்சிகள் அகற்று</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">புதிய வலைநிழற்படக் கருவி பதிவு</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">New webcam recording</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">புதிய பலகைப் பதிவு</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">புதிய திட்டம்</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">ஊடக அல்லது திட்டத்திலிருந்து புதியது</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">புதிய பதிவு உருவாக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">புதிய வலைநிழற்படக் கருவி பதிவு உருவாக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">புதிய பலகை பதிவு உருவாக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">புதிய திட்டம் உருவாக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">செயல்தவிர் செயல்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">மீட்டமை செயல்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">மீண்டும் செய் செயல்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} சட்டகம்(கள்)) வெட்டப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} சட்டகம்(கள்) நகலெடுக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} சட்டகம்(கள்) ஒட்டப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">பெரிதாக்கு {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">அனைத்து காட்சிகளும் தேர்ந்தெடுக்கப்பட்டன</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">சட்டகம் #{0} தேர்ந்தெடுக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">தேர்வு தலைகீழானது</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">அனைத்து காட்சிகளும் தேர்வு நீக்கப்பட்டன</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} காட்சி(கள்) நீக்கப்பட்டன</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">சட்டகப் பட்டியல் தலைகீழாக மாற்றப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">யோ-யோ விளைவு பயன்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">சட்டகம்(கள்) இடதுபுறமாக நகர்த்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">சட்டகம்(கள்) வலதுபுறமாக நகர்த்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">காட்சிகள் மறுஅளவிடப்பட்டன</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">காட்சிகள் செதுக்கப்பட்டன</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">காட்சிகள் புரட்டப்பட்டன/சுழற்றப்பட்டன</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">சுழற்றும் செயல் தேர்ந்தெடுக்கப்பட்ட காட்சிகளுக்குப் பொருந்தும், மேலும் சுழற்றும் செயல் அனைத்து காட்சிகளுக்கும் பொருந்தும்</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">இந்தச் செயல் அனைத்திற்கும் பொருந்தும் காட்சிகள்</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">இந்த செயல் தேர்ந்தெடுக்கப்பட்ட காட்சிகளுக்குப் பொருந்தும்</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">உங்கள் அமைப்புகளைப் பொறுத்து, இந்த செயல் அனைத்து அல்லது தேர்ந்தெடுக்கப்பட்ட காட்சிகளுக்கும் பொருந்தும்</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">முதல் காட்சியை அடிப்படையாகக் கொண்ட அனைத்து காட்சிகளுக்கும் சினிமாவரைபடம் பொருந்தும்</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">மேலடுக்கு பயன்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">தலைப்பு சட்டகம் உருவாக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">தலைப்பு சட்டகம் தேர்ந்தெடுக்கப்பட்ட சட்டகத்துக்கு முன் செருகப்படும்</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">கால அளவு (தாமதம்) மாற்றப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">மாற்றம் செருகப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">சட்டகவிகிதம் குறைக்கப்பட்டது</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">நகல்கள் அகற்றப்பட்டன</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">மறை</s:String>\n    <s:String x:Key=\"S.Action.Apply\">இடு</s:String>\n    <s:String x:Key=\"S.Action.Open\">திற</s:String>\n    <s:String x:Key=\"S.Action.Save\">சேமி</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">நீக்கறல்</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">அண்மைக் கால திட்டங்கள்</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">அண்மைக் கால திட்டங்களைத் தேடுகிறது...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">உருவாக்கப்பட்ட தேதி</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">சட்டக எண்ணிக்கை</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">எந்த திட்டமும் தேர்ந்தெடுக்கப்படவில்லை. ஏற்றுவதற்கு பட்டியலில் இருந்து ஒரு திட்டத்தைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">இந்த திட்டம் ஏற்கனவே இந்த திருத்தி நிகழ்வால் காட்டப்படுகிறது.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">இந்த திட்டம் ஏற்கனவே மற்றொரு திருத்தி நிகழ்வால் திறக்கப்பட்டது. ஒரு திட்டம் ஏற்கனவே வேறொரு திருத்தியில் திறந்திருந்தால் அதை இரண்டாவது முறையாகத் திறக்க முடியாது.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">இடைநிலைப்பலகை உள்ளீடுகள்</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">இடைநிலைப்பலகை உள்ளீடு:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} படம்</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} படங்கள்</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">உள்ளடக்கத்தை ஆராயுங்கள்</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">நீக்கு</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">ஒட்டு நடத்தை</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">தேர்ந்தெடுக்கப்பட்ட சட்டகத்திற்கு முன்</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">தேர்ந்தெடுக்கப்பட்ட சட்டகத்திற்குப் பிறகு</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">வேறுபாடு</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">ஒஅபு</s:String>\n    <s:String x:Key=\"S.Resize.Options\">விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">புள்ளிகள் (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">சதவீதம் (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">ஒஅபு:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">விகிதத்தை வைத்திருங்கள்.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">தரம்:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">கனவுரு • உயர் தரம்</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">நேரியல் • குறைந்த தரம்</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">அருகில் உள்ள அண்டை புள்ளி • குறைந்த தரம் மற்றும் வேகமானது</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">அளவிடுதல் தரம்.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">மறுஅளவிடு செயலைப் பயன்படுத்த நீங்கள் வேறு மதிப்பைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">புள்ளிகள்</s:String>\n    <s:String x:Key=\"S.Crop.Top\">மேல்:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">இடது:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">கீழே:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">வலது:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">செதுக்கு தேர்வு தற்போதைய சட்ட அளவை விட சிறியதாக இருக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">செதுக்கு தேர்வு 10x10 புள்ளிகளை விட பெரியதாக இருக்க வேண்டும்.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">கிடைமட்டமாகத் திருப்பு</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">செங்குத்தாகத் திருப்பு</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">இடதுபுறம் 90º சுற்று</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">வலதுபுறம் 90º சுற்று</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">காட்சிவிகித்ததைக் குறை</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">காரணி:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">எண்ணிக்கையை அகற்று:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">தாமத சரிசெய்தல்:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">சரிசெய்யாதே</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">முந்தைய சட்டத்துடன் கூட்டுத்தொகை</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">மீதமுள்ள சட்டங்களுடன் சமமாக கூட்டுத்தொகை</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">முழு திட்டத்தின் காட்சி வீதத்தைக் குறை.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">விருப்பம் தேர்வு செய்யப்படாவிட்டால், நீங்கள் தொடர்ச்சியான பல காட்சிகளைத் தேர்ந்தெடுக்க வேண்டும்,&#10;அகற்றும் காரணியை விட அதிகமாக இருக்கும்.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">அது ஒவ்வொரு {1} காட்சி(களுக்குப் பிறகும்) அகற்றப்பட்டவற்றை எண்ணாமல் {0} காட்சி(களை) அகற்றும்.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">காட்சி வீதக் குறைப்பைப் பயன்படுத்த நீங்கள் காட்சிகளைத் தேர்ந்தெடுக்க வேண்டும் (அல்லது முழு திட்டத்திற்கும் பயன்படுத்த விருப்பத்தைச் சரிபார்).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">தேர்ந்தெடுக்கப்பட்ட காட்சிகளின் பட்டியல் தொடர்ச்சியாக இருக்க வேண்டும். தேர்ந்தெடுக்கப்பட்டவற்றில் சில காட்சிகளைத் தேர்வு செய்யாமல் விட முடியாது.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">நற்பொருத்தம் எதையும் அகற்ற, காட்சிகளின் தேர்வு அகற்றும் காரணியை விட அதிகமாக இருக்க வேண்டும்.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">நகல்களை அகற்று</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">ஒற்றுமை (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">சட்டகம் அகற்று:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">முதல் சட்டகத்தை அகற்று</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">கடைசி சட்டகத்தை அகற்று</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">தாமத சரிசெய்தல்:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">சரிசெய்யாதே</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">சராசரியைப் பயன்படுத்து</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">தொகையைப் பயன்படுத்து</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">இந்தச் செயல் ஒவ்வொரு சட்டகத்தையும் (புள்ளி வாரியாக) பகுப்பாய்வு செய்து, அதன் உடனடி அண்டை புள்ளிக்கு குறைந்தஅளவு {0}% ஒத்தவற்றை நீக்குகிறது.&#x0d;காட்சிகளின் தாமதத்தை (கண்காட்சியின் காலம்) சரிசெய்ய விரும்பினால் நீங்கள் தேர்வு செய்யலாம்.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">மென்மையான சுழற்சியை உருவாக்கு</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">முதலில் புறக்கணி:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">இதிலிருந்து ஒப்பிடு:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">முடிவு</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">தொடக்கம்</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">தொடக்க சட்டகத்திற்கு குறைந்தஅளவு {0} % ஒத்த ஒரு சட்டகத்தைக் கண்டுபிடித்து, பின்னர் வரும் அனைத்து காட்சிகளையும் நீக்குகிறது.&#x0d;சில ஆரம்ப காட்சிகளைப் புறக்கணித்து, தொடக்கத்திலிருந்து (வரம்புக்குப் பிறகு) ஒப்பீட்டைத் தொடங்க அல்லது முடிக்க விரும்பினால் நீங்கள் தேர்வு செய்யலாம்.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">புறக்கணிக்க வேண்டிய காட்சிகளின் எண்ணிக்கை மொத்த காட்சிகளின் எண்ணிக்கையை விட குறைவாக இருக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">தேர்ந்தெடுக்கப்பட்ட அமைப்புகளைப் பயன்படுத்தி மென்மையான சுழற்சியை உருவாக்க இயலாது.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">தேர்ந்தெடுக்கப்பட்ட அமைப்புகளின் அடிப்படையில் உங்களிடம் ஏற்கனவே மென்மையான சுழற்சி உள்ளது.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">உரை</s:String>\n    <s:String x:Key=\"S.Caption.Font\">எழுத்துரு</s:String>\n    <s:String x:Key=\"S.Caption.Family\">குடும்பம்:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">பாணி:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">எடை:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">அளவு:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">நிறம்:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">பின்னணி நிறம்:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">சுருக்கம்</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">தடிமன்:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">தளவமைப்பு</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">செங்குத்து:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">கிடைமட்டம்:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">சீரமைப்பு:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">ஒப்பனை:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">விசை அழுத்தங்கள்</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">விசைகள்</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">பிரிப்பான்:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">உங்கள் விசை அழுத்தங்களைத் திருத்து</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">கட்டு, மாற்று, உயர்த்து மற்றும் சாளரங்கள் விசைகளை மாற்றியமைப்பாளர்களாகப் பயன்படுத்தாமல் புறக்கணி.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">இது \"கட்டுப்பாடு\" போன்ற ஒற்றை விசை அழுத்தங்களைப் புறக்கணிக்கும், ஆனால் அது \"கட்டுப்பாடு + சி\" ஐ புறக்கணிக்காது.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">மென்பொருள் உருவகப்படுத்தப்பட்ட விசை அழுத்தங்களைப் புறக்கணி.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">பயனர் உள்ளீட்டு விசை அழுத்தங்களை மட்டும் பதிவு செய்யவும்.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">விசை அழுத்தங்களின் கண்காட்சியை நீட்டி.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">விசை அழுத்தங்களின் கண்காட்சியை சீக்கிரமாகத் தொடங்குங்கள்.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">இதால் (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">உங்கள் பதிவில் எந்த விசை அழுத்தங்களும் இல்லை.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">திரையைவபவக்கு - விசை அழுத்தங்கள் திருத்தி</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">சட்டக எண்</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">கண்டறியப்பட்ட விசை அழுத்தங்கள்</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">விசை அழுத்தங்களை அகற்று</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">ஒரு விசை அழுத்தத்தைச் சேர்:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">சிறிய எழுத்து.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">இது சிறிய எழுத்து ஒற்றை எழுத்துக்களைச் செருக உங்களை இசைவுக்கிறது.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">பயன்முறை</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">எழுதுகோல்</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">அழிப்பான்</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">அடி அழிப்பான்</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">அகலம்:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">உயரம்:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">குறிப்பு:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">செவ்வகம்</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">நீள்வட்டம்</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">மற்றவை:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">முன்னிலைபடுத்தி.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">வளைவுக்குப் பொருத்து.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">நீங்கள் தேர்ந்தெடுத்த காட்சிகளுக்கு எந்த வரைபடங்களும் பயன்படுத்தப்பட வேண்டியதில்லை.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">இலவச வரைபடத்தைப் பயன்படுத்த குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">செருகு</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">வடிவங்கள்</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">ஆரம்:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">கோடுகள்:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">கோடுகளின் அளவையும் இடைவெளிகளின் அளவையும் கட்டுப்படுத்துகிறது.&#10;நீங்கள் ஒரு விரிவான கோடு பாணியை உருவாக்க பல அளவுகளை அமைக்கலாம்.&#10;இயல்புநிலை \"1 0\" அல்லது காலியாக உள்ளது, அதாவது இடைவெளிகள் இல்லாத கோடு.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">சுழற்சியை மீட்டமை</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">நீக்கு</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">நிரப்பு</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">சுட்டி நிகழ்வுகள்</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">சுட்டி சிறப்பம்சமாக வண்ணம்:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">இடது பொத்தான் நிறம்:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">நடு பொத்தான் நிறம்:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">வலது பொத்தான் நிறம்:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">முதல் கூடுதல் பொத்தான் நிறம்:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">2வது கூடுதல் பொத்தான் நிறம்:</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">படம்</s:String>\n    <s:String x:Key=\"S.Watermark.File\">கோப்பு:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">எதுவும் தேர்ந்தெடுக்கப்படவில்லை</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">ஒளிபுகாநிலை:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">ஒரு படத்தைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">தேர்ந்தெடுக்கப்பட்ட சட்டகத்திற்குப் பயன்படுத்த நீங்கள் ஒரு படத்தைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">நீர்குறியைப் பயன்படுத்த நீங்கள் குறைந்தஅளவு ஒரு சட்டகத்தையாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">தோற்றம்</s:String>\n    <s:String x:Key=\"S.Border.Info\">படத்தை விரிவாக்க எதிர்மறை மதிப்புகளைப் பயன்படுத்து. அவ்வாறு செய்யும்போது, ​​எல்லை அனைத்து காட்சிகளுக்கும் பயன்படுத்தப்படும்.&#10;எதிர்மறை மதிப்பு பயன்படுத்தப்படாவிட்டால், எல்லை தேர்ந்தெடுக்கப்பட்ட காட்சிகளுக்கு மட்டுமே பயன்படுத்தப்படும்.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">நிழல் நிறம்:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">பின்னணி நிறம்:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">திசை:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">மங்கலான ஆரம்:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">ஆழம்:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">உண்டபுள்ளி</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">மங்கலான</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">இருட்டடிப்பு</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">ஒளிரச் செய்</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">மறைப்பு விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">புள்ளி அளவு:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">மங்கலான நிலை:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">இருட்டடிப்பு நிலை:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">மின்னல் நிலை:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">ஒவ்வொரு உண்டபுள்ளிக்கும் தொகுதிக்கும் சராசரி நிறத்தைக் கணக்கிடுங்கள்.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">தேர்வின் தலைகீழ்க்கு தெளிவின்மையைச் சேர்.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">மென்மை</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">சட்டத்தின் எந்தப் பகுதியைத் தெளிவின்மையாக்க வேண்டும் என்பதைத் தேர்ந்தெடுக்க தேர்வு கருவியைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">தெளிவாக இருக்க வேண்டிய செவ்வகத்தைத் தேர்ந்தெடுக்க தேர்வு கருவியைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">நீங்கள் எதையும் தேர்ந்தெடுக்கவில்லை. தெளிவற்றதாக இருக்க வேண்டிய செவ்வகத்தைத் தேர்ந்தெடுக்க தேர்வு கருவியைப் பயன்படுத்து.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">வகை</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">பட்டி</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">உரை</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">துல்லியம்:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">நிமையங்கள்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">நொடிகள்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">மில்லிநொடிகள்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">சதவீதம்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">காட்சி எண்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">உண்மையான தேதி/நேரம்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">தனிப்பயன்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">மொத்தத்தைக் காட்டு.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">வடிவம்:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">வடிவம்</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = மில்லி நொடிகள்</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = நொடிகள்</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = நிமையங்கள்</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = சதவீதம்</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = சட்ட எண்</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">மொத்தங்கள்:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">எடுத்துக்காட்டுகள்:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">நீங்கள் .வலை கட்டமைப்பிலிருந்து தேதி மற்றும் நேர வடிவமைப்பைப் பயன்படுத்தலாம்.&#x0d;கீழே உள்ள இந்த இரண்டு இணைப்புகளில் விவரக்குறிப்பு கிடைக்கிறது.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">நிலையான வடிவங்கள்</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">தனிப்பயன் வடிவங்கள்</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">இதிலிருந்து எண்ணிக்கை:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">தேர்ந்தெடுக்கப்பட்ட எண்ணிலிருந்து சட்ட எண்ணை எண்ணத் தொடங்குகிறது.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">நோக்குநிலை:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">தாமதப் புதுப்பிப்பு</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">தாமதப் பயன்முறை:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">மேலெழுதும் (ms இல்)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">அதிகரி அல்லது குறை (ms இல்)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">அளவிடுதல் (% இல்)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">புதிய மதிப்பு</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">ஒரு சட்டத்திற்கு குறைந்தஅளவு 10ms.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">மதிப்பைக் குறைத்தல்/அதிகரித்தல்</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">அளவிடல் மதிப்பு</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">இந்தப் புதிய மதிப்பு தேர்ந்தெடுக்கப்பட்ட அனைத்து காட்சிகளின் கால அளவையும் (தாமதம்) மாற்றும். மதிப்பு 10ms முதல் 25500ms வரை இருக்கலாம்.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">இந்த மதிப்பு தேர்ந்தெடுக்கப்பட்ட ஒவ்வொரு சட்டகத்தின் கால அளவையும் (தாமதம்) குறைக்கும்/அதிகரிக்கும்.&#x0d;-10000ms முதல் 10000ms வரையிலான மதிப்பைத் தேர்ந்தெடுப்பதன் மூலம் நீங்கள் குறைக்கலாம்/அதிகரிக்கலாம், ஆனால் ஒவ்வொரு சட்டகத்தின் இறுதி கால அளவு 10ms முதல் 25500ms வரையிலான மதிப்பாகக் கட்டுப்படுத்தப்படும்</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">தேர்ந்தெடுக்கப்பட்ட ஒவ்வொரு சட்டகத்தின் கால அளவையும் (தாமதம்) சதவீத மதிப்பால் அளவிடவும்.&#x0d;1% முதல் 1000% வரையிலான மதிப்பைத் தேர்ந்தெடுப்பதன் மூலம் நீங்கள் ஒவ்வொரு சட்டகத்தின் கால அளவையும் அளவிடலாம், ஆனால் ஒவ்வொரு சட்டகத்தின் இறுதி கால அளவு 10ms முதல் 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">எழுதுகோலை பயன்படுத்தி நிலையாக இருக்கக்கூடாத (காட்சிகளுக்கு இடையில் மாற வேண்டிய) புள்ளிகளைத் தேர்ந்தெடுக்க, அவற்றின் மேல் வண்ணம் தீட்டு.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">மாற்றம் நீளம்</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">மாற்றம் இடைவெளி</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">இதற்கு மங்கல்...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">அடுத்த சட்டகம்</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">ஒரு நிறம்</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">நிறம்</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">தேர்ந்தெடுக்கப்பட்ட சட்டத்திற்கும் அடுத்த சட்டத்திற்கும் இடையில் மாற்றம் பயன்படுத்தப்படும்.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">கோப்பு வகை மற்றும் முன்னமைவு</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">வெளியீட்டு கோப்பின் வடிவம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">தற்போது காட்டப்படும் அனைத்து அமைப்புகளையும் வைத்திருக்கும் ஏற்றுமதி முன்னமைவு.&#10;கீழே உள்ள பொத்தான்கள் வழியாக உங்கள் ஏற்றுமதி முன்னமைவுகளை நிர்வகி.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">அசைவுட்டப்பட்ட படம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">காணொளி</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">காட்சிகள்</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">பிற</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">அஎபிவ</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">அசைவுட்டப்பட்ட எடுத்துசெல்லத்தக்க பிணைய வரைகலை</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">வபவ</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">வரைகலை பரிமாற்ற வடிவம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">வலைப</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">வலை படம்</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">எவிஐ</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">ஒலி காணொளி இடைச்செருகல்</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">எம்கேவி</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">மட்ரோச்கா</s:String> \n    <s:String x:Key=\"S.SaveAs.Mov\">நகர்</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">விரைவுநேர கோப்பு வடிவம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">திப4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">திபநிகு-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">வலைதி</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">வலை திரைப்படம்</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">இவம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">இருமம்வரைபடம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">கூபுநிகு</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">கூட்டு புகைப்பட நிபுணர்கள் குழு</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">எபிவ</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">எடுத்துசெல்லதக்க பிணைய வரைகலை</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">திட்டம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">திரையைவபவக்கு திட்டம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">பிஎச்டி</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">நிழற்படகடை கோப்பு</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">முன்னமைவுகள்:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">இயல்புநிலை</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">புதிய ஏற்றுமதி முன்னமைவைச் சேர்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">தற்போதைய அமைப்புகளை இந்த ஏற்றுமதி முன்னமைவில் சேமி.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">அடிப்படை ஏற்றுமதி முன்னமைவு அமைப்புகளைத் திருத்து.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">தற்போது தேர்ந்தெடுக்கப்பட்ட ஏற்றுமதி முன்னமைவை அகற்று.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">இந்த ஏற்றுமதி முன்னமைவின் அமைப்புகளை அதன் இயல்புநிலைகளுக்கு மீட்டமை.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">முன்னமைவை நீக்குதல்</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">நீங்கள் நிச்சயமாக முன்னமைவை நீக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">இந்தச் செயலைச் செயல்தவிர்க்க முடியாது.&#10;&#10;தேர்ந்தெடுக்கப்பட்ட முன்னமைவை நீக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">முன்னமைவை மீட்டமைத்தல்</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">முன்னமைவை மீட்டமைக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">இந்தச் செயலைச் செயல்தவிர்க்க முடியாது.&#10;&#10;தேர்ந்தெடுக்கப்பட்ட முன்னமைவை அதன் இயல்புநிலை அமைப்புகளுக்கு மீட்டமைக்க விரும்புகிறீர்களா?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">குறியாக்கி</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">குறியாக்கி மற்றும் அளப்பான்</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">வெளியீட்டு கோப்பை உருவாக்குவதற்கு குறியாக்கி பொறுப்பு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">திரையைவபவக்கு</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">உள்ளமைக்கப்பட்ட குறியாக்கி.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">கேசிஒய் மென்</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">கேசிஒய் மென் வபவ குறியாக்கி.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">கணினி</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">குறியாக்கி கணினியால் கிடைக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">வேமுதிபநிகு</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">வெளிப்புற குறியாக்கி, வேமுதிபநிகு.நிறுவ ஆல் உருவாக்கப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">வபகீ</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">வெளிப்புற குறியாக்கி, வப.கீ ஆல் உருவாக்கப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">குறியாக்கி விருப்பங்கள்</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">மேம்பட்ட பயன்முறையை இயக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">குறியாக்கியைக் கட்டுப்படுத்த அளவுருக்களை கைமுறையாக உள்ளிடவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">அளவுருக்கள்:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">வேமுதிபநிகு க்கு அனுப்பப்படும் அளவுருக்களின் பட்டியல்.&#10;&#10;சிறப்பு அளவுருக்கள்:&#10;{I} என்பது உள்ளீட்டு பாதை (சட்டங்கள்).&#10;{O} என்பது வெளியீட்டு பாதை (ஏற்றுமதி செய்யப்பட்ட கோப்பு).&#10;{W} என்பது சட்டத்தின் அகலம்.&#10;{H} என்பது சட்டம்.List of parameters that will be passed to FFmpeg.&#10;&#10;Special parameters:&#10;{I} is the input path (the frames).&#10;{O} is the output path (the exported file).&#10;{W} is the width of the frame.&#10;{H} is the height of the frame.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">2-கடவு மூலம் குறியாக்கம் செய்ய, '-pass 2' ஐச் சேர்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">முன்னோட்டம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">வேமுதிபநிகு க்கு அனுப்பப்படும் அளவுரு பட்டியலை முன்னோட்டமிடுங்கள்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">குறிமறைகுறி ஆவணங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">ஆவணங்களை வடிவமை</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">ஆவணங்களை வடிகட்டு</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">வப விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">வண்ணக் குறைப்பு வழிமுறை (அளவைப்படுத்தல்).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">நரம்பு வலையமைப்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">உயர் நம்பகத்தன்மை அளவீடு. மெதுவாக, ஆனால் அதிக அளவு வண்ணங்களுக்கு நல்லது.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">எட்டுமரம்</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">குறைந்த வண்ணங்களைக் கொண்ட அசைவுட்டம்களுக்கு நல்லது. வேகமானது, ஆனால் வண்ணப் பட்டையை உருவாக்கக்கூடும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">நடுவன் வெட்டு</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">எட்டுமரத்தை விடக் குறைவானது மற்றும் மெதுவாக.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">சாம்பலளவுகோல்</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">நிலையான சாம்பலளவுகோல் தட்டைப் பயன்படுத்துகிறது, எனவே இது மிகவும் வேகமானது.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">அதிகம் பயன்படுத்தப்படும் வண்ணங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">சட்டங்களில் அதிகம் பயன்படுத்தப்படும் வண்ணங்களை எடுத்துக்கொள்வது எளிது.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">மாதிரிஎடுத்தல்:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">மாதிரி காரணி:&#10;1 இன் மதிப்பு சிறப்பாகத் தோற்றமளிக்கும் வப ஐ விளைவிக்கும், ஆனால் அதை வழங்குவது மெதுவாக இருக்கும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">தரம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">நிறங்கள்:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">அதிகஅளவு எண்ணிக்கையிலான வண்ணங்கள் (ஒவ்வொன்றிற்கும் சட்டகம்).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">உலகளாவிய வண்ண அட்டவணையைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">வப இன் தரம் மற்றும்/அல்லது அளவைக் குறைக்கலாம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">சிறந்தது</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">வேகமானது</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">இன்னும் வேகமான குறியீட்டு செயல்முறையைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">வப இன் தரத்தைக் குறைக்கலாம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">சுழல்:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">சுழல் வப.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">எப்போதும் மீண்டும் செய்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">மறுநிகழ்வு எண்ணிக்கை.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">வெளிப்படைத்தன்மையை இயக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">முழு வெளிப்படைத்தன்மை பயன்முறையை இயக்குகிறது, இது வப இன் பின்னணியை முழுமையாக வெளிப்படையானதாக மாற்றுகிறது.&#10;இந்த விருப்பம் இயக்கப்பட்டால்,நிற விசை மாற்றம் தவிர்க்கப்படும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">வெளிப்படையாகக் காட்ட வேண்டிய நிறத்தைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">ஒரு வண்ணம் தேர்ந்தெடுக்கப்பட்டால், அது வெளிப்படையானதாக மாற்றப்படும், மேலும் அது உருவாக்கப்பட்ட வப இல் வெளிப்படையானதாகத் தோன்றும்.&#10;எந்த நிறமும் தேர்ந்தெடுக்கப்படவில்லை என்றால், அனைத்து வெளிப்படையான வண்ணங்களும் (ஆன்னா = 0%) சாதாரணமாக வெளிப்படையானதாகத் தோன்றும்.If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">மாறாத புள்ளிகளைக் கண்டறியவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">சட்டங்களுக்கு இடையில் மாறாத புள்ளிகளை பகுப்பாய்வு செய்து கண்டறிவதன் மூலம்,&#10;தேவையான பகுதிகளை மட்டும் வப இல் சேமிக்க முடியும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">இந்த புள்ளிகளை ஒரு நிற விசையால் மாற்றவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">மறுநிகழும்/மாற்றப்படாத புள்ளிகள் இந்த நிற விசையால் மாற்றப்படும்,&#10; இதனால் ஒரு சட்டகத்திற்கு குறைவான வண்ணங்களைப் பயன்படுத்த முடியும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">நிற விசை:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">கலக்கி:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">பேயர் அளவுகோல்:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">அளப்பான்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">பின்னணி நிறம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">தேர்ந்தெடுக்கப்பட்ட அளப்பானால் ஒளிபுகாவாகக் கருதப்படும் ஆன்னா (வெளிப்படைத்தன்மை) கொண்ட புள்ளிகள், அளவிடப்பட்ட நிறத்தைப் பெறுவதற்கு முன்பு இந்த நிறத்துடன் கலக்கப்படும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">ஆன்னா வரம்பு:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">அளவிடப்பட்ட நிறம் வெளிப்படையானதாக இருக்கும் உள்ளீட்டு ஆன்னா மதிப்பைத் தீர்மானிக்கிறது.&#x0d;&#x0a;0 எனில், முடிவு ஒருபோதும் வெளிப்படைத்தன்மையைக் கொண்டிருக்காது.&#x0d;&#x0a;255 எனில், முழுமையாக வெளிப்படையான புள்ளிகள் மட்டுமே வெளிப்படையானதாகக் கருதப்படும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">வெள்ளை வரம்பு:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">முடிவின் நிறத்தை வெள்ளையாகக் கருத்தில் கொள்ள மிகக் குறைந்த உள்ளீட்டு ஒளிஅளவை தீர்மானிக்கிறது.&#x0d;&#x0a;இது முடிவின் ஒளிஅளவை பாதிக்கிறது. பிழை பரவல் கலக்கம் இந்த அளவுருவின் மதிப்பை ஈடுசெய்யக்கூடும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">நேரடி வரைபடம்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">சரிபார்க்கப்படும்போது, ​​அளவிடப்பட்ட நிறம் அருகிலுள்ள தட்டு உள்ளீட்டைத் தேடுவதற்குப் பதிலாக நேரடி வரைபடத்தால் தீர்மானிக்கப்படுகிறது.&#x0d;&#x0a;இது அளவீட்டை விரைவுபடுத்துகிறது, ஆனால் அதிக மாறுபாடு முடிவில் முடிவடையும். பிழை பரவல் கலக்கம் இந்த அளவுருவின் மதிப்பை ஈடுசெய்யக்கூடும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">தட்டு அளவு:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">ஒரு சட்டகத்திற்கு அதிகஅளவு தட்டு அளவை தீர்மானிக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">தனிப்பயன் இருமம் நிலை.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">சரிபார்க்கப்படும்போது, ​​இருமம் அளவை கைமுறையாக உள்ளமைக்க முடியும்.&#x0d;&#x0a;⚠️ முன்னறிவிப்பு: மிக உயர்ந்த இருமம் நிலைக்கு நிறைய நினைவகம் தேவைப்படலாம்!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">அதிக மதிப்பு என்பது அதிக துல்லியம், பெரிய இலக்கு வண்ண இடம், மெதுவான செயலாக்கம் மற்றும் அதிக நினைவக பயன்பாட்டைக் குறிக்கிறது.&#x0d;&#x0a;எடுத்துக்காட்டாக, 1 எனில், முடிவில் 8 வண்ணங்களுக்கு மேல் இருக்கக்கூடாது, அல்லது 2 எனில், 64 வண்ணங்களுக்கு மேல் இருக்கக்கூடாது.&#x0d;&#x0a;எட்டுமரம் மற்றும் வு அளப்பான்களுக்கு இது அதிகஅளவு எண்ணிக்கையிலான ஒற்றைவண்ண நிழல்களையும் பாதிக்கிறது.&#x0d;&#x0a;எடுத்துக்காட்டாக, 5 (இது வு அளப்பானுக்கு இயல்புநிலை) ஆக இருந்தால், 32 ஒற்றைவண்ண நிழல்களை மட்டுமே வேறுபடுத்த முடியும்.&#x0d;&#x0a;⚠️ எச்சரிக்கை: வு அளப்பான் அதிகஅளவு மதிப்புடன் குறைந்தது 650 மெபை ஐப் பயன்படுத்துகிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">நேரியல் வண்ண இடம்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">சரிபார்க்கப்படும்போது, ​​சில செயல்பாடுகள் (பின்னணி வண்ணத்துடன் ஆன்னா கலத்தல், அளவீடல், கலக்கம், தட்டில் அருகிலுள்ள வண்ணங்களைத் தேடுதல்) எசிபநீ வண்ண இடத்தில் அல்லாமல் நேரியல் வண்ண இடத்தில் செய்யப்படுகின்றன.&#x0d;&#x0a;நேரியல் வண்ண இடத்தில் வேலை செய்வது மெதுவாக இருக்கும், ஆனால் சிறந்த தரமான முடிவை வழங்குகிறது, குறிப்பாக அளப்பான் ஒரு சில வண்ணங்களை மட்டுமே பயன்படுத்தும் போது.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ குறிப்பு: ஒரு சில வண்ணங்களை மட்டுமே பயன்படுத்தும் போது, ​​மறுஅளவிடப்பட்ட முன்னோட்டத்தின் ஒளிஅளவு தவறாக இருக்கலாம், ஏனெனில் சாபிஎப் எசிபநீ வண்ண இடத்தில் மறுஅளவிடுதலை செய்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">கருப்பு மற்றும் வெள்ளை</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">கருப்பு மற்றும் வெள்ளை வண்ணங்களுடன் 1 பிபீபீ தட்டு சரி செய்யப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">சாம்பலளவுகோல் 4 வண்ணங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">4 சாம்பலளவுகோல் உள்ளீடுகளுடன் 2 பிபீபீ தட்டு சரி செய்யப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">சாம்பலளவுகோல் 16 வண்ணங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">16 சாம்பலளவுகோல் உள்ளீடுகளுடன் நிலையான 4 பிபீபீ தட்டு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">சாம்பலளவுகோல் 256 வண்ணங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">256 சாம்பலளவுகோல் உள்ளீடுகளுடன் நிலையான 8 பிபீபீ தட்டு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">கணினி இயல்புநிலை 4 பிபீபீ தட்டு</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">நிலையான 16 எசிபநீ வண்ணங்களைப் பயன்படுத்தி 4 பிபீபீ தட்டு சரி செய்யப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">கணினி இயல்புநிலை 8 பிபீபீ தட்டு</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">'வலை-பாதுகாப்பான' வண்ணங்கள் மற்றும் வெளிப்படைத்தன்மை உட்பட 8 பிபீபீ தட்டு சரி செய்யப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">சிபநீ 332 தட்டு</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">சிபநீ 332 வண்ண இடத்தைப் பயன்படுத்தி 8 பிபீபீ தட்டு சரி செய்யப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">எட்டுமரம் அளப்பான்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">எட்டுமரம் வழிமுறையைப் பயன்படுத்தி ஒவ்வொரு சட்டத்திற்கும் தட்டு மேம்படுத்துதல்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">நடுவன் வெட்டு அளப்பான்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">நடுவன் வெட்டு செயல்முறை மூலம் ஒவ்வொரு சட்டத்திற்கும் தட்டுகளை மேம்படுத்துதல்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">வு அளப்பான்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">சியாவோலின் வூவின் செயல்முறை மூலம் ஒவ்வொரு சட்டத்திற்கும் தட்டுகளை மேம்படுத்துதல்.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">கலக்கம்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">வலிமை:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">கலக்கத்தின் வலிமை அல்லது வலிமையை தானாக அளவீடு செய்ய 0.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">விதை:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">ஒரு குறிப்பிட்ட சீரற்ற கலக்கம் வடிவத்தை உருவாக்கப் பயன்படுத்தப்படும் ஒரு முழு எண் விதை. &#x0d;&#x0a;ஒவ்வொரு சட்டத்திற்கும் ஒரு சீரற்ற விதையைப் பயன்படுத்த காலியாக விடவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">எதுவுமில்லை</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">காட்சிகள் கலக்கம் இல்லாமல் அளவிடப்படுகின்றன.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">பாம்பு செயலாக்கம்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">சரிபார்க்கப்படும்போது, ​​பிழை பரவல் திசை ஒரு வரியிலிருந்து மற்றொரு வரிக்கு மாற்றப்படுகிறது.&#x0d;&#x0a;இது பிழை பரவல் dithering இன் சிற்றலை விளைவைக் குறைக்க உதவுகிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">பேயர் 2x2 (வரிசைப்படுத்தப்பட்டது)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">2x2 பேயர் அணி வடிவம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">பேயர் 3x3 (வரிசை செய்யப்பட்டது)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">3x3 பேயர் அணி வடிவம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">பேயர் 4x4 (வரிசை செய்யப்பட்டது)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">T4x4 பேயர் அணி வடிவம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">பேயர் 8x8 (வரிசை செய்யப்பட்டது)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">8x8 பேயர் அணி வடிவம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">புள்ளியிடப்பட்ட அரைதொனி (வரிசை செய்யப்பட்டது)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">புள்ளியிடப்பட்ட அரை-தொனி வடிவத்துடன் கூடிய 8x8 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">நீல இரைச்சல் (வரிசைப்படுத்தப்பட்டது)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">நீல இரைச்சல் வடிவத்துடன் கூடிய 64x64 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">அட்கின்சன் (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">6 பயனுள்ள மதிப்புகளைக் கொண்ட பில் அட்கின்சனின் 4x3 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">பர்க்ச் (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">டி. பர்க்சின் 5x2 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">ஃபிலாய்ட்-ச்டீன்பெர்க் (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">ஃபிலாய்ட் மற்றும் ச்டீன்பெர்க்கின் அசல் 3x2 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">சார்விச்-சூடிச்-நிங்கே (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">சார்விச், சூடிச் மற்றும் நிங்கே ஆகியோரால் உருவாக்கப்பட்ட 5x3 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">சியரா 3 (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">ஃபிராங்கி சியராவின் 5x3 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">சியரா 2 (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">ஃபிராங்கி சியராவின் 5x2 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">சியரா லைட் (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">ஃபிராங்கி சியராவின் 3x2 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">ச்டீவன்சன்-ஆர்ச் (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">ச்டீவன்சன் மற்றும் ஆர்ச் ஆகியோரால் உருவாக்கப்பட்ட 7x4 அறுகோண அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">ச்டக்கி (பிழை பரவல்)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">ச்டக்கியின் 5x3 அணி.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">சீரற்ற இரைச்சல்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">சீரற்ற வெள்ளை இரைச்சல்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">இடைவெளி சாய்வு இரைச்சல்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">சூத்திரத்தால் உருவாக்கப்பட்ட சீரறான சாய்வு இரைச்சல்.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">முன்னோட்டம்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">தற்போதைய சட்டகத்தைக் காட்டு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">தேர்வுசெய்யப்படும்போது, ​​முன்னோட்டமானது நிலையான பட எடுத்துக்காட்டுக்குப் பதிலாக தற்போதைய சட்டகத்தைக் காட்டுகிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">தற்போதைய அமைப்புகளின் அதிக நினைவகத் தேவை காரணமாக தானியங்கி முன்னோட்டம் முடக்கப்பட்டுள்ளது. முன்னோட்டத்தைப் புதுப்பிக்க சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">முன்னோட்டத்தை உருவாக்கத் தவறிவிட்டது: {0}&#x0d;&#x0a;மீண்டும் அதை உருவாக்க முயற்சிக்க சொடுக்கு.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">அசைவுட்டம் அமைப்புகள்</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">முடிவற்ற வளையம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">தேர்வுசெய்யப்படும்போது, ​​அசைவுட்டம் காலவரையின்றி வளையப்படும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">முன்னோக்கியும் பின்னாலும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">தேர்வு செய்யப்படும்போது, ​​அசைவுட்டம் முன்னும் பின்னுமாக இயக்கப்படும்.&#x0d;&#x0a;இது பெரிய கோப்பு அளவு மற்றும் நீண்ட குறியீட்டு நேரத்தைக் குறிக்கும் காட்சிகளை நகலெடுப்பதன் மூலம் அடையப்படுகிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">மறுநிகழ்வு எண்ணிக்கை:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">அசைவுட்டம் எத்தனை முறை இயக்கப்படும் என்பதைக் குறிப்பிடுகிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">வேறுபாடு காட்சிகளை இசைவு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">தேர்வு செய்யப்படும்போது, ​​மாறாத புள்ளிகள் குறியாக்கத்தின்போது கண்டறிய முயற்சிக்கப்படுகின்றன.&#x0d;&#x0a;ஒரு உகந்த அளப்பானுடன் பயன்படுத்தும் போது, ​​இந்த விருப்பம் ஒரு சட்டகம் 256 க்கும் மேற்பட்ட வண்ணங்களைக் கொண்டிருப்பதை இயலபாக்குகிறது.&#x0d;&#x0a;அளப்பான் வெளிப்படைத்தன்மையைப் பயன்படுத்தாவிட்டால் மற்றும் வெட்டப்பட்ட காட்சிகளை இசைவு தேர்வு செய்யாவிட்டால் இந்த விருப்பம் புறக்கணிக்கப்படும்.&#x0d;&#x0a;&#x0d;&#x0a;⚠️ குறிப்பு: இந்த விருப்பம் வண்ணங்களில் அல்லது கலக்கம் முறையில் குறிப்பிடத்தக்க கலைப்பொருட்களை ஏற்படுத்தக்கூடும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">வேறுபாடு பொறையுடைமை:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\"> மாற்றப்பட்ட புள்ளிகளைக் கண்டறியும்போது அதிகஅளவு பொறையுடைமையைக் குறிப்பிடுகிறது.&#x0d;&#x0a;0 என்றால், எந்த வேறுபாடும் பொறுத்துக்கொள்ளப்படாது.&#x0d;&#x0a;255 என்றால், பின்னர் உள்ளடக்கம் இல்லாமல் சேர்க்கப்படும் காட்சிகள் (அல்லது அவை அனைத்தும் கூட) இருக்கலாம். &#x0d;&#x0a;உகந்த அளப்பானுக்கு நேர்மையமான வரம்பு 0 முதல் 16 வரை இருக்கும். நிலையான வண்ணங்களைக் கொண்டவற்றை கலக்கம் மூலம் ஓரளவு பெரிய மதிப்புகளுடன் பயன்படுத்தலாம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">வேறுபாடு பொறையுடைமை மிக அதிகமாக இருந்தால், முடிவு மோசமான தரத்தைக் கொண்டிருக்கலாம். வேறுபாடு பொறையுடைமையை மீட்டமைக்க சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">வெட்டப்பட்ட காட்சிகள் இசைவு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">சரிபார்க்கப்படும்போது, ​​குறியாக்கி உண்மையான தெளிவுத்திறனை விட சிறிய காட்சிகளைச் சேர்க்க இசைகிறது.&#x0d;&#x0a;இசைவு வேறுபாடு காட்சிகள் தேர்வுநீக்கப்பட்டால், பின்னர் உண்மையான வெளிப்படையான எல்லைகளை மட்டும் வெட்டப்பட இசைவுக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">தற்போதைய உள்ளமைவு ஆன்னாவைப் பயன்படுத்தாததால் வேறுபாடு சட்டங்கள் இசைவு  புறக்கணிக்கப்படுகிறது மற்றும் வெட்டப்பட்ட சட்டங்கள் இசைவு தேர்வு செய்யப்படவில்லை. வெட்டப்பட்ட காட்சிகளை இயக்க சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">தற்போதைய உள்ளமைவு ஆன்னாவைப் பயன்படுத்தாததால் வெட்டப்பட்ட சட்டங்கள் இசைவு எந்த விளைவையும் ஏற்படுத்தாது, மேலும் வெட்டப்பட்ட சட்டங்கள் இசைவு தேர்வு செய்யப்படவில்லை. வேறுபாடு காட்சிகளை இயக்க சொடுக்கு.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">அஎபிவ விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">கணிப்பு:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">எதுவுமில்லை</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">துணை</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">மேல்</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">சராசரி</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">கலப்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">சுழற்சி அஎபிவ.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">மாறாத புள்ளிகளைக் கண்டறி.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">மாறாத அனைத்து புள்ளிகளையும் வெளிப்படையான வண்ணத்துடன் வண்ணமிடு.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">முன்னமை:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">எதுவுமில்லை</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">இயல்புநிலை</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">படம்</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">புகைப்படம்</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">வரைதல்</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">சின்னம்</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">உரை</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">இழப்பற்ற பயன்முறையைப் பயன்படுத்து.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">பயன்முறை:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">இயல்பான</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">மேம்பட்டது</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">குறியாக்கி அளவுருக்களை உள்ளமைக்கும் முறை:&#10;இயல்பான: நிலையான இமு கட்டுப்பாடுகளைப் பயன்படுத்தவும்.&#10;மேம்பட்டது: அளவுருக்களை தட்டச்சு செய்ய உரைப் பெட்டியைப் பயன்படுத்து.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">குறிமறைகுறி:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">மூல புள்ளிகளை வெளியீட்டு கோப்பாக&#10; மாற்றுவதற்கு பொறுப்பான காணொளி குறியாக்கி.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">முன்னமைவு:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">எதுவுமில்லை</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Placebo\">மருந்துப்போலி</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">மிகவும் மெதுவாக</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">மெதுவாக</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">மெது</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">நடுத்தரம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">வேகம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">வேகமான</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">மிக வேகமான</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">அருமையான வேகம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">கடைசி வேகம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">தரம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">சமநிலைப்படுத்தப்பட்டது</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">வேகம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">இயல்புநிலை</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">இழக்கமற்றது</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">இழப்பற்றது (உயர் செயல்திறன்)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">உயர் செயல்திறன்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">உயர் தரம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">நீலகதிர் வட்டு</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">குறைந்த தாமதம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">குறைந்த தாமதம் (உயர் செயல்திறன்)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">குறைந்த தாமதம் (உயர் தரம்)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">குறைக்கும் வேகம் சுருக்க விகிதத்திற்கு,&#10;மெதுவான முன்னமைவுகள் உங்களுக்கு சிறந்த சுருக்கத்தை வழங்கக்கூடும்&#10;(கோப்பு அளவிற்கு தரம்).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">வன்பொருள் வேகம்.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">முடக்கு</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">இயக்கு</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">தானியங்கி தேர்வு</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">ஒதுக்கப்பட்ட வன்பொருளின் பயன்பாட்டைக் கட்டுப்படுத்துகிறது (காணொளி வரைகலை).&#10;அணை: ஒதுக்கப்பட்ட வன்பொருளைப் பயன்படுத்தாது.&#10;இயக்கு: ஒதுக்கப்பட்ட வன்பொருளைப் பயன்படுத்துகிறது மேலும் சிறப்பு குறியாக்கிகளைத் தேர்ந்தெடுக்க உங்களை இசைவுக்கிறது.&#10;தானியங்கி: ஒதுக்கப்பட்ட வன்பொருளைப் பயன்படுத்துகிறது மற்றும் முடிந்தால் சரியான குறியாக்கியைத் தானாகவே தேர்ந்தெடுக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">புள்ளி வடிவம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">தானியங்கி</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">காஒத்திசைவு:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">காணொளி ஒத்திசைவு முறை.&#10;தானியங்கி: பலபின்னல் (வடிவமைப்பு) திறன்களைப் பொறுத்து 1 மற்றும் 2 க்கு இடையில் தேர்வு செய்கிறது.&#10;பாஸ்த்ரூ: ஒவ்வொரு சட்டமும் அதன் நேர முத்திரைகளுடன் குறியாக்கிக்கு அனுப்பப்படுகிறது.&#10;நிலையானது: கோரப்பட்ட நிலையான சட்டத்தை அடைய காட்சிகள் நகலெடுக்கப்பட்டு கைவிடப்படும். விகிதம்.&#10;மாறி: 2 காட்சிகள் ஒரே நேர முத்திரையைக் கொண்டிருப்பதைத் தடுக்க, காட்சிகள் அவற்றின் நேர முத்திரையுடன் அனுப்பப்படுகின்றன அல்லது கைவிடப்படுகின்றன.&#10;டிராப்: பாஸ்த்ரூவாக ஆனால் அனைத்து நேர முத்திரைகளையும் அழிக்கிறது, குறியாக்கி காட்சிரேட்டின் அடிப்படையில் புதிய நேர முத்திரைகளை உருவாக்குகிறது.&#10;Passthrough: Each frame is passed with its timestamps to the encoder.&#10;Constant: Frames will be duplicated and dropped to achieve exactly the requested constant frame rate.&#10;Variable: Frames are passed through with their timestamp or dropped so as to prevent 2 frames from having the same timestamp.&#10;Drop: As passthrough but destroys all timestamps, making the encoder generate fresh timestamps based on framerate.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">கடந்துசெல்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">மாறா சட்டவிகிதம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">மாறும் சட்டவிகிதம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">விடு</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">சட்டவிகிதம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">படம்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">தனிப்பயன்</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">கடவு:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">நிலையான விகித காரணி.&#10;தரம் மற்றும் விகிதக் கட்டுப்பாட்டு அமைப்பு.&#10;இந்தப் பண்பை அமைக்க விரும்பவில்லை என்றால் அதை காலியாக விடவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">தர நிலை:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">சிறிய மதிப்புகள் சிறந்த தரத்தைக் குறிக்கின்றன.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">இருமவிகிதம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">இலக்கு வீடியோ இரும விகிதம்.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">இருமவிகிதம் பயன்முறை:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">மாறிலி</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">மாறி</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">குறைந்த விகிதம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">குறைந்தஅளவு இருமவிகிதம் பொறையுடைமை.&#10;சிபிஆர் பயன்முறையைப் பயன்படுத்தும் போது மிகவும் பயனுள்ளதாக இருக்கும்.&#10;இந்தப் பண்பை அமைக்க விரும்பவில்லை என்றால், &#10;அதை காலியாக விடவும் அல்லது சுழியமாக அமை.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">அதிக விகிதம்:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">அதிகஅளவு இருமவிகிதம் பொறையுடைமை.&#10;இடையக அளவையும் அமைக்க வேண்டும்.&#10;இந்தப் பண்பை அமைக்க விரும்பவில்லை என்றால், &#10;அதை காலியாக விடவும் அல்லது சுழியமாக அமை.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Buffer அளவு:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">கட்டுப்பாட்டு இடையக அளவை மதிப்பிடவும்.&#10;இந்தப் பண்பை அமைக்க விரும்பவில்லை என்றால் &#10;அதை காலியாக விடவும் அல்லது சுழியமாக அமை.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">படங்களை சுருக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">சுருக்கப்பட்ட கோப்புறைக்குள் படங்களை ஏற்றுமதி செய்கிறது.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">படத்தை சுருக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">ஆர்எல்இ வழிமுறையைப் பயன்படுத்தி படத் தரவை சுருக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">காலவரிசைத் தரவைச் சேமி.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">சட்டங்களை மட்டும் ஏற்றுமதி செய்வதற்குப் பதிலாக, சட்டங்களின் நேரங்களை ஏற்றுமதி செய்கிறது.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">ஏற்றுமதி விருப்பங்கள்</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">பகுதியளவு ஏற்றுமதி செய்.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">உங்கள் விருப்பப்படி ஒரு கோப்புறையில் கோப்பைச் சேமி.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">மேலெழுதவா?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">முன்னறிவி</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">அதே பெயரில் மற்றொரு கோப்பு இருப்பதை மட்டுமே முன்னறிவிக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">கேள்</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">பயனர் கோப்பை மேலெழுத விரும்புகிறாரா என்று கேட்கும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">இசைவு</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">வெறுமனே கோப்பை மேலெழுதும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">திட்டமாகவும் சேமி (அதே கோப்புறை, அதே கோப்பு பெயர்).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">கோப்பை பதிவேற்று.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">இடைநிலைப் பலகைக்கு நகலெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">கோப்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">வெளியீட்டு கோப்பை இடைநிலைப் பலகைக்குள் நகலெடுக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">கோப்புறை பாதை</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">வெளியீட்டு கோப்பின் கோப்புறை பாதையை இடைநிலைப் பலகைக்கு நகலெடுக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">கோப்பு பாதை</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">வெளியீட்டு கோப்பின் பாதையை இடைநிலைப் பலகைக்கு நகலெடுக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">இணைப்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">பதிவேற்ற சேவையால் உருவாக்கப்பட்ட இணைப்பை இடைநிலைப் பலகைடுக்கு நகலெடுக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">குறியாக்கத்திற்குப் பிறகு கட்டளைகளை இயக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">குறியாக்கத்திற்குப் பிறகு இயக்கவேண்டிய கட்டளைகளைத் தட்டச்சு செய்யவும்.&#x0d;பல கட்டளைகளை இயக்க, ஒவ்வொன்றையும் தனித்தனி வரியில் தட்டச்சு செய்யவும்.&#x0d;பெருகள்:&#x0d;{p} = வெளியீட்டு கோப்பு பாதை.&#x0d;{f} = வெளியீட்டு கோப்புறை பாதை.&#x0d;{u} = பதிவேற்றப்பட்ட கோப்பின் முகவரி.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">பகுதி ஏற்றுமதி</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">பயன்முறை:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">பகுதி ஏற்றுமதி முறையைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">வெளிப்பாடு</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">ஒரு எளிய வெளிப்பாட்டின் அடிப்படையில் அசைவுட்டத்தின் பகுதிகளை ஏற்றுமதி செய்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">சட்ட ​​வரம்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">சட்ட ​​வரம்பிற்குள் அசைவுட்டத்தின் ஒரு பகுதியை மட்டும் ஏற்றுமதி செய்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">நேர வரம்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">காலவரையறைக்குள் அசைவுட்டத்தின் ஒரு பகுதியை மட்டும் ஏற்றுமதி செய்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">தேர்வு</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">காலவரிசையில் தேர்ந்தெடுக்கப்பட்ட காட்சிகளை மட்டும் ஏற்றுமதி செய்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">காட்சி எதுவும் தேர்ந்தெடுக்கப்படவில்லை.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 காட்சி தேர்ந்தெடுக்கப்பட்டது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} காட்சிகள் தேர்ந்தெடுக்கப்பட்டன.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">அனுப்புநர்:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">பெறுநர்:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">வெளிப்பாடு:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">காற்புள்ளியால் பிரிக்கப்பட்ட காட்சி எண்களை அல்லது கழித்தல் குறியால் பிரிக்கப்பட்ட &#10;காட்சி வரிசைகளை தட்டச்சு செய்:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">கோப்பு</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">இலக்கு கோப்புறை.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">தேர்ந்தெடு வெளியீட்டு கோப்புறை</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">இருப்பிடத்தைத் தேர்வுசெய்.&#x0d;கோப்புப் பெயரையும் தேர்ந்தெடுக்க &#x0d; உயர்த்தை அழுத்தி சொடுக்கு.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">கோப்பு வடிவம்</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">கோப்பின் பெயர். '?' க்கு இடையில் தேதி/நேர வடிவமைப்பைச் செருகவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">அசைவுட்டம்</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">கோப்பு எண்ணை கூட்டு</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">கோப்பு எண்ணைக் குறை</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">அதே பெயரில் ஒரு கோப்பு ஏற்கனவே உள்ளது.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">இடைநிலைப் பலகையில் சேமி.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">கோப்பை எங்கு சேமிக்க வேண்டும் என்பதை நீங்கள் தேர்ந்தெடுக்க வேண்டும் (ஒரு கோப்புறையில், இடைநிலைப் பலகைக்கு அல்லது வேறு எங்காவது பதிவேற்றவும்).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">நீங்கள் கோப்பு நீட்டிப்பைத் தேர்ந்தெடுக்கவில்லை.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">மேம்பட்ட பயன்முறையைத் தேர்ந்தெடுக்கும்போது, ​​அளவுருக்கள் புலத்தில் அளவுருக்களை தட்டச்சு செய்ய வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">சிறப்பு அளவுருக்கள் {I} (உள்ளீடு) மற்றும்/அல்லது {O} (வெளியீடு) அளவுருக்கள் புலத்தில் இல்லை.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">குறியாக்கத்திற்குப் பிறகு கட்டளையை இயக்க, கட்டளைகள் உரை புலத்தில் ஏதாவது தட்டச்சு செய்ய வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">தேர்ந்தெடுக்கப்பட்ட காட்சிகளை மட்டும் ஏற்றுமதி செய்யும் விருப்பம் இருக்கும்போது நீங்கள் இங்கே குறைந்தஅளவு ஒரு காட்சியாவது தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">திட்டத்தை பகுதியளவு ஏற்றுமதி செய்வதற்கான வெளிப்பாடு தவறானது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">பதிவேற்ற சேவை எதுவும் தேர்ந்தெடுக்கப்படவில்லை. நீங்கள் ஒரு இலக்கைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">தேர்ந்தெடுக்கப்பட்ட சேவை ஒப்புதல் அளிக்கப்படாததால், அதை நீங்கள் பதிவேற்ற முடியாது. இந்த செயலியை ஒப்புதல் அளிக்க விருப்பங்கள் > பதிவேற்ற சேவைகள் என்பதற்குச் செல்லவும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">கோப்பை பதிவேற்ற நீங்கள் அமைக்காததால் இணைப்பை நகலெடுக்கும் விருப்பத்தை நீங்கள் தேர்ந்தெடுக்க முடியாது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">நீங்கள் ஒரு வெளியீட்டு கோப்புறையைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">வெளியீட்டு கோப்புறை இல்லை.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">வெளியீட்டு கோப்புறையில் ஒன்று அல்லது அதற்கு மேற்பட்ட செல்லாத எழுத்துக்கள் உள்ளன. தயவுசெய்து, ஒரு செல்லுபடியாகும் கோப்புறையைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">நீங்கள் ஒரு கோப்புப் பெயரைத் தேர்ந்தெடுக்க வேண்டும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">வெளியீட்டு கோப்பு பெயரில் ஒன்று அல்லது அதற்கு மேற்பட்ட செல்லுபடியாகாத எழுத்துக்கள் உள்ளன. தயவுசெய்து, ஒரு செல்லுபடியாகும் கோப்புப் பெயரைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">கோப்புப் பெயர் ஏற்கனவே பயன்பாட்டில் உள்ளது. வேறொரு கோப்புப் பெயர் அல்லது கோப்புறையை மேலெழுத அல்லது தேர்ந்தெடுக்க அமை.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">அதே கோப்புப் பெயருடன் ஏற்கனவே ஒரு திட்டம் உள்ளது. வேறொரு கோப்புப் பெயர் அல்லது கோப்புறையை மேலெழுத அல்லது தேர்ந்தெடுக்க அமை.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">செயல்பாடு நீக்கறல் செய்யப்பட்டது.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">பதிவேற்றம்</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">பதிவேற்றத்திற்கான பயன்பாட்டில் உள்ள சேவை பற்றிய விவரங்களைக் கொண்ட பதிவேற்ற முன்னமைவைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">இந்த பதிவேற்ற சேவை வரம்புகளை விதிக்கிறது.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">புதிய பதிவேற்ற முன்னமைவைச் சேர்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">பதிவேற்ற முன்னமைவு அமைப்புகளைத் திருத்து.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">இந்த முன்னமைவின் பதிவேற்ற வரலாற்றைக் காண்க.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">தற்போது தேர்ந்தெடுக்கப்பட்ட பதிவேற்ற முன்னமைவை அகற்று.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">ஒரு பதிவேற்ற முன்னமைவைத் தேர்ந்தெடு</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">இந்தப் பட்டியலிலிருந்து ஒன்றைத் தேர்ந்தெடு.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">இந்த வடிவமைப்பிற்கு பதிவேற்ற முன்னமைவு எதுவும் கிடைக்கவில்லை</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">கீழே உள்ள பொத்தானைப் பயன்படுத்தி முன்னமைவைச் சேர்.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">பதிவேற்ற முன்னமைவை நீக்குதல்</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">பதிவேற்ற முன்னமைவை நீக்க விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">இந்தச் செயலைச் செயல்தவிர்க்க முடியாது.&#10;&#10;தேர்ந்தெடுக்கப்பட்ட பதிவேற்ற முன்னமைவை நீக்க விரும்புகிறீர்களா?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">காட்சிகள் ஏற்றுமதி</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">காட்சிகளை ஏற்றுமதி செய்ய விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">இந்தச் செயல் {0} காட்சிகளை நேரடியாகத் தேர்ந்தெடுக்கப்பட்ட கோப்புறைக்கு ஏற்றுமதி செய்யும்.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">மேலெழுது</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">கோப்பை மேலெழுத விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">'{0}' என்ற பெயரில் ஒரு கோப்பு ஏற்கனவே அந்தக் கோப்புறையில் உள்ளது.\\r\\nஅதை மேலெழுத விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">கோப்புகளை மேலெழுத விரும்புகிறீர்களா?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">ஒரே பெயரில் ஒன்று அல்லது அதற்கு மேற்பட்ட கோப்புகள் ஏற்கனவே அந்த கோப்புறையில் உள்ளன.\\r\\nஅவற்றை மேலெழுத விரும்புகிறீர்களா?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">கட்டளை முன்னோட்டங்காட்டி</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">கட்டளை</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">உள்ளீட்டு பாதை</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">வெளியீட்டு பாதை</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">கருத்து</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">அனுப்பு</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">முன்னோட்டம்</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">கருத்தை அனுப்பு</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">தலைப்பு</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">செய்தி</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">நீங்கள் ஒரு பிழையை சந்தித்தால், அதை எப்படிப் பெற்றீர்கள் என்பதை படிப்படியாக விளக்க மறக்காதீர்கள்.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">கருத்து வகை</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">பரிந்துரை</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">பிழை/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">உங்கள் மின்னஞ்சல்</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">நீங்கள் பின்னூட்டத்திற்கான தலைப்பை தட்டச்சு செய்ய வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">நீங்கள் பின்னூட்டத்தில் ஒரு செய்தியை தட்டச்சு செய்ய வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">மேம்பாட்டாளரிடமிருந்து பதிலைப் பெற, உங்கள் மின்னஞ்சலை தட்டச்சு செய்ய வேண்டும்.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">பின்னணியில் அனுப்புதல். இந்த சாளரம் விரைவில் மூடப்படும்.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">இணைப்புகள் (விருப்பத்தேர்வு, அதிகஅளவு 20மெபை)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">இணைப்புகளைச் சேர்</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">அனைத்து இணைப்புகளையும் அகற்று</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">எனக்கு ஆங்கிலம் புரியும்</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">மற்றும் போர்த்துகீசியம் (பிரேசிலியன் மற்றும் ஐரோப்பிய).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">இதுதான் நீங்கள் அனுப்புவீர்கள், மற்றும் அனைத்து இணைப்புகளும்.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">சரிசெய்தல்</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">ஏதேனும் சாளரம் காணவில்லையா?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">ஏதேனும் சாளரம் காணவில்லை (திரைக்கு வெளியே) என்றால்,&#x0d; கீழே உள்ள விருப்பங்களைப் பயன்படுத்தி அதன் தற்போதைய மற்றும் தொடக்க நிலையை மீட்டமை.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">ஒவ்வொரு சாளரமும் தற்போது அமைந்துள்ள இடம் இங்கே:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">ஒவ்வொரு சாளரமும் அடுத்த முறை திறக்கும் இடம் இங்கே:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">அனைத்து சாளரங்களையும் முதன்மை திரைக்கு நகர்த்து.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">அனைத்து சாளரங்களின் தொடக்க நிலையை மீட்டமை.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">இயல்பான</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">சாய்வு</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">சாய்வான</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">கருப்பு</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">தடிமன்</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">டெமி தடிமன்</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">கூடுதல் கருப்பு</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">கூடுதல் தடிமன்</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">கூடுதல் ஒளி</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">அதிகஎடை</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">ஒளி</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">நடுத்தரம்</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">இயல்பான</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">வழக்கமான</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">பாதி தடிமன்</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">மெல்லிய</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">மிக கருப்பு</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">மிக தடிமன்</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">மிக ஒளி</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">மேல்</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">நடு</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">கீழே</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">நீட்சி</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">இடது</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">நடு</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">வலது</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">கிடைமட்ட</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">செங்குத்து</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">இடது</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">வலது</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">நடு</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">சரிபடுத்து</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">எதுவுமில்லை</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">அடிக்கோடு</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">அடித்தம்</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">மேல்கோடு</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">தளக்கோடு</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.tr.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Tamam</s:String>\n    <s:String x:Key=\"S.Back\">Geri</s:String>\n    <s:String x:Key=\"S.Cancel\">İptal</s:String>\n    <s:String x:Key=\"S.Yes\">Evet</s:String>\n    <s:String x:Key=\"S.No\">Hayır</s:String>\n    <s:String x:Key=\"S.Add\">Ekle</s:String>\n    <s:String x:Key=\"S.Edit\">Düzenle</s:String>\n    <s:String x:Key=\"S.Id\">Kimlik</s:String>\n    <s:String x:Key=\"S.Title\">Başlık</s:String>\n    <s:String x:Key=\"S.Description\">Açıklama</s:String>\n    <s:String x:Key=\"S.SelectColor\">Renk seçmek için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Suppress\">Önleme</s:String>\n    <s:String x:Key=\"S.Preview\">Önizleme</s:String>\n    <s:String x:Key=\"S.Size\">Boyut</s:String>\n    <s:String x:Key=\"S.Background\">Arkaplan</s:String>\n    <s:String x:Key=\"S.Color\">Renk:</s:String>\n    <s:String x:Key=\"S.Delay\">Gecikme</s:String>\n    <s:String x:Key=\"S.DelayMs\">Gecikme (ms):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Değer -+ (ms):</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Ölçek Değeri:</s:String>\n    <s:String x:Key=\"S.Margin\">Kenar:</s:String>\n    <s:String x:Key=\"S.Padding\">Dolgulama:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Minimum yükseklik:</s:String>\n    <s:String x:Key=\"S.AndOr\">ve/veya</s:String>\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">Hayır olamaz, uygulama çöktü :(</s:String>\n    <s:String x:Key=\"S.Required\">Gerekli alan.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Kayıp Bağımlılık</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 mevcut değil</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Uygulamayı düzgün bir şekilde kullanabilmek için .Net Framework.&#10; yazılımının doğru sürümünü indirmelisin. İndirmek için web sayfasının açılmasını ister misin?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Yalnız bir kez çalıştırılabilir</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Uygulama zaten çalışıyor</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif zaten çalışıyor, fakat görünüşe göre hiç bir pencere açık değil. Sistem tepsisini kontol et, ScreenToGif ikonu orda olmalı.</s:String>\n    <s:String x:Key=\"S.Exiting.Title\">ScreenToGif'ten Çıkılıyor</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Çıkmak istediğinize emin misiniz?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Tüm pencereler kapatılacak ve tepsi ikonu kaldırılacak.</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Yeni ekran kaydı</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Yeni web kamerası kaydı</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Yeni pano kaydı</s:String>\n    <s:String x:Key=\"S.Exit\">Çıkış</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Yeni ekran kaydı</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Yeni web kamerası kaydı</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Yeni pano kaydı</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Yeni animasyon</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Ekran kaydını yerleştirin</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Web kamerası kaydını yerleştirin</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Pano kaydı ekle</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Medyadan yerleştir (görüntüler and videolar)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Farklı kaydet</s:String>\n    <s:String x:Key=\"S.Command.Load\">Dosyalardan yükle (görüntüler, videolar ve projeler)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">En son projeleri yükle</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Mevcut projeleri yoksay</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Karelerdeki gecikmeyi yoksay</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Karelerdeki gecikmeyi Arttır/Azalt</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Karelerdeki gecikmeyi ayarla</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Yakınlaştırma miktarını %100 olarak ayarla</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Kare boyutuna göre pencereyi ayarla</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Mevcut pencere boyutuna göre görüntüyü sığdır</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">İlk kareyi seç</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Bir önceki kareyi seç</s:String>\n    <s:String x:Key=\"S.Command.Play\">Animasyonu oynat</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Bir sonraki kareyi seç</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Sonuncu kareyi seç</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Geri al</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Yinele</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Projedeki tüm değişiklikleri geri al</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Seçili kareleri kopyala ve panoya depola</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Seçili kareleri kes ve panoya depola</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Panodan kareleri yapıştır</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Seçili tüm kareleri sil</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Önceki tüm kareleri sil</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Sonraki tüm kareleri sil</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Tekrarlananları kaldır</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Kare sayısını azalt</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Animasyonu ters çevir</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Animasyonun ileri ve geri gitmesini sağla</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Seçili kareyi sola taşı</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Seçili kareyi sağa taşı</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Tüm kareleri yeniden boyutlandır</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Tüm kareleri kırp</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Kareleri çevir veya döndür</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Altyazı ekle</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Kayan metin ekle</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Başlığı bulunan kare ekle</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Kayıtta basılan tuşları ekle</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Serbest şekiller çiz</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Şekil ekle</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Fare tıklamaları</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Bir resmi filigran olarak ekleyin</s:String>\n    <s:String x:Key=\"S.Command.Border\">Çerçeve ekle</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Gölge ekle</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Karelerdeki hassas kısımları pikselleştir</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">Animasyon süresince karenin sabit kalmaması gereken bölümleri seçmek için çizim araçlarını kullanın</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Oynatma ayarlarını içeren metin veya ilerleme çubuğu</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Tüm kareleri seç</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">İndeks numarasına göre kareye git</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Seçili kareleri bırakarak seçili olmayanları seçer</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Seçili kareleri bırakır</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Soluk geçiş</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Kayan geçiş</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Kodlaması bitenleri temizle</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Yukarı taşı</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Aşağı taşı</s:String>\n    <s:String x:Key=\"S.Command.Add\">Ekle</s:String>\n    <s:String x:Key=\"S.Command.Open\">Aç</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Seçili parçayı düzenle</s:String>\n    <s:String x:Key=\"S.Command.Save\">Seçili parçayı kaydet</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Seçili parçayı kaldır</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Başlangıç</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Kaydedici</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Ekran kaydediciyi açar, kolayca ekranınızı kaydetmeye başlayabilirsiniz.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Web kamerası</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Web kamerası kaydediciyi açar.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Pano</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Pano kaydedicisini açar, çizimlerinizi kaydetmeye başlayacağınız yer.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Editör</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Düzenleme penceresini açar, bu uygulamanın merkezi, yeni kayıt başlatıp düzenleyebileceğiniz bir yer.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Ayarlar</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Yeni sürüm mevcut</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">ScreenToGif'in en son versiyonunu indirin.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Güncelle</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Yeni bir güncelleme mevcut</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Yeni sürüm!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Yeni sürüm mevcut, Versiyon {0}!&#x0d;Daha fazla bilgi için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Versiyon</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Taşınabilir</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Yükleyici</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Neler yeni?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Hatalar düzeltildi:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">İndirmen için yeni bir versiyon mevcut.&#x0d;İndirmek için tarayıcıyı açmak ister misin?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Güncellemeden sonra uygulamayı çalıştır.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">İndir</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Yükle</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">İndiriliyor...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">İndirme detaylarını göstermek mümkün olmadı.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Güncellemeyi indirmek mümkün olmadı.</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Ayarlar</s:String>\n    <s:String x:Key=\"S.Options.App\">Uygulama</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Kaydedici</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Editör</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Görevler</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Klavye Kısayolları</s:String>\n    <s:String x:Key=\"S.Options.Language\">Dil</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Geçici Dosyalar</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Ekstralar</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Bulut</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Bağış Yap</s:String>\n    <s:String x:Key=\"S.Options.About\">Hakkında</s:String>\n    <s:String x:Key=\"S.Options.Other\">Diğer</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">İmkeç takibi için kısayol tuşu kayıp</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Fare imlecini takip etme özelliğini kullanabilmek için geçiş yapacak bir kısayol tuşu ayarlamanız gerekir.</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">Ekran kaydı için bağımlılıklar eksik</s:String>\n    <s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">Desktop Dulication API ile ekran görüntüsü alabilmek için SharpDx kütüphanelerini indirmelisiniz.</s:String>\n    \n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Başlangıç</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Elle&#10;başlat</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Uygulama sadece elle başlattığınızda çalıştırılacaktır.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Windows ile&#10;başlat</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Windows başlatıldığında uygulama otomatik açılacak.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Başlangıç modları arasında geçiş yapılamaz.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Tek örneğe&#10;izin ver</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Uygulamayı kullanıcı ve çalıştırılabilir dosya başına bir kez başlatabileceksiniz;&#10;farklı kullanıcı veya çalıştırılabilir örnekler bir arada var olabilir&#10;Uygulamayı tekrar çalıştırmayı denediğinizde, ikinci örnek kendinisini sonlandırarak ilkine odaklanır.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Birden fazla örneğe&#10;izin ver</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Uygulamayı herhangi bir kısıtlama olmaksızın aynı anda birden çok kez çalıştırabileceksiniz.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Sistem tepsisinde simge durumuna küçültülmüş olarak başlatın.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Bu seçenek aktif olduğunda sistem tepsisinde uygulama simgesi görünür olacak)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Şununla başlat:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Başlangıç Ekranı</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Ekran Kaydedici</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Web kamerası Kaydedici</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Pano Kaydedici</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Editör Penceresi</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Uygulama başladığında görünecek ilk pencere)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Tema</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Renk Düzeni</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Çok Açık</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Açık</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Orta</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Koyu</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Çok Koyu</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Sistem ile aynı</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Özel</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Örnek renkler.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Sistem tepsisi ikonu</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Uygulamayı sistem tepsisinde göster (bildirim alanı).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Tüm pencereler kapansa da uygulamayı açık tutun.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Hiçbir şey yapma</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Pencere aç</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Pencere yok</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Tüm pencereleri küçült/onar</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Tüm pencereleri küçült</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Tüm pencereleri onar</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Sol tıklama:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Sol tıklama (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Fare orta tuşu tıklaması:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Pencere:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Değilse bunu aç:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Genel</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">'Yeterli alan yok...' hatası için geçici çözüm.</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Deneysel)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Uygulama kapatılmadan önce bana sor ('Çıkış' komutu aracılığıyla).</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Donanım ivmelenmesini devre dışı bırak.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Kullanıcı arayüzü yazılım modu aracılığıyla oluşturulacak)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Çeviri güncellemelerini takip et.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Güncellenmiş çeviriler otomatik olarak indirilecek ve yüklenecek)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Güncellemeleri kontrol et.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Uygulamayı kapatınca güncellemeleri otomatik olarak yükle.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Taşınabilir sürüm indirilmesini zorla.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Sıkıştırılmış dosyaları açarak çalıştırılabilir olanlarla değiştirmeyi gerektiren manuel kurulum)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Güncellemeyi yüksek ayrıcalıklarla çalışmaya zorlayın.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Kurulum başlatılmadan önce bana sor.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Arayüz</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Eski</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Yeni</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Yakalama sıklığı</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Elle</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Her kare, yakalama düğmesine veya karşılık gelen klavye kısayoluna basarak sizin tarafınızdan elle yakalanır.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Kullanıcı etkileşimi</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Her tıkladığınızda veya bir şeyler yazdığınızda kareler yakalanır.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Saniye başına</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Kareler, kayıt ekranında ayarlanan kare hızının&#10; paydasına göre 'saniye başına' olarak yakalanır.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Dakika başına</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Kareler, kayıt ekranında ayarlanan kare hızının&#10; paydasına göre 'dakika başına' olarak(hızlandırılmış) yakalanır.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Saat başı</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Kareler, kayıt ekranında ayarlanan kare hızının&#10; paydasına göre 'saat başına' olarak(hızlandırılmış) yakalanır.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Oynatma gecikmesi:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(Ms cinsinden yakalanan her kare bu gecikmeye göre ayarlanacaktır)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Tetikleme gecikmesi:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(Kayda başlamadan önce ms cinsinden beklenecek süre)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Her kare {0} aralığında yakalanacak.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Yakalama modu</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Daha yavaş ve oyun yakalamada işe yaramayabilecek;&#10;ancak eklenti gerektirmeyen eski yakalama yöntemini kullan.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Daha hızlı ve tam ekran oyunları yakalayabilen,&#10;ancak SharpDx eklentisi ve Windows 8 veya daha üstünü gerektiren Desktop Duplication API yakalama yöntemini kullanın.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Dosyaya&#10;kaydet</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Yakalanan her kare doğrudan diskte bir resim olarak kaydedilecek.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Hafıza&#10;önbelleği</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Yakalanan her kare öncelikle bellekte bir piksel dizisi olarak saklanacaktır (önceden sıkıştırılabilir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Sıkıştırma:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">En uygun</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Daha yavaş ancak olası en uygun sıkıştırma)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">En hızlı</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Daha hızlı ancak uygun olmayabilecek sıkıştırılmaz)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Sıkıştırma olmadan</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Kareler yakalanırken sıkıştırma yapılmaz)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Önbellek boyutu:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(MB cinsinden, bu boyuta ulaşıldığında veriler diske yazılarak temizlenir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Tamamen siyah çerçevelerin yakalanmasını önle.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Hafıza önbelleğine sahip BitBlt görüntülerin, yanlışlıkla tüm piksellerinin tamamen siyah olduğu karelerle sonuçlanmasını önler)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Fare imlecini kayıtta göster.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Fare İmleci Rengini Seç</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Sabit kare hızı.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Sabit gecikme, kayıt gecikmesini değiştirmez)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Yalnız bir şeyler değiştiğinde kaydet.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Sadece yakalama bölgesinde bir şey değiştiğinde kaydedilir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Uzak masaüstü bağlantısında yakalama performansını iyileştirir.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Üst üste pencere yakalamayı devre dışı bırakır)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Kayıt sırasında hafıza temizlemeyi zorla.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Kayıt sırasında hafıza kullanımını azaltır ancak performansı düşürür)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">Asenkron kaydı aktif et.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(Kayıt sırasındaki arayüz gecikmesini azaltmaya yardımcı olur)</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Kılavuz</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Üçte bir kuralı</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Üçte bir kuralı&#10;kılavuzunun görünümünü değiştirmek için tıklayın.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Artı işareti</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Artı işareti kılavuzunun&#10;görünümünü değiştirmek için tıklayın.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Kılavuzlar sadece kaydedici duraklatıldığında veya durdurulduğunda görüntülenir.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Başlık çubuğunu gizle (ince mod).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Ekran büyütecini aktif et.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Kayıt alanı seçildiği sürece büyütmeyi aktif eder)</s:String>    \n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Seçildiğinde ekran sınırını belirginleştiren animasyon.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(\"Kayar noktalı çerçeve\" stilini kullanan animasyon)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Seçim kaydırmayı etkinleştir.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Seçilen bölgenin köşesine yakın bir süs göstererek kayıt alanının hareket etmesine olanak tanır)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Kompakt mod.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Kaydedici komut panelinin daha küçük bir versiyonunu gösterir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Kayıt sırasında \"İptal et\" butonunu göster.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Normalde sadece duraklatıldığında gösterilir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Ekran seçim performansını iyileştir.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Ekranın durağan bir halini görüntüleyerek ekran seçimi sırasındaki gecikmeyi azaltır)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Kayıt alanının önceki boyutunu hatırla.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Kayıt alanının önceki konumunu hatırla.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Başlamadan önce geri sayım kullan.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(Kayda başlamadan önce birkaç saniye beklenir)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">İmleç takibini aktif et.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Kayıt alanı, imlecin bulunduğu yere göre kendisini yeniden konumlandırır)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Piksel olarak, kayıt alanı yeniden konumlandırılmaya başladığında ayarlanacak boşluk)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Piksel olarak, kullanıcı arayüzü gizlendiğinde ayarlanacak ek boşluk)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Kaydı silmeden önce bana sor.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Editör Arkaplanı</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Izgara Boyutu</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Çok Küçük</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Küçük</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Orta</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Büyük</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Çok Büyük</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Büyük Kareler Severim.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Ben Körüm</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Özel</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Yükseklik</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Genişlik</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Uygula</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Temel Renk</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Çift Renk</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Tek Renk</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Kodlamaları ayrı bir pencerede görüntüle.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Başlık Çubuğunu Uzat/Chrome.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Yüklemeden hemen sonra kare boyutuna göre pencere boyutunu otomatik olarak ayarla.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Yüklemeden hemen sonra kare yakınlaştırmasını pencere boyutuna göre otomatik olarak ayarla.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Kareleri silmeden önce bana sor.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Projeyi yok saymadan önce bana sor.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Editörü kapamadan önce bana sor (Eğer açık bir proje varsa).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\"> Metin seçmek için üçlü tıklamayı aç.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Başlıkların ana hatlarını harflerin dışına çizin.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Gerek duyulmayan kareler kaldırılsın.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Önizleme anında gösterilmeyen kareyi geç)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Önizleme anında gösterilmeyen kareyi geç.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Geri alma/tekrarlama geçmişine bir sınır koyun.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Sınıra ulaşıldığında eski işlemler kaldırılacak)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Saklanan en fazla eylem sayısı)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Çıkış klasörünü ön ayarlara göre senkronize et.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Ön ayarlar aynı çıktı yolunu kullanacak)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Dosya adını da senkronize et.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Ön ayarlar da aynı dosya adını kullanacak)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Yalnızca aynı dosya türündeki ön ayarlara göre senkronize et.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Yalnız aynı dosya türündeki ön ayarlar senkronize edilir)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Otomatikleştirilmiş Görev</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Otomatikleştirilmşi görevlerin listesi</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Görev</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Detaylar</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Aktif edildi</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Bu görevi aktif et.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Bir görev seç)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Bu görevler yukarıdan aşağıya doğru sıralı bir şekilde çalışacak.&#10;Editörü kullanarak açılan ilk projede gerçekleşir..</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Global</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Ekran kaydedici:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Ön tanımlı ekran kaydediciyi açar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Web kamerası kaydedici:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Web kamerası kaydedicisini açar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Pano kaydedici:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Çizimlerinizi kaydedebileceğiniz pano kaydediciyi açar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Editör:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Başka bir editör penceresi açar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Ayarlar:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Ayarlar pencersini açar. Bir seferde yalnızca bir tane açılır)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Çıkış:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Tüm pencereleri kapar ve uygulamayı sistem tepsisinden kaldırır)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Kaydediciler</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Başlat/Duraklat:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Kaydı başlatır veya durdurur. Anlık görüntü modu aktif ise anlık görüntü almak için kullanılır)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Durdur:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Kaydı durdurur ve editörü açar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Yok say:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Durdurulduğunda aktif kaydı yok sayar)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">İmleç takibi:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(İmlecin konumuna göre kayıt alanının ayarını açar/kapatır)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Takibi pasif duruma getir:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Kayıt alanının imlecin konumuna göre ayarlanmasını geçici olarak devre dışı bırakır, sadece değiştirici tuşlar çalışır)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Klavye odağı için tıkla, ardından istenilen tuşlara ve tanımlayıcılara bas.&#10;Bazı tuş kombinasyonlarına izin verilmemektedir.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Uygulama Dili</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Otomatik tespit</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Mevcut İşletim Sistemi dili (eğer mevcutsa)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Uygulamamın dilini çevirmek ister misin?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Çeviri rehberini okumak ve Çevirici uygulamayı indirmek için buraya tıkla.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Ardından,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">buraya tıklayarak içe aktar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">ve çevirini test et.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Eğer çevirin tamamlandıysa</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">bana bu çevirini</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">e-posta (nicke@outlook.com.br) aracılığıla yolla.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Rehberi içeren web sitesini açmak için tıkla.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">İçeri aktarma sayfasını açar</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">E-posta uygulamanı açar</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Durum</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Boyut:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} boş {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Ne kadar boş alan kaldığını tekrar kontrol edin.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Önbellek klasörünü temizleyin.&#10;Son projeleri saklamak isteyip istemediğinize karar verebileceksiniz.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Seçili sabit sürücüdeki alan az. Lütfen önbellek klasörünü temizleyin veya konumu değiştirin.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Sürücü ayrıntılarını alınamıyor.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Dosya yok</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} dosya</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} dosya</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Klasör yok</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} klasör</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} klasör</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} kullanımda</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Yollar</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Önbellek:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Önbellek için konum seçin (geçici dosyalar).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Hata log dosyaları için konum seçin.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Seçilen klasöre göz atın.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Ayarlar konumu</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Mevcut değil</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Boş bir yerel ayarlar dosyası oluştur.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Ayarlar dosyasını kaldır.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Ayarlar dosyasının bulunduğu klasörü açın.&#x0d;Mümkünse dosyayı açmak için tıklarken Ctrl tuşuna da basılı tutun.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Ayarlar yükleme dizini: Default ◄ AppData ◄ Local.&#x0d;• Local klasörde herhangi bir ayar dosyası yoksa uygulama AppData klasörü içinde arama yapar, yine bir ayar dosyası yoksa Default kullanılır&#x0d;• Local ayar yoksa, tüm ayarlar AppData ayarlar dosyasına kaydedilir.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Uygulamayı kapatırken tüm dosyaları önbellekten sil.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Önbellekten tüm dosyaları silmeden önce sor.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Eski projeleri otomatik olarak kaldır.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Uygulamayı açılırken bir arka plan görevi, ayarlanan süreden daha eski tüm kapalı projeleri siler.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(Bundan daha eski tüm kapalı projeler uygulamayı açtıktan sonra, gün içinde silinecek/çıkartılacak).</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Önbelleği temizle</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Önbellek klasörünü temizlemek ister misiniz?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Bir kayıt oluşturduğunuzda veya düzenlemek için bir şey açıldığında bir proje oluşturularak önbellek klasöründe saklanır.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Bu projeleri önbellek klasöründen kaldırmak ister misiniz?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Son projeleri kaldırma</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Sadece şu anda kullanımda olmayan, {0} günden eski projeler kaldırılacak)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Şu anda kullanımda olmayan tüm projeler kaldırılacak)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Vekil sunucu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Mod:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Devre dışı</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Elle</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Sistem</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Sistem vekil sunucusunu kullan)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Sunucu:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Port:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Kullanıcı adı:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Şifre:</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Presets\">Ön ayarları yükle</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Hizmet</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Başlık</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Açıklama</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Aktif edildi</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Hizmeti yükle</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Bir hizmet seçin</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Yukarıdan bir yükleme hizmeti seçin</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Özel</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Bu ayarı kullan.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Ayrıntılar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">İsim:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Açıklama:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Mod:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Anonim</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Kmlik doğrulandı</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Yetkilendirme</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Token al</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">OAuth token'ı buraya yapıştırın</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Kullanıcı adı:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Şifre:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Yetkilendirme</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Kullanıcı adı ve şifre saklanmayacak.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Ayarlar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Direk linkleri kullan.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Albüm</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Bu ön ayara benzersiz bir isim vermelisiniz.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Bu isim zaten başka bir yükleme ön ayarı tarafından kullanılıyor.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">Kimlik doğrulama modundayken doğrulama işlemini tamamlamanız gerekir.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Bu uygulamayı yetkilendirmek için kullanıcı adınızı ve şifrenizi girmelisiniz.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Yetkilendirme için token almak mümkün değil.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Bu uygulamayı yetkilendirmek için yetkilendirme 'token'ını belirtmeniz gerekir.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Yetkilendirme başarısız oldu. Her şeyin doğru olduğunu kontrol edin ve birkaç saniye sonra tekrar deneyin.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Albüm listesi yüklenemedi.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Yetkilendirme tamamlandı.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Yetkisiz</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Yetkilendirme süresi {0} tarihinde doldu</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">{0} tarihine kadar yetkilendirme geçerlidir</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Gif yerine Gifv uzantılı linkleri al.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Seçilen albüme gif yükleyin.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Albüm:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Yüklemeden önce bana sor</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Albüm listesini yeniden yükle.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">Varsayılanlar</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Yüklemenin ayrıntılarını doldurmamı iste.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Url türü:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Albüm seçin (isteğe bağlı)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Dilerseniz hedef albümü seçebilirsiniz:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Ayrıntıları yükle (İsteğe bağlı)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Ayrıntıları yükle</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Başlık:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Açıklama:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Etiketler:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Etiketleri noktalı virgül kullanarak ayırın ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Yalnızca doğrudan bağlantı yoluyla erişenler için görüntülenir.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Geçmişi yükle</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Tarih</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Önceki</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Başarılı?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Geçmiş girdileri sil.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Link:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Düşük kalite:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Silme linki:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Geçmiş girdisini silmek istediğinizden emin misiniz??</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Bu işlem geri alınamaz.&#10;&#10;Seçili geçmiş girdisini silmek istiyor musunuz?</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Get\">OAuth token al</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">Yetkilendirme 'token'ını buraya yapıştırın.</s:String>   \n    <s:String x:Key=\"S.Options.Upload.Refresh\">Yenile</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">Temizle</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (Anonim)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">Imgur yetkilendirme 'token'ını almak için sayfa açılamadı.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Imgur yetkilendirme tamamlandı.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Imgur yetkilendirme başarısız oldu. Birkaç saniye sonra tekrar deneyin veya yeni bir token alın.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">Uygulamayı yetkilendirilemedi.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">Doğru 'token'ı sağladığınızı ve internet bağlantınızı kontrol edin.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">Bu uygulamanın yetkilendirmesini yenilemek için önce yetkilendirme işlemini tamamlamanız gerekir.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Imgur yetkilendirme kaldırıldı.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat (Anonim)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">OAuth token:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">Hedef seçin</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Kullanılabilir dış araçlar</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">İndirmek için tıklayın&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">İndiriliyor...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">İndirildi&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Dosyanın özelliklerini açmak için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Mağazası tarafından dağıtılan uygulamalar diğer uygulamaları indiremez. Manuel olarak indirmeniz gerekecek.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg konumu</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Çalıştırılabilir FFmpeg dosyasının konumunu seçin.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg çalıştırılabilir</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">FFMpeg çalıştırılabilir dosyasının yolu bir veya daha fazla geçersiz karakter içeriyor. Lütfen çalıştırılabilir dosya için geçerli bir konum seçin.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski konumu</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Gifski kütüphanesinin konumunu seçin.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski kütüphanesi</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Gifski kütüphanesinin yolu bir veya daha fazla geçersiz karakter içeriyor. Lütfen kütüphane için geçerli bir konum seçin.</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation\">SharpDx klasörü (SharpDX.dll, SharpDX.Direct3D11.dll and SharpDX.DXGI.dll)</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">Select the location of the SharpDx libraries</s:String>\n    <s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">SharpDx kütüphanesinin yolu bir veya daha fazla geçersiz karakter içeriyor. Lütfen kütüphane için geçerli bir konum seçin.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg lisansı</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski lisansı</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx lisansı</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Bağış Yap</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Bağış Yap US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Bağış Yap €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Paypal web sitesini açar. Seçilen para birimi: Dolar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Paypal web sitesini açar. Seçilen para birimi: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Paypal web sitesini açar. Para birimi seçimi zorunludur.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Abone ol</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Patreon aracılığıyla aylık bağış yapın.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">Stripe aracılığıyla bağış yapın.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Flattr aracılığıyla aylık bağış yapın.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Oyun hediye et</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Steam aracılığıyla oyun hediye edin.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">GOG aracılığıyla oyun hediye edin.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Ko-fi aracılığıyla kahve ısmarlayın.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Kripto para birimleri</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">BitcoinCash adresini kopyalayın.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Destek</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Projeye destek olmak istiyorsanız :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Sürüm:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Güncellemeleri kontrol et</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Yazar: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft mağaza versiyonu. Zorunlu politikalar nedeniyle bazı özellikler devre dışı bırakıldı.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">İletişim</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Sunucuya katılın</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Sayfayı ziyaret edin</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Odaya katılın</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Teknik</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Lisans:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Bu tamamen ücretsiz bir uygulamadır)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Kaynak kodu:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Gizlilik ilkesi:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Çok teşekkürler ></s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Tüm destekçilerim, geri bildirimde bulunan ve/veya bağışta bulunan kişiler.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Yerelleştirme</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Dil kodları alınıyor...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">{0} olarak belirlendi.</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Belirlenemedi</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">En alttaki kaynak, kullanılmakta olan geçerli kaynaktır.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Özelleştirilmiş kaynağınızı uygulamak için listenin en altına taşıyın.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Kaynak dışa aktarılıyor...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Kaynak sözlüğünü kaydet</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Kaynak sözlüğü aç</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Kaynak sözlüğü</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Kaynak içe aktarılıyor...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Dosya adı geçerli düzene uymuyor</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Şu şekilde yeniden adlandırmayı deneyin: StringResources.en.xaml, dosya ismindeki 'en' ibaresi dil kodunuzla değiştirilmelidir.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Aynı ada sahip kaynağı ekleyemezsiniz.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Tekrarlanan kaynağı kaldırmayı deneyin veya başka bir dil kodu kullanın.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Gereksiz dil kodu</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">\"{0}\" kodu gereksizdir. Bunun yerine \"{1}\" kullanın.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Bilinmeyen dil</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" ve ailesi, geçerli dil kodları olarak tanınmadı.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Yerelleştirme kaynağı içe aktarılamadı.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Kayıt</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Duraklat</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Devam</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Dur</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">İptal Et</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Anlık Kayıt</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Yükseklik</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Genişlik</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Yakalama sıklığı modları arasında geçiş yapmak için düğmeye tıklayın.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">Elle</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Saniye başına azami kare</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">1 ile 60 fps arasında değişmek üzere, daha yüksek değerler daha fazla karenin yakalanacağı anlamına gelir.&#10;Her artış 16 milisaniye farkı ifade eder.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Dakika başına en fazla kare</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">1 ile 60 fpm arasında değişmek üzere, daha yüksek değerler daha fazla karenin yakalanacağı anlamına gelir.&#10;Her artış 1 milisaniye farkı ifade eder.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Saat başına en fazla kare</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">1 ile 60 fph arasında değişmek üzere, daha yüksek değerler daha fazla karenin yakalanacağı anlamına gelir.&#10;Her artış 1 dakika farkı ifade eder.</s:String>\n\n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Yakalamak için tıklayın veya tuşlara basın</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Pencereye Tuttur(Tutturmak için sürükleyip bırakın)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Ön Başlangıç</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Duraklatıldı)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Durduruluyor...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Ekran yakalanamadı</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Ekran yakalanamadı. Yakalama metodu 5 denemeden sonra kare döndürmedi.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Ekran yakalamayı başlatılamadı/durdurulamadı.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Desktop Duplication API'sini kullanarak ekranı yakalamak için Windows 8 veya daha üstü gerekir.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">Desktop Duplication API'sini kullanarak ekranı yakalamak için SharpDx kitaplıkları gereklidir. Seçenekler > Ekstralar'a giderek indirin.</s:String>\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Alan</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Bir alan seçin</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Pencere</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Bir pencere seçin</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Ekran</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Bir ekran seçin</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Dahili ekran</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Genel ekran</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Ekran kartı: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Çözünürlük: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Gerçek çözünürlük: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Seçimi taşımak için&#10;sürükleyin.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Kabul et</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Tekrar dene</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Sağ tıkla</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Seçimi iptal et(Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Bu ekranın bir alanını seçmek için tıklayıp sürükleyin.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Bir alan seçmek için tıklayıp sürükleyin.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Bu pencereyi seçmek için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Bu ekranı seçmek için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">İptal etmek için Esc'ye basın.</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Kaydı durdurmak için {0} tuşuna basın</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Kaydedici penceresi küçültülecek,&#10;geri yüklemek veya yakalamayı duraklatmak için {0} tuşuna basın</s:String>\n     \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Kaydı at</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Kaydı atmak istediğinizden emin misiniz?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Bu işlem, tüm kareleri kaldırarak kaydı atacaktır.&#x0d;Bu işlemi geri alamazsınız.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Web kamerası Kaydedicisi</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Video aygıtı bulunamadı :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Video aygıtlarını kontrol et.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Ölçek: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Video ölçeğini değiştir.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Pano kaydedici</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Otomatik Kayıt</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Çizim esnasında kayt.</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [Kilit]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Renk Seçici</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Renk Seç</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Kırmızı</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Yeşil</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Mavi</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Başlangıç Rengi</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Mevcut Renk</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">En Son Renk</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Bu renk örneklerine&#x0d;sürükleyin</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Ekranınızdan renkleri seçmek için&#x0d;tıklayıp sürükleyin.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Hata Görüntüleyici</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Dahili Hata Aç</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Gata tipi</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Mesaj</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Yığın</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Kaynak</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Birşeyler yanlış gidiyor.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Rapor Gönder</s:String>\n\n    <!--FFmpeg preset-->\n    <s:String x:Key=\"S.FfmpegPreset.Title\">FFmpeg Ön Ayarı</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Name\">Adı</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Parameters\">Parametreler</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">2-pass ile kodlamak için, sadece komuta '-pass 2' ekleyin.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Name\">Bu ön ayara bir isim vermelisiniz.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">Bu ön ayar için bazı parametreler yazmalısınız.</s:String>\n    <s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">Aynı isimde bir hazır ayar zaten var.</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Kareler Ekle</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Her iki taraf da aynı boyuta sahip olmalı, bu pencere, görüntüyü ve tuvali yeniden konumlandırmanıza ve yeniden boyutlandırmanıza olanak tanır. Seçmek ve yeniden boyutlandırmak için tıklayın.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Tuval Boyutu:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Tuval üzerine görüntüyü sığdır</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Tuvali, her iki görüntüyü de sığacak şekilde yeniden boyutlandırır (sol üst köşeden başlar).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Kare boyutlanrı arasında farklılıklar var. Kareleri eklemeden önce bunu çözmeniz gerekiyor.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Eklenen Kare(ler)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Mevcut Kare(ler)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Görüntü Boyutu:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Görüntü Pozisyonu:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Görüntü Boyutu&#x0d;ve Posizyonunu Sıfırla</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Yeni kareler geçerli kareler&#10;listesine eklenecek:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Önce</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Sonra</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Kare</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">İçe aktarılıyor</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Tuval dolgu rengini seçiniz</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Video'dan kareleri içe aktar</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Aktarıcı:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Yükleniyor...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Ölçek:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Boyut:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Yükseklik:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Genişlik:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Kare Hızı:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Başlama:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Bitiş:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Seçim:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Kareler:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Geçen süre:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Video yüklenemedi</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Önizleyici başlatılamadı. Başka bir aktarıcı ile deneyin veya videonun bozuk olup olmadığını kontrol edin.&#x0d;MediaPlayer kullanıyorsanız, \"Medya Özellikleri / Windows Media Player\" adlı Windows özelliğinin açık olup olmadığını kontrol edin ve gerekli video codec bileşenine sahip olduğunuzdan emin olun.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Kare önizlemesini alırken zaman aşımı.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">İçe aktarılacak kare seçilmedi.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Encoder</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Kodlanıyor...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Başlıyor</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Tamamlandı</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Panoya Kopyalandı</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Kopyalanırken hata</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Komut çalışırıldı</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Komut(lar)ın çıktısını göster.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Komut yürütülürken hata</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Yüklenirken hata</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Resmi silmek için sayfaya tıklayın(varsa).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Dakika cinsinden geçen süre:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analiz:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Kodlama:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Yükleme:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Kopyalama:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Komutlar:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Dosya Silinmiş veya Taşınmış</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">İptal edildi</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Hata</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Bu hatanın ayrıntılarını görmek için burayı tıklayın.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Yükleniyor</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Komutlar çalıştırılıyor</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">{0} işleniyor</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">İkinvi geçiş için hazırlanıyor</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">{0} işleniyor- 2nci geçiş</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Dosya oluşturma</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Değişmeyen pikselleri analiz et</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Analiz sonucu kaydediliyor</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Dosya Aç</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Klasörü Aç</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Listeden Kaldır</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Detayları Göster</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Görüntü Olarak Kopyala</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Dosya Adını Kopyala</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Dosya Yolunu Kopyala</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Linki kopyala</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Komut Çıktısı</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Komut çıktısı</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Bildirimler</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Tüm bildirimleri kapat</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Editör</s:String>\n    <s:String x:Key=\"S.Editor.File\">Dosya</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Editör Ekranı</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Yürütme</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Düzenle</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Görüntü</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Geçişler</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">İstatistikler</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Ayarlar</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Yardım</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Ekstralar</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Yeni bir güncelleme mevcut!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Bunun hakkında daha fazla bilgi edinmek için için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Toplam sayı, seçili sayı, seçili indeks</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Kareler Hazırlanıyor</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Geçersiz Yükleme - Tek seferde birden fazla dosya içe aktaramazsın. Tek dosya seçmeyi dene.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Geçersiz Yükleme - Tek seferde birden fazla proje yükleyemezsin. Tek bir proje seçmeyi dene.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Medya (Görüntü veya Video) Aç</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Bir Medya (Görüntü veya Video) yada bir Proje Dosyası Aç</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Tüm desteklenen dosyalar</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Görüntü</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Video</s:String>\n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif projesi</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif animasyonu</s:String>\n    <s:String x:Key=\"S.Editor.File.Apng\">Png animasyonu</s:String>\n    <s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>\n    <s:String x:Key=\"S.Editor.File.Wmv\">Windows medya video</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip dosyası, seçili tüm resimler</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png resim, seçili tüm resimler</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Zip olarak ScreenToGif projesi</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd dosyası</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Yeni bir kayda başlamak için üst menüdeki \"Dosya > Yeni\" seçeneğine gidin.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Resimleri, videoları veya projeleri içe aktarmak için sürükleyip bırakın.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Uygulamamı kullandığınız için çok teşekkür ederim!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Kare hızı, renk sayısı veya kareler arasındaki değişim miktarı ne kadar düşük olursa, boyut o kadar az olur.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Konuşmak ister misiniz? İletişim yöntemleri için \"Seçenekler > Hakkında\"yı açın</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Sorun mu yaşıyorsunuz? Geribildirim aracı ile bana ulaşın.</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Yeni kayıt cihazını denemek ister misiniz?&#x0d;Etkinleştirmek için \"Seçenekler > Kaydedici\"ye gidin.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Kayıt</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Web kamerası\\nKaydetme</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Pano\\nKaydetme</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Boş\\nAnimasyon</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Yeni</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Kayıt</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Web kamerası\\nKaydetme</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Pano&#x0d;Kaydı</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Medya</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Ekle</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Farklı Kaydet</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Medya veya\\nProje</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Son&#x0d;Projeler</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Proje Olarak&#x0d;Kaydet</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Projeyi\\nİptal et</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Eylemler</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Geri</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">İleri</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Sıfırla</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Pano</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Panoyu Göster</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Yapıştır</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Kes</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Kopyala</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Yakınlaştır</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">İçeriğe göre&#x0d;ayarla</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Sığdır</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Seç</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Tümünü&#x0d;Seç</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Git</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Ters Çevir</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Seçimi&#x0d;Kaldır</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Kayıttan Oynat</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">İlk</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Önceki</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Oynat</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Durdur</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Sonraki</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Son</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Oynatma Seçenekleri</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Oynatma sırasında döngü</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Sadece oynatma sırasında kullanılır.&#x0d;Gif'leri ve Apng'leri dışa aktarmak için döngü ayarlarını değiştirmek isterseniz,&#x0d;bazı kodlayıcılar için 'Farklı Kaydet' panelinde bulunmaktadır.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Kareler</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Sil</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Tekrarlananları&#x0d;kaldır</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Kare Sayısını&#x0d;Azalt</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Bir Öncekini Sil</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Bir Sonrakini Sil</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Yeniden Sıralama</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Ters</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Sola\\nTaşı</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Sağa\\nTaşı</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Gecikme Süresi</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Değiştir</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Arttırma yada&#x0d;Azaltma</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Ölçek</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Boyut ve Konum</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Boyutlandır</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Kırp</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Çevir/Döndür</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Metin</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Başlık</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Serbest Yazı</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Başlık Karesi</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Tuş&#x0d;Vuruşları</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Kaplama</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Serbest\\nÇizim</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Şekiller</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Fare&#x0d;Tıklamaları</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Filigran</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Kenar</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Gölge</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">İlerleme</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Pikselleştirme</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Stiller</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Karartma</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Kaydırma</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Genel</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Kare Sayısı</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Toplam Süre</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Kare Boyutu</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Ortalama Gecikme Süresi</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Güncel zaman</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Görüntülenmekte olan geçerli kareye dayalı geçerli(kümülatif) zaman.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">Kare DPI'sı ve ölçeği</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Seçili Kare</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Eylemi Kes</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Tüm kareleri kesemezsiniz.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Kayıt en az bir kare içermeli.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Tümünü kaldır</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Tüm kareleri kaldırmak istediğinize emin misiniz?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Bu işlem mevcut projeyi yok sayacaktır ve geri döndürülemez. Devam etmek istiyor musunuz?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Tümünü Kaldır</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Tüm kareleri silmek mi istiyorsunuz?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Tüm kareleri silmeyi deniyorsunuz.\\n\\rBu eylem geri alınamaz.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Önceki projeyi silmek istiyor musunuz?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Bunu yapmamayı seçerseniz, önceki proje 'Son Projeler' aracılığıyla açılabilecektir.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Kareleri Sil</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Silmek istediğinize emin misiniz?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Bu işlem şu sayıda {0} çerçeve(leri) silecektir.&#x0d;Bu işlem sonradan geri döndürülebilir</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Düzenleyiciden Çıkış</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Çıkmak istediğinize emin misiniz?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Üzerinde çalıştığınız mevcut proje 'Son Projeler' kısmından tekrar açılabilir.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Üzerinde çalıştığınız mevcut proje 'Son Projeler' kısmından tekrar açılabilir, fakat bir kaç gün sonra otomatik olarak silineceğini unutmayın.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Geçersiz Sürükle ve Bırak</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Tek seferde birden fazla dosyayı içe aktaramazsınız</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Tek dosya seçmeyi dene.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Dosyayı yüklemek imkansız</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Dosya yüklenemedi çünkü dosya geçerli bir formatta değil.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Tek seferde birden fazla proje içe aktaramazsın.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Yalnızca bir proje seçmeyi deneyin.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Uygulanacak metin yok.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Başlıka uygulamak için en az bir kare seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Metne uygulamak için en az bir kare seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Başlık Karesini uygulamanız için en az bir kare seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">En az bir kenarın kalınlığı sıfırdan büyük olduğunu bilmelisiniz.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">You have to select at least one frame to apply the Border to.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Karede bir fark oluşturmak için opaklık sıfırdan büyük olmalıdır.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Gölge derinliği ve bulanıklık yarıçapı sıfır olarak kullanıldığında, karenin arkasına gizleneceği için bir fark oluşmayacaktır.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Cinemagraph uygulamanız için en az bir piksel seçmelisiniz. Üstünü çizerek pikselleri seçin.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Karartma Geçisi</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Karartma Geçişlerini uygulamak için en az bir kare seçmeniz gerekiyor.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Tamamen şeffaf bir renk, bu geçişte herhangi bir etki yaratmaz.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Slayt Geçiş</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Slayt Geçişlerini uygulamak için en az bir kare seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Kareler Yükleniyor</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Proje yüklenemez</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Tamamı bozuk olduğundan veya resimler olması gereken yerde olmadığı için kareler yüklenemedi.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Bazı kareler yüklenemedi.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Bulunamadıklarından veya bozuk oldukları için kareler yüklenemedi.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Kaplamayı uygulamak için en az bir kare seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg mevcut değil. Bunu Yol ortam değişkenlerine ekleyin veya konumu ayarlamak için Seçenekler > Ekstralar'ı açmak için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski mevcut değil. Bunu Yol ortam değişkenlerine ekleyin veya konumu ayarlamak için Seçenekler > Ekstralar'ı açmak için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Bu uygulamanın önbelleğini depoladığı sürücüde yeterli alan kalmadı. (Kalan %{0}). Yer açmak için Seçenekler > Geçici Dosyalar'ı açmak için buraya tıklayın.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Farklı DPI'lara sahip birden çok görüntüyü içe aktarmayı denediniz, bu desteklenmiyor. Bazıları içe aktarıldı, diğerlerinin ayrıca içe aktarılması gerekiyor.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Kareler önbellekten geri çağırılıyor.</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Kareler Güncelleniyor</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">İçe aktarmaya hazırlanıyor</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Kareler İçe aktarılıyor</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Tekrarlananlar analiz ediliyor</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Gecikmeyi dengele</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Tekrarlananlar yok sayılıyor</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Kareleri İptal Etme</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Klasörleri İptal Etme</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Kareler Yeniden Boyutlandırılıyor</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Kareler Kırpılıyor</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Kaplama Karelere Uygulanıyor</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Başlık Kare Oluşturma</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Çevirme/Döndürmeler Karelere Uygulanıyor</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Gecikme Değiştiriliyor</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Geçiş Efekti Uygulanıyor</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Kayıt edilmeye hazırlanıyor</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Kare:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Görüntü Aç</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Klasörü Araştır</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">İçe Görüntü Aktar</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Kareye Git</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Kareye git (0 to {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Farklı kaydet</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Seçili Kareleri Kaldır</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Yeni Kayıt</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Yeni Webcam Kaydedici</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Yeni pano kaydı</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Yeni Boş Animasyon</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Projeden yada Medyadan Yeni</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Yeni kayıt oluşturuldu</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Yeni web kamerası kaydı oluşturuldu</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Yeni pano kaydı oluşuruldu</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Yeni proje oluşturuldu</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Geri alma çalıştırıldı</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Sıfırlama çalıştırıldı</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Tekrar uygula çalıştıldı</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} kare kesildi</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} kare kopyalandı</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} kare yapıştırıldı</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Yakınlaştırmayı ayarla {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Tüm kareler seçildi</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Kare #{0} seçildi</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Seçim tersine çevrilirdi</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Tüm kareler bırakıldı</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} kare silindi</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Kare listesi tersine çevrilirdi</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Yoyo etkisi uygulandı</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Kare(ler) sola taşındı</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Kare(ler) sağa taşındı</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Kareler yeniden boyutlandırıldı</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Kareler kesildi</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Kareler ters çevirildi/döndürüldü</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Çevirme işlemi seçilen kareler için, döndürme işlemi tüm kareler için geçerlidir</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Bu işlem tüm karelere uygulanır</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Bu işlem seçili karelere uygulanır</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Bu eylem, ayarlarınıza bağlı olarak tüm veya seçili karelere uygulanır</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph, ilk kareye göre tüm karelere uygulanır</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Kaplama uygulandı</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Başlık karesi oluşturuldu</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Başlık karesi seçili karenin öncesine yerleştirilecek</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Süre (gecikme) değiştirildi</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Geçiş eklendi</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Kare oranı azaltıldı</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Tekrarlananlar kaldırıldı</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Gizle</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Uygula</s:String>\n    <s:String x:Key=\"S.Action.Open\">Aç</s:String>\n    <s:String x:Key=\"S.Action.Save\">Kaydet</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">İptal</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Son Projeler</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Son projelere bakılıyor...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Oluşturulma tarihi</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Kare sayısı</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Seçili proje yok. Yüklemek için listeden bir proje seçin.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Bu proje bu editörde zaten görüntüleniyor.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Bu proje başka bir editörde halihazırda açık. Bir proje başka bir editörde açık olmadığı sürece ikinci defa açılamaz.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Pano Girdileri</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Pano Girdisi:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} görüntü</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} görüntüler</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">İçerik Keşfet</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Kaldır</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Davranışı Yapıştır</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Seçili kareden önce</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Seçili kareden sonra</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">Mevcut Özellikler</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">Yeni Özellikler</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">En-boy oranını koru.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Yeniden boyutlandırma için farklı bir değer seçmelisiniz.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Noktalar</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Üst:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Sol:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Alt:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Sağ:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Kırpılan alan geçerli kare boyutundan daha küçük olmalıdır.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Seçili kırpma alanı 10x10 pikselden daha büyük olmalıdır.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Yatay Çevir</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Dikey Çevir</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Sola 90º Döndür</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Sağa 90º Döndür</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Kare Sayısını Azalt</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Kaç Karede Bir:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Kaldırılacak Kare Sayısı:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Gecikme dengelemesi:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Değiştirmeyin</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Önceki kareyle topla</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Kalan karelerle eşit olarak toplayın.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Tüm projenin kare hızını azaltın.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Seçenek işaretli değilse, kaldırma faktöründen daha büyük olan&#10;ardışık birden çok kare seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Kaldırılacakları saymadan her {1} karede bir, {0} kare kaldırılacak.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Kare hızı azaltmayı uygulamak için kareleri seçmelisiniz (veya tüm projeye uygulama seçeneğini işaretleyin).</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Seçilen karelerin listesi ardışık olmalıdır. Seçilenlerin arasından, seçilmemiş karelerin bazılarını bırakamazsınız.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Özelliğin herhangi bir şeyi kaldırabilmesi için kare seçimi, kaldırma faktöründen büyük olmalıdır.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Tekrarlananları kaldır</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Benzerlik (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Kare kaldırma:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">İlk kareyi kaldır</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Son kareyi kaldır</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Gecikme dengelemesi:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Değiştirmeyin</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Ortalamayı kullan</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Toplamı kullan</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Bu eylem her kareyi piksel piksel analiz ederek yakınındaki en az %{0} benzeyenleri kaldırır.&#x0d;Karelerin gecikmesini (gösterilme süresini) ayarlamak isteyip istemediğinizi seçebilirsiniz.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Metin</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Yazı tipi</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Aile:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Stil:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Ağırlık:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Boyut:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Renk:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Arka plan rengi:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Dış çizgi</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Kalınlık:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Düzen</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Dikey:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Yatay:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Tuş vuruşları</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Tuşlar</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Ayraç</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Tuş vuruşlarını düzenle</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Dönüştürücü olarak kullanılmadığında Ctrl, Alt, Shift ve Windows tuşlarını yok say.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">\"Ctrl\" gibi tek tuş basımları yok sayılır, ancak \"Ctrl + C\" sayılmaz.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Tuş vuruşlarının görüntülenmesini uzatın.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Tuş vuruşlarının görüntülenmesini daha erken başlatın.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">(ms) olarak:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Kaydınızda tuş vuruşu yok.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Tuş Vuruşları Editörü</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Kare numarası</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Algılanan tuş vuruşları</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Tuş vuruşunu kaldır</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Bir tuş vuruşu ekle:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Küçük harfler</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Küçük, tek harfler eklemenizi sağlar.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Mod</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Dolma kalem</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Silgi</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Seç</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Stroke Eraser</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Genişlik:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Yükseklik:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Öneri:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Dikdörtgen</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Elips</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Diğer:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Is Highligther</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Eğriye Uydur</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Seçtiğiniz karelere uygulanacak çizim yok.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Serbest Çizimin uygulanması için en az bir kare seçmeniz gerekiyor.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Yerleştir</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Şekiller</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Yarıçap:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Kısa çizgiler:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Dönüklüğü sıfırla</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Kaldır</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Doldur</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Fare Tıklamaları</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Projenizde algılanan fare tıklaması yok.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Görüntü</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Dosya:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Hiçbir şey seçilmedi</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Saydamlık:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Bir Görüntü Seç</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Seçili kare(lerin) uygulanması için bir görüntü seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Filigranı uygulamak için en az bir kare seçmelisiniz.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Görünüm</s:String>\n    <s:String x:Key=\"S.Border.Info\">Kenarlığın görüntüyü genişletmesi için negatif değerler kullanın. Bunu yaparken, kenarlık tüm karelere uygulanacaktır..&#x0d;Hiçbir negatif değer kullanılmıyorsa, kenarlık sadece seçilen karelere uygulanır.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Gölge rengi:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Arkaplan rengi:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Doğrultu:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Bulanıklık yarıçapı:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Derinlik:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Pikselleştirme seçenekleri</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Piksel boyutu:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Her bir pikselleştirilmiş blok için ortalama rengi hesapla.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Pikselleştirilmesi gereken dikdörtgeni seçmek için seçim aracını kullanın.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Hiçbir şey seçmediniz. Lütfen pikselleştirilmesi gereken dikdörtgeni seçmek için seçim aracını kullanın.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Tür</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Bar</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Metin</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Hassasiyet:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Dakika</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Saniye</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Salise</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Oran</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Kare Sayısı</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Güncel tarih/zaman</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Özel</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Toplamı göster.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Biçim:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Biçim</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milisaniye</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = saniye</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = dakika</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = yüzdelik</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = kare sayısı</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Toplam:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Örnekler:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">.Net Framework'ten tarih ve saat biçimini kullanabilirsiniz..&#x0d;Tanımlar aşağıdaki iki bağlantıda mevcuttur.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Standart biçimler</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Özel biçimler</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Buradan say:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Kare numarası seçilen bu sayıdan saymaya başlar.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Oryantasyon:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Gecikmeli güncelleme</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Gecikme modu:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">ms cinsinden, geçersiz kıl</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">ms cinsinden, artırma veya azaltma</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">% cinsinden, ölçek</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Yeni Değer</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Kare başına en az 10ms.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Değeri Azalt/Arttır</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Ölçek Değeri</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Bu yeni değer, seçilen tüm karelerin süresinin (gecikmesinin) yerini alacaktır. Değer 10ms ile 25500ms arasında olabilir.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Bu değer, seçilen tüm karelerin süresinin (gecikmesinin) yerini alacaktır.&#x0d;-10000ms ile 10000ms arasında bir değer seçerek eksiltme/arttırma yapabilirsiniz, ancak her karenin son süresi 10ms ile 25500ms arasında sınırlandırılacaktır.</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Seçilen her karenin süresini (gecikmesini) yüzde değerine göre ölçeklendirin.&#x0d;%1 ile %1000 arasında bir değer seçerek her karenin süresini ölçekleyebilirsiniz, ancak her karenin son süresi 10 ms ile 25500 ms arasında sınırlandırılacaktır.</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Statik kalmaması gereken (kareler arasında değişmesi gereken) pikselleri, kalemi kullanarak üstlerini boyayın.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Geçiş Süresi</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Geçiş Gecikmesi</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Geçiş yap...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Sonraki Kare</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Tek renk</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Renk</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Geçişler seçili kare ve bir sonraki arasında uygulanacak.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Dosya Tipi</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">Görüntü karelerini</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">Proje olarak</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">Video</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Kodlayıcı</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Tooltip\">Aşağıdaki renk azaltma yöntemiyle yerleşik kodlayıcıyı kullanır.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Legacy\">Eski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Legacy.Tooltip\">Algoritma: NeuQuant.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Sistem</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">Varsayılan palet kullanır</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">ScreenToGif geliştiricisi tarafından oluşturulan kodlayıcı</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif ayarları</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Renk azaltma algoritması (kuantalama).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Sinir ağı</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Yüksek doğrulukta kuantalama. Daha yavaş, ancak daha yüksek miktarda renk için uygun.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Daha az renk içeren animasyonlar için uygundur. Daha hızlı, ancak renk geçişlerine neden olabilir.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median kesim</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Octree'den biraz daha iyi ve daha yavaş.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Gri tonlama</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Sabit bir gri tonlama paleti kullanır, bu nedenle çok daha hızlıdır.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">En çok kullanılan renkler</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Karelerde en çok kullanılan renkleri basitçe alır</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Örnekleme:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Örnekleme faktörü:&#10;1 değeri gif'in daha iyi görünmesini sağlar, ancak işlenmesi daha yavaş olur.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Kalite</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Renkler:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Her kare için maksimum renk sayısı</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Global bir renk tablosu kullanın.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">GIF'in kalitesini ve/veya boyutunu azaltabilir.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Döngü:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Tekrarlı Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Sonsuza kadar tekrarla.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Tekrar Sayısı.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Şeffaflığı aktif et.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">GIF'in arka planının tamamen şeffaf olmasını sağlayan tam şeffaflık modunu etkinleştirir.&#10; Bu seçenek etkinleştirilirse 'the chroma key' değiştirme işlemi yok sayılır.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Hangi rengin şeffaf olarak görüntüleneceğini seçin.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Bir renk seçilirse şeffafa dönüştürülecek ve oluşturulan gif'te şeffaf olarak görünecektir.&#10;Herhangi bir renk seçilmezse, tüm saydam renkler (Alpha = %0) normalde saydam olarak görünür.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Değişmeyen pikselleri tespit et</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Kareler arasında değişmeyen pikselleri analiz ile tespit ederek,&#10;gif'e sadece gerekli kısımların kaydedilmesini sağlar.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Bu pikselleri bir 'chroma' anahtarıyla değiştirin.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Tekrarlanan/değişmeyen pikseller bu 'chrome' anahtarıyla değiştirilerek&#10;kare başına daha az renk kullanılmasını sağlar.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng seçenekleri</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Döngülü apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Değişmeyen pikselleri algıla.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Değişmeyen tüm pikselleri şeffaf bir renkle boyayın.</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">Video ayarları</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">Fps:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">Videoyu çevir (düşey olarak).</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">Görüntü seçenekleri</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Görüntüleri ziple.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions\">Psd ayarları</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Görüntüyü sıkıştır.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Görüntü verisini RLE algoritmasını kullanarak sıkıştır.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Zaman çizelgesi verilerini kaydedin.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Sadece kareler yerine karelerin zamanlamalarını dışa aktarır.</s:String>\n    <s:String x:Key=\"S.SaveAs.ProjectOptions\">Proje ayarları</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">Ekstralar:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets\">Ön ayarlar:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Varsayılan</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Ekle</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Kaydet</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Düzenle</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Kaldır</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">Ön ayarı kaldır</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">Ön ayarı kaldırmak istiyor musunuz?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">Bu işlemi geri alamazsınız ancak ön ayarı daha sonra tekrar ekleyebilirsiniz.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Sıfırla</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">Ön Ayarı Sıfırla</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">Ön ayarı varsayılan parametrelerine sıfırlamak istiyor musunuz?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">Bu işlemi geri alamazsınız, ancak ön ayarı daha sonra tekrar düzenleyebilirsiniz.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">Hiçbir FFmpeg ön ayarı seçilmedi, lütfen birini seçin.</s:String>\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Kaydetme seçenekleri</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Dosyayı seçeceğiniz bir klasöre kaydedin.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">Üzerine yazın (eğer mevcutsa).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Proje olarak da kaydet (aynı klasör, aynı dosya adı).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Dosyayı yükle</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">Yükleme hedefi</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Panoya kopyala</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Dosya</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Çıktı dosyasını panoya kopyalar.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Klasör yolu</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Çıktı dosyasının klasör yolunu panoya kopyalar.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Dosya yolu</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Çıktı dosyasının yolunu panoya kopyalar.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Link</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Yükleme hizmeti tarafından oluşturulan linki panoya kopyalar.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Kodlama sonrası komutları yürütün</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Kodlamadan sonra yürütülecek komutları yazın.&#x0d;Birden çok komutu yürütmek için her birini ayrı satıra yazın.&#x0d;MAkrolar:&#x0d;{p} = Çıktı dosyası yolu.&#x0d;{f} = Çıktı dosyası yolu.&#x0d;{u} = Yüklenen dosyanın URL'si.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">Dosya</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Hedef klasör.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Konumu seç.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Dosya formatı</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Dosya ismi.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Animasyon</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Dosya sayısını arttır</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Dosya sayısını azalt</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Aynı isimli bir dosya zaten mevcut.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Panoya kaydet.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Dosyayı nereye kaydedeceğinizi seçmeniz gerekir (bir klasöre, panoya veya başka bir yere yükleyin).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Kodlama sonrası bir komut yürütmek için komut metin alanına bir şeyler yazmanız gerekir.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Yükleme hizmeti seçilmedi. Bir hedef seçmeniz gerekiyor.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Yetkililendirilmediği için seçilen hizmete yükleme yapamazsınız. Seçenekler'in üstü > Bu uygulamayı yetkilendirmek için Hizmetleri Yükle.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Dosyayı yüklemek üzere ayarlamadığınızdan dolayı bağlantı kopyalama seçeneğini seçemezsiniz.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Çıktı klasörünü seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Çıktı klasörü mevcut değil.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Çıktı klasörü bir veya daha fazla geçersiz karakter içeriyor. Lütfen geçerli bir klasör seçin.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Bir dosya adı seçmelisiniz.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Çıktı dosyasının adı bir veya birden çok geçersiz karakter içeriyor. Lütfen geçerli bir dosya adı seçin.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Dosya adı zaten kullanılıyor. Üzerine yazma seçeneğini veya farklı bir dosya adı seçin.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">İşlem iptal edildi.</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Kareleri dışa aktar</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Kareleri dışa aktarmak istediğinize emin misiniz?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Bu işlem {0} çerçeveyi doğrudan seçili klasöre aktaracaktır.</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Geri Bildirim</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Gönder</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Önizleme</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Geri Bildirim Gönder</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Başlık *</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Mesaj *</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Eğer bir hata fark ettiysen, bana adım adım bunu nasıl keşfettiğini anlatmayı unutma.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Geri Bildirim Türü</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Öneri</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Durum/Hata</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Mailiniz (Opsiyonel)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Geri besleme için bir başlık yazmalısın</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Geri besleme için bir mesaj yazmalısın.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Geliştiricinin geri dönüş sağlayabilmesi için bir e-posta adresi yazmalısın.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Arka planda gönderiliyor... Bu pencere kısa bir süre sonra kapanacaktır.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Ekler (Opsiyonel, 20MB Maksimum)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Eklenti Ekle</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Tüm Eklentileri Kaldır</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">İngilizce anlayabiliyorum</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">ve Portekizce (Brezilya ve Avrupa).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Bu, göndereceğiniz geri bildirim ve tüm ekleridir.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Sorun gidermek</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Herhangi bir pencere kayıp mı?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Eğer herhangi bir pencere kayıpsa (ekranın dışında),&#x0d;mevcut ve başlangıç konumunu sıfırlamak için aşağıdaki ayarları kullan.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Her pencerenin şu anda bulunduğu yer:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Her pencerenin bir dahaki sefer açılacağı yer:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Tüm pencereleri ana ekrana taşı.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Tüm pencerelerin başlangıç konumunu sıfırla.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">İtalik</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Eğik</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Siyah</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Kalın</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Yarım kalın</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Ekstra siyah</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Ekstra kalın</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Ekstra hafif</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Ağır</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Işık</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Orta</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Normal</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Düzerli</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Yarı Bold</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">İnce</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ultra Siyah</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ultra Kalın</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ultra Hafif</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Üst</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Merkez</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Alt</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Yay</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Sol</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Merkez</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Sağ</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Yatay</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Dikey</s:String>\n\n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Sol</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Sağ</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">Ortala</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">İk yana yasla</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Hiçbiri</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Altı çizili</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Üstü çizgili</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Üstü çizgili</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Kenar çizgisi</s:String>\n</ResourceDictionary>\n"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.uk.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Добре</s:String>\n    <s:String x:Key=\"S.Back\">Назад</s:String>\n    <s:String x:Key=\"S.Cancel\">Скасувати</s:String>\n    <s:String x:Key=\"S.Yes\">Так</s:String>\n    <s:String x:Key=\"S.No\">Ні</s:String>\n    <s:String x:Key=\"S.Add\">Додати</s:String>\n    <s:String x:Key=\"S.Edit\">Редагувати</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Назва</s:String>\n    <s:String x:Key=\"S.Description\">Опис</s:String>\n    <s:String x:Key=\"S.SelectColor\">Натисніть, щоб вибрати колір.</s:String>\n    <s:String x:Key=\"S.Documentation\">Натисніть, щоб перейти до документації.</s:String>\n    <s:String x:Key=\"S.Suppress\">Припинити</s:String>\n    <s:String x:Key=\"S.Preview\">Попередній перегляд</s:String>\n    <s:String x:Key=\"S.Size\">Розмір</s:String>\n    <s:String x:Key=\"S.Background\">Тло</s:String>\n    <s:String x:Key=\"S.Color\">Колір:</s:String>\n    <s:String x:Key=\"S.Delay\">Затримка</s:String>\n    <s:String x:Key=\"S.DelayMs\">Затримка (мс):</s:String>\n    <s:String x:Key=\"S.ValueMs\">Значення -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Значення масштабу:</s:String>\n    <s:String x:Key=\"S.Margin\">Поля:</s:String>\n    <s:String x:Key=\"S.Padding\">Відступ:</s:String>\n    <s:String x:Key=\"S.MinHeight\">Мінімальна висота:</s:String>\n    <s:String x:Key=\"S.AndOr\">та/або</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">О ні, сталась помилка :(</s:String>\n    <s:String x:Key=\"S.Required\">Обов`язкове поле.</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">Відсутня залежність</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 відсутній</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">Для нормальної роботи програми, вам необхідно завантажити правильну версію .Net Framework.&#10;Бажаєте відкрити веб-сторінку, щоб завантажити її?</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">Лише один екземпляр дозволено</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">Програма вже запущена</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif вже запущено, але, напевно, не відкрито жодного вікна. Перевірте системний трей, там має бути піктограма ScreenToGif.</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">Збереження налаштувань</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">Хочете спробувати зберегти їх ще раз?</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">Схоже, що ScreenToGif не має достатніх привілеїв для збереження налаштувань на диску.&#10;&#10;Бажаєте спробувати ще раз, але цього разу з адміністративними привілеями?</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">Вихід з ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Ви впевнені, що хочете вийти?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Всі вікна буде закрито, а піктограму трею буде вилучено.</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">Змінити Графічний Адаптер</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">Переключіться на відповідний графічний адаптер для захоплення вибраного екрана</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">Через обмеження в DirectX, ScreenToGif повинен бути запущений на тому ж графічному адаптері, що і екран, який захоплюється.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">Переключіть набір графічних адаптерів для ScreenToGif, відкривши Налаштування Windows > Система > Дисплей > Графіка, або натиснувши на посилання нижче.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">Переключіть графічний адаптер для ScreenToGif, відкривши налаштування графіки вашого графічного адаптера.</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">Відкрити Налаштування Windows</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc</s:String>\n    <s:String x:Key=\"S.Keys.Space\">Пробіл</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">Правий клік</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Новий запис екрану</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Новий запис веб-камери</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Новий запис дошки</s:String>\n    <s:String x:Key=\"S.Exit\">Вихід</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">Новий запис екрану</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">Новий запис веб-камери</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">Новий запис дошки</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">Нова анімація</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">Вставити запис екрану</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">Вставити запис веб-камери</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">Вставити запис дошки</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">Вставити з медіа (зображення і відео)</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">Зберегти як...</s:String>\n    <s:String x:Key=\"S.Command.Load\">Завантажити файли (зображення, відео та проекти)</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">Завантажити недавні проекти</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">Скасувати поточний проект</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">Перевизначити час кадрів</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Збільшення/зменшення часу кадрів</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">Масштабувати час кадрів</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">Встановити масштаб на 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">Відрегулюйте вікно відповідно до розміру рамки</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">Підігнати зображення до доступного розміру вікна</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">Вибрати перший кадр</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">Вибрати попередній кадр</s:String>\n    <s:String x:Key=\"S.Command.Play\">Відтворити анімацію</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">Вибрати наступний кадр</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">Вибрати останній кадр</s:String>\n    <s:String x:Key=\"S.Command.Undo\">Скасувати</s:String>\n    <s:String x:Key=\"S.Command.Redo\">Повторити</s:String>\n    <s:String x:Key=\"S.Command.Reset\">Скасувати всі зміни в проекті</s:String>\n    <s:String x:Key=\"S.Command.Copy\">Скопіювати вибрані кадри та зберегти їх у буфері обміну</s:String>\n    <s:String x:Key=\"S.Command.Cut\">Вирізати вибрані кадри та зберегти їх у буфері обміну</s:String>\n    <s:String x:Key=\"S.Command.Paste\">Вставити кадри з буфера обміну</s:String>\n    <s:String x:Key=\"S.Command.Delete\">Видалити всі виділені кадри</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">Видалити всі попередні кадри</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">Видалити всі наступні кадри</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">Видалити дублікати</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">Зменшити кількість кадрів</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">Створити плавний цикл</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">Реверсувати анімацію</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">Змушує анімацію рухатися вперед і назад</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">Перемістити виділений кадр вліво</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">Перемістити виділений кадр праворуч</s:String>\n    <s:String x:Key=\"S.Command.Resize\">Змінити розмір усіх кадрів</s:String>\n    <s:String x:Key=\"S.Command.Crop\">Обрізати всі кадри</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">Перегорнути чи повернути кадри</s:String>\n    <s:String x:Key=\"S.Command.Caption\">Додати підпис</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">Додати вільний текст</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">Додати кадр із заголовком</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">Вставляє клавіші, натиснуті під час запису</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">Малювати вільні форми</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">Додати фігури</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">Події миші</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">Вибрати зображення та додати як водяний знак</s:String>\n    <s:String x:Key=\"S.Command.Border\">Додати рамку</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">Додати тінь</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">Приховати чутливі частини на ваших кадрах</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">За допомогою інструментів малювання виберіть, які частини кадру не повинні залишатися статичними протягом всієї анімації</s:String>\n    <s:String x:Key=\"S.Command.Progress\">Індикатор прогресу або текст з деталями відтворення</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">Вибрати всі кадри</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">Перехід до кадру за індексом</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">Інвертувати виділення кадрів</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">Зняти виділення з усіх кадрів</s:String>\n    <s:String x:Key=\"S.Command.Fade\">Перехід із затуханням</s:String>\n    <s:String x:Key=\"S.Command.Slide\">Перехід кадру</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">Очистити всі завершені кодування</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">Підняти</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">Опустити</s:String>\n    <s:String x:Key=\"S.Command.Add\">Додати</s:String>\n    <s:String x:Key=\"S.Command.Open\">Відкрити</s:String>\n    <s:String x:Key=\"S.Command.Edit\">Редагувати вибраний елемент</s:String>\n    <s:String x:Key=\"S.Command.Save\">Зберегти вибраний елемент</s:String>\n    <s:String x:Key=\"S.Command.Remove\">Видалити вибраний елемент</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">Переглянути історію</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Запуск</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Запис</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Відкрити вікно, де ви можете легко почати запис з вашого екрану.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Веб-камера</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Відкрити вікно запису з вебкамери.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Дошка</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Відкрити дошку, де ви можете легко почати запис ваших малюнків.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Редактор</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Відкрити вікно редактора, головна частина програми, де ви можете почати і редагувати новий запис.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Налаштування</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Доступна нова версія</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Завантажує останню версію ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">ScreenToGif - Оновлювач</s:String>\n    <s:String x:Key=\"S.Updater.Header\">Доступна нова версія</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">Новий реліз!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Доступний новий реліз, версія {0}!&#x0d;Натисніть тут для детальної інформації.</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">Схоже, що ваша система більше не підтримується або щось змінилося в системі оновлень. Спробуйте завантажити його вручну з веб-сайту.</s:String>\n    <s:String x:Key=\"S.Updater.Version\">Версія</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">Портативна</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Інсталятор</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">Що нового?</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">Виправлення помилок:</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">Нова версія доступна для завантаження.&#x0d;Бажаєте відкрити браузер, щоб завантажити її?</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">Запустіть додаток після оновлення.</s:String>\n    <s:String x:Key=\"S.Updater.Download\">Завантажити</s:String>\n    <s:String x:Key=\"S.Updater.Install\">Встановити</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">Встановити вручну</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">Завантаження...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">Не вдалося показати деталі завантаження.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">Не вдалося завантажити оновлення.</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">Перед оновленням потрібно дочекатися завершення всіх кодувань.</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - Завантажувальник</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">Завантажувальник</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} з {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Налаштування</s:String>\n    <s:String x:Key=\"S.Options.App\">Програма</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Запис</s:String>\n    <s:String x:Key=\"S.Options.Editor\">Редактор</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">Задачі</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Гарячі клавіші</s:String>\n    <s:String x:Key=\"S.Options.Language\">Мова</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Сховище</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Додатково</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Хмарне сховище</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Пожертвувати</s:String>\n    <s:String x:Key=\"S.Options.About\">Про</s:String>\n    <s:String x:Key=\"S.Options.Other\">Інше</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">Відсутня комбінація клавіш для стеження за курсором</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">Щоб використовувати функцію стеження за курсором миші, ви маєте встановити комбінацію клавіш, щоб увімкнути її за потреби.</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">Запуск</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Запустити&#10;вручну</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">Програму буде запущено лише тоді, коли ви зробите це вручну.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Запускати з&#10;Windows</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Програму буде запущено після запуску Windows.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Неможливо перемикатися між режимами запуску.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Дозволити лише&#10;один екземпляр</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">Ви зможете запустити програму один раз для кожного користувача та виконуваного файлу,&#10;що означає, що різні користувачі або виконувані екземпляри можуть співіснувати.&#10;При спробі запустити програму знову, другий екземпляр спробує передати фокус першому і завершити роботу.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Дозволити декілька&#10;екземплярів</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">Ви зможете запускати додаток кілька разів одночасно, без обмежень.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">Запускати згорнутим до системного трею.</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(Значок у системному треї буде видно, доки ця опція активна)</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">Запускати:</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Стартове вікно</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Запис з екрану</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Запис з веб-камери</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Запис з дошки</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Вікно редактора</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Вікно, яке з'являється першим при запуску програми)</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">Тема</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Кольорова схема:</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Дуже світла</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Світла</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Середня</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Темна</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Дуже темна</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">Наслідувати системні налаштування</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Вибірковий</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Приклади кольорів.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">Значок у системному треї</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Відображати програму в системному треї (область сповіщень).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Тримати програму відкритою, навіть якщо всі вікна закриті.</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Нічого не робити</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Відкрити вікно</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">Жодне вікно</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Згорнути/відновити всі вікна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Згорнути всі вікна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Відновити всі вікна</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Лівий клік:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Лівий клік (x2):</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Середній клік:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Вікно:</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Інакше, відкривається:</s:String>\n    <s:String x:Key=\"S.Options.App.General\">Загальне</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Обхідний шлях для збою \"Недостатньо квоти...\".</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Експериментальне)</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Запитайте мене перед закриттям програми (за допомогою команди \"Вихід\").</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Вимкнути апаратне прискорення.</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(Інтерфейс користувача буде відтворюватись через програмний режим)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Перевіряти оновлення перекладу.</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Оновлені переклади будуть завантажені та встановлені автоматично)</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Перевіряти наявність оновлень при запуску.</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Автоматично встановлювати оновлення після закриття програми.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">Примусово завантажувати портативну версію.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">(Потребує ручного встановлення шляхом розархівування та заміни виконуваного файлу)</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Примусовий запуск оновлення з підвищеними привілеями.</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">Повідомте мене перед початком інсталяції.</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">Інтерфейс</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">Старий</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">Новий</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">Частота захоплення</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Ручний</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Кожен кадр буде захоплений вами вручну, натисканням кнопки захоплення або еквівалентної комбінації клавіш.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">Взаємодія користувача</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">Кадри будуть створюватися щоразу, коли ви натискаєте або вводите щось.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">За секунду</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Кадри будуть зніматися з частотою \"в секунду\",&#10;враховуючи знаменник частоти кадрів, встановлений на екрані запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">За хвилину</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Кадри будуть зніматися \"похвилинно\" (таймлапс),&#10;з урахуванням знаменника частоти кадрів, встановленого на екрані запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">За годину</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Кадри будуть зніматися \"за годину\" (таймлапс),&#10;враховуючи знаменник частоти кадрів, встановлений на екрані запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Затримка відтворення:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(У мс, для кожного захопленого кадру буде встановлено цю затримку)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">Затримка запуску:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">(У мс, кожне захоплення кадру чекатиме стільки часу перед початком)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Кожен кадр буде знято з інтервалом {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">Режим зйомки</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Використовуйте старий метод захоплення, який є повільнішим і може не працювати для захоплення ігор,&#10;але не потребує додаткових плагінів.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Використовуйте метод захоплення за допомогою Desktop Duplication API, який є швидшим&#10;і здатен захоплювати повноекранні ігри, але вимагає Windows 8 або новішої версії.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">Зберегти у&#10;файл</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">Кожен захоплений кадр буде збережено безпосередньо як зображення на диску.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">Кеш&#10;пам'яті</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">Кожен знятий кадр спочатку зберігається у пам'яті як масив пікселів (перед цим він може бути стиснутий).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">Стиснення:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Оптимальне</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Повільніше, але, ймовірно, більш оптимальне стиснення)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Найшвидше</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Швидше, але, ймовірно, менш оптимальне стиснення)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">Без стиснення</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(Не виконувати стиснення під час захоплення кадрів)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">Розмір кешу:</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(У МБ. Після досягнення цього розміру дані будуть записані/скинуті на диск)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">Запобігти захопленню повністю чорних кадрів</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">(Запобігає BitBlt з кешем пам'яті від помилкового отримання кадрів, у яких усі пікселі є чорними)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Показувати курсор миші під час запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Вибрати колір курсору</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Фіксована частота кадрів.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Постійна затримка, яка не змінюється відносно затримок запису)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">Записувати тільки тоді, коли щось відбувається.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">(Кадр буде захоплено лише тоді, коли щось зміниться в області захоплення)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Покращення продуктивності захоплення при з'єднанні з віддаленим робочим столом.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Вимикає захоплення багаторівневих вікон)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">Примусове очищення пам'яті під час захоплення.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">(Зменшує використання пам'яті під час захоплення, але знижує продуктивність)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">Направляючі лінії</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">Правило третини</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">Клацніть, щоб увімкнути відображення&#10;напрямної лінії правила третин</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">Перехрестя</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">Натисніть, щоб увімкнути&#10;відображення перехрестя.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">Напрямні лінії відображатимуться лише тоді, коли запис буде призупинено або зупинено.</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Приховати панель меню (полегшений режим).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Увімкнути екранну лупу.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Вмикає лупу під час вибору області запису)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">Анімувати межу області екрана під час виділення.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">(Анімація у стилі \"маршируючих мурах\")</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">Увімкнути панорамування виділення.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">(Відображає декоратор біля кута виділення, що дозволяє переміщати область запису)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">Компактний режим.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">(Показує зменшену версію командної панелі рекордера)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">Відображати кнопку відміни під час запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">(Зазвичай її видно лише під час паузи)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">Покращення ефективності вибору екрану.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">(Зменшує затримку під час вибору екрана шляхом відображення статичного зображення екрана)</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">Запам'ятовувати попередній розмір області запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">Запам'ятовувати попереднє розташування області запису.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Використовувати передстартовий зворотний відлік.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(В секундах, чекає, перш ніж почати знімати)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Увімкнути слідування за курсором.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(Область запису переміститься відповідно до розташування курсору)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Поле буфера в пікселях, з якого починається переміщення області запису)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Додатковий буферний відступ у пікселях, де інтерфейс починає ховатися)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">Запитувати мене, перш ніж видаляти запис.</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Тло редактора</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Розмір комірки</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Дуже малий</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Малий</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Середній</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Великий</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Дуже великий</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Я люблю великі квадрати</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Я сліпий</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Вибірковий</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Висота</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Ширина</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Застосувати</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Типовий колір</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Один колір</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Другий колір</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Відображати кодування в окремому вікні.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Розширити панель меню/chrome.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Автоматично регулювати розмір вікна залежно від розміру кадру одразу після завантаження.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Автоматичне налаштування масштабу кадру відповідно до розміру вікна одразу після завантаження.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Запитуйте мене, перш ніж видаляти кадри.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Запитуйте мене перед тим, як видалити проект.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Запитувати мене перед закриттям редактора (якщо у вас є відкритий проект).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Увімкнути потрійний клік для виділення тексту.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Малювати контур підписів за межами літер.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">Пропускати кадри, коли це необхідно.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">(Пропустити кадр, якщо попередній перегляд не встигає його відобразити)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">Пропустити кадр, якщо програма попереднього перегляду не встигає його відобразити.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Накласти обмеження на історію скасувань/повторів.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Старіші дії будуть видалені, коли буде досягнуто ліміт)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Максимальна кількість збережених дій)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">Синхронізувати вихідну папку між пресетами.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">(Пресети використовуватимуть той самий вихідний шлях)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">Також синхронізувати назву файлу.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">(Пресети також використовуватимуть те саме ім'я файлу)</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">Синхронізувати тільки між пресетами одного типу файлів.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">(Синхронізувати лише пресети одного типу файлів)</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Автоматизоване завдання</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Перелік автоматизованих завдань</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Задача</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Подробиці</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">Увімкнено</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">Увімкнути це завдання.</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">Вибрати завдання</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">Виберіть завдання вище</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Ці завдання виконуються послідовно від верхньої частини списку до нижньої. Це відбувається, коли ви вперше відкриваєте проект за допомогою редактора.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Глобальне</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Запис з екрану:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Відкриває запис екрану за замовчуванням)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Запис з веб-камери:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Відкриває рекордер веб-камери)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Запис з дошки:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Відкриває дошку для запису, щоб ви могли записувати свої малюнки)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Редактор:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Відкриває інше вікно редактора)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Параметри:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Відкриває вікно опцій. Ви можете відкрити лише одну за раз)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Вихід:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Закриває всі вікна та закриває програму з системного трею)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Рекордери</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Старт/Пауза:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Запускає або призупиняє запис. Використовується для створення знімків, якщо увімкнено режим знімків)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Зупинити:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Зупиняє запис і відкриває редактор)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Скинути:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Скасовує активний запис, коли його поставлено на паузу)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Стеження за курсором:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Вмикає налаштування області запису на основі положення курсору)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Відключити стеження:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Тимчасово вимикає регулювання області запису на основі положення курсору, приймаються лише клавіші-модифікатори)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Клацніть, щоб встановити фокус клавіатури, а потім натисніть потрібні клавіші та модифікатори.&#10;Деякі комбінації клавіш заборонені.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Мова програми</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Автовизначення</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Поточна мова ОС (якщо доступно)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Бажаєте перекласти мою програму?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Натисніть тут, щоб ознайомитися з рекомендаціями щодо перекладу та завантажити додаток Translator.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Після цього,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">натисніть тут, щоб імпортувати</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">і перевірити свій переклад.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Надішліть його мені на</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">коли закінчите переклад.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Натисніть, щоб відкрити веб-сторінку з вказівками.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Відкриває сторінку імпорту</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Відкриває програму електронної пошти</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">Статус</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">Розділ:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} вільно з {1}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">Перевірити ще раз, скільки залишилося місця.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">Очистити папку кешу.&#10;Ви зможете вирішити, чи хочете ви зберігати недавні проекти чи ні.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Мало місця на поточному вибраному жорсткому диску. Будь ласка, очистіть папку кешу або змініть її розташування.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">Неможливо отримати дані про диск.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">Немає файлів</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} файл</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} файлів</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">Немає папок</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} папка</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} папок</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} у використанні</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">Шляхи</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">Кеш:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Виберіть місце для кешу (тимчасових файлів).</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">Журнали:</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Виберіть місце для файлів журналу помилок.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">Переглянути вибрану папку.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">Розташування налаштувань</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Не існує</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Створити порожній файл локальних налаштувань.</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Видалити файл налаштувань.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Відкрийте папку, в якій знаходиться файл налаштувань.&#x0d;Утримуйте клавішу Ctrl під час клацання, щоб відкрити файл, якщо це можливо.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Схема завантаження налаштувань: За замовчуванням ◄ AppData ◄ Local.&#x0d;• Якщо у папці Local немає файлу налаштувань, програма виконує пошук у папці AppData, За замовчуванням використовується, якщо немає файлу налаштувань.&#x0d;• Якщо немає налаштувань у папці Local, всі налаштування зберігаються у файлі налаштувань AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">Видаляти всі файли з кешу при закритті програми.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">Запитувати мене перед тим, як видалити всі файли з кешу.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Автоматично видаляти старі проекти.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">При відкритті програми фонове завдання видаляє всі закриті проекти, що перевищують встановлений час.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(у днях, будь-який закритий проект, старший за цей час, буде видалено після відкриття програми)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Очистити кеш</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">Ви хочете очистити папку кешу?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">Коли ви створюєте запис або відкриваєте щось для редагування, створюється проект, який зберігається у папці кешу.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">Ви бажаєте видалити ці проекти з папки кешу?</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Не видаляти недавні проекти.</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Будуть видалені лише проекти, старші за {0} днів, які наразі не використовуються)</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(Всі проекти, які зараз не використовуються, будуть видалені)</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Проксі-сервер</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Вимкнено</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Вручну</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Система</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Використовує системний проксі-сервер)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Хост:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Порт:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Ім'я користувача:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Пароль:</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">Пресети завантаження</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">Сервіс</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">Назва</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">Опис</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">Увімкнено</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">Сервіс завантаження</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">Оберіть сервіс</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">Виберіть сервіс для завантаження вище</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">Користувацький</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">Увімкнути цей пресет.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">Подробиці</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">Назва:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">Опис:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">Анонімно</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">Аутентифіковано</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">Авторизація</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">Отримати токен</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">Вставте токен OAuth сюди</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">Ім'я користувача:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">Пароль:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Авторизуватись</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">Ім'я користувача та пароль не будуть збережені.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">Параметри</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Використовувати прямі посилання.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">Альбом</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">Ви повинні дати цьому пресету унікальне ім'я.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">Це ім'я вже використовується іншим пресетом завантаження.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">У режимі автентифікації ви повинні завершити процес автентифікації.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">Для авторизації в цьому додатку ви повинні ввести своє ім'я користувача та пароль.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">Не вдалося отримати токен авторизації.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Для того, щоб авторизуватися в цьому додатку, вам потрібно надати токен авторизації.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">Не вдалося виконати авторизацію. Перевірте, чи все правильно, і повторіть спробу через кілька секунд.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Не вдалося завантажити список альбомів.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">Авторизовано.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Не авторизовано.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Термін дії авторизації закінчився в {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Авторизація дійсна до {0}.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Отримуйте посилання з розширенням Gifv замість Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Завантажте gif-файли до вибраного альбому.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Альбом:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Запитуйте мене перед завантаженням</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">Перезавантажити список альбомів.</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">За замовчуванням</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">Попросіть мене заповнити деталі завантаження.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">Тип URL-адреси:</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Виберіть альбом (необов'язково)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">За бажанням ви можете вибрати альбом призначення:</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">Деталі завантаження (необов'язково)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">Деталі завантаження</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">Заголовок:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">Опис:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">Теги:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">Відокремлюйте теги за допомогою крапки з комою ( ; )</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">Відображати лише для тих, хто отримує доступ за прямим посиланням.</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">Історія завантажень</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">Дата</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">Пресет</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">Успішно?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">Видалити запис історії.</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">Посилання:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">Низька якість:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">Посилання для видалення:</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">Ви впевнені, що хочете видалити запис історії?</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">Ця дія не може бути скасована.&#10;&#10;Ви бажаєте видалити вибраний запис історії?</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Доступні зовнішні інструменти</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Натисніть тут, щоб завантажити&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Завантаження...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Завантажено&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Натисніть тут, щоб відкрити властивості файлу.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Програми, розповсюджувані через Microsoft Store, не можуть завантажувати інші програми. Вам доведеться завантажити їх вручну.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Місцезнаходження FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Виберіть місцезнаходження виконавчого файлу FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">Виконуваний файл FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Шлях до виконуваного файлу FFMpeg містить один або декілька неприпустимих символів. Будь ласка, виберіть правильне розташування для цього виконуваного файлу.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Розташування Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Виберіть місцезнаходження бібліотеки Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Бібліотека Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Шлях до бібліотеки Gifski містить один або декілька неприпустимих символів. Будь ласка, виберіть правильне розташування для цієї бібліотеки.</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Ліцензія FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Ліцензія Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">Ліцензія SharpDx</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">Відсутній дозвіл на запис у папці</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">Неможливо зберегти завантаження у теці через відсутність прав на запис.&#10;&#10;Бажаєте запустити завантажувач з адміністративними правами, щоб завершити завантаження?</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Пожертвуйте</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Пожертвуйте US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Пожертвуйте €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Відкриває сайт Paypal. Вибрана валюта: Долар</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Відкриває сайт Paypal. Вибрана валюта: Євро</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Відкриває сайт Paypal. Необхідно вибрати валюту.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">Підписатися</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Пожертвуйте щомісяця через Patreon.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Пожертвуйте щомісяця через Flattr.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">Подарувати ігри</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">Подарувати ігри через Steam.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">Подарувати ігри через GOG.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">Оплатіть каву через Ko-fi.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Криптовалюти</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Скопіювати адресу BitcoinCash.</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">Підтримати</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">Якщо ви бажаєте підтримати проект :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Версія:</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">Перевірити оновлення</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">У вас вже є остання версія.</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Автор: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Версія з Microsoft Store. Деякі функції вимкнено через застосовані політики.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Контакти</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Приєднатися до сервера</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Відвідати сторінку</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Приєднатися до кімнати</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Технічне</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Ліцензія:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Це абсолютно безкоштовна програма)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Вихідний код:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">Політика конфіденційності:</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Велика подяка</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Всім моїм прихильникам, людям, які надавали відгуки та/або пожертвування.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Локалізація</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">Отримання мовних кодів...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">Розпізнано як {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">Не розпізнано</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">Найнижчий ресурс - це поточний ресурс, який використовується.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Щоб застосувати власний ресурс, перемістіть його в кінець списку.</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">Експорт ресурсу...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">Зберегти як словник ресурсів</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">Відкрити словник ресурсів</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">Словник ресурсів</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">Імпорт ресурсів...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">Ім'я файлу не відповідає допустимому шаблону</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">Спробуйте перейменувати як: StringResources.en.xaml, де 'en' слід замінити на код вашої мови.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">Ви не можете додати ресурс з такою ж назвою</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Спробуйте видалити ресурс, що повторюється, або використовуйте інший мовний код.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">Надлишковий мовний код</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">Код \"{0}\" є надлишковим. Спробуйте використати замість нього \"{1}\".</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">Невідома мова</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" та його сім'я не були розпізнані як дійсні мовні коди.</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">Не вдалося імпортувати ресурс локалізації.</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Запис</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Пауза</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Продовжити</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Зупинити</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Відхилити</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Захоплення</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Висота</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Ширина</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">Слідування за курсором увімкнено.</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">Натисніть, щоб перемикатися між режимами частоти захоплення.</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">ручний</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">взаємодії</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">Максимум кадрів в секунду</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">к/с</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">Діапазон від 1 до 60 кадрів в секунду, причому вищі значення означають, що буде знято більше кадрів.&#10;Кожен приріст становить 16 мілісекунд різниці.</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">Максимум кадрів за хвилину</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">к/хв</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">Діапазон від 1 до 60 кадрів на хвилину, причому вищі значення означають, що буде знято більше кадрів.&#10;Кожен приріст становить 1 секунду різниці.</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">Максимум кадрів за годину</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">к/год</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">Діапазон від 1 до 60 кадрів за годину, причому вищі значення означають, що буде знято більше кадрів.&#10;Кожен приріст означає 1 хвилину різниці.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">Клацніть або натисніть клавіші, щоб захопити</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Захоплення вікна (Потягніть і відпустіть для захоплення)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Підготовка</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (призупинено)</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">Зупинка...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">Передстартова підготовка...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">Пройдений час захоплення.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">Загальна кількість кадрів:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">Знято вручну:</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">Зйомка поставлена на паузу.</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">Ваш комп'ютер не підтримує режим точного захоплення,&#10;а це означає, що цільова частота кадрів може ніколи не бути досягнута.</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">Не вдалося захопити екран</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">Не вдалося захопити екран. Метод захоплення не повернув жодного кадру після 5 спроб.</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">Неможливо було запустити/призупинити захоплення екрану</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">Для захоплення екрану за допомогою Desktop Duplication API потрібна Windows 8 або новіша версія.</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Область</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">Оберіть область</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Вікно</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">Оберіть вікно</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Екран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">Оберіть екран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">Внутрішній екран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">Загальний екран</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">Графічний адаптер: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">Роздільна здатність: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">Нативна роздільна здатність: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">Перетягніть, щоб&#10;перемістити виділення.</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Прийняти</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Повторіть спробу</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">Правий клік</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">Скасувати вибір (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Клацніть і перетягніть, щоб вибрати область цього екрана</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Клацніть і перетягніть, щоб вибрати область</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Натисніть тут, щоб вибрати це вікно</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Натисніть тут, щоб вибрати цей екран</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Натисніть Esc, щоб скасувати</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">Натисніть {0}, щоб зупинити запис</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">Вікно запису буде згорнуто,&#10;відновіть його або натисніть {0}, щоб призупинити запис</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">Видалити запис</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">Ви впевнені, що хочете видалити запис?</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">Ця дія призведе до видалення запису, вилучивши всі кадри.&#x0d;Ви не можете скасувати цю операцію.</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Запис Веб-камери</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Не знайдено відеопристрою :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Пошук відеопристроїв.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Масштаб: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Змінити масштаб відео.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Запис дошки</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Авто Запис</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Активує запис під час малювання</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [тримати]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Вибір кольору</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Вибрати колір</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Червоний</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Зелений</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Синій</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Прозорість</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Базовий колір</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Поточний колір</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Останній колір</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">Перетягніть це для&#x0d;зразка кольору</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">Клацніть і перетягніть, щоб вибрати&#x0d;кольори на екрані.</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Переглядач виключень</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Відкрити внутрішнє виключення</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">Тип виключення</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">Повідомлення</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">Стек</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">Джерело</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Сталося щось не так.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Надіслати звіт</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">Пресет</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">Кодер</s:String>\n    <s:String x:Key=\"S.Preset.Name\">Назва</s:String>\n    <s:String x:Key=\"S.Preset.Description\">Опис</s:String>\n    <s:String x:Key=\"S.Preset.Other\">Інше</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">Автоматично зберігати, коли опція змінюється.</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">Усі зміни в цьому пресеті (налаштування кодування та експорту) потрібно зберігати вручну, натиснувши кнопку \"Зберегти\".</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">Усі зміни в цьому пресеті (налаштування кодування та експорту) будуть збережені автоматично.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">Some of the properties of a default preset are read-only.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">You must give a name to this preset.</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">There's already a preset with the same name.</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">Автозбереження</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">Зміни до цього пресета зберігаються автоматично.</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">За замовчуванням ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">Пресет за замовчуванням для енкодера.</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">Для Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">Враховує обмеження на завантаження в Twitter (окрім розміру та роздільної здатності).</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">High Efficiency Video Coding.</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">Старіший і більш відомий кодек.</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">Анімація</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">Відео</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">Зображення</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">Проект</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">Висока якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">Краще підходить для записів з великою кількістю кольорів і градієнтів.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">Висока якість • Прозоре тло</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">Підтримує збереження анімації з прозорим фоном.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">Висока якість • Графіка</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">Краще підходить для записів з меншою кількістю кольорів.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • Збалансований</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">Хороша якість для фотографічних зображень за допомогою квантувача Ву без згладжування.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • Висока якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">Висока якість фотографічних зображень завдяки квантувачу Ву з вищим рівнем розрядності та дифузійному дизерингу помилок Флойда-Штейнберга.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • Низька якість, швидше</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">Кількісна оцінка всіх кадрів за допомогою однакової попередньо визначеної палітри \"web-safe\" і впорядкованого дизерингу Bayer 8x8.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • Вища якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">Вища якість зображення, але більший розмір файлу.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • Низька якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">Нижча якість зображення, але менший розмір файлу.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • Вища якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">Вища якість зображення, але більший розмір файлу.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • Низька якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">Нижча якість зображення, але менший розмір файлу.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • Нижча якість і швидше кодування</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">Ще нижча якість зображення, з швидшим кодуванням, але меншим розміром файлу.</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">System • Низька якість</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">Низька якість, але швидке кодування.</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • Висока якість</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">Висока якість зображення та невеликий розмір файлу, але повільне кодування.</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • Низька якість</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">Нижча якість зображення, менший розмір файлу та швидше кодування.</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">Висока якість</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">Висока якість зображення та невеликий розмір файлу.</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Вставити кадри</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Обидві сторони повинні мати однаковий розмір, це вікно дозволяє змінювати положення і розмір зображення та полотна. Клацніть, щоб вибрати і змінити розмір.</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Розмір полотна:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Підігнати зображення&#10;на полотно</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Змінює розмір полотна так, щоб обидва зображення помістилися всередині (від верхнього лівого кута).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Є різниця між розмірами кадрів. Ви маєте вирішити це перед вставлюванням кадрів.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Вставлені кадр(и)</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Поточний кадр(и)</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Розмір зображення:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Позиція зображення:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Скинути розмір і&#x0d;положення зображення</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Нові кадри буде додано до&#10;поточного списку кадрів у цій позиції:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Перед</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Після</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Кадр</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Імпорт</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Виберіть колір заповнення полотна</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Імпорт кадрів з відео</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">Імпортер:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">Завантаження...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Масштаб:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Розмір:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Висота:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Ширина:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Кількість кадрів:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Початок:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Кінець:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Вибір:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Кадри:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Тривалість:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">Не вдалося завантажити відео</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">Не вдалося запустити програму попереднього перегляду. Спробуйте інший імпортер або перевірте, чи відео не пошкоджене.&#x0d;Якщо ви використовуєте MediaPlayer, перевірте, чи увімкнена функція Windows \"Media Features / Windows Media Player\" і переконайтеся, що у вас встановлений необхідний відеокодек.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">Тайм-аут попереднього перегляду кадру.</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">Кадр для імпорту не вибрано.</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Кодувальник</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">Кодування...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">Початок</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Завершено</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Скопійовано до буферу обміну</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Не вдалось скопіювати</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Команду виконано</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Показати вивід команди (команд).</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Не вдалось виконати команду</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Не вдалось завантажити</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Клік щоб відкрити сторінку для видалення зображення (якщо доступно).</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">Час, що минув, у хвилинах:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Аналіз:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Кодування:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Завантаження:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Копіювання:</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Команди:</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Файли видалено або переміщено</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Відмінено</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Помилка</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Натисніть тут, щоб переглянути деталі цієї помилки.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Завантаження</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Виконання команд</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Обробка {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">Підготовка до другого проходу</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">Обробка {0} - 2-й прохід</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">Створення файлу</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">Аналіз не змінених пікселів</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">Збереження результату аналізу</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">Відкрити файл</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Огляд папки</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Видалити</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Показати деталі</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">Відхилити всі завершені кодування</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Скопіювати як зображення</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Скопіювати назву файлу</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Скопіювати шлях до теки</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Скопіювати посилання</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Вивід Команди</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Вивід команди</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Сповіщення</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Відхилити всі сповіщення</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Редактор</s:String>\n    <s:String x:Key=\"S.Editor.File\">Файл</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Головна</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Відтворення</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Редагувати</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Зображення</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Переходи</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Статистика</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Параметри</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Допомога</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Додатково</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">Доступно нове оновлення!</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Натисніть тут, щоб дізнатися більше про нього.</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Загальна кількість, кількість вибраних, індекс виділення</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Підготовка кадрів</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Некоректне завантаження - Ви не можете імпортувати кілька файлів відразу. Спробуйте вибрати тільки один файл.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Некоректне завантаження - Ви не можете імпортувати кілька проектів відразу. Спробуйте вибрати тільки один проект.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Відкрити мультимедійний файл (Зображення чи Відео)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Відкрити мультимедійний файл (Зображення чи Відео) або файл Проекту</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">Усі підтримувані файли</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">Зображення</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">Відео</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">Png анімація</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">Gif анімація</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">Webp анімація</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">Avi відео</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska відео</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">Mov відео</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">Mp4 відео</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">Webm відео</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">Bmp зображення</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">Jpeg зображення</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">Png зображення</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">Zip-файл із зображеннями</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">Проект ScreenToGif</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">Проект ScreenToGif як Zip</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">Psd-файл</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Перейдіть до \"Файл > Створити\", щоб почати новий запис</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Перетягніть зображення, відео або проекти для імпорту</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Щиро дякую за використання моєї програми!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Чим нижча частота кадрів, кількість кольорів або кількість змін між кадрами, тим менший розмір</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Хочете поговорити? Відкрийте \"Налаштування > Про\", щоб дізнатися про способи зв'язку</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Виникли проблеми? Повідомте мене через інструмент зворотного зв'язку</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Бажаєте спробувати новий рекордер?&#x0d;Перейдіть до \"Налаштування > Запис\", щоб увімкнути його.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Запис</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Запис з&#x0d;Веб-камери</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Запис з&#x0d;Дошки</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Новий&#x0d;Проект</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Новий</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Запис</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Запис з&#x0d;Веб-камери</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Запис з&#x0d;Дошки</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Медіа</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Вставити</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Зберегти як</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Завантажити</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Недавні&#x0d;Проекти</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Зберегти як &#x0d;Проект</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Скасувати&#x0d;Проект</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Стек дій</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Скасувати</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Повторити</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Скинути</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Буфер обміну</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Показати буфер обміну</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Вставити</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Вирізати</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Копіювати</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Збільшення</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Пристосувати&#x0d;до контенту</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Підігнати зображення</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Виділити</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Виділити&#x0d;все</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Перейти</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Інвертувати</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Зняти виділення</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Відтворення</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Перший</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Попередній</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Грати</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Пауза</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Наступний</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Останній</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Параметри відтворення</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Зациклювати під час відтворення.</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Використовується лише під час відтворення.&#x0d;Якщо ви хочете змінити налаштування циклу для експорту Gif та Apng,&#x0d;це буде доступно на панелі \"Зберегти як\" для деяких енкодерів.</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Кадри</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Видалити</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Видалити&#x0d;Дублікати</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Зменшити&#x0d;к-сть кадрів</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Плавний&#x0d;цикл</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Видалити усі попередні</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Видалити усі наступні</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Зміна впорядкування</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">У зворотній бік</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Йо-йо</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Перемістити&#x0d;Вліво</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Перемістити&#x0d;Вправо</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Затримка (Тривалість)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Перевизначити</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Збільшити або&#x0d;Зменшити</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Масштаб</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Розмір та Позиція</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Зміна розміру</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Вирізати</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Віддзеркалення/Поворот</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Текст</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Підпис</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Вільний текст</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Кадр заголовку</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Натискання&#x0d;клавіш</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Накладання</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Довільне&#x0d;Малювання</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Фігури</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Події&#x0d;миші</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Водяний знак</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Рамка</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">Тінь</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">Прогрес</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Приховати</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Стилі</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Затухання</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Слайд</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Головна</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Кількість кадрів</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Загальна тривалість</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Розмір кадру</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Середня тривалість (затримка)</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Поточний час</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">Поточний час на основі поточного кадру, що відображається.</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI кадру та масштаб</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Вибраний кадр</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Вирізування</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Ви не можете вирізати всі кадри.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Запис потребує хоча б один кадр.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Видалити все</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Ви впевнені, що хочете видалити всі кадри?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Ця дія призведе до скасування поточного відкритого проекту і не може бути скасована. Бажаєте продовжити?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Відхилити проект</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Ви впевнені, що хочете відхилити проект?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Ви хочете видалити всі кадри.&#x0d;Ви не зможете скасувати цю операцію.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Ви хочете скасувати попередній проект?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Якщо ви цього не зробите, попередній проект буде доступним для відкриття через \"Недавні проекти\".</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Видалити кадри</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Ви впевнені, що хочете видалити?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Ця дія видалить {0} кадр(и).&#x0d;Ви зможете скасувати цю дію пізніше.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Вихід з редактора</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Ви впевнені що хочете вийти?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Поточний проект, над яким ви працювали, можна знову відкрити через \"Недавні проекти\".</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Поточний проект, над яким ви працювали, можна знову відкрити через \"Недавні проекти\", але не забувайте, що через кілька днів він буде автоматично видалений.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Неправильне перетягування</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Ви не можете імпортувати відразу кілька файлів</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Спробуйте вибрати тільки один файл.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Неможливо завантажити файл</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Файл не вдалося завантажити, оскільки він має неправильний формат.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Ви не можете імпортувати відразу кілька проектів</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Спробуйте вибрати тільки один проект.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Немає тексту, який можна використати.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Ви мусите вибрати хоча б один кадр, щоб вставити Підпис.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Ви мусите вибрати хоча б один кадр, щоб застовувати текст.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Ви мусите вибрати хоча б один кадр, щоб вибрати Кадр Заголовку наступним після нього.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Ви мусите вказати товщину рамки більшу за нуль хоча б по одній стороні.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Ви мусите вибрати хоча б один кадр, щоб застовувати Рамку.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">Прозорість має бути більшою за нуль, щоб можна було помітити якусь різницю в кадрі.</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">Якщо глибина тіні та радіус розмиття дорівнюють нулю, це не матиме жодного значення, оскільки тінь буде прихована за кадром.</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Ви мусите вибрати хоча б один піксель, щоб застовувати режим Cinemagraph. Виберіть пікселі пишучи зверху них.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Перехід із затуханням</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Вам потрібно виділити принаймні один кадр, до якого буде застосовано перехід із затуханням.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">Повністю прозорий колір не створить жодного ефекту на цьому переході.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Перехід слайду</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Вам потрібно виділити принаймні один кадр, до якого буде застосовано перехід слайдів.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Завантаження кадрів</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Неможливо завантажити проект</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Не вдалося завантажити кадри, тому що всі вони були пошкоджені або зображення були відсутні там, де вони повинні були бути.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">Деякі кадри не вдалося завантажити</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Не вдалося завантажити кадри, тому що їх не вдалося знайти або вони були пошкоджені.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Для того, щоб застовувати накладання ви маєте вибрати хоча б один кадр.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg відсутній. Додайте його до змінних середовища Path або натисніть тут, щоб відкрити меню Налаштування > Додатково, щоб задати місце розташування.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski відсутній. Додайте його до змінних середовища Path або натисніть тут, щоб відкрити меню Налаштування > Додатково, щоб задати місце розташування.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">На диску, де зберігається кеш цієї програми, недостатньо місця ({0}%). Натисніть тут, щоб відкрити Налаштування > Тимчасові файли, щоб звільнити місце.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">Ви спробували імпортувати декілька зображень з різною роздільною здатністю, що не підтримується. Деякі з них було імпортовано, інші потрібно імпортувати окремо.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">Ви намагалися імпортувати кілька зображень різного розміру, що не підтримується. Деякі з них було імпортовано, інші потрібно імпортувати окремо.</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">Отримання кадрів з кешу</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Оновлення кадрів</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Підготовка до імпорту</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Імпорт кадрів</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Аналіз дублікатів</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Налаштування затримки</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Видалення дублікатів</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Discarding Frames</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Discarding Folders</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Зміна розміру кадрів</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Обрізання кадрів</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Застосування ефекту переходу до кадрів</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Створити кадр заголовку</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Застосування Віддзеркалення/Повороту до кадрів</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Редагування затримки</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Застосування ефекту переходу</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Підготовка до збереження</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">Скасувати завантаження і скасувати проект.</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">Пошук ідеального циклу</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">Відкидання невикористаних у циклі кадрів</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Кадр:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Відкрити зображення</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Перейти до папки</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Перейти до кадру</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Перейти до кадру (0 до {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Зберегти як</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Видалити вибрані кадри</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Новий запис</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Новий запис з вебкамери</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Новий запис дошки</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Новий проект</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Новий з медіа або проекту</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Новий запис створено</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Новий запис веб-камери створено</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Новий запис дошки створено</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Новий проект створено</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Скасування виконано</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Скидання виконано</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Повторення виконано</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} кадр(и) вирізано</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} кадр(и) скопійовано</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} кадр(и) вставлено</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Масштаб встановлено на {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Всі кадри були вибрані</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Вибрано кадр #{0}</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Виділення інвертовано</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Всі кадри було знято з виділення</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} кадр(и) видалено</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Список кадрів змінено на зворотний</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Застосовано ефект йо-йо</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Кадр(и) переміщено вліво</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Кадр(и) переміщено вправо</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Змінено розмір кадрів</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Кадри обрізано</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Кадри перевернуті/обернуті</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Дія \"перевернути\" застосовується до вибраних кадрів, а \"повернути\" - до всіх кадрів</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Ця дія застосовується до всіх фреймів</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Ця дія застосовується до вибраних кадрів</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">Ця дія застосовується до всіх або вибраних кадрів, залежно від ваших налаштувань</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Сінемаграф застосовується до всіх кадрів на основі першого кадру</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Застосовано накладання</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Створено титульний кадр</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Титульний кадр буде вставлено перед вибраним кадром</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Змінено тривалість (затримку)</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Вставлено перехід</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Зменшена частота кадрів</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Видалено дублікати</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Приховати</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Застосувати</s:String>\n    <s:String x:Key=\"S.Action.Open\">Відкрити</s:String>\n    <s:String x:Key=\"S.Action.Save\">Зберегти</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Скасувати</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Недавні проекти</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Шукаємо нещодавні проекти...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Дата створення</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Кількість кадрів</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Не вибрано жодного проекту. Виберіть проект зі списку для завантаження.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">Цей проект вже відображається у цьому вікні редактора.</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Цей проект вже було відкрито в іншому вікні редакторі. Проект не можна відкрити вдруге, якщо його вже відкрито в іншому редакторі.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Записи буфера обміну</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Запис у буфері обміну:</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} зображення</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} зображень</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">Дослідити вміст</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Видалити</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Поведінка вставки</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Перед вибраними кадрами</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Після вибраних кадрів</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">Різниця</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">Параметри</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">Пікселі (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">Відсотки (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Зберігати співвідношення сторін.</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">Якість:</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant • Вища якість</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">Лінійна • Низька якість</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">Найближчий сусід • Нижча якість і швидше</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">Якість масштабування.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Ви мусите вибрати інше значення, щоб змінити розмір.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Точки</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Вверху:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Зліва:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Внизу:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Справа:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Область, яка вирізається має бути меншою ніж поточний розмір кадру.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Область обрізки повинна бути більшою, ніж 10x10 пікселів.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Віддзеркалити по горизонталі</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Віддзеркалити по вертикалі</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Повернути вліво на 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Повернути вправо на 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Зменшити частоту кадрів</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Фактор:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Кількість видалення:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">Регулювання затримки:</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Не змінювати</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">Сума з попереднім кадром</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">Рівномірно сума з рештою кадрів</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">Зменшити частоту кадрів всього проекту.</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">Якщо опцію знято, ви повинні вибрати декілька послідовних кадрів,&#10;більших за коефіцієнт видалення.</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">Буде видалено {0} кадрів після кожних {1} кадрів, не враховуючи видалені кадри.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">Ви повинні вибрати кадри, до яких буде застосовано зменшення частоти кадрів (або встановити прапорець \"Зменшити частоту кадрів всього проекту\").</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">Список вибраних кадрів має бути послідовним. Не можна залишати деякі кадри невиділеними серед виділених.</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">Вибірка кадрів має бути більшою, ніж коефіцієнт видалення, щоб функція могла видалити що-небудь.</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Видалення дублікатів</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Схожість (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Видалення кадрів:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Видалити перший кадр</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Видалити останній кадр</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Регулювання затримки:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Не змінювати</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Використовувати середнє</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Використовувати суму</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Ця дія аналізує кожен кадр (піксель за пікселем) і видаляє ті, які принаймні на {0} % схожі на його найближчого сусіда.&#x0d;Ви можете вибрати, чи хочете ви налаштувати затримку (тривалість показу) кадрів.</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">Створити плавний цикл</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">Ігнорувати перші:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">Порівнювати з:</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">Кінець</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">Початок</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">Намагається знайти кадр, принаймні на {0} % схожий на початковий, і видаляє всі наступні кадри.&#x0d;Ви можете вибрати, чи хочете ви ігнорувати деякі початкові кадри і починати порівняння з початку (після порогового значення) або з кінця.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">Кількість кадрів для ігнорування має бути меншою за загальну кількість кадрів.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">Створити плавний цикл з вибраними налаштуваннями не вдалося.</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">Ви вже маєте плавний цикл на основі вибраних налаштувань.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Текст</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Шрифт</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Сім'я:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Стиль:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Товщина:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Розмір:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Колір:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Колір фону:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Контур</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Товщина:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Розташування</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Вертикально:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Горизонтально:</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">Вирівнювання:</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">Декорації:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Натискання клавіш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Клавіші</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Розділювач:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Редагуйте натискання клавіш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Ігнорувати клавіші Ctrl, Alt, Shift та Windows, якщо вони не використовуються як модифікатори.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Ігнорувати одиночні натискання клавіш, таких як \"Control\", але не ігноруватиме \"Control + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">Ігнорувати програмні віртуальні натискання клавіш.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">Записувати лише натискання клавіш користувачем.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Розширити відображення натиснутих клавіш.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Почати відображення натиснутих клавіш раніше.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">На (мс):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">У вашому записі немає натискань клавіш.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Редактор Натискання Клавіш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Номер кадру</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Виявлені натискання клавіш</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Видалити натискання клавіші</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Додати натискання клавіші:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Малі літери.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">Дозволяє вставляти малі літери.</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Режим</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Олівець</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Гумка</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Вибрати</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Повне очищення</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Ширина:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Висота:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Порада:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Прямокутник</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Еліпс</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Інше:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Світліший колір</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Згладжування лінії</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Немає малюнків, які використати для кадрів, які ви вибрали.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Ви мусите вибрати хоча б один кадр, щоб застовувати Довільне Малювання.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Вставити</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Фігури</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Радіус:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Пунктир:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">Керує розміром пунктирних ліній та проміжків.&#10;Ви можете встановити декілька розмірів для створення вишуканого стилю пунктирних ліній.&#10;За замовчуванням встановлено значення \"1 0\" або пусте, що означає пунктир без проміжків.</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Скинути обертання</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">Видалити</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">Заливка</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">Події миші</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">Колір виділення миші:</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">Колір лівої кнопки</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">Колір середньої кнопки</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">Колір правої кнопки</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Зображення</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Файл:</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">Нічого не вибрано</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">Прозорість:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Виберіть зображення</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Ви мусите вибрати зображення, щоб застовувати до вибраних кадр(-ів).</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Ви мусите вибрати хоча б один кадр, щоб накласти Водяний знак.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Зовнішній вигляд</s:String>\n    <s:String x:Key=\"S.Border.Info\">Використовуйте від'ємні значення, щоб рамка розширювала зображення. У цьому випадку, рамку буде застосовано до всіх кадрів.&#10;Якщо від'ємне значення не використовується, рамку буде застосовано лише до вибраних кадрів.</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">Колір тіні:</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">Колір тла:</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">Напрямок:</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">Радіус розмиття:</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">Глибина:</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">Пікселізувати</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">Розмити</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">Затемнити</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">Засвітлити</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">Параметри приховування</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Розмір пікселів:</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">Рівень розмиття:</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">Рівень затемнення:</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">Рівень засвітлення:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Обчислити середній колір для кожного піксельного блоку.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">Застосувати приховування до не виділеної частини.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">Гладкість</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">За допомогою інструмента виділення виберіть частину кадру, яку потрібно приховати.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">Використовуйте інструмент виділення, щоб виділити частину кадру, яка не повинна бути прихованою.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Ви нічого не виділили. Будь ласка, скористайтеся інструментом виділення, щоб виділити прямокутник, який слід приховати.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Тип</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Шкала</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Текст</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Точність:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Хвилин</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Секунд</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">Мілісекунд</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Відсотків</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Номер кадру</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Фактична дата/час</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Спеціальна</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Показати загальне.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Формат:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">Формат</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = мілісекунди</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = секунди</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = хвилини</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = відсоток</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = номер кадру</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">Всього:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">Приклади:</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">Ви можете використовувати формат дати і часу з .Net Framework.&#x0d;Специфікація доступна за цими двома посиланнями нижче.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Стандартні формати</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Спеціальні формати</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">Рахувати від:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Починати відлік номера кадру з цього вибраного номера.</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">Орієнтація:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Оновлення затримки</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Режим затримки:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Перевизначення (в мс)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Збільшення або зменшення (в мс)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Масштаб (у %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Нове значення</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Мінімум 10мс на кадр.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Зменшити/Збільшити значення</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Значення масштабу</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Це нове значення замінить тривалість (затримку) всіх виділених кадрів. Значення може бути від 10 мс до 25500 мс.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Це значення зменшуватиме/збільшуватиме тривалість (затримку) кожного вибраного кадру.&#x0d;Ви можете зменшувати/збільшувати, вибираючи значення від -10000 мс до 10000 мс, але остаточна тривалість кожного кадру буде обмежена від 10 мс до 25500 мс</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Масштабування тривалості (затримки) кожного вибраного кадру на значення у відсотках.&#x0d;Ви можете масштабувати тривалість кожного кадру, вибравши значення від 1% до 1000%, але остаточна тривалість кожного кадру буде обмежена від 10 мс до 25500 мс</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">За допомогою пера виділіть пікселі, які не повинні залишатися статичними (які повинні змінюватися між кадрами), зафарбовуючи їх зверху.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Довжина переходу</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Затримка переходу</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Затухати до...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Наступний кадр</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">Колір</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Колір</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Перехід застосується між вибраними і наступним кадрами.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Тип файлу та пресет</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">Формат вихідного файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">Пресет експорту, який містить усі поточні налаштування, що відображаються на екрані.&#10;Керуйте пресетами експорту за допомогою кнопок нижче.</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">Анімоване зображення</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">Відео</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">Кадри</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">Інше</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">Animated Portable Network Graphics</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">Graphics Interchange Format</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">Webp</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web Picture</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">Audio Video Interleave</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">Формат файлів QuickTime</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">Webm</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web Movie</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">Joint Photographic Experts Group</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">Portable Network Graphics</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">Проект</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">Проект ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">Psd</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Файл Photoshop</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">Пресети:</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">Стандартний</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">Додати</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">Зберегти поточні налаштування до цього пресета експорту.</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">Редагувати</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">Видалити</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">Скинути налаштування цього пресета експорту до значень за замовчуванням.</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">Видалення пресету</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">Ви впевнені, що хочете видалити цей пресет?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">Цю дію не можна скасувати.&#10;&#10;Ви бажаєте видалити вибраний пресет?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">Скидання пресету</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">Ви впевнені, що хочете скинути цей пресет?</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">Цю дію неможливо скасувати.&#10;&#10;Бажаєте скинути вибраний пресет до налаштувань за замовчуванням?</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Кодер</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">Кодер і квантувач</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">Кодер, що відповідає за створення вихідного файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">Вбудований кодер.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Системний</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">Кодер, що надається системою.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">Зовнішній кодер, розроблений FFmpeg.org.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">Зовнішній кодер, розроблений Gif.ski.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">Параметри кодера</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">Увімкнути розширений режим.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">Вручну введіть параметри для керування енкодером.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">Параметри:</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">Cписок параметрів, які буде передано до FFmpeg.&#10;&#10;Спеціальні параметри:&#10;{I} - вхідний шлях (кадри).&#10;{O} - вихідний шлях (експортований файл).&#10;{W} - ширина кадру.&#10;{H} - висота кадру.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">Для кодування з 2-ма проходами просто додайте '-pass 2'.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">Попередній перегляд</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">Перегляньте список параметрів, які буде передано до FFmpeg.</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">Документація про кодек</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">Документація про формат</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">Документація про фільтри</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Параметри Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Алгоритм зменшення кольору (квантування).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Нейромережа</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">Квантування з високою точністю. Повільніше, але добре підходить для більшої кількості кольорів.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Октодерево</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Добре підходить для анімації з меншою кількістю кольорів. Швидше, але може створювати кольорові смуги.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Середній зріз</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Менш якісний, ніж Октодерево, і повільніший.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Відтінки сірого</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Використовує фіксовану палітру відтінків сірого, тому працює набагато швидше.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Найпоширеніші кольори</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Просто беруться найчастіше використовувані кольори в кадрах.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Вибірка:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Коефіцієнт вибірки:&#10;Значення 1 призведе до кращого вигляду gif-файлу, але він буде повільніше рендеритися.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Якість:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Кольори:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Максимальна кількість кольорів (для кожного кадру).</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Використовувати глобальну таблицю кольорів.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">Може зменшити якість та/або розмір gif-файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">Найкращий</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">Найшвидший</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">Використовувати ще швидший процес кодування.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">Може знизити якість гіфки.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Цикл:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Зациклена Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Постійно повторювати.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Кількість повторів.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Увімкнути прозорість.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Вмикає режим повної прозорості, який робить фон gif-файлу повністю прозорим.&#10;Хромакей буде проігноровано, якщо цей параметр увімкнено.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Виберіть, який колір відображати як прозорий.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">Якщо вибрано колір, його буде перетворено на прозорий, і він відображатиметься як прозорий у згенерованому gif-файлі.&#10;Якщо не вибрано жодного кольору, всі прозорі кольори (Прозорість = 0%) відображатимуться як прозорі у звичайному режимі.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Знайти незмінені пікселі.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">Проаналізувавши і виявивши незмінні пікселі між кадрами,&#10;можна буде зберегти в gif лише необхідні частини.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Замінити ці пікселі на хромакей.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Повторювані/незмінні пікселі будуть замінені цим кольором,&#10;що дасть змогу використовувати менше кольорів на кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Хромакей:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">Розсієння:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Шкала Баєра:</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">Квантувач</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">Колір тла:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">Пікселі з прозорістю, які обраний квантор вважає непрозорими, будуть змішані з цим кольором до отримання квантуваного кольору.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Поріг прозорості:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">Визначає вхідне значення прозорості, при якому квантований колір буде прозорим.&#x0d;&#x0a;Якщо 0, то результат ніколи не матиме прозорості.&#x0d;&#x0a;Якщо 255, то прозорими вважатимуться лише повністю прозорі пікселі.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">Поріг білого:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">Визначає найнижчу вхідну яскравість, щоб вважати результат білим.&#x0d;&#x0a;Впливає на яскравість результату. Однак значення цього параметра може компенсувати похибку дифузійного згладжування.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">Пряме співставлення</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">Якщо позначено, квантований колір визначається шляхом прямого відображення, а не пошуку найближчого елемента палітри.&#x0d;&#x0a;Це прискорює квантування, але може призвести до підвищення контрастності результату. Однак значення цього параметра може бути компенсовано дифузійним згладжуванням похибки.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">Розмір палітри:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">Визначає максимальний розмір палітри на кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">Власний рівень розрядності.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">Якщо позначено, рівень розрядності можна налаштувати вручну.&#x0d;&#x0a;⚠️ Попередження: Найвищий бітовий рівень може вимагати БАГАТО пам'яті!</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">Вище значення означає більшу точність, більший цільовий колірний простір, повільнішу обробку та більше використання пам'яті.&#x0d;&#x0a;Наприклад, якщо 1, то результат може мати не більше 8 кольорів, або якщо 2, то не більше 64 кольорів. &#x0d;&#x0a;Для кванторів Октодерева та Ву це також впливає на максимальну кількість монохроматичних відтінків.&#x0d;&#x0a;Наприклад, якщо 5 (це значення за замовчуванням для квантора Ву), то можна розрізнити лише 32 монохроматичних відтінки.&#x0d;&#x0a;⚠️ Застереження: Квантувач Ву споживає щонайменше 650 МБ при максимальному значенні.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">Чорно-білий</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">Фіксована палітра 1 bpp з чорним та білим кольором.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">Відтінки сірого 4 кольори</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">Фіксована палітра 2 bpp з 4 відтінками сірого.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">Відтінки сірого 16 кольорів</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">Фіксована палітра 4 bpp з 16 відтінками сірого.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">Відтінки сірого 256 кольорів</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">Фіксована палітра 8 bpp з 256 відтінками сірого.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">Палітра за замовчуванням 4 bpp</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">Фіксована палітра 4 bpp з використанням стандартних 16 sRGB кольорів.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">Палітра за замовчуванням 8 bpp</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">Фіксована палітра 8 bpp, включаючи \"веб-безпечні\" кольори та прозорість.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">Палітра RGB 332</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">Фіксована палітра 8 bpp з використанням колірного простору RGB 332.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Квантувач Октодерева</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">Оптимізація палітри для кожного кадру за допомогою алгоритму Октодерева.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">Квантувач середнього зрізу</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">Оптимізація палітри для кожного кадру за допомогою алгоритму середнього зрізу.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Квантувач Ву</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">Оптимізація палітри для кожного кадру за допомогою алгоритму Сяолінь Ву.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">Розсіювач</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">Сила:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">Сила розсіювання, або 0 для автоматичного калібрування сили.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">Насіння:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">Ціле число, яке буде використано для створення певного випадкового шаблону розсіювання.&#x0d;&#x0a;Залиште порожнім, щоб використовувати випадкове значення для кожного кадру.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">Немає</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">Кадри квантуються без розсіювання.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">Серпантинна обробка</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">При встановленні прапорця напрямок поширення похибки змінюється від рядка до рядка.&#x0d;&#x0a;Це допомагає зменшити ефект пульсації при дифузійному згладжуванні похибки.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Баєр 2x2 (Впорядкований)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">Матричний патерн Байєра 2х2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Баєр 3x3 (Впорядкований)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">Матричний патерн Байєра 3x3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Баєр 4x4 (Впорядкований)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">Матричний патерн Байєра 4x4.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Баєр 8x8 (Впорядкований)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">Матричний патерн Байєра 8x8.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Точковий півтон (Впорядкований)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">Матриця 8x8 з точковим напівтоновим малюнком.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">Синій шум (Впорядкований)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">Матриця 64x64 із синім шумом.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Аткінсон (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Матриця Білла Аткінсона 4х3 з 6 ефективними значеннями.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Беркс (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">Матриця Д. Беркса 5х2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Флойд-Стейнберг (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">Оригінальна матриця 3х2 від Флойда та Стейнберга.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Джарвіс-Джудіс-Нінке (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Матриця 5х3 від Джарвіса, Джудіса та Нінке.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Сьєрра 3 (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Матриця Френкі Сьєрра 5х3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Сьєрра 2 (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Матриця Френкі Сьєрра 5х2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Сьєрра-Лайт (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Матриця Френкі Сьєрра 3х2.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Стівенсон-Арсе (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Гексагональна матриця Стівенсона та Арсе 7х4.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Стакі (Дифузія похибок)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Матриця Стакі 5х3.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">Випадковий шум</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">Випадковий білий шум.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">Переривчастий градієнтний шум</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">Невипадковий градієнтний шум, згенерований за формулою.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">Попередній перегляд</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">Показати поточний кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">Якщо позначено цей прапорець, попередній перегляд показує поточний кадр замість стандартного прикладу зображення.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">Автоматичний попередній перегляд вимкнено через високі вимоги до пам'яті для поточних налаштувань. Натисніть, щоб оновити попередній перегляд.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">Не вдалося згенерувати попередній перегляд: {0}&#x0d;&#x0a;Натисніть, щоб спробувати згенерувати його ще раз.</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">Налаштування анімації</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">Нескінченний цикл.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">Якщо позначено, анімація буде зациклюватися до нескінченності.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">Туди-сюди.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">Якщо позначено, анімація буде відтворюватися вперед і назад.&#x0d;&#x0a;Це досягається дублюванням кадрів, що означає більший розмір файлу і довший час кодування.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">Кількість повторів:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">Вказує, скільки разів буде відтворено анімацію.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">Дозволити дельта-кадри.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">Якщо позначено, під час кодування буде спробувано виявити незмінні пікселі.&#x0d;&#x0a;При використанні з оптимізованим квантувачем ця опція дозволяє кадру мати більше 256 кольорів.&#x0d;&#x0a;Ця опція ігнорується, якщо квантувач не використовує прозорість і не позначено опцію \"Дозволити обрізані кадри\".</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">Дельта-допуск:</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">Задає максимальний допуск при виявленні змінених пікселів.&#x0d;&#x0a;Якщо 0, то різниця не допускається взагалі.&#x0d;&#x0a;Якщо 255, то можуть бути кадри (або навіть всі), які додаються без вмісту.&#x0d;&#x0a;Доцільний діапазон - від 0 до 16 для оптимізованого квантера. Кадри з фіксованими кольорами можна використовувати з дещо більшими значеннями при згладжуванні.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">Якщо дельта-допуск занадто високий, результат може мати низьку якість. Натисніть, щоб скинути дельта-допуск.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">Дозволити обрізані кадри.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">Якщо позначено, кодеру дозволено додавати менші кадри, ніж фактична роздільна здатність.&#x0d;&#x0a;Якщо позначку \"Дозволити дельта-кадри\" знято, то дозволено лише відсікання можливих прозорих меж.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">Параметр \"Дозволити дельта-кадри\" ігнорується, оскільки поточна конфігурація не використовує прозорість, а прапорець \"Дозволити обрізані кадри\" знято. Клацніть, щоб увімкнути обрізані кадри.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">\"Дозволити обрізані кадри\" не має ефекту, оскільки поточна конфігурація не використовує прозорість, а прапорець \"Дозволити дельта-кадри\" знято. Клацніть, щоб увімкнути дельта-кадри.</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Параметри Apng </s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">Передбачення:</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">Жодного</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Нижнє</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Верхнє</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">Середнє</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">Змішане</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Зациклений apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Виявлення незмінних пікселів.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Зафарбовувати всі незмінні пікселі прозорим кольором.</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">Пресет:</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">Відсутній</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">За замовчуванням</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">Картинка</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">Фото</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">Малюнок</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">Іконка</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">Текст</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">Використовувати режим без втрат.</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">Нормальний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">Розширений</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">Спосіб налаштування параметрів енкодера:&#10; Нормальний: Використовувати стандартні елементи керування інтерфейсу.&#10;Розширений: Використовувати текстове поле для введення параметрів.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">Кодек:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">The video encoder, responsible for&#10;converting the raw pixels to the output file.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">Пресет:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">Відсутній</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">Дуже повільний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">Повільніший</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">Повільний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">Середній</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">Швидкий</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">Швидший</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">Дуже швидкий</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">Супер швидкий</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">Ультра швидкий</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">Якість</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">Збалансований</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">Швидкість</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">За замовчуванням</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">Без втрат</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">Без втрат (Висока продуктивність)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">Висока продуктивність</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">Висока якість</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">Диск Bluray</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">Низька затримка</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">Низька затримка (Висока продуктивність)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">Низька затримка (Висока якість)</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">Співвідношення швидкості кодування до стиснення,&#10;повільніші пресети можуть забезпечити краще стиснення&#10;(якість на розмір файлу).</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">Апаратне приск.:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">Вимк</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">Увімк</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">Автоматичний вибір</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">Дозволяє керувати використанням спеціального обладнання (відеографіки).&#10;Вимкнено: не використовує спеціальне обладнання.&#10;Увімкнено: Використовує спеціальне апаратне забезпечення і дозволяє вибрати спеціальні кодувальники.&#10;Авто: Використовує спеціальне апаратне забезпечення і автоматично вибирає потрібний кодувальник, коли це можливо.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">Формат пікселів:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">Автоматичний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">Вертикальна синхронізація:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">Метод синхронізації відео.&#10;Авто: Вибирається між 1 та 2 залежно від можливостей мультиплексора (формату).&#10;Наскрізний: Кожен кадр передається до кодера зі своїми мітками часу.&#10;Постійний: Кадри будуть дублюватися і пропускатися для досягнення точно заданої постійної частоти кадрів.&#10;Змінна: Кадри передаються разом з мітками часу або пропускаються, щоб запобігти появі двох кадрів з однаковими мітками часу.&#10;Відкидання: Як і наскрізний, але знищує всі мітки часу, змушуючи кодер генерувати нові мітки часу на основі частоти кадрів.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">Наскрізний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">Незмінна частота кадрів</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">Змінна частота кадрів</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">Відкидання</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">Частота кадрів:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">Фільм</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">Користувацький</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">Прохід:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">Постійний коефіцієнт швидкості.&#10;Налаштування якості та швидкості.&#10;Залиште це поле порожнім, якщо ви не бажаєте встановлювати цю властивість.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">Рівень якості:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">Менші значення означають кращу якість.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">Бітрейт:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">Цільовий бітрейт відео.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">Режим бітрейту:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">Постійний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">Змінний</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">Мінімальний бітрейт:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">Мінімальний допуск до бітрейту.&#10;Найбільш корисний при використанні режиму CBR.&#10;Залиште його порожнім або встановіть на нуль, якщо ви не бажаєте встановлювати цю властивість.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">Максимальний бітрейт:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">Максимальний допуск до бітрейту.&#10;Потребує встановлення розміру буфера.&#10;Залиште його порожнім або встановіть нульовим, якщо ви не бажаєте встановлювати цю властивість.</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">Розмір буферу:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">Розмір буфера керування бітрейтом.&#10;Залиште його порожнім або встановіть на нуль &#10;якщо ви не бажаєте встановлювати цю властивість.</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Заархівувати зображення.</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">Експортує зображення до архіву.</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Стиснути зображення.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Стисніть дані зображення за допомогою алгоритму RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Зберегти дані часової шкали.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Експортує хронометраж кадрів, а не тільки кадри.</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Параметри збереження</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">Частково експортувати.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Вкажіть каталог, де зберегти створений файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">Перезаписати?</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">Попередження</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">Лише попереджає, що існує інший файл з такою ж назвою.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">Запит</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">Запитує, чи хоче користувач перезаписати файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">Дозволити</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">Просто перезаписує файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Зберегти як проект теж (той самий каталог, назва файлу).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Завантажити файл.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Копіювати до буферу обміну.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Файл</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Вихідний файл буде скопійований до буферу обміну.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Шлях до каталогу</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Копіює шлях до папки з вихідним файлом у буфер обміну.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Шлях до файлу</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Копіює шлях до вихідного файлу в буфер обміну.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Посилання</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Копіює посилання, згенероване сервісом завантаження, до буфера обміну.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Виконати команди посткодування.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Введіть команди, які потрібно виконати після кодування.&#x0d;Щоб виконати кілька команд, введіть кожну з них в окремому рядку.&#x0d;Макроси:&#x0d;{p} = шлях до вихідного файлу.&#x0d;{f} = шлях до вихідної теки.&#x0d;{u} = URL-адреса завантаженого файлу.</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">Частковий експорт</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">Режим:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">Виберіть метод часткового експорту.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">Вираз</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">Експортує частини анімації на основі простого виразу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">Діапазон кадрів</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">Експортує лише частину анімації в межах діапазону кадрів.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">Діапазон часу</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">Експортує лише частину анімації в межах часового інтервалу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">Виділення</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">Експортує лише кадри, вибрані на таймлайні.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">Жоден кадр не вибрано.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">Вибрано 1 кадр.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} кадрів вибрано.</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">Від:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">До:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">Вираз:</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">Введіть номери кадрів, відокремлені комою, або послідовності кадрів, відокремлені знаком мінус:&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">Файл</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Папка призначення.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">Виберіть вихідну папку</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Виберіть місце розташування.&#x0d;Натисніть Shift і клацніть,&#x0d;щоб також вибрати ім'я файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Формат файлу</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Ім'я файлу. Вставте формат дати/часу між символами '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Анімація</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Збільшити номер файлу</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Зменшити номер файлу</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">Файл з таким іменем вже існує.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Зберегти до буферу обміну.</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Вам потрібно вибрати, куди зберегти файл (в папку, в буфер обміну або завантажити кудись ще).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">Ви не вибрали розширення файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">При виборі розширеного режиму ви повинні ввести параметри в поле параметрів.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">У полі параметрів відсутні спеціальні параметри {I} (вхід) та/або {O} (вихід).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Щоб виконати команду посткодування, вам потрібно ввести щось у текстове поле команди.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">Ви повинні вибрати принаймні один кадр, якщо хочете експортувати лише вибрані кадри.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">Вираз для часткового експорту проекту є недійсним.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Не вибрано службу завантаження. Вам потрібно вибрати пункт призначення.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Ви не можете завантажити до вибраного сервісу, оскільки він не був авторизований. Перейдіть до Налаштування > Хмарне сховище, щоб авторизувати цю програму.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Ви не можете вибрати опцію копіювання посилання, тому що ви не налаштували завантаження файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Ви маєте вибрати вихідну папку.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Вихідний каталог не існує.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Вихідний каталог містить один чи більше некоректних символів. Будь ласка, оберіть коректний каталог.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Виберіть ім'я файлу.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Назва вихідного файлу містить один чи більше некоректних символів. Будь ласка, вкажіть коректну назву.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Таке ім'я вже використовується. Увімкніть перезапис або виберіть інше ім'я чи папку.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">Вже існує проект з таким самим ім'ям. Увімкніть перезапис або виберіть інше ім'я файлу чи теки.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Операцію скасовано.</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">Завантажити</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">Виберіть пресет завантаження, який містить детальну інформацію про сервіс, що використовується для завантаження.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">Цей сервіс завантаження накладає обмеження.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">Додати новий пресет завантаження.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">Редагувати налаштування пресету завантаження.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">Переглянути історію завантажень цього пресета.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">Видалити поточний вибраний пресет завантаження.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">Виберіть пресет завантаження</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">Виберіть один з цього списку.</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">Для цього формату немає пресетів завантаження</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">Додайте пресет за допомогою кнопки нижче.</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">Видалення пресета завантаження</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">Ви впевнені, що хочете видалити пресет завантаження?</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">Цю дію не можна скасувати.&#10;&#10;Ви хочете видалити вибраний пресет завантаження?</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Експорт кадрів</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Ви впевнені, що хочете експортувати кадри?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Ця дія експортує {0} кадрів безпосередньо до вибраної теки.</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">Перезаписати</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">Ви хочете перезаписати файл?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">Файл з іменем '{0}' вже існує у цій теці.\\r\\nВи бажаєте перезаписати його?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">Бажаєте перезаписати файли?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">У цій теці вже існує один або декілька файлів з такою самою назвою.\\r\\nХочете перезаписати їх?</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">Попередній перегляд команд</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">Команда</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">Вхідний шлях</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">Вихідний шлях</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Зворотній зв'язок</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Надіслати</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Попередній перегляд</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Надіслати відгук</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Заголовок</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Повідомлення</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">Якщо ви зіткнулися з помилкою, не забудьте пояснити мені, як ви її отримали, крок за кроком.</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">Тип зворотнього зв'язку</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Пропозиції</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Недолік/Помилка</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Ваш Email (не обов'язково)</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Вам потрібно ввести заголовок для відгуку.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Вам потрібно написати повідомлення для відгуку.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">Вам необхідно ввести свою електронну адресу, щоб отримати відповідь від розробника.</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">Надсилання... Це вікно швидко закриється після цього.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Вкладення (не обов'язково, 20Мб максимум)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Додати вкладення</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Видалити всі вкладення</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Я розумію англійську</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">та португальску (бразильский та європейский діалект).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Це те, що ви надішлете, плюс усі вкладення.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Усунення несправностей</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Не вистачає якогось вікна?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Якщо будь-яке з вікон відсутнє (за межами екрана), скористайтеся наведеними нижче опціями, щоб відновити його поточну та початкову позицію.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Ось де зараз знаходиться кожне вікно:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Ось де кожне вікно відкриватиметься наступного разу:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Перемістити всі вікна на головний екран.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Скинути початкову позицію всіх вікон.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Звичайний</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Курсив</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Косий</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Чорний</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Жирний</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Напівжирний</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Екстра чорний</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Екстра жирний</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Екстра легкий</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Сильний</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Легкий</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Середній</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Нормальний</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Звичайний</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Напівжирний</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Тонкий</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Ультрачорний</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Ультражирний</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Ультралегкий</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Зверху</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">По центру</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Знизу</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Розтягнути</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Зліва</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Посередині</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Зправа</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Горизонтальна</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Вертикальна</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">Зліва</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">Справа</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">По центру</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">За шириною</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">Нічого</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">Підкреслення</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">Закреслений</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">Надрядкова лінія</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">Підрядкова лінія</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.vi.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">Đồng ý</s:String>\n    <s:String x:Key=\"S.Back\">Quay lại</s:String>\n    <s:String x:Key=\"S.Cancel\">Hủy bỏ</s:String>\n    <s:String x:Key=\"S.Yes\">Có</s:String>\n    <s:String x:Key=\"S.No\">Không</s:String>\n    <s:String x:Key=\"S.Add\">Thêm</s:String>\n    <s:String x:Key=\"S.Edit\">Chỉnh sửa</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">Tiêu đề</s:String>\n    <s:String x:Key=\"S.Description\">Mô tả</s:String>\n    <s:String x:Key=\"S.SelectColor\">Click vào đây để chọn màu sắc.</s:String>\n    <s:String x:Key=\"S.Suppress\">Xóa bỏ</s:String>\n    <s:String x:Key=\"S.Preview\">Xem trước</s:String>\n    <s:String x:Key=\"S.Size\">Kích thước</s:String>\n    <s:String x:Key=\"S.Background\">Nền</s:String>\n    <s:String x:Key=\"S.Color\">Màu sắc:</s:String>\n    <s:String x:Key=\"S.Delay\">Trễ</s:String>\n    <s:String x:Key=\"S.DelayMs\">Trễ:</s:String>\n    <s:String x:Key=\"S.ValueMs\">Giá trị -+:</s:String>\n    <s:String x:Key=\"S.ScaleValue\">Giá trị thu phóng:</s:String>\n    <s:String x:Key=\"S.Margin\">Lề:</s:String>\n    <s:String x:Key=\"S.Padding\">Đệm:</s:String>\n    <!--<s:String x:Key=\"S.MinHeight\">Min height:</s:String>-->\n    \n    <!--Warning messages-->\n    <s:String x:Key=\"S.Crash\">Ôi không, ứng dụng gặp sự cố :(</s:String>\n    <s:String x:Key=\"S.Required\">Trường yêu cầu.</s:String>\n    <!--<s:String x:Key=\"S.Warning.Net.Title\">Missing Dependency</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 is not present</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Net.Message\">In order to properly use this app, you need to download the correct version of the .Net Framework.&#10;Would you like to open the web page to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Title\">Only one instance permitted</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Header\">The app is already running</s:String>-->\n    <!--<s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif is already running, but apparently there's no window open. Check you system tray, a ScreenToGif icon must be there.</s:String>-->\n    <s:String x:Key=\"S.Exiting.Title\">Đang thoát ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">Bạn chắc chắn muốn thoát chứ?</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">Tất cả cửa sổ sẽ bị đóng lại và thanh ứng dụng sẽ biến mất.</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">Quay màn hình mới</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">Ghi hình webcam mới</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">Bảng ghi mới</s:String>\n    <s:String x:Key=\"S.Exit\">Thoát</s:String>\n    \n    <!--Commands-->\n    <!--<s:String x:Key=\"S.Command.NewRecording\">New screen recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NewWebcamRecording\">New webcam recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NewBoardRecording\">New board recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NewAnimation\">New animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertRecording\">Insert screen recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertWebcamRecording\">Insert webcam recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertBoardRecording\">Insert board recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InsertFromMedia\">Insert from media (images and videos)</s:String>-->\n    <!--<s:String x:Key=\"S.Command.SaveAs\">Save as...</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Load\">Load files (images, videos and projects)</s:String>-->\n    <!--<s:String x:Key=\"S.Command.LoadRecent\">Load recent projects</s:String>-->\n    <!--<s:String x:Key=\"S.Command.DiscardProject\">Discard current project</s:String>-->\n    <!--<s:String x:Key=\"S.Command.OverrideDelay\">Override delay of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">Increase/Decrease delay of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.ScaleDelay\">Scale delay of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Zoom100\">Set zoom to 100%</s:String>-->\n    <!--<s:String x:Key=\"S.Command.SizeToContent\">Adjust the window to the frame size</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FitImage\">Fit image to the available window size</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FirstFrame\">Select the first frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.PreviousFrame\">Select the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Play\">Play the animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.NextFrame\">Select the next frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.LastFrame\">Select the last frame</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Undo\">Undo</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Redo\">Redo</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Reset\">Undo all changes in the project</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Copy\">Copy the selected frames and store them in the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Cut\">Cut the selected frames and store them in the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Paste\">Paste the frames from the clipboard</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Delete\">Delete all selected frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.DeletePrevious\">Delete all previous frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.DeleteNext\">Delete all next frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.RemoveDuplicates\">Remove duplicates</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Reduce\">Reduce frame count</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Reverse\">Reverse animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Yoyo\">Makes the animation go forward and backwards</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveLeft\">Move the selected frame to the left</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveRight\">Move the selected frame to the right</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Resize\">Resize all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Crop\">Crop all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FlipRotate\">Flip or rotate the frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Caption\">Add a caption</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FreeText\">Add a free-floating text</s:String>-->\n    <!--<s:String x:Key=\"S.Command.TitleFrame\">Add a frame with a title on it</s:String>-->\n    <!--<s:String x:Key=\"S.Command.KeyStrokes\">Inserts keys pressed during the recording</s:String>-->\n    <!--<s:String x:Key=\"S.Command.FreeDrawing\">Draw free forms</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Shapes\">Add shapes</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MouseEvents\">Mouse clicks</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Watermark\">Select an image and add as watermark</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Border\">Add borders</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Shadow\">Add drop shadow</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Obfuscate\">Hide sensitive parts on your frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Cinemagraph\">Use the drawing tools to select which parts of the frame should not remain static throughout the animation</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Progress\">Progress bar or text with playback details</s:String>-->\n    <!--<s:String x:Key=\"S.Command.SelectAll\">Select all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.GoTo\">Navigate to frame by index</s:String>-->\n    <!--<s:String x:Key=\"S.Command.InverseSelection\">Inverse the selection of frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Unselect\">Unselect all frames</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Fade\">Fade transition</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Slide\">Slide transition</s:String>-->\n    <!--<s:String x:Key=\"S.Command.ClearAll\">Clear all completed encodings</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveUp\">Move up</s:String>-->\n    <!--<s:String x:Key=\"S.Command.MoveDown\">Move down</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Add\">Add</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Open\">Open</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Edit\">Edit selected item</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Save\">Save selected item</s:String>-->\n    <!--<s:String x:Key=\"S.Command.Remove\">Remove selected item</s:String>-->\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - Bắt đầu</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">Quay</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">Mở quay màn hình, nơi bạn có thể dễ dàng bắt đầu quay màn hình của bạn.</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">Webcam</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">Mở ghi hình webcam.</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">Bảng</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">Mở bảng ghi, nơi bạn có thể bắt đầu quay màn hình các hình vẽ của mình.</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">Chỉnh sửa</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">Mở cửa sổ chỉnh sửa, trung tâm của ứng dụng này, nơi bạn có thể bắt đầu và chỉnh sửa quay màn hình mới.</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">Các tùy chọn</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">Phát hành mới đã sẵn sàng</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">Tải về phiên bản mới nhất của ScreenToGif.</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">Cập nhật</s:String>\n    <!--<s:String x:Key=\"S.Updater.Header\">A new update is available</s:String>-->\n    <s:String x:Key=\"S.Updater.NewRelease\">Phát hành mới!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">Phát hành mới đã sẵn sàng, Phiên bản {0}! Click vào đây để biết thêm chi tiết.</s:String>\n    <!--<s:String x:Key=\"S.Updater.Version\">Version</s:String>-->\n    <s:String x:Key=\"S.Updater.Portable\">Bản Portable</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">Tiến trình cài đặt</s:String>\n    <!--<s:String x:Key=\"S.Updater.Info.WhatsNew\">What's new?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Info.BugFixes\">Bug fixes:</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">A new version is available for you to download.&#x0d;Would you like to open the browser to download it?</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.RunAfter\">Execute the app after the update.</s:String>-->\n    <s:String x:Key=\"S.Updater.Download\">Tải về</s:String>\n    <!--<s:String x:Key=\"S.Updater.Install\">Install</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Downloading\">Downloading...</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Show\">It was not possible to show the download details.</s:String>-->\n    <!--<s:String x:Key=\"S.Updater.Warning.Download\">It was not possible to download the update.</s:String>-->\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - Các tùy chọn</s:String>\n    <s:String x:Key=\"S.Options.App\">Ứng dụng</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">Máy ghi âm</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor\">Editor</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks\">Tự động hóa các nhiệm vụ</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">Biểu tượng tắt</s:String>\n    <s:String x:Key=\"S.Options.Language\">Ngôn ngữ</s:String>\n    <s:String x:Key=\"S.Options.Storage\">Các tệp tạm thời</s:String>\n    <s:String x:Key=\"S.Options.Extras\">Mục bổ sung</s:String>\n    <s:String x:Key=\"S.Options.Upload\">Dịch vụ tải lên</s:String>\n    <s:String x:Key=\"S.Options.Donate\">Quyên góp</s:String>\n    <s:String x:Key=\"S.Options.About\">Giới thiệu</s:String>\n    <s:String x:Key=\"S.Options.Other\">Khác</s:String>\n    <!--<s:String x:Key=\"S.Options.Warning.Follow.Header\">Missing shortcut key for cursor following</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.Follow.Message\">In order to use the mouse cursor following feature, you must set a shortcut key to toggle it when needed.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.DesktopDuplication.Header\">Missing dependencies for screen capture</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Warning.DesktopDuplication.Message\">In order to capture the screen with the Desktop Duplication API, you must download the SharpDx libraries.</s:String>-->\n    \n    <!--Options • Application-->\n    <!--<s:String x:Key=\"S.Options.App.Startup\">Startup</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">Start&#10;manually</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">The app will only be executed when you manually do so.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">Start with&#10;Windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">The app will be executed after Windows startup.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">Impossible to alternate between startup modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single\">Allow only a&#10;single instance</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">You'll be able to run the app once per user and executable,&#10;meaning that different user or executable instances can co-exist.&#10;When trying to execute the app again, the second instance will try to give focus to the first one and end itself.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">Allow multiple&#10;instances</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">You'll be able to run the app multiple times at the same time, without restriction.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray\">Start minimized to the system tray.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Tray.Info\">(System tray icon will be visible while this option is active)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window\">Start with:</s:String>-->\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">Cửa sổ khởi động</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">Quay màn hình</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">Ghi hình webcam</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">Bảng ghi</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">Cửa sổ chỉnh sửa</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Startup.Window.Info\">(Window which shows up first when the app starts)</s:String>-->\n    <s:String x:Key=\"S.Options.App.Theme\">Chủ đề ứng dụng</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">Sơ đồ màu</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">Rất sáng</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">Sáng</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">Bình thường</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">Tối</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">Rất tối</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">Tùy chỉnh</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">Example colors.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray\">System tray icon</s:String>-->\n    <s:String x:Key=\"S.Options.App.Tray.Show\">Hiển thị ứng dụng ở khay hệ thống (Khu vực thông báo).</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">Giữ ứng dụng mở ngay cả khi tất cả các cửa sổ bị đóng.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">Do nothing</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">Open a window</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">No window</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">Minimize/restore all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">Minimize all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">Restore all windows</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">Left click:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">Left click (x2):</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">Middle click:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">Window:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">Or else, opens:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General\">General</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">Workaround for the 'Not enough quota...' crash.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">(Experimental)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">Hỏi tôi trước khi đóng ứng dụng (Thông qua lệnh 'Thoát').</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">Loại bỏ tăng tốc phần cứng.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">(The user interface will be rendered via software mode)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">Kiểm tra cập nhật bản dịch.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">(Updated translations will be downloaded and installed automatically)</s:String>-->\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">Kiểm tra cập nhật.</s:String>\n    <!--<s:String x:Key=\"S.Options.App.General.UpdateOnClose\">Automatically install updates after closing the app.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">Force the update to run with elevated privileges.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.App.General.PromptToInstall\">Prompt me before the installation starts.</s:String>-->\n\n    <!--Options • Recorder-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface\">Interface</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface.Old\">Old</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Interface.New\">New</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency\">Capture frequency</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">Manual</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">Each frame will be manually captured by you, by pressing the capture button or equivalent keyboard shortcut.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second\">Per second</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">Frames will be captured in a 'per second' basis,&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">Per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">Frames will be captured in a 'per minute' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">Per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">Frames will be captured in a 'per hour' basis (timelapse),&#10;given the framerate denominator set on the recorder screen.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">Playback delay:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">(In ms, each captured frame will be set to this delay)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">Each frame will be captured in interval of {0}.</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Options.Recorder.Mode\">Capture mode</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">Use the older capture method, which is slower and may not work capturing games,&#10;but requires no additional plug-ins.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.DirectX.Info\">Use the Desktop Duplication API capture method, which is faster and&#10;is able to capture fullscreen games, but requires the SharpDx plug-in and Windows 8 or newer.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.File\">Save to&#10;file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.File.Info\">Each frame captured will be saved directly as an image on disk.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache\">Memory&#10;cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Cache.Info\">Each frame captured will be stored as a pixel array on memory first (may be compressed before).</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression\">Compression:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">Optimal</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">(Slower but likely more optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">Fastest</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">(Faster but likely less optimal compression)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">No compression</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">(No compression should be performed while capturing frames)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize\">Cache size:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">(In MB. After reaching this size, the data will be written/flushed to the disk)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">Hiển thị con trỏ chuột trong khi đang quay.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">Lựa chọn màu sắc con trỏ chuột</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">Sử dụng đếm ngược trước khi bắt đầu.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">(vài giây, chờ trước khi bắt đầu quay)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">Tỉ lệ khung hình cố định.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">(Làm chậm ổn định mà không thay đổi dịch chuyển chậm khi quay)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">Improve the capture performance on a remote desktop connection.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">(Disables layered window capture)</s:String>-->\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording\">Cho phép quay không đồng thời.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AsyncRecording.Info\">(Điều này giúp giảm lag giữa các mặt phân cách khi quay)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">Ẩn thanh tiêu đề (chế độ mờ).</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">Cho phép phóng to màn hình.</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">(Điều này cho phép 1 kính lúp trong khi chọn 1 vùng đang quay)</s:String>\n    <!--<s:String x:Key=\"S.Options.Recorder.CursorFollowing\">Enable cursor following.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">(The recording area will reposition itself based on the location of the cursor)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">(Buffer margin in pixels, where the recording area starts getting repositioned)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">(Additional buffer margin in pixels, where the UI starts getting hidden)</s:String>-->\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">Chỉnh sửa dưới nền</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">Kích thước lưới</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">Rất nhỏ</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">Nhỏ</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">Bình thường</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">Rộng</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">Rất rộng</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">Tôi thích hình vuông lớn</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">Tôi không biết</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">Tùy chỉnh</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">Cao</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">Rộng</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">Áp dụng</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">Màu cơ bản</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">Màu chẵn</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">Màu lẻ</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">Display the encodings in a separated window.</s:String>-->\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">Mở rộng thanh tiêu đề (cửa sổ chrome).</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">Tự động điều chỉnh kích thước cửa sổ dựa trên kích thước khung hình, ngay sau khi nạp.</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">Tự động điều chỉnh thu phóng khung hình dựa trên kích thước cửa sổ, ngay sau khi nạp.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">Hỏi tôi trước khi xóa các khung hình.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">Hỏi tôi trước khi hủy bỏ kế hoạch.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">Hỏi tôi trước khi đóng chỉnh sửa (nếu có 1 dự án đang mở).</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">Cho phép 3 click chuột để lựa chọn văn bản.</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">Vẽ đường bao ngoài của phụ đề bên ngoài các chữ cái.</s:String>\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory\">Impose a limit to the undo/redo history.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">(Older actions will be removed when the limit is reached)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">(Maximum number of actions stored)</s:String>-->\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">Tự động hóa nhiệm vụ</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">Danh sách các nhiệm vụ tự động</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">Nhiệm vụ</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">Các chi tiết</s:String>\n    <!--<s:String x:Key=\"S.Options.Tasks.List.Enabled\">Enabled</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Tasks.Enable\">Enable this task.</s:String>-->\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">(Chọn 1 nhiệm vụ)</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">Các nhiệm vụ này được thực thi tuần tự từ đầu đến cuối danh sách.&#10;Nó xảy ra khi bạn lần đầu mở 1 dự án sử dụng trình chỉnh sửa.</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">Toàn thể</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">Quay màn hình:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">(Mở quay màn hình mặc định)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">Ghi hình webcam:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">(Mở ghi hình webcam)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">Bảng ghi:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">(Mở bảng ghi, bạn có thể quay những gì mình vẽ)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">Chỉnh sửa:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">(Mở cửa sổ chỉnh sửa khác)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">Các tùy chọn:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">(Mở cửa sổ các tùy chọn. Bạn chỉ có thể mở 1 cửa sổ 1 lần)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">Thoát:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">(Đóng tất cả cửa sổ và loại bỏ ứng dụng ở khay hệ thống)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">Quay</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">Bắt đầu/Tạm dừng:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">(Điều này bắt đầu hoặc dừng quay. Nó được dùng để chụp màn hình nhanh nếu chế độ chụp màn hình nhanh được kích hoạt)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">Dừng:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">(Điều này dừng quay và mở chỉnh sửa)</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">Hủy:</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">(Hủy bỏ kích hoạt quay, khi nó được tạm dừng)</s:String>\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">Cursor following:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">(Toggles the adjustment of the recording area based on the position of the cursor)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">Disable following:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">(Temporarily disables the adjustment of the recording area based on the position of the cursor, only modifier keys accepted)</s:String>-->\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">Click để thiết lập phím mong muốn, khi nhấn các phím muốn có hoặc chỉnh sửa.&#10;Một vài phím bao gồm không được phép.</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">Ngôn ngữ của ứng dụng</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">Tự nhận diện</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">Ngôn ngữ hiện thời của hệ điều hành (nếu sẵn có)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">Bạn có muốn dịch ứng dụng của tôi không?</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">Click vào đây để đọc hướng dẫn dịch và tải về ứng dụng trình biên dịch.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">Sau đó,</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">click vào đây để nhập vào</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">và kiểm tra bản dịch của bạn.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">Gửi cho tôi thông qua</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">khi bạn kết thúc bản dịch.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">Click để mở trang web với hướng dẫn dịch.</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">Mở trang nhập vào</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">Mở ứng dụng email của bạn</s:String>\n    \n    <!--Options • Storage-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status\">Status</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Volume\">Volume:</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">{0} free of {1}</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Check\">Check again how much space left there is.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Clear\">Clear the cache folder.&#10;You'll be able to decide if you want to keep recent projects or not.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">Không gian lưu trữ ít trên ổ đĩa đã chọn. Vui lòng xóa thư mục tạm hoặc thay đổi vị trí lưu trữ.</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Error\">Impossible to retrieve the drive details.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.None\">No files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} file</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} files</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.None\">No folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} folder</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} folders</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} in use</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths\">Paths</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Cache\">Cache:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">Chọn vị trí cho các tệp tạm thời</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Logs\">Logs:</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">Chọn vị trí cho tệp nhật kí ghi lỗi</s:String>\n    <!--<s:String x:Key=\"S.Options.Storage.Paths.Browse\">Browse the selected folder.</s:String>-->\n    <s:String x:Key=\"S.Options.Storage.Settings\">Các cài đặt vị trí</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData:</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">Local:</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">Tệp không tồn tại</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">Tạo một thiết lập tệp địa phương trống</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">Loại bỏ các tệp cài đặt.</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">Mở thư mục nơi chứa tệp cài đặt.&#x0d;Giữ Ctrl trong khi click vào để mở tệp, nếu có thể.</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• Các cài đặt nạp mẫu: Mặc định ◄ AppData ◄ Local.&#x0d;• Nếu không có các cài đặt tệp hiện thời ở thư mục Local, ứng dụng sẽ tìm trong thư mục AppData, Mặc định được sử dụng nếu không có các cài đặt tệp hiện tại.&#x0d;• Nếu không có các cài đặt Local, tất cả các cài đặt lưu vào file cài đặt AppData.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">Tự động loại bỏ các dự án cũ.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">Khi mở ứng dụng, 1 nhiệm vụ nền sẽ xóa bất kì dự án đã đóng lâu hơn tổng thời gian được thiết lập.</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">(trong các ngày, bất kì dự án đã đóng cũ hơn dự án này sẽ bị xóa/hủy bỏ sau khi đang mở ứng dụng)</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - Clear Cache</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Header\">Would you like to clear the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Info\">When you create a recording or open something to edit, a project is created and stored inside the cache folder.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.Question\">Would you like to remove these projects from the cache folder?</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">Don't remove recent projects.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">(Only the projects older than {0} days, that are not currently in use, will be removed)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">(All the projects, that are not currently in use, will be removed)</s:String>-->\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">Proxy</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">Chế độ:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">Bất hoạt</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">Thủ công</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">Hệ thống</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">(Sử dụng proxy hệ thống)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">Host:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">Cổng:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">Tài khoản:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">Mật khẩu:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Get\">Nhận thẻ OAuth</s:String>\n    <s:String x:Key=\"S.Options.Upload.PasteToken\">Dán thẻ được cho phép tại đây</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">Cho phép</s:String>\n    <s:String x:Key=\"S.Options.Upload.Refresh\">Làm mới</s:String>\n    <s:String x:Key=\"S.Options.Upload.Clear\">Xóa</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Anonymous\">Imgur (Khuyết danh)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">Sử dụng liên kết trực tiếp.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">Nhận các liên kết với tiện ích Gifv thay vì Gif.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">Tải lên gifs tới 1 album được chọn.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">Album:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">Hỏi tôi trước khi tải lên</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.NotPossible\">Không thể mở trang để nhận thẻ ủy quyền Imgur.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">Để đặt trước cho phép của ứng dụng này, bạn cần cung cấp đầy đủ thẻ ủy quyền.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Completed\">Cho phép Imgur hoàn tất.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Error\">Ủy quyền Imgur thất bại. Thử lại sau vài giây hoặc nhận thẻ mới.</s:String>\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Header\">It was not possible to authorize the app</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Upload.Preset.Imgur.Auth.Failed.Message\">Check if you provided the correct token and if you have an internet connection.</s:String>-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Refresh.None\">Để làm mới cho phép cho ứng dụng này, bạn cần trước tiên kết thúc thực thi cho phép.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">Không được cho phép.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">Cho phép hết hạn trong {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">Cho phép không hợp lệ cho tới khi {0}.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Removed\">Ủy quyền Imgur bị loại bỏ.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">Không thể nạp danh sách album.</s:String>\n    <s:String x:Key=\"S.Options.Upload.Gfycat.Anonymous\">Gfycat (Khuyết danh)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Yandex.Token\">Thẻ OAuth:</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Destination\">Chọn 1 điểm đến</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">Chọn 1 album (tùy chọn)</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">Nếu bạn muốn, bạn có thể chọn điểm đến là một album:</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">Các công cụ có sẵn bên ngoài</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">Click vào đây để tải về&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">Đang tải về...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">Đã tải về&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">Click vào đây để mở các thuộc tính của tệp.</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Các ứng dụng được cung cấp bởi cửa hàng Microsoft không thể tải về các ứng dụng khác. Bạn sẽ phải tải về nó thủ công.</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">Vị trí FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">Chọn vị trí của thực hiện FFmpeg</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg executable</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">Đường dẫn của thực hiện FFMpeg chứa một hoặc nhiều kí tự không hợp lệ. Vui lòng chọn 1 vị trí hợp lệ để có thể thực hiện được.</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Vị trí Gifski</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">Chọn vị trí của thực hiện Gifski</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski library</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Đường dẫn của thực hiện Gifski chứa một hoặc nhiều kí tự không hợp lệ. Vui lòng chọn 1 vị trí hợp lệ để có thể thực hiện được.</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation\">SharpDx folder (SharpDX.dll, SharpDX.Direct3D11.dll and SharpDX.DXGI.dll)</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Select\">Select the location of the SharpDx libraries</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Extras.SharpDxLocation.Invalid\">The path for the SharpDx libraries contains one or more invalid characters. Please, select a valid folder for those libraries.</s:String>-->\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">Giấy phép FFmpeg</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Giấy phép Gifski</s:String>\n    <!--<s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx license</s:String>-->\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">Quyên góp</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">Quyên góp (US$)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">Quyên góp (€)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">Mở trang web Paypal. Chọn tiền tệ: Dollar</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">Mở trang web Paypal. Chọn tiền tệ: Euro</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">Mở trang web Paypal. Bạn phải chọn loại tiền tệ.</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe\">Subscribe</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">Donate monthly via Patreon.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">Donate monthly via Flattr.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift\">Gift games</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift.Steam\">Gift games via Steam.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Gift.Gog\">Gift games via GOG.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Kofi\">Pay for a coffee via Ko-fi.</s:String>-->\n    <s:String x:Key=\"S.Options.Donate.Crypto\">Tiền mã hóa</s:String>\n    <!--<s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">Copy the BitcoinCash address.</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Support\">Support</s:String>-->\n    <!--<s:String x:Key=\"S.Options.Donate.Support.Visit\">If you wish to support the project :)</s:String>-->\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">Phiên bản:</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">Tác giả: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Phiên bản cửa hàng Microsoft. Một vài tính năng không hoạt động do chính sách bắt buộc.</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">Liên hệ</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">Vào máy chủ</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">Ghé thăm trang</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">Vào phòng</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">Kỹ thuật</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">Bản quyền:</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">(Đây là ứng dụng miễn phí hoàn toàn)</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">Mã nguồn:</s:String>\n    <!--<s:String x:Key=\"S.Options.About.Technical.Privacy\">Privacy policy:</s:String>-->\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">Trân trọng cảm ơn</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">Tất cả mọi người ủng hộ tôi, những người đã gửi phản hồi và quyên góp.</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">Định vị</s:String>\n    <!--<s:String x:Key=\"S.Localization.GettingCodes\">Getting language codes...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Recognized\">Recognized as {0}</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.NotRecognized\">Not recognized</s:String>-->\n    <s:String x:Key=\"S.Localization.Usage.First\">Nguồn tài nguyên cuối hiện thời đang được sử dụng.</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">Để áp dụng nguồn tài nguyên tùy chỉnh, di chuyển nó đến cuối danh sách.</s:String>\n    <!--<s:String x:Key=\"S.Localization.Exporting\">Exporting resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.SaveResource\">Save the resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.OpenResource\">Open a resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.File.Resource\">Resource dictionary</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Importing\">Importing resource...</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name\">The filename does not follow a valid pattern</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Name.Info\">Try renaming like: StringResources.en.xaml, where 'en' should be replaced by your language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated\">You can't add a resource with the same name</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Repeated.Info\">Try removing the repeated resource or use other language code.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant\">Redundant language code</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Redundant.Info\">The \"{0}\" code is redundant. Try using \"{1}\" instead.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown\">Unknown language</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.Unknown.Info\">The \"{0}\" and its family were not recognized as valid language codes.</s:String>-->\n    <!--<s:String x:Key=\"S.Localization.Warning.NotPossible\">It was not possible to import the localization resource.</s:String>-->\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">Quay</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">Tạm dừng</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">Tiếp tục</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">Dừng</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">Hủy bỏ</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">Chụp</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">Chiều cao</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">Chiều rộng</s:String>\n\n    <!--<s:String x:Key=\"S.Recorder.SwitchFrequency\">Click to switch among capture frequency modes.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Manual.Short\">manual</s:String>-->\n    <s:String x:Key=\"S.Recorder.Fps\">Tối đa khung hình/giây</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">khung hình/giây</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Fps.Range\">Ranges from 1 to 60 fps, with higher values meaning more frames will be captured.&#10;Each increment represents 16 milliseconds of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm\">Maximum frames per minute</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fpm.Range\">Ranges from 1 to 60 fpm, with higher values meaning more frames will be captured.&#10;Each increment represents 1 second of difference.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph\">Maximum frames per hour</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Fph.Range\">Ranges from 1 to 60 fph, with higher values meaning more frames will be captured.&#10;Each increment represents 1 minute of difference.</s:String>-->\n    \n    <s:String x:Key=\"S.Recorder.SnapToWindow\">Chụp cửa sổ (Rê và thả chuột để chụp)</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">Bắt đầu trước</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif (Dừng hẳn)</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Stopping\">Stopping...</s:String>-->\n    \n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">It was not possible to capture the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">It was not possible to capture the screen. The capture method returned no frame after 5 tries.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">It was not possible to start/pause capturing the screen</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.Windows8\">Windows 8 or newer is required for capturing the screen using the Desktop Duplication API.</s:String>-->\n    <!--<s:String x:Key=\"S.Recorder.Warning.MissingSharpDx\">The SharpDx libraries are required in order to capture the screen using the Desktop Duplication API. Go to Options > Extras to download it.</s:String>-->\n    \n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">Vùng</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">Cửa sổ</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">Màn hình</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">Chấp nhận</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">Thử lại</s:String>\n    <!--<s:String x:Key=\"S.Recorder.Retry.Shortcut\">Right-Click</s:String>-->\n    <s:String x:Key=\"S.Recorder.CancelSelection\">(Esc) Thoát khỏi vùng lựa chọn</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">Click và rê chuột để chọn 1 vùng của màn hình này</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">Click và rê chuột để chọn 1 vùng</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">Click vào đây để chọn cửa sổ này</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">Click vào đây để chọn màn hình này</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">Nhấn Esc để thoát</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - Ghi hình webcam</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">Không có thiết bị ghi hình được tìm thấy :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">Kiểm tra thiết bị ghi hình.</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">Thu phóng: {0:0.##}x</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">Thay đổi tỉ lệ của video.</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - Bảng ghi</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">Quay tự động</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">Cho phép quay trong khi đang vẽ</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">[Giữ] Ctrl </s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">Chọn màu sắc</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">Lựa chọn 1 màu sắc</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">Đỏ</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">Xanh lá cây</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">Xanh da trời</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Tổ hợp Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Mã Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">Màu sắc ban đầu</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">Màu sắc hiện tại</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">Màu sắc cuối cùng</s:String>\n    <!--<s:String x:Key=\"S.ColorSelector.Sample\">Drag this to&#x0d;sample colors</s:String>-->\n    <!--<s:String x:Key=\"S.ColorSelector.Sample.Info\">Click and drag to pick&#x0d;colors from your screen.</s:String>-->\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">Ngoại trừ trình xem</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">Mở ngoại lệ bên trong</s:String>\n    <!--<s:String x:Key=\"S.ExceptionViewer.Type\">Exception type</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Message\">Message</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Stack\">Stack</s:String>-->\n    <!--<s:String x:Key=\"S.ExceptionViewer.Source\">Source</s:String>-->\n    <s:String x:Key=\"S.ErrorDialog.Observation\">Vài lỗi sai đã xảy ra.</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">Gửi thông báo</s:String>\n\n    <!--FFmpeg preset-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Title\">FFmpeg Preset</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Name\">Name</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Parameters\">Parameters</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Info.SecondPass\">To encode with 2-pass, simply add '-pass 2' to the command.</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Warning.Name\">You must give a name to this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Warning.Parameter\">You must type some parameters for this preset.</s:String>-->\n    <!--<s:String x:Key=\"S.FfmpegPreset.Warning.SameName\">There's already a preset with the same name.</s:String>-->\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">Chèn khung hình</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">Cả 2 chiều sẽ có cùng kích thước, cửa sổ này cho phép bạn đặt lại vị trí và thay đổi kích thước của ảnh và khung. Click để chọn và thay đổi kích thước</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">Kích thước khung ảnh:</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">Làm vừa ảnh trong các khung</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">Thay đổi kích thước khung để vừa với cả các ảnh bên trong (từ góc trên bên trái).</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">Có sự khác nhau giữa các kích thước của khung. Bạn cần giải quyết nó trước khi chèn các khung.</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">Các khung hình mới</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">Các khung hình hiện tại</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">Kích thước ảnh:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">Vị trí ảnh:</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">Đặt lại kích thước hình ảnh&#x0d;và vị trí</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">Các khung hình mới sẽ được chèn vào vị&#10;trí hiện thời của danh sách khung hình:</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">Trước</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">Sau</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">Khung hình</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">Đang nhập</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">Lựa chọn bức vẽ đầy màu</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">Nhập các khung hình từ Video</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Importer\">Importer:</s:String>-->\n    <s:String x:Key=\"S.ImportVideo.Loading\">Đang nạp...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">Tỉ lệ:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">Kích thước:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">Chiều cao:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">Chiều rộng:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">Tỉ lệ khung hình:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">Khung hình/giây</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">Bắt đầu:</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">Kết thúc:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">Vùng lựa chọn:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">Các khung hình:</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">Thời gian:</s:String>\n    <!--<s:String x:Key=\"S.ImportVideo.Error\">It was not possible to load the video</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Error.Detail\">The previewer could not start. Try with another importer or check if the video is not corrupted.&#x0d;If you are using the MediaPlayer, check if the Windows feature called \"Media Features / Windows Media Player\" is turned on and make sure that you have the necessary video codec.</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Timeout\">Timeout in getting the frame preview.</s:String>-->\n    <!--<s:String x:Key=\"S.ImportVideo.Nothing\">No frame selected to be imported.</s:String>-->\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">Mã hóa</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Encoding\">Encoding...</s:String>-->\n    <s:String x:Key=\"S.Encoder.Starting\">Bắt đầu</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">Đã hoàn thành</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">Đã sao chép vào bộ nhớ đệm</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">Thất bại khi sao chép</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">Đã thực hiện lệnh</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">Hiển thị kết quả của các lệnh.</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">Thất bại khi thực hiện lệnh</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">Thất bị khi tải lên</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + Click chuột để mở trang xóa hình ảnh (nếu có).</s:String>\n    \n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed\">Elapsed time, in minutes:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">Analysis:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">Encoding:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">Upload:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">Copy:</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">Commands:</s:String>-->\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">Tệp bị xóa hoặc di chuyển</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">Đã hủy bỏ</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">Lỗi</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">Click vào đây để hiển thị các chi tiết của lỗi này.</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">Tải lên</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">Thực hiện các lệnh</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">Tiến hành {0}</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Analyzing.Second\">Preparing for second pass</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.Processing.Second\">Processing {0} - 2nd pass</s:String>-->\n    <!--<s:String x:Key=\"S.Encoder.CreatingFile\">Creating file</s:String>-->\n    <s:String x:Key=\"S.Encoder.Analyzing\">Phân tích không thay đổi các điểm ảnh</s:String>\n    <!--<s:String x:Key=\"S.Encoder.SavingAnalysis\">Saving analysis result</s:String>-->\n    <s:String x:Key=\"S.Encoder.OpenFile\">Mở tệp</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">Truy cập thư mục</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">Loại bỏ từ danh sách</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">Hiển thị các chi tiết</s:String>\n    <!--<s:String x:Key=\"S.Encoder.Dismiss\">Dismiss all finished encodings</s:String>-->\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">Sao chép như ảnh</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">Sao chép tên tệp</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">Sao chép đường dẫn thư mục</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">Sao chép liên kết</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - Thoát lệnh</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">Thoát lệnh</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">Các thông báo</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">Bỏ qua tất cả thông báo</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - Chỉnh sửa</s:String>\n    <s:String x:Key=\"S.Editor.File\">Tệp</s:String>\n    <s:String x:Key=\"S.Editor.Home\">Trang chính</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">Phát lại</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">Chỉnh sửa</s:String>\n    <s:String x:Key=\"S.Editor.Image\">Hình ảnh</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">Các chuyển tiếp</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">Các thống kê</s:String>\n    <s:String x:Key=\"S.Editor.Options\">Các tùy chọn</s:String>\n    <s:String x:Key=\"S.Editor.Help\">Trợ giúp</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">Mục bổ sung</s:String>\n    <!--<s:String x:Key=\"S.Editor.UpdateAvailable\">A new update is available!</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.UpdateAvailable.Info\">Click here to read more about it.</s:String>-->\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">Tính tổng, Tính các lựa chọn, Các mục lựa chọn</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">Chuẩn bị các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">Nạp không hợp lệ - Bạn không thể nạp nhiều tệp cùng 1 lúc. Thử chọn 1 tệp duy nhất.</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">Nạp không hợp lệ - Bạn không thể nạp nhiều dự án cùng 1 lúc. Thử chọn 1 dự án duy nhất.</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">Mở 1 tập đa phương tiện (Hình ảnh hoặc Video)</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">Mở 1 tập đa phương tiện (Hình ảnh hoặc Video) hoặc 1 dự án</s:String>\n    <!--<s:String x:Key=\"S.Editor.File.All\">All supported files</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image\">Image</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Video\">Video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project\">ScreenToGif project</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Gif\">Gif animation</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Apng\">Animated Png</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Avi\">Avi video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mkv\">Matroska video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Mp4\">Mp4 video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Webm\">Webm video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Wmv\">Windows media video</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Zip\">Zip file, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Image.Png\">Png image, all selected images</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif project as Zip</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.File.Psd\">Psd file</s:String>-->\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">Đi tới \"Tệp > Mới\" để bắt đầu 1 quay màn hình mới</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">Kéo và thả hình ảnh, video hoặc các dự án để nhập vào</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">Cám ơn bạn nhiều vì đã sử dụng ứng dụng của tôi!</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">Tỉ lệ khung hình thấp hơn, tính toán màu sắc hoặc số lượng thay đổi giữa các khung hình càng bé hơn</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">Bạn muốn trò chuyện? Mở \"Các tùy chọn > Giới thiệu\" để chọn các hình thức liên lạc</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">Gặp vấn đề? Liên hệ với tôi thông qua công cụ phản hồi</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">Bạn muốn thử quay màn hình mới? Đi đến \"Tùy chọn > Máy ghi âm\" để kích hoạt.</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">Quay màn hình</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">Ghi hình&#x0d;webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">Ghi hình&#x0d;bảng</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">Dự án&#x0d;trắng</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">Mới</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">Quay màn hình</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">Ghi hình&#x0d;webcam</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">Ghi hình&#x0d;bảng</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">Phương tiện</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">Chèn</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">Lưu mới</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">Nạp</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">Các dự án&#x0d;gần đây</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">Lưu mới&#x0d;dự án</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">Hủy bỏ&#x0d;dự án</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">Hành động xếp</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">Hủy</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">Thực hiện lại</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">Thiết lập lại</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">Bộ nhớ đệm</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">Hiển thị bộ nhớ đệm</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">Dán</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">Cắt</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">Sao chép</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">Thu phóng</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">Điều chỉnh&#x0d;nội dung</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">Làm vừa hình ảnh</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">Chọn</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">Chọn&#x0d;tất cả</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">Đi tới</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">Đảo ngược</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">Bỏ chọn</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">Phát lại</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">Đầu</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">Trước</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">Phát</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">Tạm dừng</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">Tiếp theo</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">Cuối</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <!--<s:String x:Key=\"S.Editor.PlaybackOptions.Header\">Playback Options</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">Loop during playback.</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">Only used during playback.&#x0d;If you wish to change the loop settings for exporting Gifs and Apngs,&#x0d;it will be available inside the 'Save As' panel for some encoders.</s:String>-->\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">Các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">Xóa</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">Loại bỏ&#x0d;Nhân đôi</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">Giảm&#x0d;khung hình</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">Xóa tất cả trước đó</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">Xóa tất cả sau đó</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">Sắp xếp lại</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">Nghịch đảo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">Yoyo</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">Di chuyển&#x0d;sang trái</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">Di chuyển&#x0d;sang phải</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">Làm chậm (Khoảng thời gian)</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">Ghi đè</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">Tăng hoặc&#x0d;giảm</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">Thu phóng</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">Kích thước và xoay</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">Thay đổi kích cỡ</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">Xén</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">Lật/Xoay</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">Văn bản</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">Phụ đề</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">Chữ tự do</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">Tiêu đề khung</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">Phím&#x0d;chính</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">Che phủ</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">Vẽ&#x0d;tự do</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">Hình dạng</s:String>\n    <s:String x:Key=\"S.Editor.Image.Clicks\">Click&#x0d;chuột</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">Dấu mờ</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">Cinemagraph</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">Đường viền</s:String>\n    <!--<s:String x:Key=\"S.Editor.Image.Shadow\">Shadow</s:String>-->\n    <s:String x:Key=\"S.Editor.Image.Progress\">Phát triển</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">Làm rối</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">Các kiểu</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">Mờ dần</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">Trượt</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">Tổng quan</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">Số lượng khung hình</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">Tổng thời gian</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">Kích thước khung hình</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">Thời gian trung bình (làm chậm)</s:String>\n    <!--<s:String x:Key=\"S.Editor.Statistics.CurrentTime\">Current time</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">The current time (cumulative) based on the current frame being displayed.</s:String>-->\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">DPI và thu phóng khung hình</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">Khung hình đã chọn</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">Hành động cắt</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">Bạn không thể cắt bỏ tất cả khung hình.</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">Cần ít nhất 1 khung hình để quay.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">Loại bỏ tất cả</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">Bạn chắc rằng muốn loại bỏ tất cả khung hình?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">Hành động này sẽ hủy bỏ dự án đang mở hiện thời và không thể quay lại. Bạn có muốn tiếp tục?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">Hủy bỏ dự án</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">Bạn chắc rằng muốn hủy bỏ dự án?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">Hành động này sẽ hủy bỏ dự án, loại bỏ tất cả các khung hình.\\n\\r Bạn không thể quay lại hành động này nữa.</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">Bạn có muốn hủy bỏ dự án trước đó?</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">Nếu bạn chọn không làm như vậy, dự án trước đó sẽ sẵn có để mở thông qua các dự án gần đây.</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">Xóa các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">Bạn chắc rằng mình muốn xóa?</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">Hành động này sẽ xóa {0} frame(s).\\n\\ Sau này bạn sẽ không thể quay lại như trước đó.</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">Thoát chỉnh sửa</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">Bạn chắc rằng muốn thoát?</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">Dự án hiện thời bạn đang thực hiện có thể mở lại thông qua \"Các dự án gần đây\".</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">Dự án hiện thời bạn đang thực hiện có thể mở lại thông qua \"Các dự án gần đây\", nhưng đừng quên sau vài ngày, chúng sẽ bị xóa tự động.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">Kéo và thả không có hiệu lực</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">Bạn không thể nhập nhiều tệp cùng 1 lúc</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">Thử chọn 1 tệp duy nhất.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">Không thể nạp các tệp</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">Tệp không thể nạp bởi định dạng không hợp lệ.</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">Bạn không thể nhập nhiều dự án cùng 1 lúc</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">Thử chọn 1 dự án duy nhất.</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">Không có văn bản nào được áp dụng.</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng Phụ đề vào.</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng văn bản vào.</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng tiêu đề khung hình vào nó.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">Bạn phải chọn chiều dày đường viền ít nhất 1 chiều lớn hơn 0.</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng đường viền.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">The opacity must be greater than zero in order to make any difference in the frame.</s:String>-->\n    <!--<s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">When using the shadow depth and blur radius as zero, it won't make any difference because it will be hidden behind the frame.</s:String>-->\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">Bạn phải chọn ít nhất 1 điểm ảnh để áp dụng ảnh động. Lựa chọn các điểm ảnh bằng cách kéo lên trên chúng.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">Chuyển tiếp mờ dần</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để thực hiện chuyển tiếp mờ dần.</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">1 màu trong suốt hoàn toàn sẽ không tạo ra bất kì hiệu ứng nào trong khi chuyển đổi.</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">Chuyển tiếp trượt</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng chuyển tiếp trượt.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">Nạp các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">Không thể nạp dự án</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">Không thể nạp các khung hình do tất cả chúng bị lỗi hoặc các hình ảnh hiện tại không có ở đây.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">1 vài khung hình không thể nạp.</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">Không thể nạp các khung hình do chúng không tìm thấy hoặc chúng bị lỗi.</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng xếp chồng.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg không khả dụng. Thêm vào biến môi trường đường dẫn hoặc click vào đây để mở Các tùy chọn > Mục bổ sung để thiết lập vị trí.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski không khả dụng. Thêm vào biến môi trường đường dẫn hoặc click vào đây để mở Các tùy chọn > Mục bổ sung để thiết lập vị trí.</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">Không đủ không gian lưu trữ trên ổ đĩa nơi ứng dụng này lưu các vùng nhớ đệm ({0}% bên trái). Click vào đây để mở Các tùy chọn > Các tệp tạm thời để giải phóng không gian.</s:String>\n    <!--<s:String x:Key=\"S.Editor.Warning.DifferentDpi\">You tried to import multiple images with different DPIs, which is not supported. Some of them got imported, the others need to be imported separately.</s:String>-->\n    \n    <!--Editor • Status-->\n    <!--<s:String x:Key=\"S.Editor.RetrievingFromCache\">Retrieving frames from the cache</s:String>-->\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">Cập nhật các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">Chuẩn bị nhập</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">Nhập các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">Phân tích nhân đôi</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">Điều chỉnh độ trễ</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">Hùy bỏ nhân đôi</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">Hủy bỏ các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">Hủy bỏ các thư mục</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">Thay đổi kích thước các khung hình.</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">Xén khung hình</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">Áp dụng ghi đè các khung hình</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">Tạo tiêu đề khung hình</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">Áp dụng Lật/Xoay khung hình</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">Thay đổi làm chậm</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">Áp dụng hiệu ứng chuyển tiếp</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">Chuẩn bị lưu lại</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">Khung hình:</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">Mở hình ảnh</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">Truy cập thư mục</s:String>\n    <s:String x:Key=\"S.Editor.List.ExportImage\">Xuất hình ảnh</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">Đi tới khung hình</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">Đi tới khung hình (0 tới {0})</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">Lưu mới</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">Loại bỏ các khung hình đã chọn</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">Quay màn hình mới</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">Ghi hình webcam mới</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">Bảng ghi mới</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">Dự án mới</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">Phương tiện hoặc dự án mới</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">Quay màn hình mới được tạo</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">Ghi hình webcam mới được tạo</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">Bảng ghi mới được tạo</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">Dự án mới được tạo</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">Thực thi hoàn tác</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">Thực thi thiết lập lại</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">Thực thi thực hiện lại</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} khung hình được cắt</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} khung hình được sao chép</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} khung hình được dán</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">Phóng to đến {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">Tất cả khung hình được chọn</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">Đã chọn #{0} khung hình</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">Vùng lựa chọn bị đảo ngược</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">Tất cả các khung hình được bỏ chọn</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} khung hình được xóa</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">Danh sách khung hình được nghịch đảo</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">Hiệu ứng Yoyo được áp dụng</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">Các khung hình được chuyển sang trái</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">Các khung hình được chuyển sang phải</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">Các khung hình được điều chỉnh kích thước</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">Các khung hình đã xén</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">Các khung hình được lật/xoay</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">Hành động lật áp dụng cho các khung hình được chọn và xoay áp dụng cho tất cả các khung hình</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">Hành động này áp dụng cho tất cả khung hình</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">Hành động này áp dụng cho tất cả khung hình được chọn</s:String>\n    <!--<s:String x:Key=\"S.Hint.ApplySelectedOrAll\">This action applies to all or selected frames, depending on your settings</s:String>-->\n    <s:String x:Key=\"S.Hint.Cinemagraph\">Cinemagraph áp dụng cho tất cả khung hình dựa trên khung hình đầu tiên</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">Xếp chồng được áp dụng</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">Tiêu đề khung hình được tạo</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">Tiêu đề khung hình sẽ được chèn trước khi lựa chọn khung hình</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">Thời gian (làm chậm) được thay đổi</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">Chuyển tiếp được chèn</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">Tỉ lệ khung hình được giảm</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">Các nhân đôi bị loại bỏ</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">Ẩn</s:String>\n    <s:String x:Key=\"S.Action.Apply\">Áp dụng</s:String>\n    <s:String x:Key=\"S.Action.Open\">Mở</s:String>\n    <s:String x:Key=\"S.Action.Save\">Lưu</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">Hủy bỏ</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">Các dự án gần đây</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">Tìm kiếm các dự án gần đây...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">Ngày tháng tạo</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">Tính toán khung hình</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">Không có dự án được chọn. Chọn 1 dự án từ danh sách để nạp.</s:String>\n    <!--<s:String x:Key=\"S.Recent.Warning.SameProject\">This project is already being displayed by this editor instance.</s:String>-->\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">Dự án này đã được mở bởi trình chỉnh sửa khác ngay lúc này. 1 dự án không thể được mở 2 lần nếu nó đã được mở bởi trình chỉnh sửa khác.</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">Các mục nhớ đệm</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">Truy cập vùng nhớ đệm:</s:String>\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Image\">{0} image</s:String>-->\n    <!--<s:String x:Key=\"S.Clipboard.Entry.Images\">{0} images</s:String>-->\n    <s:String x:Key=\"S.Clipboard.Explore\">Truy cập nội dung</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">Loại bỏ</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">Thao tác dán</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">Trước khi lựa chọn khung hình</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">Sau khi lựa chọn khung hình</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.CurrentProperties\">Các thuộc tính hiện tại</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.NewProperties\">Các thuộc tính mới</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI:</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">Giữ nguyên tỉ lệ khung hình.</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">Bạn phải chọn 1 giá trị khác để áp dụng hành động thay đổi kích thước.</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">Các điểm</s:String>\n    <s:String x:Key=\"S.Crop.Top\">Trên:</s:String>\n    <s:String x:Key=\"S.Crop.Left\">Trái:</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">Dưới:</s:String>\n    <s:String x:Key=\"S.Crop.Right\">Phải:</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">Vùng lựa chọn để xén phải nhỏ hơn kích thước khung hình hiện tại.</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">Vùng lựa chọn để xén phải lớn hơn 10x10 pixels.</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">Lật ngang</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">Lật dọc</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">Xoay trái 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">Xoay phải 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">Giảm tỉ lệ khung hình</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">Hệ số:</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">Số lượng loại bỏ:</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Delay\">Delay adjustment:</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">Don't adjust</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Previous\">Sum with the previous frame</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Delay.Evenly\">Sum evenly with the remaining frames</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll\">Reduce the framerate of the entire project.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.ApplyToAll.Info\">If the option is unchecked, you must select multiple consecutive frames,&#10;greater than the removal factor.</s:String>-->\n    <s:String x:Key=\"S.Reduce.Info\">Điều này sẽ loại bỏ {0} khung hình sau mỗi {1} khung hình, mà không đếm các khung hình đã loại bỏ.</s:String>\n    <!--<s:String x:Key=\"S.Reduce.Warning.NoSelection\">You must select the frames to apply the framerate reduction (or check the option to apply to the entire project).</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">The list of frames selected must be consecutive. You can't leave some frames unselected among selected ones.</s:String>-->\n    <!--<s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">The selection of frames must be greater than the removal factor, in order for the feature to be able to remove anything.</s:String>-->\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">Loại bỏ nhân đôi</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">Tương tự (%):</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">Loại bỏ khung hình:</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">Loại bỏ khung hình đầu</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">Loại bỏ khung hình cuối</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">Điều chỉnh độ trễ</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">Đừng điều chỉnh</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">Sử dụng trung bình</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">Sử dụng tổng</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">Hành động này phân tích mỗi khung hình (hình trong hình) và loại bỏ cái mà có ít nhất {0} % tương tự với gần nó ngay lập tức.&#x0d;Bạn có thể chọn nếu muốn điều chỉnh độ trễ (thời gian thể hiện) của các khung hình.</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">Văn bản</s:String>\n    <s:String x:Key=\"S.Caption.Font\">Phông chữ</s:String>\n    <s:String x:Key=\"S.Caption.Family\">Hệ thống:</s:String>\n    <s:String x:Key=\"S.Caption.Style\">Kiểu chữ:</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">Độ đậm nét:</s:String>\n    <s:String x:Key=\"S.Caption.Size\">Cỡ chữ:</s:String>\n    <s:String x:Key=\"S.Caption.Color\">Màu sắc:</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">Màu nền:</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">Đường bao</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">Chiều dày:</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">Bố trí</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">Dọc:</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">Ngang:</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">Các phím chính</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">Các phím</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">Ngăn cách:</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">Chỉnh sửa tổ hợp phím của bạn</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">Bỏ qua Ctrl, Alt, Shift, và phím Windows trong khi người sử dụng chỉnh sửa.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">Điều này sẽ bỏ qua phím đơn ví dụ \"Control\", nhưng nó không bỏ qua \"Ctrl + C\".</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">Mở rộng trình bày của các tổ hợp phím.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">Bắt đầu thể hiện các tổ hợp phím sớm hơn.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">Bằng (ms):</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">Không có tổ hợp phím trong khi đang quay.</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - Trình chỉnh sửa tổ hợp phím</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">Số khung hình</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">Đã nhận diện các tổ hợp phím </s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">Loại bỏ tổ hợp phím</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">Thêm 1 tổ hợp phím:</s:String>\n    <!--<s:String x:Key=\"S.KeyStrokes.Edit.Lower\">Lowercase lettering.</s:String>-->\n    <!--<s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">It lets you insert lower case single letters.</s:String>-->\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">Chế độ</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">Bút</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">Xóa</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">Lựa chọn</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">Xóa chính</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">Chiều rộng:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">Chiều cao:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">Đỉnh:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">Hình chữ nhật</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">Hình Elip</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">Khác:</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">Làm nổi bật.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">Vừa với đường cong.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">Không có hình vẽ nào để áp dụng cho các khung hình đã chọn.</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để áp dụng hình vẽ tự do vào.</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">Chèn</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">Hình dạng</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">Bán kính:</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">Bảng điều khiển:</s:String>\n    <!--<s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">Reset rotation</s:String>-->\n    <!--<s:String x:Key=\"S.Shapes.Shapes.Remove\">Remove</s:String>-->\n    <s:String x:Key=\"S.Shapes.Fill\">Làm đầy</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">Các click chuột</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">Không có phát hiện click chuột trong dự án của bạn.</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">Hình ảnh</s:String>\n    <s:String x:Key=\"S.Watermark.File\">Tệp:</s:String>\n    <!--<s:String x:Key=\"S.Watermark.File.Nothing\">None selected</s:String>-->\n    <s:String x:Key=\"S.Watermark.Opacity\">Mờ đục:</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">Chọn 1 hình ảnh</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">Bạn phải chọn 1 hình ảnh để áp dụng các khung hình đã chọn.</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">Bạn phải chọn ít nhất 1 khung hình để đóng dấu mờ.</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">Xuất hiện</s:String>\n    <!--<s:String x:Key=\"S.Border.Info\">Use negative values to make the border expand the image. When doing so, the border will be applied to all frames.&#x0d;If no negative value being used, the border will be applied only to the selected frames.</s:String>-->\n\n    <!--Editor • Shadow-->\n    <!--<s:String x:Key=\"S.Shadow.ShadowColor\">Shadow color:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.BackgroundColor\">Background color:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.Direction\">Direction:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.BlurRadius\">Blur radius:</s:String>-->\n    <!--<s:String x:Key=\"S.Shadow.Depth\">Depth:</s:String>-->\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Options\">Các tùy chọn làm rối</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">Kích cỡ điểm ảnh:</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">Tính toán màu sắc chuẩn cho mỗi khối hình ảnh.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">Sử dụng các công cụ lựa chọn để lựa chọn hình chữ nhật mà sẽ thành hình ảnh tạo bởi các điểm ảnh.</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">Bạn không chọn bất cứ gì. Vui lòng sử dụng công cụ lựa chọn để chọn hình chữ nhật mà sẽ thành hình ảnh tạo bởi các điểm ảnh.</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">Soạn thảo</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">Thanh</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">Văn bản</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">Chính xác:</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">Phút</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">Giây</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">1/1000 giây</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">Phần trăm</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">Số khung hình</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">Ngày/giờ hiện tại</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">Tùy chỉnh</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">Hiển thị tổng.</s:String>\n    <s:String x:Key=\"S.Progress.Format\">Định dạng:</s:String>\n    <!--<s:String x:Key=\"S.Progress.Format.Header\">Format</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = milliseconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Seconds\">$s = seconds</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Minutes\">$m = minutes</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Percentage\">$p = percentage</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = frame number</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Totals\">Totals:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Format.Examples\">Examples:</s:String>-->\n    <s:String x:Key=\"S.Progress.Format.Date\">Bạn có thể sử dụng định dạng ngày và giờ từ .Net Framework.&#x0d;Liệt kê có sẵn ở 2 liên kết dưới đây.</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">Các định dạng chuẩn</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">Các định dạng người dùng</s:String>\n    <!--<s:String x:Key=\"S.Progress.Precision.StartNumber\">Count from:</s:String>-->\n    <!--<s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">Starts counting the frame number from this selected number.</s:String>-->\n    <s:String x:Key=\"S.Progress.Orientation\">Định hướng:</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">Tạm hoãn cập nhật</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">Chế độ làm chậm:</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">Ghi đè (theo ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">Tăng hoặc giảm (theo ms)</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">Thu phóng (theo %)</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">Giá trị mới</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">Tối thiểu 10ms mỗi khung hình.</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">Giảm/tăng dần giá trị</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">Giá trị thu phóng</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">Giá trị mới sẽ thay thế thời gian (làm chậm) của tất cả khung hình được chọn. Giá trị có thể từ 10ms đến 25500ms.</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">Giá trị này sẽ giảm/tăng thời gian (làm chậm) của mỗi khung hình được chọn.&#x0d;Bạn có thể làm giảm/tăng bằng cách chọn giá trị từ -10000ms đến 10000ms, nhưng thời gian cuối của mỗi khung hình sẽ bị giới hạn từ 10ms đến 25500ms</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">Thu phóng thời gian (làm chậm) của mỗi khung hình được chọn bằng giá trị phần trăm.&#x0d;Bạn có thể thu phóng thời gian mỗi khung hình bằng cách chọn giá trị từ 1% đến 1000%, nhưng giá trị thời gian cuối của mỗi khung được giới hạn từ 10ms đến 25500ms</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">Sử dụng bút để lựa chọn phần tử ảnh không phải ảnh tĩnh còn lại (chúng sẽ thay đổi giữa các khung hình), bằng cách quét lên trên chúng.</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">Độ dài chuyển tiếp</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">Chuyển tiếp làm chậm</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">Làm mờ dần đến...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">Khung hình kế tiếp</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">1 màu sắc</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">Màu sắc</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">Chuyển tiếp này sẽ được áp dụng giữa các khung hình đã chọn và khung hình kế tiếp nó.</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">Kiểu tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Images\">Các hình ảnh (khung hình)</s:String>\n    <s:String x:Key=\"S.SaveAs.Project\">Dự án</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD</s:String>\n    <s:String x:Key=\"S.SaveAs.Video\">Video</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">Mã hóa</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Encoder.System\">Hệ thống</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Tooltip\">Sử dụng bảng màu mặc định.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Apng.Tooltip\">Mã hóa bởi nhà phát triển ScreenToGif .</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Các tùy chọn Gif </s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">Color reduction algorithm (quantization).</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">Neural network</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">High fidelity quantization. Slower, but good for higher amount of colors.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">Good for animations with less colors. Faster, but may produce color banding.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">Median cut</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">Less good than Octree and slower.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">Grayscale</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">Uses a fixed grayscale palette, so it's way faster.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">Most used colors</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">Simply takes the most used colors in the frames.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">Sampling:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">Sampling factor:&#10;A value of 1 will result in better looking gif, but it will be slower to render.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">Chất lượng:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">Các màu sắc:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">Tối đa số màu (cho mỗi khung hình).</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">Use a global color table.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">May reduce the quality and/or size of the gif.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">Lặp:</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Vòng lặp Gif.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">Lặp lại mãi mãi.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">Lặp lại số lần.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">Enable transparency.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">Enables the full transparency mode, which makes the background of the gif to be fully transparent.&#10;The chroma key replacement process will be ignored if this option is enabled.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">Select which color to display as transparent.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">If a color is selected, it will be converted to transparent and it will appear as transparent in the generated gif.&#10;If no color is selected, all transparent colors (Alpha = 0%) will appear as transparent normally.</s:String>-->\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">Xác định các điểm ảnh không đổi.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">By analyzing and detecting unchanged pixels between the frames,&#10;it will be possible to save only the necessary parts to the gif.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">Replace these pixels with a chroma key.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">Repeated/unchanged pixels will be replaced with this chroma key,&#10;making it possible to use less colors per frame.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">Chroma key:</s:String>-->\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Các tùy chọn Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">Vòng lặp Apng.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">Xác định điểm ảnh không đổi.</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">Tô màu tất cả điểm ảnh không đổi với màu trong suốt.</s:String>\n    \n    <!--Editor • Save as > Video/Images/Psd/Project options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions\">Các tùy chọn video</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Fps\">Khung hình/giây:</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.FlipVertically\">Lật video (theo chiều dọc).</s:String>\n    <s:String x:Key=\"S.SaveAs.ImagesOptions\">Các tùy chọn hình ảnh</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">Khóa các hình ảnh.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions\">Các tùy chọn Psd</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">Nén ảnh.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">Nén dữ liệu ảnh sử dụng thuật toán RLE.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">Lưu dữ liệu dòng thời gian.</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">Xuất thiết đặt thời gian của khung hình, thay vì chỉ khung hình.</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.ProjectOptions\">Project options</s:String>-->\n    \n    <s:String x:Key=\"S.SaveAs.Extras\">Mục bổ sung:</s:String>\n    <!--<s:String x:Key=\"S.SaveAs.Presets\">Presets:</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Default\">Default</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Add\">Add</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Save\">Save</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Edit\">Edit</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove\">Remove</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove.Title\">Remove Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove.Header\">Do you wish to remove the preset?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Remove.Message\">You can't undo this operation, but you can add the preset again later.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset\">Reset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset.Title\">Reset Preset</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset.Header\">Do you wish to reset the preset to its default parameters?</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Reset.Message\">You can't undo this operation, but you can edit back the preset again later.</s:String>-->\n    <!--<s:String x:Key=\"S.SaveAs.Presets.Warning.NoSelection\">No FFmpeg preset selected, please select one.</s:String>-->\n    \n    <!--Save As • Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">Các tùy chọn lưu</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">Lưu tệp tới 1 thư mục do bạn chọn.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Overwrite\">Ghi đè (nếu đã tồn tại).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">Lưu mới dự án như (cùng thư mục, cùng tên tệp).</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">Tải tệp lên</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadDestination\">Vị trí tải lên.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">Sao chép vào bộ nhớ đệm.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">Tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">Sao chép tệp đầu ra vào bộ nhớ đệm.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">Đường dẫn thư mục</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">Sao chép đường dẫn thư mục của tệp đầu ra vào bộ nhớ đệm.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">Đường dẫn tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">Sao chép đường dẫn của tệp đầu ra vào bộ nhớ đệm.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">Liên kết</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">Sao chép liên kết phát sinh bởi dịch vụ tải lên vào bộ nhớ đệm.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">Thực thi gửi các lệnh mã hóa.</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">Viết các lệnh để thực thi sau khi mã hóa.&#x0d;Để thực thi nhiều lệnh, viết mỗi lệnh 1 dòng riêng.&#x0d;Các lệnh đơn:&#x0d;{p} = Đường dẫn tệp đầu ra.&#x0d;{f} = Đường dẫn thư mục đầu ra.&#x0d;{u} = URL of the uploaded file.</s:String>\n    \n    <!--Save As • File-->\n    <s:String x:Key=\"S.SaveAs.File\">Tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">Thư mục đích.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">Chọn 1 vị trí.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">Định dạng tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">Tên file. Chèn định dạng ngày/giờ giữa '?'</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">Hoạt ảnh</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">Tăng số tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">Giảm số tệp</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">1 tệp với cùng tên đã tồn tại.</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">Lưu vào bộ nhớ đệm.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">Bạn cần chọn vị trí lưu các tệp (vào 1 thư mục, vào bộ nhớ đệm hoặc tải lên nơi nào đó).</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">Để thực thi lệnh gửi mã hóa, bạn cần viết gì đó vào trường dữ liệu của câu lệnh.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">Không dịch vụ tải lên nào được chọn. Bạn cần chọn 1 điểm đến.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">Bạn không thể tải lên các dịch vụ đã chọn vì chúng không được cho phép. Đi tới Các tùy chọn > Các dịch vụ tải lên để cho phép ứng dụng này.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">Bạn không thể chọn tùy chọn sao chép đường dẫn vì bạn đã không thiết đặt để tải tệp lên.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">Bạn cần chọn 1 thư mục đầu ra.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">Thư mục đầu ra không tồn tại.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">Thư mục đầu ra chứa 1 hoặc vài kí tự không hợp lệ. Vui lòng chọn 1 thư mục hợp lệ.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">Bạn cần chọn 1 tên tệp.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">Tệp đầu ra chứa 1 hoặc vài kí tự không hợp lệ. Vui lòng chọn 1 tệp hợp lệ.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">Tên tệp đã được sử dụng. Ghi đè lên hoặc đặt 1 tên khác.</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">Hành động đã bị hủy bỏ.</s:String>\n    \n    <!--SaveAs • Export-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">Xuất các khung hình</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">Bạn chắc rằng muốn xuất các khung hình?</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">Hành động này sẽ xuất {0} khung hình trực tiếp vào thư mục được chọn.</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">Phản hồi</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">Gửi</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">Xem trước</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">Gửi phản hồi</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">Tiêu đề</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">Tin nhắn</s:String>\n    <!--<s:String x:Key=\"S.Feedback.Message.Info\">If you are experiencing a bug, don't forget to explain to me how you got it, step by step.</s:String>-->\n    <s:String x:Key=\"S.Feedback.Type\">Viết phản hồi</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">Gợi ý</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">Vấn đề/Trục trặc</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">Email của bạn</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">Bạn cần nhập tiêu đề cho phản hồi.</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">Bạn cần nhập tin nhắn cho phản hồi.</s:String>\n    <!--<s:String x:Key=\"S.Feedback.Warning.Email\">You need to type your email, to receive a reply from the developer.</s:String>-->\n    <s:String x:Key=\"S.Feedback.Sending\">Đang gửi dưới nền... Cửa sổ này sẽ đóng lại trong chốc lát.</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">Các đính kèm (Tùy chọn, không quá 20MB)</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">Thêm đính kèm</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">Loại bỏ tất cả đính kèm</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">Tôi có thể biết Tiếng Anh</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">và tiếng Bồ Đào Nha (Brazil và Châu Âu).</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">Đây là những gì bạn sẽ gửi, cộng thêm tất cả đính kèm.</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">Sửa chữa</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">Có cửa sổ nào bị mất không?</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">Nếu bất kì cửa sổ nào bị mất (ngoài màn hình),&#x0d;sử dụng các tùy chọn dưới đây để đặt lại vị trí hiện thời và khởi động.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">Đây là vị trí mỗi cửa sổ hiện thời được lưu:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">Đây là vị trí mỗi cửa sổ sẽ mở vào lần tới:</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">Chuyển tất cả cửa sổ vào màn hình chính.</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">Thiết lập tại vị trí khởi động cho tất cả cửa sổ.</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">Chuẩn</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">Nghiêng</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">Xiên</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">Đen</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">Đậm</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">Một phần đậm</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">Quá đen</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">Quá đậm</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">Quá nhạt</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">Nặng</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">Nhạt</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">Trung bình</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">Chuẩn</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">Đều</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">Đậm vừa</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">Mảnh</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">Siêu đen</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">Siêu đậm</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">Siêu nhạt</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">Trên</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">Giữa</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">Dưới</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">Kéo dãn</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">Trái</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">Giữa</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">Phải</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">Ngang</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">Dọc</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.zh-Hant.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n\n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;-->\n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n\n    <!--General-->\n    <s:String x:Key=\"S.Ok\">確定</s:String>\n    <s:String x:Key=\"S.Back\">返回</s:String>\n    <s:String x:Key=\"S.Cancel\">取消</s:String>\n    <s:String x:Key=\"S.Yes\">是</s:String>\n    <s:String x:Key=\"S.No\">否</s:String>\n    <s:String x:Key=\"S.Add\">增加</s:String>\n    <s:String x:Key=\"S.Edit\">編輯</s:String>\n    <s:String x:Key=\"S.Id\">Id</s:String>\n    <s:String x:Key=\"S.Title\">標題</s:String>\n    <s:String x:Key=\"S.Description\">描述</s:String>\n    <s:String x:Key=\"S.SelectColor\">單擊此處選擇顏色</s:String>\n    <s:String x:Key=\"S.Documentation\">點擊以導向至檔案</s:String>\n    <s:String x:Key=\"S.Suppress\">隱藏</s:String>\n    <s:String x:Key=\"S.Preview\">預覽</s:String>\n    <s:String x:Key=\"S.Size\">大小</s:String>\n    <s:String x:Key=\"S.Background\">背景</s:String>\n    <s:String x:Key=\"S.Color\">顏色：</s:String>\n    <s:String x:Key=\"S.Delay\">延遲</s:String>\n    <s:String x:Key=\"S.DelayMs\">延遲(毫秒)：</s:String>\n    <s:String x:Key=\"S.ValueMs\">數值 -+ (ms)：</s:String>\n    <s:String x:Key=\"S.ScaleValue\">比例值：</s:String>\n    <s:String x:Key=\"S.Margin\">邊界：</s:String>\n    <s:String x:Key=\"S.Padding\">填充：</s:String>\n    <s:String x:Key=\"S.MinHeight\">最小高度：</s:String>\n    <s:String x:Key=\"S.AndOr\">且/或</s:String>\n\n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">哦，不，程式崩潰了 :(</s:String>\n    <s:String x:Key=\"S.Required\">必填字段</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">缺少相依元件</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 不存在</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">為了正確使用此應用程式，您需要下載正確版本的 .Net Framework。</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">同時只能有一個實例執行</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">該應用程式已在執行中</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif 已經在執行中，但是顯然沒有打開任何視窗。請檢查系統工作列的通知區域，其中必須有一個 ScreenToGif 圖示。</s:String>\n\n    <s:String x:Key=\"S.SavingSettings.Title\">儲存設定</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">您想再次嘗試儲存它嗎？</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">ScreenToGif 似乎沒有足夠的權限來儲存至磁碟。&#10;&#10;您想以管理員權限再試一次嗎？</s:String>\n\n    <s:String x:Key=\"S.Exiting.Title\">正在離開 ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">您確定要離開嗎？</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">所有視窗及通知區域圖示將被關閉</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">切換顯示卡</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">切換至正確的顯示卡以擷取所選的螢幕。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">由於 DirectX 的限制，ScreenToGif 必須與被擷取的螢幕在同一張顯示卡下執行。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">打開 Windows 設定 > 系統 > 顯示器 > 圖形設定，為 ScreenToGif 切換顯示卡設定。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">打開您顯示卡中的圖形設定，為 ScreenToGif 切換顯示卡。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">開啟 Windows 設定</s:String>\n\n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">Enter 鍵</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">退出鍵</s:String>\n    <s:String x:Key=\"S.Keys.Space\">空白鍵</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">右鍵單擊</s:String>\n\n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">新增螢幕錄製</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">新增攝影機錄製</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">新增畫板錄製</s:String>\n    <s:String x:Key=\"S.Exit\">離開</s:String>\n\n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">新增螢幕錄製</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">新增網路攝影機錄製</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">新增白板錄製</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">新增動畫</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">插入螢幕錄製</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">插入網路攝影機錄製</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">插入白板錄製</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">從媒體插入（圖片和影片）</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">另存為...</s:String>\n    <s:String x:Key=\"S.Command.Load\">載入檔案（圖片，影片和專案）</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">載入最近的專案</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">捨棄目前專案</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">覆蓋影格延遲</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">增加/減少影格延遲</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">影格縮放延遲</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">設定縮放到 100％</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">調整視窗到影格大小</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">選擇第一影格使圖片符合可用的視窗大小</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">選擇第一影格</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">選擇上一影格</s:String>\n    <s:String x:Key=\"S.Command.Play\">播放動畫</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">選擇下一影格</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">選擇最後影格</s:String>\n    <s:String x:Key=\"S.Command.Undo\">還原</s:String>\n    <s:String x:Key=\"S.Command.Redo\">重做</s:String>\n    <s:String x:Key=\"S.Command.Reset\">還原專案中的所有更改</s:String>\n    <s:String x:Key=\"S.Command.Copy\">複製所選影格並將其儲存在剪貼簿中</s:String>\n    <s:String x:Key=\"S.Command.Cut\">剪下所選影格並將其儲存在剪貼簿中</s:String>\n    <s:String x:Key=\"S.Command.Paste\">從剪貼簿貼上影格</s:String>\n    <s:String x:Key=\"S.Command.Delete\">刪除所選影格</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">刪除之前的所有影格</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">刪除之後的所有影格</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">刪除重複項</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">減少影格數</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">建立平滑循環</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">反向動畫</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">使動畫前進和後退</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">移動所選擇影格到左側</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">移動所選擇影格到右側</s:String>\n    <s:String x:Key=\"S.Command.Resize\">調整所有影格大小</s:String>\n    <s:String x:Key=\"S.Command.Crop\">裁剪所有影格</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">翻轉或旋轉影格</s:String>\n    <s:String x:Key=\"S.Command.Caption\">新增標題</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">加入自由浮動文字</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">加入帶有標題的影格</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">插入在錄製過程中按鍵的文字展示</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">自由繪製</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">加入形狀</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">滑鼠點擊</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">選擇圖片並加入為浮水印</s:String>\n    <s:String x:Key=\"S.Command.Border\">新增邊框</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">加入陰影</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">套用效果在影格上敏感部分</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">使用繪圖工具選擇影格的哪些部分在整個動畫中不應保持靜態</s:String>\n    <s:String x:Key=\"S.Command.Progress\">進度條或帶有播放詳細資訊的文字</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">選擇所有影格</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">切換到指定索引的影格</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">反向選擇影格</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">取消選擇所有影格</s:String>\n    <s:String x:Key=\"S.Command.Fade\">淡出轉場</s:String>\n    <s:String x:Key=\"S.Command.Slide\">幻燈片過場</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">清除所有完成的編碼</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">上移</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">下移</s:String>\n    <s:String x:Key=\"S.Command.Add\">新增</s:String>\n    <s:String x:Key=\"S.Command.Open\">開啟</s:String>\n    <s:String x:Key=\"S.Command.Edit\">編輯所選專案</s:String>\n    <s:String x:Key=\"S.Command.Save\">儲存所選項目</s:String>\n    <s:String x:Key=\"S.Command.Remove\">刪除所選項目</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">查看記錄</s:String>\n\n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - 啟動</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">螢幕錄影</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">啟動螢幕錄影功能，輕鬆錄製您的螢幕畫面。</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">網路攝影機錄影</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">啟動網路攝影機錄影功能，輕鬆錄製您網路攝影機裡的影像。</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">繪圖板錄影</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">啟動繪圖板錄影功能，輕鬆錄製您繪圖的過程。</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">編輯器</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">打開編輯器視窗，在該視窗中您可以編輯新錄製的影像。</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">選項</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">有新版本</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">下載最新版本的 ScreenToGif</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">更新</s:String>\n    <s:String x:Key=\"S.Updater.Header\">一個新的更新可用</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">新版本!</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">有新版本可用，版本 {0}!按一下這裡了解更多詳情。</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">您的系統似乎不再受到支援，或更新系統發生變更。請嘗試從網站手動下載。</s:String>\n    <s:String x:Key=\"S.Updater.Version\">版本</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">可攜式</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">安裝程式</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">新功能？</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">錯誤修復：</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">您可以下載新版本。 &#10;您要打開瀏覽器進行下載嗎？</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">更新後執行該應用程式</s:String>\n    <s:String x:Key=\"S.Updater.Download\">下載</s:String>\n    <s:String x:Key=\"S.Updater.Install\">安裝</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">手動安裝</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">正在下載...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">無法顯示下載詳細資訊</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">無法下載更新</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">您需要等所有編碼完成之後才能更新</s:String>\n\n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - 下載器</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">下載器</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">{0} / {1}</s:String>\n\n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - 選項</s:String>\n    <s:String x:Key=\"S.Options.App\">應用程式</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">錄製</s:String>\n    <s:String x:Key=\"S.Options.Editor\">編輯器</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">自動化任務</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">鍵盤快捷鍵</s:String>\n    <s:String x:Key=\"S.Options.Language\">語系</s:String>\n    <s:String x:Key=\"S.Options.Storage\">暫存檔</s:String>\n    <s:String x:Key=\"S.Options.Extras\">擴充</s:String>\n    <s:String x:Key=\"S.Options.Upload\">發佈服務</s:String>\n    <s:String x:Key=\"S.Options.Donate\">捐贈</s:String>\n    <s:String x:Key=\"S.Options.About\">關於</s:String>\n    <s:String x:Key=\"S.Options.Other\">其它</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">游標跟隨缺少快捷鍵</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">為了使用游標跟隨功能，必須設定快捷鍵以在需要時將其啟停用。</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">啟動</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">手動啟動</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">僅當您手動執行此應用程式時才會執行</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">隨 Windows 啟動</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Windows 啟動後將執行該應用程式</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">無法切換啟動模式</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">僅允許一個實例</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">您將可以為每個使用者和可執行檔案執行一次此應用程式，&#10;意味著不同的使用者或可執行實例可以共存。 &#10;當再次嘗試執行此應用程式時，第二個實例將嘗試將焦點放在第一個實例上並自行結束</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">允許多個實例</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">您可以無限制地同時執行此應用程式</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">啟動後最小化到工作列通知區域圖示</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">（啟用此選項後通知區域圖示將可見）</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">啟動使用：</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">啟動視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">螢幕錄製</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">網路攝影機錄製</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">繪圖板錄製</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">編輯器視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">（在程式啟動時首先顯示的視窗）</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">主題</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">顏色配置</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">非常淺</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">淺</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">中</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">深</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">非常深</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">依系統設定</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">自訂</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">範例顏色</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">通知區域圖示</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">在工作列（通知區域）上顯示應用程式的圖示</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">即使所有視窗關閉仍保持應用程式的打開狀態</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">什麼都不做</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">打開一個視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">無視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">最小化/還原所有視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">最小化所有視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">恢復所有視窗</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">左鍵點擊：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">左鍵點擊（x2）：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">中鍵點擊：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">視窗：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">否則，打開：</s:String>\n    <s:String x:Key=\"S.Options.App.General\">常規</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">解決\"空間不足...\"崩潰的方法</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">（實驗性）</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">關閉應用程式之前詢問我（通過'離開'指令）</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">停用硬體加速</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">（使用者界面將通過軟體模式呈現）</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">檢查翻譯更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">（更新的翻譯將自動下載並安裝）</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">檢查更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">關閉應用程式後自動安裝更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">強制下載可攜式版本</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">（需要軟體手動解壓縮並取代執行檔來安裝）</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">強制更新時提升執行權限</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">在安裝開始之前提示我</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">介面</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">舊版</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">新版</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Frequency\">擷取頻率</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">手動</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">手動按下擷取鍵或對應的快捷鍵來擷取畫面。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">使用者互動</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">當您點擊或鍵盤輸入時擷取畫面。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">每秒</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">會以設定的影格率，以每秒為基礎擷取畫面。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">每分鐘</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">會以設定的影格率，以每分鐘為基礎擷取畫面。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">每小時</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">會以設定的影格率，以每小時為基礎擷取畫面。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">播放延遲：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">（每張擷取的畫面會設定此延遲毫秒數）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">觸發延遲：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">（每次影格擷取在開始前的等待毫秒數）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">每間隔 {0} 擷取畫面。</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Mode\">擷取模式</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">使用較舊的擷取方法，該方法比較慢，可能無法擷取遊戲，但不需要其他外掛。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">使用 Desktop Duplication API 擷取方法，該方法更快並且可以擷取全螢幕遊戲，但是需要 Windows 8 或更高版本。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">保存到檔案</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">擷取到的每一影格將直接作為圖片儲存在磁碟上。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">記憶體&#10;快取</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">每一擷取到的影格將會優先作為像素陣列儲存於記憶體中（可能在壓縮之前）。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">壓縮：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">最佳</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">（較慢但可能更理想的壓縮）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">最快</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">（速度更快，但最佳壓縮效果可能較差）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">無壓縮</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">（擷取影格時不執行壓縮）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">快取大小：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">（以 MB 為單位。達到此大小後，資料將被寫入到磁碟上）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">防止擷取全黑畫面</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">（防止具有記憶體快取的 BitBlt 錯誤地擷取到全黑的畫面）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">錄影時顯示滑鼠游標</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">選擇游標顏色</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">固定影格率</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">（固定延遲，不會導致錄影時間延長）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">只在有異動時擷取</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">（只有在擷取區域中畫面有異動時才擷取影格）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">提高遠端桌面連線的擷取效能</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">（停用多層視窗擷取）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">在擷取時強制清除記憶體</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">（減少擷取時的記憶體用量，但會降低性能）</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">輔助線</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">井字線</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">點擊以切換顯示此井字輔助線</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">十字線</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">點擊以切換顯示此十字輔助線</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">輔助線只會在錄製暫停或停止時顯示。</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">隱藏標題列 (精簡模式)</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">啟用螢幕放大鏡</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">（在選擇錄製區域時啟用放大鏡）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">選擇螢幕區域時的邊框動畫效果</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">（動畫使用\"前進螞蟻效果\"）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">啟用選擇平移</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">（在區域的一個角落顯示拖曳圖示，可以移動擷取區域）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">緊湊模式</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">（顯示較小的錄製指令介面）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">錄製時顯示捨棄按鈕</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">（通常只會在暫停時顯示）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">提高螢幕選擇效能</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">（通過顯示螢幕靜態畫面來減少選擇螢幕的延遲）</s:String>\n\n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">記住前次錄製區域的大小</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">記住前次錄製區域的位置</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">使用開始前倒數計時</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">（以秒為單位，在開始擷取之前等待時間）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">啟用游標跟隨</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">（錄製區域將根據游標的位置重新定位）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">（邊界緩衝，移動像素超過此值時才會改變錄影位置）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">（錄製區域開始重新定位緩衝區邊距）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">在捨棄錄影前請詢問我</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">編輯器背景</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">網格大小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">非常小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">中</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">大</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">非常大</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">大方格</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">特大</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">自訂</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">高度</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">寬度</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">套用</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">基準色彩</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">顏色 1</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">顏色 2</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">在另一個視窗中顯示編碼</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">延伸標題列（視窗邊框）</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">讀取後根據影格大小自動調整視窗大小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">讀取後根據視窗大小自動調整影格縮放級別</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">刪除影格前詢問我</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">放棄專案前詢問我</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">關閉編輯器前詢問我 （如果有打開的專案）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">啟用連按三下來選擇文字</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">繪製標題文字的外輪廓</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">當需要時丟棄影格</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">（如果預覽器無法即時顯示時跳過影格）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">如果預覽器無法即時顯示時，跳過該影格</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">對還原/重做歷史記錄添加上限</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">（達到上限後，較舊的操作將被刪除）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">（儲存的最大操作數量）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">在預置設定之間同步輸出資料夾</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">（預置設定將使用相同的輸出路徑）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">同時同步檔案名稱</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">（預置設定將使用相同檔案名稱）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">僅在相同檔案類型的預置設定之間同步</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">（只有相同檔案類型的預置設定才會同步）</s:String>\n\n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">自動化任務</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">自動化任務列表</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">任務</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">詳細資訊</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">啟用</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">啟用此任務</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">（選擇一個任務）</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">從上方選擇一個任務</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">這些任務從列表的頂部到底部依次執行。&#10;在您第一次使用編輯器打開專案時，就會發生這種情況。</s:String>\n\n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">全域</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">螢幕錄製</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">（打開預設螢幕錄製）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">攝影機錄製：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">（打開攝影機錄製）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">繪畫板錄製</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">（打開繪畫板錄製，以便您可以錄製您的繪畫）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">編輯器：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">（打開另一個編輯器視窗）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">選項：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">（打開選項視窗，一次只能打開一個視窗）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">離開：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">（關閉所有視窗並從系統工作列中關閉應用程式）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">錄製設定</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">開始/暫停：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">（它啟動或暫停錄製，如果已啟用快照模式，則用於拍攝快照）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">停止：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">（它會停止錄製並打開編輯器）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">捨棄：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">（暫停時捨棄已錄製畫面）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">游標跟隨：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">（根據游標的位置調整錄製區域）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">停用以下內容：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">（暫時停用基於游標位置的錄製區域調整，僅接受修飾鍵）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">點擊並輸入所需的按鍵和修飾鍵。&#10;部分按鍵組合無法使用。</s:String>\n\n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">應用程式語系</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">自動偵測</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">目前作業系統的語系（如適用）</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">您願意翻譯我的應用程式嗎？</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">點擊此處閱讀翻譯指南並下載 Translator 工具程式。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">之後，</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">點擊這裡匯入</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">並測試您的翻譯。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">在您翻譯完成以後，請將語言檔案寄送到</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">Email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">。謝謝！</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">點擊以打開說明的網頁。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">打開匯入頁面</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">打開電子郵件應用程式</s:String>\n\n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">狀態</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">磁碟機：</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">共 {1}，可用 {0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">再次檢查剩餘的空間</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">清除暫存資料夾。 &#10;您可以決定是否要保留最近的專案。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">目前選擇的硬碟空間不足。請清理暫存資料夾或更改位置。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">無法收到磁碟機詳細信息。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">沒有檔案</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} 個檔案</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} 個檔案</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">沒有資料夾</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} 個資料夾</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} 個資料夾</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} 使用中</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">路徑</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">暫存檔：</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">選擇暫存檔案的位置</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">記錄檔：</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">選擇錯誤記錄檔位置</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">瀏覽所選資料夾</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">設定位置</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData：</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">本機：</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">不存在</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">建立空的本機設定檔</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">移除設定檔</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">打開設定檔案所在的資料夾。 &#10;按住 Ctrl 鍵並點擊以打開檔案</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• 設定載入模式: 預設 ◄ AppData ◄ 本機。&#10;• 如果本機資料夾中沒有設定檔，應用程式將在 AppData 資料夾中搜尋，如果沒有設定檔，則使用預設值。&#10;• 如果沒有本機設定，所有設定都儲存在 AppData 設定檔中</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">關閉程式時刪除所有快取檔案</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">從快取西刪除所有檔案前先詢問我。</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">自動移除舊的專案</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">打開編輯器時，背景工作將清除超過 5 天的專案。</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">（在幾天之內，打開編輯器後，任何舊專案都將被刪除/丟棄）</s:String>\n\n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - 清除暫存</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">您要清除暫存資料夾嗎？</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">創建錄製或打開要編輯的內容時，將創建一個專案並將其儲存在暫存資料夾中</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">您要從暫存資料夾中刪除這些專案嗎？</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">不要刪除最近的專案</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">（僅會刪除 {0} 天之前尚未使用的專案）</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">（所有目前未使用的專案將被刪除）</s:String>\n\n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">代理</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">停用</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">手動</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">系統</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">（使用系統代理）</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">主機：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">連接埠：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">使用者名稱：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">密碼：</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Presets\">上傳預置設定</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">服務</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">標題</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">描述</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">啟用</s:String>\n\n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">上傳服務</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">選擇一項服務</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">在上方選擇一項服務</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">自定</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">使用此預置參數</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">詳細資訊</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">名稱</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">描述：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">匿名</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">已認證</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">授權</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">取得授權憑證</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">在此處貼上 OAuth 憑證</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">使用者名稱</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">密碼：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">授權</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">使用者名稱及密碼將不會被儲存</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">選項</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">使用直接連結</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">相簿</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">您必須給此預置設定一個唯一的名稱。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">名稱已被其他預置設定使用。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">在身份驗證模式上，您必須完成身份驗證過程。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">您必須提供您的使用者名稱及密碼才能授權此程式。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">無法取得授權憑證。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">為了授權此應用程式，您需要提供授權憑證。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">授權失敗。檢查一切是否正確，然後在幾秒後重試。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">使用直接連結無法讀取相簿列表。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">授權完成</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">未授權</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">授權已於 {0} 中過期</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">授權有效期至 {0}</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">取得 Gifv 副檔名連結而不是 Gif</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">將 Gif 上傳到指定的相簿</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">相簿：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">發佈前詢問我</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">重新讀取相簿列表</s:String>\n\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">預設</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">詢問填寫上傳的詳細資訊</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">URL 類型：</s:String>\n\n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">選擇一個相簿（可選）</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">如果您願意，可以選擇目標相簿：</s:String>\n\n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">上傳詳細資訊（可選）</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">上傳詳細資訊</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">標題：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">描述：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">標籤：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">使用分號（;）分隔標籤</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">僅對使用直接連結造訪的使用者顯示</s:String>\n\n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">上傳記錄</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">日期</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">預置參數</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">成功？</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">刪除歴史記錄項目</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">連結：</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">較低品質：</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">刪除連結：</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">確定要刪除歷史記錄項目嗎？</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">此操作無法撤消。&#10;&#10;確定要刪除所選的歷史記錄項目嗎？</s:String>\n\n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">可用的外部工具</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">點擊此處下載&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">下載中...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">已下載&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">點擊這裡打開檔案的屬性</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Store 發佈的應用程式無法下載其他應用程式。您必須手動下載它</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg 位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">選擇 FFmpeg 可執行檔的位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg 可執行檔</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">FFmpeg 可執行檔案的路徑中包含一個或多個無效字元。請為該可執行檔案選擇一個有效位置。</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski 位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">選擇 Gifski 元件的位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski 元件</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Gifski 元件的路徑包含一個或多個無效字元。請為該可執行檔案選擇一個有效的位置。</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg 授權條款</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski 授權條款</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx 授權條款</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">缺少資料夾的寫入權限</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">因缺少資料夾寫入權限而無法儲存下載的資料。&#10;&#10;請問您想要使用系統管理員權限來啟動下載器嗎？</s:String>\n\n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">捐贈</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">捐贈美金 US$</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">捐贈歐元 €</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">打開 Paypal 網站。選擇貨幣:美元</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">打開 Paypal 網站。選擇貨幣:歐元</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">打開 Paypal 網站。您必須選擇貨幣</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">訂閱</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">每月通過 Patreon 捐款</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Flattr\">每月通過 Flattr 捐款</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">贈送遊戲</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">通過 Steam 贈送遊戲</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">通過 GOG 贈送遊戲</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">通過 Ko-fi 支付咖啡費用</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">加密貨幣</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">複製比特幣現金地址</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">支持</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">如果您想支持該項目 :)</s:String>\n\n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">版本：</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">檢查更新</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">您正在使用最新版本。</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">作者: Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store 版本。某些功能由於強制策略而被禁用</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">聯繫</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">加入伺服器</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">造訪頁面</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">加入房間</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">技術</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">授權：</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">（此程式完全免費）</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">原始碼：</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">隱私政策：</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">非常感謝</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">我所有的支持者，提供意見反應和/或捐贈的人</s:String>\n\n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">本地化</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">正在取得語系代碼...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">識別為 {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">未知</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">現在使用的是最底部的資源。</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">要應用您的自訂資源，請將其移動到列表的最底部。</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">匯出語系資源</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">儲存語系字典檔</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">開啟語系字典檔</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">資源字典檔</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">匯入語系資源</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">檔案名稱未依規範</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">請嘗試重新命名，如: StringResources.en.xaml，\"en\" 應該要改成您的語系代碼。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">您不能加入相同的語系資源</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">請移除重複的語系資源或使用其他語系代碼。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">重複的語系代碼</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">\"{0}\" 已被使用，請嘗試用 \"{1}\" 取代。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">未知的語系</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">\"{0}\" 及其家族不被識別為合法的語系代碼。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">匯入語系資源失敗</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">錄影</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">暫停</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">繼續</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">停止</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">捨棄</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">貼齊</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">高度</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">寬度</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">已啟用游標跟隨</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">點擊以在擷取頻率模式之間切換。</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">手動</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">互動</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">每秒最大影格數</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">範圍從 1 到 60 fps，數值越高表示越多影格被錄製。&#10;每一單位表示 16 毫秒的差異。</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">每分鐘最大影格數</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">範圍從 1 到 60 fpm，數值越高表示越多影格被錄製。&#10;每一單位表示 1 秒的差異。</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">每小時最大影格數</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">範圍從 1 到 60 fph，數值越高表示越多影格被錄製。&#10;每一單位表示 1 秒的差異。</s:String>\n\n    <s:String x:Key=\"S.Recorder.ClickOrPress\">點擊或按下來開始擷取</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">貼齊視窗（拖曳後放開貼齊）</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">啟動前</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif（已暫停）</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">正在停止...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">準備啟動中...</s:String>\n\n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">擷取經過時間</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">總影格數：</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">手動擷取</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">已暫停</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">您的電腦不支援精確的擷取模式&#10;這表示可能永遠無法達到目標幀率。</s:String>\n\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">無法擷取畫面</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">無法擷取畫面。5 次嘗試擷取後未取得任何影格。</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">無法開始/暫停擷取螢幕</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">使用 Desktop Duplication API 擷取螢幕需要 Windows 8 或更高版本。</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">區域</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">選擇一個區域</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">視窗</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">選擇一個視窗</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">螢幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">選擇螢幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">內部螢幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">通用螢幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">圖型裝置: {0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">解析度: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">原始解析度: {0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">拖曳以移動選擇區域</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">接受</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">重試</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">右鍵</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">取消選擇 (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">點擊並拖曳選擇螢幕區域</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">點擊並拖曳以選擇一個區域</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">點擊此處選擇此視窗</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">點擊此處選擇此螢幕</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">按 Esc 鍵取消</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">按下 {0} 來停止錄製</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">錄影視窗將會最小化，將其還原或按 {0} 以暫停錄製。</s:String>\n\n    <s:String x:Key=\"S.Recorder.Discard.Title\">捨棄錄影</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">您確定想要捨棄目前錄影嗎？</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">此動作會捨棄目前錄影，移除所有影格。&#x0d;您無法復原此操作。</s:String>\n\n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - 網路攝影機錄影</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">未偵測到視訊裝置:(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">檢查視訊裝置</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">比例: x{0:0.##}</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">變更視訊比例</s:String>\n\n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - 繪圖板錄影程式</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">自動錄影</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">在繪圖時啟用錄影</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [按住]</s:String>\n\n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">顏色選取器</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">選擇一種顏色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">紅色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">綠色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">藍色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">不透明度</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">十六進位</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">初始顏色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">目前顏色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">最新的顏色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">拖曳以取樣顏色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">點擊並拖曳以從螢幕上選擇顏色</s:String>\n\n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">例外檢視器</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">開啟內部異常</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">例外類型</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">訊息</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">堆壘</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">來源</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">出事了</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">傳送報告</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">預置設定</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">編碼器</s:String>\n    <s:String x:Key=\"S.Preset.Name\">名稱</s:String>\n    <s:String x:Key=\"S.Preset.Description\">描述</s:String>\n    <s:String x:Key=\"S.Preset.Other\">其他</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">選項修改後自動儲存。</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">對此預置設定（編碼和輸出設定）的異動需要按下存檔鍵來手動儲存。</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">對此預置設定（編碼和輸出設定）的異動將會自動儲存。</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">預置設定的某些屬性是唯讀的。</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">您必須為此預置設定命名。</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">已經存在同名的預置設定。</s:String>\n\n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">自動儲存</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">對此預置設定的異動將自動儲存。</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">預設 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">編碼器的預置設定</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">用於 Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">遵循 Twitter 的上傳限制 （除了大小及解析度）。</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC  ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">高效率視訊編碼。</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">較舊且知名的編碼器。</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">動畫</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">影片</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">圖片</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">專案</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">高品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">適合用於較多顏色數量及漸層的錄製。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">高品質 • 透明背景</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">支援儲存透明背景的動畫。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">高品質 • 圖形</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">適合用於較少顏色數量的錄製。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • 平衡</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">使用 Wu 的量化器 (不抖動)，適合照片。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • 高品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">使用 Floyd-Steinberg 誤差擴散抖動及較高的位元層級，，適合照片。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • 低品質，較快</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">使用預設的 'web-safe' 調色盤和拜耳 8x8 有序抖動來量化所有影格。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg - 高品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">圖片品質較高，但檔案容量較大。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg - 低品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">圖片品質較低，但檔案容量較小。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski - 高品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">圖片品質較高，但檔案容量較大。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski - 低品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">圖片品質較低，但檔案容量較小。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski - 較低品質且編碼較快</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">圖片品質更低，編碼速度更快，但檔案容量更小。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">系統 - 低品質</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">低品質但編碼較快。</s:String>\n\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg - 高品質</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">圖片品質較高，檔案容量較小，但編碼速度較慢。</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg - 低品質</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">圖片品質較低，檔案容量較小，但編碼速度較快。</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">高品質</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">高品質圖片，檔案容量小。</s:String>\n\n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">插入影格</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">兩邊應具有相同的大小，此視窗允許您重新調整圖片和畫布的位置和大小。按一下選擇並調整大小。</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">畫布大小：</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">適合畫布上的圖片</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">調整畫布大小以適合內部的兩個圖片（從左上角）</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">影格大小之間有差別，在插入影格之前您需要解決此問題。</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">已插入的影格</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">目前影格</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">圖片大小：</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">圖片位置：</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">重設圖片大小&#10;和位置</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">新影格將插入到目前位置的影格清單中：</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">之前</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">之後</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">影格</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">正在匯入</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">選擇畫布填充顏色</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">從影片匯入影格</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">開發商：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">載入中...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">縮放比例：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">大小：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">高度：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">寬度：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">影格率：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">fps</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">開始：</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">結束：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">選取範圍：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">影格：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">持續時間：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">影片讀取失敗</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">預覽工具無法啟動。請嘗試使用其他匯入工具或檢查影片是否未損壞。&#10;如果您使用的是 MediaPlayer，請檢查 Windows 功能 \"媒體功能/Windows Media Player\" 是否已打開，並確保您具有必需的影片編解碼器。</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">預覽影格逾時</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">沒有選擇要匯入的影格</s:String>\n\n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">編碼器</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">編碼中...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">正在開始</s:String>\n\n    <s:String x:Key=\"S.Encoder.Completed\">已完成</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">已複製到剪貼簿</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">複製失敗</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">已執行指令</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">顯示指令的輸出</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">指令執行失敗</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">上傳失敗</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + 點擊以打開頁面刪除圖片（如適用）</s:String>\n\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">經過時間（分鐘）：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">分析：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">編碼：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">上傳：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">複製：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">指令：</s:String>\n\n    <s:String x:Key=\"S.Encoder.DeletedMoved\">檔案已刪除或已移動</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">已取消</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">錯誤</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">點擊此處顯示此錯誤的詳細資訊</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">上傳中</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">執行指令</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">正在處理 {0}</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">正在準備第二階段</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">正在處理 {0} - 第二階段</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">新增檔案</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">正在分析未變更的像素</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">儲存分析結果</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">開啟檔案</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">瀏覽資料夾</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">移除</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">顯示詳細資料</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">關閉所有完成的編碼</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">複製成圖片</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">複製檔案名稱</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">複製資料夾路徑</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">複製連結</s:String>\n\n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGId - 指令輸出</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">指令輸出</s:String>\n\n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">通知</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">關閉所有通知</s:String>\n\n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - 編輯器</s:String>\n    <s:String x:Key=\"S.Editor.File\">檔案</s:String>\n    <s:String x:Key=\"S.Editor.Home\">首頁</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">播放</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">編輯</s:String>\n    <s:String x:Key=\"S.Editor.Image\">圖片</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">轉場</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">統計資料</s:String>\n    <s:String x:Key=\"S.Editor.Options\">選項</s:String>\n    <s:String x:Key=\"S.Editor.Help\">說明</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">附加功能</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">有一個新的更新！</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">點擊此處以了解更多訊息。</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">總影格數、已選影格數、已選影格索引</s:String>\n\n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">正在準備影格</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">載入無效 - 您無法一次同時匯入多個檔案。請試著只選擇一個檔案。</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">載入無效 - 您無法一次同時匯入多個專案。請試著只選擇一個專案。</s:String>\n\n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">打開媒體（圖片或影片）</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">打開媒體（圖片或影片）或專案檔</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">所有支援的檔案</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">圖片</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">影片</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">動畫 PNG</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">GIF 動畫</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">WEBP 動畫</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Avi\">AVI 影片</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">MKV 影片</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">MOV 影片</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">MP4 影片</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">WEBM 影片</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">BMP 圖片</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">JPEG 圖片</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">PNG 圖片</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">ZIP 壓縮檔，所有選擇的圖片</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif 專案</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif ZIP 壓縮專案</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">PSD 檔</s:String>\n\n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">從 [檔案 > 新增] 開始新的錄影</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">拖放要匯入的圖片、影片或專案</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">非常感謝您使用我的應用程式！</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">影格率越低，色彩計數或影格之間的變化量越小，則大小越小</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">您想談談嗎？連絡方式請打開 [選項 > 關於]</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">遇到麻煩？請透過意見反應工具與我聯繫</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">您想試試新版錄製界面嗎？可以從 [選項 > 錄製] 來啟用</s:String>\n\n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">錄製</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">網路攝影機&#10;錄製</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">繪圖板&#10;錄製</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">空白&#10;動畫</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">新增</s:String>\n\n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">錄製</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">網路攝影機&#10;錄製</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">白板&#10;錄影</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">媒體</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">插入</s:String>\n\n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">另存新檔</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">媒體或&#10;專案</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">最近使用的專案</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">另存&#10;專案</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">捨棄&#10;專案</s:String>\n\n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">動作紀錄</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">還原</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">重做</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">重設</s:String>\n\n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">剪貼簿</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">顯示剪貼簿</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">貼上</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">剪下</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">複製</s:String>\n\n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">縮放</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">根據內容&#10;調整視窗</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">符合圖片</s:String>\n\n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">選擇</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">全選</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">移至</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">反向</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">取消選取</s:String>\n\n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">播放</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">第一張</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">上一張</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">播放</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">暫停</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">下一張</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">最後一張</s:String>\n\n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">播放選項</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">播放期間循環播放</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">僅在播放期間使用&#10;如果要更改用於輸出 Gif 和 Apng 的循環設定，請至 \"另存新檔\" 中設定</s:String>\n\n    <!--Editor • Edit tab • Frames-->\n    <s:String x:Key=\"S.Editor.Edit.Frames\">影格</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">刪除</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">移除重複</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">減少&#10;影格數</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">Smooth&#x0d;Loop</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">刪除前面所有影格</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">刪除後面所有影格</s:String>\n\n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">錄影</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">反轉</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">反轉循環（Yoyo 循環）</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">移動到&#10;左側</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">移動到&#10;右側</s:String>\n\n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">延遲（持續期間）</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">覆寫</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">增加或&#10;減少</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">縮放</s:String>\n\n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">大小和位置</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">調整大小</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">裁減</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">翻轉/旋轉</s:String>\n\n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">文字</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">標題</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">輸入文字</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">標題影格</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">鍵盤</s:String>\n\n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">覆蓋</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">自由&#10;繪圖</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">形狀</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">Mouse&#x0d;Events</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">浮水印</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">動畫圖片</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">邊框</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">陰影</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">進度</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">效果</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">樣式</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">淡出</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">滑動</s:String>\n\n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">通用</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">總影格數</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">總持續期間</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">影格大小</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">平均持續期間（延遲）</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">目前時間</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">基於目前正在顯示的影格的累積時間</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">影格 DPI 和縮放</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">所選影格</s:String>\n\n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">剪下動作</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">您無法剪下所有影格</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">錄影至少需要一個影格</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">全部刪除</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">您確定要刪除所有影格嗎？</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">此操作將放棄目前已打開的專案且無法還原。要繼續嗎？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">捨棄專案</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">您確定要捨棄專案嗎？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">您正試著移除所有影格。&#10;您無法還原此項操作。</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">您要捨棄以前的專案嗎？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">如果您選擇保留，以前的專案將可在\"最近的專案\"中打開。</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">刪除影格</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">您確定要刪除嗎？</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">此操作將刪除 {0} 影格。&#10;您可以稍後還原。</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">退出編輯器</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">您確定要退出嗎？</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">您正在處理的專案可以在\"最近的專案\"中再次打開。</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">您正在處理的專案可以在\"最近的專案\"中再次打開，但別忘了，它將會在幾日後被自動刪除。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">無效的拖放</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">您無法一次同時匯入多個檔</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">試著只選擇一個檔案。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">無法讀取檔案</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">由於格式無效，無法讀取該檔案。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">您無法一次同時匯入多個專案</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">試著只選擇一個專案。</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">沒有文字可套用。</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">您必須至少選擇一個影格來套用標題。</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">您必須至少選擇一個影格來套用文字。</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">您必須至少選擇一個影格來套用標題影格文字。</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">您必須告知至少一邊邊框大於零的粗細。</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">您必須至少選擇一個影格來套用邊框。</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">不透明度必須大於零，以使邊框有所不同。</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">如使用陰影深度和模糊半徑設為零時，不會有任何區別，因為它會隱藏在邊框的後面。</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">您必須至少選擇一個像素來套用動畫圖片。透過在它們上面繪圖來選擇像素。</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">淡出轉場</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">您必須至少選擇一個影格來套用淡出轉場。</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">完全透明的顏色不會對此過渡產生任何影響。</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">滑動轉場</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">您必須至少選擇一個影格來套用滑動轉場。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">正在載入影格</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">無法載入專案</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">無法載入這些影格，因其已經損壞或圖片不在預期位置。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">無法載入某些影格</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">無法載入這些影格，因其無法被找到或已損壞。</s:String>\n\n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">您必須選擇至少一個影格來執行覆蓋。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">FFmpeg 不存在。將其加入至 Path 環境變數或在選項中設定好路徑。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">Gifski 不存在。將其加入至 Path 環境變數或在選項中設定好路徑。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">磁碟機上沒有足夠的空間供應用程式儲存快取（剩餘 {0}% ）。點擊此處打開 [選項 > 暫存檔]，以釋放一些空間。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">不支援匯入多張不同 DPI 的圖片。部分已匯入成功，其他則需分別匯入。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">不支援匯入多張不同尺寸的圖片。某些圖片已被匯入，其他則須分別匯入。</s:String>\n\n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">正在從快取中取得影格</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">正在更新影格</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">正在準備匯入</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">正在匯入影格</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">正在分析重複項</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">調整延遲</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">捨棄重複項</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">正在捨棄影格</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">正在捨棄資料夾</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">正在調整影格大小</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">裁減影格</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">正在套用重疊物件到影格</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">正在建立標題影格</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">正在套用翻轉/旋轉到影格</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">正在變更延遲</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">正在套用轉場效果</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">正在準備儲存</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">取消讀取並捨棄專案</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">正在尋找完美循環</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">正在丟棄循環未使用的影格</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">影格：</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">開啟圖片</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">瀏覽資料夾</s:String>\n\n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">移至影格</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">移至影格（0 到 {0}）</s:String>\n\n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">另存成</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">移除所選影格</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">新增錄影</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">新增網路攝影機錄影</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">新增畫面錄製專案</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">新增空白專案</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">從媒體或專案新增</s:String>\n\n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">新錄影已建立</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">新網路攝影機錄影已建立</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">新繪圖板錄影已建立</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">新專案已建立</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">復原執行</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">重設執行</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">重做執行</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">{0} 個影格剪下</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">{0} 個影格已複製</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">{0} 個影格已貼上</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">縮放設定為 {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">選擇全部影格</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">影格 #{0} 已選</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">反向選擇</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">取消選擇了所有影格</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">{0} 個影格被刪除</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">影格清單已反轉</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">套用反轉循環特效</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">影格向左移動</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">影格向右移動</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">影格重新調整大小</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">影格裁減</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">影格翻轉/旋轉</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">翻轉動作套用到所選影格以及旋轉套用到所有影格</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">此動作套用到全部影格</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">此動作套用到所選影格</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">此動作將套用於所有或選定的影格，具體取決於您的設定</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">影片套用到第一影格為主的的所有影格</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">重疊已套用</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">標題影格建立</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">標題影格將插入到所選影格之前</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">持續時間（延遲）已變更</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">轉場已插入</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">影格率減少</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">重複已被移除</s:String>\n\n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">隱藏</s:String>\n    <s:String x:Key=\"S.Action.Apply\">套用</s:String>\n    <s:String x:Key=\"S.Action.Open\">開啟</s:String>\n    <s:String x:Key=\"S.Action.Save\">儲存</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">取消</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">最近使用的專案</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">正在尋找最近使用的專案...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">建立日期</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">影格計數</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">沒有選擇專案。選擇清單的專案來載入。</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">該專案已在目前編輯器中顯示。</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">該專案已由另一個編輯器實例打開。如果專案已在另一個編輯器上打開，則無法再次打開該專案。</s:String>\n\n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">剪貼簿項目</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">剪貼簿項目：</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} 張圖片</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} 張圖片</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">瀏覽內容</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">移除</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">貼上行為</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">在所選影格之前</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">在所選影格之後</s:String>\n\n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">差</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">Dpi</s:String>\n    <s:String x:Key=\"S.Resize.Options\">選項</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">像素（px）</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">百分比（%）</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI：</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">保持長寬比</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">縮放品質：</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">Fant（高品質）</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">線性（低品質）</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">最鄰近（低品質且較快）</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">縮放品質</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">您必須選擇不同的值來套用調整大小動作。</s:String>\n\n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">點</s:String>\n    <s:String x:Key=\"S.Crop.Top\">上：</s:String>\n    <s:String x:Key=\"S.Crop.Left\">左：</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">下：</s:String>\n    <s:String x:Key=\"S.Crop.Right\">右：</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">裁減選取範圍必須小於目前影格大小。</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">裁減選取範圍必須大於 10x10 像素。</s:String>\n\n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">水平翻轉</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">垂直翻轉</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">向左旋轉 90 度</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">向右旋轉 90 度</s:String>\n\n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">減少影格率</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">移除比例：</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">移除計數：</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">延遲調整：</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">不調整</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">與前一影格相加</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">與其餘影格平均相加</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">降低整個專案的影格率</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">如果未啟用此選項，則必須選擇多個連續影格，且大於移除比例。</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">它將在每隔 {1} 影格之後刪除 {0} 影格，而不計算刪除的影格。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">您必須選擇要套用影格率降低的影格（或選擇要套用於整個專案的選項）。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">選擇的影格列表必須是連續的。您不能在選定的影格中留下一些未選擇的影格。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">為了使此功能可以刪除掉多餘影格，選中的影格數量必須大於移除比例。</s:String>\n\n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">刪除重複項</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">相似度 (%)：</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">影格刪除：</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">刪除第一影格</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">刪除最後影格</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">延遲調整：</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">不調整</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">使用平均值</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">使用總和</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">此操作會分析每個影格（逐像素），並刪除至少為 {0}% 的類似於其最近鄰的影格。 &#10;您可以選擇是否要調整影格的延遲（顯示持續時間）。</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">建立平滑循環</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">忽略首個：</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">比對對象：</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">結束</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">開始</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">嘗試尋找至少與開頭影格 {0} % 相似的影格，並刪除後續影格。&#x0d;您可以選擇是否要忽略開頭的部分影格並從開頭 (在臨界值之後) 或結尾開始比對。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">要忽略的影格數必須小於總影格數。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">無法以所選設定建立平滑循環。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">您已以所選設定建立平滑循環。</s:String>\n\n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">文字</s:String>\n    <s:String x:Key=\"S.Caption.Font\">字型</s:String>\n    <s:String x:Key=\"S.Caption.Family\">系列：</s:String>\n    <s:String x:Key=\"S.Caption.Style\">樣式：</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">粗細：</s:String>\n    <s:String x:Key=\"S.Caption.Size\">大小：</s:String>\n    <s:String x:Key=\"S.Caption.Color\">顏色：</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">背景顏色：</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">外框</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">粗細：</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">配置</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">垂直：</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">水平：</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">對齊方式：</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">文字修飾：</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">按鍵展示</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">按鍵</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">間隔</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">編輯您的按鍵展示</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">忽略 Ctrl、Alt、Shift 和 Windows 鍵，而不將其用作修飾鍵。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">它將忽略諸如 \"Control\" 這樣單獨的按鍵，但它不會忽略 \"Control + C\"。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">忽略軟體模擬的按鍵。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">僅紀錄使用者實際輸入的按鍵。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">延伸按鍵展示時間：</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">提前開始展示按鍵文字。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">依(毫秒)：</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">您的錄影上沒有按鍵動作</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - 按鍵展示編輯器</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">影格數</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">偵測到按鍵展示</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">移除按鍵展示</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">加入一個按鍵展示</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">小寫字母</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">它使您可以輸入小寫字母。</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">模式</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">筆</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">橡皮擦</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">選擇</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">筆劃橡皮擦</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">寬度：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">高度：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">提示：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">矩形</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">橢圓形</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">其它：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">螢光筆</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">適合曲線</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">沒有繪圖套用到您所選的影格</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">您必須至少選擇一個影格來套用自由繪圖</s:String>\n\n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">插入</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">形狀</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">半徑：</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">破折號：</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">控制破折號的大小及間隙的大小。&#10;您可以設定多組大小來微調破折號樣式。&#10;預設值為 \"1 0\" 或留空，表示沒有間隙的破折號。</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">重設旋轉</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">移除</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">填充</s:String>\n\n    <!--Editor • Mouse clicks-->\n    <s:String x:Key=\"S.MouseEvents\">滑鼠點擊</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">左鍵顏色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">中鍵顏色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">右鍵顏色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Warning.None\">您的專案沒有偵測到滑鼠點擊。</s:String>\n\n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">圖片</s:String>\n    <s:String x:Key=\"S.Watermark.File\">檔案：</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">未選擇</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">不透明度：</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">選擇圖片</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">您必須選擇一個圖片來套用所選的影格。</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">您必須至少選擇一個影格來套用浮水印。</s:String>\n\n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">外觀</s:String>\n    <s:String x:Key=\"S.Border.Info\">使用負值使邊框擴大圖片。這樣做時，邊框將套用於所有影格。</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">陰影顏色：</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">背景顏色：</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">方向：</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">模糊半徑：</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">深度：</s:String>\n\n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">像素化</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">模糊化</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">調暗</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">調亮</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">效果選項</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">像素大小：</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">模糊等級：</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">調暗等級：</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">調亮等級：</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">計算每個像素塊的平均顏色。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">套用效果在未選擇的區域。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">柔化</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">使用選擇工具選擇需套用效果的矩形區域。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">使用選擇工具選擇不需套用效果的矩形區域。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">您沒有選擇任何區域。請使用選擇工具選擇需套用效果的矩形區域。</s:String>\n\n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">類型</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">進度列</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">文字</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">精確度：</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">分</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">秒</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">毫秒</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">百分比</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">影格數</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">實際日期/時間</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">自訂</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">顯示總數</s:String>\n    <s:String x:Key=\"S.Progress.Format\">格式：</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">格式</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = 毫秒數</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = 秒數</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = 分鐘數</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = 百分比</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = 影格數</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">總數：</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">範例：</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">您可以使用 .Net Framework 中的日期和時間格式。 &#10;該規範可在下面的兩個連結中找到。</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">標準格式</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">自訂格式</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">從字數：</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">從該所選編號開始計數影格編號</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">方向：</s:String>\n\n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">延遲更新</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">延遲模式：</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">覆蓋（毫秒）</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">增加或減少（毫秒）</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">縮放（%）</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">新值</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">每影格最少 10 毫秒</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">減少/增加值</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">縮放值</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">此新值將取代所有選定影格的持續時間（延遲）。該值可以從 10ms 到 25500ms。</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">該值將減少/增加每個所選影格的持續時間（延遲）。&#10;您可以透過選擇 -10000 和 10000ms 之間的值進行遞減/遞增，但每影格的最終持續時間將限制在 10ms 到 25500ms 之間。</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">通過百分比值縮放每個選定影格的持續時間（延遲）。&#10;您可以通過在 1％ 和 1000％ 之間選擇一個值來縮放每個影格的持續時間，但每個影格的最終持續時間將限制在 10ms 到 25500ms 之間。</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">使用筆選擇不應該保持靜態的像素（應該在影格之間變更），透過在其上繪畫。</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">轉場長度</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">轉換延遲</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">淡入...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">下一影格</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">顏色</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">顏色</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">轉場將套用到所選影格與下一影格之間。</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">檔案類型</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">輸出檔案格式。</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">輸出預置設定包含所有目前顯示的設定。&#10;通過下面的按鈕管理您的輸出預置設定。</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">動畫圖片</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">影片</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">影格</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">其他</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">動態可移植網路圖形</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">Gif</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">圖像互換格式</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">WebP</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web 圖片</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Avi\">Avi</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">音訊影片交錯格式</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">Mkv</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">Mov</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime 檔案格式</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">Mp4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">WebM</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web 影片</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Bmp\">Bmp</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">Bitmap</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">Jpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">聯合圖像專家小組</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">Png</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">可攜式網路圖形</s:String>\n\n    <s:String x:Key=\"S.SaveAs.Project\">專案</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif 專案</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD 檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop 檔案</s:String>\n\n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">預設：</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">預設值</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">添加</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">儲存</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">編輯</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">移除</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">重置</s:String>\n\n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">刪除預置設定</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">您確定要刪除此預置設定嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">此操作無法撤消。&#10;&#10;是否要刪除所選預置設定？</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">重置預置設定</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">您確定要重置預置設定嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">此操作無法撤消。&#10;&#10;是否要將所選預置設定重置回預設？</s:String>\n\n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">編碼器</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">編碼器和量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">編碼器負責產生輸出檔案。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">內建編碼器</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF Encoder.</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">系統</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">由系統提供的編碼器</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">外部編碼器，由 FFmpeg.org 開發。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">外部編碼器，由 Gif.ski 開發。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">編碼器設定</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">啟用進階模式</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">手動輸入編碼器的參數。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">參數：</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">將傳送給 FFmpeg 的參數。&#10;&#10;特殊參數：&#10;{I} 是輸入路徑（影格）。&#10;{O} 是輸出路徑（要輸出的檔案）。&#10;{W} 是影格寬度。&#10;{H} 是影格高度。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">要使用 2-pass 編碼，只需加入 \"-pass 2\" 參數即可。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">預覽</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">預覽將傳送給 FFmpeg 的參數列表。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">編解碼器檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">格式檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">濾鏡檔案</s:String>\n\n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif 選項</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">色彩減色演算法（量化）</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">神經網路</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">高保真量化，較慢，但適合顏色數量多的影像。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">Octree</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">適用於顏色較少的動畫，較快，但可能產生色帶。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">中位切割演算法</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">不如 Octree 好，且速度較慢。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">灰階化</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">使用固定的灰階調色盤，速度較快。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">最常用的顏色</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">只取影格中最常用的顏色。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">取樣：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">取樣值:&#10;值為 1 時會產生畫質比較好的 gif，但渲染速度會比較慢。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">品質：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">顏色：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">最大顏色數（每影格）</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">使用全域色表</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">可能會降低 gif 的品質或/和大小</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">最佳</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">最快</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">使用更快的編碼過程。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">可能會降低 gif 的品質。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">循環：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">Gif 循環</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">永遠循環</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">次循環</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">啟用透明度</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">啟用完全透明模式，這會使 gif 的背景完全透明。&#10;如果啟用此選項，則色鍵替換過程將被忽略。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">選擇要顯示為透明的顏色</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">如果選擇了一種顏色，則它將被轉換為透明色，產生的 gif 將顯示為透明。&#10;如果未選擇顯色，所有透明顏色（不透明度 = 0%）將正常顯示為透明。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">偵測未變化的像素</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">通過分析和偵測影格之間未變化的像素，可以只保留必要的部分到 gif 中。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">使用色鍵取代像素</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">重複/不變的像素將被此色鍵取代，進而減少每影格使用的顏色數量。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">色鍵：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">抖動：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">拜耳縮放：</s:String>\n\n<!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">背景顏色：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">被所選量化器視為不透明的具透明度的像素將在獲得量化色彩前與此顏色混合。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">透明度臨界值：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">決定輸入的透明度值，小於該值在量化後將變成透明。&#x0d;&#x0a;若設為 0，結果將不會有透明度。&#x0d;&#x0a;若設為 255，則只有完全透明的像素會被視為透明。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">白色臨界值：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">決定將結果顏色視為白色的最大輸入亮度。&#x0d;&#x0a;此選項將影響亮度。但誤差擴散抖動可能可以補償此參數的數值。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">直接對應</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">勾選後，量化後的色彩將由直接對應決定，而非查詢鄰近的調色盤色階。&#x0d;&#x0a;此選項將加快量化速度，但可能會使對比度提高。但誤差擴散抖動可能可以補償此參數的數值。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">調色盤大小：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">決定每一影格調色盤的最大大小。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">自訂位元層級。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">勾選後可手動設定位元層級。&#x0d;&#x0a;⚠️ 警告：最高級的位元層級將需要大量記憶體！</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">數值越高表示精確度越高，目標色彩空間越大，處理速度越慢，且記憶體用量越大。&#x0d;&#x0a;以 1 為例，則結果的色彩數量不得超過 8，若為 2，則不得超過 64。&#x0d;&#x0a;對於 Octree 和 Wu 量化器，此數值還會影響單色色階的最大數量。&#x0d;&#x0a;以 5 為例 (Wu 量化器的預設值)，則只能區分 32 種單色色階。&#x0d;&#x0a;⚠️ 警告：Wu 量化器的最大值至少需要 650 MB 的記憶體。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">黑白</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">帶有黑白兩色的固定 1 bpp 調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">灰階 4 色</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">帶有 4 個灰階色階的固定 2 bpp 調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">灰階 16 色</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">帶有 16 個灰階色階的固定 2 bpp 調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">灰階 256 色</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">帶有 256 個灰階色階的固定 8 bpp 調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">系統預設 4 bpp 調色盤</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">使用標準 16 sRGB 色彩的固定 4 bpp 調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">系統預設 8 bpp 調色盤</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">固定的 8 bpp 調色盤，包含 'web-safe' 色彩與透明度。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 調色盤</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">使用 RGB 332 色彩空間的固定 8 bpp 調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">Octree 量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">使用 Octree 演算法來最佳化每一影格的調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">中位切割量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">使用中位切割演算法來最佳化每一影格的調色盤。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">Wu 量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">使用 Xiaolin Wu 的演算法來最佳化每一影格的調色盤。</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">抖動器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">強度：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">抖動器的強度，設為 0 將自動校正強度。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">種子：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">用於產生指定隨機抖動樣式的整數種子。&#x0d;&#x0a;留空則每一影格會使用隨機種子。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">無</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">影格將不經抖動處理，直接量化。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">蛇行處理</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">When checked, the error propagation direction is altered from line to line.&#x0d;&#x0a;此選項將有助於減少誤差擴散抖動造成的漣漪效果。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">拜耳 2x2 (有序)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">2x2 拜耳陣列圖案。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">拜耳 3x3 (有序)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">3x3 拜耳陣列圖案。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">拜耳 4x4 (有序)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">4x4 拜耳陣列圖案。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">拜耳 8x8 (有序)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">8x8 拜耳陣列圖案。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">Dotted Halftone (有序)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">A 8x8 matrix with a dotted halftone pattern.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">藍噪音 (有序)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">帶有藍噪音樣式的 64x64 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson's 4x3 matrix with 6 effective values.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes 的 5x2 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">由 Floyd 和 Steinberg 發明的原始 3x2 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Jarvis、Judice 和 Ninke 發明的 5x3 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3 (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra 的 5x3 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2 (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra 的 5x2 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra 的 3x2 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Stevenson 和 Arce 發明的 7x4 六邊形陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki (誤差擴散)</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki 的 5x3 陣列。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">隨機噪音</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">隨機白噪音。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">交錯式梯度噪音</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">由公式產生的非隨機梯度噪音。</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">預覽</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">顯示目前影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">勾選後，預覽將顯示目前影格，而非標準圖片範例。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">由於目前設定所需的記憶體過高，自動預覽已被停用。點擊以重新整理預覽。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">無法產生預覽：{0}&#x0d;&#x0a;點擊以重試。</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">動畫設定</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">無限循環。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">勾選後，動畫將無限循環。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">往返。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">When checked, the animation will be played back and forth.&#x0d;&#x0a;This is achieved by duplicating the frames meaning larger file size and longer encoding time.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">重複次數：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">指定動畫的播放次數。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">允許變化影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">勾選後，將嘗試在編碼時偵測無變化的像素。&#x0d;&#x0a;與最佳化量化器搭配使用時，此選項可使影格色彩數超過 256。&#x0d;&#x0a;若量化器未使用透明度，且允許被裁剪的影格未啟用，此選項將被忽略。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">變化量容許度：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">指定偵測像素變化的最大容許度。&#x0d;&#x0a;若設為 0，將不會容許任何變化。&#x0d;&#x0a;若設為 255，則可能會有無內容的影格 (甚至所有影格) 被加入。&#x0d;&#x0a;搭配最佳化的量化器時，合理範圍為 0 至 16。有固定顏色的則可以透過抖動使用較大的數值。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">若變化量容許度過高，結果的品質可能會較差。點擊以重設變化量容許度。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">允許被裁剪的影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">When checked, the encoder is allowed to add smaller frames than the actual resolution.&#x0d;&#x0a;If Allow Delta Frames is unchecked, then allows only clipping possible transparent borders.</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">由於目前設定未使用透明度，且允許被裁剪的影格未啟用，故允許變化影格已被忽略。點擊以啟用被裁剪的影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">由於目前設定未使用透明度，且允許變化影格未啟用，故允許被裁剪的影格無效。點擊以啟用變化影格。</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng 選項</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">預測：</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">無</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">Sub</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">Up</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">平均</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">混合</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">循環 Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">偵測不變的像素</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">將所有未變化的像素畫為透明色</s:String>\n\n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">預置設定：</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">無</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">預設</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">圖片</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">照片</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">繪圖</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">圖示</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">文字</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">使用無損模式。</s:String>\n\n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">正常</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">進階</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">設定編碼器參數的方式&#10;正常：使用標準 UI 元件。&#10;進階：使用文字框輸入參數。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">編碼器：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">影片編碼器，負責將原始像素轉換為輸出檔案。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">預置設定：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">無</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">非常慢</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">較慢</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">慢</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">中等</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">較快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">非常快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">超快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">超級快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">品質</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">平衡</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">速度</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">預設</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">無損</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">無損（高效能）</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">高效能</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">高品質</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">藍光光碟</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">低延遲</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">低延遲（高效能）</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">低延遲（高品質）</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">編碼速度與壓縮率之比率，較慢的預置設定可能會有較佳的壓縮率（每個檔案大小的品質）。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">硬體加速：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">關閉</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">開啟</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">自動選擇</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">控制使用專用硬體（顯示卡）。&#10;關閉：不使用專用硬體。&#10;開啟：當可使用時，使用專用硬體並自動選擇正確的編碼器。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">像素格式：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">自動</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">垂直同步：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">影片同步方法。&#10;自動：根據多工器（格式）功能在 1 和 2 之間選擇。&#10;直通：將每一個影格的時戳傳送給編碼器。&#10;固定：影格將會用複製及丟棄的方式來達成指定的影格率。&#10;可變：影格將會使用自己的時戳或丟棄來避免兩個影格有相同的時戳。&#10;丟棄：與直通模式一樣，但會捨棄所有的時戳，讓編碼器根據影格率產生新的時戳。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">直通</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">固定影格率</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">可變影格率</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">丟棄</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">影格率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">電影</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">自訂</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">編碼次數</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">不變速率因子。&#10;品質和位元率控制設定。&#10;如果您不希望設定此屬性，請留空或設為 0。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">品質等級：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">值越小品質越好。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">位元率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">目標影片位元率。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">位元率模式：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">不變</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">可變</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">最小位元率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">最大位元率容限。&#10;最適合用於 CBR 模式。&#10;如果您不希望設定此屬性，請留空或設為 0。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">最大位元率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">最大位元率容限。&#10;需同時設定緩衝區大小。&#10;如果您不希望設定此屬性，請留空或設為 0。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">緩衝大小：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">位元率調整使用的緩衝區大小。&#10;如果您不希望設定此屬性，請留空或設為 0。</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">壓縮圖片</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">輸出壓縮後資料夾中的圖片</s:String>\n\n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">壓縮圖片</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">使用 RLE 算法壓縮圖片資料。</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">保存時間軸資料</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">輸出影格的時間，而不僅僅是影格。</s:String>\n\n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">儲存選項</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">部分輸出。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">將檔案儲存到您選擇的資料夾</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">要覆蓋嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">警告</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">僅在有相同名稱的檔案時警告。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">提示</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">詢問使用者是否要覆蓋檔案。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">允許</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">直接覆蓋檔案。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">同時另存為專案（相同資料夾與檔案名）</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">上傳檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">複製到剪貼簿</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">將輸出檔案複製到剪貼簿</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">資料夾路徑</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">將輸出檔案的資料夾路徑複製到剪貼簿</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">檔案路徑</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">將輸出檔案路徑複製到剪貼簿</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">連結</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">將上傳服務產生的連結複製到剪貼簿</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">執行編碼後置指令</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">輸入在編碼後執行的指令。&#10;若要執行多條指令，請在不同行內輸入不同指令，一行輸入一條。&#10;巨集:&#10;{p} = 輸出檔案路徑。&#10;{f} = 輸出資料夾路徑。&#x0d;{u} = 檔案上傳後的路徑.</s:String>\n\n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">部份輸出</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">選擇部份輸出方式。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">表達式</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">依據一個簡易的表達式來輸出部份動畫。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">影格範圍</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">輸出指定影格範圍中的一部份動畫。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">時間範圍</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">輸出指定時間範圍中的部份動畫</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">選擇</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">僅輸出時間軸中所選擇的影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">未選擇影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">已選擇 1 個影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">已選擇 {0} 個影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">從：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">至：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">表達式：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">輸入以逗號分隔的影格編號或以減號分隔的影格序列：&#10;1, 3, 4, 6 - 9。</s:String>\n\n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">目的資料夾</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">選擇輸出資料夾</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">選擇位置</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">格式</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">檔案名稱。在 '?' 間插入時間/日期格式</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">動畫</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">增加檔案數量</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">減少檔案數量</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">同名檔案已經存在</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">儲存到剪貼簿</s:String>\n\n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">您需要選擇保存檔案的位置（資料夾、剪貼簿或上傳到某處）</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">您尚未選擇副檔名。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">使用進階模式時，您必需在參數欄位中輸入參數。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">參數欄位中缺少特殊參數 {I}（輸入）且/或 {O}（輸出）。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">您需要在指令框中輸入編碼後置指令才能執行他們</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">當設定為輸出選擇中的影格時，您必需至少選擇一個影格。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">部分輸出的表達式無效。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">沒有選擇上傳服務。您需要選擇一個目的地</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">您無法上傳到選定的服務，因為它沒有被授權。轉到選項>雲端服務授權此應用程式</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">您不能選擇複製連結的選項，因為您沒有設定上傳檔案</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">您必須選擇輸出資料夾</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">輸出資料夾不存在</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">輸出資料夾包含一個或多個無效字符。請選擇一個有效的資料夾</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">您必須輸入檔案名稱</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">輸出檔案名包含一個或多個無效字元。請選擇有效的檔案名</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">檔案名稱已使用。設定為覆蓋或選擇另一個檔名或資料夾。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">已有相同檔名的專案。設定為覆蓋或選擇另一個檔名或資料夾。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">操作已取消</s:String>\n\n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">上傳</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">選擇上傳預置設定，其中包含有關用於上傳的服務的詳細資訊。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">此上傳服務增加限制。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">新增上傳預置設定</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">編輯上傳預置設定。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">查看此預置設定的上傳記錄。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">移除目前所選擇的上傳預置設定</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">選擇一個上傳預置設定</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">從此列表中選擇一項。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">沒有適用於此格式的上傳預置設定。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">使用下面按鈕新增預置設定。</s:String>\n\n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">刪除上傳預置設定</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">您確定要刪除上傳預置設定嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">此操作無法撤消。&#10;&#10;您要刪除所選擇的上傳預置設定嗎？</s:String>\n\n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">匯出影格</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">您確定要匯出這些影格嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">此操作將直接匯出 {0} 個影格到所選資料夾中</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">覆蓋</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">您要覆蓋檔案嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">名稱為 '{0}' 的檔案已存在於該資料夾。\\r\\n您要覆蓋嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">您要覆蓋檔案嗎？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">一個以上有相同名稱的檔案已存在於該資料夾。\\r\\n您要覆蓋嗎？</s:String>\n\n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">命令預覽</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">命令</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">輸入路徑</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">輸出路徑</s:String>\n\n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">意見反應</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">傳送</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">預覽</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">傳送意見</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">標題</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">訊息</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">如果您遇到錯誤，請別忘了一步一步地向我解釋如何出現錯誤的原因。</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">意見反應類型</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">建議</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">問題/錯誤</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">您的電子郵件（選填）</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">您需要輸入意見反應標題。</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">您需要在意見反應中輸入訊息。</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">您需要輸入電子郵件，以接收開發人員的回覆。</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">正在背景傳送。此視窗將自動關閉。</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">附件（選填，最大 20MB）</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">加入附件</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">移除所有附件</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">我可以理解英語</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">和葡萄牙語（巴西和歐洲）。</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">這是您要寄送的內容，以及所有附件。</s:String>\n\n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">疑難解答</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">是否有任何視窗不見了？</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">如果缺少任何視窗（螢幕外），&#10;使用下面的選項重置其目前及啟動位置。</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">這是每個視窗目前所在的位置：</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">以下是每個視窗下次打開的位置：</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">將所有視窗移動到主螢幕</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">重置所有視窗的啟動位置</s:String>\n\n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">正常</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">斜體</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">傾斜</s:String>\n\n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">黑</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">粗</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">微粗</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">特黑</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">特粗</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">特細</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">粗</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">細</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">中</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">正常</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">一般</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">半粗</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">細</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">超黑</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">超粗</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">超細</s:String>\n\n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">上</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">置中</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">下</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">延展</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">左</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">置中</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">右</s:String>\n\n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">水平</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">垂直</s:String>\n\n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">靠左</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">靠右</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">置中</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">對齊</s:String>\n\n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">無</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">下劃線</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">刪除線</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">上劃線</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">底線</s:String>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Localization/StringResources.zh.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xml:space=\"preserve\">\n    \n    <!--To use a new line: &#x0d; or CarriageReturn + NewLine: &#x0d;&#x0a; or &#10;--> \n    <!--You can use the zero-width-divider to suggest where the word should be divided when there's no space &#8203;-->\n    <!--Special texts like {0}, are place holders for dynamic values, such as numbers.-->\n    \n    <!--General-->\n    <s:String x:Key=\"S.Ok\">确定</s:String>\n    <s:String x:Key=\"S.Back\">返回</s:String>\n    <s:String x:Key=\"S.Cancel\">取消</s:String>\n    <s:String x:Key=\"S.Yes\">是</s:String>\n    <s:String x:Key=\"S.No\">否</s:String>\n    <s:String x:Key=\"S.Add\">添加</s:String>\n    <s:String x:Key=\"S.Edit\">编辑</s:String>\n    <s:String x:Key=\"S.Id\">标识</s:String>\n    <s:String x:Key=\"S.Title\">标题</s:String>\n    <s:String x:Key=\"S.Description\">描述</s:String>\n    <s:String x:Key=\"S.SelectColor\">单击此处选择颜色。</s:String>\n    <s:String x:Key=\"S.Documentation\">单击以浏览到文档。</s:String>\n    <s:String x:Key=\"S.Suppress\">隐藏</s:String>\n    <s:String x:Key=\"S.Preview\">预览</s:String>\n    <s:String x:Key=\"S.Size\">大小</s:String>\n    <s:String x:Key=\"S.Background\">背景</s:String>\n    <s:String x:Key=\"S.Color\">颜色：</s:String>\n    <s:String x:Key=\"S.Delay\">延时</s:String>\n    <s:String x:Key=\"S.DelayMs\">延时 (ms)：</s:String>\n    <s:String x:Key=\"S.ValueMs\">值 -+ (ms)：</s:String>\n    <s:String x:Key=\"S.ScaleValue\">比例值：</s:String>\n    <s:String x:Key=\"S.Margin\">边距：</s:String>\n    <s:String x:Key=\"S.Padding\">填充：</s:String>\n    <s:String x:Key=\"S.MinHeight\">最小高度：</s:String>\n    <s:String x:Key=\"S.AndOr\">和/或</s:String>\n    \n    <!--Warnings-->\n    <s:String x:Key=\"S.Crash\">哦，不，应用程序崩溃了 :(</s:String>\n    <s:String x:Key=\"S.Required\">必填字段</s:String>\n    <s:String x:Key=\"S.Warning.Net.Title\">缺少依赖项</s:String>\n    <s:String x:Key=\"S.Warning.Net.Header\">Net Framework 4.8 不存在</s:String>\n    <s:String x:Key=\"S.Warning.Net.Message\">为了正确使用此应用程序，您需要下载正确版本的 .Net Framework。&#10;您要打开网页进行下载吗？</s:String>\n    <s:String x:Key=\"S.Warning.Single.Title\">仅允许一个实例</s:String>\n    <s:String x:Key=\"S.Warning.Single.Header\">该应用程序已在运行</s:String>\n    <s:String x:Key=\"S.Warning.Single.Message\">ScreenToGif 已经在运行，但显然没有打开任何窗口。检查系统托盘，其中一定有一个 ScreenToGif 图标。</s:String>\n    \n    <s:String x:Key=\"S.SavingSettings.Title\">保存设置</s:String>\n    <s:String x:Key=\"S.SavingSettings.Instruction\">您想再次尝试保存它吗？</s:String>\n    <s:String x:Key=\"S.SavingSettings.Message\">ScreenToGif 似乎没有足够的特权将设置保存到磁盘。&#10;&#10;您想以管理员权限重试一次吗？</s:String>\n    \n    <s:String x:Key=\"S.Exiting.Title\">退出 ScreenToGif</s:String>\n    <s:String x:Key=\"S.Exiting.Instruction\">您确定要退出吗？</s:String>\n    <s:String x:Key=\"S.Exiting.Message\">所有窗口将被关闭，托盘图标将被移除。</s:String>\n\n    <!--Warnings • Graphics engine-->\n    <s:String x:Key=\"S.Warning.Graphics.Title\">切换图形适配器</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Instruction\">切换到正确的图形适配器，以捕获所选的屏幕</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Message\">由于 DirectX 的限制，ScreenToGif 必须与被捕获的屏幕在同一个图形适配器上运行。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action\">打开 Windows 设置 > 系统 > 显示 > 图形设置，或点击下面的链接，为 ScreenToGif 切换图形适配器设置。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Action.Legacy\">打开您的图形适配器的图形设置，为ScreenToGif切换图形适配器。</s:String>\n    <s:String x:Key=\"S.Warning.Graphics.Switch\">打开 Windows 设置</s:String>\n    \n    <!--Keys-->\n    <s:String x:Key=\"S.Keys.Enter\">回车键</s:String>\n    <s:String x:Key=\"S.Keys.Esc\">Esc 键</s:String>\n    <s:String x:Key=\"S.Keys.Space\">空格键</s:String>\n\n    <!--Mouse-->\n    <s:String x:Key=\"S.Mouse.Right\">右键单击</s:String>\n    \n    <!--Tray icon-->\n    <s:String x:Key=\"S.NewRecording\">新建屏幕录制</s:String>\n    <s:String x:Key=\"S.NewWebcamRecording\">新建摄像头录制</s:String>\n    <s:String x:Key=\"S.NewBoardRecording\">新建画板录制</s:String>\n    <s:String x:Key=\"S.Exit\">退出</s:String>\n    \n    <!--Commands-->\n    <s:String x:Key=\"S.Command.NewRecording\">新建屏幕录制</s:String>\n    <s:String x:Key=\"S.Command.NewWebcamRecording\">新建摄像头录制</s:String>\n    <s:String x:Key=\"S.Command.NewBoardRecording\">新建白板录制</s:String>\n    <s:String x:Key=\"S.Command.NewAnimation\">新建动画</s:String>\n    <s:String x:Key=\"S.Command.InsertRecording\">插入屏幕录制</s:String>\n    <s:String x:Key=\"S.Command.InsertWebcamRecording\">插入摄像头录制</s:String>\n    <s:String x:Key=\"S.Command.InsertBoardRecording\">插入白板录制</s:String>\n    <s:String x:Key=\"S.Command.InsertFromMedia\">从媒体插入（图像和视频）</s:String>\n    <s:String x:Key=\"S.Command.SaveAs\">另存为...</s:String>\n    <s:String x:Key=\"S.Command.Load\">加载文件（图像、视频和项目）</s:String>\n    <s:String x:Key=\"S.Command.LoadRecent\">加载最近的项目</s:String>\n    <s:String x:Key=\"S.Command.DiscardProject\">放弃当前项目</s:String>\n    <s:String x:Key=\"S.Command.OverrideDelay\">覆盖帧延迟</s:String>\n    <s:String x:Key=\"S.Command.IncreaseDecreaseDelay\">增加/减少帧延迟</s:String>\n    <s:String x:Key=\"S.Command.ScaleDelay\">帧缩放延迟</s:String>\n    <s:String x:Key=\"S.Command.Zoom100\">设置缩放到 100%</s:String>\n    <s:String x:Key=\"S.Command.SizeToContent\">调整窗口到帧大小</s:String>\n    <s:String x:Key=\"S.Command.FitImage\">使图像适合可用的窗口大小</s:String>\n    <s:String x:Key=\"S.Command.FirstFrame\">选择第一帧</s:String>\n    <s:String x:Key=\"S.Command.PreviousFrame\">选择上一帧</s:String>\n    <s:String x:Key=\"S.Command.Play\">播放动画</s:String>\n    <s:String x:Key=\"S.Command.NextFrame\">选择下一帧</s:String>\n    <s:String x:Key=\"S.Command.LastFrame\">选择最后一帧</s:String>\n    <s:String x:Key=\"S.Command.Undo\">撤消</s:String>\n    <s:String x:Key=\"S.Command.Redo\">重做</s:String>\n    <s:String x:Key=\"S.Command.Reset\">撤消项目中的所有更改</s:String>\n    <s:String x:Key=\"S.Command.Copy\">复制所选帧并将其存储在剪贴板中</s:String>\n    <s:String x:Key=\"S.Command.Cut\">剪切所选帧并将其存储在剪贴板中</s:String>\n    <s:String x:Key=\"S.Command.Paste\">从剪贴板粘贴帧</s:String>\n    <s:String x:Key=\"S.Command.Delete\">删除所选帧</s:String>\n    <s:String x:Key=\"S.Command.DeletePrevious\">删除所有上一帧</s:String>\n    <s:String x:Key=\"S.Command.DeleteNext\">删除所有下一帧</s:String>\n    <s:String x:Key=\"S.Command.RemoveDuplicates\">删除重复项</s:String>\n    <s:String x:Key=\"S.Command.Reduce\">减少帧数</s:String>\n    <s:String x:Key=\"S.Command.SmoothLoop\">创建平滑循环</s:String>\n    <s:String x:Key=\"S.Command.Reverse\">反向动画</s:String>\n    <s:String x:Key=\"S.Command.Yoyo\">溜溜球，使动画前进和后退</s:String>\n    <s:String x:Key=\"S.Command.MoveLeft\">移动所选择帧到左侧</s:String>\n    <s:String x:Key=\"S.Command.MoveRight\">移动所选择帧到右侧</s:String>\n    <s:String x:Key=\"S.Command.Resize\">调整所有帧大小</s:String>\n    <s:String x:Key=\"S.Command.Crop\">裁剪所有帧</s:String>\n    <s:String x:Key=\"S.Command.FlipRotate\">翻转或旋转帧</s:String>\n    <s:String x:Key=\"S.Command.Caption\">添加标题</s:String>\n    <s:String x:Key=\"S.Command.FreeText\">添加自由浮动文本</s:String>\n    <s:String x:Key=\"S.Command.TitleFrame\">添加带有标题的帧</s:String>\n    <s:String x:Key=\"S.Command.KeyStrokes\">按键：插入在录制过程中按下的按键</s:String>\n    <s:String x:Key=\"S.Command.FreeDrawing\">绘制自由形式</s:String>\n    <s:String x:Key=\"S.Command.Shapes\">添加形状</s:String>\n    <s:String x:Key=\"S.Command.MouseEvents\">鼠标点击</s:String>\n    <s:String x:Key=\"S.Command.Watermark\">选择图像并添加为水印</s:String>\n    <s:String x:Key=\"S.Command.Border\">添加边框</s:String>\n    <s:String x:Key=\"S.Command.Shadow\">添加阴影</s:String>\n    <s:String x:Key=\"S.Command.Obfuscate\">模糊处理：在帧上隐藏敏感部分</s:String>\n    <s:String x:Key=\"S.Command.Cinemagraph\">使用绘图工具选择帧的哪些部分在整个动画中不应保持静态</s:String>\n    <s:String x:Key=\"S.Command.Progress\">进度条或带有播放详细信息的文本</s:String>\n    <s:String x:Key=\"S.Command.SelectAll\">选择所有帧</s:String>\n    <s:String x:Key=\"S.Command.GoTo\">导航到索引帧</s:String>\n    <s:String x:Key=\"S.Command.InverseSelection\">反向选择帧</s:String>\n    <s:String x:Key=\"S.Command.Unselect\">取消选择所有帧</s:String>\n    <s:String x:Key=\"S.Command.Fade\">渐隐过渡</s:String>\n    <s:String x:Key=\"S.Command.Slide\">幻灯片过渡</s:String>\n    <s:String x:Key=\"S.Command.ClearAll\">清除所有完成的编码</s:String>\n    <s:String x:Key=\"S.Command.MoveUp\">上移</s:String>\n    <s:String x:Key=\"S.Command.MoveDown\">下移</s:String>\n    <s:String x:Key=\"S.Command.Add\">添加</s:String>\n    <s:String x:Key=\"S.Command.Open\">打开</s:String>\n    <s:String x:Key=\"S.Command.Edit\">编辑所选项目</s:String>\n    <s:String x:Key=\"S.Command.Save\">保存所选项目</s:String>\n    <s:String x:Key=\"S.Command.Remove\">删除所选项目</s:String>\n    <s:String x:Key=\"S.Command.ViewHistory\">查看历史</s:String>\n    \n    <!--StartUp-->\n    <s:String x:Key=\"S.StartUp.Title\">ScreenToGif - 启动</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder\">录像机</s:String>\n    <s:String x:Key=\"S.StartUp.Recorder.Tooltip\">打开屏幕录像机，您可以在其中轻松开始录制屏幕。</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam\">摄像头</s:String>\n    <s:String x:Key=\"S.StartUp.Webcam.Tooltip\">打开摄像头录像机。</s:String>\n    <s:String x:Key=\"S.StartUp.Board\">画板</s:String>\n    <s:String x:Key=\"S.StartUp.Board.Tooltip\">打开画板录像机，您可以在其中录制您的绘图。</s:String>\n    <s:String x:Key=\"S.StartUp.Editor\">编辑器</s:String>\n    <s:String x:Key=\"S.StartUp.Editor.Tooltip\">打开编辑器窗口，您可以在其中开始或编辑新的录制视频。</s:String>\n    <s:String x:Key=\"S.StartUp.Options\">选项</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease\">新版本可用</s:String>\n    <s:String x:Key=\"S.StartUp.NewRelease.Tooltip\">下载最新版本的 ScreenToGif。</s:String>\n\n    <!--Updater-->\n    <s:String x:Key=\"S.Updater.Title\">更新</s:String>\n    <s:String x:Key=\"S.Updater.Header\">一个新的更新可用</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease\">新版本发布！</s:String>\n    <s:String x:Key=\"S.Updater.NewRelease.Info\">新版本 {0} 可用！&#x0d;点击此处查看。</s:String>\n    <s:String x:Key=\"S.Updater.NoNewRelease.Info\">看来您的系统不再被支持，或者更新系统时发生了一些变化。尝试从网站上手动下载它。</s:String>\n    <s:String x:Key=\"S.Updater.Version\">版本</s:String>\n    <s:String x:Key=\"S.Updater.Portable\">便携版</s:String>\n    <s:String x:Key=\"S.Updater.Installer\">安装程序</s:String>\n    <s:String x:Key=\"S.Updater.Info.WhatsNew\">新功能</s:String>\n    <s:String x:Key=\"S.Updater.Info.BugFixes\">错误修复：</s:String>\n    <s:String x:Key=\"S.Updater.Info.NewVersionAvailable\">您可以下载新版本。&#x0d;您要打开浏览器进行下载吗？</s:String>\n    <s:String x:Key=\"S.Updater.RunAfter\">更新后执行该应用程序。</s:String>\n    <s:String x:Key=\"S.Updater.Download\">下载</s:String>\n    <s:String x:Key=\"S.Updater.Install\">安装</s:String>\n    <s:String x:Key=\"S.Updater.InstallManually\">手动安装</s:String>\n    <s:String x:Key=\"S.Updater.Downloading\">正在下载...</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Show\">无法显示下载详细信息。</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Download\">无法下载更新。</s:String>\n    <s:String x:Key=\"S.Updater.Warning.Encoding\">您需要等待所有编码完成才能更新。</s:String>\n    \n    <!--Downloader-->\n    <s:String x:Key=\"S.Downloader.Title\">ScreenToGif - 下载器</s:String>\n    <s:String x:Key=\"S.Downloader.Header\">下载器</s:String>\n    <s:String x:Key=\"S.Downloader.Size\">已下载 {0}，共计 {1}</s:String>\n    \n    <!--Options-->\n    <s:String x:Key=\"S.Options.Title\">ScreenToGif - 选项</s:String>\n    <s:String x:Key=\"S.Options.App\">应用程序</s:String>\n    <s:String x:Key=\"S.Options.Recorder\">录像机</s:String>\n    <s:String x:Key=\"S.Options.Editor\">编辑器</s:String>\n    <s:String x:Key=\"S.Options.Tasks\">自动化任务</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts\">键盘快捷键</s:String>\n    <s:String x:Key=\"S.Options.Language\">语言</s:String>\n    <s:String x:Key=\"S.Options.Storage\">临时文件</s:String>\n    <s:String x:Key=\"S.Options.Extras\">附加功能</s:String>\n    <s:String x:Key=\"S.Options.Upload\">上传服务</s:String>\n    <s:String x:Key=\"S.Options.Donate\">捐赠</s:String>\n    <s:String x:Key=\"S.Options.About\">关于</s:String>\n    <s:String x:Key=\"S.Options.Other\">其它</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Header\">光标后缺少快捷键</s:String>\n    <s:String x:Key=\"S.Options.Warning.Follow.Message\">为了使用鼠标光标跟随功能，必须设置一个快捷键，以便在需要时进行切换。</s:String>\n\n    <!--Options • Application-->\n    <s:String x:Key=\"S.Options.App.Startup\">启动</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual\">手动启动</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Manual.Info\">仅当您手动执行该应用程序时，该应用程序才会执行。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic\">跟随 Windows 启动</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Automatic.Info\">Windows 启动后将执行该应用程序。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Mode.Warning\">无法在启动模式之间交替。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single\">仅允许一个实例</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Single.Info\">您将可以为每个用户和可执行文件运行一次该应用程序，&#10;意味着不同的用户或可执行实例可以共存。&#10;当再次尝试执行该应用程序时，第二个实例将尝试将焦点放在第一个实例上并自行结束。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple\">允许多个实例</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Instance.Multiple.Info\">您可以无限制地同时运行该应用程序多次。</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray\">启动最小化到系统托盘</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Tray.Info\">（启用此选项后系统托盘图标将可见）</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window\">启动使用：</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Startup\">启动窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Recorder\">屏幕录像机</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Webcam\">摄像头录像机</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Board\">画板录像机</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Editor\">编辑器窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Startup.Window.Info\">（在应用启动时首先显示的窗口）</s:String>\n    <s:String x:Key=\"S.Options.App.Theme\">应用程序主题</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme\">配色方案</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryLight\">非常浅</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Light\">浅色</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Medium\">中等</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Dark\">深色</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.VeryDark\">非常暗</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.FollowSystem\">跟随系统</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Custom\">自定义</s:String>\n    <s:String x:Key=\"S.Options.App.Theme.Scheme.Example\">示例颜色</s:String>\n    <s:String x:Key=\"S.Options.App.Tray\">系统托盘图标</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Show\">在系统托盘（通知区域）上显示应用程序</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.LeaveOpen\">即使所有窗口关闭仍保持应用程序的打开状态</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Nothing\">什么都不做</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open\">打开一个窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Open.None\">无窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Toggle\">最小化/还原所有窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Minimize\">最小化所有窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Restore\">恢复所有窗口</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Left\">左键单击：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.DoubleLeft\">左键单击（x2）：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Middle\">中键单击：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Window\">窗口：</s:String>\n    <s:String x:Key=\"S.Options.App.Tray.Interactions.Else\">否则，打开：</s:String>\n    <s:String x:Key=\"S.Options.App.General\">常规</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota\">解决“配额不足...”崩溃的方法</s:String>\n    <s:String x:Key=\"S.Options.App.General.WorkaroundQuota.Info\">（实验性）</s:String>\n    <s:String x:Key=\"S.Options.App.General.NotifyWhileClosingApp\">关闭应用程序之前询问我（通过“退出”命令）</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration\">禁用硬件加速</s:String>\n    <s:String x:Key=\"S.Options.App.General.DisableHardwareAcceleration.Info\">（用户界面将通过软件模式呈现）</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates\">检查翻译更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForTranslationUpdates.Info\">（更新的翻译将自动下载并安装）</s:String>\n    <s:String x:Key=\"S.Options.App.General.CheckForUpdates\">检查更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.UpdateOnClose\">关闭应用程序后自动安装更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate\">强制下载便携版本</s:String>\n    <s:String x:Key=\"S.Options.App.General.PortableUpdate.Info\">（需要通过解压缩和替换可执行文件来进行手动安装）</s:String>\n    <s:String x:Key=\"S.Options.App.General.ForceUpdateAsAdmin\">强制更新时提升特权</s:String>\n    <s:String x:Key=\"S.Options.App.General.PromptToInstall\">在安装开始之前提示我</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork\">使用按流量计费的连接下载更新</s:String>\n    <s:String x:Key=\"S.Options.App.General.DownloadWithMeteredNetwork.Info\">（允许在按流量计费的网络上下载更新）</s:String>\n\n    <!--Options • Recorder-->\n    <s:String x:Key=\"S.Options.Recorder.Interface\">界面</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.Old\">旧的</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Interface.New\">新的</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Frequency\">捕获频率</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual\">手动</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Manual.Info\">您可以通过按“捕获”按钮或等效的键盘快捷键来手动捕获每一帧。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction\">用户交互</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interaction.Info\">每次单击或键入内容时，都会捕获帧。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second\">每秒</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Second.Info\">基于录像机屏幕上设置的帧率分母，&#10;将以“每秒”为基础捕获帧。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute\">每分钟</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Minute.Info\">基于录像机屏幕上设置的帧率分母，&#10;将以“每分钟”（间隔）的时间捕获帧。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour\">每小时</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Hour.Info\">基于录像机屏幕上设置的帧速率分母，&#10;将以“每小时”为基础（延时）捕获帧。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback\">播放延迟：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Playback.Info\">（以毫秒为单位，每个捕获的帧将设置为此延迟）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger\">触发延迟：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Trigger.Info\">（以毫秒为单位，每个帧捕获将在开始之前等待这么长时间）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Frequency.Interval\">每帧将以 {0} 的间隔进行捕获。</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Mode\">捕获模式</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Bitblt.Info\">使用较旧的捕获方法，该方法较慢，可能无法捕获游戏，但不需要其他插件。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DirectX.Info\">使用桌面复制 API 捕获方法，该方法更快，并且可以捕获全屏游戏，但是需要 Windows 8 或更高版本系统。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File\">保存到文件</s:String>\n    <s:String x:Key=\"S.Options.Recorder.File.Info\">捕获的每一帧将直接作为图像保存在磁盘上。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache\">内存缓存</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Cache.Info\">捕获的每个帧将首先作为像素阵列存储在内存中（可能在压缩之前）。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression\">压缩：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal\">最佳</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Optimal.Info\">（速度较慢，但可能是更理想的压缩方式）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest\">最快</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.Fastest.Info\">（速度较快，但可能不是理想的压缩方式）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression\">无压缩</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compression.NoCompression.Info\">（捕获帧时不应执行压缩）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize\">缓存大小：</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CacheSize.Info\">（以 MB 为单位。达到此大小后，数据将被写入/丢弃到磁盘上）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames\">防止捕获全黑帧。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreventBlackFrames.Info\">（防止具有内存缓存的 BitBlt 错误地导致所有像素均为黑色的帧）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RecordMouse\">录制时显示鼠标光标</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectCursorColor\">选择光标颜色</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate\">固定帧率</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FixedFramerate.Info\">（恒定延迟，不会因为录制时卡顿变化）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges\">仅在发生变化时捕获</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CaptureChanges.Info\">（仅当在捕获区域内进行了某些更改时，才会捕获帧）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement\">提高远程桌面连接上的捕获性能</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RemoteImprovement.Info\">（禁用分层窗口捕获）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection\">在捕获过程中强制清理内存</s:String>\n    <s:String x:Key=\"S.Options.Recorder.ForceGarbageCollection.Info\">（减少捕捉过程中的内存使用，但会降低性能）</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.Guidelines\">辅助线</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds\">三分法则</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.RuleOfThirds.Info\">单击切换三分法则准线的显示。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair\">十字准线</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Crosshair.Info\">点击切换十字准线的显示。</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Guidelines.Info\">辅助线仅在录像机暂停或停止时显示。</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.HideTitleBar\">隐藏标题栏（精简模式）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier\">启用屏幕放大镜</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Magnifier.Info\">（在选择录制区域时启用放大镜）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder\">在选择期间对屏幕区域边框进行动画处理</s:String>\n    <s:String x:Key=\"S.Options.Recorder.AnimateBorder.Info\">（使用“行军蚁”样式制作动画）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning\">启用选择平移</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionPanning.Info\">（在选择的一角附近显示一个装饰物，允许移动录制区域）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact\">紧凑模式</s:String>\n    <s:String x:Key=\"S.Options.Recorder.Compact.Info\">（显示录制器命令面板的较小版本）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard\">显示放弃按钮也同时录制</s:String>\n    <s:String x:Key=\"S.Options.Recorder.DisplayDiscard.Info\">（通常情况下，仅在暂停状态下可见）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement\">提高屏幕选择性能</s:String>\n    <s:String x:Key=\"S.Options.Recorder.SelectionImprovement.Info\">（通过显示屏幕的静态视图，减少屏幕选择时的延迟）</s:String>\n    \n    <s:String x:Key=\"S.Options.Recorder.RememberSize\">记住录制区域的先前大小</s:String>\n    <s:String x:Key=\"S.Options.Recorder.RememberPosition\">记住录制区域的先前位置</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart\">在开始前倒计时</s:String>\n    <s:String x:Key=\"S.Options.Recorder.PreStart.Info\">（以秒为单位，开始录制前延时）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing\">启用光标跟随</s:String>\n    <s:String x:Key=\"S.Options.Recorder.CursorFollowing.Info\">（录制区域将根据光标的位置重新定位）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMargin.Info\">（录制区域开始重新定位缓冲区边距）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.FollowMarginInvisible.Info\">（UI 开始隐藏其他缓冲区边距）</s:String>\n    <s:String x:Key=\"S.Options.Recorder.NotifyRecordingDiscard\">在放弃录制之前询问我</s:String>\n\n    <!--Options • Editor-->\n    <s:String x:Key=\"S.Options.Editor.Previewer\">编辑器背景</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize\">网格大小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VerySmall\">非常小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Small\">小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Medium\">中等</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Large\">大</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.VeryLarge\">非常大</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ILikeBigSquares\">我喜欢大方块</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.ImBlind\">我是盲人</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Custom\">自定义</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Height\">高度</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Width\">宽度</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.GridSize.Apply\">应用</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.BaseColor\">基础颜色</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.EvenColor\">偶数行颜色</s:String>\n    <s:String x:Key=\"S.Options.Editor.Previewer.OddColor\">奇数行颜色</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.DisplayEncoder\">在单独的窗口中显示编码</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.ExtendChrome\">扩展标题栏（窗口框架）</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallySizeOnContent\">加载后根据帧大小自动调整窗口大小</s:String>\n    <s:String x:Key=\"S.Options.Editor.Interface.AutomaticallyFitImage\">加载后根据窗口大小自动调整帧缩放级别</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyFrameDeletion\">删除帧前询问我</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyProjectDiscard\">放弃项目前询问我</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.NotifyWhileClosingEditor\">关闭编辑器前询问我 （如果有打开的项目）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.TripleClickSelection\">启用三次点击选择文字</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DrawOutlineOutside\">绘制标题文字的外轮廓</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind\">必要时丢弃帧</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info\">（如果预览器无法及时显示请跳过一个帧）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip\">如果预览器无法及时显示该帧，则跳过该帧。</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory\">对撤消/重做历史记录添加限制</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Info\">（达到限制后，较旧的操作将被删除）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.LimitHistory.Maximum\">（存储的最大操作数量）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder\">在预设之间同步输出文件夹</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Folder.Info\">（预设将使用相同的输出路径）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename\">同时同步文件名</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.Filename.Info\">（预设也将使用相同的文件名）</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType\">仅在相同文件类型的预设之间同步</s:String>\n    <s:String x:Key=\"S.Options.Editor.General.SyncPath.SameType.Info\">（只有相同文件类型的预设才会同步）</s:String>\n    \n    <!--Options • Tasks-->\n    <s:String x:Key=\"S.Options.Tasks.Title\">自动化任务</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List\">自动化任务列表</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Task\">任务</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Details\">详细信息</s:String>\n    <s:String x:Key=\"S.Options.Tasks.List.Enabled\">启用</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Enable\">启用此任务</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType\">（选择一个任务）</s:String>\n    <s:String x:Key=\"S.Options.Tasks.SelectType.Info\">在上方选择一个任务</s:String>\n    <s:String x:Key=\"S.Options.Tasks.Info\">这些任务从列表顶部到底部顺序执行。&#10;当您第一次使用编辑器打开项目时会发生这种情况。</s:String>\n  \n    <!--Options • Shortcuts-->\n    <s:String x:Key=\"S.Options.Shortcuts.Global\">全局</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder\">屏幕录像机：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.ScreenRecorder.Info\">（打开默认屏幕录像机）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder\">摄像头录像机：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.WebcamRecorder.Info\">（打开摄像头录像机）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder\">画板录像机：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.BoardRecorder.Info\">（打开画板录像机，以便您可以录制您的绘画）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor\">编辑器：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenEditor.Info\">（打开另一个编辑器窗口）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions\">选项：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.OpenOptions.Info\">（打开选项窗口，一次只能打开一个窗口）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit\">退出：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Global.Exit.Info\">（关闭所有窗口并从系统托盘中删除应用程序）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders\">录像机</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause\">开始/暂停：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.StartPause.Info\">（启动或暂停录制，如果快照模式已激活，则用于拍摄快照）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop\">停止：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Stop.Info\">（停止录制并打开编辑器）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard\">放弃：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Discard.Info\">（暂停时放弃活动录制）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow\">光标跟随：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.Follow.Info\">（根据光标的位置切换记录区域的调整）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow\">禁用以下内容：</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Recorders.DisableFollow.Info\">（暂时禁用基于光标位置的记录区域调整，仅接受修饰键）</s:String>\n    <s:String x:Key=\"S.Options.Shortcuts.Info\">单击以设置键盘焦点，然后按所需的键和修饰符。&#10;一些按键组合是不允许的。</s:String>\n    \n    <!--Options • Language-->\n    <s:String x:Key=\"S.Options.Language.AppLanguage\">应用程序语言</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect\">自动检测</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.AutoDetect.Author\">当前操作系统语言（如果可用）</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.1\">您愿意翻译我的应用吗？</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence1.2\">点击此处阅读翻译指南并下载 Translator 应用。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.1\">之后，</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.2\">点击这里导入</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence2.3\">并测试您的翻译。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.1\">在您翻译完成以后，请将语言文件发送到</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.2\">Email (nicke@outlook.com.br)</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.Sentence3.3\">。谢谢！</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip\">单击以打开包含指南的网页。</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip\">打开导入页面</s:String>\n    <s:String x:Key=\"S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip\">打开电子邮件应用</s:String>\n    \n    <!--Options • Storage-->\n    <s:String x:Key=\"S.Options.Storage.Status\">状态</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Volume\">卷：</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.FreeSpace\">共计 {1}  可用 {0}</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Check\">再次检查剩余的空间。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Clear\">清除缓存文件夹。&#10;您将可以决定是否要保留最近的项目。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.LowSpace\">当前配置的硬盘驱动器上空间不足。请清理临时缓存文件夹或更改位置。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Error\">无法检索驱动器详细信息。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.None\">没有文件</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Singular\">{0:##,##0} 个文件</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Files.Plural\">{0:##,##0} 个文件</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.None\">没有文件夹</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Singular\">{0:##,##0} 个文件夹</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.Folders.Plural\">{0:##,##0} 个文件夹</s:String>\n    <s:String x:Key=\"S.Options.Storage.Status.InUse\">{0} 正在使用</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths\">路径</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache\">缓存：</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Cache.Choose\">选择临时文件位置</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs\">日志：</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Logs.Choose\">选择错误日志文件位置</s:String>\n    <s:String x:Key=\"S.Options.Storage.Paths.Browse\">浏览所选文件夹</s:String>\n    <s:String x:Key=\"S.Options.Storage.Settings\">配置文件存放目录</s:String>\n    <s:String x:Key=\"S.Options.Storage.AppDataPath\">AppData：</s:String>\n    <s:String x:Key=\"S.Options.Storage.LocalPath\">本地：</s:String>\n    <s:String x:Key=\"S.Options.Storage.NotExists\">不存在</s:String>\n    <s:String x:Key=\"S.Options.Storage.CreateSettings\">创建一个空的本地设置文件</s:String>\n    <s:String x:Key=\"S.Options.Storage.RemoveSettings\">删除设置文件</s:String>\n    <s:String x:Key=\"S.Options.Storage.OpenSettingsFolder\">打开设置文件所在的文件夹。&#x0d;在按住 Ctrl 键的同时，单击打开文件（如果可能）。</s:String>\n    <s:String x:Key=\"S.Options.Storage.SettingsInfo\">• 设置加载模式：默认 ◄ AppData ◄ 本地。&#x0d;• 如果本地文件夹中没有设置文件，此应用将在 AppData 文件夹中进行搜索。&#x0d;• 如果没有设置文件，则使用默认值。&#x0d;• 如果没有本地设置，保存所有设置将到 AppData 设置文件中。</s:String>\n    <s:String x:Key=\"S.Options.Storage.DeleteEverything\">关闭应用程序时从缓存中删除所有文件</s:String>\n    <s:String x:Key=\"S.Options.Storage.AskDeleteEverything\">在从缓存中删除所有文件之前询问我。</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval\">自动删除旧项目</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemoval.Info\">打开应用程序时，超过配置时间的已关闭项目将被后台任务删除。</s:String>\n    <s:String x:Key=\"S.Options.Storage.AutomaticRemovalDays.Info\">（天数，在打开应用程序后，任何超过这个时间的已关闭项目将被删除/丢弃）</s:String>\n    \n    <!--Options • Storage > Clear cache-->\n    <s:String x:Key=\"S.Options.Storage.Cache.Title\">ScreenToGif - 清除缓存</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Header\">您要清除缓存文件夹吗？</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Info\">创建录制或打开要编辑的内容时，将创建一个项目并将其存储在缓存文件夹中。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.Question\">您要从缓存文件夹中删除这些项目吗？</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent\">不要删除最近的项目。</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.Yes\">（仅会删除 {0} 天之前尚未使用的项目）</s:String>\n    <s:String x:Key=\"S.Options.Storage.Cache.IgnoreRecent.No\">（所有当前未使用的项目将被删除）</s:String>\n    \n    <!--Options • Upload-->\n    <s:String x:Key=\"S.Options.Upload.Proxy\">代理</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Disabled\">已禁用</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.Manual\">手动</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System\">系统</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Mode.System.Info\">（使用系统代理）</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Host\">主机：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Port\">端口：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.User\">用户名：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Proxy.Password\">密码：</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Presets\">上传预设</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Service\">服务</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Title\">标题</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Description\">描述</s:String>\n    <s:String x:Key=\"S.Options.Upload.Presets.Enabled\">启用</s:String>\n    \n     <!--Options • Upload > Preset-->\n    <s:String x:Key=\"S.Options.Upload.Preset.Title\">上传服务</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select\">选择一项服务</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Select.Info\">在上方选择上传服务</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Custom\">自定义</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Enable\">启用此预设。</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Details\">详细信息</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Name\">名称：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Description\">描述：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Anonymous\">匿名</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Mode.Authenticated\">已认证</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorization\">授权</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.GetToken\">获取令牌</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Token\">在此处粘贴 OAuth 令牌</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Username\">用户名：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Password\">密码：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Authorize\">授权</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.NotStored\">用户名和密码将不会被存储。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Options\">选项</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Direct\">使用直接链接</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Album\">相册</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Title\">您必须给此预设一个唯一的名称。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Repeated\">该名称已被另一个上传预设使用。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Authenticate\">在身份验证模式下，您必须完成身份验证过程。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Credentials\">您必须提供您的用户名和密码才能授权此应用。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.GetToken\">无法获得授权令牌。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.Token\">为了授权此应用程序，您需要提供授权令牌凭证。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AuthError\">授权失败。检查一切是否正确，然后在几秒钟后重试。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Warning.AlbumLoad\">无法加载相册列表。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Authorized\">授权完成。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.NotAuthorized\">未授权。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Expired\">授权已在 {0} 中过期。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Info.Valid\">授权有效期至 {0}。</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Gifv\">使用 Gifv 扩展名而不是 Gif 获取链接</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.ToAlbum\">将 Gif 上传到所选的相册</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Album\">相册：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.AskMe\">上传前询问我</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Imgur.Reload\">重新加载相册列表。</s:String>\n    \n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.Defaults\">默认</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.AskMe\">询问我填写上传的详细信息。</s:String>\n    <s:String x:Key=\"S.Options.Upload.Preset.Gfycat.UrlType\">URL 类型：</s:String>\n    \n    <!--Options • Upload > Album-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Album\">选择一个相册（可选）</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Album.Info\">如果您愿意，可以选择目标相册：</s:String>\n    \n    <!--Options • Upload > Details-->\n    <s:String x:Key=\"S.Options.Upload.Pick.Details\">上传详细信息（可选）</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Info\">上传详细信息</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Title\">标题：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Description\">描述：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags\">标签：</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Tags.Info\">使用分号（ ; ）分隔标签</s:String>\n    <s:String x:Key=\"S.Options.Upload.Pick.Details.Private\">仅显示那些通过直接链接访问的用户。</s:String>\n    \n    <!--Options • Upload > History-->\n    <s:String x:Key=\"S.Options.Upload.History.Title\">上传历史</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Date\">日期</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Preset\">预设</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Successful\">成功？</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Remove\">删除历史记录条目。</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.Link\">链接：</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.LowerQuality\">较低质量：</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Detail.DeleteLink\">删除链接：</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Instruction\">您确定要删除历史记录条目吗？</s:String>\n    <s:String x:Key=\"S.Options.Upload.History.Delete.Message\">此操作无法撤消。&#10;&#10;您要删除所选的历史记录条目吗？</s:String>\n    \n    <!--Options • Extras-->\n    <s:String x:Key=\"S.Options.Extras.External\">可用的外部工具</s:String>\n    <s:String x:Key=\"S.Options.Extras.Download\">点击此处下载&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Downloading\">下载中...</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready\">已下载&#x0d;{0}</s:String>\n    <s:String x:Key=\"S.Options.Extras.Ready.Info\">点击这里打开文件的属性。</s:String>\n    <s:String x:Key=\"S.Options.Extras.DownloadRestriction\">Microsoft Store 分发的应用程序无法下载其他应用程序。您必须手动下载它。</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation\">FFmpeg 位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Select\">选择 FFmpeg 可执行文件的位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.File\">FFmpeg 可执行文件</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegLocation.Invalid\">FFMpeg 可执行文件的路径中包含一个或多个无效字符。请为该可执行文件选择一个有效位置。</s:String>\n    <s:String x:Key=\"S.Options.Extras.FfmpegVersion\">FFmpeg 版本</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation\">Gifski 位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Select\">选择 Gifski 可执行文件的位置</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.File\">Gifski 库</s:String>\n    <s:String x:Key=\"S.Options.Extras.GifskiLocation.Invalid\">Gifski 可执行文件的路径中包含一个或多个无效字符。请为该可执行文件选择一个有效位置。</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Ffmpeg\">FFmpeg 许可证</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.Gifski\">Gifski 许可证</s:String>\n    <s:String x:Key=\"S.Options.Extras.License.SharpDx\">SharpDx 许可证</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Header\">文件夹中缺少写入权限</s:String>\n    <s:String x:Key=\"S.Options.Extras.Permission.Observation\">由于缺少写入权限，无法将下载内容保存在文件夹中。&#10;&#10;您是否要以管理员权限启动下载程序以完成下载？</s:String>\n    \n    <!--Options • Donations-->\n    <s:String x:Key=\"S.Options.Donate.Donate\">捐赠</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Dollar\">捐赠美元 (US$)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Donate.Euro\">捐赠欧元 (€)</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Dollar\">打开 Paypal 网站。选择货币：美元</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.Euro\">打开 Paypal 网站。选择货币：欧元</s:String>\n    <s:String x:Key=\"S.Options.Donate.Paypal.OwnCurrency\">打开 Paypal 网站。您必须选择货币</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe\">订阅</s:String>\n    <s:String x:Key=\"S.Options.Donate.Subscribe.Patreon\">每月通过 Patreon 捐款。</s:String>\n    <s:String x:Key=\"S.Options.Donate.Stripe\">通过 Stripe 捐款。</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift\">礼品游戏</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Steam\">通过 Steam 进行礼品游戏。</s:String>\n    <s:String x:Key=\"S.Options.Donate.Gift.Gog\">通过 GOG 进行礼品游戏。</s:String>\n    <s:String x:Key=\"S.Options.Donate.Kofi\">通过 Ko-fi 支付咖啡费用。</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto\">加密货币</s:String>\n    <s:String x:Key=\"S.Options.Donate.Crypto.BitcoinCash\">复制比特币现金地址。</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support\">支持</s:String>\n    <s:String x:Key=\"S.Options.Donate.Support.Visit\">如果您想支持该项目 :)</s:String>\n    \n    <!--Options • About-->\n    <s:String x:Key=\"S.Options.About.Version\">版本：</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck\">检查更新</s:String>\n    <s:String x:Key=\"S.Options.About.UpdateCheck.Nothing\">您已经更新到最新版本，无需更新。</s:String>\n    <s:String x:Key=\"S.Options.About.Author\">作者：Nicke Manarin</s:String>\n    <s:String x:Key=\"S.Options.About.StoreVersion\">Microsoft Store 版本。某些功能由于强制策略而被禁用。</s:String>\n    <s:String x:Key=\"S.Options.About.Contact\">联系</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Discord\">加入服务器</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Facebook\">访问页面</s:String>\n    <s:String x:Key=\"S.Options.About.Contact.Gitter\">加入房间</s:String>\n    <s:String x:Key=\"S.Options.About.Technical\">技术</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.License\">许可：</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Free\">（该应用程序完全免费）</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.SourceCode\">源代码：</s:String>\n    <s:String x:Key=\"S.Options.About.Technical.Privacy\">隐私政策：</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo\">非常感谢</s:String>\n    <s:String x:Key=\"S.Options.About.ABigThanksTo.Everyone\">所有支持过我和提供反馈及捐助的人</s:String>\n    \n    <!--Localization-->\n    <s:String x:Key=\"S.Localization\">本地化</s:String>\n    <s:String x:Key=\"S.Localization.GettingCodes\">正在获取语言代码...</s:String>\n    <s:String x:Key=\"S.Localization.Recognized\">识别为 {0}</s:String>\n    <s:String x:Key=\"S.Localization.NotRecognized\">无法识别</s:String>\n    <s:String x:Key=\"S.Localization.Usage.First\">现在使用的是最底部的资源。</s:String>\n    <s:String x:Key=\"S.Localization.Usage.Second\">要应用您的自定义资源，请将其移动到列表的最底部。</s:String>\n    <s:String x:Key=\"S.Localization.Exporting\">正在导出资源...</s:String>\n    <s:String x:Key=\"S.Localization.SaveResource\">保存资源字典</s:String>\n    <s:String x:Key=\"S.Localization.OpenResource\">打开资源字典</s:String>\n    <s:String x:Key=\"S.Localization.File.Resource\">资源字典</s:String>\n    <s:String x:Key=\"S.Localization.Importing\">正在导入资源...</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name\">文件名没有遵循有效的格式</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Name.Info\">尝试重命名为：StringResources.en.xaml，其中“en”应替换为您的语言代码。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated\">您不能添加相同名称的资源</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Repeated.Info\">尝试删除重复的资源或使用其他语言代码。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant\">冗余语言代码</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Redundant.Info\">“{0}” 代码是多余的。尝试改用 “{1}”。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown\">未知语言</s:String>\n    <s:String x:Key=\"S.Localization.Warning.Unknown.Info\">无法将 “{0}” 及其家族识别为有效的语言代码。</s:String>\n    <s:String x:Key=\"S.Localization.Warning.NotPossible\">无法导入本地化资源。</s:String>\n\n    <!--Recorder-->\n    <s:String x:Key=\"S.Recorder.Record\">录制</s:String>\n    <s:String x:Key=\"S.Recorder.Pause\">暂停</s:String>\n    <s:String x:Key=\"S.Recorder.Continue\">继续</s:String>\n    <s:String x:Key=\"S.Recorder.Stop\">停止</s:String>\n    <s:String x:Key=\"S.Recorder.Discard\">放弃</s:String>\n    <s:String x:Key=\"S.Recorder.Snap\">捕捉</s:String>\n    <s:String x:Key=\"S.Recorder.Height\">高度</s:String>\n    <s:String x:Key=\"S.Recorder.Width\">宽度</s:String>\n    <s:String x:Key=\"S.Recorder.CursorFollowing\">光标跟踪已启用。</s:String>\n\n    <s:String x:Key=\"S.Recorder.SwitchFrequency\">单击以在捕获频率模式之间切换。</s:String>\n    <s:String x:Key=\"S.Recorder.Manual.Short\">手动</s:String>\n    <s:String x:Key=\"S.Recorder.Interaction.Short\">交互</s:String>\n    <s:String x:Key=\"S.Recorder.Fps\">每秒最大帧数</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Short\">fps</s:String>\n    <s:String x:Key=\"S.Recorder.Fps.Range\">范围从 1 到 60 fps，更高的值表示将捕获更多帧。&#10;每个增量代表 16 毫秒的差异。</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm\">每分钟最大帧数</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Short\">fpm</s:String>\n    <s:String x:Key=\"S.Recorder.Fpm.Range\">范围从 1 到 60 fpm，更高的值表示将捕获更多帧。&#10;每个增量代表 1 秒的差异。</s:String>\n    <s:String x:Key=\"S.Recorder.Fph\">每小时最大帧数</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Short\">fph</s:String>\n    <s:String x:Key=\"S.Recorder.Fph.Range\">范围从 1 到 60 fph，更高的值表示将捕获更多帧。&#10;每个增量代表 1 分钟的差异。</s:String>\n    \n    <s:String x:Key=\"S.Recorder.ClickOrPress\">单击或按键捕获</s:String>\n    <s:String x:Key=\"S.Recorder.SnapToWindow\">对齐窗口（拖拽到目标窗口上进行捕捉）</s:String>\n    <s:String x:Key=\"S.Recorder.PreStart\">预启动</s:String>\n    <s:String x:Key=\"S.Recorder.Paused\">ScreenToGif（已暂停）</s:String>\n    <s:String x:Key=\"S.Recorder.Stopping\">正在停止...</s:String>\n    <s:String x:Key=\"S.Recorder.PreStarting\">预先启动...</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Timer.Elapsed\">经过的捕获时间。</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Total\">总帧数：</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Manual\">手动捕获：</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Paused\">捕获已暂停。</s:String>\n    <s:String x:Key=\"S.Recorder.Timer.Imprecise\">您的电脑不支持精确的捕捉模式，&#10;这意味着可能永远无法达到目标帧率。</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible\">无法捕获屏幕</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.CaptureNotPossible.Info\">无法捕获屏幕。5 次尝试后，捕获方法未返回任何帧。</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.StartPauseNotPossible\">无法开始/暂停捕获屏幕</s:String>\n    <s:String x:Key=\"S.Recorder.Warning.Windows8\">使用桌面复制 Desktop Duplication API 捕获屏幕需要 Windows 8 或更高版本。</s:String>\n\n    <!--New recorder-->\n    <s:String x:Key=\"S.Recorder.Area\">区域</s:String>\n    <s:String x:Key=\"S.Recorder.Area.Select\">选择一个区域</s:String>\n    <s:String x:Key=\"S.Recorder.Window\">窗口</s:String>\n    <s:String x:Key=\"S.Recorder.Window.Select\">选择一个窗口</s:String>\n    <s:String x:Key=\"S.Recorder.Screen\">屏幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Select\">选择一个屏幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Internal\">内部屏幕</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Generic\">通用画面</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info1\">图形适配器：{0}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info2\">分辨率：{0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info3\">原始分辨率：{0} x {1}</s:String>\n    <s:String x:Key=\"S.Recorder.Screen.Name.Info4\">DPI: {0} ({1:0.##}%)</s:String>\n    <s:String x:Key=\"S.Recorder.Move\">拖动以移动选择。</s:String>\n    <s:String x:Key=\"S.Recorder.Accept\">接受</s:String>\n    <s:String x:Key=\"S.Recorder.Retry\">重试</s:String>\n    <s:String x:Key=\"S.Recorder.Retry.Shortcut\">右键点击</s:String>\n    <s:String x:Key=\"S.Recorder.CancelSelection\">取消选择 (Esc)</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea\">单击并拖动选择屏幕区域</s:String>\n    <s:String x:Key=\"S.Recorder.SelectArea.Embedded\">单击并拖动以选择一个区域</s:String>\n    <s:String x:Key=\"S.Recorder.SelectWindow\">单击此处选择此窗口</s:String>\n    <s:String x:Key=\"S.Recorder.SelectScreen\">单击此处选择此屏幕</s:String>\n    <s:String x:Key=\"S.Recorder.EscToCancel\">按 Esc 键取消</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Title\">按 {0} 停止录制</s:String>\n    <s:String x:Key=\"S.Recorder.Splash.Subtitle\">录像机窗口最小化，&#10;恢复它或按 {0} 暂停捕获</s:String>\n    \n    <s:String x:Key=\"S.Recorder.Discard.Title\">放弃录制</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Instruction\">您确定要放弃该录制吗？</s:String>\n    <s:String x:Key=\"S.Recorder.Discard.Message\">此操作将放弃录制并删除所有帧。&#x0d;您无法撤消此操作。</s:String>\n    \n    <!--Webcam recorder-->\n    <s:String x:Key=\"S.Webcam.Title\">ScreenToGif - 摄像头录像机</s:String>\n    <s:String x:Key=\"S.Webcam.NoVideo\">未检测到视频设备 :(</s:String>\n    <s:String x:Key=\"S.Webcam.CheckVideoDevices\">检测视频设备</s:String>\n    <s:String x:Key=\"S.Webcam.Scale\">缩放：{0:0.##} 倍</s:String>\n    <s:String x:Key=\"S.Webcam.ChangeScale\">更改视频比例</s:String>\n    \n    <!--Board recorder-->\n    <s:String x:Key=\"S.Board.Title\">ScreenToGif - 画板录像机</s:String>\n    <s:String x:Key=\"S.Board.AutoRecord\">自动录制</s:String>\n    <s:String x:Key=\"S.Board.AutoRecordToolTip\">在绘图时启用录制</s:String>\n    <s:String x:Key=\"S.Board.CtrlHold\">Ctrl [按住]</s:String>\n    \n    <!--Color selector-->\n    <s:String x:Key=\"S.ColorSelector.Title\">颜色选择器</s:String>\n    <s:String x:Key=\"S.ColorSelector.Select\">选择颜色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Red\">红色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Green\">绿色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Blue\">蓝色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Alpha\">Alpha</s:String>\n    <s:String x:Key=\"S.ColorSelector.Hexadecimal\">Hex</s:String>\n    <s:String x:Key=\"S.ColorSelector.Initial\">初始颜色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Current\">当前颜色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Latest\">最新颜色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample\">拖放到&#x0d;示例颜色</s:String>\n    <s:String x:Key=\"S.ColorSelector.Sample.Info\">单击并拖动以从屏幕上选择颜色。</s:String>\n    \n    <!--Exception/Error viewers-->\n    <s:String x:Key=\"S.ExceptionViewer.Title\">异常查看器</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.OpenInner\">打开内部异常</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Type\">异常类型</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Message\">信息</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Stack\">堆栈</s:String>\n    <s:String x:Key=\"S.ExceptionViewer.Source\">来源</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Observation\">出现错误</s:String>\n    <s:String x:Key=\"S.ErrorDialog.Send\">发送报告</s:String>\n\n    <!--Presets-->\n    <s:String x:Key=\"S.Preset.Title\">预设</s:String>\n    <s:String x:Key=\"S.Preset.Encoder\">编码器</s:String>\n    <s:String x:Key=\"S.Preset.Name\">名称</s:String>\n    <s:String x:Key=\"S.Preset.Description\">描述</s:String>\n    <s:String x:Key=\"S.Preset.Other\">其它</s:String>\n    <s:String x:Key=\"S.Preset.AutoSave\">修改选项后自动保存。</s:String>\n    <s:String x:Key=\"S.Preset.Info.Manual\">对该预设设置（编码和导出设置）的所有更改都需要通过按保存按钮手动保存。</s:String>\n    <s:String x:Key=\"S.Preset.Info.Automatic\">对该预设设置的所有更改（编码和导出设置）将自动保存。</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Readonly\">默认预设的某些属性是只读的。</s:String>\n    <s:String x:Key=\"S.Preset.Warning.Name\">您必须为此预设命名。</s:String>\n    <s:String x:Key=\"S.Preset.Warning.SameName\">已经存在一个具有相同名称的预设。</s:String>\n    \n    <!--Presets • Listing-->\n    <s:String x:Key=\"S.Preset.Autosave\">自动保存</s:String>\n    <s:String x:Key=\"S.Preset.Autosave.Info\">对该预设的更改将自动保存。</s:String>\n    <s:String x:Key=\"S.Preset.Default.Title\">默认 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Default.Description\">编码器的默认预设。</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Title\">用于 Twitter ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Twitter.Description\">遵守 Twitter 上传限制（大小和分辨率除外）。</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Title\">HEVC ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Hevc.Description\">高效视频编码。</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Title\">VP8 ({0})</s:String>\n    <s:String x:Key=\"S.Preset.Vp8.Description\">较早且知名的编解码器。</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Animation\">动画</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Video\">视频</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Image\">图像</s:String>\n    <s:String x:Key=\"S.Preset.Filename.Project\">项目</s:String>\n\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Title\">高质量</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.High.Description\">更适合于具有更多颜色和渐变的录制。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Title\">高质量 • 透明背景</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Transparent.Description\">支持以透明背景保存动画。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Title\">高质量 • 图形</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Embedded.Graphics.Description\">更适合于使用较少数量的颜色进行录制。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Title\">KGy SOFT • 默认</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Default.Description\">建议用于常规UI的屏幕录制。使用中值剪切量化器，无抖动。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Title\">KGy SOFT • 均衡</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Balanced.Description\">使用吴氏的量化器，在没有抖动的情况下，照片般的图像质量很好。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Title\">KGy SOFT • 高质量</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.High.Description\">使用具有更高位等级的吴氏量化器和 Floyd-Steinberg 误差扩散抖动出照片般的高质量图像。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Title\">KGy SOFT • 低质量，速度更快</s:String>\n    <s:String x:Key=\"S.Preset.Gif.KGySoft.Fast.Description\">使用相同的预设‘网页安全’调色板和Bayer 8x8 有序抖动量化所有帧。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Title\">FFmpeg • 高质量</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.High.Description\">图像质量较高，但文件较大。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Title\">FFmpeg • 低质量</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Ffmpeg.Low.Description\">图像质量较低，但文件较小。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Title\">Gifski • 高质量</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.High.Description\">图像质量较高，但文件较大。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Title\">Gifski • 质量较低</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Low.Description\">图像质量较低，但文件较小。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Title\">Gifski • 较低的质量和更快的编码</s:String>\n    <s:String x:Key=\"S.Preset.Gif.Gifski.Fast.Description\">图像质量更低，编码速度更快，但文件尺寸更小。</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Title\">系统 • 低质量</s:String>\n    <s:String x:Key=\"S.Preset.Gif.System.Low.Description\">质量低下但编码速度更快。</s:String>\n    \n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Title\">FFmpeg • 高质量</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.High.Description\">图像质量较高，文件尺寸较小，但编码速度较慢。</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Title\">FFmpeg • 低质量</s:String>\n    <s:String x:Key=\"S.Preset.Apng.Ffmpeg.Low.Description\">图像质量较低，文件尺寸较小，但编码速度较快。</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Title\">高质量</s:String>\n    <s:String x:Key=\"S.Preset.Webp.Ffmpeg.High.Description\">图像质量高，文件尺寸小。</s:String>\n    \n    <!--Insert frames-->\n    <s:String x:Key=\"S.InsertFrames.Title\">插入帧</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info\">两侧应具有相同的大小，此窗口允许您重新定位和调整图像和画布的大小。点击选择并调整大小。</s:String>\n    <s:String x:Key=\"S.InsertFrames.CanvasSize\">画布大小：</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas\">调整画布以适合图像</s:String>\n    <s:String x:Key=\"S.InsertFrames.FitCanvas.Info\">调整画布大小以装下两个图像（左上角）</s:String>\n    <s:String x:Key=\"S.InsertFrames.DifferentSizes\">两者帧大小不同。您需要在插入帧之前解决此问题。</s:String>\n    <s:String x:Key=\"S.InsertFrames.InsertedFrames\">新建帧</s:String>\n    <s:String x:Key=\"S.InsertFrames.CurrentFrames\">当前帧</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImageSize\">图像大小：</s:String>\n    <s:String x:Key=\"S.InsertFrames.ImagePosition\">图像位置：</s:String>\n    <s:String x:Key=\"S.InsertFrames.ResetImageSizePosition\">重置图像大小和位置</s:String>\n    <s:String x:Key=\"S.InsertFrames.Info2\">新增帧将被插入到当前帧列表</s:String>\n    <s:String x:Key=\"S.InsertFrames.Before\">之前于</s:String>\n    <s:String x:Key=\"S.InsertFrames.After\">之后于</s:String>\n    <s:String x:Key=\"S.InsertFrames.Frame\">帧</s:String>\n    <s:String x:Key=\"S.InsertFrames.Importing\">导入</s:String>\n    <s:String x:Key=\"S.InsertFrames.SelectColorFill\">选择画布填充颜色</s:String>\n\n    <!--Import frames from video-->\n    <s:String x:Key=\"S.ImportVideo.Title\">从视频导入帧</s:String>\n    <s:String x:Key=\"S.ImportVideo.Importer\">开发商：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Loading\">载入中...</s:String>\n    <s:String x:Key=\"S.ImportVideo.Scale\">比例：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Size\">大小：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Height\">高度：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Width\">宽度：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Framerate\">帧速率：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Fps\">FPS</s:String>\n    <s:String x:Key=\"S.ImportVideo.Start\">开始：</s:String>\n    <s:String x:Key=\"S.ImportVideo.End\">结束：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Selection\">选择：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Frames\">帧数：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Duration\">持续时间：</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error\">无法加载视频。</s:String>\n    <s:String x:Key=\"S.ImportVideo.Error.Detail\">预览器无法启动。请尝试使用其他导入器或检查视频是否未损坏。&#x0d;如果您使用的是 MediaPlayer，请检查 Windows 功能中 “媒体功能/Windows Media Player” 是否已打开，并确保您有所需的视频编解码器。</s:String>\n    <s:String x:Key=\"S.ImportVideo.Timeout\">获取帧预览超时。</s:String>\n    <s:String x:Key=\"S.ImportVideo.Nothing\">没有选择的帧将被导入。</s:String>\n    \n    <!--Encoder-->\n    <s:String x:Key=\"S.Encoder.Title\">编码器</s:String>\n    <s:String x:Key=\"S.Encoder.Encoding\">正在编码中...</s:String>\n    <s:String x:Key=\"S.Encoder.Starting\">开始</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed\">已完成</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard\">已复制到剪贴板</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Clipboard.Fail\">无法复制</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command\">命令执行</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Output\">显示输出命令。</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Command.Fail\">无法执行命令</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Fail\">无法上传</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Upload.Delete\">Ctrl + 单击 打开页面以删除图像（如果可用）。</s:String>\n    \n    <s:String x:Key=\"S.Encoder.Completed.Elapsed\">已用时间（以分钟为单位）：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Analysis\">分析：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Encoding\">编码：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Upload\">上传：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Copy\">复制：</s:String>\n    <s:String x:Key=\"S.Encoder.Completed.Elapsed.Commands\">命令：</s:String>\n    \n    <s:String x:Key=\"S.Encoder.DeletedMoved\">已删除或移动文件</s:String>\n    <s:String x:Key=\"S.Encoder.Canceled\">已取消</s:String>\n    <s:String x:Key=\"S.Encoder.Error\">错误</s:String>\n    <s:String x:Key=\"S.Encoder.Error.Info\">点击此处显示此错误的详细信息。</s:String>\n    <s:String x:Key=\"S.Encoder.Uploading\">上传中</s:String>\n    <s:String x:Key=\"S.Encoder.Executing\">执行命令</s:String>\n    <s:String x:Key=\"S.Encoder.Processing\">正在处理第 {0} 帧</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing.Second\">准备第二次</s:String>\n    <s:String x:Key=\"S.Encoder.Processing.Second\">正在处理第 {0} 帧 - 第二次</s:String>\n    <s:String x:Key=\"S.Encoder.CreatingFile\">创建文件</s:String>\n    <s:String x:Key=\"S.Encoder.Analyzing\">分析不变的像素</s:String>\n    <s:String x:Key=\"S.Encoder.SavingAnalysis\">保存分析结果</s:String>\n    <s:String x:Key=\"S.Encoder.OpenFile\">打开文件</s:String>\n    <s:String x:Key=\"S.Encoder.ExploreFolder\">显示文件夹</s:String>\n    <s:String x:Key=\"S.Encoder.Remove\">从列表中移除</s:String>\n    <s:String x:Key=\"S.Encoder.Details\">显示详细信息</s:String>\n    <s:String x:Key=\"S.Encoder.Dismiss\">关闭所有已完成编码的通知</s:String>\n\n    <s:String x:Key=\"S.Encoder.Copy.Image\">复制静止图片</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Filename\">复制文件名</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Folder\">复制文件夹路径</s:String>\n    <s:String x:Key=\"S.Encoder.Copy.Link\">复制链接</s:String>\n    \n    <!--Command output-->\n    <s:String x:Key=\"S.Encoder.Command.Title\">ScreenToGif - 命令输出</s:String>\n    <s:String x:Key=\"S.Encoder.Command.Header\">命令输出</s:String>\n    \n    <!--Notifications-->\n    <s:String x:Key=\"S.Notifications\">通知</s:String>\n    <s:String x:Key=\"S.Notifications.Dismiss\">关闭所有通知</s:String>\n    \n    <!--Editor-->\n    <s:String x:Key=\"S.Editor.Title\">ScreenToGif - 编辑器</s:String>\n    <s:String x:Key=\"S.Editor.File\">文件</s:String>\n    <s:String x:Key=\"S.Editor.Home\">主页</s:String>\n    <s:String x:Key=\"S.Editor.Playback\">播放</s:String>\n    <s:String x:Key=\"S.Editor.Edit\">编辑</s:String>\n    <s:String x:Key=\"S.Editor.Image\">图像</s:String>\n    <s:String x:Key=\"S.Editor.Transitions\">过渡</s:String>\n    <s:String x:Key=\"S.Editor.Statistics\">统计</s:String>\n    <s:String x:Key=\"S.Editor.Options\">选项</s:String>\n    <s:String x:Key=\"S.Editor.Help\">帮助</s:String>\n    <s:String x:Key=\"S.Editor.Extras\">附加</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable\">一个新的更新可用！</s:String>\n    <s:String x:Key=\"S.Editor.UpdateAvailable.Info\">单击此处以了解更多信息。</s:String>\n    <s:String x:Key=\"S.Editor.FrameNumbersInfo\">总帧数、已选帧数、已选帧索引</s:String>\n    \n    <!--Editor • Loading-->\n    <s:String x:Key=\"S.Editor.Preparing\">正在准备帧</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingFiles\">加载无效 - 您不能一次导入多个文件。请只选择一个文件。</s:String>\n    <s:String x:Key=\"S.Editor.InvalidLoadingProjects\">加载无效 - 您不能一次加载多个项目。请只选择一个项目。</s:String>\n    \n    <!--Editor • File dialogs (does not work with new line characters)-->\n    <s:String x:Key=\"S.Editor.File.OpenMedia\">打开媒体（图像或视频）文件</s:String>\n    <s:String x:Key=\"S.Editor.File.OpenMediaProject\">打开媒体（图像或视频）或项目文件</s:String>\n    <s:String x:Key=\"S.Editor.File.All\">所有支持的文件</s:String>\n    <s:String x:Key=\"S.Editor.File.Image\">图像</s:String>\n    <s:String x:Key=\"S.Editor.File.Video\">视频</s:String>\n\n    <s:String x:Key=\"S.Editor.File.Apng\">PNG 动画</s:String>\n    <s:String x:Key=\"S.Editor.File.Gif\">GIF 动画</s:String>\n    <s:String x:Key=\"S.Editor.File.Webp\">WebP 动画</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Avi\">AVI 视频</s:String>\n    <s:String x:Key=\"S.Editor.File.Mkv\">Matroska 视频</s:String>\n    <s:String x:Key=\"S.Editor.File.Mov\">MOV 视频</s:String>\n    <s:String x:Key=\"S.Editor.File.Mp4\">MP4 视频</s:String>\n    <s:String x:Key=\"S.Editor.File.Webm\">WebM 视频</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Image.Bmp\">BMP 图像</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Jpeg\">JPEG 图像</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Png\">PNG 图像，所有选择图像</s:String>\n    <s:String x:Key=\"S.Editor.File.Image.Zip\">ZIP 文件，所有选择图像</s:String>\n    \n    <s:String x:Key=\"S.Editor.File.Project\">ScreenToGif 项目</s:String>\n    <s:String x:Key=\"S.Editor.File.Project.Zip\">ScreenToGif 项目（Zip）</s:String>\n    <s:String x:Key=\"S.Editor.File.Psd\">PSD 文件</s:String>\n    \n    <!--Editor • Welcome-->\n    <s:String x:Key=\"S.Editor.Welcome.New\">转到“文件 > 新录制”来开始新录制</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Import\">拖入图片、视频或项目来导入</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.ThankYou\">非常感谢您使用我的应用！</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Size\">帧率越低，颜色数或帧之间的变化越小，尺寸越小</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Contact\">您希望联系我们？打开“选项 > 关于”可以找到联系方式</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.Trouble\">遇到问题了？请通过“反馈”工具联系我</s:String>\n    <s:String x:Key=\"S.Editor.Welcome.NewRecorder\">您想试试新版录像机界面吗？转到“选项 > 录像机”以启用</s:String>\n    \n    <!--Editor • File tab • New-->\n    <s:String x:Key=\"S.Editor.File.New.Recording\">录制</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Webcam\">摄像头&#x0d;录制</s:String>\n    <s:String x:Key=\"S.Editor.File.New.Board\">画板录制</s:String>\n    <s:String x:Key=\"S.Editor.File.Blank\">空白动画</s:String>\n    <s:String x:Key=\"S.Editor.File.New\">新建</s:String>\n    \n    <!--Editor • File tab • Insert-->\n    <s:String x:Key=\"S.Editor.File.Insert.Recording\">录制</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Webcam\">摄像头&#x0d;录制</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Board\">白板&#x0d;录制</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert.Media\">媒体</s:String>\n    <s:String x:Key=\"S.Editor.File.Insert\">插入</s:String>\n    \n    <!--Editor • File tab • Save/Discard-->\n    <s:String x:Key=\"S.Editor.File.Save\">另存为</s:String>\n    <s:String x:Key=\"S.Editor.File.Load\">媒体或&#x0d;项目</s:String>\n    <s:String x:Key=\"S.Editor.File.LoadRecent\">最近项目</s:String>\n    <s:String x:Key=\"S.Editor.File.SaveProject\">另存为项目</s:String>\n    <s:String x:Key=\"S.Editor.File.Discard\">放弃项目</s:String>\n    \n    <!--Editor • Home tab • Action Stack-->\n    <s:String x:Key=\"S.Editor.Home.ActionStack\">操作</s:String>\n    <s:String x:Key=\"S.Editor.Home.Undo\">撤消</s:String>\n    <s:String x:Key=\"S.Editor.Home.Redo\">重做</s:String>\n    <s:String x:Key=\"S.Editor.Home.Reset\">重置</s:String>\n    \n    <!--Editor • Home tab • Clipboard-->\n    <s:String x:Key=\"S.Editor.Home.Clipboard\">剪贴板</s:String>\n    <s:String x:Key=\"S.Editor.Home.Clipboard.Show\">显示剪贴板</s:String>\n    <s:String x:Key=\"S.Editor.Home.Paste\">粘贴</s:String>\n    <s:String x:Key=\"S.Editor.Home.Cut\">剪切</s:String>\n    <s:String x:Key=\"S.Editor.Home.Copy\">复制</s:String>\n    \n    <!--Editor • Home tab • Zoom-->\n    <s:String x:Key=\"S.Editor.Home.Zoom\">缩放</s:String>\n    <s:String x:Key=\"S.Editor.Home.SizeToContent\">根据内容&#x0d;调整窗口</s:String>\n    <s:String x:Key=\"S.Editor.Home.FitImage\">适合图像</s:String>\n    \n    <!--Editor • Home tab • Select-->\n    <s:String x:Key=\"S.Editor.Home.Select\">选择</s:String>\n    <s:String x:Key=\"S.Editor.Home.SelectAll\">全选</s:String>\n    <s:String x:Key=\"S.Editor.Home.GoTo\">转到</s:String>\n    <s:String x:Key=\"S.Editor.Home.Inverse\">反选</s:String>\n    <s:String x:Key=\"S.Editor.Home.Deselect\">取消选择</s:String>\n    \n    <!--Editor • Playback tab • Playback-->\n    <s:String x:Key=\"S.Editor.Playback.Playback\">播放</s:String>\n    <s:String x:Key=\"S.Editor.Playback.First\">首帧</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Previous\">上一帧</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Play\">播放</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Pause\">暂停</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Next\">下一帧</s:String>\n    <s:String x:Key=\"S.Editor.Playback.Last\">尾帧</s:String>\n    \n    <!--Editor • Playback tab • Playback Options-->\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Header\">播放选项</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop\">播放期间循环播放</s:String>\n    <s:String x:Key=\"S.Editor.PlaybackOptions.Loop.Info\">仅在播放期间使用。&#x0d;如果要更改用于导出 GIF 和 APNG 的循环设置，&#x0d;某些编码器的“另存为”面板中将提供该循环设置。</s:String>\n    \n    <!--Editor • Edit tab • Frames-->  \n    <s:String x:Key=\"S.Editor.Edit.Frames\">帧</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delete\">删除</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Duplicates\">移除重复</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.Reduce\">减少帧数</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Frames.SmoothLoop\">平滑循环</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeletePrevious\">删除之前所有</s:String>\n    <s:String x:Key=\"S.Editor.Edit.DeleteNext\">删除之后所有</s:String>\n    \n    <!--Editor • Edit tab • Reordering-->\n    <s:String x:Key=\"S.Editor.Edit.Reordering\">重新排列</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Reverse\">反转</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Yoyo\">反转循环</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveLeft\">左移</s:String>\n    <s:String x:Key=\"S.Editor.Edit.MoveRight\">右移</s:String>\n    \n    <!--Editor • Edit tab • Delay/Duration-->\n    <s:String x:Key=\"S.Editor.Edit.Delay\">延时（持续时间）</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Override\">重新设置</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.IncreaseDecrease\">增加/减少</s:String>\n    <s:String x:Key=\"S.Editor.Edit.Delay.Scale\">缩放</s:String>\n    \n    <!--Editor • Image • Size and Rotation-->\n    <s:String x:Key=\"S.Editor.Image.SizePosition\">大小和位置</s:String>\n    <s:String x:Key=\"S.Editor.Image.Resize\">调整大小</s:String>\n    <s:String x:Key=\"S.Editor.Image.Crop\">裁剪</s:String>\n    <s:String x:Key=\"S.Editor.Image.FlipRotate\">翻转/旋转</s:String>\n    \n    <!--Editor • Image tab • Text-->\n    <s:String x:Key=\"S.Editor.Image.Text\">文本</s:String>\n    <s:String x:Key=\"S.Editor.Image.Caption\">字幕</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeText\">自由文本</s:String>\n    <s:String x:Key=\"S.Editor.Image.TitleFrame\">标题帧</s:String>\n    <s:String x:Key=\"S.Editor.Image.KeyStrokes\">按键</s:String>\n    \n    <!--Editor • Image tab • Overlay-->\n    <s:String x:Key=\"S.Editor.Image.Overlay\">叠加层</s:String>\n    <s:String x:Key=\"S.Editor.Image.FreeDrawing\">自由绘制</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shape\">形状</s:String>\n    <s:String x:Key=\"S.Editor.Image.MouseEvents\">鼠标&#x0d;事件</s:String>\n    <s:String x:Key=\"S.Editor.Image.Watermark\">水印</s:String>\n    <s:String x:Key=\"S.Editor.Image.Cinemagraph\">微动</s:String>\n    <s:String x:Key=\"S.Editor.Image.Border\">边框</s:String>\n    <s:String x:Key=\"S.Editor.Image.Shadow\">阴影</s:String>\n    <s:String x:Key=\"S.Editor.Image.Progress\">进度</s:String>\n    <s:String x:Key=\"S.Editor.Image.Obfuscate\">模糊</s:String>\n\n    <!--Editor • Transitions tab • Styles-->\n    <s:String x:Key=\"S.Editor.Transitions.Styles\">样式</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Fade\">淡出</s:String>\n    <s:String x:Key=\"S.Editor.Transitions.Slide\">滑动</s:String>\n    \n    <!--Editor • Statistics tab-->\n    <s:String x:Key=\"S.Editor.Statistics.General\">常规</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameCount\">总帧数</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.TotalDuration\">总时长</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameSize\">帧大小</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.AverageDuration\">平均持续时间（延时）</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime\">当前时间</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.CurrentTime.Info\">基于显示的当前帧的当前时间（累积时间）。</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.FrameDpi\">帧分辨率和比例</s:String>\n    <s:String x:Key=\"S.Editor.Statistics.SelectedFrame\">所选帧</s:String>\n    \n    <!--Editor • Messages-->\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Title\">剪切操作</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Instruction\">您不能剪切所有帧。</s:String>\n    <s:String x:Key=\"S.Editor.Clipboard.InvalidCut.Message\">录制至少需要一帧。</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Title\">全部删除</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Instruction\">您确定要删除所有帧吗？</s:String>\n    <s:String x:Key=\"S.Editor.DeleteAll.Message\">此操作将放弃当前已打开的项目且无法撤消。要继续吗？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Title\">舍弃项目</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Instruction\">您确定要舍弃此项目吗？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardProject.Message\">此操作将舍弃这个项目并删除所有帧。&#x0d;您无法撤消此操作。</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Instruction\">您要舍弃以前的项目吗？</s:String>\n    <s:String x:Key=\"S.Editor.DiscardPreviousProject.Message\">如果您选择保留，以前的项目将可在“最近项目”中打开。</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Title\">删除帧</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Instruction\">您确定要删除吗？</s:String>\n    <s:String x:Key=\"S.Editor.DeleteFrames.Message\">此操作将删除 {0} 帧。&#x0d;您可以稍后撤消。</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Title\">退出编辑器</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Instruction\">您确实要退出吗？</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message\">您正在处理的项目可以在“最近项目”中再次打开。</s:String>\n    <s:String x:Key=\"S.Editor.Exiting.Message2\">您正在处理的项目可以在“最近项目”中再次打开，但不要忘记，几天后会自动删除。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Title\">拖放无效</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Instruction\">您无法一次导入多个文件</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.MultipleFiles.Message\">请只选择一个文件。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Instruction\">无法加载文件</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.Invalid.Message\">由于格式无效，无法加载该文件。</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Instruction\">您无法一次导入多个项目</s:String>\n    <s:String x:Key=\"S.Editor.DragDrop.InvalidProject.Message\">请只选择一个项目。</s:String>\n\n    <s:String x:Key=\"S.Editor.Caption.WarningNoText\">没有要应用的文本。</s:String>\n    <s:String x:Key=\"S.Editor.Caption.WarningSelection\">您必须至少选择一帧图像才能设置字幕。</s:String>\n    <s:String x:Key=\"S.Editor.FreeText.WarningSelection\">您必须至少选择一帧来应用此文本。</s:String>\n    <s:String x:Key=\"S.Editor.TitleFrame.WarningSelection\">您必须至少选择一帧才能在其旁边应用标题帧。</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningThickness\">您必须至少为一侧边框选择大于零的厚度。</s:String>\n    <s:String x:Key=\"S.Editor.Border.WarningSelection\">您必须至少选择一帧图像才能设置边框。</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Invisible\">不透明度必须大于零，以使边框有所不同。</s:String>\n    <s:String x:Key=\"S.Editor.Shadow.Warning.Behind\">将阴影深度和模糊半径设为零时，不会有任何区别，因为它会隐藏在边框的后面。</s:String>\n    <s:String x:Key=\"S.Editor.Cinemagraph.WarningNoDrawing\">您必须至少选择一个像素来应用微动效果。请在像素上描画来进行选择。</s:String>\n    <s:String x:Key=\"S.Editor.Fade.Title\">淡出过渡</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningSelection\">您必须至少选择一帧才能应用“淡出过渡”。</s:String>\n    <s:String x:Key=\"S.Editor.Fade.WarningColor\">完全透明的颜色不会对此过渡产生任何影响。</s:String>\n    <s:String x:Key=\"S.Editor.Slide.Title\">滑动过渡</s:String>\n    <s:String x:Key=\"S.Editor.Slide.WarningSelection\">您必须至少选择一帧才能应用“滑动过渡”。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames\">正在载入帧</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\">无法加载项目</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.ProjectCorrupted.Message\">无法加载这些帧，因其已经损坏或图片不在预期位置。</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\">无法加载某些帧</s:String>\n    <s:String x:Key=\"S.Editor.LoadingFrames.FramesCorrupted.Message\">无法加载这些帧，因其无法被找到或已损坏。</s:String>\n    \n    <!--Editor • Warnings-->\n    <s:String x:Key=\"S.Editor.Warning.Selection\">您必须至少选择一帧才能应用叠加层。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Ffmpeg\">找不到 FFmpeg。将其添加到 PATH 环境变量或在设置中配置其路径。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.Gifski\">找不到 Gifski。将其添加到 PATH 环境变量或在设置中配置其路径。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.LowSpace\">驱动器上没有足够的空间供应用程序存储缓存（{0}% 左右）。单击此处打开“选项” > “临时文件”，以释放一些空间。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentDpi\">您试图导入多张不同 DPI 的图片，这不被支持。其中一些图片被导入，其他的则需要单独导入。</s:String>\n    <s:String x:Key=\"S.Editor.Warning.DifferentSize\">您试图导入多张不同尺寸的图片，这不被支持。其中一些图片被导入，其他的则需要单独导入。</s:String>\n    \n    <!--Editor • Status-->\n    <s:String x:Key=\"S.Editor.RetrievingFromCache\">从缓存中检索帧</s:String>\n    <s:String x:Key=\"S.Editor.UpdatingFrames\">正在更新帧</s:String>\n    <s:String x:Key=\"S.Editor.PreparingImport\">正在准备导入</s:String>\n    <s:String x:Key=\"S.Editor.ImportingFrames\">导入帧</s:String>\n    <s:String x:Key=\"S.Editor.AnalyzingDuplicates\">分析重复项</s:String>\n    <s:String x:Key=\"S.Editor.AdjustingDuplicatesDelay\">调整延迟</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingDuplicates\">丢弃重复项</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFrames\">正在删除帧</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingFolders\">正在删除文件夹</s:String>\n    <s:String x:Key=\"S.Editor.ResizingFrames\">调整帧大小</s:String>\n    <s:String x:Key=\"S.Editor.CroppingFrames\">正在裁剪帧</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingOverlay\">正在将叠加层应用到所有帧</s:String>\n    <s:String x:Key=\"S.Editor.CreatingTitleFrame\">创建标题帧</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingFlipRotate\">正在将翻转/旋转动作应用到所有帧</s:String>\n    <s:String x:Key=\"S.Editor.ChangingDelay\">更改延时</s:String>\n    <s:String x:Key=\"S.Editor.ApplyingTransition\">正在应用过渡效果</s:String>\n    <s:String x:Key=\"S.Editor.PreparingSaving\">正在准备保存</s:String>\n    <s:String x:Key=\"S.Editor.CancelDiscard\">取消载入并放弃项目。</s:String>\n    <s:String x:Key=\"S.Editor.FindingLoop\">寻找完美循环</s:String>\n    <s:String x:Key=\"S.Editor.DiscardingLoop\">丢弃循环中未使用的帧</s:String>\n\n    <!--Editor • Frame list-->\n    <s:String x:Key=\"S.Editor.List.Frame\">帧：</s:String>\n    <s:String x:Key=\"S.Editor.List.OpenImage\">打开图像</s:String>\n    <s:String x:Key=\"S.Editor.List.ExploreFolder\">浏览文件夹</s:String>\n    \n    <!--Editor • Go to-->\n    <s:String x:Key=\"S.GoTo.Title\">转到帧</s:String>\n    <s:String x:Key=\"S.GoTo.Instruction\">转到帧（0 到 {0}）</s:String>\n    \n    <!--Editor • Context menu-->\n    <s:String x:Key=\"S.Context.SaveAs\">另存为</s:String>\n    <s:String x:Key=\"S.Context.RemoveFrames\">删除所选帧</s:String>\n    <s:String x:Key=\"S.Context.NewRecording\">开始新的屏幕录制</s:String>\n    <s:String x:Key=\"S.Context.NewWebcamRecording\">开始新的摄像头录制</s:String>\n    <s:String x:Key=\"S.Context.NewBoardRecording\">新建画板录制项目</s:String>\n    <s:String x:Key=\"S.Context.NewBlankAnimation\">新建项目</s:String>\n    <s:String x:Key=\"S.Context.NewFromMediaProject\">从媒体或项目新建</s:String>\n   \n    <!--Editor • Hints-->\n    <s:String x:Key=\"S.Hint.NewRecording\">已创建新的录制</s:String>\n    <s:String x:Key=\"S.Hint.NewWebcamRecording\">已创建新的摄像头录制</s:String>\n    <s:String x:Key=\"S.Hint.NewBoardRecording\">已创建新的画板录制</s:String>\n    <s:String x:Key=\"S.Hint.NewAnimation\">已创建新项目</s:String>\n    <s:String x:Key=\"S.Hint.Undo\">撤销执行</s:String>\n    <s:String x:Key=\"S.Hint.Reset\">已重置</s:String>\n    <s:String x:Key=\"S.Hint.Redo\">已重做</s:String>\n    <s:String x:Key=\"S.Hint.Cut\">已剪切 {0} 帧</s:String>\n    <s:String x:Key=\"S.Hint.Copy\">已复制 {0} 帧</s:String>\n    <s:String x:Key=\"S.Hint.Paste\">已粘贴 {0} 帧</s:String>\n    <s:String x:Key=\"S.Hint.Zoom\">设置为缩放 {0}%</s:String>\n    <s:String x:Key=\"S.Hint.SelectAll\">已选择所有帧</s:String>\n    <s:String x:Key=\"S.Hint.SelectSingle\">已选择第 {0} 帧</s:String>\n    <s:String x:Key=\"S.Hint.SelectInverse\">已反选</s:String>\n    <s:String x:Key=\"S.Hint.Deselect\">已取消选择所有帧</s:String>\n    <s:String x:Key=\"S.Hint.DeleteFrames\">已删除 {0} 帧</s:String>\n    <s:String x:Key=\"S.Hint.Reverse\">已反转帧列表</s:String>\n    <s:String x:Key=\"S.Hint.Yoyo\">已应用反转循环效果</s:String>\n    <s:String x:Key=\"S.Hint.MoveLeft\">已将帧向左移动</s:String>\n    <s:String x:Key=\"S.Hint.MoveRight\">已将帧向右移动</s:String>\n    <s:String x:Key=\"S.Hint.Resize\">已调整帧的大小</s:String>\n    <s:String x:Key=\"S.Hint.Crop\">已裁剪帧</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate\">已将帧翻转/旋转</s:String>\n    <s:String x:Key=\"S.Hint.FlipRotate2\">翻转动作适用于所选帧，旋转动作适用于所有帧</s:String>\n    <s:String x:Key=\"S.Hint.ApplyAll\">此操作将应用于所有帧</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelected\">此操作将应用于所选帧</s:String>\n    <s:String x:Key=\"S.Hint.ApplySelectedOrAll\">此操作将应用于所有或选定的帧，具体取决于您的设置</s:String>\n    <s:String x:Key=\"S.Hint.Cinemagraph\">影片基于第一帧应用于所有帧</s:String>\n    <s:String x:Key=\"S.Hint.Overlay\">已应用叠加层</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame\">已创建标题帧</s:String>\n    <s:String x:Key=\"S.Hint.TitleFrame2\">标题帧将在所选帧之前插入</s:String>\n    <s:String x:Key=\"S.Hint.Delay\">已改变持续时间（延时）</s:String>\n    <s:String x:Key=\"S.Hint.Transition\">已插入过渡效果</s:String>\n    <s:String x:Key=\"S.Hint.Reduce\">已减少帧率</s:String>\n    <s:String x:Key=\"S.Hint.Duplicates\">重复删除</s:String>\n    \n    <!--Editor • Action panel-->\n    <s:String x:Key=\"S.Action.Hide\">隐藏</s:String>\n    <s:String x:Key=\"S.Action.Apply\">应用</s:String>\n    <s:String x:Key=\"S.Action.Open\">打开</s:String>\n    <s:String x:Key=\"S.Action.Save\">保存</s:String>\n    <s:String x:Key=\"S.Action.Cancel\">取消</s:String>\n\n    <!--Editor • Recent projects-->\n    <s:String x:Key=\"S.Recent.Projects\">最近项目</s:String>\n    <s:String x:Key=\"S.Recent.Searching\">正在查找最近项目...</s:String>\n    <s:String x:Key=\"S.Recent.Date\">创建日期</s:String>\n    <s:String x:Key=\"S.Recent.Frames\">总帧数</s:String>\n    <s:String x:Key=\"S.Recent.Warning.NoSelection\">未选择任何项目。请从列表中选择并载入。</s:String>\n    <s:String x:Key=\"S.Recent.Warning.SameProject\">该编辑器实例已经在显示该项目。</s:String>\n    <s:String x:Key=\"S.Recent.Warning.AnotherEditor\">该项目已由另一个编辑器实例打开。如果项目已在另一个编辑器上打开，则无法再次打开该项目。</s:String>\n    \n    <!--Editor • Clipboard-->\n    <s:String x:Key=\"S.Clipboard.Entries\">剪贴板条目</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry\">剪贴板条目：</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Image\">{0} 张图像</s:String>\n    <s:String x:Key=\"S.Clipboard.Entry.Images\">{0} 张图像</s:String>\n    <s:String x:Key=\"S.Clipboard.Explore\">浏览内容</s:String>\n    <s:String x:Key=\"S.Clipboard.Remove\">移除</s:String>\n    <s:String x:Key=\"S.Clipboard.Behavior\">粘贴行为</s:String>\n    <s:String x:Key=\"S.Clipboard.Before\">所选帧之前</s:String>\n    <s:String x:Key=\"S.Clipboard.After\">所选帧之后</s:String>\n    \n    <!--Editor • Resize-->\n    <s:String x:Key=\"S.Resize.Difference\">差异</s:String>\n    <s:String x:Key=\"S.Resize.Dpi\">DPI</s:String>\n    <s:String x:Key=\"S.Resize.Options\">选项</s:String>\n    <s:String x:Key=\"S.Resize.Pixels\">像素 (px)</s:String>\n    <s:String x:Key=\"S.Resize.Percent\">百分率 (%)</s:String>\n    <s:String x:Key=\"S.Resize.Dpi2\">DPI：</s:String>\n    <s:String x:Key=\"S.Resize.KeepAspect\">保持长宽比</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality\">质量：</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Fant\">高档 • 最高质量</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Linear\">线性 • 较低质量</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.NearestNeighbor\">最近邻 • 质量更低，速度更快</s:String>\n    <s:String x:Key=\"S.Resize.ScalingQuality.Info\">缩放质量</s:String>\n    <s:String x:Key=\"S.Resize.Warning\">您必须选择其他值以应用“调整大小”操作。</s:String>\n    \n    <!--Editor • Crop-->\n    <s:String x:Key=\"S.Crop.Points\">点</s:String>\n    <s:String x:Key=\"S.Crop.Top\">顶部：</s:String>\n    <s:String x:Key=\"S.Crop.Left\">左侧：</s:String>\n    <s:String x:Key=\"S.Crop.Bottom\">底部：</s:String>\n    <s:String x:Key=\"S.Crop.Right\">右侧：</s:String>\n    <s:String x:Key=\"S.Crop.Warning\">裁剪大小必须小于当前帧大小。</s:String>\n    <s:String x:Key=\"S.Crop.Warning.Bigger\">裁剪大小必须大于 10x10 像素。</s:String>\n    \n    <!--Editor • Flip/rotate-->\n    <s:String x:Key=\"S.FlipRotate.FlipHorizontal\">水平翻转</s:String>\n    <s:String x:Key=\"S.FlipRotate.FlipVertical\">垂直翻转</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateLeft\">向左旋转 90º</s:String>\n    <s:String x:Key=\"S.FlipRotate.RotateRight\">向右旋转 90º</s:String>\n    \n    <!--Editor • Reduce framerate-->\n    <s:String x:Key=\"S.Reduce.Header\">减少帧率</s:String>\n    <s:String x:Key=\"S.Reduce.Factor\">系数：</s:String>\n    <s:String x:Key=\"S.Reduce.Count\">删除帧数：</s:String>\n    <s:String x:Key=\"S.Reduce.Delay\">延迟调整：</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.NoAdjustment\">不调整</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Previous\">与前一帧相加</s:String>\n    <s:String x:Key=\"S.Reduce.Delay.Evenly\">与其余帧平均相加</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll\">降低整个项目的帧率。</s:String>\n    <s:String x:Key=\"S.Reduce.ApplyToAll.Info\">如果未选中该选项，则必须选择多个连续帧，且大于去除因子。</s:String>\n    <s:String x:Key=\"S.Reduce.Info\">每隔 {1} 帧删除 {0} 帧。（不计算删除的帧）</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NoSelection\">您必须选择要应用帧率降低的帧（或选中要应用于整个项目的选项）。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.NonConsecutive\">选择的帧列表必须是连续的。您不能在选定的帧中保留一些未选择的帧。</s:String>\n    <s:String x:Key=\"S.Reduce.Warning.SmallerThanFactor\">为了使功能可以删除任何东西，帧的选择必须比除去因子越大。</s:String>\n    \n    <!--Editor • Remove duplicates-->\n    <s:String x:Key=\"S.RemoveDuplicates.Header\">删除重复项</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Similarity\">相似度 (%)：</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal\">帧删除：</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.First\">删除第一帧</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Removal.Last\">删除最后一帧</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay\">延迟调整：</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.NoAdjustment\">不调整</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Average\">使用平均值</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Delay.Sum\">使用总和</s:String>\n    <s:String x:Key=\"S.RemoveDuplicates.Info\">此操作会分析每个帧（逐个像素），并删除至少为 {0} %的类似于其最近邻的帧。&#x0d;您可以选择是否要调整帧的延迟（显示持续时间）。</s:String>\n\n    <!--Editor • Smooth Loop-->\n    <s:String x:Key=\"S.SmoothLoop.Header\">创建平滑循环</s:String>\n    <s:String x:Key=\"S.SmoothLoop.StartThreshold\">先忽略：</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From\">比较自：</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.Last\">结束</s:String>\n    <s:String x:Key=\"S.SmoothLoop.From.First\">开始</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Info\">尝试查找至少 {0} % 类似于开始帧的帧，并删除所有后续帧。&#x0d;您可以选择是否要忽略一些初始帧，并从开始（阈值之后）或结束开始比较。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.Threshold\">忽略的帧数需要小于总帧数。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.NoLoopFound\">无法使用所选设置创建平滑循环。</s:String>\n    <s:String x:Key=\"S.SmoothLoop.Warning.AlreadySmoothLoop\">您已经有一个基于所选设置的平滑循环。</s:String>\n    \n    <!--Editor • Captions-->\n    <s:String x:Key=\"S.Caption.Text\">文本</s:String>\n    <s:String x:Key=\"S.Caption.Font\">字体</s:String>\n    <s:String x:Key=\"S.Caption.Family\">家族：</s:String>\n    <s:String x:Key=\"S.Caption.Style\">样式：</s:String>\n    <s:String x:Key=\"S.Caption.Weight\">字重：</s:String>\n    <s:String x:Key=\"S.Caption.Size\">字号：</s:String>\n    <s:String x:Key=\"S.Caption.Color\">颜色：</s:String>\n    <s:String x:Key=\"S.Caption.BackgroundColor\">背景颜色：</s:String>\n    <s:String x:Key=\"S.Caption.Outline\">轮廓</s:String>\n    <s:String x:Key=\"S.Caption.Thickness\">粗细：</s:String>\n    <s:String x:Key=\"S.Caption.Layout\">布局</s:String>\n    <s:String x:Key=\"S.Caption.Vertical\">垂直：</s:String>\n    <s:String x:Key=\"S.Caption.Horizontal\">水平：</s:String>\n    <s:String x:Key=\"S.Caption.TextAlignment\">对齐方式：</s:String>\n    <s:String x:Key=\"S.Caption.TextDecoration\">装饰：</s:String>\n\n    <!--Editor • Key strokes-->\n    <s:String x:Key=\"S.KeyStrokes\">击键</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Keys\">按键</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Separator\">分隔符</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit\">编辑键盘按键</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers\">忽略 Ctrl、Alt、Shift 和 Windows 键，而不将其用作修饰符。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreModifiers.Info\">它将忽略诸如“Control”这样单独的按键, 但它不会忽略“Control + C”。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected\">忽略软件模拟的按键。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.IgnoreInjected.Info\">仅记录用户实际输入的按键。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Extend\">延长按键显示时间</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Earlier\">早些时候开始展示击键。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.By\">长度 (ms)</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Warning.None\">您在此次录制中没有按过键。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Title\">ScreenToGif - 键盘按键编辑器</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Number\">帧数</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Keys\">检测到键盘按键</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Remove\">移除键盘按键</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Add\">添加一个键盘按键：</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower\">小写字母。</s:String>\n    <s:String x:Key=\"S.KeyStrokes.Edit.Lower.Info\">它使您可以插入小写的单个字母。</s:String>\n\n    <!--Editor • Free drawing-->\n    <s:String x:Key=\"S.FreeDrawing.Mode\">模式</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Pen\">画笔</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Eraser\">橡皮擦</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Select\">选择</s:String>\n    <s:String x:Key=\"S.FreeDrawing.StrokeEraser\">笔画橡皮擦</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Width\">宽度：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Height\">高度：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Tip\">笔尖：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Rectangle\">长方形</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Ellipse\">椭圆</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Other\">其它：</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Highlighter\">荧光笔</s:String>\n    <s:String x:Key=\"S.FreeDrawing.FitToCurve\">转为曲线</s:String>\n    <s:String x:Key=\"S.FreeDrawing.Warning.NoDrawing\">没有可以应用到所选帧的绘图。</s:String>\n    <s:String x:Key=\"S.FreeDrawing.WarningSelection\">您必须至少选择一帧来应用这条“自由绘图”。</s:String>\n    \n    <!--Editor • Shapes-->\n    <s:String x:Key=\"S.Shapes.Mode.Insert\">插入</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes\">形状</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Radius\">半径：</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes\">破折号：</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Dashes.Info\">控制虚线的大小和间隙的大小。&#10;您可以设置多个大小来创建精致的破折号样式。&#10;默认值为“1 0”或为空，表示没有间隙的破折号。</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.ResetRotatio\">重置旋转</s:String>\n    <s:String x:Key=\"S.Shapes.Shapes.Remove\">移除</s:String>\n    <s:String x:Key=\"S.Shapes.Fill\">填充</s:String>\n\n    <!--Editor • Mouse events-->\n    <s:String x:Key=\"S.MouseEvents\">鼠标事件</s:String>\n    <s:String x:Key=\"S.MouseHighlight.Color\">鼠标高亮颜色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Left\">左键颜色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Middle\">中键颜色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.Right\">右键颜色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.FirstExtra\">第1个额外按钮颜色：</s:String>\n    <s:String x:Key=\"S.MouseClicks.Color.SecondExtra\">第2个额外按钮颜色：</s:String>\n    \n    <!--Editor • Watermark-->\n    <s:String x:Key=\"S.Watermark.Image\">图像</s:String>\n    <s:String x:Key=\"S.Watermark.File\">文件：</s:String>\n    <s:String x:Key=\"S.Watermark.File.Nothing\">未选择</s:String>\n    <s:String x:Key=\"S.Watermark.Opacity\">不透明度：</s:String>\n    <s:String x:Key=\"S.Watermark.Select\">选择图像</s:String>\n    <s:String x:Key=\"S.Watermark.WarningNoImage\">您必须选择将应用到所选帧的图像。</s:String>\n    <s:String x:Key=\"S.Watermark.WarningSelection\">您必须至少选择一帧才能应用水印。</s:String>\n    \n    <!--Editor • Border-->\n    <s:String x:Key=\"S.Border.Appearance\">外观</s:String>\n    <s:String x:Key=\"S.Border.Info\">使用负值使边框扩大图像。这样做时，边框将应用于所有帧。&#10;如果不使用负值，则边框将仅应用于选定的帧。</s:String>\n\n    <!--Editor • Shadow-->\n    <s:String x:Key=\"S.Shadow.ShadowColor\">阴影颜色：</s:String>\n    <s:String x:Key=\"S.Shadow.BackgroundColor\">背景颜色：</s:String>\n    <s:String x:Key=\"S.Shadow.Direction\">方向：</s:String>\n    <s:String x:Key=\"S.Shadow.BlurRadius\">模糊半径：</s:String>\n    <s:String x:Key=\"S.Shadow.Depth\">深度：</s:String>\n    \n    <!--Editor • Obfuscate-->\n    <s:String x:Key=\"S.Obfuscate.Type.Pixelate\">像素化</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Blur\">模糊</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Darken\">加深</s:String>\n    <s:String x:Key=\"S.Obfuscate.Type.Lighten\">变亮</s:String>\n    <s:String x:Key=\"S.Obfuscate.Options\">混淆选项</s:String>\n    <s:String x:Key=\"S.Obfuscate.PixelSize\">像素大小：</s:String>\n    <s:String x:Key=\"S.Obfuscate.BlurLevel\">模糊级别：</s:String>\n    <s:String x:Key=\"S.Obfuscate.DarkenLevel\">加深级别：</s:String>\n    <s:String x:Key=\"S.Obfuscate.LightenLevel\">变亮级别：</s:String>\n    <s:String x:Key=\"S.Obfuscate.UseAverage\">计算每个像素块的平均颜色。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Invert\">应用模糊到选择的倒数。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Smoothness\">平滑度</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info\">使用选择工具选择应像素化的矩形区域。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Info2\">使用选择工具选择不应混淆的帧部分。</s:String>\n    <s:String x:Key=\"S.Obfuscate.Warning\">您没有选择任何区域。请使用选择工具选择应像素化的矩形区域。</s:String>\n    \n    <!--Editor • Progress-->\n    <s:String x:Key=\"S.Progress.Type\">类型</s:String>\n    <s:String x:Key=\"S.Progress.Type.Bar\">条</s:String>\n    <s:String x:Key=\"S.Progress.Type.Text\">文本</s:String>\n    <s:String x:Key=\"S.Progress.Precision\">精确:度 </s:String>\n    <s:String x:Key=\"S.Progress.Precision.Minutes\">分钟</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Seconds\">秒</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Milliseconds\">毫秒</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Percentage\">百分比</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Count\">帧编号</s:String>\n    <s:String x:Key=\"S.Progress.Precision.DateOfRecording\">实际日期/时间</s:String>\n    <s:String x:Key=\"S.Progress.Precision.Custom\">自定义</s:String>\n    <s:String x:Key=\"S.Progress.Precision.ShowTotal\">显示总数</s:String>\n    <s:String x:Key=\"S.Progress.Format\">格式：</s:String>\n    <s:String x:Key=\"S.Progress.Format.Header\">格式</s:String>\n    <s:String x:Key=\"S.Progress.Format.Milliseconds\">$ms = 毫秒</s:String>\n    <s:String x:Key=\"S.Progress.Format.Seconds\">$s = 秒</s:String>\n    <s:String x:Key=\"S.Progress.Format.Minutes\">$m = 分钟</s:String>\n    <s:String x:Key=\"S.Progress.Format.Percentage\">$p = 百分比</s:String>\n    <s:String x:Key=\"S.Progress.Format.FrameNumber\">$f = 帧数</s:String>\n    <s:String x:Key=\"S.Progress.Format.Totals\">总计：</s:String>\n    <s:String x:Key=\"S.Progress.Format.Examples\">示例：</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date\">您可以使用 .Net Framework 中的日期和时间格式。&#x0d;该规范可在下面的两个链接中找到。</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Standard\">标准格式</s:String>\n    <s:String x:Key=\"S.Progress.Format.Date.Custom\">自定义格式</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber\">从字数：</s:String>\n    <s:String x:Key=\"S.Progress.Precision.StartNumber.ToolTip\">从该所选编号开始计数帧编号。</s:String>\n    <s:String x:Key=\"S.Progress.Orientation\">方向：</s:String>\n    \n    <!--Editor • Delay-->\n    <s:String x:Key=\"S.Delay.Update\">延迟更新</s:String>\n    <s:String x:Key=\"S.Delay.Mode\">延迟模式：</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Override\">覆盖（以毫秒为单位）</s:String>\n    <s:String x:Key=\"S.Delay.Mode.IncreaseDecrease\">增加或减少（以毫秒为单位）</s:String>\n    <s:String x:Key=\"S.Delay.Mode.Scale\">缩放（以 % 为单位）</s:String>\n    <s:String x:Key=\"S.Delay.NewValue\">新值</s:String>\n    <s:String x:Key=\"S.Delay.Minimum10Ms\">每帧最少 10ms。</s:String>\n    <s:String x:Key=\"S.Delay.DecreaseIncrease\">增加或减少值</s:String>\n    <s:String x:Key=\"S.Delay.Scale\">缩放值</s:String>\n    <s:String x:Key=\"S.Delay.Override.Info\">此新值将替换所有选定帧的持续时间（延时）。该值应保持在 10ms 和 25500ms 之间。</s:String>\n    <s:String x:Key=\"S.Delay.IncreaseDecrease.Info\">该值将增加或减少所选每帧的持续时间（延时）。&#x0d;您可以增加或减少介于 -10.000ms 和 10.000ms 之间的值，但每帧的持续时间将介于 10ms 和 25.500ms 之间</s:String>\n    <s:String x:Key=\"S.Delay.Scale.Info\">通过百分比值缩放每个选定帧的持续时间（延迟）。&#x0d;您可以通过在 1% 和 1000% 之间选择一个值来缩放每个帧的持续时间，但每个帧的最终持续时间将限制在 10ms 到 25500ms 之间</s:String>\n\n    <!--Editor • Cinemagraph-->\n    <s:String x:Key=\"S.Cinemagraph.Info\">使用笔在不应保持静态（即在不同帧之间变化）的像素上描画来进行选择</s:String>\n\n    <!--Editor • Transitions-->\n    <s:String x:Key=\"S.Transitions.Length\">过渡长度</s:String>\n    <s:String x:Key=\"S.Transitions.Delay\">过渡延时</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo\">淡出到...</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Frame\">下一帧</s:String>\n    <s:String x:Key=\"S.Transitions.FadeTo.Color\">颜色</s:String>\n    <s:String x:Key=\"S.Transitions.Color\">颜色</s:String>\n    <s:String x:Key=\"S.Transitions.Info\">转换将应用于已选帧与下一帧之间</s:String>\n\n    <!--Editor • Save as-->\n    <s:String x:Key=\"S.SaveAs.Type\">文件类型</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Format\">输出文件的格式。</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Preset\">导出预设包含所有当前显示的设置。&#10;通过下面的按钮管理您的导出预设。</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Animated\">动画图像</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Video\">视频</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Frames\">帧</s:String>\n    <s:String x:Key=\"S.SaveAs.Type.Other\">其它</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Apng\">Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.Apng.Info\">动画便携式网络图形</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif\">GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.Gif.Info\">图形交换格式</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp\">WebP</s:String>\n    <s:String x:Key=\"S.SaveAs.Webp.Info\">Web 图片</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Avi\">AVI</s:String>\n    <s:String x:Key=\"S.SaveAs.Avi.Info\">音频视频交错</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv\">MKV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mkv.Info\">Matroska</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov\">MOV</s:String>\n    <s:String x:Key=\"S.SaveAs.Mov.Info\">QuickTime 文件格式</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4\">MP4</s:String>\n    <s:String x:Key=\"S.SaveAs.Mp4.Info\">Mpeg-4</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm\">WebM</s:String>\n    <s:String x:Key=\"S.SaveAs.Webm.Info\">Web 影片</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Bmp\">BMP</s:String>\n    <s:String x:Key=\"S.SaveAs.Bmp.Info\">位图</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg\">JPEG</s:String>\n    <s:String x:Key=\"S.SaveAs.Jpeg.Info\">联合图像专家组</s:String>\n    <s:String x:Key=\"S.SaveAs.Png\">PNG</s:String>\n    <s:String x:Key=\"S.SaveAs.Png.Info\">便携式网络图形</s:String>\n    \n    <s:String x:Key=\"S.SaveAs.Project\">项目</s:String>\n    <s:String x:Key=\"S.SaveAs.Project.Info\">ScreenToGif 项目</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd\">PSD 文件</s:String>\n    <s:String x:Key=\"S.SaveAs.Psd.Info\">Photoshop 文件</s:String>\n    \n    <!--Editor • Save as > Presets-->\n    <s:String x:Key=\"S.SaveAs.Presets\">预设：</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Default\">默认</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Add\">添加一个新的导出预设。</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Save\">保存</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Edit\">编辑</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Remove\">移除</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Reset\">重置</s:String>\n    \n    <!--Editor • Save as > Presets > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Title\">删除预设</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Instruction\">您确定要删除预设吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Delete.Message\">此操作无法撤消。&#10;&#10;您要删除所选的预设吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Title\">重置预设</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Instruction\">您确定要重置预设吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Presets.Ask.Reset.Message\">此操作无法撤消。&#10;&#10;是否要将所选预设重置为其默认设置？</s:String>\n    \n    <!--Editor • Save as > Encoder-->\n    <s:String x:Key=\"S.SaveAs.Encoder\">编码器</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Quantizer\">编码器和量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Info\">编码器负责生成输出文件。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif\">ScreenToGif</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.ScreenToGif.Info\">内置编码器。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft\">KGy SOFT</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.KGySoft.Info\">KGy SOFT GIF 编码器。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System\">系统</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.System.Info\">由系统提供的编码器。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg\">FFmpeg</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Ffmpeg.Info\">外部编码器，由 FFmpeg.org 开发。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski\">Gifski</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Gifski.Info\">外部编码器，由 Gif.ski 开发。</s:String>\n    <s:String x:Key=\"S.SaveAs.Encoder.Options\">编码器选项</s:String>\n\n    <!--Editor • Save as > FFmpeg-->\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters\">启用高级模式。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.UseParameters.Info\">手动输入参数以控制编码器。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters\">参数：</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Info\">将传递给 FFmpeg 的参数列表。&#10;&#10;特殊参数：&#10;{I} 是输入路径（帧）。&#10;{O} 是输出路径（ 导出的文件）。&#10;{W} 是帧的宽度。&#10;{H} 是帧的高度。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Parameters.Pass\">要进行 2 遍编码，只需添加“ -pass 2”即可。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview\">预览</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Preview.Info\">预览将传递给 FFmpeg 的参数列表。</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Code\">编解码器文档</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Format\">格式化文档</s:String>\n    <s:String x:Key=\"S.SaveAs.Ffmpeg.Help.Filters\">筛选文档</s:String>\n    \n    <!--Editor • Save as > Gif options-->\n    <s:String x:Key=\"S.SaveAs.GifOptions\">Gif 选项</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Info\">色彩还原算法（量化）</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural\">神经网络</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Neural.Info\">高保真量化。速度较慢，但适合较高数量的颜色。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree\">八位</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Octree.Info\">适用于色彩较少的动画。速度更快，但可能会产生色带。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut\">中位数</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MedianCut.Info\">不如八位好，但速度较慢。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale\">灰度</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.Grayscale.Info\">使用固定的灰度调色板，因此速度更快。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed\">最常用的颜色</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quantizer.MostUsed.Info\">只需在选择帧中提取最常用的颜色。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling\">采样：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Sampling.Info\">采样因子：&#10;值为 1 会产生更好的 GIF 效果，但渲染速度会较慢。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Quality\">质量：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors\">颜色：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Colors.Info\">最大颜色数（每帧）</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable\">使用全局色表</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.GlobalColorTable.Info\">可能会降低 GIF 的质量和/或大小。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Best\">最好</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Fastest\">最快</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster\">使用更快的编码过程。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Gifski.Faster.Info\">可能会降低 GIF 的质量。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Loop\">循环：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Looped\">循环 GIF</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatForever\">永远重复</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.RepeatCount\">重复计数</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable\">启用透明度</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Enable.Info\">启用完全透明模式，使 GIF 的背景完全透明。&#10;如果启用此选项，则色键替换过程将被忽略。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick\">选择显示为透明的颜色。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Transparency.Pick.Info\">如果选择了一种颜色，它将被转换为透明的，并且在生成的 GIF 中将显示为透明。&#10;如果未选择颜色，则所有透明颜色（Alpha = 0%）将正常显示为透明。rmally.</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged\">检测未更改的像素</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.DetectUnchanged.Info\">通过分析和检测帧之间未更改的像素，&#10;可以将仅必要的部分保存到 GIF。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma\">用色度键替换这些像素</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.PaintWithChroma.Info\">重复/不变的像素将被此色度键替换，&#10;从而可以减少每帧使用的颜色。</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.ChromaKey\">色度键：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither\">抖动：</s:String>\n    <s:String x:Key=\"S.SaveAs.GifOptions.Dither.Scale\">Bayer 缩放：</s:String>\n\n    <!--Editor • Save as > KGy SOFT options-->\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer\">量化</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor\">背景颜色：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BackColor.Info\">被所选量化器视为不透明的具有 Alpha（透明度）的像素将在获得量化颜色之前与此颜色混合。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold\">Alpha 阈值：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info\">确定输入的 Alpha 值，在该值下量化的颜色将是透明的。&#x0d;&#x0a;如果为 0，则结果将永远不会透明。 如果为 255，将只有完全透明的像素被视为透明。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold\">白色阈值：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info\">确定最低的输入亮度，以考虑结果颜色为白色。&#x0d;&#x0a;它会影响结果的亮度。不过，误差扩散抖动可能会与此参数的值互补。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping\">直接映射</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.DirectMapping.Info\">选中后，量化后的颜色由直接映射决定，而不是查找最近的调色板条目。&#x0d;&#x0a;它加快了量化速度，但最终可能会产生更高的对比度结果。不过，误差扩散抖动可能会与此参数的值互补。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize\">调色板大小：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PaletteSize.Info\">确定每帧调色板的最大大小。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel\">自定义位等级。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info\">选中后，可以手动配置位等级。&#x0d;&#x0a;⚠️警告：最高位等级可能需要大量内存！</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.BitLevel.Info\">更高的值意味着更高的精度，更大的目标色彩空间，更慢的处理速度和更大的内存占用。&#x0d;&#x0a;例如，如果为 1，则结果不能超过 8 种颜色，如果为 2，则不能超过 64 种颜色。&#x0d;&#x0a;对于八叉树和吴氏量化器，它还会影响单色阴影的最大数量。&#x0d;&#x0a;例如，如果为5（这是吴氏量化器的默认值），就只能区分出32种单色调。&#x0d;&#x0a;⚠️注意：吴氏量化器的最大值至少要消耗650MB内存。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace\">线性颜色空间</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info\">选中时，一些操作（与背景色的alpha混合、量化、抖动、查找调色板中最近的颜色）是在线性颜色空间而不是sRGB空间中执行的。&#x0d;&#x0a;在线性颜色空间中工作较慢，但提供了更好的质量结果，尤其是当量化器仅使用几种颜色时。&#x0d;&#x0a;&#x0d;&#x0a;⚠️ 备注：当只使用几种颜色时，调整大小的预览亮度可能不正确，因为WPF在sRGB颜色空间中执行调整大小。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite\">黑白</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.BlackAndWhite.Info\">被修复的黑白 1 位调色板。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4\">灰度 4 色</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale4.Info\">被修复的 2 位调色板，其中包含 4 个灰度条目。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16\">灰度 16 色</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale16.Info\">被修复的 4 位调色板，其中包含 16 个灰度条目。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale\">灰度 256 色</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Grayscale.Info\">被修复的 8 位调色板，其中包含 256 个灰度条目。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette\">系统默认 4 位调色板</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault4BppPalette.Info\">使用了标准的 16 种 sRGB 颜色的被修复的 4 位调色板。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette\">系统默认 8 位调色板</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.SystemDefault8BppPalette.Info\">被修复的 8 位调色板，包括‘网页安全’颜色和透明度。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332\">RGB 332 调色板</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.PredefinedColorsQuantizer.Rgb332.Info\">使用 RGB 332 色彩空间的被修复的 8 位调色板</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree\">八叉树量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Octree.Info\">使用八叉树算法优化每个帧的调色板。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut\">中位数切割量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.MedianCut.Info\">用中位数切割算法对每一帧的调色板进行优化。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu\">吴氏量化器</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Quantizer.OptimizedPaletteQuantizer.Wu.Info\">使用吴小林的算法优化每一帧的调色板。</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer\">抖动</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength\">强度：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Strength.Info\">抖动的强度，或为 0 以自动校准强度。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed\">种子：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.Seed.Info\">用于生成特定随机抖动模式的整数种子。&#x0d;&#x0a;留空以对每一帧使用随机种子。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None\">无</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.None.Info\">帧在不抖动的情况下进行量化。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing\">锯齿形加工</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info\">选中后，误差传播方向会从一条线改变到另一条线。&#x0d;&#x0a; 这有助于减少误差扩散抖动的纹波效应。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2\">Bayer 2x2 （有序）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer2X2.Info\">2x2 Bayer矩阵模式。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3\">Bayer 3x3（有序）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer3X3.Info\">3x3 Bayer矩阵模式。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4\">Bayer 4x4（有序）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer4X4.Info\">4x4 Bayer矩阵模式。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8\">Bayer 8x8（有序）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.Bayer8X8.Info\">8x8 Bayer矩阵模式。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone\">点状半色调（有序）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.DottedHalftone.Info\">带有点状半色调图形的 8x8 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise\">蓝噪声（有序）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.OrderedDitherer.BlueNoise.Info\">带有蓝色噪声模式的 64x64 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson\">Atkinson（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Atkinson.Info\">Bill Atkinson 的 4x3 矩阵，具有 6 个有效值。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes\">Burkes（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Burkes.Info\">D. Burkes 的 5x2 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg\">Floyd-Steinberg（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.FloydSteinberg.Info\">Floyd 和 Steinberg 的原始 3x2 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke\">Jarvis-Judice-Ninke（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.JarvisJudiceNinke.Info\">Jarvis，Juce 和 Ninke 的 5x3 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3\">Sierra 3（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra3.Info\">Frankie Sierra 的 5x3 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2\">Sierra 2（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Sierra2.Info\">Frankie Sierra 的 5x2 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite\">Sierra Lite（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.SierraLite.Info\">Frankie Sierra 的 3x2 矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce\">Stevenson-Arce（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.StevensonArce.Info\">Stevenson 和 Arce 的 7x4 六边形矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki\">Stucki（误差扩散）</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.ErrorDiffusionDitherer.Stucki.Info\">Stucki 的5x3矩阵。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer\">随机噪声</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.RandomNoiseDitherer.Info\">随机白噪声。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer\">交错梯度噪声</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Ditherer.InterleavedGradientNoiseDitherer.Info\">公式生成的非随机梯度噪声。</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview\">预览</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame\">显示当前帧。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info\">选中后，预览将显示当前帧，而不是标准图像示例。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Refresh\">由于当前设置对内存的要求较高，自动预览被禁用。单击以刷新预览。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Preview.Error\">无法生成预览：{0}&#x0d;&#x0a;单击以尝试再次生成预览。</s:String>\n\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation\">动画设置</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop\">无限循环。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.EndlessLoop.Info\">选中后，动画将无限循环。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong\">重复。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.PingPong.Info\">选中后，动画将重复播放。&#x0d;&#x0a;这是通过复制帧来实现的，这意味着更大的文件大小和更长的编码时间。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount\">重复计数：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.LoopCount.Info\">指定动画将播放多少次。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames\">允许增量帧。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info\">选中后，在编码过程中将尝试检测未更改的像素。&#x0d;&#x0a;与优化的量化器一起使用时，此选项可使一个帧具有的颜色超过 256 种。&#x0d;&#x0a;如果量化器不使用透明度并且未选中“允许剪辑帧”，则忽略此选项。&#x0d;&#x0a;&#x0d;&#x0a;⚠️ 备注：此选项可能会在颜色或抖动模式中造成明显的伪影。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance\">增量容差：</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.DeltaTolerance.Info\">指定检测更改像素时的最大容差。&#x0d;&#x0a;如果为 0，则不允许任何差异。&#x0d;&#x0a;如果为 255，则可能会添加一些没有内容的帧（甚至所有帧）。&#x0d;&#x0a;优化的量化器的合理范围处于 0 到 16 之间。具有固定颜色的量化器可以用稍大的值进行抖动。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.HighDeltaTolerance\">如果增量容差太高，可能会导致质量较差。单击以重置增量容差。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames\">允许剪辑帧。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info\">选中后，允许编码器添加比实际分辨率小的帧。&#x0d;&#x0a;如果未选中“允许增量帧”，则仅允许剪切可能的透明边框。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowDeltaIgnored\">“允许增量帧”将被忽略，因为当前配置未使用 Alpha并且未选中“允许剪辑帧”。单击以启用“允许剪辑帧”。</s:String>\n    <s:String x:Key=\"S.SaveAs.KGySoft.Animation.AllowClippedIgnored\">允许剪辑帧无效，因为当前配置未使用 Alpha 并且未选中“允许增量帧”。</s:String>\n\n    <!--Editor • Save as > Apng options-->\n    <s:String x:Key=\"S.SaveAs.ApngOptions\">Apng 选项</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction\">预测：</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.None\">无</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Sub\">子</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Up\">向上</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Average\">平均</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Prediction.Mixed\">混合</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.Looped\">循环 Apng</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.DetectUnchanged\">检测不变的像素。</s:String>\n    <s:String x:Key=\"S.SaveAs.ApngOptions.PaintTransparent\">将所有未更改的像素置为透明色。</s:String>\n    \n    <!--Editor • Save as > Webp options-->\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset\">预设：</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.None\">无</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Default\">默认</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Picture\">图片</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Photo\">图像</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Drawing\">绘画</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Icon\">图标</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.CodecPreset.Text\">文本</s:String>\n    <s:String x:Key=\"S.SaveAs.WebpOptions.Lossless\">使用无损模式。</s:String>\n    \n    <!--Editor • Save as > Video options-->\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Normal\">正常</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Advanced\">高级</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Mode.Info\">编码器参数的配置方法：&#10;正常：使用标准 UI 控件。&#10;高级：使用文本框键入参数。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec\">编解码器：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Codec.Info\">视频编码器，负责将原始像素转换为输出文件。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset\">预设：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.None\">无</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VerySlow\">非常慢</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slower\">缓慢</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Slow\">慢</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Medium\">中等</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Fast\">快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Faster\">更快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.VeryFast\">非常快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.SuperFast\">超快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.UltraFast\">超级快</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Quality\">质量</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Balanced\">均衡</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Speed\">速度</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Default\">默认</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Lossless\">无损</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\">无损（高性能）</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hp\">高性能</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Hq\">高质量</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Bd\">蓝光光盘</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatency\">低延迟</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\">低延迟（高性能）</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\">低延迟（高质量）</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.CodecPreset.Info\">编码速度与压缩率之比，较低的预设可能会给您带来更好的压缩率（每个文件大小的质量）。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration\">硬件配件：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Off\">关闭</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.On\">开启</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Auto\">自动选择</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.HardwareAcceleration.Info\">控制专用硬件（视频图形）的使用。&#10;关闭：不使用专用硬件。&#10;开启：使用专用的硬件，并允许您选择特殊的编码器。&#10;自动：使用专用硬件，并在可能的情况下自动选择合适的编码器。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat\">像素格式：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.PixelFormat.Auto\">自动</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync\">垂直同步：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Info\">视频同步方法。&#10;自动：根据多路复用器（格式）功能在 1 和 2 之间进行选择。&#10;直通：将每个帧及其时间戳传递给编码器。&#10;常数：将复制帧。&#10;变量：将帧以其时间戳传递或丢弃，以防止 2 个帧具有相同的时间戳。&#10;丢弃：与传递相同，但会丢弃所有时间戳，使编码器根据帧频生成新的时间戳。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Passthrough\">直通</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Cfr\">恒定帧率</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Vfr\">可变帧率</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Vsync.Drop\">降低</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate\">帧速率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Film\">电影</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Framerate.Custom\">自定义</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Pass\">通过：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Crf.Info\">恒定速率因子。&#10;质量和速率控制设置。&#10;如果您不想设置此属性，请将其保留为空。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel\">质量级别：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.QualityLevel.Info\">较小的值表示更好的质量。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate\">比特率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Info\">目标视频比特率。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode\">比特率模式：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Constant\">不变</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Mode.Variable\">可变</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum\">最小速率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Minimum.Info\">最小比特率容限。&#10;在使用 CBR 模式时最有用。&#10;如果不希望设置此属性，请将其留空或设置为零。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum\">最大速率：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Maximum.Info\">最大比特率容限。&#10;也需要设置缓冲区大小。&#10;如果您不想设置此属性，则将其保留为空或设置为零。</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer\">缓冲区大小：</s:String>\n    <s:String x:Key=\"S.SaveAs.VideoOptions.Bitrate.Buffer.Info\">为速率控制缓冲区的大小设置速率。&#10;如果您不希望设置此属性，请将其保留为空白或设置为零。</s:String>\n\n    <!--Editor • Save as > Image options-->\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip\">压缩图片</s:String>\n    <s:String x:Key=\"S.SaveAs.ImageOptions.Zip.Info\">导出压缩文件夹中的图像。</s:String>\n    \n    <!--Editor • Save as > Psd options-->\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress\">压缩图像</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Compress.Info\">使用 RLE 算法压缩图像数据。</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline\">保存时间轴数据。</s:String>\n    <s:String x:Key=\"S.SaveAs.PsdOptions.Timeline.Info\">导出帧的时间，而不仅仅是帧。</s:String>\n    \n    <!--Editor • Save as > Save options-->\n    <s:String x:Key=\"S.SaveAs.SaveOptions\">保存选项</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.Partial\">部分导出</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.PickFolder\">将文件保存到您选择的文件夹</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode\">覆盖文件？</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn\">警告</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Warn.Info\">仅当存在另一个同名文件时警告。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt\">提示</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info\">询问用户是否要覆盖此文件。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow\">允许</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.OverwriteMode.Allow.Info\">简单地覆盖文件。</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ProjectToo\">同时另存为项目（相同文件夹与文件名）</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.UploadFile\">上传文件</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard\">复制到剪贴板</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File\">文件</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.File.Info\">将输出文件复制到剪贴板</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath\">文件夹路径</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info\">将输出文件的文件夹路径复制到剪贴板</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath\">文件路径</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info\">将输出文件的文件路径复制到剪贴板</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link\">链接</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.CopyToClipboard.Link.Info\">将上传服务生成的链接复制到剪贴板</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands\">执行编码后置命令</s:String>\n    <s:String x:Key=\"S.SaveAs.SaveOptions.ExecuteCommands.Info\">输入在编码后执行的命令。&#x0d;若要执行多条命令，请在不同行内输入不同命令，一行输入一条。&#x0d;宏：&#x0d;{p} = 输出文件路径。&#x0d;{f} = 输出文件夹路径。&#x0d;{u} = 上传文件的 URL 地址。</s:String>\n    \n    <!--Editor • Save As > Partial export-->\n    <s:String x:Key=\"S.SaveAs.Partial\">部分导出</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode\">模式：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Info\">选择部分导出方法。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression\">表达式</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Expression.Info\">根据一个简单的表达式导出动画的各个部分。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames\">帧范围</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Frames.Info\">仅导出帧范围内的动画的一部分。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time\">时间范围</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Time.Info\">在时间范围内仅导出动画的一部分。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection\">选择</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Info\">仅导出时间轴中所选帧。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.None\">未选择帧。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Singular\">1 帧已选择。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Mode.Selection.Plural\">{0} 帧已选择。</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.From\">从：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.To\">到：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression\">表达式：</s:String>\n    <s:String x:Key=\"S.SaveAs.Partial.Expression.Info\">输入以逗号分隔的帧号或以减号分隔的帧序列：&#10;1, 3, 4, 6 - 9</s:String>\n    \n    <!--Editor • Save as > File-->\n    <s:String x:Key=\"S.SaveAs.File\">文件</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Location\">目标文件夹</s:String>\n    <s:String x:Key=\"S.SaveAs.File.SelectFolder\">选择输出目录</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Choose\">选择位置。&#x0d;按Shift键并点击，&#x0d;也可选择文件名。</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Format\">格式</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Name\">文件名。在\"?\"之间插入日期/时间格式</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Animation\">动画</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Increase\">增加文件编号</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Decrease\">减小文件编号</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Exists\">已存在同名文件</s:String>\n    <s:String x:Key=\"S.SaveAs.File.Clipboard\">保存到剪贴板</s:String>\n    \n    <!--Editor • Save as > Warnings-->\n    <s:String x:Key=\"S.SaveAs.Warning.Type\">您需要选择保存文件的位置（文件夹、剪贴板或上传到某处）</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Extension\">您没有选择文件扩展名。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.Empty\">选择高级模式时，必须在参数字段中输入参数。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Ffmpeg.MissingPath\">参数字段中缺少特殊参数 {I}（输入）和/或 {O}（输出）。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Commands.Empty\">您需要在命令文本框中输入编码后置命令才能执行他们。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.NoSelection\">如果可以选择仅导出选定的帧，则必须至少选择一帧。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Partial.InvalidExpression\">部分导出项目的表达式无效。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.None\">没有选择上传服务。您需要选择一个服务。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Upload.NotAuthorized\">您无法上传到选定的服务，因为它没有被授权。转到 选项 > 上传服务 授权此应用程序。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Copy.Link\">您不能选择复制链接的选项，因为您没有设置上传文件。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder\">您需要选择输出文件夹。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.NotExists\">输出目录不存在。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Folder.Invalid\">输出文件夹包含一个或多个无效字符。请选择一个有效的文件夹。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename\">您需要选择一个文件名。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Filename.Invalid\">输出文件名包含一个或多个无效字符。请选择有效的文件名。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite\">文件名已被使用。请设置“覆盖”或选择另外的文件名。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Overwrite.Project\">已经有一个具有相同文件名的项目。设置为覆盖或选择另一个文件名或文件夹。</s:String>\n    <s:String x:Key=\"S.SaveAs.Warning.Canceled\">该操作被取消。</s:String>\n    \n    <!--Editor • Save As > Upload-->\n    <s:String x:Key=\"S.SaveAs.Upload\">上传</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Info\">选择上传预设，其中包含有关用于上传的服务的详细信息。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Limit\">该上传服务增加限制。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Add\">添加一个新的上传预设。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Edit\">编辑上传预设设置。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.History\">查看此预设的上传历史记录。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Remove\">删除当前选择的上传预设。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Title\">选择一个上传预设</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Select.Description\">从此列表中选择一个。</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Title\">没有适用于此格式的上传预设</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Unavailable.Description\">使用下面的按钮添加预设。</s:String>\n    \n    <!--Editor • Save as > Upload > Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Title\">删除上传预设</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Instruction\">您确定要删除上传预设吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Upload.Ask.Delete.Message\">此操作无法撤消。&#10;&#10;您要删除所选的上传预设吗？</s:String>\n    \n    <!--Save As • Dialogs-->\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Title\">导出帧</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Instruction\">您确定要导出这些帧吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Multiple.Message\">此操作将直接导出 {0} 帧到所选文件夹中。</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Title\">覆盖</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Instruction\">你想要覆盖此文件吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.Overwrite.Message\">该文件夹中已存在名为‘{0}’的文件。\\r\\n您要覆盖它吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\">你想要覆盖此文件吗？</s:String>\n    <s:String x:Key=\"S.SaveAs.Dialogs.OverwriteMultiple.Message\">此文件夹中已存在一个或多个同名文件。\\r\\n你想要覆盖他们吗？</s:String>\n    \n    <!--Command Preview-->\n    <s:String x:Key=\"S.CommandPreviewer.Title\">命令预览器</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Command\">命令</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Input\">输入路径</s:String>\n    <s:String x:Key=\"S.CommandPreviewer.Output\">输出路径</s:String>\n    \n    <!--Feedback-->\n    <s:String x:Key=\"S.Feedback.Feedback\">反馈</s:String>\n    <s:String x:Key=\"S.Feedback.Send\">发送</s:String>\n    <s:String x:Key=\"S.Feedback.Preview\">预览</s:String>\n    <s:String x:Key=\"S.Feedback.Header\">发送反馈</s:String>\n    <s:String x:Key=\"S.Feedback.Title\">标题</s:String>\n    <s:String x:Key=\"S.Feedback.Message\">信息</s:String>\n    <s:String x:Key=\"S.Feedback.Message.Info\">如果您遇到错误，请别忘了一步一步地向我说明复现错误的步骤。</s:String>\n    <s:String x:Key=\"S.Feedback.Type\">反馈类型</s:String>\n    <s:String x:Key=\"S.Feedback.Suggestion\">建议</s:String>\n    <s:String x:Key=\"S.Feedback.IssueBug\">问题/Bug</s:String>\n    <s:String x:Key=\"S.Feedback.YourEmail\">您的电子邮件（可选）</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Title\">请输入反馈标题</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Message\">请输入反馈信息</s:String>\n    <s:String x:Key=\"S.Feedback.Warning.Email\">您需要输入电子邮件，以接收开发人员的回复。</s:String>\n    <s:String x:Key=\"S.Feedback.Sending\">后台发送中... 此窗口将在稍后关闭。</s:String>\n    <s:String x:Key=\"S.Feedback.Attachments\">附件（可选，最大 20MB）</s:String>\n    <s:String x:Key=\"S.Feedback.AddAttachments\">添加附件</s:String>\n    <s:String x:Key=\"S.Feedback.RemoveAttachments\">删除所有附件</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo1\">我可以理解英语</s:String>\n    <s:String x:Key=\"S.Feedback.LanguageInfo2\">和葡萄牙语（巴西和欧洲）。</s:String>\n    <s:String x:Key=\"S.Feedback.Preview.Info\">这是您要发送的内容，以及所有附件。</s:String>\n    \n    <!--Troubleshoot-->\n    <s:String x:Key=\"S.Troubleshoot.Title\">疑难解答</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows\">是否有任何窗口不见了？</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Info\">如果缺少任何窗口（屏幕外），&#x0d;使用下面的选项重置其当前和启动位置。</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Current\">这是每个窗口当前所在的位置：</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Next\">以下是每个窗口下次打开的位置：</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.BringBack\">将所有窗口移动到主屏幕。</s:String>\n    <s:String x:Key=\"S.Troubleshoot.Windows.Reset\">重置所有窗口的启动位置。</s:String>\n   \n    <!--FontStyles-->\n    <s:String x:Key=\"S.FontStyles.Normal\">正常</s:String>\n    <s:String x:Key=\"S.FontStyles.Italic\">斜体</s:String>\n    <s:String x:Key=\"S.FontStyles.Oblique\">伪斜体</s:String>\n    \n    <!--FontWeight-->\n    <s:String x:Key=\"S.FontWeights.Black\">黑体 (Black)</s:String>\n    <s:String x:Key=\"S.FontWeights.Bold\">粗体</s:String>\n    <s:String x:Key=\"S.FontWeights.DemiBold\">半粗 (Demi Bold)</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBlack\">超黑</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraBold\">超粗</s:String>\n    <s:String x:Key=\"S.FontWeights.ExtraLight\">超细</s:String>\n    <s:String x:Key=\"S.FontWeights.Heavy\">黑体 (Heavy)</s:String>\n    <s:String x:Key=\"S.FontWeights.Light\">细体</s:String>\n    <s:String x:Key=\"S.FontWeights.Medium\">中等</s:String>\n    <s:String x:Key=\"S.FontWeights.Normal\">常规</s:String>\n    <s:String x:Key=\"S.FontWeights.Regular\">标准</s:String>\n    <s:String x:Key=\"S.FontWeights.SemiBold\">半粗 (Demi Bold)</s:String>\n    <s:String x:Key=\"S.FontWeights.Thin\">特细</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBlack\">超黑 (Ultra Black)</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraBold\">超粗 (Ultra Bold)</s:String>\n    <s:String x:Key=\"S.FontWeights.UltraLight\">超细 (Ultra Light)</s:String>\n    \n    <!--VerticalAlignment-->\n    <s:String x:Key=\"S.VerticalAlignment.Top\">顶部</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Center\">中心</s:String>\n    <s:String x:Key=\"S.VerticalAlignment.Bottom\">底部</s:String>\n    <s:String x:Key=\"S.Alignment.Stretch\">拉伸</s:String>\n\n    <!--HorizontalAlignment-->\n    <s:String x:Key=\"S.HorizontalAlignment.Left\">左侧</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Center\">中心</s:String>\n    <s:String x:Key=\"S.HorizontalAlignment.Right\">右侧</s:String>\n    \n    <!--Orientation-->\n    <s:String x:Key=\"S.Orientation.Horizontal\">水平</s:String>\n    <s:String x:Key=\"S.Orientation.Vertical\">垂直</s:String>\n    \n    <!--TextAlignment-->\n    <s:String x:Key=\"S.TextAlignment.Left\">左侧</s:String>\n    <s:String x:Key=\"S.TextAlignment.Right\">右侧</s:String>\n    <s:String x:Key=\"S.TextAlignment.Center\">中心</s:String>\n    <s:String x:Key=\"S.TextAlignment.Justify\">对齐</s:String>\n    \n    <!--TextDecoration-->\n    <s:String x:Key=\"S.TextDecorations.None\">无</s:String>\n    <s:String x:Key=\"S.TextDecorations.Underline\">下划线</s:String>\n    <s:String x:Key=\"S.TextDecorations.Strikethrough\">删除线</s:String>\n    <s:String x:Key=\"S.TextDecorations.OverLine\">上划线</s:String>\n    <s:String x:Key=\"S.TextDecorations.Baseline\">底线</s:String>\n</ResourceDictionary>\n"
  },
  {
    "path": "ScreenToGif/Resources/Settings.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xmlns:c=\"clr-namespace:System.Collections;assembly=mscorlib\"\n                    xmlns:i=\"clr-namespace:System.IO.Compression;assembly=System\"\n                    xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n                    xmlns:t=\"clr-namespace:ScreenToGif.ViewModel.Tasks;assembly=ScreenToGif.ViewModel\">\n\n    <!--ScreenToGif default configuration resource dictionary-->\n    <!--Empty String values are suppressed to avoid exceptions-->\n\n    <!--Startup-->\n    <s:Double x:Key=\"StartupTop\">NaN</s:Double>\n    <s:Double x:Key=\"StartupLeft\">NaN</s:Double>\n    <s:Double x:Key=\"StartupWidth\">NaN</s:Double>\n    <s:Double x:Key=\"StartupHeight\">NaN</s:Double>\n    <WindowState x:Key=\"StartupWindowState\">Normal</WindowState>\n\n    <!--Recorder-->\n    <s:Int32 x:Key=\"RecorderWidth\">518</s:Int32>\n    <s:Int32 x:Key=\"RecorderHeight\">269</s:Int32>\n    <s:Double x:Key=\"RecorderTop\">NaN</s:Double>\n    <s:Double x:Key=\"RecorderLeft\">NaN</s:Double>\n    <s:Int32 x:Key=\"LatestFps\">15</s:Int32>\n    <Rect x:Key=\"SelectedRegion\">Empty</Rect>\n    <s:Double x:Key=\"SelectedRegionScale\">1.0</s:Double>\n    <s:Int32 x:Key=\"RecorderModeIndex\">0</s:Int32>\n\n    <!--Board-->\n    <s:Int32 x:Key=\"BoardWidth\">616</s:Int32>\n    <s:Int32 x:Key=\"BoardHeight\">447</s:Int32>\n    <Color x:Key=\"BoardColor\">#FF000000</Color>\n    <s:Int32 x:Key=\"BoardStylusHeight\">10</s:Int32>\n    <s:Int32 x:Key=\"BoardStylusWidth\">10</s:Int32>\n    <StylusTip x:Key=\"BoardStylusTip\">Ellipse</StylusTip>\n    <s:Boolean x:Key=\"BoardFitToCurve\">False</s:Boolean>\n    <s:Boolean x:Key=\"BoardIsHighlighter\">False</s:Boolean>\n    <s:Int32 x:Key=\"BoardEraserHeight\">10</s:Int32>\n    <s:Int32 x:Key=\"BoardEraserWidth\">10</s:Int32>\n    <StylusTip x:Key=\"BoardEraserStylusTip\">Rectangle</StylusTip>\n\n    <!--Insert-->\n    <Color x:Key=\"InsertFillColor\">#FFFFFFFF</Color>\n    <s:Int32 x:Key=\"LatestFpsImport\">15</s:Int32>\n    \n    <!--Video source-->\n    <s:Int32 x:Key=\"VideoImporter\">0</s:Int32>\n    \n    <!--Feedback-->\n    <!--<s:String x:Key=\"LatestFeedbackEmail\"></s:String>-->\n    \n    <!--Options • Application-->\n    <s:Boolean x:Key=\"SingleInstance\">True</s:Boolean>\n    <s:Boolean x:Key=\"StartMinimized\">False</s:Boolean>\n    <s:Int32 x:Key=\"StartUp\">0</s:Int32>\n    <s:Boolean x:Key=\"NotifyWhileClosingApp\">True</s:Boolean>\n    <s:Boolean x:Key=\"DisableHardwareAcceleration\">False</s:Boolean>\n    <s:Boolean x:Key=\"CheckForTranslationUpdates\">True</s:Boolean>\n    <s:Boolean x:Key=\"CheckForUpdates\">True</s:Boolean>\n    <s:Boolean x:Key=\"DownloadWithMeteredNetwork\">True</s:Boolean>\n    <s:Boolean x:Key=\"PortableUpdate\">False</s:Boolean>\n    <s:Boolean x:Key=\"ForceUpdateAsAdmin\">False</s:Boolean>\n    <s:Boolean x:Key=\"InstallUpdates\">True</s:Boolean>\n    <s:Boolean x:Key=\"PromptToInstall\">True</s:Boolean>\n    <s:Boolean x:Key=\"ShowNotificationIcon\">True</s:Boolean>\n    <s:Boolean x:Key=\"KeepOpen\">False</s:Boolean>\n    <s:Int32 x:Key=\"LeftClickAction\">2</s:Int32>\n    <s:Int32 x:Key=\"LeftOpenWindow\">1</s:Int32>\n    <s:Int32 x:Key=\"DoubleLeftClickAction\">1</s:Int32>\n    <s:Int32 x:Key=\"DoubleLeftOpenWindow\">2</s:Int32>\n    <s:Int32 x:Key=\"MiddleClickAction\">3</s:Int32>\n    <s:Int32 x:Key=\"MiddleOpenWindow\">0</s:Int32>\n    <s:Boolean x:Key=\"WorkaroundQuota\">True</s:Boolean>\n    \n    <!--Options • Recorder-->\n    <s:Boolean x:Key=\"NewRecorder\">False</s:Boolean>\n    <s:Boolean x:Key=\"RecorderThinMode\">False</s:Boolean>\n    <s:Boolean x:Key=\"Magnifier\">True</s:Boolean>\n    <s:Boolean x:Key=\"AnimateRecorderBorder\">False</s:Boolean>\n    <s:Boolean x:Key=\"EnableSelectionPanning\">True</s:Boolean>\n    <s:Boolean x:Key=\"RecorderCompactMode\">False</s:Boolean>\n    <s:Boolean x:Key=\"RecorderDisplayDiscard\">False</s:Boolean>\n    <s:Boolean x:Key=\"SelectionImprovement\">True</s:Boolean>\n    <s:Boolean x:Key=\"FallThroughOtherScreens\">False</s:Boolean>\n    <e:CaptureFrequencies x:Key=\"CaptureFrequency\">PerSecond</e:CaptureFrequencies>\n    <s:Int32 x:Key=\"PlaybackDelayManual\">1000</s:Int32>\n    <s:Int32 x:Key=\"TriggerDelayManual\">0</s:Int32>\n    <s:Int32 x:Key=\"PlaybackDelayInteraction\">500</s:Int32>\n    <s:Int32 x:Key=\"TriggerDelayInteraction\">0</s:Int32>\n    <s:Int32 x:Key=\"PlaybackDelayMinute\">66</s:Int32>\n    <s:Int32 x:Key=\"PlaybackDelayHour\">66</s:Int32>\n    <s:Boolean x:Key=\"FixedFrameRate\">False</s:Boolean>\n    <s:Boolean x:Key=\"OnlyCaptureChanges\">False</s:Boolean>\n    <s:Boolean x:Key=\"UseDesktopDuplication\">False</s:Boolean>\n    <s:Boolean x:Key=\"UseMemoryCache\">False</s:Boolean>\n    <i:CompressionLevel x:Key=\"CaptureCompression\">Optimal</i:CompressionLevel>\n    <s:Int32 x:Key=\"MemoryCacheSize\">250</s:Int32>\n    <s:Boolean x:Key=\"PreventBlackFrames\">True</s:Boolean>\n    <e:AppThemes x:Key=\"MainTheme\">Light</e:AppThemes>\n    <Color x:Key=\"RecorderBackground\">#FFFFFFFF</Color>\n    <Color x:Key=\"RecorderForeground\">#FF000000</Color>\n    <Rect x:Key=\"BoardGridSize\">0,0,20,20</Rect>\n    <Color x:Key=\"BoardGridBackground\">#FFFFFFFF</Color>\n    <Color x:Key=\"BoardGridColor1\">#FFFFFFFF</Color>\n    <Color x:Key=\"BoardGridColor2\">#FFFFFFFF</Color>\n    <s:Boolean x:Key=\"ShowCursor\">True</s:Boolean>\n    <s:Boolean x:Key=\"UsePreStart\">False</s:Boolean>\n    <s:Int32 x:Key=\"PreStartValue\">3</s:Int32>\n    <s:Boolean x:Key=\"ForceGarbageCollection\">True</s:Boolean>\n    <s:Boolean x:Key=\"RemoteImprovement\">True</s:Boolean>\n\n    <s:Boolean x:Key=\"DisplayThirdsGuideline\">False</s:Boolean>\n    <s:Double x:Key=\"ThirdsGuidelineThickness\">0.5</s:Double>\n    <Color x:Key=\"ThirdsGuidelineColor\">#C89D9D9D</Color>\n    <DoubleCollection x:Key=\"ThirdsGuidelineStrokeDashArray\">1 0</DoubleCollection>\n    <s:Boolean x:Key=\"DisplayCrosshairGuideline\">False</s:Boolean>\n    <s:Double x:Key=\"CrosshairGuidelineThickness\">1.0</s:Double>\n    <Color x:Key=\"CrosshairGuidelineColor\">#A8F0FF00</Color>\n    <DoubleCollection x:Key=\"CrosshairGuidelineStrokeDashArray\">5 5</DoubleCollection>\n\n    <s:Boolean x:Key=\"RecorderRememberSize\">True</s:Boolean>\n    <s:Boolean x:Key=\"RecorderRememberPosition\">True</s:Boolean>\n    <s:Boolean x:Key=\"CursorFollowing\">False</s:Boolean>\n    <s:Int32 x:Key=\"FollowBuffer\">20</s:Int32>\n    <s:Int32 x:Key=\"FollowBufferInvisible\">20</s:Int32>\n    <s:Boolean x:Key=\"NotifyRecordingDiscard\">True</s:Boolean>\n\n    <!--Options • Editor-->\n    <Rect x:Key=\"GridSize\">0,0,20,20</Rect>\n    <Color x:Key=\"GridColor1\">#FFF5F5F5</Color>\n    <Color x:Key=\"GridColor2\">#FFF0F0F0</Color>\n    <s:Boolean x:Key=\"DisplayEncoder\">False</s:Boolean>\n    <s:Boolean x:Key=\"EditorExtendChrome\">False</s:Boolean>\n    <s:Boolean x:Key=\"AutomaticallySizeOnContent\">False</s:Boolean>\n    <s:Boolean x:Key=\"AutomaticallyFitImage\">True</s:Boolean>\n    <s:Boolean x:Key=\"NotifyFrameDeletion\">True</s:Boolean>\n    <s:Boolean x:Key=\"NotifyProjectDiscard\">True</s:Boolean>\n    <s:Boolean x:Key=\"NotifyWhileClosingEditor\">True</s:Boolean>\n    <s:Boolean x:Key=\"TripleClickSelection\">False</s:Boolean>\n    <s:Boolean x:Key=\"DrawOutlineOutside\">True</s:Boolean>\n    <s:Boolean x:Key=\"DropFramesDuringPreviewIfBehind\">False</s:Boolean>\n    <s:Boolean x:Key=\"SetHistoryLimit\">True</s:Boolean>\n    <s:Int32 x:Key=\"HistoryLimit\">50</s:Int32>\n    <s:Boolean x:Key=\"SyncPathFolder\">True</s:Boolean>\n    <s:Boolean x:Key=\"SyncPathFilename\">True</s:Boolean>\n    <s:Boolean x:Key=\"SyncPathForSameType\">True</s:Boolean>\n    \n    <!--Options • Automated Tasks-->\n    <c:ArrayList Capacity=\"1\" x:Key=\"AutomatedTasksList\">\n        <t:MouseEventsViewModel HighlightForegroundColor=\"#000000FF\"  LeftButtonForegroundColor=\"#78FFFF00\" RightButtonForegroundColor=\"#78FF0000\" MiddleButtonForegroundColor=\"#7800FFFF\" FirstExtraButtonForegroundColor=\"#78FF0080\" SecondExtraButtonForegroundColor=\"#78FF8000\" Width=\"12\" Height=\"12\" TaskType=\"MouseEvents\"/>\n    </c:ArrayList>\n\n    <!--Options • Shortcuts-->\n    <Key x:Key=\"RecorderShortcut\">None</Key>\n    <ModifierKeys x:Key=\"RecorderModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"WebcamRecorderShortcut\">None</Key>\n    <ModifierKeys x:Key=\"WebcamRecorderModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"BoardRecorderShortcut\">None</Key>\n    <ModifierKeys x:Key=\"BoardRecorderModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"EditorShortcut\">None</Key>\n    <ModifierKeys x:Key=\"EditorModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"OptionsShortcut\">None</Key>\n    <ModifierKeys x:Key=\"OptionsModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"ExitShortcut\">None</Key>\n    <ModifierKeys x:Key=\"ExitModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"StartPauseShortcut\">F7</Key>\n    <ModifierKeys x:Key=\"StartPauseModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"StopShortcut\">F8</Key>\n    <ModifierKeys x:Key=\"StopModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"DiscardShortcut\">F9</Key>\n    <ModifierKeys x:Key=\"DiscardModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <Key x:Key=\"FollowShortcut\">None</Key>\n    <ModifierKeys x:Key=\"FollowModifiers\" xml:space=\"preserve\"></ModifierKeys>\n    <ModifierKeys x:Key=\"DisableFollowModifiers\" xml:space=\"preserve\"></ModifierKeys>\n\n    <!--Options • Language-->\n    <s:String x:Key=\"LanguageCode\">auto</s:String>\n\n    <!--Options • Storage and Extras-->\n    <s:String x:Key=\"LogsFolder\">.</s:String>\n    <!--<s:String x:Key=\"TemporaryFolder\"></s:String>-->\n    <s:Boolean x:Key=\"DeleteCacheWhenClosing\">False</s:Boolean>\n    <s:Boolean x:Key=\"AskDeleteCacheWhenClosing\">True</s:Boolean>\n    <s:Boolean x:Key=\"AutomaticCleanUp\">True</s:Boolean>\n    <s:Int32 x:Key=\"AutomaticCleanUpDays\">5</s:Int32>\n\n    <!--Options • Cloud-->\n    <e:ProxyTypes x:Key=\"ProxyMode\">Disabled</e:ProxyTypes>\n    <!--<s:String x:Key=\"ProxyHost\"></s:String>-->\n    <s:Int32 x:Key=\"ProxyPort\">0</s:Int32>\n    <!--<s:String x:Key=\"ProxyUsername\"></s:String>-->\n    <!--<s:String x:Key=\"ProxyPassword\"></s:String>-->\n    <c:ArrayList x:Key=\"UploadPresets\"/>\n\n    <!--Options • Extras-->\n    <!--<s:String x:Key=\"FfmpegLocation\"></s:String>-->\n    <s:Boolean x:Key=\"HasOlderFfmpegVersion\">False</s:Boolean>\n    <e:SupportedFFmpegVersions x:Key=\"FfmpegVersion\">Version4</e:SupportedFFmpegVersions>\n    <!--<s:String x:Key=\"GifskiLocation\"></s:String>-->\n    \n    <!--Editor-->\n    <s:Double x:Key=\"EditorTop\">NaN</s:Double>\n    <s:Double x:Key=\"EditorLeft\">NaN</s:Double>\n    <s:Double x:Key=\"EditorWidth\">NaN</s:Double>\n    <s:Double x:Key=\"EditorHeight\">NaN</s:Double>\n    <WindowState x:Key=\"EditorWindowState\">Normal</WindowState>\n    <e:PasteBehaviors x:Key=\"PasteBehavior\">AfterSelected</e:PasteBehaviors>\n    <s:Boolean x:Key=\"LoopedPlayback\">True</s:Boolean>\n    \n    <!--Editor • New Animation-->\n    <Color x:Key=\"NewAnimationColor\">#FFFFFFFF</Color>\n    <s:Int32 x:Key=\"NewAnimationWidth\">500</s:Int32>\n    <s:Int32 x:Key=\"NewAnimationHeight\">200</s:Int32>\n\n    <!--Editor • Save As-->\n    <s:Boolean x:Key=\"IsSaveTypeExpanded\">True</s:Boolean>\n    <e:ExportFormats x:Key=\"SaveType\">Gif</e:ExportFormats>\n    <c:ArrayList x:Key=\"ExportPresets\"/>\n    \n    <!--Editor • Reduce Frame Count-->\n    <s:Int32 x:Key=\"ReduceFactor\">1</s:Int32>\n    <s:Int32 x:Key=\"ReduceCount\">1</s:Int32>\n    <e:ReduceDelayModes x:Key=\"ReduceDelay\">Evenly</e:ReduceDelayModes>\n    <s:Boolean x:Key=\"ReduceApplyToAll\">True</s:Boolean>\n    \n    <!--Editor • Remove Duplicates-->\n    <s:Double x:Key=\"DuplicatesSimilarity\">90</s:Double>\n    <e:DuplicatesRemovalModes x:Key=\"DuplicatesRemoval\">First</e:DuplicatesRemovalModes>\n    <e:DuplicatesDelayModes x:Key=\"DuplicatesDelay\">DontAdjust</e:DuplicatesDelayModes>\n\n    <!--Editor • Smooth Loop-->\n    <s:Double x:Key=\"SmoothLoopSimilarity\">100</s:Double>\n    <s:Int32 x:Key=\"SmoothLoopStartThreshold\">1</s:Int32>\n    <e:SmoothLoopFromModes x:Key=\"SmoothLoopFrom\">End</e:SmoothLoopFromModes>\n    \n    <!--Editor • Delay/Duration-->\n    <s:Int32 x:Key=\"OverrideDelay\">66</s:Int32>\n    <s:Int32 x:Key=\"IncrementDecrementDelay\">10</s:Int32>\n    <s:Int32 x:Key=\"ScaleDelay\">100</s:Int32>\n\n    <!--Editor • Resize-->\n    <e:SizeUnits x:Key=\"SizeUnit\">Pixels</e:SizeUnits>\n    <s:Boolean x:Key=\"KeepAspectRatio\">True</s:Boolean>\n    <BitmapScalingMode x:Key=\"ScalingMode\">Linear</BitmapScalingMode>\n\n    <!--Editor • Caption-->\n    <s:String x:Key=\"CaptionText\">Text</s:String>\n    <s:Boolean x:Key=\"IsCaptionFontGroupExpanded\">True</s:Boolean>\n    <FontFamily x:Key=\"CaptionFontFamily\">Segoe UI</FontFamily>\n    <FontStyle x:Key=\"CaptionFontStyle\">Normal</FontStyle>\n    <FontWeight x:Key=\"CaptionFontWeight\">Bold</FontWeight>\n    <s:Double x:Key=\"CaptionFontSize\">30.0</s:Double>\n    <Color x:Key=\"CaptionFontColor\">#FFFFFFFF</Color>\n    <s:Boolean x:Key=\"IsCaptionOutlineGroupExpanded\">True</s:Boolean>\n    <s:Double x:Key=\"CaptionOutlineThickness\">1.0</s:Double>\n    <Color x:Key=\"CaptionOutlineColor\">#FF000000</Color>\n    <s:Boolean x:Key=\"IsCaptionLayoutGroupExpanded\">True</s:Boolean>\n    <VerticalAlignment x:Key=\"CaptionVerticalAligment\">Bottom</VerticalAlignment>\n    <HorizontalAlignment x:Key=\"CaptionHorizontalAligment\">Center</HorizontalAlignment>\n    <s:Double x:Key=\"CaptionMargin\">10</s:Double>\n\n    <!--Editor • KeyStrokes-->\n    <s:Boolean x:Key=\"IsKeyStrokesKeysExpanded\">True</s:Boolean>\n    <s:Boolean x:Key=\"KeyStrokesIgnoreNonModifiers\">True</s:Boolean>\n    <s:Boolean x:Key=\"KeyStrokesIgnoreInjected\">False</s:Boolean>\n    <s:Boolean x:Key=\"KeyStrokesTranslate\">False</s:Boolean>\n    <s:Boolean x:Key=\"KeyStrokesEarlier\">False</s:Boolean>\n    <s:Double x:Key=\"KeyStrokesEarlierBy\">500.0</s:Double>\n    <s:Boolean x:Key=\"KeyStrokesExtended\">True</s:Boolean>\n    <s:Double x:Key=\"KeyStrokesDelay\">800.0</s:Double>\n    <s:String x:Key=\"KeyStrokesSeparator\">&#160;&#160;</s:String>\n    <s:Boolean x:Key=\"IsKeyStrokesFontExpanded\">True</s:Boolean>\n    <FontFamily x:Key=\"KeyStrokesFontFamily\">Segoe UI</FontFamily>\n    <s:Double x:Key=\"KeyStrokesFontSize\">30.0</s:Double>\n    <Color x:Key=\"KeyStrokesFontColor\">#FFFFFFFF</Color>\n    <FontStyle x:Key=\"KeyStrokesFontStyle\">Normal</FontStyle>\n    <FontWeight x:Key=\"KeyStrokesFontWeight\">Bold</FontWeight>\n    <s:Boolean x:Key=\"IsKeyStrokesOutlineExpanded\">True</s:Boolean>\n    <s:Double x:Key=\"KeyStrokesOutlineThickness\">0.0</s:Double>\n    <Color x:Key=\"KeyStrokesOutlineColor\">#FFFFFFFF</Color>\n    <Color x:Key=\"KeyStrokesBackgroundColor\">#FF000000</Color>\n    <s:Boolean x:Key=\"IsKeyStrokesLayoutExpanded\">True</s:Boolean>\n    <HorizontalAlignment x:Key=\"KeyStrokesHorizontalAligment\">Center</HorizontalAlignment>\n    <VerticalAlignment x:Key=\"KeyStrokesVerticalAligment\">Bottom</VerticalAlignment>\n    <s:Double x:Key=\"KeyStrokesMargin\">0</s:Double>\n    <s:Double x:Key=\"KeyStrokesPadding\">10</s:Double>\n    <s:Double x:Key=\"KeyStrokesMinHeight\">40</s:Double>\n\n    <!--Editor • Free Text-->\n    <s:String x:Key=\"FreeTextText\">Text</s:String>\n    <s:Boolean x:Key=\"IsFreeTextFontGroupExpanded\">True</s:Boolean>\n    <FontFamily x:Key=\"FreeTextFontFamily\">Segoe UI</FontFamily>\n    <FontStyle x:Key=\"FreeTextFontStyle\">Normal</FontStyle>\n    <FontWeight x:Key=\"FreeTextFontWeight\">Normal</FontWeight>\n    <s:Double x:Key=\"FreeTextFontSize\">16.0</s:Double>\n    <Color x:Key=\"FreeTextFontColor\">#FF000000</Color>\n    <Color x:Key=\"FreeTextBackgroundColor\">#00000000</Color>\n    <TextAlignment x:Key=\"FreeTextTextAlignment\">Left</TextAlignment>\n    <s:String x:Key=\"FreeTextTextDecoration\">None</s:String>\n    <s:Boolean x:Key=\"IsFreeTextShadowGroupExpanded\">True</s:Boolean>\n    <Color x:Key=\"FreeTextShadowColor\">#FF000000</Color>\n    <s:Double x:Key=\"FreeTextShadowDirection\">315.0</s:Double>\n    <s:Double x:Key=\"FreeTextShadowBlurRadius\">5.0</s:Double>\n    <s:Double x:Key=\"FreeTextShadowOpacity\">0.0</s:Double>\n    <s:Double x:Key=\"FreeTextShadowDepth\">5.0</s:Double>\n\n    <!--Editor • Title Frame-->\n    <Color x:Key=\"TitleFrameBackgroundColor\">#FFD7D7D7</Color>\n    <s:Boolean x:Key=\"IsTitleFrameFontGroupExpanded\">True</s:Boolean>\n    <s:Int32 x:Key=\"TitleFrameDelay\">500</s:Int32>\n    <Color x:Key=\"TitleFrameFontColor\">#FF000000</Color>\n    <FontFamily x:Key=\"TitleFrameFontFamily\">Segoe UI</FontFamily>\n    <s:Double x:Key=\"TitleFrameFontSize\">20.0</s:Double>\n    <FontStyle x:Key=\"TitleFrameFontStyle\">Normal</FontStyle>\n    <FontWeight x:Key=\"TitleFrameFontWeight\">Normal</FontWeight>\n    <HorizontalAlignment x:Key=\"TitleFrameHorizontalAligment\">Center</HorizontalAlignment>\n    <VerticalAlignment x:Key=\"TitleFrameVerticalAligment\">Center</VerticalAlignment>\n    <s:Double x:Key=\"TitleFrameMargin\">0.0</s:Double>\n    <s:String x:Key=\"TitleFrameText\">Title</s:String>\n\n    <!--Editor • Free Drawing-->\n    <Color x:Key=\"FreeDrawingColor\">#FF000000</Color>\n    <s:Int32 x:Key=\"FreeDrawingEraserWidth\">10</s:Int32>\n    <s:Int32 x:Key=\"FreeDrawingEraserHeight\">10</s:Int32>\n    <StylusTip x:Key=\"FreeDrawingEraserStylusTip\">Rectangle</StylusTip>\n    <s:Boolean x:Key=\"FreeDrawingFitToCurve\">False</s:Boolean>\n    <s:Boolean x:Key=\"FreeDrawingIsHighlighter\">False</s:Boolean>\n    <s:Int32 x:Key=\"FreeDrawingPenWidth\">5</s:Int32>\n    <s:Int32 x:Key=\"FreeDrawingPenHeight\">5</s:Int32>\n    <StylusTip x:Key=\"FreeDrawingStylusTip\">Ellipse</StylusTip>\n\n    <!--Editor • Shapes-->\n    <s:Double x:Key=\"ShapesThickness\">4</s:Double>\n    <Color x:Key=\"ShapesOutlineColor\">#FF000000</Color>\n    <s:Double x:Key=\"ShapesRadius\">0</s:Double>\n    <s:Int32 x:Key=\"ShapesDashes\">1</s:Int32>\n    <Color x:Key=\"ShapesFillColor\">#00000000</Color>\n\n    <!--Editor • Progress-->\n    <e:ProgressTypes x:Key=\"ProgressType\">Bar</e:ProgressTypes>\n    <s:Boolean x:Key=\"IsProgressFontGroupExpanded\">True</s:Boolean>\n    <FontFamily x:Key=\"ProgressFontFamily\">Segoe UI</FontFamily>\n    <s:Double x:Key=\"ProgressFontSize\">14.0</s:Double>\n    <FontStyle x:Key=\"ProgressFontStyle\">Normal</FontStyle>\n    <FontWeight x:Key=\"ProgressFontWeight\">Normal</FontWeight>\n    <Color x:Key=\"ProgressFontColor\">#FFFFFFFF</Color>\n    <Color x:Key=\"ProgressColor\">#FF000000</Color>\n    <s:Int32 x:Key=\"ProgressPrecision\">0</s:Int32>\n    <s:Int32 x:Key=\"ProgressStartNumber\">1</s:Int32>\n    <s:String x:Key=\"ProgressFormat\">$s/@s s</s:String>\n    <s:String x:Key=\"ProgressDateFormat\">G</s:String>\n    <s:Double x:Key=\"ProgressThickness\">10.0</s:Double>\n    <s:Boolean x:Key=\"ProgressShowTotal\">True</s:Boolean>\n    <HorizontalAlignment x:Key=\"ProgressHorizontalAligment\">Left</HorizontalAlignment>\n    <VerticalAlignment x:Key=\"ProgressVerticalAligment\">Bottom</VerticalAlignment>\n    <Orientation x:Key=\"ProgressOrientation\">Horizontal</Orientation>\n\n    <!--Editor • Mouse Events -->\n    <Color x:Key=\"MouseHighlightColor\">#00000000</Color>\n    <Color x:Key=\"LeftMouseButtonClicksColor\">#78FFFF00</Color>\n    <Color x:Key=\"RightMouseButtonClicksColor\">#78FF0000</Color>\n    <Color x:Key=\"MiddleMouseButtonClicksColor\">#7800FFFF</Color>\n    <Color x:Key=\"FirstExtraMouseButtonClicksColor\">#78FF0080</Color>\n    <Color x:Key=\"SecondExtraMouseButtonClicksColor\">#78FF8000</Color>\n    <s:Double x:Key=\"MouseEventsWidth\">12</s:Double>\n    <s:Double x:Key=\"MouseEventsHeight\">12</s:Double>\n    \n    <!--Editor • Border-->\n    <Color x:Key=\"BorderColor\">#FF000000</Color>\n    <s:Double x:Key=\"BorderBottomThickness\">1.0</s:Double>\n    <s:Double x:Key=\"BorderLeftThickness\">1.0</s:Double>\n    <s:Double x:Key=\"BorderRightThickness\">1.0</s:Double>\n    <s:Double x:Key=\"BorderTopThickness\">1.0</s:Double>\n    <!--<Color x:Key=\"BorderBackgroundColor\">#FFFFFFFF</Color>\n    <s:Double x:Key=\"BorderBottomRadius\">0.0</s:Double>\n    <s:Double x:Key=\"BorderLeftRadius\">0.0</s:Double>\n    <s:Double x:Key=\"BorderRightRadius\">0.0</s:Double>\n    <s:Double x:Key=\"BorderTopRadius\">0.0</s:Double>-->\n\n    <!--Editor • Shadow-->\n    <Color x:Key=\"ShadowColor\">#FF000000</Color>\n    <Color x:Key=\"ShadowBackgroundColor\">#FFFFFFFF</Color>\n    <s:Double x:Key=\"ShadowDirection\">270.0</s:Double>\n    <s:Double x:Key=\"ShadowBlurRadius\">20.0</s:Double>\n    <s:Double x:Key=\"ShadowOpacity\">60.0</s:Double>\n    <s:Double x:Key=\"ShadowDepth\">5.0</s:Double>\n    \n    <!--Editor • Obfuscate-->\n    <e:ObfuscationModes x:Key=\"ObfuscationMode\">Pixelation</e:ObfuscationModes>\n    <s:Boolean x:Key=\"ObfuscationInvertedSelection\">False</s:Boolean>\n    <s:Int32 x:Key=\"PixelSize\">5</s:Int32>\n    <s:Int32 x:Key=\"BlurLevel\">3</s:Int32>\n    <s:Double x:Key=\"DarkenLevel\">20.0</s:Double>\n    <s:Double x:Key=\"LightenLevel\">20.0</s:Double>\n    <s:Boolean x:Key=\"UseMedian\">True</s:Boolean>\n    <s:Int32 x:Key=\"ObfuscationSmoothnessRadius\">5</s:Int32>\n    <s:Double x:Key=\"ObfuscationSmoothnessOpacity\">100.0</s:Double>\n    \n    <!--Editor • Watermark-->\n    <!--<s:String x:Key=\"WatermarkFilePath\"></s:String>-->\n    <s:Double x:Key=\"WatermarkOpacity\">0.7</s:Double>\n    <s:Double x:Key=\"WatermarkSize\">1.0</s:Double>\n    <s:Double x:Key=\"WatermarkTop\">0</s:Double>\n    <s:Double x:Key=\"WatermarkLeft\">0</s:Double>\n\n    <!--Editor • Cinemagraph-->\n    <Color x:Key=\"CinemagraphColor\">#2000FF10</Color>\n    <s:Int32 x:Key=\"CinemagraphEraserWidth\">30</s:Int32>\n    <s:Int32 x:Key=\"CinemagraphEraserHeight\">30</s:Int32>\n    <StylusTip x:Key=\"CinemagraphEraserStylusTip\">Rectangle</StylusTip>\n    <s:Boolean x:Key=\"CinemagraphFitToCurve\">False</s:Boolean>\n    <s:Boolean x:Key=\"CinemagraphIsHighlighter\">True</s:Boolean>\n    <s:Int32 x:Key=\"CinemagraphPenWidth\">30</s:Int32>\n    <s:Int32 x:Key=\"CinemagraphPenHeight\">30</s:Int32>\n    <StylusTip x:Key=\"CinemagraphStylusTip\">Ellipse</StylusTip>\n\n    <!--Editor • Transitions-->\n    <e:FadeModes x:Key=\"FadeToType\">NextFrame</e:FadeModes>\n    <Color x:Key=\"FadeToColor\">#FF000000</Color>\n    <s:Int32 x:Key=\"FadeTransitionLength\">2</s:Int32>\n    <s:Int32 x:Key=\"FadeTransitionDelay\">66</s:Int32>\n    <s:Int32 x:Key=\"SlideTransitionLength\">2</s:Int32>\n    <s:Int32 x:Key=\"SlideTransitionDelay\">66</s:Int32>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Resources/Style.css",
    "content": "﻿body {\n    background: #F3F3F4;\n    color: #1E1E1F;\n    font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif;\n    padding: 0;\n    margin: 0;\n}\n\nh1 {\n    padding: 10px 10px 5px 5px; /*top right bottom left*/\n    font-size: 21pt;\n    background-color: #E2E2E2;\n    border-bottom: 1px #C1C1C2 solid;\n    color: #201F20;\n    vertical-align: middle;\n    font-weight: normal;\n}\n\nh2 {\n    color: #002387;\n    font-size: 16pt;\n    font-weight: normal;\n    padding: 5px 0 5px 0;\n    margin: 2px 0 2px 5px; /*top right bottom left*/\n}\n\nh3 {\n    font-weight: normal;\n    font-size: 13pt;\n    margin: 10px 10px 5px 10px; /*top right bottom left*/\n    padding: 15px 0 5px 0; /*top right bottom left*/\n    color: #02033F;\n    background-color: transparent;\n}\n\np {\n    font-weight: normal;\n    font-size: 10pt;\n    margin-left: 10px;\n    margin-bottom: 3px;\n    margin-top: 3px;\n}\n\na {\n    color: #1382CE;\n}\n\ntable {\n    border-spacing: 0 0;\n    border-collapse: collapse;\n    font-size: 10pt;\n}\n\ntable th {\n    background: #E7E7E8;\n    text-align: left;\n    text-decoration: none;\n    font-weight: normal;\n    padding: 3px 6px 3px 6px;\n}\n\ntable td {\n    vertical-align: top;\n    padding: 3px 6px 3px 5px; /*top right bottom left*/\n    margin: 0px;\n    border: 1px solid #E7E7E8;\n    background: #F7F7F8;\n}\n\n.localLink {\n    color: #1E1E1F;\n    background: #EEEEED;\n    text-decoration: none;\n}\n\n.localLink:hover {\n    color: #1382CE;\n    background: #FFFF99;\n    text-decoration: none;\n}\n\n.textCentered {\n    text-align: center;\n}\n\n.textRight {\n    text-align: right;\n}\n\n.messageHeader {\n    /*padding: 0 4pt 0 4pt;*/\n    margin: 0 4px 2px 0;\n    width: 100%;\n}\n\n.messageCell {\n    color: #004373;\n    /*padding: 0 4pt 0 4pt;*/\n    margin: 0 4px 2px 0;\n    width: 100%;\n}\n\n.headerCell {\n    margin: 0 0 2px 0;\n    width: 100%;\n}\n\n#content {\n    margin: 10px 5px;\n}\n\n#overview table {\n    width: auto;\n    max-width: 97%;\n}\n\n#messages table {\n    width: 97%;\n}"
  },
  {
    "path": "ScreenToGif/Resources/Vectors.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    \n    <!--Application vectors-->\n    <DrawingBrush x:Key=\"Vector.Add\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff8c8b8a\" Geometry=\"M 15.554,15.551 L 0,15.551 L 0,24.440 L 15.554,24.440 L 15.554,39.995 L 24.442,39.995 L 24.442,24.440 L 40,24.440 L 40,15.551 L 24.442,15.551 L 24.442,0 L 15.554,0 L 15.554,15.551 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n    \n    <DrawingBrush x:Key=\"Vector.Apng\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 0.000,16.429 L 20.000,16.429 L 20.000,0.000 L 0.000,0.000 L 0.000,16.429 Z M 0.357,0.357 L 19.643,0.357 L 19.643,16.071 L 0.357,16.071 L 0.357,0.357 L 0.357,0.357 Z\"/>\n                <GeometryDrawing Brush=\"#fffafafa\" Geometry=\"M 0.357,16.071 L 19.643,16.071 L 19.643,0.357 L 0.357,0.357 L 0.357,16.071 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 17.143,2.143 L 17.143,0.714 L 15.714,0.714 L 15.714,2.143 L 17.143,2.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 7.143,15.000 L 7.143,13.571 L 5.714,13.571 L 5.714,15.000 L 7.143,15.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 18.572,6.429 L 18.572,5.000 L 17.143,5.000 L 17.143,6.429 L 18.572,6.429 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 15.714,3.571 L 15.714,2.143 L 14.286,2.143 L 14.286,3.571 L 15.714,3.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 18.572,3.571 L 18.572,2.143 L 17.143,2.143 L 17.143,3.571 L 18.572,3.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 15.714,5.000 L 14.286,5.000 L 14.286,6.429 L 15.714,6.429 L 15.714,5.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 4.286,15.000 L 4.286,13.571 L 2.857,13.571 L 2.857,15.000 L 4.286,15.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 5.714,13.571 L 5.714,12.143 L 4.286,12.143 L 4.286,13.571 L 5.714,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 17.143,5.000 L 17.143,3.571 L 15.714,3.571 L 15.714,5.000 L 17.143,5.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 14.286,2.143 L 14.286,0.714 L 12.857,0.714 L 12.857,2.143 L 14.286,2.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 14.286,5.000 L 14.286,3.571 L 12.857,3.571 L 12.857,5.000 L 14.286,5.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 8.571,13.571 L 8.571,12.857 L 7.857,12.500 L 7.143,12.500 L 7.143,13.571 L 8.571,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 1.429,15.000 L 1.429,13.571 L 0.714,13.571 L 0.714,15.000 L 1.429,15.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 18.572,2.143 L 19.286,2.143 L 19.286,0.714 L 18.572,0.714 L 18.572,2.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 18.572,6.429 L 18.572,7.857 L 19.286,7.857 L 19.286,6.429 L 18.572,6.429 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 5.714,15.000 L 4.286,15.000 L 4.286,15.714 L 5.714,15.714 L 5.714,15.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 18.572,3.571 L 18.572,5.000 L 19.286,5.000 L 19.286,3.571 L 18.572,3.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 2.857,15.000 L 1.429,15.000 L 1.429,15.714 L 2.857,15.714 L 2.857,15.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd8d8d8\" Geometry=\"M 8.571,15.000 L 7.143,15.000 L 7.143,15.714 L 8.571,15.714 L 8.571,15.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffd9d9d9\" Geometry=\"M 12.857,3.571 L 12.857,2.143 L 12.143,2.143 L 11.786,2.857 L 11.786,3.571 L 12.857,3.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd9d9d9\" Geometry=\"M 11.429,8.571 L 11.429,9.286 L 12.857,9.286 L 12.857,8.214 L 12.143,8.214 L 11.429,8.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffd9d9d9\" Geometry=\"M 10.000,13.571 L 8.571,13.571 L 8.571,15.000 L 9.286,15.000 L 9.643,14.643 L 10.000,13.929 L 10.000,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffdcdcdc\" Geometry=\"M 10.714,13.214 L 11.429,13.214 L 10.714,12.500 L 10.714,12.143 L 10.000,12.143 L 10.000,13.571 L 10.714,13.214 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 6.429,7.313 C 6.217,7.368 5.814,7.399 5.714,7.558 C 5.594,7.751 5.714,8.409 5.714,8.631 C 5.714,9.159 5.497,10.229 5.714,10.714 C 5.941,11.220 6.745,11.756 7.232,11.935 C 7.702,12.107 8.824,12.406 9.269,12.143 C 9.591,11.952 9.946,10.699 10.000,10.357 C 10.110,9.664 10.109,9.020 9.615,8.543 C 9.097,8.045 8.490,7.776 7.969,7.254 C 7.319,6.605 7.136,6.791 6.429,7.313 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 8.571,7.500 C 9.194,7.811 9.517,8.214 10.201,8.214 C 10.928,8.214 11.429,8.150 12.108,7.869 C 12.784,7.590 13.283,7.371 13.160,6.601 C 13.074,6.068 12.796,5.367 12.444,4.944 C 11.564,3.886 9.762,4.349 8.648,4.645 C 8.537,4.674 7.930,4.754 7.857,4.855 C 7.728,5.034 7.857,5.774 7.857,5.994 C 7.857,6.668 8.089,7.018 8.571,7.500 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 2.857,7.500 C 2.633,7.724 2.400,8.029 2.143,8.214 C 1.961,8.345 1.542,8.414 1.425,8.600 C 1.188,8.978 1.199,10.025 1.297,10.471 C 1.372,10.814 1.527,11.294 1.706,11.601 C 1.929,11.986 1.771,11.875 2.242,11.993 C 2.912,12.161 3.577,12.172 4.200,11.814 C 4.507,11.638 5.212,11.042 5.357,10.699 C 5.580,10.173 5.357,9.014 5.357,8.450 C 5.357,7.725 5.495,7.347 4.643,7.143 C 4.007,6.991 3.298,7.059 2.857,7.500 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 7.500,1.428 L 7.143,2.143 L 7.143,3.571 L 7.500,4.286 L 8.928,4.286 L 10.714,3.929 L 11.072,3.571 L 11.429,3.214 L 11.786,2.500 L 11.786,0.714 L 7.857,0.714 L 7.500,1.428 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 0.714,3.929 L 2.500,4.286 L 3.571,4.286 L 3.929,3.571 L 4.286,3.214 L 4.286,2.500 L 3.929,1.786 L 3.571,1.071 L 3.214,0.714 L 0.714,0.714 L 0.714,3.929 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 18.179,14.140 C 18.179,15.107 17.395,15.890 16.429,15.890 C 15.462,15.890 14.679,15.107 14.679,14.140 C 14.679,13.174 15.462,12.390 16.429,12.390 C 17.395,12.390 18.179,13.174 18.179,14.140 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 0.714,8.214 L 1.786,8.214 L 2.143,7.857 L 2.500,7.500 L 2.857,7.143 L 3.571,6.786 L 3.571,6.429 L 3.214,4.643 L 1.429,4.286 L 0.714,4.286 L 0.714,8.214 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"M 3.929,1.428 L 4.286,2.143 L 5.000,2.857 L 6.429,2.979 L 6.786,2.500 L 7.143,1.786 L 7.500,1.071 L 7.500,0.714 L 3.929,0.714 L 3.929,1.428 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c182\" Geometry=\"M 11.072,12.500 C 11.576,13.004 11.787,13.215 12.489,13.355 C 12.935,13.444 13.767,13.750 14.233,13.571 C 15.518,13.078 14.679,11.499 14.253,10.671 C 13.847,9.884 13.804,9.883 12.925,9.724 C 12.356,9.622 11.733,9.574 11.157,9.643 C 10.889,9.675 10.826,9.595 10.714,9.742 C 10.593,9.901 10.714,10.691 10.714,10.908 C 10.714,11.494 10.884,11.939 11.072,12.500 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c182\" Geometry=\"M 15.000,11.429 C 15.076,11.598 15.216,12.178 15.379,12.269 C 15.552,12.366 15.970,12.163 16.193,12.152 C 16.852,12.119 17.115,12.385 17.514,11.758 C 18.206,10.669 18.584,9.453 17.804,8.348 C 17.513,7.934 16.963,7.284 16.459,7.164 C 15.917,7.037 15.389,7.732 15.079,8.135 C 14.315,9.131 14.637,10.339 15.000,11.429 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c182\" Geometry=\"M 10.714,13.571 L 10.357,13.929 L 10.000,14.643 L 9.643,15.000 L 9.643,15.714 L 14.818,15.714 L 14.364,14.817 L 14.286,14.140 L 12.511,13.571 L 10.714,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c283\" Geometry=\"M 18.140,15.357 L 18.214,15.714 L 19.286,15.714 L 19.286,13.929 L 18.572,13.929 L 18.333,15.000 L 18.140,15.357 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c283\" Geometry=\"M 18.572,10.000 L 18.214,10.714 L 17.857,11.429 L 17.500,12.143 L 17.568,12.390 L 17.857,12.857 L 18.214,13.214 L 18.572,13.571 L 19.286,13.571 L 19.286,9.643 L 18.929,9.643 L 18.572,10.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c182\" Geometry=\"M 7.496,5.178 C 7.496,6.261 6.618,7.138 5.536,7.138 C 4.453,7.138 3.576,6.261 3.576,5.178 C 3.576,4.096 4.453,3.218 5.536,3.218 C 6.618,3.218 7.496,4.096 7.496,5.178 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Application\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.273,7.200 L 0.727,7.200 L 0.727,35.280 L 39.273,35.280 L 39.273,7.200 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 40,7.200 L 40,0 L 0,0 L 0,7.200 L 40,7.200 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 40,7.200 L 39.273,7.200 L 39.273,35.280 L 0.727,35.280 L 0.727,7.200 L 0,7.200 L 0,36 L 40,36 L 40,7.200 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Arrow.Blue.Bottom\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff407cb8\" Geometry=\"M 17,0 L 0,0 L 8.500,10 L 17,0 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Arrow.Blue.Left\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff407cb8\" Geometry=\"M 10,17 L 10,0 L 0,8.500 L 10,17 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Arrow.Blue.Right\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff407cb8\" Geometry=\"M 0,0 L 0,17 L 10,8.500 L 0,0 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Arrow.Blue.Top\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff407cb8\" Geometry=\"M 0,10 L 17,10 L 8.500,0 L 0,10 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Avif\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,32.857 L 0.000,32.857 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.714,0.714 L 39.286,0.714 L 39.286,32.143 L 0.714,32.143 L 0.714,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 1.429,1.429 L 1.429,10.728 C 3.685,8.977 6.763,7.895 10.163,7.895 C 12.207,7.895 14.136,8.286 15.839,8.978 C 16.913,7.438 18.694,6.429 20.714,6.429 C 22.206,6.429 23.565,6.982 24.609,7.889 C 25.725,6.158 27.719,5.000 30.000,5.000 C 33.455,5.000 36.259,7.648 36.332,10.941 C 37.146,11.325 37.896,11.803 38.571,12.357 L 38.571,1.429 L 1.429,1.429 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 31.068,24.609 C 29.397,23.292 27.293,22.500 25.000,22.500 C 22.125,22.500 19.546,23.743 17.750,25.712 C 14.361,23.472 10.338,21.792 5.916,20.853 C 5.433,19.843 4.409,19.139 3.214,19.139 C 2.542,19.139 1.927,19.367 1.429,19.742 L 1.429,31.429 L 38.571,31.429 L 38.571,27.711 C 36.387,26.197 33.840,25.112 31.068,24.609 Z\"/>\n            </DrawingGroup>\n            <!-- TODO: AVIF logo: https://aomedia.org/assets/images/avif-logo-rgb.svg (BSD-3) -->\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Backward\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 15.056,17.041 L 40,17.041 L 40,9.612 L 15.056,9.612 L 24.128,0 L 13.944,0 L 0,13.333 L 13.648,26.667 L 23.870,26.667 L 15.056,17.041 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Backward.Bold\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 13.335,18.064 L 13.335,0 L 0,0 L 0,40 L 13.335,40 L 13.335,21.935 L 40,40 L 40,0 L 13.335,18.064 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Blur\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff5379d3\" Geometry=\"F1 M 27.716,26.143 C 27.716,33.787 21.498,40.000 13.858,40.000 C 6.218,40.000 0.000,33.785 0.000,26.143 C 0.000,19.509 9.684,4.214 11.628,1.215 C 12.117,0.457 12.957,0.000 13.860,0.000 C 14.763,0.000 15.602,0.457 16.093,1.215 C 18.032,4.214 27.716,19.509 27.716,26.143 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Board\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,36 L 0,36 L 0,0 L 40,0 L 40,36 Z\"/>\n                <GeometryDrawing Brush=\"#ffa4a3a2\" Geometry=\"F1 M 1.439,34.574 L 38.561,34.574 L 38.561,1.426 L 1.439,1.426 L 1.439,34.574 Z M 40,36 L 0,36 L 0,0 L 40,0 L 40,36 Z\"/>\n                <GeometryDrawing Brush=\"#ffd86543\" Geometry=\"M 8.743,18.078 C 10.776,17.070 13.039,7.403 17.051,7.558 C 18.983,13.980 12.377,24.761 13.237,29.497 C 17.343,29.403 21.556,17.751 25.648,18.141 C 26.716,22.476 21.760,24.922 22.589,28.825 C 24.208,28.882 31.061,21.555 31.265,20.458 C 28.381,20.636 27.541,23.589 25.190,24.662 C 25.500,21.144 28.618,20.067 26.144,16.604 C 22.334,16.535 16.938,24.784 14.348,27.802 C 15.474,22.548 20.570,11.152 17.747,6.537 C 13.768,5.900 8.498,14.451 8.743,18.078 Z M 24.578,25.508 C 24.726,25.187 24.243,26.235 24.578,25.508 L 24.578,25.508 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Board.New\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.934,38 L 6.038,38 L 6.038,7.857 L 39.934,7.857 L 39.934,38 Z\"/>\n                <GeometryDrawing Brush=\"#ffa4a3a2\" Geometry=\"F1 M 7.196,36.806 L 38.776,36.806 L 38.776,9.051 L 7.196,9.051 L 7.196,36.806 Z M 40,38 L 5.972,38 L 5.972,7.857 L 40,7.857 L 40,38 Z\"/>\n                <GeometryDrawing Brush=\"#ffd86543\" Geometry=\"M 13.372,24 C 15.109,23.136 17.042,14.848 20.468,14.981 C 22.118,20.487 16.476,29.730 17.210,33.790 C 20.717,33.710 24.315,23.720 27.809,24.055 C 28.497,26.858 24.283,28.893 25.197,33.215 C 26.580,33.263 32.432,26.982 32.607,26.041 C 30.143,26.194 29.426,28.725 27.418,29.645 C 27.683,26.629 30.346,25.706 28.233,22.736 C 24.980,22.677 20.371,29.750 18.159,32.337 C 19.120,27.833 23.473,18.062 21.061,14.106 C 17.664,13.559 13.163,20.890 13.372,24 Z M 26.895,30.371 C 27.022,30.095 26.609,30.994 26.895,30.371 L 26.895,30.371 Z\"/>\n                <GeometryDrawing Brush=\"#fffafcf7\" Geometry=\"F1 M 13.478,13.384 L 6.473,13.384 L 6.472,6.350 L 13.478,6.350 L 13.478,13.384 Z\"/>\n                <GeometryDrawing Brush=\"#ffebc67d\" Geometry=\"F1 M 2.164,15.796 L 2.164,17.926 L 4.283,17.926 L 7.410,14.788 L 8.447,14.788 L 8.447,19.053 L 9.490,20.095 L 10.528,20.095 L 11.570,19.053 L 11.570,14.788 L 12.612,14.788 L 13.649,15.836 L 14.692,16.878 L 15.734,17.924 L 17.853,17.924 L 17.853,15.796 L 16.810,14.748 L 15.772,13.706 L 14.732,12.660 L 14.732,11.615 L 18.974,11.615 L 20.017,10.568 L 20.017,9.525 L 18.976,8.478 L 14.738,8.478 L 14.738,7.437 L 15.775,6.389 L 16.816,5.347 L 17.859,4.300 L 18.896,1.126 L 15.734,2.171 L 12.613,5.307 L 11.570,5.307 L 11.570,1.048 L 10.533,0 L 9.492,0 L 8.447,1.048 L 8.447,5.307 L 7.410,5.307 L 6.368,4.260 L 5.325,3.217 L 4.283,2.170 L 1.121,1.126 L 2.164,4.299 L 3.206,5.347 L 4.243,6.389 L 5.285,7.437 L 5.285,8.478 L 1.042,8.478 L 0,9.525 L 0,10.568 L 1.042,11.615 L 5.285,11.615 L 5.285,12.658 L 2.164,15.796 Z M 12.534,8.361 L 12.534,11.537 L 11.493,12.581 L 8.329,12.581 L 7.289,11.537 L 7.289,8.361 L 8.329,7.317 L 11.492,7.317 L 12.534,8.361 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Board.Add\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 33.962,30.143 L 0.066,30.143 L 0.066,0 L 33.962,0 L 33.962,30.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffa4a3a2\" Geometry=\"F1 M 1.224,28.949 L 32.804,28.949 L 32.804,1.194 L 1.224,1.194 L 1.224,28.949 Z M 34.028,30.143 L 0,30.143 L 0,0 L 34.028,0 L 34.028,30.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffd86543\" Geometry=\"M 7.400,16.143 C 9.137,15.279 11.070,6.991 14.496,7.123 C 16.146,12.629 10.504,21.873 11.238,25.933 C 14.745,25.853 18.343,15.862 21.837,16.197 C 22.526,19.001 18.311,21.035 19.225,25.357 C 20.608,25.406 26.460,19.124 26.635,18.183 C 24.171,18.336 23.454,20.868 21.447,21.788 C 21.711,18.771 24.374,17.849 22.261,14.879 C 19.008,14.820 14.399,21.892 12.187,24.480 C 13.148,19.976 17.501,10.205 15.090,6.248 C 11.692,5.702 7.192,13.033 7.400,16.143 Z M 20.924,22.513 C 21.050,22.238 20.638,23.136 20.924,22.513 L 20.924,22.513 Z\"/>\n                <GeometryDrawing Brush=\"#ff8c8b8a\" Geometry=\"M 31.444,27.393 L 26,27.393 L 26,30.504 L 31.444,30.504 L 31.444,35.948 L 34.555,35.948 L 34.555,30.504 L 40,30.504 L 40,27.393 L 34.555,27.393 L 34.555,21.950 L 31.444,21.950 L 31.444,27.393 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Bmp\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffb1b1b1\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,32.857 L 0.000,32.857 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 0.714,0.714 L 39.286,0.714 L 39.286,32.143 L 0.714,32.143 L 0.714,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff76a595\" Geometry=\"F1 M 29.286,1.429 L 37.857,1.429 L 37.857,3.571 C 37.365,3.571 36.828,3.633 36.347,3.544 C 35.693,3.423 34.415,2.900 34.415,2.900 L 31.429,2.857 L 28.571,2.857 L 29.286,1.429 Z\"/>\n                <GeometryDrawing Brush=\"#ff76a595\" Geometry=\"F1 M 25.000,9.286 L 26.429,9.286 C 26.842,10.113 27.235,10.957 27.672,11.772 C 28.050,12.477 28.720,13.006 29.286,13.571 C 29.286,15.634 29.445,17.758 29.286,19.813 C 29.219,20.670 28.901,21.540 28.692,22.375 C 28.489,23.187 27.726,23.703 27.143,24.286 L 25.714,24.286 C 25.163,23.734 24.611,23.183 24.060,22.631 C 23.347,21.918 23.264,21.060 22.900,20.129 C 22.624,19.423 22.372,18.686 21.689,18.344 C 20.888,17.944 20.087,17.543 19.286,17.143 L 19.286,16.429 C 19.523,16.191 19.820,15.959 20.014,15.686 C 20.291,15.298 20.399,14.790 20.661,14.392 C 21.032,13.827 21.663,13.337 22.143,12.857 C 22.612,12.388 23.229,11.905 23.605,11.362 C 23.876,10.969 23.981,10.460 24.252,10.067 C 24.452,9.778 24.750,9.536 25.000,9.286 Z\"/>\n                <GeometryDrawing Brush=\"#ff818181\" Geometry=\"F1 M 30.000,20.000 L 34.286,20.000 L 35.000,31.429 L 33.571,31.429 L 30.000,27.857 L 30.000,20.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff76a595\" Geometry=\"F1 M 13.571,21.429 L 14.286,21.429 L 15.000,23.571 L 15.714,24.286 L 16.429,25.000 L 17.143,25.714 L 20.714,26.429 L 21.429,27.143 L 22.143,28.571 L 22.143,29.286 L 21.429,30.000 L 20.714,30.714 L 19.286,31.429 L 12.857,31.429 L 13.571,30.714 L 15.000,30.000 L 16.429,29.286 L 13.389,29.286 L 10.714,30.000 L 7.857,30.000 L 5.000,29.286 L 4.286,26.429 L 2.857,25.714 L 2.143,25.000 L 1.429,22.857 L 2.857,22.857 L 5.000,24.286 L 7.857,24.286 L 10.714,23.571 L 12.143,22.857 L 13.571,21.429 Z\"/>\n                <GeometryDrawing Brush=\"#ff818181\" Geometry=\"F1 M 23.571,23.571 L 24.286,23.571 L 26.429,25.714 L 26.429,26.429 L 24.286,28.571 L 23.571,28.571 L 21.429,26.429 L 21.429,25.714 L 23.571,23.571 Z\"/>\n                <GeometryDrawing Brush=\"#ff818181\" Geometry=\"F1 M 27.143,27.143 L 27.857,27.143 L 32.143,31.429 L 25.714,31.429 L 24.538,30.313 L 24.714,29.572 L 27.143,27.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c283\" Geometry=\"F1 M 38.290,5.982 C 36.545,5.024 34.583,4.472 32.500,4.472 C 30.157,4.472 27.964,5.163 26.066,6.356 C 26.728,10.489 29.274,13.571 32.321,13.571 C 35.460,13.571 37.791,10.303 38.290,5.982 Z\"/>\n                <GeometryDrawing Brush=\"#ff818181\" Geometry=\"F1 M 34.291,19.609 C 33.633,19.859 32.907,20.000 32.143,20.000 C 31.380,20.000 30.657,19.860 30.000,19.611 L 30.000,27.857 L 33.571,31.429 L 35.000,31.429 L 34.732,27.143 L 34.291,19.609 Z\"/>\n                <GeometryDrawing Brush=\"#ff818181\" Geometry=\"F1 M 30.030,13.733 L 30.000,13.733 L 30.000,19.058 C 30.657,19.307 31.380,19.447 32.143,19.447 C 32.905,19.447 33.629,19.307 34.286,19.058 L 34.286,13.750 C 33.639,13.990 32.927,14.124 32.178,14.124 C 31.413,14.124 30.688,13.983 30.030,13.733 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c283\" Geometry=\"F1 M 20.070,18.307 L 20.074,18.302 C 19.249,17.816 18.234,17.399 17.500,16.786 C 16.689,16.108 16.385,15.242 16.071,14.286 C 15.517,15.808 15.111,17.200 15.001,18.836 C 14.961,19.432 14.894,20.204 15.027,20.782 C 15.211,21.576 15.673,22.380 15.979,23.137 L 15.982,23.134 C 16.994,25.611 20.400,26.104 22.073,24.019 C 23.696,21.996 22.599,18.875 20.070,18.307 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"F1 M 27.143,1.429 C 23.940,1.428 20.737,1.428 17.534,1.428 C 15.674,1.427 13.814,1.427 11.954,1.427 C 10.821,1.427 10.479,1.537 9.430,2.064 C 8.496,2.533 7.454,2.932 6.575,3.498 C 5.982,3.880 5.501,4.499 5.000,5.000 L 2.857,5.000 C 2.348,5.509 1.887,6.025 1.429,6.581 L 1.429,7.500 C 2.219,7.820 2.712,7.857 3.571,7.857 L 2.857,10.000 L 4.529,10.000 C 5.530,9.247 6.442,8.565 7.560,8.006 C 8.065,7.753 8.589,7.391 9.121,7.225 C 9.619,7.070 10.184,7.143 10.714,7.143 L 10.000,8.571 C 9.176,8.983 8.603,9.250 7.997,9.929 C 7.384,10.615 6.873,10.961 6.071,11.429 L 5.714,12.857 L 10.714,12.857 L 11.429,15.000 L 12.857,15.714 L 14.073,15.213 C 14.382,14.190 14.692,13.166 15.000,12.143 L 16.071,11.429 C 16.237,11.855 16.350,12.412 16.600,12.790 C 16.805,13.100 17.207,13.332 17.500,13.571 C 18.687,12.709 19.881,11.856 21.060,10.982 C 22.015,10.274 22.712,9.175 23.469,8.266 C 24.226,7.357 24.918,6.620 25.380,5.542 C 25.968,4.171 26.555,2.800 27.143,1.429 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Border\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,0 L 0,0 L 0,40 L 40,40 L 40,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,40 L 40,40 L 40,0 L 0,0 L 0,40 Z M 38.238,38.239 L 1.762,38.239 L 1.762,1.509 L 38.238,1.509 L 38.238,38.239 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 3.476,20.946 L 9.476,20.946 L 9.476,19.055 L 3.476,19.055 L 3.476,20.946 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 11.976,20.946 L 17.976,20.946 L 17.976,19.055 L 11.976,19.055 L 11.976,20.946 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 20.946,17.600 L 20.946,11.600 L 19.054,11.600 L 19.054,17.600 L 20.946,17.600 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 20.945,9.100 L 20.945,3.100 L 19.054,3.100 L 19.054,9.100 L 20.945,9.100 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.054,22 L 19.054,28 L 20.946,28 L 20.946,22 L 19.054,22 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.054,30.500 L 19.054,36.500 L 20.945,36.500 L 20.945,30.500 L 19.054,30.500 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 21.976,20.946 L 27.976,20.946 L 27.976,19.055 L 21.976,19.055 L 21.976,20.946 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 30.476,20.946 L 36.476,20.946 L 36.476,19.055 L 30.476,19.055 L 30.476,20.946 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Bpg\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,32.857 L 0.000,32.857 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.714,0.714 L 39.286,0.714 L 39.286,32.143 L 0.714,32.143 L 0.714,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 1.429,1.429 L 1.429,10.728 C 3.685,8.977 6.763,7.895 10.163,7.895 C 12.207,7.895 14.136,8.286 15.839,8.978 C 16.913,7.438 18.694,6.429 20.714,6.429 C 22.206,6.429 23.565,6.982 24.609,7.889 C 25.725,6.158 27.719,5.000 30.000,5.000 C 33.455,5.000 36.259,7.648 36.332,10.941 C 37.146,11.325 37.896,11.803 38.571,12.357 L 38.571,1.429 L 1.429,1.429 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 31.068,24.609 C 29.397,23.292 27.293,22.500 25.000,22.500 C 22.125,22.500 19.546,23.743 17.750,25.712 C 14.361,23.472 10.338,21.792 5.916,20.853 C 5.433,19.843 4.409,19.139 3.214,19.139 C 2.542,19.139 1.927,19.367 1.429,19.742 L 1.429,31.429 L 38.571,31.429 L 38.571,27.711 C 36.387,26.197 33.840,25.112 31.068,24.609 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 13.682,14.532 C 13.394,14.532 13.160,14.606 12.980,14.754 C 12.800,14.902 12.662,15.117 12.566,15.396 L 12.566,18.013 C 12.694,18.077 12.832,18.120 12.980,18.145 C 13.128,18.169 13.286,18.181 13.454,18.181 C 13.878,18.181 14.200,18.027 14.420,17.718 C 14.640,17.411 14.750,16.920 14.750,16.248 C 14.750,15.104 14.394,14.532 13.682,14.532 Z M 11.006,10.956 L 12.566,10.956 L 12.566,13.836 L 12.614,13.836 C 12.782,13.644 12.998,13.493 13.262,13.380 C 13.526,13.268 13.818,13.212 14.138,13.212 C 14.858,13.212 15.408,13.458 15.788,13.951 C 16.168,14.442 16.358,15.192 16.358,16.201 C 16.358,17.281 16.092,18.101 15.560,18.661 C 15.028,19.221 14.298,19.500 13.370,19.500 C 12.858,19.500 12.390,19.458 11.966,19.374 C 11.542,19.290 11.222,19.197 11.006,19.093 L 11.006,10.956 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 20.114,14.508 C 19.809,14.508 19.572,14.584 19.400,14.736 C 19.227,14.889 19.094,15.117 18.998,15.420 L 18.998,17.917 C 19.109,18.005 19.231,18.076 19.364,18.126 C 19.496,18.179 19.670,18.204 19.885,18.204 C 20.334,18.204 20.670,18.046 20.893,17.731 C 21.118,17.414 21.229,16.893 21.229,16.164 C 21.229,15.636 21.141,15.228 20.966,14.940 C 20.790,14.652 20.506,14.508 20.114,14.508 Z M 17.437,13.356 L 18.578,13.356 L 18.758,14.077 L 18.805,14.077 C 19.013,13.772 19.260,13.548 19.544,13.404 C 19.828,13.260 20.174,13.188 20.582,13.188 C 21.334,13.188 21.897,13.427 22.273,13.902 C 22.649,14.378 22.838,15.144 22.838,16.201 C 22.838,16.712 22.778,17.174 22.658,17.586 C 22.538,17.999 22.359,18.349 22.124,18.637 C 21.887,18.925 21.599,19.145 21.260,19.297 C 20.920,19.449 20.529,19.525 20.090,19.525 C 19.842,19.525 19.637,19.507 19.477,19.471 C 19.317,19.435 19.158,19.376 18.998,19.297 L 18.998,21.757 L 17.437,21.757 L 17.437,13.356 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 26.354,18.204 C 26.658,18.204 26.892,18.137 27.056,18.001 C 27.220,17.865 27.346,17.661 27.434,17.389 L 27.434,14.688 C 27.186,14.584 26.878,14.532 26.510,14.532 C 26.110,14.532 25.798,14.682 25.574,14.982 C 25.350,15.282 25.238,15.761 25.238,16.416 C 25.238,17.000 25.334,17.445 25.526,17.748 C 25.719,18.053 25.994,18.204 26.354,18.204 Z M 28.994,19.357 C 28.994,20.229 28.759,20.870 28.286,21.283 C 27.814,21.695 27.154,21.901 26.306,21.901 C 25.730,21.901 25.276,21.861 24.944,21.781 C 24.612,21.701 24.362,21.617 24.194,21.529 L 24.518,20.292 C 24.702,20.365 24.916,20.437 25.160,20.509 C 25.404,20.580 25.706,20.617 26.066,20.617 C 26.610,20.617 26.980,20.498 27.177,20.263 C 27.372,20.027 27.470,19.697 27.470,19.273 L 27.470,18.889 L 27.423,18.889 C 27.142,19.265 26.646,19.452 25.934,19.452 C 25.158,19.452 24.580,19.213 24.200,18.733 C 23.820,18.253 23.631,17.500 23.631,16.477 C 23.631,15.404 23.886,14.592 24.398,14.040 C 24.910,13.488 25.654,13.212 26.631,13.212 C 27.142,13.212 27.600,13.248 28.004,13.320 C 28.408,13.392 28.738,13.476 28.994,13.572 L 28.994,19.357 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Cabinet\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 0.000,0.000 L 28.649,0.000 L 28.649,40.000 L 0.000,40.000 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 1.081,1.081 L 27.568,1.081 L 27.568,38.919 L 1.081,38.919 L 1.081,1.081 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 23.784,35.135 L 4.865,35.135 L 4.865,22.703 L 23.784,22.703 L 23.784,35.135 Z M 3.784,21.622 L 3.784,36.216 L 24.865,36.216 L 24.865,21.622 L 3.784,21.622 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 9.730,28.649 L 18.919,28.649 L 18.919,29.730 L 9.730,29.730 L 9.730,28.649 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 23.784,17.838 L 4.865,17.838 L 4.865,5.405 L 23.784,5.405 L 23.784,17.838 Z M 3.784,4.324 L 3.784,18.919 L 24.865,18.919 L 24.865,4.324 L 3.784,4.324 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 13.514,14.054 L 15.135,14.054 L 15.135,15.676 L 13.514,15.676 L 13.514,14.054 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 9.730,11.351 L 18.919,11.351 L 18.919,12.432 L 9.730,12.432 L 9.730,11.351 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Camera\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 30.712,27.912 L 1.992,27.912 L 1.992,7.326 L 30.712,7.326 L 30.712,27.912 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 19.999,26.801 C 14.881,26.801 10.732,22.681 10.732,17.598 C 10.732,12.515 14.881,8.395 19.999,8.395 C 25.119,8.395 29.266,12.515 29.266,17.598 C 29.266,22.681 25.119,26.801 19.999,26.801 Z M 3.927,12.675 L 3.927,9.826 L 7.575,9.826 L 7.575,12.675 L 3.927,12.675 Z M 29.495,5.646 L 25.929,0 L 14.154,0 L 10.340,5.646 L 0,5.646 L 0,31 C 0,31 0.388,31 9.041,31 C 15.618,31 40,31 40,31 L 40,5.646 L 29.495,5.646 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 26.829,17.680 C 26.829,21.424 23.772,24.461 20,24.461 C 16.228,24.461 13.171,21.424 13.171,17.680 C 13.171,13.935 16.228,10.898 20,10.898 C 23.772,10.898 26.829,13.935 26.829,17.680 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Camera.Add\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 34.847,27.198 L 2,27.198 L 2,5.499 L 34.847,5.499 L 34.847,27.198 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 23.373,15.511 C 23.373,18.796 20.710,21.461 17.424,21.461 C 14.138,21.461 11.474,18.796 11.474,15.511 C 11.474,12.226 14.138,9.562 17.424,9.562 C 20.710,9.562 23.373,12.226 23.373,15.511 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"M 17.423,23.514 C 12.964,23.514 9.349,19.900 9.349,15.440 C 9.349,10.980 12.964,7.366 17.423,7.366 C 21.883,7.366 25.496,10.980 25.496,15.440 C 25.496,19.900 21.883,23.514 17.423,23.514 Z M 6.599,11.121 L 3.421,11.121 L 3.421,8.621 L 6.599,8.621 L 6.599,11.121 Z M 29.918,22.864 L 29.918,17.764 L 34.847,17.764 L 34.847,4.953 L 25.696,4.953 L 22.589,0 L 12.331,0 L 9.008,4.953 L 0,4.953 L 0,27.198 C 0,27.198 0.338,27.198 7.876,27.198 C 11.021,27.198 18.320,27.198 24.733,27.198 L 24.733,22.864 L 29.918,22.864 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da290\" Geometry=\"M 30.378,23.376 L 25.247,23.376 L 25.247,27.225 L 30.378,27.225 L 30.378,32.999 L 34.868,32.999 L 34.868,27.225 L 40,27.225 L 40,23.376 L 34.868,23.376 L 34.868,18.245 L 30.378,18.245 L 30.378,23.376 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Camera.New\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 31.721,25.054 L 6.123,25.054 L 6.123,6.576 L 31.721,6.576 L 31.721,25.054 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 22.173,24.057 C 17.611,24.057 13.913,20.359 13.913,15.797 C 13.913,11.234 17.611,7.536 22.173,7.536 C 26.737,7.536 30.433,11.234 30.433,15.797 C 30.433,20.359 26.737,24.057 22.173,24.057 Z M 7.848,11.377 L 7.848,8.820 L 11.100,8.820 L 11.100,11.377 L 7.848,11.377 Z M 30.637,5.068 L 27.458,0 L 16.963,0 L 13.564,5.068 L 4.348,5.068 L 4.348,27.826 C 4.348,27.826 4.693,27.826 12.406,27.826 C 18.269,27.826 40,27.826 40,27.826 L 40,5.068 L 30.637,5.068 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 28.261,15.870 C 28.261,19.231 25.536,21.957 22.174,21.957 C 18.812,21.957 16.087,19.231 16.087,15.870 C 16.087,12.508 18.812,9.783 22.174,9.783 C 25.536,9.783 28.261,12.508 28.261,15.870 Z\"/>\n                <GeometryDrawing Brush=\"#fff9fff7\" Geometry=\"F1 M 7.949,7.577 L 3.922,7.577 L 3.909,4.255 L 7.936,4.255 L 7.949,7.577 Z\"/>\n                <GeometryDrawing Brush=\"#ffebc67c\" Geometry=\"F1 M 1.292,9.383 L 1.292,10.649 L 2.559,10.649 L 4.426,8.786 L 5.047,8.786 L 5.047,11.318 L 5.669,11.938 L 6.291,11.938 L 6.912,11.318 L 6.912,8.786 L 7.535,8.786 L 8.156,9.406 L 8.778,10.026 L 9.400,10.647 L 10.667,10.647 L 10.667,9.383 L 10.044,8.762 L 9.423,8.142 L 8.803,7.522 L 8.803,6.899 L 11.336,6.899 L 11.959,6.279 L 11.959,5.658 L 11.338,5.037 L 8.804,5.037 L 8.804,4.417 L 9.425,3.795 L 10.047,3.175 L 10.669,2.555 L 11.290,0.668 L 9.400,1.290 L 7.536,3.152 L 6.913,3.152 L 6.913,0.622 L 6.292,0 L 5.671,0 L 5.047,0.622 L 5.047,3.152 L 4.426,3.152 L 3.803,2.531 L 3.181,1.910 L 2.559,1.289 L 0.669,0.667 L 1.292,2.554 L 1.915,3.175 L 2.535,3.795 L 3.158,4.417 L 3.158,5.037 L 0.622,5.037 L 0,5.658 L 0,6.279 L 0.622,6.899 L 3.158,6.899 L 3.158,7.520 L 1.292,9.383 Z M 7.489,4.967 L 7.489,6.853 L 6.867,7.474 L 4.976,7.474 L 4.355,6.853 L 4.355,4.967 L 4.976,4.346 L 6.867,4.346 L 7.489,4.967 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Cancel\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ffd66142\" Geometry=\"F1 M 40,4.683 L 34.282,0 L 19.937,14.261 L 6.035,0.030 L 0,4.683 L 14.218,19.801 L 0,34.676 L 6.035,40 L 19.937,25.984 L 34.282,40 L 40,34.736 L 25.624,19.801 L 40,4.683 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Vector.Error-->\n    <DrawingBrush x:Key=\"Vector.Cancel.Round\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffd55932\" Geometry=\"F1 M 40,20 C 40,31.046 31.046,40 20,40 C 8.954,40 0,31.046 0,20 C 0,8.954 8.954,0 20,0 C 31.046,0 40,8.954 40,20 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 31.314,11.515 L 28.485,8.686 L 20,17.172 L 11.515,8.686 L 8.686,11.515 L 17.172,20 L 8.686,28.485 L 11.515,31.314 L 20,22.828 L 28.485,31.314 L 31.314,28.485 L 22.828,20 L 31.314,11.515 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Caption\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 30.222,39.554 L 39.441,39.554 L 25.110,0.800 L 14.888,0.800 L 1.222,39.554 L 9.777,39.554 L 12.222,31.443 L 27.666,31.443 L 30.222,39.554 Z M 25.599,24.799 L 13.600,24.799 L 19.200,5.600 L 20.799,5.600 L 25.599,24.799 Z\"/>\n                <GeometryDrawing Brush=\"#ff4680b8\" Geometry=\"M 0,39.999 L 10.400,39.999 L 12.800,31.999 L 27.200,31.999 L 29.599,39.999 L 40,39.999 L 25.599,0 L 14.400,0 L 0,39.999 Z M 15.200,0.800 L 24.800,0.800 L 38.901,39.353 L 30.474,39.353 L 27.808,31.199 L 11.999,31.199 L 9.678,39.198 L 1.600,39.198 L 15.200,0.800 Z\"/>\n                <GeometryDrawing Brush=\"#ff4680b8\" Geometry=\"M 13.600,24.799 L 25.599,24.799 L 20.799,5.600 L 19.200,5.600 L 13.600,24.799 Z M 24.502,23.999 L 14.798,23.999 L 19.703,6.078 L 20.343,6.078 L 24.502,23.999 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Cinemagraph\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0,37.940 L 40,37.940 L 40,0 L 0,0 L 0,37.940 Z\"/>\n                <GeometryDrawing Brush=\"#ff717171\" Geometry=\"F1 M 0,38 L 40,38 L 40,0 L 0,0 L 0,38 Z M 0.836,0.862 L 5.080,0.862 L 5.080,5.073 L 0.836,5.073 L 0.836,0.862 Z M 7.652,0.862 L 11.897,0.862 L 11.897,5.073 L 7.652,5.073 L 7.652,0.862 Z M 14.470,0.862 L 18.714,0.862 L 18.714,5.073 L 14.470,5.073 L 14.470,0.862 Z M 21.286,0.862 L 25.530,0.862 L 25.530,5.073 L 21.286,5.073 L 21.286,0.862 Z M 28.103,0.862 L 32.348,0.862 L 32.348,5.073 L 28.103,5.073 L 28.103,0.862 Z M 34.920,0.862 L 39.164,0.862 L 39.164,5.073 L 34.920,5.073 L 34.920,0.862 Z M 0.900,5.934 L 39.196,5.934 L 39.196,32.098 L 0.900,32.098 L 0.900,5.934 Z M 0.900,32.959 L 5.144,32.959 L 5.144,37.171 L 0.900,37.171 L 0.900,32.959 Z M 7.717,32.959 L 11.962,32.959 L 11.962,37.171 L 7.717,37.171 L 7.717,32.959 Z M 14.534,32.959 L 18.778,32.959 L 18.778,37.171 L 14.534,37.171 L 14.534,32.959 Z M 21.351,32.959 L 25.595,32.959 L 25.595,37.171 L 21.351,37.171 L 21.351,32.959 Z M 28.168,32.959 L 32.412,32.959 L 32.412,37.171 L 28.168,37.171 L 28.168,32.959 Z M 34.984,32.959 L 39.229,32.959 L 39.229,37.171 L 34.984,37.171 L 34.984,32.959 Z\"/>\n                <GeometryDrawing Geometry=\"F1 M 7.472,23.440 C 8.210,22.650 8.867,21.282 9.445,20.333 C 10.349,18.846 11.034,17.498 12.182,16.186 C 12.747,15.541 13.339,14.373 14.267,14.235 C 15.714,14.021 15.430,16.370 15.421,17.304 C 15.402,19.414 14.370,24.796 17.902,21.364 C 18.854,20.440 19.958,18.228 21.644,18.791 C 22.725,19.152 22.618,21.966 23.588,22.521 C 25.431,23.572 27.050,19.041 28.031,17.362 C 29.340,15.119 31.232,13.131 32.917,11.171\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"4.0\" Brush=\"#ff7fff87\" StartLineCap=\"Round\" EndLineCap=\"Round\" LineJoin=\"Round\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Clock\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 20,0.714 C 30.651,0.714 39.286,9.348 39.286,20 C 39.286,30.652 30.651,39.285 20,39.285 C 9.349,39.285 0.714,30.652 0.714,20 C 0.714,9.348 9.349,0.714 20,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4680b7\" Geometry=\"F1 M 20,1.429 C 9.760,1.429 1.429,9.760 1.429,20 C 1.429,30.239 9.760,38.571 20,38.571 C 30.240,38.571 38.571,30.239 38.571,20 C 38.571,9.760 30.240,1.429 20,1.429 Z M 20,40 C 8.972,40 0,31.027 0,20 C 0,8.972 8.972,0 20,0 C 31.028,0 40,8.972 40,20 C 40,31.027 31.028,40 20,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.250,20.750 L 31.252,20.750 L 31.252,19.250 L 20.750,19.250 L 20.750,4.248 L 19.250,4.248 L 19.250,20.750 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Colors\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 0,19.644 L 12.778,19.644 L 12.778,0 L 0,0 L 0,19.644 Z\"/>\n                <GeometryDrawing Brush=\"#ffe68d45\" Geometry=\"F1 M 13.613,19.644 L 26.387,19.644 L 26.387,0 L 13.613,0 L 13.613,19.644 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c181\" Geometry=\"F1 M 27.227,19.644 L 40,19.644 L 40,0 L 27.227,0 L 27.227,19.644 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"F1 M 0,40 L 12.778,40 L 12.778,20.356 L 0,20.356 L 0,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 13.613,40 L 26.387,40 L 26.387,20.356 L 13.613,20.356 L 13.613,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff9d9d9d\" Geometry=\"F1 M 27.227,40 L 40,40 L 40,20.356 L 27.227,20.356 L 27.227,40 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Copy\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 14.286,40 L 40,40 L 40,14.286 L 14.286,14.286 L 14.286,40 Z M 15,15 L 39.286,15 L 39.286,39.286 L 15,39.286 L 15,15 L 15,15 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 13.571,24.999 L 0.714,24.999 L 0.714,0.714 L 25,0.714 L 25,13.571 L 25.714,13.571 L 25.714,0 L 0,0 L 0,25.714 L 13.571,25.714 L 13.571,24.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 15,39.286 L 39.286,39.286 L 39.286,15 L 15,15 L 15,39.286 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 13.571,13.571 L 25,13.571 L 25,0.714 L 0.714,0.714 L 0.714,24.999 L 13.571,24.999 L 13.571,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 24.285,27.143 C 24.033,26.890 23.109,26.890 22.857,27.143 C 21.326,28.674 16.428,33.571 16.428,33.571 L 16.428,37.858 L 34.286,37.858 C 34.286,37.858 26.652,29.509 24.285,27.143 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 10,12.857 C 9.747,12.605 8.824,12.605 8.571,12.857 C 7.070,14.358 2.143,19.286 2.143,19.286 L 2.143,23.571 L 13.571,23.571 L 13.571,16.428 C 13.571,16.428 10.871,13.728 10,12.857 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 31.429,27.858 C 31.176,27.605 30.253,27.605 30,27.858 C 29.679,28.179 28.950,28.908 28.571,29.286 C 28.396,29.462 28.396,30.106 28.571,30.282 C 30.393,32.103 35.714,37.858 35.714,37.858 L 37.858,37.858 L 37.858,34.286 C 37.858,34.286 33.049,29.477 31.429,27.858 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc677\" Geometry=\"M 21.426,6.428 C 21.426,7.611 20.467,8.570 19.283,8.570 C 18.100,8.570 17.141,7.611 17.141,6.428 C 17.141,5.245 18.100,4.285 19.283,4.285 C 20.467,4.285 21.426,5.245 21.426,6.428 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc677\" Geometry=\"M 35.710,20.712 C 35.710,21.895 34.751,22.854 33.567,22.854 C 32.384,22.854 31.424,21.895 31.424,20.712 C 31.424,19.528 32.384,18.569 33.567,18.569 C 34.751,18.569 35.710,19.528 35.710,20.712 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Crop\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 28.709,28.690 L 11.209,28.690 L 11.209,11.190 L 28.709,11.190 L 28.709,28.690 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 7.143,7.141 L 7.143,28.571 L 0,28.571 L 0,32.857 L 7.143,32.857 L 7.143,40 L 11.429,40 L 11.429,32.857 L 32.857,32.857 L 32.857,11.429 L 40,11.429 L 40,7.143 L 32.857,7.143 L 32.857,0 L 28.571,0 L 28.571,7.141 L 7.143,7.141 Z M 11.429,11.429 L 28.571,11.429 L 28.571,28.571 L 11.429,28.571 L 11.429,11.429 L 11.429,11.429 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Crosshair\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff686868\" Geometry=\"F1 M 21.299,38.271 L 21.299,21.380 L 38.268,21.380 C 37.759,30.380 30.299,37.779 21.299,38.271 Z M 1.732,21.380 L 19.299,21.380 L 19.299,38.280 C 10.299,37.911 2.246,30.380 1.732,21.380 Z M 19.299,1.720 L 19.299,19.380 L 1.720,19.380 C 2.075,9.380 9.299,2.093 19.299,1.720 Z M 38.280,19.380 L 21.299,19.380 L 21.299,1.729 C 30.299,2.227 37.928,9.380 38.280,19.380 Z M 20.000,0.000 C 8.972,0.000 0.000,8.972 0.000,20.000 C 0.000,31.028 8.972,40.000 20.000,40.000 C 31.028,40.000 40.000,31.028 40.000,20.000 C 40.000,8.972 31.028,0.000 20.000,0.000 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Crosshair.Color\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffc7c7c7\" Geometry=\"F1 M 16.000,13.000 L 14.000,13.000 L 14.000,0.000 L 16.000,0.000 L 16.000,13.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffaeaeae\" Geometry=\"F1 M 30.000,14.000 L 30.000,16.000 L 17.000,16.000 L 17.000,14.000 L 30.000,14.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff636363\" Geometry=\"F1 M 13.000,14.000 L 13.000,16.000 L 0.000,16.000 L 0.000,14.000 L 13.000,14.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff959595\" Geometry=\"F1 M 16.000,30.000 L 14.000,30.000 L 14.000,17.000 L 16.000,17.000 L 16.000,30.000 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Cursor\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 15.171,38.619 L 9.648,26.895 L 7.581,26.895 L 0.686,33.561 L 0.457,1.562 L 22.981,24.133 L 13.791,24.133 L 13.791,26.200 L 19.304,36.552 L 15.171,38.619 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7c7d\" Geometry=\"F1 M 13.790,24.133 L 22.980,24.133 L 0.457,1.562 L 0.686,33.562 L 7.581,26.895 L 9.648,26.895 L 15.171,38.618 L 19.304,36.552 L 13.790,26.200 L 13.790,24.133 Z M 24.829,24.828 L 15.171,24.828 L 15.171,26.200 L 20.799,36.895 L 14.476,40 L 8.962,28.275 L 7.581,28.275 L 0,35.171 L 0,0 L 24.829,24.828 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Cut\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff6c6b6b\" Geometry=\"M 18.564,12.138 L 17.136,12.138 L 8.568,0 L 7.140,0 C 7.140,0 6.704,4.352 7.140,5.712 C 8.078,8.636 14.280,15.708 14.280,15.708 C 14.280,15.708 14.280,16.817 14.280,17.136 C 14.280,19.285 10.099,22.032 8.568,23.562 C 8.316,23.814 8.568,25.129 8.568,25.129 L 12.852,27.319 C 12.852,27.319 15.351,21.420 17.136,21.420 C 17.496,21.420 18.299,21.420 18.564,21.420 C 20.248,21.420 22.845,27.319 22.845,27.319 L 27.132,25.129 C 27.132,25.129 27.379,23.809 27.132,23.562 C 25.645,22.075 21.420,19.285 21.420,17.136 C 21.420,16.793 21.420,15.708 21.420,15.708 C 21.420,15.708 27.622,8.636 28.560,5.712 C 28.996,4.352 28.560,0 28.560,0 L 27.132,0 L 18.564,12.138 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 28.204,37.123 C 25.641,37.123 23.564,35.045 23.564,32.482 C 23.564,29.920 25.641,27.842 28.204,27.842 C 30.767,27.842 32.844,29.920 32.844,32.482 C 32.844,35.045 30.767,37.123 28.204,37.123 Z M 28.204,24.991 C 24.064,24.991 20.708,28.348 20.708,32.487 C 20.708,36.627 24.064,39.984 28.204,39.984 C 32.344,39.984 35.700,36.627 35.700,32.487 C 35.700,28.348 32.344,24.991 28.204,24.991 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 7.496,37.123 C 4.933,37.123 2.856,35.045 2.856,32.482 C 2.856,29.920 4.933,27.842 7.496,27.842 C 10.059,27.842 12.136,29.920 12.136,32.482 C 12.136,35.045 10.059,37.123 7.496,37.123 Z M 7.496,24.991 C 3.356,24.991 0,28.348 0,32.487 C 0,36.627 3.356,39.984 7.496,39.984 C 11.635,39.984 14.992,36.627 14.992,32.487 C 14.992,28.348 11.635,24.991 7.496,24.991 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Darken\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff6ccde8\" Geometry=\"F1 M 20.761,39.984 C 20.537,39.996 20.316,40.000 20.104,40.000 C 18.329,40.000 16.586,39.771 14.884,39.310 C 13.182,38.849 11.607,38.208 10.162,37.388 C 8.717,36.568 7.379,35.564 6.138,34.376 C 4.902,33.188 3.844,31.891 2.967,30.470 C 2.090,29.054 1.392,27.503 0.877,25.826 C 0.359,24.145 0.073,22.418 0.016,20.639 C 0.004,20.427 0.000,20.206 0.000,19.982 C 0.000,18.219 0.229,16.492 0.690,14.803 C 1.151,13.113 1.796,11.550 2.620,10.105 C 3.445,8.660 4.457,7.326 5.648,6.102 C 6.840,4.877 8.146,3.824 9.570,2.947 C 10.991,2.069 12.550,1.376 14.243,0.865 C 15.937,0.355 17.676,0.070 19.463,0.012 C 19.924,-0.012 20.610,0.000 21.520,0.045 C 21.924,0.070 22.128,0.167 22.128,0.347 C 22.128,0.469 22.038,0.588 21.859,0.702 C 19.361,2.298 17.378,4.408 15.904,7.028 C 14.431,9.648 13.697,12.480 13.697,15.529 C 13.697,15.721 13.701,15.917 13.713,16.121 C 13.758,17.684 14.011,19.206 14.472,20.692 C 14.933,22.177 15.549,23.541 16.329,24.789 C 17.104,26.038 18.035,27.181 19.120,28.222 C 20.206,29.262 21.385,30.148 22.663,30.879 C 23.940,31.609 25.328,32.172 26.830,32.572 C 28.332,32.972 29.862,33.172 31.425,33.172 L 32.017,33.172 C 32.997,33.139 33.829,33.050 34.515,32.903 C 34.674,32.870 34.800,32.854 34.902,32.854 C 35.094,32.854 35.188,32.907 35.188,33.013 C 35.188,33.119 35.094,33.278 34.902,33.495 C 33.103,35.486 31.001,37.041 28.597,38.168 C 26.181,39.286 23.573,39.894 20.761,39.984 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Delay\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20,0 C 8.955,0 0,8.954 0,19.999 C 0,31.045 8.955,40 20,40 C 31.046,40 40,31.045 40,19.999 C 40,8.954 31.046,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff807f7f\" Geometry=\"M 20.001,38 C 10.059,38 2,29.941 2,20 C 2,10.059 10.059,2 20.001,2 C 29.941,2 38,10.059 38,20 C 38,29.941 29.941,38 20.001,38 Z M 20,0 C 8.955,0 0,8.954 0,19.999 C 0,31.045 8.955,40 20,40 C 31.046,40 40,31.045 40,19.999 C 40,8.954 31.046,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ffe1876c\" Geometry=\"M 37.200,19.999 C 37.171,10.675 30.004,2.780 20,2.799 L 20,19.999 L 37.200,19.999 Z\"/>\n                <GeometryDrawing Brush=\"#ff565656\" Geometry=\"M 31.992,19.999 L 31.992,18.510 L 21.495,18.510 L 21.490,3.508 L 20.001,3.508 L 20,20 L 31.992,19.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55c38\" Geometry=\"M 40,19.999 C 40,8.954 31.045,0 20,0 L 20.001,2 C 29.941,2 38,10.059 38,20 L 40,19.999 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Delay.Minute\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20,0 C 8.955,0 0,8.954 0,19.999 C 0,31.045 8.955,40 20,40 C 31.046,40 40,31.045 40,19.999 C 40,8.954 31.046,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff807f7f\" Geometry=\"M 20.001,38 C 10.059,38 2,29.941 2,20 C 2,10.059 10.059,2 20.001,2 C 29.941,2 38,10.059 38,20 C 38,29.941 29.941,38 20.001,38 Z M 20,0 C 8.955,0 0,8.954 0,19.999 C 0,31.045 8.955,40 20,40 C 31.046,40 40,31.045 40,19.999 C 40,8.954 31.046,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ffe1876c\" Geometry=\"M 20,2.800 C 29.444,2.800 37.100,10.456 37.100,19.900 C 37.100,29.344 29.444,37 20,37 L 20,2.800 Z\"/>\n                <GeometryDrawing Brush=\"#ff565656\" Geometry=\"M 21.490,3.508 L 20.001,3.508 L 20,36.300 L 21.500,36.300 L 21.490,3.508 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55c38\" Geometry=\"M 40,19.999 C 40,8.954 31.045,0 20,0 L 20.001,2 C 29.941,2 38,10.059 38,20 L 40,19.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55c38\" Geometry=\"M 20,0 C 31.046,0 40,8.954 40,20 C 40,31.046 31.046,40 20,40 L 20,37.998 C 29.941,37.998 38,29.940 38,19.999 C 38,10.058 29.941,2 20,2 L 20,0 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Delay.Hour\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20,0 C 8.955,0 0,8.954 0,19.999 C 0,31.045 8.955,40 20,40 C 31.046,40 40,31.045 40,19.999 C 40,8.954 31.046,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff807f7f\" Geometry=\"M 20.001,38 C 10.059,38 2,29.941 2,20 C 2,10.059 10.059,2 20.001,2 C 29.941,2 38,10.059 38,20 C 38,29.941 29.941,38 20.001,38 Z M 20,0 C 8.955,0 0,8.954 0,19.999 C 0,31.045 8.955,40 20,40 C 31.046,40 40,31.045 40,19.999 C 40,8.954 31.046,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ffe1876c\" Geometry=\"M 37.100,19.900 C 37.100,29.344 29.444,37 20,37 C 10.556,37 2.900,29.344 2.900,19.900 C 2.900,10.456 10.556,2.800 20,2.800 C 29.444,2.800 37.100,10.456 37.100,19.900 Z\"/>\n                <GeometryDrawing Brush=\"#ff565656\" Geometry=\"M 21.490,3.508 L 20.001,3.508 L 20,19.900 L 21.500,19.900 L 21.490,3.508 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55c38\" Geometry=\"M 40,19.999 C 40,8.954 31.045,0 20,0 L 20.001,2 C 29.941,2 38,10.059 38,20 L 40,19.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55c38\" Geometry=\"M 20,2 C 10.059,2 2,10.058 2,19.999 C 2,29.940 10.059,37.998 20,37.998 C 29.941,37.998 38,29.940 38,19.999 C 38,10.058 29.941,2 20,2 Z M 40,20 C 40,31.046 31.046,40 20,40 C 8.954,40 0,31.046 0,20 C 0,8.954 8.954,0 20,0 C 31.046,0 40,8.954 40,20 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Delete.After\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 40,12.201 L 28.890,0 L 19.574,0 L 27.234,8.715 L 20.001,8.715 L 20.001,15.685 L 27.234,15.685 L 19.574,24.400 L 28.890,24.400 L 40,12.201 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 13.334,8.579 L 18.890,8.579 L 18.890,15.685 L 13.334,15.685 L 13.334,8.579 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 7.779,8.579 L 12.223,8.579 L 12.223,15.685 L 7.779,15.685 L 7.779,8.579 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 3.334,8.579 L 6.668,8.579 L 6.668,15.685 L 3.334,15.685 L 3.334,8.579 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 0,8.579 L 2.222,8.579 L 2.222,15.685 L 0,15.685 L 0,8.579 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Delete.Before\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 0,12.199 L 11.110,24.400 L 20.426,24.400 L 12.766,15.685 L 19.999,15.685 L 19.999,8.715 L 12.766,8.715 L 20.426,0 L 11.110,0 L 0,12.199 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 26.666,15.821 L 21.110,15.821 L 21.110,8.715 L 26.666,8.715 L 26.666,15.821 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 32.221,15.821 L 27.777,15.821 L 27.777,8.715 L 32.221,8.715 L 32.221,15.821 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 36.666,15.821 L 33.332,15.821 L 33.332,8.715 L 36.666,8.715 L 36.666,15.821 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a30\" Geometry=\"M 40,15.821 L 37.778,15.821 L 37.778,8.715 L 40,8.715 L 40,15.821 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Delete.Folder\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 35.285,0.666 L 22.842,0.666 L 19.020,5.328 L 36,5.328 L 36,1.243 L 35.285,0.666 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc477\" Geometry=\"M 36.667,20.246 C 36.667,20.246 36.667,5.836 36.667,1.332 C 36.667,0.861 35.805,0 35.333,0 C 32.404,0 26.090,0 23.333,0 C 21.447,0 18,5.328 18,5.328 C 18,5.328 5.408,5.328 1.333,5.328 C 0.861,5.328 0,6.189 0,6.660 C 0,12.551 0,31.972 0,31.972 L 20.667,31.972 C 20.667,31.972 24.728,28.355 26,27.083 C 26.236,26.848 26.236,26.212 26,25.977 C 25.465,25.442 23.987,25.002 23.333,24.645 C 22.602,24.245 21.414,23.393 20.667,22.646 C 20.066,22.046 19.399,19.916 20,19.316 C 20.421,18.894 20.898,18.164 21.333,17.984 C 21.949,17.729 23.372,17.761 24,17.984 C 25.481,18.510 27.903,20.340 29.063,21.314 C 29.635,21.795 31.285,23.313 31.285,23.313 L 36.667,20.246 Z M 35.900,1.998 C 35.900,2.756 35.900,5.328 35.900,5.328 L 19.333,5.328 C 19.333,5.328 22.350,0.750 24,0.750 C 26.498,0.750 32.404,0.750 34.666,0.750 C 35.138,0.750 35.900,1.527 35.900,1.998 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc477\" Geometry=\"M 34,26.284 C 34.071,27.453 36.667,29.973 36.667,29.973 L 36.667,24.242 C 36.667,24.242 33.949,25.446 34,26.284 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc477\" Geometry=\"M 28.175,31.305 C 28.120,31.463 27.819,31.972 27.819,31.972 L 32.796,31.972 C 32.796,31.972 32.441,31.459 32.377,31.305 C 32.196,30.870 31.479,30.154 31.043,29.973 C 30.736,29.846 30.018,29.846 29.710,29.973 C 29.275,30.154 28.328,30.860 28.175,31.305 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a31\" Geometry=\"F1 M 27.555,26.562 C 27.243,27.061 19.050,33.539 20.091,36.124 C 22.757,38.923 23.628,35.596 25.254,33.797 C 27.256,31.593 27.854,30.443 30.338,28.685 C 33.745,31.133 37.139,37.246 39.961,37.300 C 38.946,35.218 38.023,33.554 36.801,31.647 C 35.591,29.753 34.083,28.049 33.030,26.209 C 34.643,24.181 38.908,22.260 40,20.867 C 38.140,19.609 33.979,22.706 31.262,24.329 C 29.168,22.991 24.851,17.540 21.899,18.852 C 19.116,20.083 21.652,22.301 22.991,23.099 C 24.292,23.870 26.827,25.412 27.555,26.562 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.DirectX\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff789639\" Geometry=\"F1 M 13.333,4.626 L 0.000,4.626 L 0.000,0.000 L 13.333,0.000 L 13.333,4.626 Z\"/>\n                <GeometryDrawing Brush=\"#ff789639\" Geometry=\"F1 M 26.667,0.000 L 40.000,0.000 L 40.000,4.626 L 26.667,4.626 L 26.667,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff789639\" Geometry=\"F1 M 0.000,24.374 L 13.333,24.374 L 13.333,29.000 L 0.000,29.000 L 0.000,24.374 Z\"/>\n                <GeometryDrawing Brush=\"#ff789639\" Geometry=\"F1 M 40.000,24.374 L 26.667,24.374 L 26.667,29.000 L 40.000,29.000 L 40.000,24.374 Z\"/>\n                <GeometryDrawing Brush=\"#ff88a847\" Geometry=\"F1 M 15.200,2.313 L 2.044,2.313 L 2.044,6.939 L 15.200,6.939 L 15.200,2.313 Z\"/>\n                <GeometryDrawing Brush=\"#ff88a847\" Geometry=\"F1 M 24.622,2.313 L 37.778,2.313 L 37.778,6.939 L 24.622,6.939 L 24.622,2.313 Z\"/>\n                <GeometryDrawing Brush=\"#ff88a847\" Geometry=\"F1 M 37.778,22.239 L 24.622,22.239 L 24.622,26.865 L 37.778,26.865 L 37.778,22.239 Z\"/>\n                <GeometryDrawing Brush=\"#ff88a847\" Geometry=\"F1 M 2.044,22.239 L 15.200,22.239 L 15.200,26.865 L 2.044,26.865 L 2.044,22.239 Z\"/>\n                <GeometryDrawing Brush=\"#ff9fbc63\" Geometry=\"F1 M 17.067,4.448 L 4.444,4.448 L 4.444,9.074 L 17.067,9.074 L 17.067,4.448 Z\"/>\n                <GeometryDrawing Brush=\"#ff9fbc63\" Geometry=\"F1 M 22.933,4.448 L 35.556,4.448 L 35.556,9.074 L 22.933,9.074 L 22.933,4.448 Z\"/>\n                <GeometryDrawing Brush=\"#ff9fbc63\" Geometry=\"F1 M 4.444,20.104 L 17.067,20.104 L 17.067,24.730 L 4.444,24.730 L 4.444,20.104 Z\"/>\n                <GeometryDrawing Brush=\"#ff9fbc63\" Geometry=\"F1 M 35.911,20.104 L 23.289,20.104 L 23.289,24.730 L 35.911,24.730 L 35.911,20.104 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed098\" Geometry=\"F1 M 6.578,17.791 L 18.844,17.791 L 18.844,22.417 L 6.578,22.417 L 6.578,17.791 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed098\" Geometry=\"F1 M 33.422,17.791 L 21.156,17.791 L 21.156,22.417 L 33.422,22.417 L 33.422,17.791 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed098\" Geometry=\"F1 M 21.156,6.583 L 33.422,6.583 L 33.422,11.209 L 21.156,11.209 L 21.156,6.583 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed098\" Geometry=\"F1 M 18.844,6.583 L 6.578,6.583 L 6.578,11.209 L 18.844,11.209 L 18.844,6.583 Z\"/>\n                <GeometryDrawing Brush=\"#ffdce7c4\" Geometry=\"F1 M 31.289,8.807 L 8.711,8.807 L 8.711,13.255 L 31.289,13.255 L 31.289,8.807 Z\"/>\n                <GeometryDrawing Brush=\"#ffdce7c4\" Geometry=\"F1 M 31.289,20.193 L 8.711,20.193 L 8.711,15.745 L 31.289,15.745 L 31.289,20.193 Z\"/>\n                <GeometryDrawing Brush=\"#ffebf2de\" Geometry=\"F1 M 28.889,15.834 L 11.111,15.834 L 11.111,13.166 L 28.889,13.166 L 28.889,15.834 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Editor\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.273,35.573 L 0.727,35.573 L 0.727,7.260 L 39.273,7.260 L 39.273,35.573 Z\"/>\n                <GeometryDrawing Brush=\"#ffbdd0e4\" Geometry=\"M 17.455,19.602 C 17.168,19.379 16.323,19.434 16,19.602 C 13.751,20.772 8.727,26.861 8.727,26.861 L 8.727,30.492 L 27.637,30.492 C 27.637,30.492 20.174,21.709 17.455,19.602 Z\"/>\n                <GeometryDrawing Brush=\"#ffbdd0e4\" Geometry=\"M 29.091,30.492 L 31.273,30.492 L 31.273,26.861 C 31.273,26.861 26.865,21.211 24.728,20.328 C 24.392,20.189 23.600,20.169 23.273,20.328 C 22.811,20.554 21.293,21.802 21.653,22.170 C 24.319,24.892 29.091,30.492 29.091,30.492 Z\"/>\n                <GeometryDrawing Brush=\"#fff7e9d2\" Geometry=\"M 25.455,17.424 C 26.126,17.702 27.694,17.707 28.364,17.424 C 28.601,17.324 28.980,16.930 29.091,16.698 C 29.405,16.043 29.332,14.479 29.091,13.794 C 29.006,13.551 28.596,13.179 28.364,13.068 C 27.708,12.754 26.141,12.826 25.455,13.068 C 25.212,13.154 24.840,13.563 24.728,13.794 C 24.408,14.446 24.450,16.027 24.728,16.698 C 24.826,16.936 25.217,17.326 25.455,17.424 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,36.300 L 40.001,36.300 L 40.001,0 L 0,0 L 0,36.300 Z M 0.727,7.260 L 39.273,7.260 L 39.273,35.573 L 0.727,35.573 L 0.727,7.260 L 0.727,7.260 Z\"/>\n                <GeometryDrawing Brush=\"#ffcfd0d0\" Geometry=\"M 6.545,32.669 L 33.455,32.669 L 33.455,10.164 L 6.545,10.164 L 6.545,32.669 Z M 7.273,10.890 L 32.727,10.890 L 32.727,31.944 L 7.273,31.944 L 7.273,10.890 L 7.273,10.890 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Ellipse\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20,30.767 C 30.674,30.767 39.380,23.996 39.380,15.694 C 39.380,7.392 30.674,0.620 20,0.620 C 9.326,0.620 0.620,7.392 0.620,15.694 C 0.620,23.996 9.326,30.767 20,30.767 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"F1 M 20,1.240 C 9.656,1.240 1.240,7.724 1.240,15.694 C 1.240,23.664 9.656,30.148 20,30.148 C 30.344,30.148 38.760,23.664 38.760,15.694 C 38.760,7.724 30.344,1.240 20,1.240 Z M 20,31.387 C 8.972,31.387 0,24.348 0,15.694 C 0,7.040 8.972,0 20,0 C 31.028,0 40,7.040 40,15.694 C 40,24.348 31.028,31.387 20,31.387 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Email\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.714,23.585 L 39.286,23.585 L 39.286,0.715 L 0.714,0.715 L 0.714,23.585 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 9.286,14.294 L 26.429,14.294 L 26.429,13.579 L 9.286,13.579 L 9.286,14.294 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 9.286,17.153 L 26.429,17.153 L 26.429,16.438 L 9.286,16.438 L 9.286,17.153 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,24.300 L 40,24.300 L 40,0 L 0,0 L 0,24.300 Z M 0.714,0.715 L 39.286,0.715 L 39.286,23.585 L 0.714,23.585 L 0.714,0.715 L 0.714,0.715 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 32.143,9.291 L 37.143,9.291 L 37.143,2.859 L 32.143,2.859 L 32.143,9.291 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Encoder\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,36.364 L 0,36.364 L 0,6.787 L 40,6.787 L 40,36.364 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 40,7.273 L 39.273,7.273 L 39.273,35.637 L 0.727,35.637 L 0.727,7.273 L 0,7.273 L 0,36.364 L 40,36.364 L 40,7.273 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 21.818,18.182 L 21.818,18.909 L 35.636,18.909 L 35.636,13.091 L 21.818,13.091 L 21.818,13.818 L 34.909,13.818 L 34.909,18.182 L 21.818,18.182 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 29.091,28.364 L 29.091,29.091 L 35.636,29.091 L 35.636,23.273 L 29.091,23.273 L 29.091,24 L 34.909,24 L 34.909,28.364 L 29.091,28.364 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 29.091,29.091 L 29.091,23.273 L 4.364,23.273 L 4.364,29.091 L 29.091,29.091 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 21.818,18.909 L 21.818,13.091 L 4.364,13.091 L 4.364,18.909 L 21.818,18.909 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 40,7.273 L 40,0 L 0,0 L 0,7.273 L 40,7.273 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Encoder.Grayscale\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 1.029,1.034 L 1.029,35.727 L 38.915,35.727 L 38.915,1.034 L 1.029,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff969696\" Geometry=\"F1 M 2.148,22.093 L 2.148,27.337 L 37.895,27.337 L 37.895,16.808 C 37.895,16.808 37.778,16.400 37.597,16.219 C 37.413,16.037 36.676,15.934 36.676,15.934 C 36.676,15.934 34.481,15.867 33.717,16.043 C 33.144,16.177 31.848,16.820 31.349,17.072 C 30.623,17.441 29.549,18.065 28.872,18.562 C 28.206,19.052 25.959,19.045 25.060,19.065 C 24.161,19.088 22.591,19.335 22.210,20.050 C 21.629,21.145 18.755,21.555 17.585,20.313 C 16.533,19.197 13.576,18.956 12.455,18.803 C 11.680,18.697 9.991,18.497 9.365,19.045 C 8.839,19.504 8.073,20.774 7.568,21.103 C 6.468,21.818 4.675,20.988 3.557,21.344 C 3.202,21.456 2.148,22.093 2.148,22.093 Z\"/>\n                <GeometryDrawing Geometry=\"F1 M 2.148,34.690 L 37.893,34.690 L 37.893,28.372 L 2.148,28.372 L 2.148,34.690 Z\">\n                    <GeometryDrawing.Brush>\n                        <LinearGradientBrush>\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStop Offset=\"0.00\" Color=\"#ff787878\"/>\n                                <GradientStop Offset=\"1.00\" Color=\"#ffffffff\"/>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </GeometryDrawing.Brush>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ffc9c9c9\" Geometry=\"F1 M 12.411,8.136 C 12.639,8.279 13.266,8.233 13.507,8.114 C 13.784,7.976 14.316,7.636 14.560,7.523 C 15.678,6.997 18.240,6.493 19.360,7.612 C 19.550,7.801 19.873,8.219 20.040,8.425 C 20.303,8.750 20.758,9.059 21.090,9.211 C 21.687,9.480 23.101,9.590 23.654,9.035 C 23.838,8.853 23.918,8.532 25.014,8.115 C 26.850,7.418 30.593,7.384 32.135,8.817 C 32.325,8.991 33.059,9.545 33.254,9.714 C 33.802,10.197 34.752,10.532 34.752,10.532 C 34.752,10.532 36.166,11.269 36.739,11.402 C 36.988,11.461 37.893,11.567 37.893,11.567 L 37.893,2.106 L 2.148,2.106 L 2.148,6.318 C 2.148,6.318 2.885,6.164 3.119,6.054 C 3.397,5.925 3.810,5.580 4.039,5.441 C 5.465,4.586 8.082,4.817 9.825,5.398 C 10.746,5.704 11.606,7.627 12.411,8.136 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 40.000,36.795 L 40.000,0.000 L 0.000,0.000 L 0.000,36.795 L 40.000,36.795 L 40.000,36.795 Z M 1.073,1.034 L 38.967,1.034 L 38.967,35.722 L 1.073,35.722 L 1.073,1.034 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Encoder.HighFidelity\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 1.029,1.034 L 1.029,35.727 L 38.915,35.727 L 38.915,1.034 L 1.029,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 2.148,22.093 L 2.148,27.337 L 37.895,27.337 L 37.895,16.808 C 37.895,16.808 37.778,16.400 37.597,16.219 C 37.413,16.037 36.676,15.934 36.676,15.934 C 36.676,15.934 34.481,15.867 33.717,16.043 C 33.144,16.177 31.848,16.820 31.349,17.072 C 30.623,17.441 29.549,18.065 28.872,18.562 C 28.206,19.052 25.959,19.045 25.060,19.065 C 24.161,19.088 22.591,19.335 22.210,20.050 C 21.629,21.145 18.755,21.555 17.585,20.313 C 16.533,19.197 13.576,18.956 12.455,18.803 C 11.680,18.697 9.991,18.497 9.365,19.045 C 8.839,19.504 8.073,20.774 7.568,21.103 C 6.468,21.818 4.675,20.988 3.557,21.344 C 3.202,21.456 2.148,22.093 2.148,22.093 Z\"/>\n                <GeometryDrawing Geometry=\"F1 M 2.148,34.690 L 37.893,34.690 L 37.893,28.372 L 2.148,28.372 L 2.148,34.690 Z\">\n                    <GeometryDrawing.Brush>\n                        <LinearGradientBrush>\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStop Offset=\"0.00\" Color=\"#ff4c81b7\"/>\n                                <GradientStop Offset=\"1.00\" Color=\"#ffffffff\"/>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </GeometryDrawing.Brush>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 12.411,8.136 C 12.639,8.279 13.266,8.233 13.507,8.114 C 13.784,7.976 14.316,7.636 14.560,7.523 C 15.678,6.997 18.240,6.493 19.360,7.612 C 19.550,7.801 19.873,8.219 20.040,8.425 C 20.303,8.750 20.758,9.059 21.090,9.211 C 21.687,9.480 23.101,9.590 23.654,9.035 C 23.838,8.853 23.918,8.532 25.014,8.115 C 26.850,7.418 30.593,7.384 32.135,8.817 C 32.325,8.991 33.059,9.545 33.254,9.714 C 33.802,10.197 34.752,10.532 34.752,10.532 C 34.752,10.532 36.166,11.269 36.739,11.402 C 36.988,11.461 37.893,11.567 37.893,11.567 L 37.893,2.106 L 2.148,2.106 L 2.148,6.318 C 2.148,6.318 2.885,6.164 3.119,6.054 C 3.397,5.925 3.810,5.580 4.039,5.441 C 5.465,4.586 8.082,4.817 9.825,5.398 C 10.746,5.704 11.606,7.627 12.411,8.136 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 40.000,36.795 L 40.000,0.000 L 0.000,0.000 L 0.000,36.795 L 40.000,36.795 L 40.000,36.795 Z M 1.073,1.034 L 38.967,1.034 L 38.967,35.722 L 1.073,35.722 L 1.073,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ffe5ff00\" Geometry=\"F1 M 12.810,8.481 C 12.810,11.242 10.571,13.481 7.810,13.481 C 5.049,13.481 2.810,11.242 2.810,8.481 C 2.810,5.719 5.049,3.481 7.810,3.481 C 10.571,3.481 12.810,5.719 12.810,8.481 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Encoder.LowGraphics\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 1.029,1.034 L 1.029,35.727 L 38.915,35.727 L 38.915,1.034 L 1.029,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 2.148,22.093 L 2.148,27.337 L 37.895,27.337 L 37.895,16.808 L 37.597,16.219 L 9.365,19.045 L 7.568,21.103 L 2.148,22.093 L 2.148,22.093 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 2.148,34.690 L 37.893,34.690 L 37.893,28.372 L 2.148,28.372 L 2.148,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 12.411,8.136 L 13.507,8.114 L 14.560,7.523 L 19.360,7.612 L 21.090,9.211 L 23.654,9.035 L 25.014,8.115 L 37.893,11.567 L 37.893,2.106 L 2.148,2.106 L 2.148,6.318 L 9.825,5.398 L 12.411,8.136 L 12.411,8.136 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 40.000,36.795 L 40.000,0.000 L 0.000,0.000 L 0.000,36.795 L 40.000,36.795 L 40.000,36.795 Z M 1.073,1.034 L 38.967,1.034 L 38.967,35.722 L 1.073,35.722 L 1.073,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 2.148,34.690 L 11.084,34.690 L 11.084,28.372 L 2.148,28.372 L 2.148,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#ff78a1cb\" Geometry=\"F1 M 11.084,34.690 L 20.020,34.690 L 20.020,28.372 L 11.084,28.372 L 11.084,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#ffa6bad0\" Geometry=\"F1 M 20.020,34.690 L 28.956,34.690 L 28.956,28.372 L 20.020,28.372 L 20.020,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#ffcdd3da\" Geometry=\"F1 M 28.957,34.690 L 37.893,34.690 L 37.893,28.372 L 28.957,28.372 L 28.957,34.690 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Encoder.MostUsed\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 1.029,1.034 L 1.029,35.727 L 38.915,35.727 L 38.915,1.034 L 1.029,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 2.148,22.093 L 2.148,27.337 L 37.895,27.337 L 37.895,16.808 C 37.895,16.808 37.778,16.400 37.597,16.219 C 37.413,16.037 36.676,15.934 36.676,15.934 C 36.676,15.934 34.481,15.867 33.717,16.043 C 33.144,16.177 31.848,16.820 31.349,17.072 C 30.623,17.441 29.549,18.065 28.872,18.562 C 28.206,19.052 25.959,19.045 25.060,19.065 C 24.161,19.088 22.591,19.335 22.210,20.050 C 21.629,21.145 18.755,21.555 17.585,20.313 C 16.533,19.197 13.576,18.956 12.455,18.803 C 11.680,18.697 9.991,18.497 9.365,19.045 C 8.839,19.504 8.073,20.774 7.568,21.103 C 6.468,21.818 4.675,20.988 3.557,21.344 C 3.202,21.456 2.148,22.093 2.148,22.093 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 28.908,34.690 L 37.844,34.690 L 37.844,28.372 L 28.908,28.372 L 28.908,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 12.411,8.136 C 12.639,8.279 13.266,8.233 13.507,8.114 C 13.784,7.976 14.316,7.636 14.560,7.523 C 15.678,6.997 18.240,6.493 19.360,7.612 C 19.550,7.801 19.873,8.219 20.040,8.425 C 20.303,8.750 20.758,9.059 21.090,9.211 C 21.687,9.480 23.101,9.590 23.654,9.035 C 23.838,8.853 23.918,8.532 25.014,8.115 C 26.850,7.418 30.593,7.384 32.135,8.817 C 32.325,8.991 33.059,9.545 33.254,9.714 C 33.802,10.197 34.752,10.532 34.752,10.532 C 34.752,10.532 36.166,11.269 36.739,11.402 C 36.988,11.461 37.893,11.567 37.893,11.567 L 37.893,2.106 L 2.148,2.106 L 2.148,6.318 C 2.148,6.318 2.885,6.164 3.119,6.054 C 3.397,5.925 3.810,5.580 4.039,5.441 C 5.465,4.586 8.082,4.817 9.825,5.398 C 10.746,5.704 11.606,7.627 12.411,8.136 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 40.000,36.795 L 40.000,0.000 L 0.000,0.000 L 0.000,36.795 L 40.000,36.795 L 40.000,36.795 Z M 1.073,1.034 L 38.967,1.034 L 38.967,35.722 L 1.073,35.722 L 1.073,1.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 11.084,34.690 L 2.148,34.690 L 2.148,28.372 L 11.084,28.372 L 11.084,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 20.020,34.690 L 11.084,34.690 L 11.084,28.372 L 20.020,28.372 L 20.020,34.690 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 28.908,34.690 L 19.972,34.690 L 19.972,28.372 L 28.908,28.372 L 28.908,34.690 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Eraser\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ffe57e92\" Geometry=\"M 6.080,21.529 C 5.769,21.217 5.759,20.079 6.071,19.768 C 10.534,15.303 20.587,5.253 25.371,0.470 C 25.996,-0.157 28.284,-0.157 28.909,0.470 C 31.380,2.939 37.022,8.582 39.531,11.091 C 40.156,11.715 40.156,14.006 39.531,14.631 C 34.788,19.374 24.737,29.426 20.234,33.930 C 19.923,34.241 18.784,34.232 18.473,33.921 C 15.356,30.802 8.999,24.445 6.080,21.529 Z M 5.730,21.879 C 5.503,21.652 5.027,20.809 5.027,20.809 C 5.027,20.809 1.396,24.444 0.587,25.253 C -0.195,26.037 -0.196,28.896 0.587,29.677 C 2.852,31.943 8.017,37.108 10.322,39.413 C 11.104,40.197 13.966,40.197 14.748,39.413 C 15.556,38.607 19.192,34.974 19.192,34.974 C 19.192,34.974 18.348,34.497 18.123,34.271 C 15.081,31.229 8.901,25.050 5.730,21.879 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Error\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#FFD75B34\" Geometry=\"M31.428,12.143L23.573,19.286 23.573,20.714 31.428,27.859 31.428,29.288 29.286,31.429 27.858,31.429 20.713,23.572 19.285,23.572 12.143,31.429 10.715,31.429 8.571,29.288 8.571,27.859 16.428,20.714 16.428,19.286 8.571,12.143 8.571,10.715 10.715,8.571 12.143,8.571 19.285,16.429 20.713,16.429 27.858,8.571 29.286,8.571 31.428,10.715z M20,0C8.954,0 0,8.954 0,20 0,31.045 8.954,40 20,40 31.045,40 40,31.045 40,20 40,8.954 31.045,0 20,0\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Expression\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff5e5e5e\" Geometry=\"F1 M 17.887,10.038 L 17.553,11.263 L 14.844,11.263 L 12.803,19.371 C 11.899,22.946 10.990,25.711 10.075,27.665 C 8.776,30.423 7.378,32.328 5.882,33.380 C 4.744,34.184 3.605,34.586 2.468,34.586 C 1.726,34.586 1.095,34.363 0.575,33.918 C 0.191,33.608 0.000,33.206 0.000,32.712 C 0.000,32.315 0.157,31.973 0.473,31.682 C 0.788,31.392 1.175,31.246 1.633,31.246 C 1.967,31.246 2.248,31.351 2.477,31.562 C 2.706,31.771 2.820,32.013 2.820,32.285 C 2.820,32.557 2.690,32.811 2.431,33.046 C 2.232,33.219 2.134,33.349 2.134,33.436 C 2.134,33.547 2.177,33.633 2.264,33.695 C 2.375,33.781 2.548,33.825 2.783,33.825 C 3.315,33.825 3.875,33.658 4.462,33.324 C 5.050,32.990 5.572,32.492 6.030,31.830 C 6.488,31.169 6.921,30.213 7.329,28.964 C 7.502,28.444 7.966,26.730 8.721,23.824 L 11.949,11.263 L 8.721,11.263 L 8.980,10.038 C 10.007,10.038 10.725,9.967 11.133,9.825 C 11.541,9.683 11.915,9.411 12.255,9.008 C 12.595,8.606 13.037,7.855 13.582,6.754 C 14.312,5.270 15.011,4.119 15.679,3.303 C 16.594,2.202 17.556,1.376 18.563,0.826 C 19.571,0.275 20.521,0.000 21.412,0.000 C 22.352,0.000 23.106,0.238 23.676,0.714 C 24.244,1.191 24.529,1.707 24.529,2.264 C 24.529,2.697 24.387,3.062 24.103,3.358 C 23.817,3.655 23.453,3.804 23.008,3.804 C 22.624,3.804 22.312,3.692 22.070,3.470 C 21.829,3.247 21.709,2.981 21.709,2.672 C 21.709,2.474 21.789,2.230 21.950,1.939 C 22.110,1.648 22.191,1.454 22.191,1.354 C 22.191,1.182 22.136,1.052 22.024,0.965 C 21.863,0.841 21.628,0.779 21.319,0.779 C 20.540,0.779 19.841,1.027 19.223,1.521 C 18.394,2.177 17.651,3.204 16.996,4.602 C 16.662,5.332 16.050,7.144 15.159,10.038 L 17.887,10.038 Z\"/>\n                <GeometryDrawing Brush=\"#ff5e5e5e\" Geometry=\"F1 M 23.769,9.593 C 24.374,10.236 24.832,10.879 25.142,11.522 C 25.364,11.968 25.729,13.137 26.236,15.029 L 27.869,12.580 C 28.302,11.986 28.827,11.420 29.446,10.882 C 30.064,10.344 30.608,9.977 31.079,9.778 C 31.376,9.655 31.703,9.593 32.063,9.593 C 32.594,9.593 33.018,9.735 33.334,10.020 C 33.648,10.304 33.807,10.650 33.807,11.059 C 33.807,11.529 33.713,11.851 33.527,12.023 C 33.182,12.333 32.785,12.487 32.340,12.487 C 32.081,12.487 31.803,12.432 31.506,12.320 C 30.924,12.123 30.534,12.023 30.337,12.023 C 30.040,12.023 29.688,12.197 29.279,12.543 C 28.512,13.187 27.597,14.430 26.533,16.272 L 28.055,22.655 C 28.289,23.633 28.487,24.217 28.648,24.408 C 28.809,24.601 28.970,24.696 29.131,24.696 C 29.391,24.696 29.693,24.555 30.040,24.270 C 30.720,23.701 31.302,22.959 31.784,22.043 L 32.434,22.377 C 31.654,23.837 30.664,25.049 29.465,26.014 C 28.784,26.558 28.209,26.830 27.739,26.830 C 27.046,26.830 26.496,26.440 26.088,25.661 C 25.828,25.179 25.290,23.101 24.474,19.427 C 22.544,22.779 20.997,24.938 19.835,25.902 C 19.080,26.521 18.351,26.830 17.646,26.830 C 17.150,26.830 16.699,26.650 16.291,26.292 C 15.994,26.021 15.846,25.655 15.846,25.197 C 15.846,24.789 15.981,24.449 16.254,24.177 C 16.526,23.905 16.860,23.769 17.256,23.769 C 17.651,23.769 18.072,23.967 18.518,24.362 C 18.839,24.647 19.086,24.789 19.260,24.789 C 19.408,24.789 19.600,24.690 19.835,24.492 C 20.416,24.022 21.208,23.008 22.210,21.449 C 23.212,19.891 23.867,18.766 24.177,18.072 C 23.409,15.066 22.995,13.477 22.934,13.304 C 22.648,12.500 22.277,11.931 21.820,11.597 C 21.362,11.263 20.688,11.096 19.798,11.096 C 19.513,11.096 19.186,11.108 18.814,11.133 L 18.814,10.465 L 23.769,9.593 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Extras\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 25.185,14.815 L 25.185,5.926 L 7.407,5.926 L 0.741,12.525 L 0.741,22.222 L 0.741,39.259 L 27.407,39.259 L 34.074,32.592 L 34.074,14.815 L 25.185,14.815 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 29.630,10.370 L 40.000,10.370 L 40.000,0.000 L 29.630,0.000 L 29.630,10.370 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 34.074,23.212 L 31.111,26.175 L 31.112,18.297 L 34.074,15.335 L 34.074,23.212 Z M 34.074,32.592 L 31.111,35.555 L 31.111,27.222 L 34.074,24.259 L 34.074,32.592 Z M 22.743,17.778 L 25.706,14.815 L 33.548,14.815 L 30.585,17.778 L 22.743,17.778 Z M 30.370,19.259 L 30.370,26.891 L 27.407,29.879 L 27.286,22.123 L 30.370,19.038 L 30.370,19.259 Z M 30.370,36.296 L 27.407,39.259 L 27.407,30.950 L 30.370,27.963 L 30.370,36.296 Z M 19.048,21.481 L 22.011,18.519 L 29.630,18.519 L 29.844,18.519 L 26.881,21.481 L 19.048,21.481 Z M 26.667,30.370 L 18.519,30.370 L 18.519,22.222 L 26.667,22.222 L 26.667,30.370 Z M 26.667,39.259 L 18.519,39.259 L 18.519,31.111 L 26.667,31.111 L 26.667,39.259 Z M 21.481,10.143 L 21.481,18.001 L 18.519,20.964 L 18.519,13.106 L 21.481,10.143 Z M 10.143,12.592 L 13.106,9.630 L 20.949,9.630 L 17.986,12.592 L 10.143,12.592 Z M 17.778,21.481 L 9.630,21.481 L 9.630,13.333 L 17.778,13.333 L 17.778,21.481 Z M 17.778,30.370 L 9.630,30.370 L 9.630,22.222 L 17.778,22.222 L 17.778,30.370 Z M 17.778,39.259 L 9.630,39.259 L 9.630,31.111 L 17.778,31.111 L 17.778,39.259 Z M 0.741,12.592 L 3.704,9.630 L 12.059,9.630 L 9.096,12.592 L 0.741,12.592 Z M 8.889,21.481 L 0.741,21.481 L 0.741,13.333 L 8.889,13.333 L 8.889,21.481 Z M 8.889,30.370 L 0.741,30.370 L 0.741,22.222 L 8.889,22.222 L 8.889,30.370 Z M 8.889,39.259 L 0.741,39.259 L 0.741,31.111 L 8.889,31.111 L 8.889,39.259 Z M 7.407,5.926 L 15.773,5.926 L 12.810,8.889 L 4.414,8.889 L 7.407,5.926 Z M 21.704,8.889 L 13.856,8.889 L 16.820,5.926 L 24.667,5.926 L 21.704,8.889 Z M 25.185,6.455 L 25.185,14.289 L 22.217,17.257 L 22.222,9.418 L 25.185,6.455 Z M 25.926,14.074 L 25.926,5.185 L 7.096,5.185 L 0.000,12.281 L 0.000,40.000 L 27.676,40.000 L 34.815,32.900 L 34.815,14.074 L 25.926,14.074 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Transition.Fade-->\n    <DrawingBrush x:Key=\"Vector.Fade\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff83a7cc\" Geometry=\"M 30.693,26.644 L 30.693,10.658 L 9.307,10.658 L 9.307,26.644 L 30.693,26.644 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed0e2\" Geometry=\"M 30.693,8.029 L 6.678,8.029 L 6.678,26.644 L 2.700,26.644 L 2.700,2.700 L 30.693,2.700 L 30.693,8.029 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed0e2\" Geometry=\"M 9.307,10.658 L 30.693,10.658 L 30.693,9.307 L 8.029,9.307 L 8.029,26.644 L 9.307,26.644 L 9.307,10.658 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 33.322,9.307 L 33.322,29.272 L 8.029,29.272 L 8.029,35.950 L 38.650,35.950 L 38.650,9.307 L 33.322,9.307 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 6.678,27.993 L 6.678,26.644 L 2.700,26.644 L 2.700,27.993 L 6.678,27.993 Z M 1.350,26.644 L 1.350,2.700 L 2.700,2.700 L 2.700,26.644 L 1.350,26.644 L 1.350,26.644 Z M 31.971,8.029 L 30.693,8.029 L 30.693,2.700 L 31.971,2.700 L 31.971,8.029 L 31.971,8.029 Z M 30.693,1.350 L 2.700,1.350 L 2.700,2.700 L 30.693,2.700 L 30.693,1.350 L 30.693,1.350 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed0e2\" Geometry=\"M 38.650,34.601 M 9.307,26.644 L 30.693,26.644 L 30.693,10.658 L 37.301,10.658 L 37.301,34.601 L 9.307,34.601 L 9.307,29.272 L 9.307,26.644 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 40,8.029 L 33.322,8.029 L 33.322,0 L 0,0 L 0,29.272 L 6.678,29.272 L 6.678,37.300 L 40,37.300 L 40,8.029 Z M 1.350,1.350 L 1.350,27.993 L 31.971,27.993 L 31.971,1.350 L 1.350,1.350 L 1.350,1.350 Z M 8.029,35.950 L 8.029,29.272 L 33.322,29.272 L 33.322,9.307 L 38.650,9.307 L 38.650,35.950 L 8.029,35.950 L 8.029,35.950 Z\"/>\n                <GeometryDrawing Brush=\"#ffa09f9f\" Geometry=\"M 8.029,27.993 L 8.029,9.307 L 31.971,9.307 L 31.971,8.029 L 6.678,8.029 L 6.678,27.993 L 8.029,27.993 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 31.971,10.658 L 31.971,9.307 L 30.693,9.307 L 30.693,10.658 L 31.971,10.658 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 9.307,27.993 L 9.307,26.644 L 8.029,26.644 L 8.029,27.993 L 9.307,27.993 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Ffmpeg\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 2.500,2.500 L 15.833,2.500 L 2.500,15.833 L 2.500,29.167 L 29.167,2.500 L 42.500,2.500 L 2.500,42.500 L 15.833,42.500 L 42.500,15.833 L 42.500,29.167 L 29.167,42.500 L 42.500,42.500\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"5\" Brush=\"#FF008600\" StartLineCap=\"Round\" EndLineCap=\"Round\" LineJoin=\"Round\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.File\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 19.331,0.714 L 0.714,0.714 L 0.714,39.286 L 29.286,39.286 L 29.286,10.666 L 19.331,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.286,0 L 0,0 L 0,40 L 30,40 L 30,10.714 L 19.286,0 Z M 19.286,10.714 L 29.286,10.714 L 19.286,0.714 L 19.286,10.714 Z M 0.714,0.714 L 18.572,0.714 L 18.572,11.428 L 29.286,11.428 L 29.286,39.286 L 0.714,39.286 L 0.714,0.714 L 0.714,0.714 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.File.Add\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 18.664,0.666 L 0.666,0.666 L 0.666,36.667 L 24.667,36.667 L 24.667,34.667 L 19.333,34.667 L 19.333,29.333 L 24.667,29.333 L 24.667,24 L 27.334,24 L 27.334,9.332 L 18.664,0.666 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 25.333,30 L 20,30 L 20,34 L 25.333,34 L 25.333,40 L 30,40 L 30,34 L 35.334,34 L 35.334,30 L 30,30 L 30,24.667 L 25.333,24.667 L 25.333,30 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 18.666,0 L 0,0 L 0,37.333 L 24.667,37.333 L 24.667,36.667 L 0.666,36.667 L 0.666,0.666 L 18,0.666 L 18,10 L 27.334,10 L 27.334,24 L 28,24 L 28,9.333 L 18.666,0 Z M 27.334,9.333 L 18.667,9.333 L 18.667,1.333 L 18.667,0.666\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.File.New\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 8.167,3.363 L 8.140,39.448 L 35.058,39.448 L 35.058,12.205 L 26.030,3.362 L 8.167,3.363 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 26.315,2.737 L 12.849,2.727 L 12.849,3.383 L 25.647,3.383 L 25.647,12.726 L 35.061,12.726 L 35.061,39.444 L 8.143,39.444 L 8.143,12.602 L 7.329,12.602 L 7.329,40 L 35.597,40 L 35.600,11.910 L 26.315,2.737 Z M 34.882,12.150 L 26.030,12.150 L 26.030,3.384\"/>\n                <GeometryDrawing Brush=\"#ffebc67c\" Geometry=\"F1 M 1.375,9.925 L 1.375,11.263 L 2.723,11.263 L 4.708,9.293 L 5.368,9.293 L 5.368,11.970 L 6.031,12.626 L 6.692,12.626 L 7.353,11.970 L 7.353,9.293 L 8.015,9.293 L 8.675,9.949 L 9.336,10.605 L 9.998,11.262 L 11.347,11.262 L 11.347,9.925 L 10.685,9.268 L 10.023,8.612 L 9.363,7.956 L 9.363,7.297 L 12.059,7.297 L 12.721,6.642 L 12.721,5.985 L 12.061,5.328 L 9.365,5.328 L 9.365,4.672 L 10.025,4.015 L 10.687,3.359 L 11.348,2.703 L 12.008,0.707 L 10,1.365 L 8.016,3.334 L 7.354,3.334 L 7.354,0.658 L 6.692,0 L 6.032,0 L 5.368,0.658 L 5.368,3.334 L 4.708,3.334 L 4.047,2.677 L 3.385,2.021 L 2.723,1.364 L 0.713,0.707 L 1.375,2.702 L 2.037,3.359 L 2.697,4.015 L 3.359,4.672 L 3.359,5.328 L 0.661,5.328 L 0,5.985 L 0,6.642 L 0.661,7.297 L 3.359,7.297 L 3.359,7.954 L 1.375,9.925 Z M 7.965,5.253 L 7.965,7.248 L 7.305,7.905 L 5.294,7.905 L 4.633,7.248 L 4.633,5.253 L 5.293,4.596 L 7.304,4.596 L 7.965,5.253 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to File.Invalid-->\n    <DrawingBrush x:Key=\"Vector.FilePermission\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 18.667,0.667 L 0.667,0.667 L 0.667,36.668 L 27.334,36.668 L 27.334,9.334 L 18.667,0.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 18.667,0 L 0,0 L 0,37.335 L 19.643,37.335 L 19.731,36.668 L 0.667,36.668 L 0.667,0.667 L 18.001,0.667 L 18.001,10.001 L 27.334,10.001 L 27.334,21.775 L 28.001,21.775 L 28.001,9.334 L 18.667,0 Z M 27.334,9.334 L 18.667,9.334 L 18.667,0.667 L 27.334,9.334 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20.667,32.002 L 31.334,32.002 L 31.334,29.334 L 20.667,29.334 L 20.667,32.002 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a33\" Geometry=\"M 31.334,32.002 L 20.669,32.002 L 20.669,29.334 L 31.334,29.334 L 31.334,32.002 Z M 26.001,21.336 C 20.847,21.336 16.668,25.514 16.668,30.667 C 16.668,35.823 20.847,40 26.001,40 C 31.155,40 35.333,35.823 35.333,30.667 C 35.333,25.514 31.155,21.336 26.001,21.336 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.First\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 6.600,16.700 L 18.400,28.400 L 26.640,28.400 L 18.290,20.043 L 40,20.043 L 40,13.357 L 18.290,13.357 L 26.640,5 L 18.400,5 L 6.600,16.700 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 0,33.400 L 2.500,33.400 L 2.500,0 L 0,0 L 0,33.400 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to First.Double-->\n    <DrawingBrush x:Key=\"Vector.First.Green\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff60a08a\" Geometry=\"M 21.179,19.999 L 29.413,19.999 L 22.354,12.941 L 40.001,12.941 L 40.001,7.057 L 22.354,7.057 L 29.413,0 L 21.179,0 L 11.493,9.999 L 21.179,19.999 Z\"/>\n                <GeometryDrawing Brush=\"#ff60a08a\" Geometry=\"M 0,9.999 L 9.413,19.999 L 17.649,19.999 L 8.238,10 L 17.649,0 L 9.413,0 L 0,9.999 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Fit\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,40 L 0,40 L 0,0 L 40,0 L 40,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 38.889,20 L 35.556,15.556 L 32.222,15.556 L 34.444,18.890 L 27.778,18.890 L 27.778,21.111 L 34.444,21.111 L 32.222,24.445 L 35.556,24.445 L 38.889,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 20,38.889 L 24.445,35.556 L 24.445,32.222 L 21.111,34.444 L 21.111,27.778 L 18.889,27.778 L 18.889,34.444 L 15.556,32.222 L 15.556,35.556 L 20,38.889 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 20,1.111 L 15.556,4.444 L 15.556,7.778 L 18.889,5.556 L 18.889,12.222 L 21.111,12.222 L 21.111,5.556 L 24.445,7.778 L 24.445,4.444 L 20,1.111 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 1.111,20 L 4.444,24.445 L 7.778,24.445 L 5.556,21.111 L 12.222,21.111 L 12.222,18.890 L 5.556,18.890 L 7.778,15.556 L 4.444,15.556 L 1.111,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 0,40 L 40,40 L 40,0 L 0,0 L 0,40 Z M 38.889,1.111 L 38.889,38.889 L 1.111,38.889 L 1.111,1.111 L 38.889,1.111 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Flattr\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff000000\" Geometry=\"F1 M 7.950,50.000 C 7.950,26.800 26.800,7.950 50.000,7.950 C 50.200,7.950 66.650,7.950 72.700,7.950 L 60.500,20.150 L 66.100,25.750 L 91.300,0.000 L 74.800,0.000 L 50.000,0.000 C 22.400,0.050 0.000,22.400 0.000,50.000 L 0.000,88.850 L 7.950,81.550 L 7.950,81.150 C 7.950,80.150 7.950,50.300 7.950,50.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff000000\" Geometry=\"F1 M 100.000,11.150 L 92.050,18.450 L 92.050,18.850 C 92.050,19.850 92.050,49.700 92.050,50.000 C 92.050,73.200 73.150,92.050 50.000,92.050 C 49.800,92.050 33.350,92.050 27.300,92.050 L 39.500,79.850 L 33.900,74.250 L 8.750,100.000 L 25.200,100.000 L 50.000,100.000 C 77.650,100.000 100.000,77.600 100.000,50.000 L 100.000,11.150 L 100.000,11.150 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to Flip.Horizontal-->\n    <DrawingBrush x:Key=\"Vector.FlipHorizontal\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 0,30.001 L 17.500,30.001 L 17.500,0 L 0,30.001 Z\"/>\n                <GeometryDrawing Brush=\"#ffb6b6b7\" Geometry=\"M 22.500,0 L 22.500,30.001 L 40,30.001 L 22.500,0 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 23.750,5.014 L 23.750,28.751 L 37.705,28.751 L 23.750,5.014 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Flip.Vertical-->\n    <DrawingBrush x:Key=\"Vector.FlipVertical\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 30.001,40 L 30.001,22.500 L 0,22.500 L 30.001,40 Z\"/>\n                <GeometryDrawing Brush=\"#ffb6b6b7\" Geometry=\"M 0,17.500 L 30.001,17.500 L 30.001,0 L 0,17.500 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 5.014,16.249 L 28.751,16.249 L 28.751,2.295 L 5.014,16.249 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Folder\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffecc677\" Geometry=\"M 18.712,5.833 C 18.712,5.833 6.931,5.784 1.455,5.833 C 0.940,5.838 0,7.291 0,7.291 L 0,35 L 40,35 L 40,1.458 L 38.545,0 L 26.182,0 L 18.712,5.833 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20.700,5.833 L 39,5.833 L 39,2.200 L 38,1.200 L 26.435,1.200 L 20.700,5.833 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Forward\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 24.944,9.962 L 0,9.962 L 0,17.652 L 24.944,17.652 L 15.873,27.600 L 26.055,27.600 L 40,13.800 L 26.352,0 L 16.130,0 L 24.944,9.962 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Forward.Bold\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 26.665,21.936 L 26.665,40 L 40,40 L 40,0 L 26.665,0 L 26.665,18.065 L 0,0 L 0,40 L 26.665,21.936 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.FramesFromVideo\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 24.626,25.753 L 12.480,25.753 L 12.480,20.738 L 1.064,20.738 L 1.064,36.434 L 24.626,36.434 L 24.626,25.753 Z\"/>\n\n                <GeometryDrawing Geometry=\"F1 M 13.329,0.525 L 0.525,17.764\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.8\" Brush=\"#ff666666\" StartLineCap=\"Square\" EndLineCap=\"Square\" MiterLimit=\"1.0\">\n                            <Pen.DashStyle>\n                                <DashStyle Dashes=\"4.00,2.27\"/>\n                            </Pen.DashStyle>\n                        </Pen>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Geometry=\"F1 M 39.858,24.906 L 24.715,40.048\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.8\" Brush=\"#ff666666\" StartLineCap=\"Square\" EndLineCap=\"Square\" MiterLimit=\"1.0\">\n                            <Pen.DashStyle>\n                                <DashStyle Dashes=\"4.00,2.27\"/>\n                            </Pen.DashStyle>\n                        </Pen>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 13.880,0.751 L 13.880,24.301 L 39.598,24.301 L 39.598,0.751 L 13.880,0.751 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 14.640,15.046 L 14.640,18.605 L 38.906,18.605 L 38.906,11.458 C 38.906,11.458 38.826,11.181 38.703,11.058 C 38.579,10.934 38.078,10.865 38.078,10.865 C 38.078,10.865 36.588,10.819 36.069,10.939 C 35.680,11.030 34.801,11.466 34.462,11.637 C 33.969,11.888 33.240,12.311 32.781,12.648 C 32.329,12.981 30.803,12.976 30.193,12.990 C 29.583,13.006 28.517,13.173 28.259,13.659 C 27.864,14.402 25.913,14.680 25.119,13.838 C 24.404,13.080 22.397,12.916 21.637,12.812 C 21.110,12.740 19.964,12.605 19.539,12.976 C 19.182,13.288 18.662,14.150 18.319,14.373 C 17.573,14.859 16.355,14.295 15.596,14.537 C 15.355,14.613 14.640,15.046 14.640,15.046 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 14.640,23.597 L 38.904,23.597 L 38.904,19.308 L 14.640,19.308 L 14.640,23.597 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 21.607,5.571 C 21.761,5.668 22.187,5.637 22.351,5.556 C 22.539,5.463 22.900,5.232 23.065,5.155 C 23.824,4.798 25.563,4.456 26.324,5.215 C 26.452,5.344 26.672,5.627 26.785,5.767 C 26.964,5.988 27.273,6.198 27.498,6.301 C 27.903,6.484 28.863,6.558 29.239,6.182 C 29.363,6.058 29.417,5.840 30.162,5.557 C 31.408,5.084 33.949,5.061 34.996,6.033 C 35.124,6.152 35.623,6.528 35.755,6.643 C 36.127,6.970 36.772,7.198 36.772,7.198 C 36.772,7.198 37.732,7.698 38.121,7.788 C 38.290,7.828 38.904,7.900 38.904,7.900 L 38.904,1.478 L 14.640,1.478 L 14.640,4.337 C 14.640,4.337 15.140,4.232 15.299,4.158 C 15.487,4.070 15.768,3.836 15.924,3.742 C 16.891,3.162 18.668,3.318 19.851,3.712 C 20.476,3.921 21.060,5.226 21.607,5.571 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 1.036,17.204 L 0.334,17.204 L 0.334,40.049 L 25.327,40.049 L 25.327,25.780 L 24.626,25.780 L 24.598,25.753 L 24.598,36.461 L 1.036,36.461 L 1.036,20.764 L 12.453,20.764 L 12.453,17.204 L 1.738,17.204 L 1.036,17.204 Z M 1.036,17.905 L 3.169,17.905 L 3.169,20.035 L 1.036,20.035 L 1.036,17.905 Z M 5.328,17.905 L 7.459,17.905 L 7.459,20.035 L 5.328,20.035 L 5.328,17.905 Z M 9.619,17.905 L 11.751,17.905 L 11.751,20.035 L 9.619,20.035 L 9.619,17.905 Z M 1.036,37.162 L 3.169,37.162 L 3.169,39.293 L 1.036,39.293 L 1.036,37.162 Z M 5.328,37.162 L 7.459,37.162 L 7.459,39.293 L 5.328,39.293 L 5.328,37.162 Z M 9.619,37.162 L 11.751,37.162 L 11.751,39.293 L 9.619,39.293 L 9.619,37.162 Z M 13.911,37.162 L 16.043,37.162 L 16.043,39.293 L 13.911,39.293 L 13.911,37.162 Z M 18.202,37.162 L 20.334,37.162 L 20.334,39.293 L 18.202,39.293 L 18.202,37.162 Z M 22.494,37.162 L 24.626,37.162 L 24.626,39.293 L 22.494,39.293 L 22.494,37.162 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 40.334,25.025 L 40.334,0.048 L 13.182,0.048 L 13.182,25.025 L 40.334,25.025 L 40.334,25.025 Z M 13.911,0.751 L 39.633,0.751 L 39.633,24.297 L 13.911,24.297 L 13.911,0.751 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.FreeDrawing\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff797a7a\" Geometry=\"M 19.676,24.443 C 19.876,24.644 20.610,24.644 20.811,24.443 C 24.891,20.361 34.555,10.698 39.199,6.054 C 39.824,5.430 39.616,3.298 39.199,2.518 C 38.845,1.857 37.735,0.755 37.077,0.396 C 36.299,-0.026 34.167,-0.229 33.541,0.396 C 29.459,4.480 19.543,14.395 15.153,18.785 C 14.945,18.993 14.945,19.753 15.153,19.961 C 16.201,21.009 18.666,23.433 19.676,24.443 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a33\" Geometry=\"M 14.679,20.199 C 14.513,20.033 13.904,20.033 13.738,20.199 C 12.256,21.682 8.811,24.835 7.373,26.565 C 6.966,27.056 6.290,28.142 5.958,28.686 C 5.547,29.361 4.805,30.770 4.544,31.516 C 4.486,31.682 4.420,32.098 4.544,32.222 C 5.234,32.912 6.773,34.452 7.373,35.052 C 7.498,35.176 7.913,35.109 8.080,35.052 C 8.826,34.789 10.233,34.049 10.909,33.637 C 11.454,33.306 12.540,32.631 13.031,32.222 C 14.761,30.784 17.867,27.387 19.396,25.858 C 19.563,25.691 19.563,25.081 19.396,24.915 C 18.285,23.803 15.829,21.350 14.679,20.199 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a33\" Geometry=\"M 4.544,32.930 C 4.294,32.680 3.456,32.794 3.129,32.930 C 2.898,33.026 2.560,33.429 2.422,33.637 C 2.204,33.966 1.845,34.679 1.715,35.052 C 1.598,35.386 1.465,36.216 1.715,36.466 C 2.107,36.859 2.777,37.528 3.129,37.881 C 3.379,38.130 4.199,37.955 4.544,37.881 C 4.931,37.797 5.627,37.390 5.958,37.174 C 6.168,37.036 6.546,36.686 6.666,36.466 C 6.835,36.156 6.916,35.302 6.666,35.052 C 6.164,34.550 5.076,33.461 4.544,32.930 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76344\" Geometry=\"F1 M 1.988,22.023 L 0,21.195 C 2.973,14.060 11.707,11.044 19.066,11.232 L 19.013,13.386 C 12.417,13.242 4.571,15.830 1.988,22.023 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76344\" Geometry=\"F1 M 18.326,39.507 C 14.684,39.507 11.137,38.749 8.066,37.315 L 8.979,35.364 C 11.765,36.664 14.997,37.353 18.326,37.353 C 27.708,37.353 35.342,31.974 35.342,25.363 C 35.342,22.174 33.556,19.163 30.314,16.884 L 31.552,15.121 C 35.385,17.815 37.497,21.453 37.497,25.363 C 37.497,33.162 28.897,39.507 18.326,39.507 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.FreeText\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff545555\" Geometry=\"M 0,23.990 L 5.095,23.990 L 8.225,18.507 L 17.821,18.507 L 18.802,23.990 L 23.305,23.990 L 18.619,0 L 13.709,0 L 0,23.990 Z M 15.079,5.483 L 15.765,5.483 L 17.522,14.394 L 10.212,14.394 L 15.079,5.483 Z\"/>\n                <GeometryDrawing Brush=\"#ff545555\" Geometry=\"F1 M 34.316,8.826 C 32.941,8.826 31.343,10.114 29.521,12.691 C 27.699,15.268 26.788,17.405 26.788,19.101 C 26.788,20.299 27.184,20.898 27.975,20.898 C 29.120,20.898 30.708,19.742 32.739,17.431 C 34.768,15.120 35.783,12.996 35.783,11.059 C 35.783,9.571 35.294,8.826 34.316,8.826 Z M 35.268,17.618 C 33.810,19.576 32.368,21.043 30.942,22.022 C 29.515,23.001 28.209,23.490 27.022,23.490 C 26.221,23.490 25.528,23.152 24.946,22.475 C 24.362,21.798 24.071,20.929 24.071,19.867 C 24.071,17.129 25.294,14.181 27.741,11.020 C 30.187,7.861 32.618,6.281 35.034,6.281 C 35.908,6.281 36.559,6.780 36.986,7.780 C 37.121,8.113 37.334,8.279 37.626,8.279 C 38.459,8.279 38.876,8.603 38.876,9.248 C 38.876,9.571 38.823,10.013 38.719,10.576 C 38.157,13.647 37.876,15.812 37.876,17.072 C 37.876,19.591 38.354,21.100 39.313,21.600 C 39.771,21.850 40,22.158 40,22.522 C 40,22.845 39.776,23.170 39.328,23.498 C 38.881,23.826 38.448,23.990 38.032,23.990 C 37.230,23.990 36.570,23.438 36.049,22.334 C 35.528,21.231 35.268,19.659 35.268,17.618 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Gif\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 0.701,32.560 L 39.270,32.560 L 39.270,0.713 L 0.701,0.713 L 0.701,32.560 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c181\" Geometry=\"F1 M 3.621,16.193 C 3.121,15.983 1.402,15.926 1.402,15.926 L 1.402,31.851 L 38.541,31.851 L 38.541,15.926 L 37.111,15.926 L 37.111,22.439 L 24.946,22.439 L 26.270,25.337 L 27.707,28.238 L 5.665,28.238 L 10.703,18.087 C 10.703,18.087 8.203,18.228 6.925,17.806 C 5.960,17.490 4.316,16.485 3.621,16.193 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 25.694,21.727 L 36.409,21.727 L 36.409,10.866 L 25.694,10.866 L 25.694,21.727 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 0,33.300 L 40,33.300 L 40,0 L 0,0 L 0,33.300 Z M 0.701,0.713 L 39.270,0.713 L 39.270,32.560 L 0.701,32.560 L 0.701,0.713 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9c181\" Geometry=\"F1 M 24.263,20.989 L 24.992,20.989 L 24.992,15.926 L 21.900,15.926 L 24.263,20.989 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 17.111,7.251 L 7.124,27.500 L 26.395,27.500 L 17.111,7.251 Z\"/>\n                <GeometryDrawing Brush=\"#ffd76243\" Geometry=\"F1 M 14.481,10.823 C 13.826,12.226 12.577,14.894 12.249,15.444 C 11.318,17.003 10.911,17.698 8.973,17.698 C 5.555,17.698 2.784,14.889 2.784,11.425 C 2.784,7.957 5.555,5.149 8.973,5.149 C 12.393,5.149 15.943,7.689 14.481,10.823 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Gifski\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fff7cd42\" Geometry=\"F1 M 30.412,9.800 L 9.704,30.581 L 9.704,35.398 L 35.212,9.800 L 30.412,9.800 Z\"/>\n                <GeometryDrawing Brush=\"#fff59749\" Geometry=\"F1 M 35.234,9.800 L 9.704,35.419 L 9.704,40.235 L 40.034,9.800 L 35.234,9.800 Z\"/>\n                <GeometryDrawing Brush=\"#fff13f4d\" Geometry=\"F1 M 40.055,9.800 L 9.704,40.257 L 9.704,45.038 L 44.820,9.800 L 40.055,9.800 Z\"/>\n                <GeometryDrawing Brush=\"#ffeb1fbb\" Geometry=\"F1 M 44.820,9.800 L 9.704,45.038 L 9.704,49.800 L 9.758,49.800 L 49.620,9.800 L 44.820,9.800 Z\"/>\n                <GeometryDrawing Brush=\"#ffd642bd\" Geometry=\"F1 M 49.704,9.800 L 49.649,9.800 L 9.788,49.800 L 14.588,49.800 L 49.704,14.562 L 49.704,9.800 Z\"/>\n                <GeometryDrawing Brush=\"#ffba52ba\" Geometry=\"F1 M 49.704,14.591 L 14.618,49.800 L 19.418,49.800 L 49.704,19.408 L 49.704,14.591 Z\"/>\n                <GeometryDrawing Brush=\"#ff9158ba\" Geometry=\"F1 M 49.704,19.438 L 19.448,49.800 L 24.248,49.800 L 49.704,24.255 L 49.704,19.438 Z\"/>\n                <GeometryDrawing Brush=\"#ff4d43b4\" Geometry=\"F1 M 49.704,24.285 L 24.277,49.800 L 29.077,49.800 L 49.704,29.102 L 49.704,24.285 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Gdi\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 19.000,28.000 L 1.000,28.000 L 1.000,11.000 L 19.000,11.000 L 19.000,28.000 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ffcd5833\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 24.000,38.000 L 8.000,38.000 L 8.000,22.000 L 24.000,22.000 L 24.000,38.000 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff2d9ddd\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 26.000,20.000 L 12.000,20.000 L 12.000,6.000 L 26.000,6.000 L 26.000,20.000 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff82a65e\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 39.000,21.000 L 19.000,21.000 L 19.000,1.000 L 39.000,1.000 L 39.000,21.000 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#fff2cf42\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ff000000\" Geometry=\"F1 M 27.049,10.629 L 27.049,13.991 L 26.148,13.991 C 26.075,13.742 25.995,13.533 25.907,13.363 C 25.535,13.843 24.984,14.084 24.254,14.084 C 23.481,14.084 22.845,13.813 22.347,13.272 C 21.849,12.732 21.600,12.000 21.600,11.078 C 21.600,10.181 21.841,9.427 22.323,8.816 C 22.805,8.206 23.522,7.900 24.474,7.900 C 25.189,7.900 25.765,8.082 26.201,8.445 C 26.638,8.808 26.920,9.324 27.049,9.992 L 25.265,10.168 C 25.177,9.544 24.903,9.232 24.443,9.232 C 23.840,9.232 23.538,9.806 23.538,10.955 C 23.538,11.648 23.635,12.107 23.828,12.328 C 24.021,12.548 24.256,12.660 24.531,12.660 C 24.754,12.660 24.943,12.591 25.100,12.457 C 25.257,12.322 25.337,12.138 25.340,11.904 L 24.347,11.904 L 24.347,10.629 L 27.049,10.629 Z\"/>\n                <GeometryDrawing Brush=\"#ff000000\" Geometry=\"F1 M 29.862,12.611 L 30.341,12.611 C 30.645,12.611 30.903,12.463 31.112,12.168 C 31.321,11.871 31.426,11.468 31.426,10.959 C 31.426,10.522 31.332,10.146 31.147,9.829 C 30.961,9.513 30.692,9.355 30.341,9.355 L 29.862,9.355 L 29.862,12.611 Z M 28.020,13.991 L 28.020,7.992 L 30.341,7.992 C 31.348,7.992 32.103,8.291 32.604,8.889 C 33.105,9.486 33.355,10.178 33.355,10.963 C 33.355,11.859 33.086,12.588 32.549,13.149 C 32.011,13.711 31.313,13.991 30.455,13.991 L 28.020,13.991 Z\"/>\n                <GeometryDrawing Brush=\"#ff000000\" Geometry=\"F1 M 35.974,7.992 L 35.974,13.991 L 34.133,13.991 L 34.133,7.992 L 35.974,7.992 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Gfycat\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff2f72ff\" Geometry=\" M 31.623,32.960 C 31.623,36.795 30.261,40.064 27.537,42.767 C 24.813,45.470 21.531,46.821 17.692,46.821 L 13.194,46.821 C 11.915,46.821 10.808,46.365 9.876,45.451 C 8.944,44.538 8.477,43.443 8.477,42.164 C 8.477,40.886 8.934,39.790 9.849,38.877 C 10.763,37.964 11.860,37.507 13.139,37.507 L 17.637,37.507 C 18.916,37.507 20.004,37.060 20.900,36.165 C 21.796,35.270 22.244,34.202 22.244,32.960 L 22.244,23.591 C 22.244,22.313 21.796,21.226 20.900,20.332 C 20.004,19.437 18.935,18.989 17.692,18.989 C 16.412,18.989 15.315,19.446 14.401,20.359 C 13.487,21.272 13.030,22.349 13.030,23.591 C 13.030,24.504 13.432,25.527 14.236,26.659 C 15.041,27.792 15.443,28.814 15.443,29.728 C 15.443,31.006 14.986,32.102 14.072,33.015 C 13.158,33.928 12.061,34.384 10.781,34.384 C 8.697,34.384 6.942,33.051 5.516,30.385 C 4.309,28.157 3.706,25.892 3.706,23.591 C 3.706,19.756 5.068,16.478 7.792,13.757 C 10.516,11.036 13.798,9.675 17.637,9.675 C 21.476,9.675 24.767,11.036 27.509,13.757 C 30.251,16.478 31.623,19.756 31.623,23.591 L 31.623,32.960 Z\"/>\n                <GeometryDrawing Brush=\"#ff2f72ff\" Geometry=\" M 34.505,12.820 C 35.234,10.387 35.542,7.845 35.542,7.845 C 35.640,7.161 35.165,6.713 34.486,6.844 C 34.486,6.844 32.024,7.300 30.137,7.770 C 28.250,8.240 26.363,8.937 26.363,8.937 C 26.363,8.937 28.426,10.137 30.191,12.101 C 31.954,14.064 32.862,16.831 32.862,16.831 C 32.862,16.831 33.775,15.253 34.505,12.820 Z\"/>\n                <GeometryDrawing Brush=\"#ff2f72ff\" Geometry=\" M 1.050,12.820 C 0.320,10.387 0.013,7.845 0.013,7.845 C -0.086,7.161 0.389,6.713 1.068,6.844 C 1.068,6.844 3.530,7.300 5.417,7.770 C 7.304,8.240 9.191,8.937 9.191,8.937 C 9.191,8.937 7.128,10.137 5.364,12.101 C 3.600,14.064 2.692,16.831 2.692,16.831 C 2.692,16.831 1.779,15.253 1.050,12.820 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Gog\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"M 29.755,61.110 L 18.115,61.110 L 18.115,61.110 C 17.220,61.110 16.487,61.842 16.487,62.778 L 16.487,62.778 L 16.487,62.778 L 16.487,71.081 L 16.487,71.081 L 16.487,71.081 C 16.487,71.977 17.220,72.750 18.115,72.750 L 18.115,72.750 L 19.336,72.750 L 29.755,72.750 L 29.755,78.285 L 15.225,78.285 L 15.225,78.285 C 12.865,78.285 10.911,76.372 10.911,74.012 L 10.911,59.848 C 10.911,57.488 12.824,55.575 15.225,55.575 L 29.755,55.575 L 29.755,61.110 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"M 33.978,45.691 C 33.978,48.092 32.024,50.045 29.623,50.045 L 10.942,50.045 L 10.942,44.429 L 26.692,44.429 L 26.692,44.429 C 27.628,44.429 28.361,43.656 28.361,42.760 L 28.361,42.760 L 28.361,24.201 L 28.361,24.201 C 28.361,23.265 27.628,22.533 26.692,22.533 L 26.692,22.533 L 18.268,22.533 L 18.268,22.533 C 17.331,22.533 16.599,23.265 16.599,24.201 L 16.599,24.201 L 16.599,32.626 L 16.599,32.626 C 16.599,33.562 17.331,34.295 18.268,34.295 L 18.268,34.295 L 25.024,34.295 L 25.024,39.911 L 15.337,39.911 C 12.936,39.911 10.982,37.958 10.982,35.556 L 10.982,21.230 C 10.982,18.829 12.936,16.875 15.337,16.875 L 29.663,16.875 C 32.065,16.875 34.018,18.829 34.018,21.230 L 34.018,45.691 L 33.978,45.691 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"M 89.005,78.286 L 83.470,78.286 L 83.470,61.111 L 79.604,61.111 L 79.604,61.111 C 78.708,61.111 77.976,61.843 77.976,62.779 L 77.976,62.779 L 77.976,78.286 L 72.441,78.286 L 72.441,61.111 L 68.574,61.111 L 68.574,61.111 C 67.638,61.111 66.906,61.843 66.906,62.779 L 66.906,62.779 L 66.906,78.286 L 61.370,78.286 L 61.370,59.849 C 61.370,57.488 63.283,55.575 65.644,55.575 L 89.046,55.575 L 89.046,78.286 L 89.005,78.286 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"M 89.050,45.691 C 89.050,48.092 87.096,50.045 84.695,50.045 L 66.014,50.045 L 66.014,44.429 L 81.764,44.429 L 81.764,44.429 C 82.701,44.429 83.433,43.656 83.433,42.760 L 83.433,42.760 L 83.433,24.201 L 83.433,24.201 C 83.433,23.265 82.701,22.533 81.764,22.533 L 81.764,22.533 L 73.340,22.533 L 73.340,22.533 C 72.404,22.533 71.671,23.265 71.671,24.201 L 71.671,24.201 L 71.671,32.626 L 71.671,32.626 C 71.671,33.562 72.404,34.295 73.340,34.295 L 73.340,34.295 L 80.096,34.295 L 80.096,39.911 L 70.409,39.911 C 68.008,39.911 66.054,37.958 66.054,35.556 L 66.054,21.230 C 66.054,18.829 68.008,16.875 70.409,16.875 L 84.736,16.875 C 87.137,16.875 89.090,18.829 89.090,21.230 L 89.090,45.691 L 89.050,45.691 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"M 57.167,16.892 L 42.840,16.892 C 40.439,16.892 38.485,18.845 38.485,21.246 L 38.485,35.573 C 38.485,37.974 40.439,39.927 42.840,39.927 L 57.167,39.927 C 59.568,39.927 61.521,37.974 61.521,35.573 L 61.521,21.246 C 61.521,18.845 59.568,16.892 57.167,16.892 M 55.864,24.177 L 55.864,32.602 L 55.864,32.602 C 55.864,33.538 55.132,34.270 54.195,34.270 L 54.195,34.270 L 45.771,34.270 L 45.771,34.270 C 44.835,34.270 44.102,33.497 44.102,32.602 L 44.102,32.602 L 44.102,24.177 L 44.102,24.177 C 44.102,23.241 44.835,22.508 45.771,22.508 L 45.771,22.508 L 54.195,22.508 L 54.195,22.508 C 55.132,22.508 55.864,23.241 55.864,24.177 L 55.864,24.177 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"M 52.630,55.558 L 38.507,55.558 C 36.147,55.558 34.193,57.471 34.193,59.832 L 34.193,73.954 C 34.193,76.315 36.106,78.228 38.507,78.228 L 52.630,78.228 C 54.990,78.228 56.903,76.315 56.903,73.954 L 56.903,59.872 C 56.903,57.512 54.990,55.558 52.630,55.558 M 51.368,62.762 L 51.368,71.065 C 51.368,71.960 50.636,72.733 49.740,72.733 L 49.740,72.733 L 49.740,72.733 L 41.438,72.733 L 41.438,72.733 L 41.438,72.733 C 40.542,72.733 39.810,72.001 39.810,71.065 L 39.810,62.762 L 39.810,62.762 C 39.810,61.867 40.542,61.093 41.438,61.093 L 41.438,61.093 L 49.740,61.093 L 49.740,61.093 C 50.636,61.093 51.368,61.826 51.368,62.762 L 51.368,62.762 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 97.882,2.116 C 96.580,0.814 94.748,0.000 92.754,0.000 L 7.245,0.000 C 5.250,0.000 3.419,0.814 2.116,2.116 C 0.814,3.419 0.000,5.250 0.000,7.245 L 0.000,87.911 C 0.000,89.905 0.814,91.737 2.116,93.039 C 3.419,94.341 5.250,95.155 7.245,95.155 L 92.754,95.155 C 94.748,95.155 96.580,94.341 97.882,93.039 C 99.185,91.737 99.999,89.905 99.999,87.911 L 99.999,7.245 C 100.039,5.250 99.185,3.419 97.882,2.116 M 97.882,87.911 C 97.882,89.335 97.312,90.638 96.376,91.574 C 95.440,92.510 94.179,93.080 92.754,93.080 L 7.245,93.080 C 5.820,93.080 4.558,92.510 3.622,91.574 C 2.686,90.638 2.116,89.376 2.116,87.911 L 2.116,7.245 C 2.116,5.820 2.686,4.558 3.622,3.622 C 4.558,2.686 5.820,2.116 7.245,2.116 L 92.754,2.116 C 94.179,2.116 95.440,2.686 96.376,3.622 C 97.312,4.558 97.882,5.820 97.882,7.245 L 97.882,87.911 L 97.882,87.911 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Guideline.Crosshair\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Geometry=\"M 20.000,0.000 L 20.000,30.000\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff505050\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Geometry=\"F1 M 0.000,15.000 L 40.000,15.000\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff505050\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Guideline.Thirds\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Geometry=\"M 12,0 L 12,30\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff505050\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Geometry=\"M 28,0 L 28,30\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff505050\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Geometry=\"F1 M 0,21 L 40,21\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff505050\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Geometry=\"F1 M 0,9 L 40,9\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"2.0\" Brush=\"#ff505050\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Image\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.714,39.285 L 39.286,39.285 L 39.286,0.714 L 0.714,0.714 L 0.714,39.285 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 16.428,20 C 15.811,19.355 13.519,19.400 12.857,20 C 10.122,22.480 2.143,30.714 2.143,30.714 L 2.143,37.857 L 33.571,37.857 C 33.571,37.857 20.953,24.722 16.428,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 22.857,25.714 L 34.286,37.857 L 37.857,37.857 L 37.857,32.143 C 37.857,32.143 30.476,24.762 27.143,21.428 C 26.638,20.923 24.820,20.955 24.286,21.428 C 23.721,21.930 22.590,23.048 22.143,23.571 C 21.474,24.355 22.857,25.714 22.857,25.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,40 L 40,40 L 40,0 L 0,0 L 0,40 Z M 0.714,0.714 L 39.286,0.714 L 39.286,39.285 L 0.714,39.285 L 0.714,0.714 L 0.714,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ffebc17d\" Geometry=\"M 34.284,9.999 C 34.284,12.365 32.365,14.284 29.999,14.284 C 27.632,14.284 25.713,12.365 25.713,9.999 C 25.713,7.632 27.632,5.713 29.999,5.713 C 32.365,5.713 34.284,7.632 34.284,9.999 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.ImageStack\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,38.500 L 31.111,38.500 L 31.111,26.654 L 0,26.654 L 0,38.500 Z M 0.741,27.395 L 30.371,27.395 L 30.371,37.760 L 0.741,37.760 L 0.741,27.395 L 0.741,27.395 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 6.667,25.914 L 6.667,6.663 L 29.629,6.663 L 29.629,25.914 L 30.371,25.914 L 30.371,5.923 L 5.926,5.923 L 5.926,25.914 L 6.667,25.914 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 40,31.096 L 40,18.606 L 31.852,26.106 L 31.852,38.500 L 40,31.096 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 35.556,22.006 L 36.296,21.306 L 36.296,0 L 11.111,0 L 11.111,0.740 L 35.556,0.740 L 35.556,22.006 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 33.333,24.006 L 33.333,2.962 L 8.889,2.962 L 8.889,3.702 L 32.593,3.702 L 32.593,24.706 L 33.333,24.006 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 0,25.914 L 5.185,25.914 L 5.185,20.731 L 0,25.914 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 29.629,25.914 L 29.629,6.663 L 6.667,6.663 L 6.667,25.914 L 29.629,25.914 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 35.556,22.006 L 35.556,0.740 L 11.111,0.740 L 11.111,2.962 L 33.333,2.962 L 33.333,24.006 L 35.556,22.006 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 32.593,24.706 L 32.593,3.702 L 8.889,3.702 L 8.889,5.923 L 30.371,5.923 L 30.371,25.914 L 32.593,24.706 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.741,37.760 L 30.371,37.760 L 30.371,27.395 L 0.741,27.395 L 0.741,37.760 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 14.815,16.289 C 14.566,16.014 13.595,16.026 13.334,16.289 C 11.706,17.927 7.407,22.212 7.407,22.212 L 7.407,25.914 L 23.704,25.914 C 23.704,25.914 17.276,19.006 14.815,16.289 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 25.185,25.914 L 28.889,25.914 L 28.889,23.693 C 28.889,23.693 23.849,18.698 22.223,17.029 C 21.964,16.764 21.004,16.768 20.741,17.029 C 19.760,18.004 19.730,18.020 19.260,18.510 C 19.064,18.714 19.070,19.432 19.260,19.642 C 20.943,21.499 25.185,25.914 25.185,25.914 Z\"/>\n                <GeometryDrawing Brush=\"#ffebc382\" Geometry=\"M 25.182,11.104 C 25.182,12.331 24.187,13.325 22.960,13.325 C 21.733,13.325 20.738,12.331 20.738,11.104 C 20.738,9.878 21.733,8.883 22.960,8.883 C 24.187,8.883 25.182,9.878 25.182,11.104 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Imgur\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff33363b\" Geometry=\"F1 M 5.141,12.299 C 8.135,12.299 9.547,14.176 9.547,18.083 L 9.547,34.165 C 9.547,38.072 8.192,40.000 5.141,40.000 C 2.091,40.000 0.678,38.072 0.678,34.165 L 0.678,18.083 C 0.678,14.176 2.091,12.299 5.141,12.299\"/>\n                <GeometryDrawing Brush=\"#ff1ab66d\" Geometry=\"F1 M 5.141,9.233 C 2.260,9.233 0.000,7.204 0.000,4.617 C 0.000,2.080 2.317,0.000 5.141,0.000 C 7.965,0.000 10.225,2.080 10.225,4.617 C 10.225,7.204 7.965,9.233 5.141,9.233\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to Delay.IncreaseDecrease-->\n    <DrawingBrush x:Key=\"Vector.IncreaseDecreaseDelay\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 20.002,0.714 C 30.652,0.714 39.286,9.348 39.286,19.998 C 39.286,30.649 30.652,39.282 20.002,39.282 C 9.351,39.282 0.717,30.649 0.717,19.998 C 0.717,9.348 9.351,0.714 20.002,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4680b7\" Geometry=\"F1 M 20.002,1.428 C 9.762,1.428 1.432,9.759 1.432,19.998 C 1.432,30.237 9.762,38.568 20.002,38.568 C 30.241,38.568 38.572,30.237 38.572,19.998 C 38.572,9.759 30.241,1.428 20.002,1.428 Z M 20.002,39.996 C 8.974,39.996 0.003,31.025 0.003,19.998 C 0.003,8.971 8.974,0 20.002,0 C 31.028,0 40,8.971 40,19.998 C 40,31.025 31.028,39.996 20.002,39.996 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a33\" Geometry=\"M 26.666,31.850 L 26.666,34.813 L 40,34.813 L 40,31.850 L 26.666,31.850 Z\"/>\n                <GeometryDrawing Brush=\"#ff8c8b8a\" Geometry=\"M 5.185,31.851 L 0,31.851 L 0,34.813 L 5.185,34.813 L 5.185,39.998 L 8.147,39.998 L 8.147,34.813 L 13.333,34.813 L 13.333,31.851 L 8.147,31.851 L 8.147,26.667 L 5.185,26.667 L 5.185,31.851 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.287,20.712 L 30.717,20.712 L 30.717,19.284 L 20.716,19.284 L 20.716,4.997 L 19.287,4.997 L 19.287,20.712 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Info\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,20 C 40,31.046 31.046,40 20,40 C 8.954,40 0,31.046 0,20 C 0,8.954 8.954,0 20,0 C 31.046,0 40,8.954 40,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 20.050,12.300 C 18.529,12.300 17.300,11.070 17.300,9.550 C 17.300,8.031 18.529,6.800 20.050,6.800 C 21.569,6.800 22.800,8.031 22.800,9.550 C 22.800,11.070 21.569,12.300 20.050,12.300 Z M 22.114,33.245 L 18.114,33.245 L 18.114,14.245 L 22.114,14.245 L 22.114,33.245 Z M 20,0 C 8.955,0 0,8.955 0,20 C 0,31.045 8.955,40 20,40 C 31.045,40 40,31.045 40,20 C 40,8.955 31.045,0 20,0 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Selection.Inverse-->\n    <DrawingBrush x:Key=\"Vector.InverseSelection\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 24.403,4.236 L 24.403,0 L 0,0 L 0,24.416 L 9.522,24.416 L 9.522,4.235 L 24.403,4.236 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7d7d\" Geometry=\"F1 M 37.216,30.430 L 25.820,18.991 L 25.888,35.212 L 29.273,32.225 L 30.654,32.523 L 33.673,38.948 L 35.952,37.656 L 33.013,32.128 L 32.970,30.678 L 37.216,30.430 Z M 25.155,17.193 L 39.301,31.346 L 33.799,31.346 L 33.799,32.128 L 37.008,38.223 L 33.404,40 L 30.263,33.316 L 29.474,33.316 L 25.155,37.243 L 25.155,17.193 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 25.820,18.991 L 37.216,30.430 L 32.970,30.678 L 33.013,32.128 L 35.952,37.656 L 33.673,38.948 L 30.654,32.523 L 29.273,32.225 L 25.888,35.212 L 25.820,18.991 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 24.335,28.690 L 24.487,15.731 L 33.983,24.503 L 33.983,6.397 L 11.704,6.397 L 11.704,28.690 L 24.335,28.690 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 9.549,23.355 L 1.061,23.355 L 1.061,1.062 L 23.340,1.062 L 23.340,4.247 L 24.401,4.247 L 24.401,0 L 0,0 L 0,24.417 L 9.549,24.417 L 9.549,23.355 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 24.335,28.684 L 11.693,28.684 L 11.693,6.392 L 33.973,6.392 L 33.973,24.503 L 35.034,25.411 L 35.034,5.330 L 10.633,5.330 L 10.633,29.748 L 24.335,29.748 L 24.335,28.684 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Reverse-->\n    <DrawingBrush x:Key=\"Vector.Invert\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 0,29.019 L 10.001,40 L 18.462,40 L 11.539,32.157 L 36.154,32.157 L 36.154,25.882 L 11.539,25.882 L 18.462,18.039 L 10.001,18.039 L 0,29.019 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 40,10.980 L 30,0 L 21.538,0 L 28.461,7.843 L 3.846,7.843 L 3.846,14.118 L 28.461,14.118 L 21.538,21.961 L 30,21.961 L 40,10.980 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Jpeg\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,32.857 L 0.000,32.857 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.714,0.714 L 39.286,0.714 L 39.286,32.143 L 0.714,32.143 L 0.714,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 1.429,1.429 L 1.429,10.728 C 3.685,8.977 6.763,7.895 10.163,7.895 C 12.207,7.895 14.136,8.286 15.839,8.978 C 16.913,7.438 18.694,6.429 20.714,6.429 C 22.206,6.429 23.565,6.982 24.609,7.889 C 25.725,6.158 27.719,5.000 30.000,5.000 C 33.455,5.000 36.259,7.648 36.332,10.941 C 37.146,11.325 37.896,11.803 38.571,12.357 L 38.571,1.429 L 1.429,1.429 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 31.068,24.609 C 29.397,23.292 27.293,22.500 25.000,22.500 C 22.125,22.500 19.546,23.743 17.750,25.712 C 14.361,23.472 10.338,21.792 5.916,20.853 C 5.433,19.843 4.409,19.139 3.214,19.139 C 2.542,19.139 1.927,19.367 1.429,19.742 L 1.429,31.429 L 38.571,31.429 L 38.571,27.711 C 36.387,26.197 33.840,25.112 31.068,24.609 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Keyboard\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.666,17.334 L 39.333,17.334 L 39.333,0.667 L 0.666,0.667 L 0.666,17.334 Z M 38.667,0.667\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 23.333,17.331 L 23.333,23.334 L 36.667,23.334 L 36.667,17.331 L 23.333,17.331 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 1.333,18 C 6.210,18 22,18 22,18 L 22,17.334 C 22,17.334 6.293,17.334 1.333,17.334 C 1.098,17.334 0.666,16.903 0.666,16.667 C 0.666,13.333 0.666,5.070 0.666,1.333 C 0.666,1.098 1.098,0.667 1.333,0.667 C 8.821,0.667 29.832,0.667 38.667,0.667 C 38.903,0.667 39.333,1.098 39.333,1.333 C 39.333,5.002 39.333,13.019 39.333,16.667 C 39.333,16.902 38.902,17.331 38.667,17.331 C 38.257,17.331 38,17.331 38,17.331 L 38,18 C 38,18 37.905,18 38.667,18 C 39.138,18 40,17.139 40,16.667 C 40,13.055 40,5.002 40,1.333 C 40,0.862 39.138,0 38.667,0 C 30.055,0 10.321,0 1.333,0 C 0.861,0 0,0.862 0,1.333 C 0,4.890 0,13 0,16.667 C 0,17.139 0.862,18 1.333,18 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 23.333,24 C 26.388,24 33.471,24 36.667,24 C 36.902,24 37.334,23.569 37.334,23.334 C 37.334,20.221 37.334,13.111 37.334,10.001 C 37.334,9.765 36.902,9.333 36.667,9.333 C 33.484,9.333 26.485,9.333 23.333,9.333 C 23.097,9.333 22.666,9.765 22.666,10.001 C 22.666,13.333 22.666,20.110 22.666,23.334 C 22.666,23.568 23.097,24 23.333,24 Z M 24,10.001 C 26.860,10.001 33.333,10.001 36,10.001 C 36.236,10.001 36.667,10.432 36.667,10.667 C 36.667,13.569 36.667,19.776 36.667,22.667 C 36.667,22.902 36.236,23.334 36,23.334 C 33.151,23.334 26.943,23.334 24,23.334 C 23.766,23.334 23.333,22.903 23.333,22.667 C 23.333,22.667 23.333,13.514 23.333,10.667 C 23.333,10.431 23.766,10.001 24,10.001 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 10,16 L 22,16 L 22,13.333 L 10,13.333 L 10,16 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 2.667,12 L 5.333,12 L 5.333,9.333 L 2.667,9.333 L 2.667,12 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 6.666,12 L 9.333,12 L 9.333,9.333 L 6.666,9.333 L 6.666,12 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 10.666,12 L 13.333,12 L 13.333,9.333 L 10.666,9.333 L 10.666,12 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 2.667,5.333 L 5.333,5.333 L 5.333,2.667 L 2.667,2.667 L 2.667,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 6.666,5.333 L 9.333,5.333 L 9.333,2.667 L 6.666,2.667 L 6.666,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 10.666,5.333 L 13.333,5.333 L 13.333,2.667 L 10.666,2.667 L 10.666,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 22.666,5.333 L 25.334,5.333 L 25.334,2.667 L 22.666,2.667 L 22.666,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 26.667,5.333 L 29.334,5.333 L 29.334,2.667 L 26.667,2.667 L 26.667,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 30.667,5.333 L 33.333,5.333 L 33.333,2.667 L 30.667,2.667 L 30.667,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 34.666,5.333 L 37.334,5.333 L 37.334,2.667 L 34.666,2.667 L 34.666,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 8.666,8.667 L 11.333,8.667 L 11.333,6.001 L 8.666,6.001 L 8.666,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 12.667,8.667 L 15.333,8.667 L 15.333,6.001 L 12.667,6.001 L 12.667,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 16.666,8.667 L 19.333,8.667 L 19.333,6.001 L 16.666,6.001 L 16.666,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 20.667,8.667 L 23.333,8.667 L 23.333,6.001 L 20.667,6.001 L 20.667,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 24.667,8.667 L 27.333,8.667 L 27.333,6.001 L 24.667,6.001 L 24.667,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 28.666,8.667 L 31.334,8.667 L 31.334,6.001 L 28.666,6.001 L 28.666,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 14.667,12 L 17.333,12 L 17.333,9.333 L 14.667,9.333 L 14.667,12 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 18.667,12 L 21.333,12 L 21.333,9.333 L 18.667,9.333 L 18.667,12 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 14.667,5.333 L 17.333,5.333 L 17.333,2.667 L 14.667,2.667 L 14.667,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 18.667,5.333 L 21.333,5.333 L 21.333,2.667 L 18.667,2.667 L 18.667,5.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 4.667,8.667 L 7.333,8.667 L 7.333,6.001 L 4.667,6.001 L 4.667,8.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 32.667,8.667 L 35.333,8.667 L 35.333,6.001 L 32.667,6.001 L 32.667,8.667 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Kofi\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff28aadf\" Geometry=\"F1 M 50.000,0.000 C 77.614,0.000 100.000,22.386 100.000,50.000 C 100.000,77.614 77.614,100.000 50.000,100.000 C 22.386,100.000 0.000,77.614 0.000,50.000 C 0.000,22.386 22.386,0.000 50.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 91.410,42.355 C 90.359,36.792 87.367,33.332 84.294,31.184 C 81.119,28.969 77.316,27.827 73.444,27.827 L 18.518,27.827 C 16.610,27.827 15.879,29.688 15.868,30.625 C 15.868,30.750 15.868,31.230 15.868,31.230 C 15.868,31.230 15.777,55.535 15.948,68.510 C 16.462,76.174 24.149,76.174 24.149,76.174 C 24.149,76.174 49.219,76.105 61.234,76.025 C 61.794,76.025 62.365,75.957 62.913,75.820 C 69.755,74.107 70.463,67.745 70.394,64.204 C 84.146,64.981 93.854,55.272 91.410,42.355 M 75.945,54.964 C 73.010,55.330 70.623,55.055 70.623,55.055 L 70.623,37.089 L 74.232,37.089 C 76.619,37.089 78.915,38.083 80.480,39.888 C 81.576,41.155 82.455,42.949 82.455,45.427 C 82.455,51.481 79.337,53.868 75.945,54.964\"/>\n                <GeometryDrawing Brush=\"#ffff5d5a\" Geometry=\"F1 M 42.766,66.100 C 43.360,66.397 43.748,66.032 43.748,66.032 C 43.748,66.032 52.485,58.048 56.426,53.456 C 59.932,49.345 60.161,42.412 54.141,39.831 C 48.122,37.238 43.177,42.880 43.177,42.880 C 38.882,38.163 32.383,38.403 29.380,41.589 C 26.376,44.787 27.426,50.270 29.665,53.319 C 31.767,56.186 41.018,64.433 42.423,65.826 C 42.423,65.826 42.526,65.929 42.766,66.100\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Last\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 33.430,16.699 L 21.396,5 L 13.372,5 L 21.730,13.358 L 0,13.358 L 0,20.042 L 21.730,20.042 L 13.372,28.400 L 21.396,28.400 L 33.430,16.699 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 37.502,33.400 L 40.001,33.400 L 40.001,0 L 37.502,0 L 37.502,33.400 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to Last.Double-->\n    <DrawingBrush x:Key=\"Vector.Last.Green\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff60a08a\" Geometry=\"M 18.823,0 L 10.588,0 L 17.647,7.058 L 0,7.058 L 0,12.941 L 17.647,12.941 L 10.588,19.998 L 18.823,19.998 L 28.508,9.999 L 18.823,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff60a08a\" Geometry=\"M 40,9.999 L 30.588,0 L 22.352,0 L 31.763,9.998 L 22.352,19.998 L 30.588,19.998 L 40,9.999 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to Launch-->\n    <DrawingBrush x:Key=\"Vector.Launcher\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffaeb0b0\" Geometry=\"M 6,6 L 2.571,6 L 2.571,5.143 L 3.429,5.143 L 3.429,3.429 L 5.144,3.429 L 5.144,2.571 L 6,2.571 L 6,6 Z M 2.571,3.429 L 3.429,3.429 L 3.429,2.571 L 2.571,2.571 L 2.571,3.429 L 2.571,3.429 Z\"/>\n                <GeometryDrawing Brush=\"#ffaeb0b0\" Geometry=\"M 0,5.143 L 0.857,5.143 L 0.857,0.857 L 5.144,0.857 L 5.144,0 L 0,0 L 0,5.143 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Lighten\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 8.416,10.988 C 9.131,11.702 10.286,11.714 11.000,11.000 C 11.710,10.290 11.714,9.143 10.988,8.416 L 8.445,5.873 C 7.727,5.155 6.580,5.143 5.861,5.861 C 5.151,6.571 5.147,7.714 5.873,8.445 L 8.416,10.988 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 38.167,18.184 L 34.567,18.184 C 33.551,18.184 32.731,18.992 32.731,20.000 C 32.731,21.004 33.535,21.816 34.567,21.816 L 38.167,21.816 C 39.184,21.816 40.000,21.012 40.000,20.000 C 40.000,18.996 39.192,18.184 38.167,18.184 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 7.269,20.000 C 7.269,18.996 6.461,18.184 5.433,18.184 L 1.833,18.184 C 0.820,18.184 0.000,18.988 0.000,20.000 C 0.000,21.004 0.804,21.816 1.833,21.816 L 5.433,21.816 C 6.449,21.816 7.269,21.012 7.269,20.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 20.000,9.090 C 13.980,9.090 9.094,13.976 9.094,19.996 C 9.094,26.016 13.980,30.902 20.000,30.902 C 26.020,30.902 30.906,26.016 30.906,19.996 C 30.906,13.971 26.020,9.090 20.000,9.090 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 8.416,29.012 L 5.873,31.555 C 5.155,32.273 5.143,33.420 5.861,34.139 C 6.571,34.849 7.718,34.853 8.445,34.127 L 10.988,31.584 C 11.706,30.865 11.718,29.718 11.000,29.000 C 10.290,28.290 9.143,28.286 8.416,29.012 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 31.584,10.988 L 34.127,8.441 C 34.845,7.722 34.853,6.576 34.139,5.857 C 33.424,5.147 32.282,5.143 31.555,5.869 L 29.012,8.412 C 28.294,9.131 28.286,10.282 29.000,10.996 C 29.714,11.706 30.857,11.714 31.584,10.988 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 20.000,32.731 C 18.996,32.731 18.184,33.539 18.184,34.567 L 18.184,38.167 C 18.184,39.184 18.992,40.000 20.000,40.000 C 21.004,40.000 21.816,39.196 21.816,38.167 L 21.816,34.567 C 21.816,33.551 21.012,32.731 20.000,32.731 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 31.584,29.012 C 30.865,28.294 29.718,28.286 29.000,29.000 C 28.290,29.714 28.286,30.857 29.012,31.584 L 31.555,34.127 C 32.273,34.845 33.420,34.853 34.139,34.139 C 34.849,33.429 34.853,32.282 34.127,31.555 L 31.584,29.012 Z\"/>\n                <GeometryDrawing Brush=\"#ffeccc71\" Geometry=\"F1 M 20.000,7.269 C 21.004,7.269 21.816,6.465 21.816,5.433 L 21.816,1.837 C 21.816,0.824 21.012,0.000 20.000,0.000 C 18.996,0.000 18.184,0.808 18.184,1.837 L 18.184,5.437 C 18.184,6.449 18.988,7.269 20.000,7.269 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Lock\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ffecc477\" Geometry=\"M 9.380,1.759 C 8.552,2.356 7.127,3.846 6.494,4.646 C 5.993,5.278 5.051,6.725 5.051,7.532 C 5.051,9.570 5.051,15.468 5.051,15.468 C 5.051,15.468 2.475,15.468 1.443,15.468 C 0.933,15.468 0.000,16.401 0.000,16.912 C 0.000,22.175 0.000,33.598 0.000,38.557 C 0.000,39.067 0.933,40.000 1.443,40.000 C 8.487,40.000 23.195,40.000 30.304,40.000 C 30.814,40.000 31.747,39.067 31.747,38.557 C 31.747,33.558 31.747,21.895 31.747,16.912 C 31.747,16.401 30.814,15.468 30.304,15.468 C 29.453,15.468 26.696,15.468 26.696,15.468 C 26.696,15.468 26.696,9.452 26.696,7.532 C 26.696,6.725 25.757,5.276 25.253,4.646 C 24.615,3.849 23.175,2.383 22.367,1.759 C 21.728,1.267 20.259,0.528 19.481,0.317 C 17.740,-0.157 14.032,-0.051 12.266,0.317 C 11.476,0.481 10.034,1.288 9.380,1.759 Z M 9.380,7.532 C 9.960,6.693 11.382,5.156 12.266,4.646 C 12.760,4.360 13.865,3.997 14.430,3.924 C 15.146,3.832 16.607,3.794 17.316,3.924 C 17.877,4.027 19.003,4.335 19.481,4.646 C 20.336,5.202 21.816,6.673 22.367,7.532 C 22.675,8.012 23.088,9.126 23.088,9.696 C 23.088,11.102 23.088,15.468 23.088,15.468 L 8.658,15.468 C 8.658,15.468 8.658,11.102 8.658,9.696 C 8.658,9.126 9.055,8.001 9.380,7.532 Z M 14.430,20.519 C 15.097,20.243 16.653,20.235 17.316,20.519 C 17.785,20.720 18.526,21.508 18.759,21.962 C 19.090,22.603 19.139,24.234 18.759,24.848 C 18.547,25.191 17.316,25.570 17.316,25.570 L 17.316,34.950 L 14.430,34.950 L 14.430,25.570 C 14.430,25.570 13.217,25.179 12.987,24.848 C 12.576,24.255 12.753,22.644 12.987,21.962 C 13.153,21.479 13.959,20.714 14.430,20.519 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Logo\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff747474\" Geometry=\"F1 M 0,0 L 128,0 L 128,74 L 80,74 L 80,90 L 96,90 L 96,96 L 32,96 L 32,90 L 48,90 L 48,74 L 0,74 L 0,0 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 4,4 L 124,4 L 124,70 L 4,70 L 4,4 Z\"/>\n                <GeometryDrawing Brush=\"#ff747474\" Geometry=\"F1 M 40.395,26.119 C 40.395,23.825 39.799,22.423 38.609,21.914 C 37.418,21.405 35.935,21.150 34.158,21.150 C 30.500,21.150 27.184,21.871 24.207,23.312 C 21.231,24.752 19.743,26.481 19.743,28.500 C 19.743,29.949 20.403,31.213 21.723,32.291 C 23.043,33.370 25.919,34.556 30.354,35.850 C 34.649,37.092 37.707,38.373 39.527,39.692 C 41.348,41.013 42.258,42.604 42.258,44.467 C 42.258,46.348 40.990,48.380 38.454,50.562 C 35.917,52.745 32.859,54.405 29.279,55.544 C 25.699,56.683 22.659,57.252 20.157,57.252 C 18.069,57.252 16.486,57.006 15.408,56.514 C 14.330,56.022 13.791,55.405 13.791,54.664 C 13.791,54.146 13.950,53.512 14.270,52.762 C 14.589,52.011 14.912,51.636 15.240,51.636 C 15.585,51.636 15.939,51.696 16.301,51.817 C 18.147,52.508 19.976,52.853 21.788,52.853 C 25.048,52.853 28.507,51.899 32.165,49.992 C 35.822,48.087 37.651,46.305 37.651,44.648 C 37.651,43.941 37.095,43.264 35.982,42.617 C 34.869,41.970 32.053,40.931 27.533,39.499 C 21.925,37.722 18.479,35.992 17.194,34.310 C 15.909,32.628 15.266,30.855 15.266,28.992 C 15.266,25.403 17.328,22.509 21.451,20.310 C 25.574,18.109 29.888,17.010 34.391,17.010 C 37.375,17.010 39.670,17.515 41.274,18.523 C 42.879,19.533 43.681,20.650 43.681,21.875 C 43.681,22.462 43.500,23.316 43.138,24.437 C 42.775,25.559 41.861,26.119 40.395,26.119 Z\"/>\n                <GeometryDrawing Brush=\"#ff747474\" Geometry=\"F1 M 66.765,37.299 C 65.782,36.005 64.729,35.082 63.609,34.530 C 62.970,34.202 61.718,33.529 59.855,32.511 C 57.871,31.407 56.318,30.570 55.197,30.001 C 53.645,29.242 52.325,28.302 51.238,27.180 C 50.151,26.059 49.607,24.912 49.607,23.738 C 49.607,22.893 50.030,22.470 50.875,22.470 C 51.290,22.470 52.273,23.065 53.826,24.256 C 54.999,25.153 57.116,26.568 60.179,28.500 C 63.242,30.433 65.823,31.968 67.929,33.106 C 70.724,34.539 72.237,35.453 72.472,35.850 C 72.704,36.247 72.821,36.678 72.821,37.144 C 72.821,37.644 71.103,39.093 67.671,41.491 C 67.376,41.681 66.858,42.078 66.118,42.682 C 65.376,43.286 64.427,44.217 63.271,45.477 L 59.001,50.109 C 58.139,51.059 57.431,51.757 56.879,52.205 C 56.327,52.654 55.792,52.878 55.275,52.878 C 54.792,52.878 54.309,52.671 53.826,52.257 C 53.342,51.843 53.101,51.377 53.101,50.859 C 53.101,50.290 53.601,49.626 54.602,48.867 C 54.913,48.643 55.223,48.375 55.534,48.064 C 58,45.149 60.400,42.725 62.728,40.792 C 64.608,39.343 65.954,38.179 66.765,37.299 Z\"/>\n                <GeometryDrawing Brush=\"#ff747474\" Geometry=\"F1 M 105.453,47.392 C 99.104,52.378 93.368,54.871 88.243,54.871 C 85.345,54.871 83.042,54.013 81.334,52.296 C 79.626,50.579 78.772,48.203 78.772,45.166 C 78.772,37.868 81.886,31.058 88.114,24.734 C 94.342,18.412 100.795,15.250 107.472,15.250 C 109.438,15.250 111.013,15.604 112.194,16.311 C 113.376,17.019 113.968,17.916 113.968,19.002 C 113.968,19.952 113.609,21 112.894,22.146 C 112.177,23.294 111.483,23.868 110.810,23.868 C 110.361,23.868 109.990,23.514 109.697,22.807 C 109.214,21.686 108.688,20.909 108.118,20.478 C 107.550,20.046 106.678,19.831 105.505,19.831 C 102.503,19.831 99.130,21.263 95.386,24.126 C 91.643,26.991 88.688,30.272 86.522,33.974 C 84.357,37.674 83.274,41.258 83.274,44.726 C 83.274,48.764 85.129,50.782 88.839,50.782 C 90.547,50.782 92.518,50.354 94.752,49.501 C 96.986,48.646 99.376,47.353 101.921,45.619 C 104.465,43.885 106.010,42.363 106.553,41.051 C 107.097,39.740 107.523,37.955 107.834,35.694 C 108.006,34.470 108.903,33.857 110.525,33.857 C 112.268,33.857 113.140,34.392 113.140,35.461 C 113.140,35.945 112.880,36.807 112.362,38.049 C 111.518,40.051 110.888,41.871 110.474,43.510 C 110.060,45.149 109.685,47.047 109.348,49.203 C 109.012,51.360 108.843,52.896 108.843,53.810 C 108.843,54.621 108.999,55.819 109.310,57.407 C 109.360,57.734 109.387,58.011 109.387,58.235 C 109.387,58.839 109.158,59.426 108.701,59.995 C 108.243,60.564 107.679,60.849 107.006,60.849 C 106.264,60.849 105.535,60.560 104.819,59.981 C 104.103,59.403 103.745,58.761 103.745,58.054 C 103.745,57.502 104.142,55.026 104.936,50.627 C 105.177,49.247 105.350,48.168 105.453,47.392 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Money\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 29.038,12.101 C 33.148,11.881 35.334,12.621 35.334,12.621 L 35.334,2 L 2,2 L 1.999,19.334 L 22,19.334 C 22,19.334 21.622,15.462 22.705,14.240 C 23.866,12.931 25.927,12.268 29.038,12.101 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 32.667,6 C 33.287,6 35.334,6 35.334,6 L 35.334,12.667 L 37.334,12.667 L 37.334,0 L 0,0 L 0,21.333 C 0,21.333 11.693,21.333 15.554,21.333 C 16.219,21.333 17.465,20.667 18.131,20.667 C 19.081,20.667 22,20.667 22,20.667 L 22,19.334 L 6,19.334 C 6,19.334 6,17.295 6,16.667 C 6,16.196 5.138,15.334 4.667,15.334 C 3.957,15.334 2,15.334 2,15.334 L 2,6 C 2,6 4.027,6 4.667,6 C 5.138,6 6,5.138 6,4.667 C 6,4.033 6,2 6,2 L 31.334,2 C 31.334,2 31.334,4.019 31.334,4.667 C 31.334,5.138 32.195,6 32.667,6 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 23.999,10.665 C 23.999,13.611 21.612,15.998 18.667,15.998 C 15.722,15.998 13.334,13.611 13.334,10.665 C 13.334,7.720 15.722,5.333 18.667,5.333 C 21.612,5.333 23.999,7.720 23.999,10.665 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 29.332,24.303 C 29.332,25.960 25.452,27.302 20.666,27.302 C 15.880,27.302 12.001,25.960 12.001,24.303 C 12.001,22.646 15.880,21.303 20.666,21.303 C 25.452,21.303 29.332,22.646 29.332,24.303 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 40,15.637 C 40,17.294 36.120,18.637 31.334,18.637 C 26.549,18.637 22.669,17.294 22.669,15.637 C 22.669,13.980 26.549,12.637 31.334,12.637 C 36.120,12.637 40,13.980 40,15.637 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 20.657,34.044 C 16.508,34.044 13.046,33.033 12.195,31.686 C 12.065,31.893 11.991,32.108 11.991,32.329 C 11.991,33.985 15.871,35.328 20.657,35.328 C 25.443,35.328 29.323,33.985 29.323,32.329 C 29.323,32.108 29.249,31.893 29.119,31.686 C 28.268,33.033 24.806,34.044 20.657,34.044 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 20.666,31.377 C 16.518,31.377 13.055,30.369 12.205,29.020 C 12.074,29.228 12.001,29.442 12.001,29.662 C 12.001,31.320 15.880,32.662 20.666,32.662 C 25.452,32.662 29.332,31.320 29.332,29.662 C 29.332,29.442 29.258,29.228 29.128,29.020 C 28.277,30.369 24.815,31.377 20.666,31.377 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 20.666,28.711 C 16.518,28.711 13.055,27.702 12.205,26.354 C 12.074,26.561 12.001,26.775 12.001,26.996 C 12.001,28.653 15.880,29.996 20.666,29.996 C 25.452,29.996 29.332,28.653 29.332,26.996 C 29.332,26.775 29.258,26.561 29.128,26.354 C 28.277,27.702 24.815,28.711 20.666,28.711 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 20.666,36.710 C 16.518,36.710 13.055,35.700 12.205,34.353 C 12.074,34.559 12.001,34.774 12.001,34.995 C 12.001,36.651 15.880,37.995 20.666,37.995 C 25.452,37.995 29.332,36.651 29.332,34.995 C 29.332,34.774 29.258,34.559 29.128,34.353 C 28.277,35.700 24.815,36.710 20.666,36.710 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 31.334,19.913 C 27.186,19.913 23.723,18.903 22.873,17.555 C 22.742,17.763 22.669,17.977 22.669,18.198 C 22.669,19.854 26.549,21.197 31.334,21.197 C 36.120,21.197 40,19.854 40,18.198 C 40,17.977 39.926,17.763 39.796,17.555 C 38.945,18.903 35.483,19.913 31.334,19.913 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 31.334,23.778 C 36.120,23.778 40,22.435 40,20.778 C 40,20.557 39.926,20.343 39.796,20.136 C 38.945,21.484 35.483,22.493 31.334,22.493 L 31.334,23.778 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 31.334,26.357 C 36.120,26.357 40,25.015 40,23.357 C 40,23.137 39.926,22.924 39.796,22.715 C 38.945,24.064 35.483,25.073 31.334,25.073 L 31.334,26.357 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 31.334,28.938 C 36.120,28.938 40,27.594 40,25.938 C 40,25.717 39.926,25.502 39.796,25.296 C 38.945,26.643 35.483,27.653 31.334,27.653 L 31.334,28.938 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Screen-->\n    <DrawingBrush x:Key=\"Vector.Monitor\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 29.978,31.427 C 28.116,31.427 22.376,31.427 22.143,31.427 L 22.143,25.714 L 17.121,25.714 L 17.121,31.428 C 16.888,31.428 11.148,31.428 9.286,31.428 C 9.033,31.428 8.571,31.891 8.571,32.143 C 8.571,32.540 8.571,33.572 8.571,33.572 L 30.693,33.572 C 30.693,33.572 30.693,32.540 30.693,32.143 C 30.693,31.891 30.231,31.427 29.978,31.427 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 37.857,22.857 L 2.143,22.857 L 2.143,2.143 L 37.857,2.143 L 37.857,22.857 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 40,0 L 0,0 L 0,25 L 39.999,25 L 40,0 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 37.857,22.857 L 37.857,2.143 L 2.143,2.143 L 2.143,22.857 L 37.857,22.857 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Move\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 13.164,6.923 L 26.582,6.923 L 20,0 L 13.164,6.923 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 0,20 L 6.923,26.837 L 6.923,13.418 L 0,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 33.077,26.583 L 40,20 L 33.077,13.165 L 33.077,26.583 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 20,40.001 L 26.836,33.077 L 13.418,33.077 L 20,40.001 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 12.321,27.680 L 27.679,27.680 L 27.679,12.321 L 12.321,12.321 L 12.321,27.680 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 11.077,28.770 L 28.923,28.770 L 28.923,11.230 L 11.077,11.230 L 11.077,28.770 Z M 12.321,12.321 L 27.679,12.321 L 27.679,27.680 L 12.321,27.680 L 12.321,12.321 L 12.321,12.321 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Arrow.Left-->\n    <DrawingBrush x:Key=\"Vector.MoveLeft\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 0,12.199 L 11.045,24.400 L 20.389,24.400 L 12.743,15.685 L 39.927,15.685 L 39.927,8.715 L 12.743,8.715 L 20.389,0 L 11.045,0 L 0,12.199 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Arrow.Right-->\n    <DrawingBrush x:Key=\"Vector.MoveRight\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 40,12.222 L 28.936,0 L 19.575,0 L 27.234,8.730 L 0,8.730 L 0,15.715 L 27.234,15.715 L 19.575,24.444 L 28.936,24.444 L 40,12.222 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Net\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff672079\" Geometry=\"F1 M 40.000,40.000 L 0.000,40.000 L 0.000,0.000 L 40.000,0.000 L 40.000,40.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 6.545,23.622 C 6.545,23.067 6.920,22.677 7.445,22.677 C 7.971,22.677 8.331,23.067 8.331,23.622 C 8.331,24.162 7.985,24.567 7.431,24.567 C 6.906,24.567 6.545,24.162 6.545,23.622 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 10.011,24.402 L 10.011,14.293 L 11.436,14.293 L 14.675,19.407 C 15.425,20.592 16.010,21.657 16.490,22.692 L 16.521,22.677 C 16.400,21.327 16.370,20.098 16.370,18.522 L 16.370,14.293 L 17.600,14.293 L 17.600,24.402 L 16.280,24.402 L 13.070,19.272 C 12.365,18.147 11.690,16.992 11.181,15.897 L 11.136,15.912 C 11.210,17.188 11.241,18.402 11.241,20.082 L 11.241,24.402 L 10.011,24.402 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 25.115,19.662 L 21.186,19.662 L 21.186,23.308 L 25.564,23.308 L 25.564,24.402 L 19.880,24.402 L 19.880,14.293 L 25.340,14.293 L 25.340,15.388 L 21.186,15.388 L 21.186,18.582 L 25.115,18.582 L 25.115,19.662 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 29.420,15.402 L 26.345,15.402 L 26.345,14.293 L 33.829,14.293 L 33.829,15.402 L 30.740,15.402 L 30.740,24.402 L 29.420,24.402 L 29.420,15.402 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.KGySoft\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#9B5096\" Geometry=\"M 0,95 A1,1,0,0,1,100,-5\"/>\n                <GeometryDrawing Brush=\"#671678\" Geometry=\"M 0,95 A1,1,0,0,0,100,-5\"/>\n                <GeometryDrawing Brush=\"White\" Geometry=\"F1 M 3.65625,18.5L12.84375,18.5 12.84375,38.34375 15.75,33.4375 24.21875,18.5 35.46875,18.5 22.4375,38.5 35.6875,64 24.78125,64 16.46875,46.4375 12.84375,51 12.84375,64 3.65625,64 3.65625,18.5 Z\"/>\n                <GeometryDrawing Brush=\"White\" Geometry=\"F1 M 54.46875,17.875C59.40625,17.875 63.13020706176758,19.09375 65.640625,21.53125 68.15103912353516,23.96875 69.60416412353516,27.791667938232422 70,33L61.0625,33C60.8125,30.104167938232422 60.20833206176758,28.130210876464844 59.25,27.078125 58.291664123535156,26.026042938232422 56.791664123535156,25.5 54.75,25.5 52.27083206176758,25.5 50.46875,26.40625 49.34375,28.21875 48.21875,30.03125 47.635414123535156,32.91666793823242 47.59375,36.875L47.59375,45.125C47.59375,49.270835876464844 48.213539123535156,52.286460876464844 49.453125,54.171875 50.69270706176758,56.05729293823242 52.729164123535156,57 55.5625,57 57.375,57 58.84375,56.63541793823242 59.96875,55.90625L60.78125,55.34375 60.78125,47 54.34375,47 54.34375,40.0625 70,40.0625 70,58.84375C68.22916412353516,60.76041793823242 66.05728912353516,62.203125 63.484375,63.171875 60.91145706176758,64.140625 58.09375,64.625 55.03125,64.625 49.80208206176758,64.625 45.73958206176758,63.00520706176758 42.84375,59.765625 39.94791793823242,56.52604293823242 38.45833206176758,51.8125 38.375,45.625L38.375,37.4375C38.375,31.166667938232422 39.74479293823242,26.338542938232422 42.484375,22.953125 45.22395706176758,19.567710876464844 49.21875,17.875 54.46875,17.875 Z\"/>\n                <GeometryDrawing Brush=\"White\" Geometry=\"F1 M 73.34375,30.1875L82.84375,30.1875 86.90625,49.28125 91.40625,30.1875 100.84375,30.1875 89.71875,69.0625C88.05208587646484,74.79166412353516 84.91666412353516,77.65625 80.3125,77.65625 79.25,77.65625 78.04166412353516,77.45833587646484 76.6875,77.0625L76.6875,70.15625 77.71875,70.1875C79.09375,70.1875 80.13021087646484,69.921875 80.828125,69.390625 81.52603912353516,68.859375 82.05208587646484,67.9375 82.40625,66.625L83.09375,64.34375 73.34375,30.1875 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Arrow.Right.Green?-->\n    <DrawingBrush x:Key=\"Vector.Next.Green\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff60a08a\" Geometry=\"M 26.411,0 L 14.857,0 L 24.761,9.903 L 0,9.903 L 0,18.158 L 24.761,18.158 L 14.857,28.060 L 26.411,28.060 L 40,14.030 L 26.411,0 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.No\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#FFE51300\" Geometry=\"F1 M 18.972,16.718L7.464,4.723C8.768,3.914 10.293,3.423 11.936,3.423 16.629,3.423 20.45,7.243 20.45,11.935 20.45,13.706 19.9,15.355 18.972,16.718 M3.423,11.935C3.423,10.125,4.002,8.449,4.97,7.069L16.505,19.096C15.183,19.944 13.62,20.45 11.936,20.45 7.244,20.45 3.423,16.627 3.423,11.935 M11.936,0C5.346,0 0,5.345 0,11.935 0,18.528 5.346,23.875 11.936,23.875 18.529,23.875 23.873,18.528 23.873,11.935 23.873,5.345 18.529,0 11.936,0\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Number\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.048,0.953 L 0.953,0.953 L 0.953,31.447 L 39.048,31.447 L 39.048,0.953 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 40.001,0 L 0.001,0 L 0,32.400 L 40,32.400 L 40.001,0 Z M 39.048,0.953 L 39.048,31.447 L 0.953,31.447 L 0.953,0.953 L 39.048,0.953 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"F1 M 23.124,19.832 L 20.401,19.832 L 19.732,22.914 L 22.466,22.914 L 23.124,19.832 Z M 27.768,18.269 L 27.420,19.832 L 24.887,19.832 L 24.240,22.914 L 27.009,22.914 L 26.617,24.477 L 23.916,24.477 L 23.001,28.609 L 21.227,28.609 L 22.120,24.477 L 19.419,24.477 L 18.549,28.609 L 16.774,28.609 L 17.645,24.477 L 15.089,24.477 L 15.402,22.914 L 17.991,22.914 L 18.605,19.832 L 15.882,19.832 L 16.205,18.269 L 18.928,18.269 L 19.821,13.970 L 21.618,13.970 L 20.736,18.269 L 23.437,18.269 L 24.352,13.970 L 26.115,13.970 L 25.222,18.269 L 27.768,18.269 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 8.572,6.670 L 34.284,6.670 L 34.284,5.718 L 8.572,5.718 L 8.572,6.670 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 8.572,10.482 L 34.284,10.482 L 34.284,9.529 L 8.572,9.529 L 8.572,10.482 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 5.714,6.670 L 7.620,6.670 L 7.620,5.718 L 5.714,5.718 L 5.714,6.670 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 5.714,10.482 L 7.620,10.482 L 7.620,9.529 L 5.714,9.529 L 5.714,10.482 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Obfuscate\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 0.000,0.000 L 34.000,0.000 L 34.000,34.000 L 0.000,34.000 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 11.857,1.571 L 22.143,1.571 L 22.143,11.857 L 11.857,11.857 L 11.857,1.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 1.571,1.571 L 11.857,1.571 L 11.857,11.857 L 1.571,11.857 L 1.571,1.571 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 1.571,11.857 L 11.857,11.857 L 11.857,22.143 L 1.571,22.143 L 1.571,11.857 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 1.571,22.143 L 11.857,22.143 L 11.857,32.429 L 1.571,32.429 L 1.571,22.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 22.143,1.571 L 32.429,1.571 L 32.429,11.857 L 22.143,11.857 L 22.143,1.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 11.857,11.857 L 22.143,11.857 L 22.143,22.143 L 11.857,22.143 L 11.857,11.857 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 22.143,11.857 L 32.429,11.857 L 32.429,22.143 L 22.143,22.143 L 22.143,11.857 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 11.857,22.143 L 22.143,22.143 L 22.143,32.429 L 11.857,32.429 L 11.857,22.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 22.143,22.143 L 32.429,22.143 L 32.429,32.429 L 22.143,32.429 L 22.143,22.143 Z\"/>\n                <GeometryDrawing Brush=\"#ff448ed0\" Geometry=\"F1 M 39.841,29.130 C 39.841,35.016 35.054,39.800 29.171,39.800 C 23.288,39.800 18.500,35.015 18.500,29.130 C 18.500,24.022 25.957,12.245 27.453,9.935 C 27.830,9.352 28.477,9.000 29.172,9.000 C 29.868,9.000 30.514,9.352 30.891,9.935 C 32.384,12.245 39.841,24.022 39.841,29.130 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Ok\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#FF7E7E7E\" Geometry=\"F1 M 5,13.48 L 0,17 L 15.36,34.42 L 40,3.55 L 34.64,0 L 15,24.84 L 5,13.48 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Ok.Round\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 40,20 C 40,31.046 31.046,40 20,40 C 8.954,40 0,31.046 0,20 C 0,8.954 8.954,0 20,0 C 31.046,0 40,8.954 40,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff699a8a\" Geometry=\"F1 M 16.795,32.792 L 6.192,20.787 L 9.644,18.338 L 16.548,26.176 L 30.108,9.028 L 33.808,11.478 L 16.795,32.792 Z M 20,0 C 8.955,0 0,8.955 0,20 C 0,31.046 8.955,40 20,40 C 31.046,40 40,31.046 40,20 C 40,8.955 31.046,0 20,0 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Open\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 7.586,10.345 L 33.104,10.345 L 33.104,0.690 L 21.607,0.690 L 18.297,5.517 L 0.690,5.517 L 0.690,26.897 L 1.379,26.897 L 7.586,10.345 Z\"/>\n                <GeometryDrawing Brush=\"#ffebbf7c\" Geometry=\"M 17.561,4.828 C 13.372,4.828 4.781,4.817 0.690,4.828 C 0.446,4.828 0,5.274 0,5.517 C 0,11.684 0,31.035 0,31.035 L 33.793,31.035 L 40,10.345 L 33.793,10.345 L 33.793,0 C 33.793,0 24.894,0 22.066,0 C 20.415,0 19.212,4.828 17.561,4.828 Z M 22.434,0.690 C 24.646,0.690 30.137,0.690 32.414,0.690 C 32.658,0.690 33.104,1.136 33.104,1.380 C 33.104,3.495 33.104,10.345 33.104,10.345 C 33.104,10.345 14.033,10.334 7.586,10.345 C 7.106,10.346 6.120,11.597 5.844,12 C 3.661,15.189 1.379,26.897 1.379,26.897 L 0.690,26.897 C 0.690,26.897 0.690,11.167 0.690,6.207 C 0.690,5.963 1.135,5.517 1.379,5.517 C 5.298,5.517 14.335,5.517 18.204,5.517 C 19.855,5.517 20.783,0.690 22.434,0.690 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Options\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7e7e7e\" Geometry=\"F1 M 8.024,19.386 C 5.971,19.386 5.482,18.203 5.482,18.203 L 2.472,20.637 C 2.472,20.637 6.484,25.101 0,25.643 L 0,30.011 C 6.554,30.555 2.472,34.381 2.472,34.381 L 4.945,37.498 C 4.945,37.498 9.354,33.437 9.890,40 L 14.205,40 C 14.741,33.365 18.520,37.498 18.520,37.498 L 21.599,34.994 C 21.599,34.994 17.588,30.531 24.073,29.989 L 24.073,25.620 C 17.519,25.077 21.599,21.252 21.599,21.252 L 19.128,18.135 C 19.128,18.135 14.718,22.196 14.182,15.632 L 9.867,15.632 C 9.751,17.072 9.307,19.386 8.024,19.386 Z M 8.024,28.123 C 8.024,21.818 16.048,22.857 16.048,27.509 C 16.048,33.814 8.024,32.775 8.024,28.123 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7e7e\" Geometry=\"F1 M 20.994,2.502 C 19.618,2.502 19.642,2.006 18.521,1.250 L 16.189,3.896 C 16.189,3.896 17.865,5.360 17.422,6.588 C 17.135,7.383 16.515,7.343 14.814,7.485 L 14.814,11.239 C 18.615,11.571 17.496,12.798 16.050,14.993 L 18.662,17.354 C 18.662,17.354 20.483,15.620 21.601,16.243 C 22.617,16.810 22.208,18.748 22.208,18.748 L 25.916,18.748 C 26.244,14.899 27.456,16.032 29.626,17.496 L 31.958,14.852 C 30.908,13.033 30.278,13.629 30.859,12.135 C 31.275,11.066 31.631,11.405 33.333,11.263 L 33.333,7.509 C 29.531,7.178 30.651,5.950 32.098,3.755 L 29.484,1.394 C 29.484,1.394 27.643,3.021 26.628,2.188 C 25.924,1.849 26.080,1.724 25.940,0 L 22.231,0 C 22.136,1.203 22.253,2.502 20.994,2.502 Z M 20.990,9.518 C 21.011,5.549 27.174,4.885 27.148,9.805 C 27.148,13.252 20.971,12.966 20.990,9.518 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Delay.Override-->\n    <DrawingBrush x:Key=\"Vector.OverrideDelay\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 20.002,0.714 C 30.652,0.714 39.286,9.348 39.286,19.998 C 39.286,30.650 30.652,39.283 20.002,39.283 C 9.351,39.283 0.717,30.650 0.717,19.998 C 0.717,9.348 9.351,0.714 20.002,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4680b7\" Geometry=\"F1 M 20.002,1.428 C 9.762,1.428 1.431,9.759 1.431,19.998 C 1.431,30.238 9.762,38.569 20.002,38.569 C 30.241,38.569 38.572,30.238 38.572,19.998 C 38.572,9.759 30.241,1.428 20.002,1.428 Z M 20.002,39.997 C 8.974,39.997 0.003,31.025 0.003,19.998 C 0.003,8.971 8.974,0 20.002,0 C 31.029,0 40,8.971 40,19.998 C 40,31.025 31.029,39.997 20.002,39.997 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.287,20.713 L 30.717,20.713 L 30.717,19.284 L 20.716,19.284 L 20.716,4.997 L 19.287,4.997 L 19.287,20.713 Z\"/>\n                <GeometryDrawing Brush=\"#ffe9be7a\" Geometry=\"M 8.253,30.476 L 7.619,30.476 L 7.619,26.667 L 5.714,26.667 L 5.714,30.476 L 5.079,30.476 L 1.905,27.302 L 0.635,28.571 L 3.809,31.746 L 3.809,32.381 L 0,32.381 L 0,34.286 L 3.809,34.286 L 3.809,34.920 L 0.635,38.094 L 1.905,39.365 L 5.079,36.191 L 5.714,36.191 L 5.714,40 L 7.619,40 L 7.619,36.191 L 8.253,36.191 L 11.428,39.365 L 12.697,38.094 L 9.523,34.920 L 9.523,34.286 L 13.333,34.286 L 13.333,32.381 L 9.523,32.381 L 9.523,31.746 L 12.697,28.571 L 11.428,27.302 L 8.253,30.476 Z M 5.079,31.746 L 8.253,31.746 L 8.253,34.920 L 5.079,34.920 L 5.079,31.746 L 5.079,31.746 Z\"/>\n                <GeometryDrawing Brush=\"#fff6f5f5\" Geometry=\"M 8.253,34.920 L 5.079,34.920 L 5.079,31.746 L 8.253,31.746 L 8.253,34.920 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Pause\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 0,40 L 14.400,40 L 14.400,0 L 0,0 L 0,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 19.200,40 L 33.600,40 L 33.600,0 L 19.200,0 L 19.200,40 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Pause.Color\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"White\" Geometry=\"M 0,40 L 14.400,40 L 14.400,0 L 0,0 L 0,40 Z\"/>\n                <GeometryDrawing Brush=\"White\" Geometry=\"M 19.200,40 L 33.600,40 L 33.600,0 L 19.200,0 L 19.200,40 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Paste\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 12.443,4 L 4.666,4 L 4.666,32.666 L 14,32.666 L 14,18 L 24.667,18 L 24.667,4 L 16.887,3.999 L 16.887,2.666 L 12.443,2.666 L 12.443,4 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 15.333,39.333 L 35.333,39.333 L 35.333,19.333 L 15.333,19.333 L 15.333,39.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb6\" Geometry=\"M 22.666,28.667 C 22.431,28.431 21.569,28.431 21.334,28.667 C 19.960,30.040 16,34 16,34 L 16,38.667 L 32,38.667 C 32,38.667 25.102,31.102 22.666,28.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb6\" Geometry=\"M 33.333,38.667 L 34.666,38.667 L 34.666,34.666 C 34.666,34.666 30.560,30.560 29.333,29.333 C 29.097,29.097 28.235,29.097 28,29.333 C 27.688,29.645 26.892,30.252 26.666,30.666 C 26.539,30.900 26.479,31.541 26.666,31.729 C 28.494,33.556 33.333,38.667 33.333,38.667 Z\"/>\n                <GeometryDrawing Brush=\"#ffe7bf7b\" Geometry=\"M 0.667,37.333 C 3.814,37.333 14,37.333 14,37.333 L 14,32.666 L 4.666,32.666 L 4.666,4 C 4.666,4 1.607,4 0.667,4 C 0.431,4 0,4.431 0,4.667 C 0,12.395 0,29.073 0,36.666 C 0,36.902 0.431,37.333 0.667,37.333 Z\"/>\n                <GeometryDrawing Brush=\"#ffe7bf7b\" Geometry=\"M 28.667,4 C 27.695,4 24.667,4 24.667,4 L 24.667,18 L 29.333,18 C 29.333,18 29.333,7.798 29.333,4.667 C 29.333,4.431 28.902,4 28.667,4 Z\"/>\n                <GeometryDrawing Brush=\"#ff797a7a\" Geometry=\"M 10.666,0.667 C 10.666,1.484 10.666,4 10.666,4 C 10.666,4 7.624,4 6.666,4 C 6.195,4 5.333,4.862 5.333,5.334 C 5.333,6.335 5.333,9.333 5.333,9.333 L 24,9.333 C 24,9.333 24,6.299 24,5.334 C 24,4.862 23.138,4 22.666,4 C 21.733,4 18.666,4 18.666,4 C 18.666,4 18.666,1.447 18.666,0.667 C 18.666,0.432 18.236,0 18,0 C 16.419,0 12.994,0 11.333,0 C 11.097,0 10.666,0.432 10.666,0.667 Z M 13.333,2.667 L 16,2.667 L 16,5.334 L 13.333,5.334 L 13.333,2.667 L 13.333,2.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff797a7a\" Geometry=\"M 36,40 L 36,18.666 L 14.667,18.666 L 14.667,40 L 36,40 Z M 15.333,19.333 L 35.333,19.333 L 35.333,39.333 L 15.333,39.333 L 15.333,19.333 L 15.333,19.333 Z\"/>\n                <GeometryDrawing Brush=\"#ffe7bf7b\" Geometry=\"M 31.995,23.997 C 31.995,25.101 31.100,25.996 29.996,25.996 C 28.891,25.996 27.996,25.101 27.996,23.997 C 27.996,22.892 28.891,21.997 29.996,21.997 C 31.100,21.997 31.995,22.892 31.995,23.997 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Patreon\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#fff86753\" Geometry=\"M 64.106,0.000 C 44.252,0.000 28.100,16.151 28.100,36.003 C 28.100,55.795 44.252,71.898 64.106,71.898 C 83.898,71.898 100.000,55.795 100.000,36.003 C 100.000,16.151 83.898,0.000 64.106,0.000\"/>\n                <GeometryDrawing Brush=\"#ff042c48\" Geometry=\"M 0.000,95.900 L 17.580,95.900 L 17.580,0.000 L 0.000,0.000 L 0.000,95.900 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Pen\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 3.306,30.447 L 29.187,4.566 L 35.434,10.813 L 9.553,36.694 L 3.306,30.447 Z M 8.924,37.324 L 2.676,31.076 L 0,40.001 L 8.924,37.324 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 40,6.247 L 33.753,0 L 29.736,4.015 L 35.985,10.264 L 40,6.247 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Image.Fit-->\n    <DrawingBrush x:Key=\"Vector.PictureFit\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 34.303,0.625 L 39.375,0.625 L 39.375,3.875 L 40,3.875 L 40,0 L 34.303,0 L 34.303,0.625 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,3.875 L 0.625,3.875 L 0.625,0.625 L 5.703,0.625 L 5.703,0 L 0,0 L 0,3.875 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,23.750 L 5.625,23.750 L 5.625,23.125 L 0.625,23.125 L 0.625,19.877 L 0,19.877 L 0,23.750 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 39.375,23.125 L 34.375,23.125 L 34.375,23.750 L 40,23.750 L 40,19.877 L 39.375,19.877 L 39.375,23.125 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,11.177 L 0.625,11.177 L 0.625,5.177 L 0,5.177 L 0,11.177 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 39.375,11.177 L 40,11.177 L 40,5.177 L 39.375,5.177 L 39.375,11.177 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,18.527 L 0.625,18.527 L 0.625,12.527 L 0,12.527 L 0,18.527 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 39.375,18.527 L 40,18.527 L 40,12.527 L 39.375,12.527 L 39.375,18.527 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 8.125,23.125 L 31.875,23.125 L 31.875,0.625 L 8.125,0.625 L 8.125,23.125 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 16.875,11.250 C 16.654,11.029 15.846,11.029 15.625,11.250 C 13.888,12.987 8.750,18.125 8.750,18.125 L 8.750,22.500 L 27.500,22.500 C 27.500,22.500 19.360,13.735 16.875,11.250 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 25,12.500 C 24.669,12.169 23.456,12.168 23.125,12.500 C 22.802,12.823 22.195,13.430 21.875,13.750 C 21.654,13.971 21.654,14.779 21.875,15 C 23.735,16.859 28.913,22.500 28.913,22.500 L 31.250,22.500 L 31.250,18.750 C 31.250,18.750 26.521,14.021 25,12.500 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 7.500,23.750 L 32.500,23.750 L 32.500,0 L 7.500,0 L 7.500,23.750 Z M 8.125,0.625 L 31.875,0.625 L 31.875,23.125 L 8.125,23.125 L 8.125,0.625 L 8.125,0.625 Z\"/>\n                <GeometryDrawing Brush=\"#ffebc17d\" Geometry=\"M 27.496,5.624 C 27.496,7.005 26.377,8.124 24.996,8.124 C 23.616,8.124 22.497,7.005 22.497,5.624 C 22.497,4.244 23.616,3.125 24.996,3.125 C 26.377,3.125 27.496,4.244 27.496,5.624 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n    \n    <DrawingBrush x:Key=\"Vector.Pixelate\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,40.000 L 0.000,40.000 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 14.000,2.000 L 26.000,2.000 L 26.000,14.000 L 14.000,14.000 L 14.000,2.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 2.000,2.000 L 14.000,2.000 L 14.000,14.000 L 2.000,14.000 L 2.000,2.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 2.000,14.000 L 14.000,14.000 L 14.000,26.000 L 2.000,26.000 L 2.000,14.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 2.000,26.000 L 14.000,26.000 L 14.000,38.000 L 2.000,38.000 L 2.000,26.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 26.000,2.000 L 38.000,2.000 L 38.000,14.000 L 26.000,14.000 L 26.000,2.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 14.000,14.000 L 26.000,14.000 L 26.000,26.000 L 14.000,26.000 L 14.000,14.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 26.000,14.000 L 38.000,14.000 L 38.000,26.000 L 26.000,26.000 L 26.000,14.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 14.000,26.000 L 26.000,26.000 L 26.000,38.000 L 14.000,38.000 L 14.000,26.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffb7cce2\" Geometry=\"F1 M 26.000,26.000 L 38.000,26.000 L 38.000,38.000 L 26.000,38.000 L 26.000,26.000 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Play\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 25.600,20 L 0,0 L 0,40 L 25.600,20 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to Arrow.Left.Green?-->\n    <DrawingBrush x:Key=\"Vector.Previous.Green\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff60a08a\" Geometry=\"M 13.590,28 L 25.144,28 L 15.239,18.119 L 40,18.119 L 40,9.881 L 15.239,9.881 L 25.144,0 L 13.590,0 L 0,14 L 13.590,28 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Progress\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 28.889,13.286 L 28.889,0 L 0,0 L 0,13.286 L 28.889,13.286 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 18.889,31 L 18.889,17.715 L 0,17.715 L 0,31 L 18.889,31 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 18.889,18.820 L 18.889,29.893 L 38.889,29.893 L 38.889,18.820 L 18.889,18.820 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 28.889,1.107 L 28.889,12.179 L 38.889,12.179 L 38.889,1.107 L 28.889,1.107 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 18.889,29.893 L 18.889,31 L 40,31 L 40,17.715 L 18.889,17.715 L 18.889,18.820 L 38.889,18.820 L 38.889,29.893 L 18.889,29.893 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 28.889,12.179 L 28.889,13.286 L 40,13.286 L 40,0 L 28.889,0 L 28.889,1.107 L 38.889,1.107 L 38.889,12.179 L 28.889,12.179 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Project\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 21.998,0.568 L 2.207,0.568 L 2.207,26.379 L 9.610,26.379 L 9.610,24.941 L 24.391,24.941 L 24.391,26.379 L 31.765,26.379 L 31.765,9.900 L 21.998,0.568 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 31.765,34.988 L 24.391,34.988 L 24.391,36.398 L 9.610,36.398 L 9.610,34.988 L 2.207,34.988 L 2.207,39.268 L 31.765,39.268 L 31.765,34.988 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 21.986,0 L 1.620,0 L 1.620,26.512 L 2.207,26.512 L 2.207,0.568 L 21.428,0.568 L 21.428,10.588 L 31.765,10.588 L 31.765,26.350 L 32.491,26.350 L 32.491,10.031 M 31.765,10.031 L 21.986,10.031 L 21.986,0.568 L 31.765,10.031 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 0,34.258 L 9.610,34.258 L 9.610,27.082 L 0,27.082 L 0,34.258 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 24.391,34.258 L 34,34.258 L 34,27.082 L 24.391,27.082 L 24.391,34.258 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 10.336,35.691 L 23.633,35.691 L 23.633,25.674 L 10.336,25.674 L 10.336,35.691 Z M 11.818,27.082 L 22.152,27.082 L 22.152,34.258 L 11.818,34.258 L 11.818,27.082 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 12.544,33.553 L 21.430,33.553 L 21.430,27.813 L 12.544,27.813 L 12.544,33.553 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 31.765,34.988 L 31.765,39.268 L 2.207,39.268 L 2.207,34.988 L 1.480,34.988 L 1.480,40 L 32.519,40 L 32.519,34.988 L 31.765,34.988 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Psd\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 19.998,0.714 L 0.714,0.714 L 0.714,39.286 L 29.286,39.286 L 29.286,9.999 L 19.998,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff15103e\" Geometry=\"M 20.000,0.000 L 0.000,0.000 L 0.000,40.000 L 30.000,40.000 L 30.000,39.286 L 0.714,39.286 L 0.714,0.714 L 19.286,0.714 L 19.286,10.714 L 29.286,10.714 L 29.286,39.286 L 30.000,39.286 L 30.000,10.000 L 20.000,0.000 Z M 29.286,10.000 L 20.000,10.000 L 20.000,1.428 L 20.000,0.714\"/>\n                <GeometryDrawing Brush=\"#ff15103e\" Geometry=\"F1 M 8.040,22.712 C 8.496,22.832 9.072,22.880 9.769,22.880 C 12.289,22.880 13.825,21.656 13.825,19.424 C 13.825,17.288 12.313,16.256 10.008,16.256 C 9.096,16.256 8.400,16.328 8.040,16.424 L 8.040,22.712 Z M 5.952,14.912 C 6.960,14.744 8.280,14.600 9.960,14.600 C 12.024,14.600 13.537,15.080 14.497,15.944 C 15.385,16.712 15.913,17.888 15.913,19.328 C 15.913,20.792 15.481,21.944 14.665,22.784 C 13.561,23.960 11.761,24.561 9.720,24.561 C 9.096,24.561 8.521,24.537 8.040,24.417 L 8.040,30.897 L 5.952,30.897 L 5.952,14.912 Z\"/>\n                <GeometryDrawing Brush=\"#ff15103e\" Geometry=\"F1 M 17.833,28.737 C 18.457,29.145 19.561,29.577 20.617,29.577 C 22.153,29.577 22.873,28.809 22.873,27.849 C 22.873,26.841 22.273,26.289 20.712,25.712 C 18.625,24.968 17.640,23.816 17.640,22.424 C 17.640,20.552 19.152,19.016 21.648,19.016 C 22.825,19.016 23.857,19.352 24.505,19.736 L 23.977,21.272 C 23.521,20.984 22.681,20.600 21.601,20.600 C 20.353,20.600 19.656,21.320 19.656,22.184 C 19.656,23.145 20.353,23.576 21.865,24.152 C 23.881,24.920 24.913,25.929 24.913,27.657 C 24.913,29.697 23.329,31.137 20.568,31.137 C 19.296,31.137 18.120,30.825 17.304,30.345 L 17.833,28.737 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Question\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 6.666,33.924 L 34.666,33.924 L 34.666,5.924 L 6.666,6.007 L 6.666,33.924 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 0,19.172 C 0,46.943 40,46.943 40,19.172 C 40,-6.363 0,-6.418 0,19.172 Z M 10.790,14.431 C 12.687,3.956 24.372,5.420 27.952,9.435 C 30.387,12.165 30.282,16.061 27.869,18.715 C 24.700,22.199 23.317,20.482 22.377,26.731 L 18.039,26.731 C 17.244,16.826 25.044,18.936 24.252,13.478 C 23.752,11.436 22.302,9.735 19.036,10.649 C 16.699,11.303 16.044,12.910 15.247,14.832 L 10.790,14.431 L 10.790,14.431 Z M 18,28.800 L 22.500,28.800 L 22.500,33.700 L 18,33.700 L 18,28.800 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Record\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ffa02821\" Geometry=\"M 40,20 C 40,31.046 31.046,40 20,40 C 8.954,40 0,31.046 0,20 C 0,8.954 8.954,0 20,0 C 31.046,0 40,8.954 40,20 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Record.New\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffa02821\" Geometry=\"M 40,20.656 C 40,30.673 31.880,38.793 21.863,38.793 C 11.846,38.793 3.725,30.673 3.725,20.656 C 3.725,10.639 11.846,2.518 21.863,2.518 C 31.880,2.518 40,10.639 40,20.656 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 11.491,11.247 L 5.596,11.247 L 5.596,5.749 L 11.491,5.749 L 11.491,11.247 Z\"/>\n                <GeometryDrawing Brush=\"#ffebc67d\" Geometry=\"F1 M 1.868,13.501 L 1.868,15.321 L 3.700,15.321 L 6.396,12.641 L 7.294,12.641 L 7.294,16.283 L 8.193,17.175 L 9.091,17.175 L 9.989,16.283 L 9.989,12.641 L 10.889,12.641 L 11.786,13.534 L 12.684,14.426 L 13.584,15.320 L 15.416,15.320 L 15.416,13.501 L 14.516,12.607 L 13.618,11.715 L 12.721,10.823 L 12.721,9.926 L 16.383,9.926 L 17.283,9.035 L 17.283,8.141 L 16.386,7.247 L 12.723,7.247 L 12.723,6.355 L 13.620,5.462 L 14.519,4.569 L 15.418,3.677 L 16.315,0.962 L 13.586,1.857 L 10.891,4.535 L 9.991,4.535 L 9.991,0.895 L 9.092,0 L 8.195,0 L 7.294,0.895 L 7.294,4.535 L 6.396,4.535 L 5.499,3.642 L 4.599,2.749 L 3.700,1.855 L 0.968,0.961 L 1.867,3.676 L 2.767,4.569 L 3.664,5.462 L 4.563,6.355 L 4.563,7.247 L 0.898,7.247 L 0,8.141 L 0,9.035 L 0.898,9.926 L 4.563,9.926 L 4.563,10.820 L 1.868,13.501 Z M 10.822,7.146 L 10.822,9.859 L 9.924,10.753 L 7.193,10.753 L 6.294,9.859 L 6.294,7.146 L 7.191,6.252 L 9.923,6.252 L 10.822,7.146 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Record.Add\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffa02821\" Geometry=\"M 32.719,28.660 C 34.942,25.666 36.088,22.036 36.088,18.021 C 36.088,8.069 28.009,0 18.044,0 C 8.079,0 0,8.069 0,18.021 C 0,27.974 8.079,36.043 18.044,36.043 C 21.186,36.043 23.893,35.532 26.464,34.120 L 26.584,33.909 L 20.450,34 L 20.450,28.354 L 26.344,28.354 L 26.344,22.467 L 32.719,22.467 L 32.719,28.660 Z\"/>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 27.016,29.030 L 21.159,29.030 L 21.159,33.419 L 27.016,33.419 L 27.016,40 L 32.142,40 L 32.142,33.419 L 38,33.419 L 38,29.030 L 32.142,29.030 L 32.142,23.180 L 27.016,23.180 L 27.016,29.030 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Recorder.New\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 36.375,36.875 L 8.375,36.875 L 8.375,27.375 L 36.375,27.375 L 36.375,36.875 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.8\" Brush=\"#ffaaaaaa\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 36.375,25.375 L 0.375,25.375 L 0.375,0.375 L 36.375,0.375 L 36.375,25.375 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.8\" Brush=\"#ffaaaaaa\" MiterLimit=\"1.0\">\n                            <Pen.DashStyle>\n                                <DashStyle Dashes=\"6.67,2.67\"/>\n                            </Pen.DashStyle>\n                        </Pen>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ff9f2821\" Geometry=\"F1 M 29.375,33.875 C 29.375,34.703 28.703,35.375 27.875,35.375 C 27.047,35.375 26.375,34.703 26.375,33.875 C 26.375,33.047 27.047,32.375 27.875,32.375 C 28.703,32.375 29.375,33.047 29.375,33.875 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ffffffff\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ff3f7db7\" Geometry=\"F1 M 34.375,35.375 L 31.375,35.375 L 31.375,32.375 L 34.375,32.375 L 34.375,35.375 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ffffffff\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                \n                <GeometryDrawing Brush=\"#ff221e1f\" Geometry=\"F1 M 34.512,31.475 L 32.125,29.088 L 32.238,28.975 L 34.625,31.362 L 34.512,31.475 Z\"/>\n                <GeometryDrawing Brush=\"#ff221e1f\" Geometry=\"F1 M 32.238,31.475 L 32.125,31.362 L 34.512,28.975 L 34.625,29.088 L 32.238,31.475 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Recorder.Old\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 40.000,27.000 L -0.000,27.000 L -0.000,0.000 L 40.000,0.000 L 40.000,27.000 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.8\" Brush=\"#ffaaaaaa\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Geometry=\"F1 M 38.000,23.000 L 2.000,23.000 L 2.000,4.000 L 38.000,4.000 L 38.000,23.000 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.8\" Brush=\"#ffaaaaaa\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ff9f2821\" Geometry=\"F1 M 29.000,24.750 C 29.000,25.578 28.328,26.250 27.500,26.250 C 26.672,26.250 26.000,25.578 26.000,24.750 C 26.000,23.922 26.672,23.250 27.500,23.250 C 28.328,23.250 29.000,23.922 29.000,24.750 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ffffffff\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ff3f7db7\" Geometry=\"F1 M 35.000,26.250 L 32.000,26.250 L 32.000,23.250 L 35.000,23.250 L 35.000,26.250 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ffffffff\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                \n                <GeometryDrawing Brush=\"#ff221e1f\" Geometry=\"F1 M 37.137,3.600 L 34.750,1.213 L 34.863,1.100 L 37.250,3.487 L 37.137,3.600 Z\"/>\n                <GeometryDrawing Brush=\"#ff221e1f\" Geometry=\"F1 M 34.863,3.600 L 34.750,3.487 L 37.137,1.100 L 37.250,1.213 L 34.863,3.600 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Rectangle\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.953,27.550 L 39.047,27.550 L 39.047,0.950 L 0.953,0.950 L 0.953,27.550 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 0,28.500 L 40,28.500 L 40,0 L 0,0 L 0,28.500 Z M 0.953,0.950 L 39.047,0.950 L 39.047,27.550 L 0.953,27.550 L 0.953,0.950 L 0.953,0.950 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Redo\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 30.002,8.399 L 21.499,16.945 L 14.204,16.945 L 19.707,10.928 C 15.048,10.767 9.159,9.984 6.425,13.654 C 3.500,17.894 4.589,23.478 11.944,25.200 L 11.944,30 C 4.573,30 0.424,24.195 0.111,19.925 C -0.264,16.455 0.002,11.287 5.860,7.700 C 8.090,6.514 10.611,5.950 11.932,5.988 C 14.504,5.988 17.115,5.988 19.707,5.988 L 14.204,0 L 21.499,0 L 30.002,8.399 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Remove\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff707070\" Geometry=\"F1 M 15.111,15.041 C 14.486,15.990 -1.898,28.306 0.182,33.218 C 5.514,38.540 7.256,32.216 10.507,28.795 C 14.513,24.606 15.708,22.419 20.677,19.077 C 27.490,23.730 34.278,35.352 39.922,35.455 C 37.893,31.496 36.046,28.334 33.602,24.708 C 31.183,21.107 28.167,17.868 26.060,14.371 C 29.285,10.514 37.816,6.863 40,4.215 C 36.281,1.824 27.959,7.711 22.523,10.797 C 18.336,8.252 9.701,-2.110 3.797,0.384 C -1.768,2.725 3.303,6.941 5.982,8.458 C 8.583,9.923 13.654,12.854 15.111,15.041 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename to Image.Remove-->\n    <DrawingBrush x:Key=\"Vector.RemoveImage\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 16.357,36.671 L 0.671,36.671 L 0.671,0.667 L 36.876,0.667 L 36.876,20.711 L 37.547,20.534 L 37.547,0 L 0,0 L 0,37.338 L 16.091,37.338 L 16.357,36.671 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 34.592,36.671 L 22.972,36.671 L 22.525,37.338 L 35.040,37.338 L 34.592,36.671 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 36.876,24.178 L 36.876,33.338 L 37.547,34.400 L 37.547,23.821 L 36.876,24.178 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 36.876,0.667 L 0.671,0.667 L 0.671,36.671 L 36.876,36.671 L 36.876,0.667 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 23.812,28.090 C 24.915,27.003 18.623,24.284 17.259,22.636 C 16.644,21.893 16.502,19.871 16.502,19.871 C 16.502,19.871 15.349,19.059 14.751,18.669 C 14.329,18.395 13.126,18.350 12.739,18.669 C 9.726,21.151 2.011,28.671 2.011,28.671 L 2.011,35.338 L 16.728,35.338 C 16.728,35.338 19.157,32.683 23.812,28.090 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 28.876,32.004 C 28.691,31.925 28.241,31.901 28.068,32.004 C 26.922,32.688 24.909,35.338 24.909,35.338 L 32.686,35.338 C 32.686,35.338 30.088,32.522 28.876,32.004 Z\"/>\n                <GeometryDrawing Brush=\"#ffd55a31\" Geometry=\"F1 M 25.539,27.717 C 25.176,28.288 15.657,35.699 16.866,38.655 C 19.964,41.857 20.975,38.051 22.864,35.993 C 25.191,33.472 25.886,32.157 28.773,30.146 C 32.732,32.945 36.675,39.938 39.954,40 C 38.776,37.618 37.703,35.715 36.282,33.534 C 34.877,31.367 33.125,29.418 31.901,27.314 C 33.775,24.993 38.731,22.796 40,21.202 C 37.839,19.764 33.004,23.307 29.846,25.163 C 27.413,23.632 22.396,17.397 18.966,18.898 C 15.732,20.306 18.679,22.843 20.235,23.756 C 21.747,24.637 24.693,26.401 25.539,27.717 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc677\" Geometry=\"M 32.179,9.333 C 32.179,11.542 30.378,13.333 28.156,13.333 C 25.935,13.333 24.134,11.542 24.134,9.333 C 24.134,7.124 25.935,5.333 28.156,5.333 C 30.378,5.333 32.179,7.124 32.179,9.333 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Repeat\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3b77ae\" Geometry=\"M 29.914,25.165 C 21.992,39.787 -1.690,27.616 8.464,11.780 C 11.483,7.071 16.640,7.068 16.640,7.068 L 16.640,0 C 12.317,0.363 8.631,2.533 6.162,4.746 C -2.818,12.797 -2.856,30.068 11.896,36.591 C 22.615,41.332 39.037,33.980 37.716,16.462 C 37.239,10.127 35.941,9.621 32.992,4.712 L 40,4.712 L 36.297,0.181 L 22.480,0 L 22.480,14.135 L 26.973,17.871 L 28.320,10.602 C 28.320,10.602 33.886,17.835 29.914,25.165 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Report\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.714,39.286 L 29.286,39.286 L 29.286,0.714 L 0.714,0.714 L 0.714,39.286 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 3.571,22.143 L 10.714,22.143 L 10.714,21.428 L 3.571,21.428 L 3.571,22.143 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 3.571,5 L 10.714,5 L 10.714,4.286 L 3.571,4.286 L 3.571,5 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,10.714 L 19.286,10.714 L 19.286,10 L 10.714,10 L 10.714,10.714 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,33.572 L 19.286,33.572 L 19.286,32.857 L 10.714,32.857 L 10.714,33.572 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,7.857 L 19.286,7.857 L 19.286,7.143 L 10.714,7.143 L 10.714,7.857 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,13.571 L 19.286,13.571 L 19.286,12.857 L 10.714,12.857 L 10.714,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,16.429 L 19.286,16.429 L 19.286,15.714 L 10.714,15.714 L 10.714,16.429 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,19.286 L 19.286,19.286 L 19.286,18.572 L 10.714,18.572 L 10.714,19.286 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,25 L 19.286,25 L 19.286,24.286 L 10.714,24.286 L 10.714,25 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,27.857 L 19.286,27.857 L 19.286,27.143 L 10.714,27.143 L 10.714,27.857 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 10.714,30.714 L 19.286,30.714 L 19.286,30 L 10.714,30 L 10.714,30.714 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,10.714 L 26.429,10.714 L 26.429,10 L 20.714,10 L 20.714,10.714 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,33.572 L 26.429,33.572 L 26.429,32.857 L 20.714,32.857 L 20.714,33.572 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,7.857 L 26.429,7.857 L 26.429,7.143 L 20.714,7.143 L 20.714,7.857 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,13.571 L 26.429,13.571 L 26.429,12.857 L 20.714,12.857 L 20.714,13.571 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,16.429 L 26.429,16.429 L 26.429,15.714 L 20.714,15.714 L 20.714,16.429 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,19.286 L 26.429,19.286 L 26.429,18.572 L 20.714,18.572 L 20.714,19.286 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,25 L 26.429,25 L 26.429,24.286 L 20.714,24.286 L 20.714,25 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,27.857 L 26.429,27.857 L 26.429,27.143 L 20.714,27.143 L 20.714,27.857 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 20.714,30.714 L 26.429,30.714 L 26.429,30 L 20.714,30 L 20.714,30.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,40 L 30,40 L 30,0 L 0,0 L 0,40 Z M 0.714,0.714 L 29.286,0.714 L 29.286,39.286 L 0.714,39.286 L 0.714,0.714 L 0.714,0.714 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <!--Rename Image.Resize-->\n    <DrawingBrush x:Key=\"Vector.Resize\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 7.742,32.258 L 32.258,32.258 L 32.258,7.742 L 7.742,7.742 L 7.742,32.258 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 16.774,20 C 16.546,19.772 15.712,19.772 15.484,20 C 13.798,21.686 8.387,27.097 8.387,27.097 L 8.387,31.613 L 27.742,31.613 C 27.742,31.613 19.472,22.699 16.774,20 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 32.903,32.903 L 32.903,7.097 L 7.097,7.097 L 7.097,32.903 L 32.903,32.903 Z M 7.742,7.742 L 32.258,7.742 L 32.258,32.258 L 7.742,32.258 L 7.742,7.742 L 7.742,7.742 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 29.243,31.613 L 31.613,31.613 L 31.613,27.742 C 31.613,27.742 26.632,22.761 25.161,21.290 C 24.819,20.948 23.567,20.948 23.226,21.290 C 22.963,21.552 22.265,22.251 21.936,22.581 C 21.708,22.809 21.708,23.643 21.936,23.871 C 23.881,25.816 29.243,31.613 29.243,31.613 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 0,0.645 L 0,1.935 L 3.226,5.161 L 0,5.161 L 0,5.807 L 1.291,7.097 L 7.097,7.097 L 7.097,1.290 L 5.807,0 L 5.162,0 L 5.162,3.226 L 1.936,0 L 0.645,0 L 0,0.645 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 40,5.807 L 40,5.161 L 36.774,5.161 L 40,1.935 L 40,0.645 L 39.355,0 L 38.065,0 L 34.838,3.226 L 34.838,0 L 34.193,0 L 32.903,1.290 L 32.903,7.097 L 38.709,7.097 L 40,5.807 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 0,34.193 L 0,34.838 L 3.226,34.838 L 0,38.064 L 0,39.354 L 0.645,39.999 L 1.936,39.999 L 5.162,36.774 L 5.162,39.999 L 5.807,39.999 L 7.097,38.709 L 7.097,32.903 L 1.291,32.903 L 0,34.193 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 38.709,32.903 L 32.903,32.903 L 32.903,38.709 L 34.193,39.999 L 34.838,39.999 L 34.838,36.774 L 38.065,39.999 L 39.355,39.999 L 40,39.354 L 40,38.064 L 36.774,34.838 L 40,34.838 L 40,34.193 L 38.709,32.903 Z\"/>\n                <GeometryDrawing Brush=\"#ffecc677\" Geometry=\"M 29.689,13.563 C 29.689,15.219 28.345,16.563 26.689,16.563 C 25.032,16.563 23.689,15.219 23.689,13.563 C 23.689,11.906 25.032,10.563 26.689,10.563 C 28.345,10.563 29.689,11.906 29.689,13.563 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename Rotate.Left90-->\n    <DrawingBrush x:Key=\"Vector.RotateLeft90\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 0,27.200 L 14.479,27.200 L 14.479,1.813 L 0,27.200 Z\"/>\n                <GeometryDrawing Brush=\"#ffb6b6b7\" Geometry=\"M 16.313,12.695 L 16.313,27.200 L 40,27.200 L 16.313,12.695 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 36.043,26.165 L 17.305,26.165 L 17.305,14.600 L 36.043,26.165 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 19.091,4.987 L 23.149,9.973 L 27.273,9.973 L 24.545,6.347 C 24.545,6.347 28.019,6.347 29.090,6.347 C 29.733,6.347 30.909,7.518 30.909,8.160 C 30.909,8.650 30.909,9.973 30.909,9.973 L 33.636,9.973 C 33.636,9.973 33.636,7.196 33.636,6.347 C 33.636,5.385 31.873,3.627 30.909,3.627 C 29.400,3.627 24.545,3.627 24.545,3.627 L 27.273,0 L 23.149,0 L 19.091,4.987 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename Rotate.Right90-->\n    <DrawingBrush x:Key=\"Vector.RotateRight90\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 40,27.273 L 25.521,27.273 L 25.521,1.818 L 40,27.273 Z\"/>\n                <GeometryDrawing Brush=\"#ffb6b6b7\" Geometry=\"M 0,27.273 L 23.687,27.273 L 23.687,12.729 L 0,27.273 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 3.957,26.235 L 22.695,26.235 L 22.695,14.640 L 3.957,26.235 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 20.909,5 L 16.851,10 L 12.727,10 L 15.455,6.364 C 15.455,6.364 11.982,6.364 10.910,6.364 C 10.267,6.364 9.091,7.538 9.091,8.182 C 9.091,8.674 9.091,10 9.091,10 L 6.364,10 C 6.364,10 6.364,7.215 6.364,6.364 C 6.364,5.399 8.127,3.636 9.091,3.636 C 10.600,3.636 15.455,3.636 15.455,3.636 L 12.727,0 L 16.851,0 L 20.909,5 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Save\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 6.316,21.755 L 33.686,21.755 L 34.387,21.054 L 34.387,1.404 L 5.614,1.404 L 5.614,21.054 L 6.316,21.755 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 27.369,27.369 L 9.824,27.369 L 9.123,28.070 L 9.123,37.895 L 9.824,38.598 L 11.930,38.598 L 16.141,38.598 L 27.369,38.598 L 28.070,37.895 L 28.070,28.070 L 27.369,27.369 Z\"/>\n                <GeometryDrawing Brush=\"#ff9262a9\" Geometry=\"M 2.808,40 L 40,40 L 40,0 L 0,0 L 0,37.193 L 2.808,40 Z M 33.686,21.755 L 6.316,21.755 L 5.614,21.054 L 5.614,1.404 L 5.614,1.404 L 34.387,1.404 L 34.387,21.054 L 33.686,21.755 Z M 11.930,29.475 L 11.930,38.598 L 9.824,38.598 L 9.123,37.895 L 9.123,28.070 L 9.824,27.369 L 27.369,27.369 L 28.070,28.070 L 28.070,37.895 L 27.369,38.598 L 16.141,38.598 L 16.141,29.475 L 15.439,28.774 L 12.632,28.774 L 11.930,29.475 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n    \n    <!--Rename to Delay.Scale-->\n    <DrawingBrush x:Key=\"Vector.ScaleDelay\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 19.998,0.714 C 30.649,0.714 39.283,9.348 39.283,19.998 C 39.283,30.649 30.649,39.282 19.998,39.282 C 9.348,39.282 0.714,30.649 0.714,19.998 C 0.714,9.348 9.348,0.714 19.998,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4680b7\" Geometry=\"F1 M 19.998,1.428 C 9.759,1.428 1.428,9.759 1.428,19.998 C 1.428,30.237 9.759,38.568 19.998,38.568 C 30.238,38.568 38.568,30.237 38.568,19.998 C 38.568,9.759 30.238,1.428 19.998,1.428 Z M 19.998,39.996 C 8.971,39.996 0,31.025 0,19.998 C 0,8.971 8.971,0 19.998,0 C 31.025,0 39.997,8.971 39.997,19.998 C 39.997,31.025 31.025,39.996 19.998,39.996 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.284,20.712 L 30.714,20.712 L 30.714,19.284 L 20.713,19.284 L 20.713,4.997 L 19.284,4.997 L 19.284,20.712 Z\"/>\n                <GeometryDrawing Brush=\"#ffd65a32\" Geometry=\"F1 M 13.607,33.872 C 12.569,33.872 12.050,34.598 12.050,36.053 C 12.050,37.428 12.555,38.115 13.564,38.115 C 14.581,38.115 15.090,37.399 15.090,35.967 C 15.090,35.301 14.954,34.785 14.682,34.420 C 14.409,34.054 14.051,33.872 13.607,33.872 Z M 13.435,40.006 C 12.340,40.006 11.457,39.658 10.788,38.964 C 10.118,38.269 9.783,37.335 9.783,36.160 C 9.783,34.878 10.139,33.861 10.852,33.109 C 11.564,32.357 12.515,31.981 13.704,31.981 C 14.850,31.981 15.741,32.318 16.379,32.991 C 17.016,33.664 17.335,34.617 17.335,35.848 C 17.335,37.116 16.980,38.126 16.271,38.878 C 15.562,39.630 14.617,40.006 13.435,40.006 Z M 4.047,26.062 C 3.001,26.062 2.478,26.789 2.478,28.243 C 2.478,29.618 2.976,30.305 3.972,30.305 C 4.988,30.305 5.497,29.590 5.497,28.157 C 5.497,26.761 5.014,26.062 4.047,26.062 Z M 15.090,24.387 L 5.057,39.791 L 2.435,39.791 L 12.447,24.387 L 15.090,24.387 Z M 3.843,32.196 C 2.747,32.196 1.864,31.848 1.195,31.154 C 0.525,30.460 0.190,29.525 0.190,28.350 C 0.190,27.068 0.546,26.052 1.259,25.300 C 1.972,24.548 2.922,24.172 4.111,24.172 C 5.250,24.172 6.140,24.513 6.781,25.192 C 7.421,25.873 7.742,26.829 7.742,28.060 C 7.742,29.328 7.388,30.334 6.679,31.079 C 5.970,31.824 5.024,32.196 3.843,32.196 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Select\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 37.700,1.800 L 1.700,1.800 L 1.700,29.800 L 37.700,29.800 L 37.700,1.800 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 36.152,28.319 L 3.248,28.319 L 3.248,3.215 L 36.152,3.215 L 36.152,28.319 Z M 1.700,1.767 L 1.700,29.767 L 37.700,29.767 L 37.700,1.767 L 1.700,1.767 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 4.833,4.632 L 4.833,0.367 L 0.567,0.367 L 0.567,4.632 L 4.833,4.632 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 0.934,4.265 L 4.466,4.265 L 4.466,0.734 L 0.934,0.734 L 0.934,4.265 Z M 5.200,4.999 L 0.200,4.999 L 0.200,0 L 5.200,0 L 5.200,4.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 4.633,17.932 L 4.633,13.667 L 0.367,13.667 L 0.367,17.932 L 4.633,17.932 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 0.734,17.565 L 4.266,17.565 L 4.266,14.034 L 0.734,14.034 L 0.734,17.565 Z M 5,18.299 L 0,18.299 L 0,13.300 L 5,13.300 L 5,18.299 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 21.834,4.632 L 21.834,0.367 L 17.567,0.367 L 17.567,4.632 L 21.834,4.632 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 17.934,4.265 L 21.466,4.265 L 21.466,0.734 L 17.934,0.734 L 17.934,4.265 Z M 22.200,4.999 L 17.200,4.999 L 17.200,0 L 22.200,0 L 22.200,4.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.033,18.219 L 39.033,13.954 L 34.767,13.954 L 34.767,18.219 L 39.033,18.219 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 35.134,17.851 L 38.666,17.851 L 38.666,14.321 L 35.134,14.321 L 35.134,17.851 Z M 39.400,18.586 L 34.400,18.586 L 34.400,13.587 L 39.400,13.587 L 39.400,18.586 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.033,4.632 L 39.033,0.367 L 34.767,0.367 L 34.767,4.632 L 39.033,4.632 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 35.134,4.265 L 38.666,4.265 L 38.666,0.734 L 35.134,0.734 L 35.134,4.265 Z M 39.400,4.999 L 34.400,4.999 L 34.400,0 L 39.400,0 L 39.400,4.999 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 39.033,31.133 L 39.033,26.868 L 34.767,26.868 L 34.767,31.133 L 39.033,31.133 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 35.134,30.766 L 38.666,30.766 L 38.666,27.234 L 35.134,27.234 L 35.134,30.766 Z M 39.400,31.500 L 34.400,31.500 L 34.400,26.500 L 39.400,26.500 L 39.400,31.500 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 21.834,31.132 L 21.834,26.868 L 17.567,26.868 L 17.567,31.132 L 21.834,31.132 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 17.934,30.765 L 21.466,30.765 L 21.466,27.234 L 17.934,27.234 L 17.934,30.765 Z M 22.200,31.499 L 17.200,31.499 L 17.200,26.500 L 22.200,26.500 L 22.200,31.499 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 4.633,31.133 L 4.633,26.868 L 0.367,26.868 L 0.367,31.133 L 4.633,31.133 Z\"/>\n                <GeometryDrawing Brush=\"#ff7e7c7d\" Geometry=\"F1 M 0.734,30.766 L 4.266,30.766 L 4.266,27.234 L 0.734,27.234 L 0.734,30.766 Z M 5,31.500 L 0,31.500 L 0,26.500 L 5,26.500 L 5,31.500 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Shadow\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffa5a5a5\" Geometry=\"F1 M 38.036,40 L 5.036,40 C 3.931,40 3.036,39.105 3.036,38 L 3.036,5 C 3.036,3.895 3.931,3 5.036,3 L 38.036,3 C 39.141,3 40.036,3.895 40.036,5 L 40.036,38 C 40.036,39.105 39.141,40 38.036,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff717171\" Geometry=\"F1 M 35.143,37.143 L 2,37.143 C 0.895,37.143 0,36.247 0,35.143 L 0,2 C 0,0.895 0.895,0 2,0 L 35.143,0 C 36.247,0 37.143,0.895 37.143,2 L 37.143,35.143 C 37.143,36.247 36.247,37.143 35.143,37.143 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 33.714,35.714 L 3.429,35.714 C 2.324,35.714 1.429,34.819 1.429,33.714 L 1.429,3.429 C 1.429,2.324 2.324,1.429 3.429,1.429 L 33.714,1.429 C 34.819,1.429 35.714,2.324 35.714,3.429 L 35.714,33.714 C 35.714,34.819 34.819,35.714 33.714,35.714 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.SizeToContent\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 0,0 L 40,0 L 40,7.260 L 0,7.260 L 0,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 0,7.260 L 0.727,7.260 L 0.727,35.570 L 39.273,35.570 L 39.273,7.260 L 40,7.260 L 40,36.300 L 0,36.300 L 0,7.260 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.727,7.250 L 39.273,7.250 L 39.273,35.574 L 0.727,35.574 L 0.727,7.250 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 13.818,15.246 L 21.091,15.246 L 21.091,22.506 L 18.182,25.410 L 18.182,20.328 L 6.545,31.944 L 11.636,31.944 L 8.727,34.848 L 1.455,34.848 L 1.455,27.588 L 4.364,24.684 L 4.364,29.766 L 16,18.150 L 10.909,18.150 L 13.818,15.246 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n    \n    <DrawingBrush x:Key=\"Vector.Slide\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,25 L 0,25 L 0,0 L 40,0 L 40,25 Z\"/>\n                <GeometryDrawing Brush=\"#ffbed0e2\" Geometry=\"M 26.281,22.681 L 2.287,22.680 L 2.287,2.273 L 26.281,2.273 L 26.281,22.681 Z\"/>\n                <GeometryDrawing Brush=\"#ff9f9e9e\" Geometry=\"M 28.563,24.948 L 28.563,0 L 0.001,0 L 0.001,24.948 L 28.563,24.948 Z M 1.159,1.151 L 1.159,23.858 L 27.405,23.858 L 27.405,1.151 L 1.159,1.151 L 1.159,1.151 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 39.991,24.948 L 39.991,0 L 11.430,0 L 11.430,24.948 L 39.991,24.948 Z M 12.587,1.151 L 12.587,23.858 L 38.834,23.858 L 38.834,1.151 L 12.587,1.151 L 12.587,1.151 Z\"/>\n                <GeometryDrawing Brush=\"#7f82a7cb\" Geometry=\"M 37.711,22.681 L 13.717,22.680 L 13.717,2.273 L 37.711,2.273 L 37.711,22.681 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Steam\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 100.000,88.889 C 100.000,95.030 95.030,100.000 88.889,100.000 L 11.111,100.000 C 4.970,100.000 0.000,95.030 0.000,88.889 L 0.000,11.111 C 0.000,4.970 4.970,0.000 11.111,0.000 L 88.889,0.000 C 95.030,0.000 100.000,4.970 100.000,11.111 L 100.000,88.889 Z\"/>\n                <GeometryDrawing Brush=\"#ff445963\" Geometry=\"F1 M 34.614,76.790 C 33.811,76.790 33.051,76.638 32.324,76.400 L 32.313,76.454 L 22.114,73.503 C 23.904,78.722 28.798,82.498 34.614,82.498 C 41.949,82.498 47.884,76.563 47.884,69.227 C 47.884,61.892 41.949,55.957 34.614,55.957 C 31.445,55.957 28.570,57.118 26.291,58.984 L 36.111,61.816 C 36.187,61.838 36.263,61.871 36.350,61.882 L 36.480,61.936 C 39.746,62.771 42.177,65.712 42.177,69.227 C 42.177,73.405 38.791,76.790 34.614,76.790 Z\"/>\n                <GeometryDrawing Brush=\"#ff445963\" Geometry=\"F1 M 69.227,23.362 C 75.445,23.362 80.490,28.396 80.490,34.614 C 80.490,40.842 75.445,45.877 69.227,45.877 C 63.010,45.877 57.975,40.842 57.975,34.614 C 57.975,28.396 63.010,23.362 69.227,23.362 Z M 69.227,50.836 C 78.179,50.836 85.449,43.566 85.449,34.614 C 85.449,25.662 78.179,18.403 69.227,18.403 C 60.286,18.403 53.016,25.662 53.016,34.614 C 53.016,43.566 60.286,50.836 69.227,50.836 Z\"/>\n                <GeometryDrawing Brush=\"#ff445963\" Geometry=\"F1 M 88.889,0.000 L 11.111,0.000 C 4.970,0.000 0.000,4.970 0.000,11.111 L 0.000,51.378 L 19.520,57.020 C 23.090,52.604 28.494,49.729 34.614,49.729 C 34.809,49.729 34.993,49.783 35.178,49.783 L 45.942,34.907 C 45.942,34.809 45.931,34.711 45.931,34.625 C 45.931,21.756 56.359,11.317 69.227,11.317 C 82.096,11.317 92.524,21.756 92.524,34.614 C 92.524,47.483 82.096,57.910 69.227,57.910 C 69.108,57.910 68.989,57.899 68.859,57.888 L 54.058,68.641 C 54.069,68.837 54.112,69.032 54.112,69.227 C 54.112,80.002 45.388,88.737 34.614,88.737 C 24.631,88.737 16.504,81.217 15.343,71.549 L 0.000,67.101 L 0.000,88.889 C 0.000,95.030 4.970,100.000 11.111,100.000 L 88.889,100.000 C 95.030,100.000 100.000,95.030 100.000,88.889 L 100.000,11.111 C 100.000,4.970 95.030,0.000 88.889,0.000 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Stop\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 0,40 L 40,40 L 40,0 L 0,0 L 0,40 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n        \n    <DrawingBrush x:Key=\"Vector.StrokeEraser\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 12.121,32.786 L 12.121,34 L 40,34 L 40,32.786 L 12.121,32.786 Z\"/>\n                <GeometryDrawing Brush=\"#ffe57e92\" Geometry=\"M 4.912,17.425 C 4.661,17.176 4.654,16.252 4.906,16.002 C 8.510,12.387 16.635,4.252 20.499,0.381 C 21.004,-0.127 22.854,-0.127 23.359,0.381 C 25.357,2.378 29.911,6.947 31.940,8.976 C 32.445,9.481 32.445,11.337 31.940,11.843 C 28.106,15.681 19.988,23.823 16.347,27.466 C 16.098,27.719 15.176,27.713 14.926,27.463 C 12.408,24.936 7.270,19.789 4.912,17.425 Z M 4.546,17.860 C 4.362,17.680 4.062,16.846 4.062,16.846 C 4.062,16.846 1.127,19.789 0.474,20.444 C -0.158,21.076 -0.158,23.390 0.474,24.023 C 2.304,25.857 6.477,30.040 8.340,31.905 C 8.971,32.541 11.283,32.541 11.918,31.905 C 12.569,31.254 15.505,28.313 15.505,28.313 C 15.505,28.313 14.753,28.035 14.570,27.852 C 12.115,25.392 7.106,20.429 4.546,17.860 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>     \n    \n    <DrawingBrush x:Key=\"Vector.Subtract\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ffd55a33\" Geometry=\"M 0,0 L 0,8.888 L 40,8.888 L 40,0 L 0,0 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Synchronize\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff3977ae\" Geometry=\"F1 M 34.543,18.333 C 34.543,23.673 31.293,28.840 26.667,30.793 L 26.673,30 L 26.667,30 L 26.667,20 L 20,26.667 L 20,40 L 33.333,40 L 40,33.333 L 32.173,33.333 C 36.897,30.013 40,24.530 40,18.333 C 40,8.790 32.663,0.847 23.333,0 L 23.333,5.563 C 29.660,6.383 34.543,11.783 34.543,18.333 Z\"/>\n                <GeometryDrawing Brush=\"#ff3977ae\" Geometry=\"F1 M 5.457,21.667 C 5.457,16.327 8.707,11.160 13.333,9.207 L 13.327,10 L 13.333,10 L 13.333,20 L 20,13.333 L 20,0 L 6.667,0 L 0,6.667 L 7.827,6.667 C 3.103,9.987 0,15.467 0,21.667 C 0,31.210 7.337,39.153 16.667,40 L 16.667,34.437 C 10.340,33.617 5.457,28.217 5.457,21.667 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n    \n    <DrawingBrush x:Key=\"Vector.Table\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,36 L 0,36 L 0,0 L 40,0 L 40,36 Z\"/>\n                <GeometryDrawing Brush=\"#ff6b6c6c\" Geometry=\"M 0,36 L 40,36 L 40,0 L 0,0 L 0,36 Z M 0.975,6.811 L 39.024,6.811 L 39.024,35.027 L 0.975,35.027 L 0.975,6.811 L 0.975,6.811 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 0.975,11.676 L 0.975,12.649 L 9.756,12.649 L 9.756,17.514 L 0.975,17.514 L 0.975,18.486 L 9.756,18.486 L 9.756,23.351 L 0.975,23.351 L 0.975,24.324 L 9.756,24.324 L 9.756,29.189 L 0.975,29.189 L 0.975,30.162 L 9.756,30.162 L 9.756,35.027 L 10.731,35.027 L 10.731,30.162 L 19.512,30.162 L 19.512,35.027 L 20.488,35.027 L 20.488,30.162 L 29.269,30.162 L 29.269,35.027 L 30.244,35.027 L 30.244,30.162 L 39.024,30.162 L 39.024,29.189 L 30.244,29.189 L 30.244,24.324 L 39.024,24.324 L 39.024,23.351 L 30.244,23.351 L 30.244,18.486 L 39.024,18.486 L 39.024,17.514 L 30.244,17.514 L 30.244,12.649 L 39.024,12.649 L 39.024,11.676 L 30.244,11.676 L 30.244,6.811 L 29.269,6.811 L 29.269,11.676 L 20.488,11.676 L 20.488,6.811 L 19.512,6.811 L 19.512,11.676 L 10.731,11.676 L 10.731,6.811 L 9.756,6.811 L 9.756,11.676 L 0.975,11.676 Z M 10.731,12.649 L 19.512,12.649 L 19.512,17.514 L 10.731,17.514 L 10.731,12.649 L 10.731,12.649 Z M 20.488,12.649 L 29.269,12.649 L 29.269,17.514 L 20.488,17.514 L 20.488,12.649 L 20.488,12.649 Z M 10.731,18.486 L 19.512,18.486 L 19.512,23.351 L 10.731,23.351 L 10.731,18.486 L 10.731,18.486 Z M 20.488,18.486 L 29.269,18.486 L 29.269,23.351 L 20.488,23.351 L 20.488,18.486 L 20.488,18.486 Z M 10.731,24.324 L 19.512,24.324 L 19.512,29.189 L 10.731,29.189 L 10.731,24.324 L 10.731,24.324 Z M 20.488,24.324 L 29.269,24.324 L 29.269,29.189 L 20.488,29.189 L 20.488,24.324 L 20.488,24.324 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n    \n    <DrawingBrush x:Key=\"Vector.Tag\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 6.160,24.811 L 38.800,24.811 L 39.310,24.164 L 39.310,1.654 L 38.064,0.690 L 5.976,0.690 L 0.690,6.156 L 0.690,19.387 L 6.160,24.811 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 13.103,8.270 L 33.793,8.270 L 33.793,7.581 L 13.103,7.581 L 13.103,8.270 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 13.103,13.095 L 33.793,13.095 L 33.793,12.405 L 13.103,12.405 L 13.103,13.095 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 13.103,17.919 L 33.793,17.919 L 33.793,17.230 L 13.103,17.230 L 13.103,17.919 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 37.931,0.000 C 30.735,0.000 14.545,0.000 7.586,0.000 C 4.904,0.000 0.000,4.901 0.000,7.581 C 0.000,10.168 0.000,15.719 0.000,17.919 C 0.000,20.599 4.904,25.500 7.586,25.500 C 14.909,25.500 30.893,25.500 37.931,25.500 C 38.663,25.500 40.000,24.163 40.000,23.432 C 40.000,18.322 40.000,7.024 40.000,2.068 C 40.000,1.337 38.663,0.000 37.931,0.000 Z M 39.310,2.757 C 39.310,7.512 39.310,18.150 39.310,22.743 C 39.310,23.474 37.973,24.811 37.241,24.811 C 30.304,24.811 15.062,24.811 8.276,24.811 C 5.594,24.811 0.690,19.910 0.690,17.230 C 0.690,15.145 0.690,10.570 0.690,8.270 C 0.690,5.590 5.594,0.690 8.276,0.690 C 14.746,0.690 30.548,0.690 37.241,0.690 C 37.973,0.690 39.310,2.026 39.310,2.757 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 6.551,14.701 C 5.472,14.701 4.597,13.826 4.597,12.748 C 4.597,11.670 5.472,10.796 6.551,10.796 C 7.630,10.796 8.505,11.670 8.505,12.748 C 8.505,13.826 7.630,14.701 6.551,14.701 Z M 6.551,10.336 C 5.218,10.336 4.137,11.416 4.137,12.748 C 4.137,14.080 5.218,15.160 6.551,15.160 C 7.884,15.160 8.964,14.080 8.964,12.748 C 8.964,11.416 7.884,10.336 6.551,10.336 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>    \n\n    <DrawingBrush x:Key=\"Vector.Temporary\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 15.172,40 L 15.862,40 L 15.862,28.965 L 15.172,28.965 L 15.172,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 13.103,40 L 13.793,40 L 13.793,28.965 L 13.103,28.965 L 13.103,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 17.241,39.310 L 17.931,39.310 L 17.931,28.965 L 17.241,28.965 L 17.241,39.310 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 19.310,38.621 L 20,38.621 L 20,28.965 L 19.310,28.965 L 19.310,38.621 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 11.034,36.552 L 11.724,36.552 L 11.724,28.965 L 11.034,28.965 L 11.034,36.552 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 21.379,36.552 L 22.069,36.552 L 22.069,28.965 L 21.379,28.965 L 21.379,36.552 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 8.965,35.862 L 9.655,35.862 L 9.655,28.965 L 8.965,28.965 L 8.965,35.862 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 23.448,35.862 L 24.138,35.862 L 24.138,28.965 L 23.448,28.965 L 23.448,35.862 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 25.517,35.172 L 26.207,35.172 L 26.207,28.965 L 25.517,28.965 L 25.517,35.172 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 27.586,35.172 L 28.276,35.172 L 28.276,28.965 L 27.586,28.965 L 27.586,35.172 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 29.655,34.482 L 30.345,34.482 L 30.345,28.965 L 29.655,28.965 L 29.655,34.482 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 31.724,33.793 L 32.413,33.793 L 32.413,28.965 L 31.724,28.965 L 31.724,33.793 Z\"/>\n                <GeometryDrawing Brush=\"#ff999a99\" Geometry=\"M 33.793,33.104 L 34.482,33.104 L 34.482,28.965 L 33.793,28.965 L 33.793,33.104 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 19.308,9.654 C 19.308,14.985 14.986,19.308 9.654,19.308 C 4.322,19.308 0,14.985 0,9.654 C 0,4.323 4.322,0 9.654,0 C 14.986,0 19.308,4.323 19.308,9.654 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 14.483,18.621 L 14.483,19.311 L 34.482,19.311 L 34.482,11.034 L 26.207,3.448 L 17.471,3.448 C 17.471,3.448 20.472,5.778 19.770,11.042 C 19.023,16.650 14.483,18.621 14.483,18.621 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 38.620,26.896 C 38.620,25.548 38.620,22.762 38.620,21.379 C 38.620,20.891 37.729,20.001 37.241,20 C 29.163,19.974 14.884,19.965 5.517,20 C 5.030,20.002 4.138,20.891 4.138,21.379 C 4.138,22.838 4.138,25.520 4.138,26.896 C 4.138,27.384 5.030,28.278 5.517,28.276 C 12.968,28.240 28.828,28.278 37.241,28.276 C 37.729,28.276 38.620,27.384 38.620,26.896 Z M 32.413,22.759 L 35.862,22.759 L 35.862,25.517 L 32.413,25.517 L 32.413,22.759 L 32.413,22.759 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 26.203,2.759 L 17.241,2.759 L 17.241,3.448 L 25.517,3.448 L 25.517,11.724 L 34.482,11.724 L 34.482,19.311 L 35.172,19.311 L 35.172,11.034 L 26.203,2.759 Z M 34.482,11.034 L 26.207,11.034 L 26.203,3.448 L 34.482,11.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 8.965,11.034 L 13.793,11.034 L 13.793,10.345 L 9.655,10.345 L 9.655,4.138 L 8.965,4.138 L 8.965,11.034 Z\"/>\n                <GeometryDrawing Brush=\"#ff4b83b9\" Geometry=\"M 9.596,18.392 C 4.772,18.392 0.862,14.482 0.862,9.657 C 0.862,4.833 4.772,0.923 9.596,0.923 C 14.421,0.923 18.331,4.833 18.331,9.657 C 18.331,14.482 14.421,18.392 9.596,18.392 Z M 9.654,0 C 4.322,0 0,4.322 0,9.653 C 0,14.985 4.322,19.308 9.654,19.308 C 14.985,19.308 19.308,14.985 19.308,9.653 C 19.308,4.322 14.985,0 9.654,0 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Text\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.727,0.727 L 0.727,39.273 L 30.545,39.273 L 30.545,0.727 L 0.727,0.727 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"M 5.818,0.727 L 5.818,0 L 10.182,0 L 10.182,0.727 L 5.818,0.727 Z M 0.727,0.727 L 0.727,39.273 L 30.545,39.273 L 30.545,0.727 L 26.182,0.727 L 26.182,0 L 31.272,0 L 31.272,40 L 0,40 L 0,0 L 5.091,0 L 5.091,0.727 M 21.091,0.727 L 21.091,0 L 25.454,0 L 25.454,0.727 L 21.091,0.727 Z M 16,0.727 L 16,0 L 20.364,0 L 20.364,0.727 L 16,0.727 Z M 10.909,0.727 L 10.909,0 L 15.273,0 L 15.273,0.727 L 10.909,0.727 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,14.546 L 27.636,14.546 L 27.636,13.818 L 3.636,13.818 L 3.636,14.546 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,26.182 L 27.636,26.182 L 27.636,25.455 L 3.636,25.455 L 3.636,26.182 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,8.727 L 27.636,8.727 L 27.636,8 L 3.636,8 L 3.636,8.727 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,11.637 L 27.636,11.637 L 27.636,10.909 L 3.636,10.909 L 3.636,11.637 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,17.454 L 27.636,17.454 L 27.636,16.727 L 3.636,16.727 L 3.636,17.454 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,20.364 L 27.636,20.364 L 27.636,19.636 L 3.636,19.636 L 3.636,20.364 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,23.272 L 27.636,23.272 L 27.636,22.545 L 3.636,22.545 L 3.636,23.272 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,29.091 L 27.636,29.091 L 27.636,28.363 L 3.636,28.363 L 3.636,29.091 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,32 L 27.636,32 L 27.636,31.273 L 3.636,31.273 L 3.636,32 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"M 3.636,34.909 L 27.636,34.909 L 27.636,34.182 L 3.636,34.182 L 3.636,34.909 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"F1 M 5.456,1.067 C 4.658,1.067 4.009,1.716 4.009,2.514 C 4.009,3.312 4.658,3.960 5.456,3.960 C 6.253,3.960 6.902,3.312 6.902,2.514 C 6.902,1.716 6.253,1.067 5.456,1.067 Z M 5.456,4.460 C 4.383,4.460 3.509,3.587 3.509,2.514 C 3.509,1.440 4.383,0.567 5.456,0.567 C 6.529,0.567 7.402,1.440 7.402,2.514 C 7.402,3.587 6.529,4.460 5.456,4.460 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"F1 M 10.566,1.067 C 9.768,1.067 9.119,1.716 9.119,2.514 C 9.119,3.312 9.768,3.960 10.566,3.960 C 11.364,3.960 12.013,3.312 12.013,2.514 C 12.013,1.716 11.364,1.067 10.566,1.067 Z M 10.566,4.460 C 9.493,4.460 8.619,3.587 8.619,2.514 C 8.619,1.440 9.493,0.567 10.566,0.567 C 11.639,0.567 12.513,1.440 12.513,2.514 C 12.513,3.587 11.639,4.460 10.566,4.460 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"F1 M 15.637,1.067 C 14.839,1.067 14.190,1.716 14.190,2.514 C 14.190,3.312 14.839,3.960 15.637,3.960 C 16.434,3.960 17.082,3.312 17.082,2.514 C 17.082,1.716 16.434,1.067 15.637,1.067 Z M 15.637,4.460 C 14.563,4.460 13.690,3.587 13.690,2.514 C 13.690,1.440 14.563,0.567 15.637,0.567 C 16.709,0.567 17.582,1.440 17.582,2.514 C 17.582,3.587 16.709,4.460 15.637,4.460 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"F1 M 20.724,1.067 C 19.926,1.067 19.278,1.716 19.278,2.514 C 19.278,3.312 19.926,3.960 20.724,3.960 C 21.522,3.960 22.171,3.312 22.171,2.514 C 22.171,1.716 21.522,1.067 20.724,1.067 Z M 20.724,4.460 C 19.651,4.460 18.778,3.587 18.778,2.514 C 18.778,1.440 19.651,0.567 20.724,0.567 C 21.797,0.567 22.671,1.440 22.671,2.514 C 22.671,3.587 21.797,4.460 20.724,4.460 Z\"/>\n                <GeometryDrawing Brush=\"#ff7b7a7a\" Geometry=\"F1 M 25.831,1.067 C 25.034,1.067 24.385,1.716 24.385,2.514 C 24.385,3.312 25.034,3.960 25.831,3.960 C 26.629,3.960 27.279,3.312 27.279,2.514 C 27.279,1.716 26.629,1.067 25.831,1.067 Z M 25.831,4.460 C 24.758,4.460 23.885,3.587 23.885,2.514 C 23.885,1.440 24.758,0.567 25.831,0.567 C 26.905,0.567 27.779,1.440 27.779,2.514 C 27.779,3.587 26.905,4.460 25.831,4.460 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.TitleFrame\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 0.714,29.767 L 39.286,29.767 L 39.286,0.709 L 0.714,0.709 L 0.714,29.767 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,30.476 L 40,30.476 L 40,0 L 0,0 L 0,30.476 Z M 0.714,0.709 L 39.286,0.709 L 39.286,29.767 L 0.714,29.767 L 0.714,0.709 L 0.714,0.709 Z\"/>\n                <GeometryDrawing Brush=\"#ff565656\" Geometry=\"M 21.388,23.927 C 27,23.452 22.219,22.275 25.252,23.323 C 34.834,26.633 34.113,16.447 33.069,14.035 C 31.005,9.267 27.444,10.798 24.100,12.810 L 24.100,5.011 L 21.388,5.011 L 21.388,23.927 Z M 30.698,14.438 C 31.740,17 31.160,18.968 29.778,20.802 C 28.537,22.450 26.032,22.464 24.810,20.837 C 22.568,17.850 24.615,11.459 30.185,13.825 C 30.369,13.904 30.623,14.253 30.698,14.438 Z\"/>\n                <GeometryDrawing Brush=\"#ff565656\" Geometry=\"M 9.005,14.227 C 14.088,12.332 15.615,14.063 15.455,14.926 C 15.248,16.040 14.873,15.663 12.660,16.164 C 3.030,18.346 9.178,27.856 14.950,22.501 C 16.473,24.312 15.093,23.651 18.235,23.927 C 18.235,19.703 19.174,15.560 17.349,11.762 C 17.073,11.188 8.839,9.445 9.005,14.227 Z M 15.729,17.839 C 16.117,19.135 15.224,20.681 14.535,21.276 C 12.481,23.050 8.792,21.948 10.598,18.624 C 11.193,17.530 14.265,17.524 15.495,17.714 C 15.560,17.724 15.729,17.839 15.729,17.839 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Translate\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff616161\" Geometry=\"M 18.244,18.046 L 12.317,18.154 L 12.317,20.658 L 18.577,20.658 L 18.527,24.255 C 15.078,26.873 10.853,28.445 11.065,33.804 L 11.130,36.151 C 12.745,39.785 18.421,37.170 19.750,37.109 C 21.565,37.026 19.606,37.983 22.547,36.523 C 23.442,32.996 21.134,36.814 24.960,32.050 C 26.189,30.521 26.946,28.572 28.128,27.079 C 29.852,27.247 29.768,27.352 31.312,28.581 C 33.867,36.201 28.044,35.757 23.012,37.721 L 24.262,39.965 C 32.187,40.600 39.439,32.372 33.164,26.102 C 31.676,24.616 32.234,25.949 28.020,22.483 C 23.709,23.008 28.266,23.788 21.081,23.788 L 21.081,20.658 L 32.327,19.868 L 32.349,16.902 C 29.115,16.905 24.007,18.251 21.134,17.993 L 22.160,14.241 L 19.041,13.763 L 18.244,18.046 Z M 21.707,30.674 L 21.142,27.034 L 24.806,26.168 C 23.840,28.456 23.704,29.362 21.707,30.674 L 21.707,30.674 Z M 14.606,34.645 C 14.046,34.263 13.775,32.516 14.077,31.881 C 14.880,30.195 16.665,28.634 18.469,28.277 C 18.612,30.121 18.852,32.150 19.041,33.643 C 17.702,34.702 16.398,35.209 14.606,34.645 L 14.606,34.645 Z\"/>\n                <GeometryDrawing Brush=\"#ff616161\" Geometry=\"M 1.210,10.177 L 1.021,12.519 C 3.835,11.844 8.350,8.977 9.079,14.291 C 3.635,16.265 -0.778,15.302 0.115,22.129 C 0.413,24.406 5.734,25.666 8.775,22.643 C 9.764,24.547 8.901,24.358 11.691,24.414 C 11.691,21.210 12.389,13.704 11.118,11.215 C 9.305,7.662 3.644,8.361 1.210,10.177 Z M 4.751,22.590 C 2.419,22.466 1.715,20.875 2.300,19.406 C 3.157,17.258 6.559,16.958 9.186,16.902 C 9.110,20.545 8.200,21.650 4.751,22.590 L 4.751,22.590 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 18.389,5.634 C 18.643,6.208 18.617,8.135 18.617,8.135 L 15.043,4.997 L 14.841,9.228 L 19.646,13.364 L 24.777,9.350 L 24.789,5.061 L 21.183,8.246 C 21.093,3.043 20.083,0.404 15.552,0 L 12.893,0 C 8.672,0.420 5.783,3.473 4.805,7.512 C 9.385,7.517 6.857,7.460 9.503,4.699 C 11.128,3.004 13.234,2.017 15.447,2.691 C 15.667,2.759 16.752,3.240 17.123,3.601 C 17.556,4.022 17.624,3.897 18.389,5.634 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Undo\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 0,11.198 L 11.337,22.594 L 21.062,22.594 L 13.726,14.571 C 19.937,14.357 27.788,13.312 31.434,18.205 C 35.334,23.859 33.882,31.304 24.075,33.600 L 24.075,40 C 33.903,40 39.435,32.260 39.851,26.566 C 40.351,21.940 39.997,15.049 32.188,10.266 C 29.215,8.686 25.853,7.933 24.091,7.984 C 20.663,7.984 17.182,7.984 13.726,7.984 L 21.062,0 L 11.337,0 L 0,11.198 Z\"/>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <!--Rename to Selection.Unselect-->\n    <DrawingBrush x:Key=\"Vector.Unselect\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 24.839,4.236 L 24.839,0 L 0,0 L 0,24.416 L 9.692,24.416 L 9.692,4.235 L 24.839,4.236 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7d7d\" Geometry=\"F1 M 26.282,18.991 L 26.350,35.212 L 29.796,32.225 L 31.199,32.523 L 34.275,38.948 L 36.594,37.656 L 33.604,32.128 L 33.557,30.678 L 37.879,30.430 L 26.282,18.991 Z M 30.801,33.316 L 30,33.316 L 25.607,37.243 L 25.607,17.193 L 40,31.346 L 34.401,31.346 L 34.401,32.128 L 37.671,38.223 L 33.999,40 L 30.801,33.316 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 26.350,35.212 L 26.282,18.991 L 37.879,30.430 L 33.557,30.678 L 33.604,32.128 L 36.594,37.656 L 34.275,38.948 L 31.199,32.523 L 29.796,32.225 L 26.350,35.212 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 24.769,28.690 L 24.924,15.731 L 34.590,24.503 L 34.590,6.397 L 11.913,6.397 L 11.913,28.690 L 24.769,28.690 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 9.720,23.355 L 1.080,23.355 L 1.080,1.062 L 23.757,1.062 L 23.757,4.247 L 24.837,4.247 L 24.837,0 L 0,0 L 0,24.417 L 9.720,24.417 L 9.720,23.355 Z\"/>\n                <GeometryDrawing Brush=\"#ff407eb7\" Geometry=\"M 24.769,28.684 L 11.902,28.684 L 11.902,6.392 L 34.579,6.392 L 34.579,24.503 L 35.660,25.411 L 35.660,5.330 L 10.823,5.330 L 10.823,29.748 L 24.769,29.748 L 24.769,28.684 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Video\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0,37.940 L 40,37.940 L 40,0 L 0,0 L 0,37.940 Z\"/>\n                <GeometryDrawing Brush=\"#ff717171\" Geometry=\"F1 M 0,38 L 40,38 L 40,0 L 0,0 L 0,38 Z M 0.836,0.862 L 5.080,0.862 L 5.080,5.073 L 0.836,5.073 L 0.836,0.862 Z M 7.652,0.862 L 11.897,0.862 L 11.897,5.073 L 7.652,5.073 L 7.652,0.862 Z M 14.470,0.862 L 18.714,0.862 L 18.714,5.073 L 14.470,5.073 L 14.470,0.862 Z M 21.286,0.862 L 25.530,0.862 L 25.530,5.073 L 21.286,5.073 L 21.286,0.862 Z M 28.103,0.862 L 32.348,0.862 L 32.348,5.073 L 28.103,5.073 L 28.103,0.862 Z M 34.920,0.862 L 39.164,0.862 L 39.164,5.073 L 34.920,5.073 L 34.920,0.862 Z M 0.900,5.934 L 39.196,5.934 L 39.196,32.098 L 0.900,32.098 L 0.900,5.934 Z M 0.900,32.959 L 5.144,32.959 L 5.144,37.171 L 0.900,37.171 L 0.900,32.959 Z M 7.717,32.959 L 11.962,32.959 L 11.962,37.171 L 7.717,37.171 L 7.717,32.959 Z M 14.534,32.959 L 18.778,32.959 L 18.778,37.171 L 14.534,37.171 L 14.534,32.959 Z M 21.351,32.959 L 25.595,32.959 L 25.595,37.171 L 21.351,37.171 L 21.351,32.959 Z M 28.168,32.959 L 32.412,32.959 L 32.412,37.171 L 28.168,37.171 L 28.168,32.959 Z M 34.984,32.959 L 39.229,32.959 L 39.229,37.171 L 34.984,37.171 L 34.984,32.959 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.View\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,7.273 L 0.000,7.273 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 0.000,7.273 L 0.727,7.273 L 0.727,35.636 L 39.273,35.636 L 39.273,7.273 L 40.000,7.273 L 40.000,36.364 L 0.000,36.364 L 0.000,7.273 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.727,7.273 L 39.273,7.273 L 39.273,35.636 L 0.727,35.636 L 0.727,7.273 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 3.636,10.182 L 16.000,10.182 L 16.000,10.909 L 3.636,10.909 L 3.636,10.182 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 35.636,18.909 L 19.636,18.909 L 19.636,10.909 L 35.636,10.909 L 35.636,18.909 Z M 18.909,10.182 L 18.909,19.636 L 36.364,19.636 L 36.364,10.182 L 18.909,10.182 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 3.636,22.545 L 16.000,22.545 L 16.000,23.273 L 3.636,23.273 L 3.636,22.545 Z\"/>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 35.636,31.273 L 19.636,31.273 L 19.636,23.273 L 35.636,23.273 L 35.636,31.273 Z M 18.909,22.545 L 18.909,32.000 L 36.364,32.000 L 36.364,22.545 L 18.909,22.545 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Views\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.741,4.444 L 25.926,4.444 L 25.926,22.222 L 0.741,22.222 L 0.741,4.444 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 0.000,0.000 L 26.667,0.000 L 26.667,4.444 L 0.000,4.444 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 0.000,4.444 L 0.741,4.444 L 0.741,22.222 L 8.148,22.222 L 8.148,4.444 L 8.889,4.444 L 8.889,22.222 L 13.333,22.222 L 13.333,21.481 L 14.074,21.481 L 14.074,39.259 L 39.259,39.259 L 39.259,21.481 L 40.000,21.481 L 40.000,40.000 L 13.333,40.000 L 13.333,22.963 L 0.000,22.963 L 0.000,4.444 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 8.889,4.444 L 25.926,4.444 L 25.926,6.667 L 8.889,6.667 L 8.889,4.444 Z\"/>\n                <GeometryDrawing Brush=\"#ff7f7f7f\" Geometry=\"F1 M 25.926,4.444 L 26.667,4.444 L 26.667,17.037 L 25.926,17.037 L 25.926,4.444 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 0.741,8.889 L 8.148,8.889 L 8.148,9.630 L 0.741,9.630 L 0.741,8.889 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 8.889,9.630 L 25.926,9.630 L 25.926,11.852 L 8.889,11.852 L 8.889,9.630 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 0.741,14.074 L 8.148,14.074 L 8.148,14.815 L 0.741,14.815 L 0.741,14.074 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 8.889,14.815 L 25.926,14.815 L 25.926,17.037 L 8.889,17.037 L 8.889,14.815 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 13.333,17.037 L 40.000,17.037 L 40.000,21.481 L 13.333,21.481 L 13.333,17.037 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 0.741,19.259 L 8.148,19.259 L 8.148,20.000 L 0.741,20.000 L 0.741,19.259 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 14.074,21.481 L 39.259,21.481 L 39.259,39.259 L 14.074,39.259 L 14.074,21.481 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 37.037,28.148 L 16.296,28.148 L 16.296,23.704 L 37.037,23.704 L 37.037,28.148 Z M 15.556,22.963 L 15.556,28.889 L 37.778,28.889 L 37.778,22.963 L 15.556,22.963 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 21.482,37.037 L 16.296,37.037 L 16.296,31.111 L 21.482,31.111 L 21.482,37.037 Z M 15.556,30.370 L 15.556,37.778 L 22.222,37.778 L 22.222,30.370 L 15.556,30.370 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 29.630,37.037 L 23.704,37.037 L 23.704,31.111 L 29.630,31.111 L 29.630,37.037 Z M 22.963,30.370 L 22.963,37.778 L 30.370,37.778 L 30.370,30.370 L 22.963,30.370 Z\"/>\n                <GeometryDrawing Brush=\"#ffc0d2e5\" Geometry=\"F1 M 37.037,37.037 L 31.852,37.037 L 31.852,31.111 L 37.037,31.111 L 37.037,37.037 Z M 31.111,30.370 L 31.111,37.778 L 37.778,37.778 L 37.778,30.370 L 31.111,30.370 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n    \n    <DrawingBrush x:Key=\"Vector.Watermark\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 20.321,0.952 L 0.967,0.952 L 0.967,39.048 L 29.032,39.048 L 29.032,9.523 L 20.321,0.952 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 20.321,0 L 0,0 L 0,40 L 30,40 L 30,9.523 L 20.321,0 Z M 20.321,0.952 L 20.321,9.523 L 29.033,9.523 L 20.321,0.952 Z M 0.967,0.952 L 19.355,0.952 L 19.355,10.476 L 29.032,10.476 L 29.032,39.048 L 0.967,39.048 L 0.967,0.952 L 0.967,0.952 Z\"/>\n                <GeometryDrawing Brush=\"#ffefc0b3\" Geometry=\"F1 M 16.465,20.940 L 11.840,16.662 C 10.791,15.693 9.936,14.759 9.093,13.852 L 9.039,13.880 C 9.347,15.100 9.644,16.362 9.884,17.652 L 10.914,23.845 L 16.465,20.940 Z M 11.412,25.931 L 12.580,32.639 L 10.119,33.927 L 6.580,12.509 L 9.451,11.007 L 25.539,25.858 L 22.997,27.187 L 17.947,22.512 L 11.412,25.931 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"1.0\" Brush=\"#ffefc0b3\" MiterLimit=\"1.0\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Warning\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffecc477\" Geometry=\"M 20,0 L 0,35.700 L 40,35.700 L 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff434343\" Geometry=\"M 22.140,30.697 C 22.140,31.880 21.181,32.839 19.997,32.839 C 18.814,32.839 17.855,31.880 17.855,30.697 C 17.855,29.514 18.814,28.556 19.997,28.556 C 21.181,28.556 22.140,29.514 22.140,30.697 Z\"/>\n                <GeometryDrawing Brush=\"#ff434343\" Geometry=\"M 18.572,26.417 L 21.429,26.417 L 22.143,9.282 L 17.857,9.282 L 18.572,26.417 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Web\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 20,0 C 31.046,0 40,8.954 40,20 C 40,31.046 31.046,40 20,40 C 8.954,40 0,31.046 0,20 C 0,8.954 8.954,0 20,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c80b7\" Geometry=\"F1 M 23.286,38.579 C 25.209,36.837 26.773,33.600 27.726,29.462 C 30.430,29.973 32.878,30.738 34.794,31.700 C 31.985,35.245 27.921,37.761 23.286,38.579 Z M 5.221,31.715 C 7.129,30.753 9.585,29.980 12.274,29.469 C 13.228,33.608 14.791,36.845 16.714,38.579 C 12.087,37.761 8.030,35.260 5.221,31.715 Z M 16.714,1.420 C 14.881,3.080 13.371,6.100 12.409,9.968 C 9.886,9.465 7.587,8.714 5.664,7.745 C 8.451,4.492 12.319,2.193 16.714,1.420 Z M 34.336,7.745 C 32.414,8.714 30.107,9.465 27.591,9.968 C 26.630,6.100 25.119,3.080 23.286,1.420 C 27.673,2.193 31.549,4.492 34.336,7.745 Z M 28.725,19.155 C 28.672,16.241 28.364,13.506 27.846,11.065 C 30.550,10.524 33.021,9.698 35.065,8.639 C 37.296,11.598 38.678,15.219 38.851,19.155 L 28.725,19.155 Z M 28.732,20.282 L 38.866,20.282 C 38.805,24.180 37.566,27.793 35.478,30.776 C 33.457,29.739 30.835,28.906 27.959,28.356 C 28.439,25.908 28.718,23.181 28.732,20.282 Z M 11.268,20.282 C 11.290,23.181 11.561,25.908 12.041,28.364 C 9.172,28.920 6.550,29.754 4.537,30.798 C 2.441,27.808 1.194,24.189 1.134,20.282 L 11.268,20.282 Z M 11.275,19.155 L 1.149,19.155 C 1.322,15.219 2.705,11.598 4.936,8.639 C 6.979,9.705 9.450,10.524 12.161,11.065 C 11.636,13.506 11.328,16.241 11.275,19.155 Z M 20.004,11.831 C 22.294,11.831 24.563,11.636 26.712,11.275 C 27.230,13.664 27.545,16.338 27.598,19.155 L 12.402,19.155 C 12.454,16.338 12.770,13.664 13.288,11.275 C 15.436,11.636 17.705,11.831 20.004,11.831 Z M 20.004,1.127 C 22.686,1.127 25.097,4.793 26.457,10.178 C 24.390,10.517 22.213,10.705 20.004,10.705 C 17.788,10.705 15.609,10.517 13.544,10.178 C 14.903,4.793 17.315,1.127 20.004,1.127 Z M 20.004,27.605 C 17.705,27.605 15.377,27.801 13.168,28.162 C 12.695,25.758 12.409,23.084 12.394,20.282 L 27.605,20.282 C 27.591,23.084 27.312,25.758 26.833,28.162 C 24.623,27.801 22.302,27.605 20.004,27.605 Z M 20.004,38.873 C 17.225,38.873 14.738,34.951 13.409,29.266 C 15.534,28.920 17.780,28.732 20.004,28.732 C 22.220,28.732 24.466,28.920 26.592,29.259 C 25.262,34.944 22.776,38.873 20.004,38.873 Z M 20.004,0 C 8.969,0 0,8.969 0,19.996 C 0,31.031 8.969,40 20.004,40 C 31.031,40 40,31.031 40,19.996 C 40,8.969 31.031,0 20.004,0 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Webp\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffb2b2b2\" Geometry=\"F1 M 0.000,0.000 L 40.000,0.000 L 40.000,32.857 L 0.000,32.857 L 0.000,0.000 Z\"/>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 0.714,0.714 L 39.286,0.714 L 39.286,32.143 L 0.714,32.143 L 0.714,0.714 Z\"/>\n                <GeometryDrawing Brush=\"#ff4c81b7\" Geometry=\"F1 M 1.429,1.429 L 1.429,10.728 C 3.685,8.977 6.763,7.895 10.163,7.895 C 12.207,7.895 14.136,8.286 15.839,8.978 C 16.913,7.438 18.694,6.429 20.714,6.429 C 22.206,6.429 23.565,6.982 24.609,7.889 C 25.725,6.158 27.719,5.000 30.000,5.000 C 33.455,5.000 36.259,7.648 36.332,10.941 C 37.146,11.325 37.896,11.803 38.571,12.357 L 38.571,1.429 L 1.429,1.429 Z\"/>\n                <GeometryDrawing Brush=\"#ff75a696\" Geometry=\"F1 M 31.068,24.609 C 29.397,23.292 27.293,22.500 25.000,22.500 C 22.125,22.500 19.546,23.743 17.750,25.712 C 14.361,23.472 10.338,21.792 5.916,20.853 C 5.433,19.843 4.409,19.139 3.214,19.139 C 2.542,19.139 1.927,19.367 1.429,19.742 L 1.429,31.429 L 38.571,31.429 L 38.571,27.711 C 36.387,26.197 33.840,25.112 31.068,24.609 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 35.489,17.895 C 35.327,18.267 34.978,18.454 34.444,18.454 C 34.144,18.458 33.889,18.291 33.678,17.955 C 33.468,17.618 33.363,17.182 33.363,16.648 L 33.363,16.113 C 33.360,15.582 33.465,15.149 33.678,14.812 C 33.892,14.475 34.147,14.307 34.444,14.307 C 34.974,14.311 35.323,14.499 35.489,14.871 C 35.656,15.243 35.739,15.746 35.739,16.380 C 35.735,17.017 35.652,17.522 35.489,17.895 Z M 36.929,14.110 C 36.553,13.465 35.900,13.142 34.968,13.142 C 34.656,13.134 34.346,13.187 34.053,13.296 C 33.800,13.399 33.570,13.621 33.364,13.961 L 33.341,13.961 L 33.317,13.617 C 33.301,13.379 33.194,13.261 32.996,13.261 L 32.056,13.261 C 31.819,13.261 31.700,13.379 31.700,13.617 L 31.700,21.519 C 31.700,21.756 31.818,21.875 32.056,21.875 L 32.056,21.876 L 33.008,21.876 C 33.245,21.876 33.363,21.758 33.363,21.520 L 33.363,19.275 C 33.363,19.116 33.356,18.957 33.340,18.799 L 33.364,18.799 C 33.570,19.140 33.799,19.361 34.053,19.464 C 34.345,19.574 34.656,19.626 34.968,19.619 C 35.895,19.623 36.549,19.302 36.929,18.656 C 37.310,18.010 37.500,17.252 37.500,16.380 C 37.496,15.512 37.305,14.756 36.929,14.110 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 8.804,16.531 L 9.022,17.538 L 9.072,17.538 L 9.243,16.516 L 10.022,13.414 L 11.469,13.414 L 9.596,19.558 L 8.425,19.558 L 7.197,16.154 L 7.038,15.387 L 6.978,15.387 L 6.832,16.166 L 5.664,19.560 L 4.459,19.560 L 2.500,13.416 L 4.216,13.416 L 5.103,16.470 L 5.250,17.554 L 5.310,17.554 L 5.517,16.459 L 6.524,13.417 L 7.693,13.417 L 8.804,16.531 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 15.566,15.874 L 13.303,15.874 C 13.342,15.459 13.459,15.130 13.654,14.887 C 13.857,14.636 14.165,14.510 14.579,14.510 C 14.937,14.510 15.197,14.629 15.359,14.867 C 15.529,15.101 15.598,15.436 15.566,15.874 Z M 16.829,14.520 C 16.709,14.228 16.521,13.970 16.281,13.766 C 16.053,13.578 15.788,13.441 15.503,13.363 C 15.209,13.282 14.907,13.241 14.603,13.242 C 13.678,13.244 12.960,13.513 12.449,14.048 C 11.938,14.583 11.682,15.386 11.682,16.457 C 11.683,17.457 11.910,18.244 12.364,18.817 C 12.818,19.385 13.536,19.669 14.517,19.669 C 14.967,19.672 15.414,19.606 15.844,19.474 C 16.266,19.336 16.598,19.170 16.842,18.975 L 16.841,18.973 L 16.317,17.939 C 16.129,18.071 15.924,18.177 15.709,18.255 C 15.424,18.356 15.123,18.406 14.820,18.400 C 14.284,18.400 13.887,18.270 13.652,18.011 C 13.417,17.752 13.287,17.366 13.262,16.856 L 16.914,16.856 C 16.953,16.655 16.982,16.452 16.999,16.248 C 17.022,16.066 17.035,15.884 17.036,15.700 C 17.036,15.229 16.967,14.836 16.829,14.520 Z\"/>\n                <GeometryDrawing Brush=\"#ff323232\" Geometry=\"F1 M 21.642,17.842 C 21.422,18.151 21.098,18.306 20.668,18.306 C 20.505,18.306 20.342,18.294 20.181,18.270 C 20.037,18.246 19.898,18.200 19.767,18.135 L 19.767,15.483 C 19.842,15.234 19.986,15.010 20.181,14.838 C 20.386,14.678 20.640,14.596 20.899,14.607 L 20.899,14.606 C 21.621,14.606 21.982,15.185 21.982,16.345 C 21.982,17.030 21.868,17.529 21.642,17.842 Z M 23.028,14.023 C 22.646,13.520 22.091,13.269 21.361,13.269 C 21.057,13.265 20.755,13.323 20.473,13.439 C 20.222,13.541 19.997,13.700 19.816,13.902 L 19.768,13.902 L 19.768,10.981 L 18.187,10.981 L 18.183,10.981 L 18.183,19.230 C 18.403,19.336 18.727,19.429 19.157,19.510 C 19.626,19.603 20.103,19.648 20.581,19.644 C 21.521,19.645 22.259,19.361 22.797,18.793 C 23.340,18.224 23.612,17.393 23.612,16.298 C 23.612,15.276 23.417,14.518 23.028,14.023 Z\"/>\n\n                <GeometryDrawing Brush=\"#ff89e133\" Geometry=\" M 25.639,13.720 L 26.339,13.720 L 26.339,14.423 L 25.639,14.423 L 25.639,13.720 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ff356903\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n                <GeometryDrawing Brush=\"#ff89e133\" Geometry=\" M 25.307,14.349 L 30.147,14.349 C 30.381,14.349 30.570,14.538 30.570,14.772 L 30.570,18.178 C 30.570,18.412 30.381,18.601 30.147,18.601 L 25.307,18.601 C 25.074,18.601 24.884,18.412 24.884,18.178 L 24.884,14.772 C 24.884,14.538 25.074,14.349 25.307,14.349 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ff356903\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 28.768,16.475 C 28.767,17.048 28.302,17.513 27.728,17.514 C 27.154,17.513 26.689,17.048 26.689,16.475 C 26.689,15.901 27.154,15.436 27.728,15.435 C 28.302,15.436 28.767,15.901 28.768,16.475 Z\">\n                    <GeometryDrawing.Pen>\n                        <Pen Thickness=\"0.3\" Brush=\"#ff356903\"/>\n                    </GeometryDrawing.Pen>\n                </GeometryDrawing>\n\n                <GeometryDrawing Geometry=\"F1 M 30.358,14.183 C 30.359,14.790 29.868,15.282 29.261,15.282 C 28.655,15.282 28.163,14.791 28.163,14.185 C 28.162,13.578 28.653,13.086 29.260,13.086 C 29.260,13.086 29.261,13.086 29.261,13.086 C 29.867,13.086 30.358,13.577 30.358,14.183 Z\">\n                    <GeometryDrawing.Brush>\n                        <RadialGradientBrush MappingMode=\"Absolute\" GradientOrigin=\"-341.593,144.496\" Center=\"-341.593,144.496\" RadiusX=\"0.966\" RadiusY=\"0.966\">\n                            <RadialGradientBrush.GradientStops>\n                                <GradientStop Offset=\"0.00\" Color=\"#ffffffff\"/>\n                                <GradientStop Offset=\"0.50\" Color=\"#fffff41f\"/>\n                                <GradientStop Offset=\"1.00\" Color=\"#fffff200\"/>\n                            </RadialGradientBrush.GradientStops>\n                            <RadialGradientBrush.Transform>\n                                <MatrixTransform Matrix=\"1.140,0.000,0.000,-1.140,418.670,178.889\" />\n                            </RadialGradientBrush.Transform>\n                        </RadialGradientBrush>\n                    </GeometryDrawing.Brush>\n                </GeometryDrawing>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.WidthHeight\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"M 40,40 L 15.503,40 L 15.503,15.503 L 40,15.503 L 40,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 15.503,13.003 L 17.003,13.003 L 17.003,0 L 15.503,0 L 15.503,13.003 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 38.503,13.003 L 40.003,13.003 L 40.003,0.003 L 38.503,0.003 L 38.503,13.003 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0,17.003 L 13.003,17.003 L 13.003,15.503 L 0,15.503 L 0,17.003 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 0.003,40.003 L 13.003,40.003 L 13.003,38.503 L 0.003,38.503 L 0.003,40.003 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.503,15.503 L 15.503,15.503 L 15.503,19.503 L 17.003,19.503 L 17.003,17.003 L 19.503,17.003 L 19.503,15.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 40,19.503 L 40,15.503 L 36.003,15.503 L 36.003,17.003 L 38.503,17.003 L 38.503,19.503 L 40,19.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 19.503,40 L 19.503,38.503 L 17.003,38.503 L 17.003,36.003 L 15.503,36.003 L 15.503,40 L 19.503,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 36.003,40 L 40,40 L 40,36.003 L 38.503,36.003 L 38.503,38.503 L 36.003,38.503 L 36.003,40 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 27,15.503 L 21,15.503 L 21,17.003 L 27,17.003 L 27,15.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 27,38.503 L 21,38.503 L 21,40.003 L 27,40.003 L 27,38.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 34.503,15.503 L 28.503,15.503 L 28.503,17.003 L 34.503,17.003 L 34.503,15.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 34.503,38.503 L 28.503,38.503 L 28.503,40.003 L 34.503,40.003 L 34.503,38.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 15.503,28.503 L 15.503,34.503 L 17.003,34.503 L 17.003,28.503 L 15.503,28.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 38.503,28.503 L 38.503,34.503 L 40.003,34.503 L 40.003,28.503 L 38.503,28.503 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 15.503,21.003 L 15.503,27.003 L 17.003,27.003 L 17.003,21.003 L 15.503,21.003 Z\"/>\n                <GeometryDrawing Brush=\"#ff7c7b7c\" Geometry=\"M 38.503,21.003 L 38.503,27.003 L 40.003,27.003 L 40.003,21.003 L 38.503,21.003 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 6.428,37.143 L 7.143,37.143 L 12.857,31.429 L 12.857,26.429 L 12.143,26.429 L 8.571,29.286 L 8.571,20.001 L 5,20.001 L 5,29.286 L 1.429,26.429 L 0.714,26.429 L 0.714,31.429 L 6.428,37.143 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 31.429,0.714 L 26.429,0.714 L 26.429,1.429 L 30,5 L 20,5 L 20,8.571 L 30,8.571 L 26.429,12.143 L 26.429,12.857 L 31.429,12.857 L 37.143,7.143 L 37.143,6.429 L 31.429,0.714 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.YandexDisk\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff0076fd\" Geometry=\"F1 M 28.202,11.766 C 27.929,11.783 27.657,11.793 27.385,11.818 C 25.232,12.021 23.197,12.663 21.218,13.499 C 18.590,14.610 16.121,15.987 14.009,17.937 C 13.305,18.587 12.655,19.290 12.284,20.196 C 11.851,21.255 12.214,22.018 13.303,22.358 C 14.265,22.659 15.244,22.601 16.222,22.472 C 18.223,22.207 20.126,21.592 21.973,20.800 C 24.532,19.705 26.942,18.358 29.009,16.465 C 29.766,15.772 30.473,15.027 30.834,14.034 C 31.188,13.059 30.834,12.347 29.855,12.012 C 29.318,11.829 28.765,11.775 28.202,11.766 Z M 38.785,3.818 C 39.811,4.616 40.125,5.691 39.957,6.931 C 39.722,8.666 38.911,10.163 37.941,11.579 C 35.726,14.813 32.855,17.378 29.637,19.569 C 24.974,22.743 19.864,24.847 14.310,25.841 C 11.489,26.346 8.648,26.539 5.793,26.121 C 4.532,25.936 3.306,25.631 2.174,25.020 C 1.185,24.486 0.477,23.720 0.179,22.613 C 0.253,22.576 0.255,22.508 0.252,22.439 C 0.201,21.466 0.511,20.585 0.952,19.742 C 1.872,17.988 3.191,16.555 4.622,15.218 C 7.342,12.677 10.405,10.615 13.672,8.859 C 19.430,5.764 25.453,3.439 32.024,2.805 C 33.575,2.655 35.129,2.676 36.669,3.001 C 37.422,3.160 38.099,3.494 38.785,3.818 Z\"/>\n                <GeometryDrawing Brush=\"#ff000001\" Geometry=\"F1 M 38.785,3.818 C 38.099,3.494 37.422,3.160 36.669,3.001 C 35.129,2.676 33.575,2.655 32.024,2.805 C 25.453,3.439 19.430,5.764 13.672,8.859 C 10.405,10.615 7.342,12.677 4.622,15.218 C 3.191,16.555 1.872,17.988 0.952,19.742 C 0.511,20.585 0.201,21.466 0.252,22.439 C 0.255,22.508 0.253,22.576 0.179,22.613 C -0.267,20.946 0.181,19.400 0.860,17.901 C 1.667,16.121 2.800,14.548 4.139,13.140 C 5.208,12.015 5.996,10.729 6.649,9.340 C 7.280,7.997 7.910,6.654 8.822,5.465 C 12.474,0.704 18.590,-1.181 24.346,0.748 C 26.024,1.310 27.700,1.608 29.477,1.524 C 31.845,1.411 34.190,1.642 36.452,2.430 C 37.175,2.683 37.863,3.008 38.480,3.466 C 38.603,3.558 38.782,3.616 38.785,3.818 Z\"/>\n                <GeometryDrawing Brush=\"#fffdfdfd\" Geometry=\"F1 M 28.202,11.766 C 28.765,11.775 29.318,11.829 29.855,12.012 C 30.834,12.347 31.188,13.059 30.834,14.034 C 30.473,15.027 29.766,15.772 29.009,16.465 C 26.942,18.358 24.532,19.705 21.973,20.800 C 20.126,21.592 18.223,22.207 16.222,22.472 C 15.244,22.601 14.265,22.659 13.303,22.358 C 12.214,22.018 11.851,21.255 12.284,20.196 C 12.655,19.290 13.305,18.587 14.009,17.937 C 16.121,15.987 18.590,14.610 21.218,13.499 C 23.197,12.663 25.232,12.021 27.385,11.818 C 27.657,11.793 27.929,11.783 28.202,11.766 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Yoyo\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 4.425,0 L 4.425,7.041 L 33.057,7.041 L 33.057,13.643 L 39.999,13.643 L 39.999,0.001 L 4.425,0 Z\"/>\n                <GeometryDrawing Brush=\"#ff3d7cb5\" Geometry=\"M 0,23.677 L 11.064,36 L 20.426,36 L 12.766,27.198 L 40,27.198 L 40,13.554 L 33.057,13.554 L 33.057,20.157 L 12.766,20.157 L 20.426,11.354 L 11.064,11.354 L 0,23.677 Z\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n\n    <DrawingBrush x:Key=\"Vector.Zoom\" Stretch=\"Uniform\" AlignmentX=\"Center\" AlignmentY=\"Center\">\n        <DrawingBrush.Drawing>\n            <DrawingGroup>\n                <GeometryDrawing Brush=\"#ffffffff\" Geometry=\"F1 M 28.813,14.812 C 28.813,22.545 22.545,28.813 14.813,28.813 C 7.081,28.813 0.813,22.545 0.813,14.812 C 0.813,7.081 7.081,0.812 14.813,0.812 C 22.545,0.812 28.813,7.081 28.813,14.812\"/>\n                <GeometryDrawing Brush=\"#ff7b7b7c\" Geometry=\"F1 M 39.259,38.519 C 39.259,38.519 40,37.451 40,37.037 L 40,36.296 C 40,36.296 39.552,35.108 39.259,34.815 C 36.288,31.845 27.407,23.704 27.407,23.704 L 27.407,22.582 C 28.805,20.321 29.625,17.666 29.625,14.813 C 29.625,6.632 22.993,0 14.813,0 C 6.631,0 0,6.632 0,14.813 C 0,22.994 6.631,29.626 14.813,29.626 C 17.666,29.626 20.320,28.805 22.582,27.408 L 23.704,27.408 C 23.704,27.408 32.207,36.651 34.815,39.259 C 35.108,39.552 36.296,40 36.296,40 L 37.037,40 C 37.451,40 38.518,39.259 38.518,39.259 L 39.259,38.519 Z M 2.962,14.813 C 2.962,8.268 8.268,2.962 14.813,2.962 C 21.357,2.962 26.663,8.268 26.663,14.813 C 26.663,21.357 21.357,26.663 14.813,26.663 C 8.268,26.663 2.962,21.357 2.962,14.813\"/>\n            </DrawingGroup>\n        </DrawingBrush.Drawing>\n    </DrawingBrush>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/ScreenToGif.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <RollForward>major</RollForward>\n    <OutputType>WinExe</OutputType>\n    <IsWebBootstrapper>false</IsWebBootstrapper>\n    <PublishUrl>publish\\</PublishUrl>\n    <Install>true</Install>\n    <InstallFrom>Disk</InstallFrom>\n    <UpdateEnabled>false</UpdateEnabled>\n    <UpdateMode>Foreground</UpdateMode>\n    <UpdateInterval>7</UpdateInterval>\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\n    <UpdatePeriodically>false</UpdatePeriodically>\n    <UpdateRequired>false</UpdateRequired>\n    <MapFileExtensions>true</MapFileExtensions>\n    <UseApplicationTrust>false</UseApplicationTrust>\n    <BootstrapperEnabled>true</BootstrapperEnabled>\n    <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>\n    <UseWindowsForms>True</UseWindowsForms>\n    <UseWPF>true</UseWPF>\n    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <PropertyGroup>\n    <StartupObject>ScreenToGif.App</StartupObject>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationIcon>Resources\\Logo.ico</ApplicationIcon>\n  </PropertyGroup>\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|AnyCPU'\">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Resource Include=\"Resources\\Logo.ico\" />\n  </ItemGroup>\n  <ItemGroup>\n    <BootstrapperPackage Include=\".NETFramework,Version=v4.5\">\n      <Visible>False</Visible>\n      <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>\n      <Install>true</Install>\n    </BootstrapperPackage>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Resources\\Style.css\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"KGySoft.Drawing\" />\n    <PackageReference Include=\"KGySoft.Drawing.Wpf\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"SharpDX.Direct3D11\" />\n    <PackageReference Include=\"System.Management\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Remove=\"Util\\Commands.cs\" />\n    <Page Remove=\"Themes\\Old.xaml\" />\n  </ItemGroup>\n  <Target Name=\"AfterBuild\">\n    <PropertyGroup>\n      <TargetUWP>..\\ScreenToGif.UWP\\win32\\</TargetUWP>\n    </PropertyGroup>\n    <ItemGroup>\n      <Win32Binaries Include=\"$(TargetDir)\\*\" />\n    </ItemGroup>\n    <Copy SourceFiles=\"@(Win32Binaries)\" DestinationFolder=\"$(TargetUWP)\" />\n  </Target>\n  <PropertyGroup>\n    <PostBuildEvent>\n      if exist \"$(DevEnvDir)..\\..\\VC\\Auxiliary\\Build\\vsvars32.bat\" (\n      call \"$(DevEnvDir)..\\..\\VC\\Auxiliary\\Build\\vsvars32.bat\"\n      editbin /largeaddressaware \"$(TargetPath)\"\n      )\n    </PostBuildEvent>\n    <MinimumPlatformVersion>7.0</MinimumPlatformVersion>\n    <Nullable>disable</Nullable>\n    <DebugType>embedded</DebugType>\n    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>\n    <SignAssembly>False</SignAssembly>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\ScreenToGif.Native\\ScreenToGif.Native.csproj\" />\n    <ProjectReference Include=\"..\\ScreenToGif.ViewModel\\ScreenToGif.ViewModel.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Update=\"app.manifest\">\n      <SubType>Designer</SubType>\n    </None>\n    <None Update=\"Readme.md\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif/Themes/Button.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n                    xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <c:MultiLineTitle x:Key=\"MultiLineTitleConverter\"/>\n\n    \n    <!--Button • Border • Horizontal • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"3,1\"/>\n        <Setter Property=\"ContentWidth\" Value=\"16\"/>\n        <Setter Property=\"ContentHeight\" Value=\"16\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Border x:Name=\"InnerBorder\" Background=\"Transparent\">\n                            <Grid>\n                                <Grid.RowDefinitions>\n                                    <RowDefinition/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Background=\"{TemplateBinding Icon}\" Margin=\"5,3,0,3\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                        Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\"\n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" \n                                           FontSize=\"10\" HorizontalAlignment=\"Center\" Margin=\"0\" Padding=\"0\" Height=\"12\"/>\n                            </Grid>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"MainBorder\" Property=\"Margin\" Value=\"-1\"/>\n                            <Setter TargetName=\"InnerBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"BorderThickness\" Value=\"1.5\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n    \n    <!--Button • Border • Vertical • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Vertical.Border\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border}\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Border x:Name=\"InnerBorder\" Background=\"Transparent\">\n                            <StackPanel Orientation=\"Vertical\" SnapsToDevicePixels=\"True\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                                <Border Background=\"{TemplateBinding Icon}\" Margin=\"2,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                        Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                                <TextBlock x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                           VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                           TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\" Padding=\"2\"/>\n                            </StackPanel>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"MainBorder\" Property=\"Margin\" Value=\"-1\"/>\n                            <Setter TargetName=\"InnerBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1.5\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • Border • Horizontal • Text • Yellow-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal.Special\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Paypal.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Paypal.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.Button.Paypal.Foreground}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <StackPanel Orientation=\"Horizontal\" SnapsToDevicePixels=\"True\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"2,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                            <TextBlock x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" Foreground=\"{TemplateBinding Foreground}\"\n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\" Padding=\"2\"/>\n                        </StackPanel>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Paypal.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Paypal.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Paypal.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Paypal.Border.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <!--Button • No Border • Horizontal • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"Padding\" Value=\"5,0\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" BorderThickness=\"0\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Background=\"{TemplateBinding Icon}\" Margin=\"3,0,0,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            \n                            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\"\n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Margin=\"0,-10,5,0\" Padding=\"0\" Height=\"13\"\n                                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" FontSize=\"10\" HorizontalAlignment=\"Right\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • No Border • Horizontal • Text • No Image-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal.NoImage\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\" Margin=\"{TemplateBinding Padding}\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" Text=\"{TemplateBinding Text}\" Margin=\"2,0\" Foreground=\"{TemplateBinding Foreground}\"\n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                            <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Margin=\"0,-10,2,0\" Padding=\"0\" Height=\"13\"\n                                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" FontSize=\"10\" HorizontalAlignment=\"Right\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • No Border • Horizontal • Text • White-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal.White\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"#20FFFFFF\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <StackPanel x:Name=\"InnerStackPanel\" Orientation=\"Horizontal\" Background=\"Transparent\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"2\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n  \n                            <Grid Margin=\"{TemplateBinding Padding}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"2,0\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                           TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                                <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Margin=\"0,-10,2,0\" Padding=\"0\" Height=\"13\"\n                                           Foreground=\"{DynamicResource Element.Foreground.Gray112}\" FontSize=\"10\" HorizontalAlignment=\"Right\"/>\n                            </Grid>\n                        </StackPanel>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerStackPanel\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • No Border • Horizontal • Text • Fade-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Horizontal.Fade\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"Opacity\" Value=\"0.7\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <StackPanel x:Name=\"InnerStackPanel\" Orientation=\"Horizontal\" Background=\"Transparent\">\n                            <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Background=\"{TemplateBinding Icon}\" Margin=\"2\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n    \n                            <Grid Margin=\"{TemplateBinding Padding}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"2,0\" Foreground=\"{TemplateBinding Foreground}\"\n                                           VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                           TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                                <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Margin=\"0,-10,2,0\" Padding=\"0\" Height=\"13\"\n                                           Foreground=\"{DynamicResource Element.Foreground.Gray112}\" FontSize=\"10\" HorizontalAlignment=\"Right\"/>\n                            </Grid>\n                        </StackPanel>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter Property=\"Opacity\" Value=\"0.9\"/>\n                            <Setter TargetName=\"InnerStackPanel\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <DataTrigger Binding=\"{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\">\n                <DataTrigger.EnterActions>\n                    <BeginStoryboard>\n                        <Storyboard>\n                            <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" To=\"1\"/>\n                        </Storyboard>\n                    </BeginStoryboard>\n                </DataTrigger.EnterActions>\n                <DataTrigger.ExitActions>\n                    <BeginStoryboard>\n                        <Storyboard>\n                            <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\"/>\n                        </Storyboard>\n                    </BeginStoryboard>\n                </DataTrigger.ExitActions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </DataTrigger>\n\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <!--Button • No Border • Vertical • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Vertical\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"MinWidth\" Value=\"50\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" MinWidth=\"{TemplateBinding MinWidth}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition MinHeight=\"{TemplateBinding ContentHeight}\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <Border Grid.Row=\"0\" Background=\"{TemplateBinding Icon}\" Margin=\"0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            \n                            <TextBlock Grid.Row=\"1\" x:Name=\"TextBlockInternal\" Margin=\"2,0\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Top\" \n                                       Text=\"{TemplateBinding Text, Converter={StaticResource MultiLineTitleConverter}}\" TextWrapping=\"{TemplateBinding TextWrapping}\" \n                                       Effect=\"{TemplateBinding Effect}\" TextAlignment=\"Center\"/>\n\n                            <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Margin=\"0,10,0,0\" Padding=\"0\" Height=\"13\"\n                                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" FontSize=\"10\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • Borderless-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.Borderless\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"Padding\" Value=\"5,3\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Border x:Name=\"InnerGrid\" CornerRadius=\"4\" Padding=\"{TemplateBinding Padding}\">\n                            <ContentPresenter x:Name=\"ContentPresenter\" Focusable=\"False\" Content=\"{TemplateBinding Content}\" TextElement.Foreground=\"{TemplateBinding Foreground}\"\n                                              RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\n                                              VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Border>\n                    </Border>\n                    \n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • No Border • No Text-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"{TemplateBinding Padding}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n                    \n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • No Border • No Text • White-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText.White\">\n        <Setter Property=\"Background\" Value=\"#20FFFFFF\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"{TemplateBinding Padding}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • Border • No Text-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText.Border\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Border x:Name=\"InnerBorder\" Background=\"Transparent\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"2,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"MainBorder\" Property=\"Margin\" Value=\"-1\"/>\n                            <Setter TargetName=\"InnerBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n                <Setter Property=\"BorderThickness\" Value=\"1.5\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Button • No Border • No Text • Fade-->\n    <Style TargetType=\"{x:Type n:ExtendedButton}\" BasedOn=\"{StaticResource {x:Type Button}}\" x:Key=\"Style.Button.NoText.Fade\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"Opacity\" Value=\"0.7\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"{TemplateBinding Padding}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter Property=\"Opacity\" Value=\"0.9\"/>\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <DataTrigger Binding=\"{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\">\n                <DataTrigger.EnterActions>\n                    <BeginStoryboard>\n                        <Storyboard>\n                            <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" To=\"1\"/>\n                        </Storyboard>\n                    </BeginStoryboard>\n                </DataTrigger.EnterActions>\n                <DataTrigger.ExitActions>\n                    <BeginStoryboard>\n                        <Storyboard>\n                            <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\"/>\n                        </Storyboard>\n                    </BeginStoryboard>\n                </DataTrigger.ExitActions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </DataTrigger>\n\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <!--ToggleButton • Border • Horizontal • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedToggleButton}\" BasedOn=\"{StaticResource {x:Type ToggleButton}}\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedToggleButton}\">\n                    <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Border x:Name=\"InnerBorder\">\n                            <StackPanel Orientation=\"Horizontal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\">\n                                <Border Background=\"{TemplateBinding Icon}\" Margin=\"5,3,0,3\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                        Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                                <TextBlock x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                           VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" \n                                           TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\" Foreground=\"{TemplateBinding Foreground}\"/>\n                            </StackPanel>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"MainBorder\" Property=\"Margin\" Value=\"-1\"/>\n                            <Setter TargetName=\"InnerBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsChecked\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsChecked\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Checked}\"/>\n            </Trigger>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"BorderThickness\" Value=\"1.5\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--ToggleButton • No Border • Horizontal • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedToggleButton}\" BasedOn=\"{StaticResource {x:Type ToggleButton}}\" x:Key=\"Style.ToggleButton.NoBorder\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"TextWrapping\" Value=\"WrapWithOverflow\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedToggleButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\">\n                        <Border x:Name=\"InnerBorder\">\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Border Background=\"{TemplateBinding Icon}\" Margin=\"2\" Opacity=\"{DynamicResource Element.Opacity}\" CornerRadius=\"4\"\n                                        Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                                <!--<Viewbox x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                         Margin=\"2\" Stretch=\"Uniform\" StretchDirection=\"Both\" Effect=\"{x:Null}\" Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" >\n                                    <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                </Viewbox>-->\n\n                                <Grid>\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                               HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"2,0\" Padding=\"{TemplateBinding Padding}\"\n                                               VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Text=\"{TemplateBinding Text}\" Foreground=\"{TemplateBinding Foreground}\"\n                                               TextWrapping=\"{TemplateBinding TextWrapping}\" Effect=\"{TemplateBinding Effect}\"/>\n\n                                    <TextBlock Grid.Row=\"1\" x:Name=\"KeyGestureTextBlock\" Text=\"{TemplateBinding KeyGesture}\" Margin=\"0,-10,2,0\" Padding=\"0\" Height=\"13\"\n                                               Foreground=\"{DynamicResource Element.Foreground.Medium}\" FontSize=\"10\" HorizontalAlignment=\"Right\"/>\n                                </Grid>\n                            </StackPanel>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"KeyGesture\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"KeyGestureTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerBorder\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsImportant\" Value=\"True\">\n                            <Setter TargetName=\"InnerBorder\" Property=\"BorderBrush\" Value=\"{DynamicResource Brush.StatusBand.Warning}\"/>\n                            <Setter TargetName=\"InnerBorder\" Property=\"BorderThickness\" Value=\"0,0,0,3\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsChecked\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsChecked\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Checked}\"/>\n            </Trigger>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n\n            <!--When !DarkMode, !IsMouseOver, !IsKeyboardFocused-->\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsOverNonClientArea\" Value=\"True\"/>\n                    <Condition Property=\"DarkMode\" Value=\"False\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"#FF000000\"/>\n            </MultiTrigger>\n\n            <!--When DarkMode, !IsMouseOver, !IsKeyboardFocused-->\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsOverNonClientArea\" Value=\"True\"/>\n                    <Condition Property=\"DarkMode\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"WhiteSmoke\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--ToggleButton • No Border • Horizontal • No Text-->\n    <Style TargetType=\"{x:Type n:ExtendedToggleButton}\" BasedOn=\"{StaticResource {x:Type ToggleButton}}\" x:Key=\"Style.ToggleButton.NoText\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedToggleButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"{TemplateBinding Padding}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsChecked\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsChecked\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Checked}\"/>\n            </Trigger>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <!--RepeatButton • No Border • Vertical • Text-->\n    <Style TargetType=\"{x:Type n:ExtendedRepeatButton}\" BasedOn=\"{StaticResource {x:Type RepeatButton}}\" x:Key=\"Style.RepeatButton.Vertical\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"MinWidth\" Value=\"50\"/>\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedRepeatButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"{TemplateBinding ContentHeight}\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <Border Grid.Row=\"0\" Background=\"{TemplateBinding Icon}\" Margin=\"{TemplateBinding Padding}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            \n                            <TextBlock x:Name=\"TextBlockInternal\" Grid.Row=\"1\" Margin=\"2,0\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Top\" \n                                       Text=\"{TemplateBinding Text, Converter={StaticResource MultiLineTitleConverter}}\" TextWrapping=\"{TemplateBinding TextWrapping}\" \n                                       Effect=\"{TemplateBinding Effect}\" TextAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--RepeatButton • No Border • No Text-->\n    <Style TargetType=\"{x:Type n:ExtendedRepeatButton}\" BasedOn=\"{StaticResource {x:Type RepeatButton}}\" x:Key=\"Style.RepeatButton.NoText\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedRepeatButton}\">\n                    <Border x:Name=\"MainBorder\" MinHeight=\"{TemplateBinding MinHeight}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"{TemplateBinding Padding}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                            <Setter TargetName=\"InnerGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Focused}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <!--ImageRadioButton • Text-->\n    <Style BasedOn=\"{StaticResource {x:Type RadioButton}}\" TargetType=\"{x:Type n:ExtendedRadioButton}\">\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Padding\" Value=\"3,1\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedRadioButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" Background=\"{TemplateBinding Background}\" BorderThickness=\"1\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n                        <Grid MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Row=\"0\" Grid.Column=\"0\" Background=\"{TemplateBinding Icon}\" Margin=\"2,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                            <TextBlock Grid.Column=\"1\" MaxWidth=\"{Binding Path=ActualWidth,RelativeSource={RelativeSource TemplatedParent}}\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                       VerticalAlignment=\"Center\" Text=\"{TemplateBinding Text, Converter={StaticResource MultiLineTitleConverter}}\" \n                                       TextWrapping=\"{TemplateBinding TextWrapping}\"/>\n                        </Grid>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsChecked\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n                \n                <MultiTrigger.Setters>\n                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                </MultiTrigger.Setters>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsChecked\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Checked}\"/>\n            </Trigger>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--ImageRadioButton • No Text-->\n    <Style BasedOn=\"{StaticResource {x:Type RadioButton}}\" TargetType=\"{x:Type n:ExtendedRadioButton}\" x:Key=\"Style.ImageRadioButton.NoText\">\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedRadioButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" CornerRadius=\"4\">\n                        <Grid MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" Background=\"{TemplateBinding Background}\">\n                            <Border Background=\"{TemplateBinding Icon}\" Margin=\"2,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsChecked\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n                <MultiTrigger.Setters>\n                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                </MultiTrigger.Setters>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsChecked\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Checked}\"/>\n            </Trigger>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <!--SplitButton • Border • Text-->\n    <Style TargetType=\"{x:Type n:SplitButton}\">\n        <Setter Property=\"Background\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"#FFABABAB\"/>\n        <Setter Property=\"Foreground\" Value=\"#FF444444\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"4,0,4,0\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SplitButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\"\n                            HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\">\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition Width=\"11\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <n:ExtendedButton Grid.Column=\"0\" x:Name=\"ActionButton\" Icon=\"{TemplateBinding Icon}\" Text=\"{TemplateBinding Text}\" TextWrapping=\"{TemplateBinding TextWrapping}\"\n                                              ContentWidth=\"{TemplateBinding ContentWidth}\" ContentHeight=\"{TemplateBinding ContentHeight}\" Style=\"{StaticResource Style.Button.Horizontal}\"\n                                              VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                              Command=\"{TemplateBinding Command}\" CommandParameter=\"{TemplateBinding CommandParameter}\"/>\n\n                            <Separator Grid.Column=\"1\" x:Name=\"Separator\" BorderBrush=\"#FFA3BDE3\" Width=\"1\" Margin=\"0\" Visibility=\"Hidden\"/>\n\n                            <n:ExtendedToggleButton Grid.Column=\"2\" x:Name=\"ExpanderButton\" Style=\"{DynamicResource Style.ToggleButton.NoText}\" Icon=\"{DynamicResource Vector.Arrow.Blue.Bottom}\" \n                                                    ContentWidth=\"5\" ContentHeight=\"3\"/>\n\n                            <Popup Name=\"Popup\" Placement=\"Bottom\" IsOpen=\"{Binding ElementName=ExpanderButton, Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                                   AllowsTransparency=\"True\" StaysOpen=\"False\" PopupAnimation=\"Fade\" HorizontalOffset=\"-2\">\n                                <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"White\" BorderBrush=\"#FFBEBEBE\" BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"2\">\n                                    <StackPanel x:Name=\"InnerStackPanel\" IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                                </Border>\n                            </Popup>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <!--<Setter TargetName=\"ExpanderButton\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>-->\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Background\" Value=\"#FFE6E6E6\"/>\n                            <Setter Property=\"BorderBrush\" Value=\"#FFBCBCBC\"/>\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n\n                        <DataTrigger Binding=\"{Binding IsMouseOver, ElementName=ExpanderButton}\" Value=\"True\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"True\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </DataTrigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"False\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"False\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"Popup\" Property=\"IsOpen\" Value=\"True\">\n                            <Setter TargetName=\"ExpanderButton\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n    <!--SplitButton • No Border-->\n    <Style TargetType=\"{x:Type n:SplitButton}\" x:Key=\"Style.SplitButton.NoBorder\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"4,0\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SplitButton}\">\n                    <Grid Background=\"{TemplateBinding Background}\" Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\"\n                          HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\"\n                          FocusManager.FocusedElement=\"{Binding RelativeSource={x:Static RelativeSource.Self}, Mode=OneTime}\" KeyboardNavigation.TabNavigation=\"Continue\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"1\"/>\n                            <ColumnDefinition Width=\"20\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <n:ExtendedButton Grid.Column=\"0\" x:Name=\"ActionButton\" Icon=\"{TemplateBinding Icon}\" Text=\"{TemplateBinding Text}\" TextWrapping=\"{TemplateBinding TextWrapping}\"\n                                          ContentWidth=\"{TemplateBinding ContentWidth}\" ContentHeight=\"{TemplateBinding ContentHeight}\" Style=\"{StaticResource Style.Button.Horizontal}\"\n                                          VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                          Padding=\"{TemplateBinding Padding}\" Command=\"{TemplateBinding Command}\" CommandParameter=\"{TemplateBinding CommandParameter}\"/>\n                        \n                        <Separator Grid.Column=\"1\" x:Name=\"Separator\" BorderBrush=\"{TemplateBinding BorderBrush}\" Width=\"1\" Margin=\"0\" Visibility=\"Hidden\"/>\n                        \n                        <n:ExtendedToggleButton Grid.Column=\"2\" x:Name=\"ExpanderButton\" Style=\"{DynamicResource Style.ToggleButton.NoText}\" Icon=\"{DynamicResource Vector.Arrow.Blue.Bottom}\" \n                                                ContentWidth=\"8\" ContentHeight=\"8\"/>\n\n                        <Popup x:Name=\"Popup\" Placement=\"Bottom\" IsOpen=\"{Binding ElementName=ExpanderButton, Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=False}\" \n                               AllowsTransparency=\"True\" StaysOpen=\"False\" PopupAnimation=\"Fade\" HorizontalOffset=\"-2\">\n                            <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"{DynamicResource Element.Background}\" BorderBrush=\"{DynamicResource Element.Border}\" \n                                    BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"2\" CornerRadius=\"4\">\n                                <StackPanel x:Name=\"InnerStackPanel\" IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                            </Border>\n                        </Popup>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <!--<Setter TargetName=\"ExpanderButton\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>-->\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n\n                        <DataTrigger Binding=\"{Binding IsMouseOver, ElementName=ExpanderButton}\" Value=\"True\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"True\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </DataTrigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"False\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"False\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"Popup\" Property=\"IsOpen\" Value=\"True\">\n                            <Setter TargetName=\"ExpanderButton\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--SplitButton • No Border • No Text-->\n    <Style TargetType=\"{x:Type n:SplitButton}\" x:Key=\"Style.SplitButton.NoBorder.NoText\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"4,0\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SplitButton}\">\n                    <Grid Background=\"{TemplateBinding Background}\" Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\"\n                          HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\" MinWidth=\"25\"/>\n                            <ColumnDefinition Width=\"1\"/>\n                            <ColumnDefinition Width=\"14\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <n:ExtendedButton Grid.Column=\"0\" x:Name=\"ActionButton\" Icon=\"{TemplateBinding Icon}\" TextWrapping=\"{TemplateBinding TextWrapping}\"\n                                          ContentWidth=\"{TemplateBinding ContentWidth}\" ContentHeight=\"{TemplateBinding ContentHeight}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                          VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                          Command=\"{TemplateBinding Command}\" CommandParameter=\"{TemplateBinding CommandParameter}\"/>\n                        \n                        <Separator Grid.Column=\"1\" x:Name=\"Separator\" BorderBrush=\"{TemplateBinding BorderBrush}\" Width=\"1\" Margin=\"0\" Visibility=\"Hidden\"/>\n\n                        <n:ExtendedToggleButton Grid.Column=\"2\" x:Name=\"ExpanderButton\" Style=\"{DynamicResource Style.ToggleButton.NoText}\" Icon=\"{DynamicResource Vector.Arrow.Blue.Bottom}\" \n                                                ContentWidth=\"6\" ContentHeight=\"5\"/>\n\n                        <Popup x:Name=\"Popup\" Placement=\"Bottom\" IsOpen=\"{Binding ElementName=ExpanderButton, Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                               AllowsTransparency=\"True\" StaysOpen=\"False\" PopupAnimation=\"Fade\" HorizontalOffset=\"-2\">\n                            <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"{DynamicResource Element.Background}\" BorderBrush=\"{DynamicResource Element.Border}\" \n                                    BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"2\" CornerRadius=\"4\">\n                                <StackPanel x:Name=\"InnerStackPanel\" IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                            </Border>\n                        </Popup>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <!--<Setter TargetName=\"ExpanderButton\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>-->\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n\n                        <DataTrigger Binding=\"{Binding IsMouseOver, ElementName=ExpanderButton}\" Value=\"True\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"True\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </DataTrigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"False\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"False\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"Popup\" Property=\"IsOpen\" Value=\"True\">\n                            <Setter TargetName=\"ExpanderButton\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n    <!--SplitButton • Border • No Text-->\n    <Style TargetType=\"{x:Type n:SplitButton}\" x:Key=\"Style.SplitButton.NoText\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"Padding\" Value=\"4,0\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        \n        <!--Default Values-->\n        <Setter Property=\"FocusVisualStyle\">\n            <Setter.Value>\n                <Style>\n                    <Setter Property=\"Control.Template\">\n                        <Setter.Value>\n                            <ControlTemplate>\n                                <Rectangle Margin=\"1\" SnapsToDevicePixels=\"true\" Stroke=\"{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}\" \n                                           StrokeThickness=\"1\" StrokeDashArray=\"1 2\" RadiusX=\"4\" RadiusY=\"4\"/>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n                </Style>\n            </Setter.Value>\n        </Setter>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SplitButton}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" CornerRadius=\"4\"\n                            HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                            Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\">\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"*\" MinWidth=\"20\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition Width=\"11\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <n:ExtendedButton Grid.Column=\"0\" x:Name=\"ActionButton\" Icon=\"{TemplateBinding Icon}\" Text=\"{TemplateBinding Text}\" TextWrapping=\"{TemplateBinding TextWrapping}\"\n                                              ContentWidth=\"{TemplateBinding ContentWidth}\" ContentHeight=\"{TemplateBinding ContentHeight}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                              VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                              Command=\"{TemplateBinding Command}\" CommandParameter=\"{TemplateBinding CommandParameter}\"/>\n\n                            <Separator Grid.Column=\"1\" x:Name=\"Separator\" BorderBrush=\"#FFA3BDE3\" Width=\"1\" Margin=\"0\" Visibility=\"Hidden\"/>\n\n                            <n:ExtendedToggleButton Grid.Column=\"2\" x:Name=\"ExpanderButton\" Style=\"{DynamicResource Style.ToggleButton.NoText}\" Icon=\"{DynamicResource Vector.Arrow.Blue.Bottom}\" \n                                                    ContentWidth=\"5\" ContentHeight=\"3\"/>\n\n                            <Popup Name=\"Popup\" Placement=\"Bottom\" IsOpen=\"{Binding ElementName=ExpanderButton, Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                                   AllowsTransparency=\"True\" StaysOpen=\"False\" PopupAnimation=\"Fade\" HorizontalOffset=\"-2\">\n                                <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"White\" BorderBrush=\"#FFBEBEBE\" BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"2\" CornerRadius=\"4\">\n                                    <StackPanel x:Name=\"InnerStackPanel\" IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                                </Border>\n                            </Popup>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <!--<Setter TargetName=\"ExpanderButton\" Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>-->\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Separator\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"ActionButton\" Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Background\" Value=\"#FFE6E6E6\"/>\n                            <Setter Property=\"BorderBrush\" Value=\"#FFBCBCBC\"/>\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n\n                        <DataTrigger Binding=\"{Binding IsMouseOver, ElementName=ExpanderButton}\" Value=\"True\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"True\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </DataTrigger>\n\n                        <Trigger SourceName=\"ExpanderButton\" Property=\"IsMouseOver\" Value=\"False\">\n                            <Setter Property=\"StaysOpen\" TargetName=\"Popup\" Value=\"False\"/>\n                            <Setter Property=\"Focusable\" TargetName=\"Popup\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"Popup\" Property=\"IsOpen\" Value=\"True\">\n                            <Setter TargetName=\"ExpanderButton\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Colors/Dark.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <s:Double x:Key=\"Element.Opacity\">0.8</s:Double>\n    \n    <!--Shadows-->\n    <DropShadowEffect x:Key=\"Shadow.Background.Tiny\" ShadowDepth=\"0\" Color=\"#FF2A2A2A\" Opacity=\".6\" BlurRadius=\"1\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Small\" ShadowDepth=\"0\" Color=\"#FF2A2A2A\" Opacity=\".6\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background\" ShadowDepth=\"0\" Color=\"#FF2A2A2A\" Opacity=\".6\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Large\" ShadowDepth=\"0\" Color=\"#FF2A2A2A\" Opacity=\".6\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n\n    <DropShadowEffect x:Key=\"Shadow.Border.Tiny\" ShadowDepth=\"0\" Color=\"#FF545454\" Opacity=\".5\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Small\" ShadowDepth=\"0\" Color=\"#FF545454\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border\" ShadowDepth=\"0\" Color=\"#FF545454\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Large\" ShadowDepth=\"0\" Color=\"#FF545454\" Opacity=\".4\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Dark\" ShadowDepth=\"0\" Color=\"#FF545454\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n\n    <!--Gradients-->\n    <Color x:Key=\"Gradient.Border.Light\">#4F444C55</Color>\n    \n    <!--Colors-->\n    <SolidColorBrush x:Key=\"Panel.Background\" Color=\"#FF202020\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level2\" Color=\"#FF262626\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level3\" Color=\"#FF2A2A2A\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level4\" Color=\"#FF323130\"/>\n\n    <SolidColorBrush x:Key=\"Element.Background\" Color=\"#FF323232\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Hover\" Color=\"#FF333337\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Focused\" Color=\"#FF252525\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Pressed\" Color=\"#FF888888\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Checked\" Color=\"#FF484644\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Back\" Color=\"#FF343434\"/>\n    <SolidColorBrush x:Key=\"Element.Background.ReadOnly\" Color=\"#FF343434\"/>\n\n    <SolidColorBrush x:Key=\"Element.Foreground\" Color=\"#FFE8E8E8\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Medium\" Color=\"#FFBBBBBB\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray112\" Color=\"#FF8F8F8F\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray150\" Color=\"#FF696969\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Watermark\" Color=\"#FF666666\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray192\" Color=\"#FF4F4F4F\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray208\" Color=\"#FF3F3F3F\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Header\" Color=\"#FF566C99\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Detail\" Color=\"#FF279645\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Hint\" Color=\"#FF007000\"/>\n\n    <SolidColorBrush x:Key=\"Element.Border\" Color=\"#FF545454\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Medium\" Color=\"#FF182E4E\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Light\" Color=\"#FF444C55\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Hover\" Color=\"#FF2E3338\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Pressed\" Color=\"#FF113F6F\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Required\" Color=\"#FF00004D\"/>\n\n    <SolidColorBrush x:Key=\"Element.Glyph\" Color=\"#FF888888\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Strong\" Color=\"#FFDDDDDD\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Hover\" Color=\"#FFBBBBBB\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Pressed\" Color=\"#FFCBCBCB\"/>\n\n    <SolidColorBrush x:Key=\"Element.Selection\" Color=\"#FF005394\"/>\n    <SolidColorBrush x:Key=\"Element.Selection.Inactive\" Color=\"#FFF0F0F0\"/>\n\n    <!--Buttons-->\n    <SolidColorBrush x:Key=\"Brush.Button.Background\" Color=\"#FF202020\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Hover\" Color=\"#AA34373B\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Checked\" Color=\"#802D3D54\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Pressed\" Color=\"#F02A313B\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Focused\" Color=\"#AA373E42\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Border\" Color=\"#FF545454\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Hover\" Color=\"#FF37404D\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Pressed\" Color=\"#FF113854\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Focused\" Color=\"#FF113E54\"/>\n\n    <!--Button • Paypal-->\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background\" Color=\"#80FFF8EB\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Hover\" Color=\"#90F9E7C3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Pressed\" Color=\"#90EEB860\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border\" Color=\"#80FBDBA6\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Hover\" Color=\"#90EEB860\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Pressed\" Color=\"#90FFB437\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Foreground\" Color=\"#FF143A61\"/>\n\n    <!--ScrollBar-->\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background\" Color=\"#FF202020\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Back\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Hover\" Color=\"#FF404040\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Pressed\" Color=\"#FF505050\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border\" Color=\"#FF404040\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Hover\" Color=\"#FF454545\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Pressed\" Color=\"#FF555555\"/>\n\n    <!--DataGrid-->\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background\" Color=\"#FF252E30\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background.Hovered\" Color=\"#FF143742\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Foreground.Selected\" Color=\"#FF101010\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Selected\" Color=\"#FF756EA1\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation1\" Color=\"#FF424242\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation2\" Color=\"#FF353535\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Border\" Color=\"#F0007FAD\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Border\" Color=\"#FF5292BC\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground\" Color=\"#FF000000\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Hover\" Color=\"WhiteSmoke\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Pressed\" Color=\"WhiteSmoke\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background\" Color=\"#FF68A1C5\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Hover\" Color=\"#FF376D90\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Pressed\" Color=\"#FF24475C\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph\" Color=\"Black\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Hover\" Color=\"WhiteSmoke\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Pressed\" Color=\"WhiteSmoke\"/>\n\n    <!--MenuItem-->\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Hover\" Color=\"#FF505050\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Border.Hover\" Color=\"#FF505050\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Pressed\" Color=\"#FF606060\"/>\n   \n    <!--StatusBand-->\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Info\" Color=\"#FF353554\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Warning\" Color=\"#FF5D5704\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Error\" Color=\"#FF5C0A0A\"/>\n\n    <!--Hyperlink-->\n    <SolidColorBrush x:Key=\"Brush.Hyperlink\" Color=\"#FF6666FF\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Hover\" Color=\"#FFFF3838\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Disabled\" Color=\"#FF447373\"/>\n\n    <!--ListBoxItem-->\n    <SolidColorBrush x:Key=\"Item.MouseOver.Background\" Color=\"#1226A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.MouseOver.Border\" Color=\"#8826A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Background\" Color=\"#3026A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Border\" Color=\"#4126A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Background\" Color=\"#3526A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Border\" Color=\"#F026A0DA\"/>\n\n    <!--ProgressBar-->\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Detail\" Color=\"#60000000\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Primary\" Color=\"#FF046816\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Info\" Color=\"#FF004175\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Warning\" Color=\"#FF767A04\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Danger\" Color=\"#FF870300\"/>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Colors/Light.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <s:Double x:Key=\"Element.Opacity\">1</s:Double>\n\n    <!--Shadows-->\n    <DropShadowEffect x:Key=\"Shadow.Background.Tiny\" ShadowDepth=\"0\" Color=\"WhiteSmoke\" Opacity=\".6\" BlurRadius=\"1\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Small\" ShadowDepth=\"0\" Color=\"WhiteSmoke\" Opacity=\".6\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background\" ShadowDepth=\"0\" Color=\"WhiteSmoke\" Opacity=\".6\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Large\" ShadowDepth=\"0\" Color=\"WhiteSmoke\" Opacity=\".6\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n\n    <DropShadowEffect x:Key=\"Shadow.Border.Tiny\" ShadowDepth=\"0\" Color=\"#FFABABAB\" Opacity=\".35\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Small\" ShadowDepth=\"0\" Color=\"#FFABABAB\" Opacity=\".4\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border\" ShadowDepth=\"0\" Color=\"#FFABABAB\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Large\" ShadowDepth=\"0\" Color=\"#FFABABAB\" Opacity=\".4\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Dark\" ShadowDepth=\"0\" Color=\"#FFABABAB\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n\n    <!--Gradients-->\n    <Color x:Key=\"Gradient.Border.Light\">#4FE0E3E6</Color>\n\n    <!--Colors-->\n    <SolidColorBrush x:Key=\"Panel.Background\" Color=\"#FFFFFFFF\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level2\" Color=\"#FFFAFAFA\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level3\" Color=\"WhiteSmoke\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level4\" Color=\"#FFF9F9FF\"/>\n\n    <SolidColorBrush x:Key=\"Element.Background\" Color=\"#FFFFFFFF\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Hover\" Color=\"#FFD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Focused\" Color=\"#FFF1F1F1\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Pressed\" Color=\"#FFA3BDE3\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Checked\" Color=\"#FFC2D5F2\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Back\" Color=\"#FFEFEFEF\"/>\n    <SolidColorBrush x:Key=\"Element.Background.ReadOnly\" Color=\"#FFECECEC\"/>\n\n    <SolidColorBrush x:Key=\"Element.Foreground\" Color=\"#FF000000\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Medium\" Color=\"#FF444444\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray112\" Color=\"#FF707070\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray150\" Color=\"#FF969696\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Watermark\" Color=\"#FFA9A9A9\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray192\" Color=\"#FFC0C0C0\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray208\" Color=\"#FFD0D0D0\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Header\" Color=\"#FF003399\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Detail\" Color=\"#FF289746\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Hint\" Color=\"DarkGreen\"/>\n\n    <SolidColorBrush x:Key=\"Element.Border\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Medium\" Color=\"#FFA3BDE3\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Light\" Color=\"#FFE0E3E6\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Hover\" Color=\"#FF7EB4EA\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Pressed\" Color=\"#FF569DE5\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Required\" Color=\"DarkBlue\"/>\n\n    <SolidColorBrush x:Key=\"Element.Glyph\" Color=\"#FF777777\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Strong\" Color=\"#FF231F20\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Hover\" Color=\"#FF444444\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Pressed\" Color=\"#FF343434\"/>\n\n    <SolidColorBrush x:Key=\"Element.Selection\" Color=\"#FF0078D7\"/>\n    <SolidColorBrush x:Key=\"Element.Selection.Inactive\" Color=\"#FFF0F0F0\"/>\n\n    <!--Buttons-->\n    <SolidColorBrush x:Key=\"Brush.Button.Background\" Color=\"#FFFFFFFF\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Hover\" Color=\"#AAD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Checked\" Color=\"#806F96CF\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Pressed\" Color=\"#F0A3BDE3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Focused\" Color=\"#80CDE6F7\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Border\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Hover\" Color=\"#FFA3BDE3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Pressed\" Color=\"#FF2A8DD4\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Focused\" Color=\"#FF2A9BD4\"/>\n\n    <!--Button • Paypal-->\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background\" Color=\"#F0FFF8EB\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Hover\" Color=\"#FFF9E7C3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Pressed\" Color=\"#FFEEB860\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border\" Color=\"#F0FBDBA6\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Hover\" Color=\"#FFEEB860\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Pressed\" Color=\"#FFFFB437\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Foreground\" Color=\"#FF143A61\"/>\n\n    <!--ScrollBar-->\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background\" Color=\"#FFFFFFFF\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Back\" Color=\"#FFEFEFEF\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Hover\" Color=\"#FFF0F0F0\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Pressed\" Color=\"#FFD0D0D0\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Hover\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Pressed\" Color=\"#FF777777\"/>\n\n    <!--DataGrid-->\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background\" Color=\"LightBlue\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background.Hovered\" Color=\"#FF73BCD4\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Foreground.Selected\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Selected\" Color=\"SlateBlue\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation1\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation2\" Color=\"PowderBlue\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Border\" Color=\"#F0007CAA\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Border\" Color=\"#FF336584\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Hover\" Color=\"Black\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Pressed\" Color=\"Black\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background\" Color=\"#FF397093\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Hover\" Color=\"#FF70A6C8\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Pressed\" Color=\"#FF89B6D1\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph\" Color=\"WhiteSmoke\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Hover\" Color=\"Black\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Pressed\" Color=\"Black\"/>\n\n    <!--MenuItem-->\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Hover\" Color=\"#AAD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Border.Hover\" Color=\"#FF7EB4EA\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Pressed\" Color=\"#F0A3BDE3\"/>\n\n    <!--StatusBand-->\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Info\" Color=\"#FFD4D4F8\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Warning\" Color=\"#FFFCF7B6\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Error\" Color=\"#FFF8D4D4\"/>\n\n    <!--Hyperlink-->\n    <SolidColorBrush x:Key=\"Brush.Hyperlink\" Color=\"Blue\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Hover\" Color=\"DarkRed\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Disabled\" Color=\"DarkSlateGray\"/>\n\n    <!--ListBoxItem-->\n    <SolidColorBrush x:Key=\"Item.MouseOver.Background\" Color=\"#1F26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.MouseOver.Border\" Color=\"#A826A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Background\" Color=\"#3326A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Border\" Color=\"#4C26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Background\" Color=\"#3D26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Border\" Color=\"#FF26A0DA\"/>\n\n    <!--ProgressBar-->\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Detail\" Color=\"#60EFEFEF\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Primary\" Color=\"#FF06B025\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Info\" Color=\"#FF007CDE\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Warning\" Color=\"#FFC8CF07\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Danger\" Color=\"#FFCF0500\"/>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Colors/Medium.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <s:Double x:Key=\"Element.Opacity\">0.9</s:Double>\n\n    <!--Shadows-->\n    <DropShadowEffect x:Key=\"Shadow.Background.Tiny\" ShadowDepth=\"0\" Color=\"#FFD6D6D6\" Opacity=\".6\" BlurRadius=\"1\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Small\" ShadowDepth=\"0\" Color=\"#FFD6D6D6\" Opacity=\".6\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background\" ShadowDepth=\"0\" Color=\"#FFD6D6D6\" Opacity=\".6\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Large\" ShadowDepth=\"0\" Color=\"#FFD6D6D6\" Opacity=\".6\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n\n    <DropShadowEffect x:Key=\"Shadow.Border.Tiny\" ShadowDepth=\"0\" Color=\"#FF969696\" Opacity=\".35\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Small\" ShadowDepth=\"0\" Color=\"#FF969696\" Opacity=\".4\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border\" ShadowDepth=\"0\" Color=\"#FF969696\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Large\" ShadowDepth=\"0\" Color=\"#FF969696\" Opacity=\".4\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Dark\" ShadowDepth=\"0\" Color=\"#FF969696\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n\n    <!--Gradients-->\n    <Color x:Key=\"Gradient.Border.Light\">#4FA7B0B8</Color>\n    \n    <!--Colors-->\n    <SolidColorBrush x:Key=\"Panel.Background\" Color=\"#FFEDEDED\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level2\" Color=\"#FFE3E3E3\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level3\" Color=\"#FFD6D6D6\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level4\" Color=\"#FFD7D7E4\"/>\n\n    <SolidColorBrush x:Key=\"Element.Background\" Color=\"#FFE9E9E9\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Hover\" Color=\"#FFD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Focused\" Color=\"#FFF1F1F1\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Pressed\" Color=\"#FFA3BDE3\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Checked\" Color=\"#FFC2D5F2\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Back\" Color=\"#FFEFEFEF\"/>\n    <SolidColorBrush x:Key=\"Element.Background.ReadOnly\" Color=\"#FFECECEC\"/>\n\n    <SolidColorBrush x:Key=\"Element.Foreground\" Color=\"#FF000000\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Medium\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray112\" Color=\"#FF505050\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray150\" Color=\"#FF767676\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Watermark\" Color=\"#FF898989\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray192\" Color=\"#FFA0A0A0\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray208\" Color=\"#FFB0B0B0\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Header\" Color=\"#FF003399\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Detail\" Color=\"#FF289746\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Hint\" Color=\"DarkGreen\"/>\n\n    <SolidColorBrush x:Key=\"Element.Border\" Color=\"#FF969696\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Medium\" Color=\"#FF95A0B2\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Light\" Color=\"#FFA7B0B8\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Hover\" Color=\"#FF7EB4EA\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Pressed\" Color=\"#FF569DE5\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Required\" Color=\"DarkBlue\"/>\n\n    <SolidColorBrush x:Key=\"Element.Glyph\" Color=\"#FF777777\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Strong\" Color=\"#FF231F20\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Hover\" Color=\"#FF444444\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Pressed\" Color=\"#FF343434\"/>\n\n    <SolidColorBrush x:Key=\"Element.Selection\" Color=\"#FF0078D7\"/>\n    <SolidColorBrush x:Key=\"Element.Selection.Inactive\" Color=\"#FFF0F0F0\"/>\n\n    <!--Buttons-->\n    <SolidColorBrush x:Key=\"Brush.Button.Background\" Color=\"#FFF2F2F2\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Hover\" Color=\"#AAD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Checked\" Color=\"#806F96CF\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Pressed\" Color=\"#F0A3BDE3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Focused\" Color=\"#AAABC0CF\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Border\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Hover\" Color=\"#FFA3BDE3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Pressed\" Color=\"#FF2A8DD4\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Focused\" Color=\"#FF2A9BD4\"/>\n\n    <!--Button • Paypal-->\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background\" Color=\"#F0FFF8EB\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Hover\" Color=\"#FFF9E7C3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Pressed\" Color=\"#FFEEB860\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border\" Color=\"#F0FBDBA6\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Hover\" Color=\"#FFEEB860\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Pressed\" Color=\"#FFFFB437\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Foreground\" Color=\"#FF143A61\"/>\n\n    <!--ScrollBar-->\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background\" Color=\"#FFF2F2F2\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Back\" Color=\"#FFEFEFEF\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Hover\" Color=\"#FFF0F0F0\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Pressed\" Color=\"#FFD0D0D0\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Hover\" Color=\"#FFABABAB\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Pressed\" Color=\"#FF777777\"/>\n\n    <!--DataGrid-->\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background\" Color=\"LightBlue\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background.Hovered\" Color=\"#FF73BCD4\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Foreground.Selected\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Selected\" Color=\"SlateBlue\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation1\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation2\" Color=\"PowderBlue\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Border\" Color=\"#F0007CAA\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Border\" Color=\"#FF336584\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground\" Color=\"White\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Hover\" Color=\"Black\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Pressed\" Color=\"Black\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background\" Color=\"#FF397093\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Hover\" Color=\"#FF70A6C8\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Pressed\" Color=\"#FF89B6D1\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph\" Color=\"WhiteSmoke\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Hover\" Color=\"Black\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Pressed\" Color=\"Black\"/>\n\n    <!--MenuItem-->\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Hover\" Color=\"#AAD5E1F2\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Border.Hover\" Color=\"#FF7EB4EA\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Pressed\" Color=\"#F0A3BDE3\"/>\n\n    <!--StatusBand-->\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Info\" Color=\"#FFD4D4F8\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Warning\" Color=\"#FFFCF7B6\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Error\" Color=\"#FFF8D4D4\"/>\n\n    <!--Hyperlink-->\n    <SolidColorBrush x:Key=\"Brush.Hyperlink\" Color=\"Blue\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Hover\" Color=\"DarkRed\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Disabled\" Color=\"DarkSlateGray\"/>\n\n    <!--ListBoxItem-->\n    <SolidColorBrush x:Key=\"Item.MouseOver.Background\" Color=\"#1F26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.MouseOver.Border\" Color=\"#A826A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Background\" Color=\"#3326A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Border\" Color=\"#4C26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Background\" Color=\"#3D26A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Border\" Color=\"#FF26A0DA\"/>\n\n    <!--ProgressBar-->\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Detail\" Color=\"#60EFEFEF\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Primary\" Color=\"#FF06B025\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Info\" Color=\"#FF0078D7\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Warning\" Color=\"#FFC8CF07\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Danger\" Color=\"#FFC50500\"/>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Colors/VeryDark.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <s:Double x:Key=\"Element.Opacity\">0.7</s:Double>\n\n    <!--Shadows-->\n    <DropShadowEffect x:Key=\"Shadow.Background.Tiny\" ShadowDepth=\"0\" Color=\"#FF1A1A1A\" Opacity=\".6\" BlurRadius=\"1\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Small\" ShadowDepth=\"0\" Color=\"#FF1A1A1A\" Opacity=\".6\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background\" ShadowDepth=\"0\" Color=\"#FF1A1A1A\" Opacity=\".6\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Background.Large\" ShadowDepth=\"0\" Color=\"#FF1A1A1A\" Opacity=\".6\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n\n    <DropShadowEffect x:Key=\"Shadow.Border.Tiny\" ShadowDepth=\"0\" Color=\"#FF474747\" Opacity=\".5\" BlurRadius=\"2\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Small\" ShadowDepth=\"0\" Color=\"#FF474747\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border\" ShadowDepth=\"0\" Color=\"#FF474747\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Large\" ShadowDepth=\"0\" Color=\"#FF474747\" Opacity=\".4\" BlurRadius=\"5\" RenderingBias=\"Quality\"/>\n    <DropShadowEffect x:Key=\"Shadow.Border.Dark\" ShadowDepth=\"0\" Color=\"#FF474747\" Opacity=\".5\" BlurRadius=\"3\" RenderingBias=\"Quality\"/>\n\n    <!--Gradients-->\n    <Color x:Key=\"Gradient.Border.Light\">#4F393F47</Color>\n    \n    <!--Colors-->\n    <SolidColorBrush x:Key=\"Panel.Background\" Color=\"#FF101010\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level2\" Color=\"#FF161616\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level3\" Color=\"#FF1A1A1A\"/>\n    <SolidColorBrush x:Key=\"Panel.Background.Level4\" Color=\"#FF222120\"/>\n\n    <SolidColorBrush x:Key=\"Element.Background\" Color=\"#FF1F1F1F\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Hover\" Color=\"#FF222225\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Focused\" Color=\"#FF212121\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Pressed\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Checked\" Color=\"#FF32302f\"/>\n    <SolidColorBrush x:Key=\"Element.Background.Back\" Color=\"#FF212121\"/>\n    <SolidColorBrush x:Key=\"Element.Background.ReadOnly\" Color=\"#FF262626\"/>\n\n    <SolidColorBrush x:Key=\"Element.Foreground\" Color=\"#FF999999\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Medium\" Color=\"#FF787878\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray112\" Color=\"#FF7D7D7D\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray150\" Color=\"#FF5C5C5C\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Watermark\" Color=\"#FF4D4D4D\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray192\" Color=\"#FF454545\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Gray208\" Color=\"#FF383838\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Header\" Color=\"#FF485A7F\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Detail\" Color=\"#FF1F7A38\"/>\n    <SolidColorBrush x:Key=\"Element.Foreground.Hint\" Color=\"#FF007000\"/>\n\n    <SolidColorBrush x:Key=\"Element.Border\" Color=\"#FF474747\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Medium\" Color=\"#FF142742\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Light\" Color=\"#FF393F47\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Hover\" Color=\"#FF292E32\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Pressed\" Color=\"#FF0d3054\"/>\n    <SolidColorBrush x:Key=\"Element.Border.Required\" Color=\"#FF00004D\"/>\n\n    <SolidColorBrush x:Key=\"Element.Glyph\" Color=\"#FF696969\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Strong\" Color=\"#FF9E9E9E\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Hover\" Color=\"#FF9C9C9C\"/>\n    <SolidColorBrush x:Key=\"Element.Glyph.Pressed\" Color=\"#FFADADAD\"/>\n\n    <SolidColorBrush x:Key=\"Element.Selection\" Color=\"#FF003C6B\"/>\n    <SolidColorBrush x:Key=\"Element.Selection.Inactive\" Color=\"#FFB3B3B3\"/>\n\n    <!--Buttons-->\n    <SolidColorBrush x:Key=\"Brush.Button.Background\" Color=\"#FF1A1A1A\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Hover\" Color=\"#AA34373B\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Checked\" Color=\"#802D3D54\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Pressed\" Color=\"#F02A313B\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Background.Focused\" Color=\"#AA373E42\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Border\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Hover\" Color=\"#FF333B47\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Pressed\" Color=\"#FF113854\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Border.Focused\" Color=\"#FF113E54\"/>\n\n    <!--Button • Paypal-->\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background\" Color=\"#70FFF8EB\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Hover\" Color=\"#80F9E7C3\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Background.Pressed\" Color=\"#80EEB860\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border\" Color=\"#70FBDBA6\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Hover\" Color=\"#80EEB860\"/>\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Border.Pressed\" Color=\"#80FFB437\"/>\n\n    <SolidColorBrush x:Key=\"Brush.Button.Paypal.Foreground\" Color=\"#FF143A61\"/>\n\n    <!--ScrollBar-->\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background\" Color=\"#FF101010\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Back\" Color=\"#FF202020\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Hover\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Background.Pressed\" Color=\"#FF404040\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Hover\" Color=\"#FF353535\"/>\n    <SolidColorBrush x:Key=\"Brush.ScrollBar.Border.Pressed\" Color=\"#FF454545\"/>\n\n    <!--DataGrid-->\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background\" Color=\"#FF21292B\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.RowHeader.Background.Hovered\" Color=\"#FF112E37\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Foreground.Selected\" Color=\"#FF050505\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Selected\" Color=\"#FF5F5888\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation1\" Color=\"#FF333333\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Background.Alternation2\" Color=\"#FF2E2E2E\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Border\" Color=\"#F0006185\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Border\" Color=\"#FF326181\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground\" Color=\"#FF000000\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Hover\" Color=\"#FFC2C2C2\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Foreground.Pressed\" Color=\"#FFC2C2C2\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background\" Color=\"#FF376D90\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Hover\" Color=\"#FF2C5772\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Background.Pressed\" Color=\"#FF203E51\"/>\n\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph\" Color=\"Black\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Hover\" Color=\"#FFC2C2C2\"/>\n    <SolidColorBrush x:Key=\"Brush.DataGrid.Header.Glyph.Pressed\" Color=\"#FFC2C2C2\"/>\n\n    <!--MenuItem-->\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Hover\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Border.Hover\" Color=\"#FF303030\"/>\n    <SolidColorBrush x:Key=\"Brush.MenuItem.Background.Pressed\" Color=\"#FF404040\"/>\n\n    <!--StatusBand-->\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Info\" Color=\"#FF353554\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Warning\" Color=\"#FF5D5704\"/>\n    <SolidColorBrush x:Key=\"Brush.StatusBand.Error\" Color=\"#FF5C0A0A\"/>\n\n    <!--Hyperlink-->\n    <SolidColorBrush x:Key=\"Brush.Hyperlink\" Color=\"#FF61618C\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Hover\" Color=\"#FF873B3B\"/>\n    <SolidColorBrush x:Key=\"Brush.Hyperlink.Disabled\" Color=\"#FF355A5A\"/>\n\n    <!--ListBoxItem-->\n    <SolidColorBrush x:Key=\"Item.MouseOver.Background\" Color=\"#1226A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.MouseOver.Border\" Color=\"#6826A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Background\" Color=\"#2026A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedInactive.Border\" Color=\"#3126A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Background\" Color=\"#3526A0DA\"/>\n    <SolidColorBrush x:Key=\"Item.SelectedActive.Border\" Color=\"#E01D7DAA\"/>\n\n    <!--ProgressBar-->\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Detail\" Color=\"#60000000\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Primary\" Color=\"#FF035312\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Info\" Color=\"#FF003259\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Warning\" Color=\"#FF717500\"/>\n    <SolidColorBrush x:Key=\"Brush.ProgressBar.Danger\" Color=\"#FF7A0300\"/>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/ComboBox.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n                    xmlns:v=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\">\n\n    <!--ComboBox Style-->\n    <Style x:Key=\"Style.ToggleButton.ComboBox\" TargetType=\"{x:Type ToggleButton}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"Focusable\" Value=\"False\"/>\n        <Setter Property=\"ClickMode\" Value=\"Press\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                    <Border x:Name=\"templateRoot\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" CornerRadius=\"4\">\n                        <Border x:Name=\"splitBorder\" BorderBrush=\"Transparent\" BorderThickness=\"1\" HorizontalAlignment=\"Right\" Margin=\"0\" \n                                SnapsToDevicePixels=\"True\" Width=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\">\n                            <Path x:Name=\"arrow\" Data=\"F1 M 0,0 L 2.667,2.66665 L 5.3334,0 L 5.3334,-1.78168 L 2.6667,0.88501 L0,-1.78168 L0,0 Z\" \n                                  Fill=\"{DynamicResource Element.Glyph}\" HorizontalAlignment=\"Center\" Margin=\"0\" VerticalAlignment=\"Center\"/>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"Fill\" TargetName=\"arrow\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"Fill\" TargetName=\"arrow\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                        </Trigger>\n\n                        <!--Editable, !Hovered-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"False\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Border}\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\" Value=\"Transparent\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"Transparent\"/>\n                        </MultiDataTrigger>\n\n                        <!--Editable, Hovered-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"False\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </MultiDataTrigger>\n\n                        <!--Editable, Pressed-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                            <Setter Property=\"Background\" TargetName=\"splitBorder\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"splitBorder\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </MultiDataTrigger>\n\n                        <!--!Editable, Hovered-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"False\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </MultiDataTrigger>\n\n                        <!--!Editable, Pressed-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding IsEditable, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding IsPressed, RelativeSource={RelativeSource Self}}\" Value=\"True\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </MultiDataTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"Style.TextBox.ComboBoxEditable\" TargetType=\"{x:Type c:ExtendedTextBox}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n        <Setter Property=\"AllowDrop\" Value=\"True\"/>\n        <Setter Property=\"MinWidth\" Value=\"0\"/>\n        <Setter Property=\"MinHeight\" Value=\"0\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"CaretBrush\" Value=\"{DynamicResource Element.Foreground}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type c:ExtendedTextBox}\">\n                    <ScrollViewer x:Name=\"PART_ContentHost\" Background=\"Transparent\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"/>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    \n    <ControlTemplate x:Key=\"Template.ComboBox\" TargetType=\"{x:Type ComboBox}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"True\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\" CornerRadius=\"4\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                        <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"2\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                          IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{StaticResource Style.ToggleButton.ComboBox}\"/>\n\n            <ContentPresenter Grid.Column=\"0\" IsHitTestVisible=\"False\" Margin=\"{TemplateBinding Padding}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\n                              Content=\"{TemplateBinding SelectionBoxItem}\" ContentTemplate=\"{TemplateBinding SelectionBoxItemTemplate}\" \n                              ContentTemplateSelector=\"{TemplateBinding ItemTemplateSelector}\" ContentStringFormat=\"{TemplateBinding SelectionBoxItemStringFormat}\"\n                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter TargetName=\"DropDownBorder\" Property=\"Height\" Value=\"95\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.ComboBox.Editable\" TargetType=\"{x:Type ComboBox}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"True\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\" CornerRadius=\"4\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                        <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"2\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                          IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{StaticResource Style.ToggleButton.ComboBox}\"/>\n\n            <c:ExtendedTextBox Grid.Column=\"0\" x:Name=\"PART_EditableTextBox\" Margin=\"{TemplateBinding Padding}\"\n                               IsReadOnly=\"{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{StaticResource Style.TextBox.ComboBoxEditable}\" \n                               HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" TargetName=\"PART_EditableTextBox\" Value=\"0.7\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocusWithin\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n            </Trigger>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter TargetName=\"DropDownBorder\" Property=\"Height\" Value=\"95\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n\n    <Style TargetType=\"{x:Type ComboBox}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n        <Setter Property=\"Height\" Value=\"25\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"Padding\" Value=\"5,3\"/>\n        <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"True\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"Template\" Value=\"{StaticResource Template.ComboBox}\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsEditable\" Value=\"True\">\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"Padding\" Value=\"2\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.ComboBox.Editable}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--ComboBoxButton Style-->\n    <Style x:Key=\"DropDownToggleButton\" TargetType=\"{x:Type ToggleButton}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"Focusable\" Value=\"False\"/>\n        <Setter Property=\"ClickMode\" Value=\"Press\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                    <Grid x:Name=\"templateRoot\" MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" Background=\"{TemplateBinding Background}\"/>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n\n    <!--DropDownButton styles-->\n    <ControlTemplate x:Key=\"Template.DropDownButton.Horizontal\" TargetType=\"{x:Type c:DropDownButton}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"True\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\" CornerRadius=\"4\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                        <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"3\" IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                          Background=\"{TemplateBinding Background}\" Style=\"{StaticResource DropDownToggleButton}\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                          HorizontalContentAlignment=\"Right\" VerticalContentAlignment=\"Center\"/>\n\n            <Border Grid.Column=\"0\" Background=\"{TemplateBinding Icon}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                    Margin=\"{TemplateBinding Padding}\" Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                       VerticalAlignment=\"Center\" Text=\"{TemplateBinding Description}\" TextWrapping=\"WrapWithOverflow\" \n                       Effect=\"{TemplateBinding Effect}\" IsHitTestVisible=\"False\"/>\n\n            <Path Grid.Column=\"2\" Data=\"F1 M 0,1.7 L 3,5 L 6,1.7 L 6,0 L 3,3.2 L0,0 Z\" Fill=\"{DynamicResource Element.Glyph}\" VerticalAlignment=\"Center\" Height=\"5\" Width=\"6\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter Property=\"Height\" TargetName=\"DropDownBorder\" Value=\"95\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.DropDownButton.Vertical\" TargetType=\"{x:Type c:DropDownButton}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"True\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Popup x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Grid.ColumnSpan=\"2\" IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\" Placement=\"Bottom\">\n                <Grid x:Name=\"shadow\" Background=\"Transparent\" MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                    <Border x:Name=\"DropDownBorder\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" Effect=\"{DynamicResource Shadow.Border}\" Margin=\"0,0,0,5\" CornerRadius=\"4\">\n                        <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                            <Grid x:Name=\"grid\" RenderOptions.ClearTypeHint=\"Enabled\">\n                                <Canvas x:Name=\"canvas\" HorizontalAlignment=\"Left\" Height=\"0\" VerticalAlignment=\"Top\" Width=\"0\">\n                                    <Rectangle x:Name=\"opaqueRect\" Fill=\"{Binding Background, ElementName=DropDownBorder}\" Height=\"{Binding ActualHeight, ElementName=DropDownBorder}\"\n                                               Width=\"{Binding ActualWidth, ElementName=DropDownBorder}\"/>\n                                </Canvas>\n\n                                <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                            </Grid>\n                        </ScrollViewer>\n                    </Border>\n                </Grid>\n            </Popup>\n\n            <ToggleButton Grid.Row=\"0\" Grid.RowSpan=\"3\" IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                          Background=\"{TemplateBinding Background}\" Style=\"{StaticResource DropDownToggleButton}\" IsEnabled=\"{TemplateBinding IsEnabled}\"/>\n\n            <Border Grid.Column=\"0\" Background=\"{TemplateBinding Icon}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                     Margin=\"{TemplateBinding Padding}\" Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\"/>\n            \n            <TextBlock Grid.Row=\"1\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                       VerticalAlignment=\"Center\" Text=\"{TemplateBinding Description}\" TextWrapping=\"WrapWithOverflow\" \n                       Effect=\"{TemplateBinding Effect}\" IsHitTestVisible=\"False\"/>\n\n            <Path Grid.Row=\"2\" Data=\"F1 M 0,1.7 L 3,5 L 6,1.7 L 6,0 L 3,3.2 L0,0 Z\" Fill=\"{DynamicResource Element.Glyph}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                  Height=\"5\" Width=\"6\" Margin=\"0,4\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter Property=\"Height\" TargetName=\"DropDownBorder\" Value=\"95\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"ScrollViewer.CanContentScroll\" SourceName=\"DropDownScrollViewer\" Value=\"False\">\n                <Setter Property=\"Canvas.Top\" TargetName=\"opaqueRect\" Value=\"{Binding VerticalOffset, ElementName=DropDownScrollViewer}\"/>\n                <Setter Property=\"Canvas.Left\" TargetName=\"opaqueRect\" Value=\"{Binding HorizontalOffset, ElementName=DropDownScrollViewer}\"/>\n            </Trigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <Style TargetType=\"{x:Type c:DropDownButton}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Style.FocusVisual.NoMargin}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"IsEditable\" Value=\"False\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"Padding\" Value=\"6,3,5,3\"/>\n        <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"True\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"Template\" Value=\"{StaticResource Template.DropDownButton.Horizontal}\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n            <Trigger Property=\"IsVertical\" Value=\"True\">\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.DropDownButton.Vertical}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n\n    <v:KeyToResource x:Key=\"StringToStaticResource\"/>\n    \n    <!--Common Templates-->\n    <DataTemplate x:Key=\"Template.ComboBox.Simple\">\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"33\"/>\n                <ColumnDefinition Width=\"1\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"IconBorder\" Background=\"{Binding ImageId, Converter={StaticResource StringToStaticResource}}\"\n                    Margin=\"1,1,4,1\" Height=\"22\" Width=\"30\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n            <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" Width=\"1\" Margin=\"0\"/>\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{Binding Title}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{Binding Description}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" \n                       TextTrimming=\"CharacterEllipsis\" FontSize=\"11\" VerticalAlignment=\"Center\"/>\n        </Grid>\n    </DataTemplate>\n\n    <DataTemplate x:Key=\"Template.ComboBox.SimpleNoIcon\">\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Text=\"{Binding Title}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n            <TextBlock Grid.Row=\"1\" Text=\"{Binding Description}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" \n                       TextTrimming=\"CharacterEllipsis\" FontSize=\"11\" VerticalAlignment=\"Center\"/>\n        </Grid>\n    </DataTemplate>\n\n    <DataTemplate x:Key=\"Template.ComboBox.Item\">\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"1\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n            \n            <TextBlock Grid.Column=\"0\" Margin=\"1,1,5,1\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\">\n                <TextBlock.Text>\n                    <PriorityBinding>\n                        <Binding Path=\"NameKey\" Converter=\"{StaticResource StringToStaticResource}\"/>\n                        <Binding Path=\"Name\"/>\n                    </PriorityBinding>\n                </TextBlock.Text>\n            </TextBlock>\n\n            <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"0\"/>\n            \n            <TextBlock Grid.Column=\"2\" Margin=\"5,1,3,1\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" \n                       TextTrimming=\"CharacterEllipsis\" FontSize=\"11\" VerticalAlignment=\"Center\">\n                <TextBlock.Text>\n                    <PriorityBinding>\n                        <Binding Path=\"Parameter\"/>\n                        <Binding Path=\"Command\"/>\n                    </PriorityBinding>\n                </TextBlock.Text>\n            </TextBlock>\n        </Grid>\n    </DataTemplate>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Common.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n\n    <!--Office RepeatButton Style-->\n    <Style TargetType=\"{x:Type RepeatButton}\" x:Key=\"Style.RepeatButton\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Glyph}\"/>\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource FontFamilyNormal}\"/>\n        <Setter Property=\"FontSize\" Value=\"6\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ButtonBase}\">\n                    <Border x:Name=\"Chrome\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            Margin=\"0\" Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\">\n                        <ContentPresenter ContentTemplate=\"{TemplateBinding ContentTemplate}\" Content=\"{TemplateBinding Content}\"\n                                          ContentStringFormat=\"{TemplateBinding ContentStringFormat}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                          Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\n                                          VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Hover}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.Button.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.Button.Border.Pressed}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Slider Styles and Templates-->\n    <ControlTemplate x:Key=\"Template.RepeatButton.Simple\" TargetType=\"RepeatButton\">\n        <Grid/>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.Slider.Thumb.Horizontal\" TargetType=\"{x:Type Thumb}\">\n        <Border Background=\"{DynamicResource Element.Background}\" Margin=\"{TemplateBinding Padding}\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" CornerRadius=\"4\"/>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsDragging\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n            </Trigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.Slider.Thumb.Top\" TargetType=\"{x:Type Thumb}\">\n        <Grid HorizontalAlignment=\"Center\" UseLayoutRounding=\"True\" VerticalAlignment=\"Center\" Focusable=\"False\" Margin=\"{TemplateBinding Padding}\">\n            <Path Data=\"M 0,6 C0,6 5.5,0 5.5,0 5.5,0 11,6 11,6 11,6 11,18 11,18 11,18 0,18 0,18 0,18 0,6 0,6 z\" \n                          Fill=\"{DynamicResource Element.Background}\" Stretch=\"Fill\" SnapsToDevicePixels=\"True\" Stroke=\"{DynamicResource Element.Border}\" StrokeThickness=\"1\" VerticalAlignment=\"Center\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsDragging\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n            </Trigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.Slider.Thumb.Bottom\" TargetType=\"{x:Type Thumb}\">\n        <Grid HorizontalAlignment=\"Center\" UseLayoutRounding=\"True\" VerticalAlignment=\"Center\">\n            <Path Data=\"M 0,12 C0,12 5.5,18 5.5,18 5.5,18 11,12 11,12 11,12 11,0 11,0 11,0 0,0 0,0 0,0 0,12 0,12 z\" \n                          Fill=\"{DynamicResource Element.Background}\" Stretch=\"Fill\" SnapsToDevicePixels=\"True\" Stroke=\"{DynamicResource Element.Border}\" StrokeThickness=\"1\" VerticalAlignment=\"Center\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsDragging\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n            </Trigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate\n\n    >\n\n    <!--Info/Warning/Error Labels (cannot be TextBlocks because it has no Template property)-->\n    <ControlTemplate x:Key=\"InfoLabel\" TargetType=\"Label\">\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\"\n                    Width=\"15\" Height=\"15\"\n                    Background=\"{StaticResource Vector.Info}\"\n                    Opacity=\"{DynamicResource Element.Opacity}\"/>\n            <TextBlock Grid.Column=\"1\" Padding=\"3\"\n                       FontStyle=\"Italic\" FontSize=\"11\" TextWrapping=\"Wrap\"\n                       HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                <Hyperlink>\n                    <Run Text=\"{TemplateBinding Content}\"/>\n                </Hyperlink>\n            </TextBlock>\n        </Grid>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"WarningLabel\" TargetType=\"Label\">\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\"\n                    Width=\"15\" Height=\"15\"\n                    Background=\"{StaticResource Vector.Warning}\"\n                    Opacity=\"{DynamicResource Element.Opacity}\"/>\n            <TextBlock Grid.Column=\"1\" Padding=\"3\"\n                       FontStyle=\"Italic\" FontSize=\"11\" TextWrapping=\"Wrap\"\n                       HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                <Hyperlink>\n                    <Run Text=\"{TemplateBinding Content}\"/>\n                </Hyperlink>\n            </TextBlock>\n        </Grid>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"ErrorLabel\" TargetType=\"Label\">\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\"\n                    Width=\"15\" Height=\"15\"\n                    Background=\"{StaticResource Vector.Error}\"\n                    Opacity=\"{DynamicResource Element.Opacity}\"/>\n            <TextBlock Grid.Column=\"1\" Padding=\"3\"\n                       FontStyle=\"Italic\" FontSize=\"11\" TextWrapping=\"Wrap\"\n                       HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                <Hyperlink>\n                    <Run Text=\"{TemplateBinding Content}\"/>\n                </Hyperlink>\n            </TextBlock>\n        </Grid>\n    </ControlTemplate>\n\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Controls/ExtendedComboBox.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <!--Templates-->\n    <ControlTemplate x:Key=\"Template.ExtendedComboBox\" TargetType=\"{x:Type n:ExtendedComboBox}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"True\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                        <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"2\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                          IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{DynamicResource Style.ToggleButton.ComboBox}\"/>\n\n            <ContentPresenter Grid.Column=\"0\" IsHitTestVisible=\"False\" Margin=\"{TemplateBinding Padding}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"\n                              Content=\"{TemplateBinding SelectionItemBox}\" ContentTemplate=\"{TemplateBinding SelectionItemBoxTemplate}\" \n                              ContentTemplateSelector=\"{TemplateBinding ItemTemplateSelector}\" ContentStringFormat=\"{TemplateBinding SelectionBoxItemStringFormat}\"\n                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                \n                <!--<ContentPresenter.Content>\n                    <PriorityBinding>\n                        <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"SelectionBoxItem\"/>\n                        <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"SelectionItemBox\"/>\n                    </PriorityBinding>\n                </ContentPresenter.Content>-->\n            </ContentPresenter>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter TargetName=\"DropDownBorder\" Property=\"Height\" Value=\"95\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.ExtendedComboBox.Editable\" TargetType=\"{x:Type n:ExtendedComboBox}\">\n        <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"True\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n            </Grid.ColumnDefinitions>\n\n            <Popup Grid.ColumnSpan=\"2\" x:Name=\"PART_Popup\" AllowsTransparency=\"True\" Placement=\"Bottom\"\n                   IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                   PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\n\n                <Border x:Name=\"DropDownBorder\" BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1\" Background=\"{DynamicResource Element.Background}\" Effect=\"{DynamicResource Shadow.Border}\"\n                        MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                        <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </ScrollViewer>\n                </Border>\n            </Popup>\n\n            <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"2\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                          IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{DynamicResource Style.ToggleButton.ComboBox}\"/>\n\n            <n:ExtendedTextBox Grid.Column=\"0\" x:Name=\"PART_EditableTextBox\" Margin=\"{TemplateBinding Padding}\"\n                               IsReadOnly=\"{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}\" Style=\"{DynamicResource Style.TextBox.ComboBoxEditable}\" \n                               HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n        </Grid>\n\n        <ControlTemplate.Triggers>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" TargetName=\"PART_EditableTextBox\" Value=\"0.7\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocusWithin\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n            </Trigger>\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter TargetName=\"DropDownBorder\" Property=\"Height\" Value=\"95\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"True\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"False\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n    \n    \n    <!--ExtendedComboBox Style-->\n    <Style TargetType=\"{x:Type n:ExtendedComboBox}\" BasedOn=\"{StaticResource {x:Type ComboBox}}\">\n        <Setter Property=\"Template\" Value=\"{StaticResource Template.ExtendedComboBox}\"/>\n        <Setter Property=\"SelectionItemBox\" Value=\"{Binding RelativeSource={RelativeSource Self}, Path=SelectionBoxItem}\"/>\n        <!--<Setter Property=\"SelectionItemBoxTemplate\" Value=\"{Binding RelativeSource={RelativeSource Self}, Path=SelectionBoxItemTemplate}\"/>-->\n        <Setter Property=\"SelectionItemBoxTemplate\" Value=\"{Binding RelativeSource={RelativeSource Self}, Path=ItemTemplate}\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsEditable\" Value=\"True\">\n                <Setter Property=\"IsTabStop\" Value=\"False\"/>\n                <Setter Property=\"Padding\" Value=\"2\"/>\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.ExtendedComboBox.Editable}\"/>\n            </Trigger>\n            \n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"SelectedItem\" Value=\"{x:Null}\"/>\n                    <Condition Property=\"HasItems\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"SelectionItemBox\" Value=\"{Binding RelativeSource={RelativeSource Self}, Path=NoSelectionItem}\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"HasItems\" Value=\"False\">\n                <Setter Property=\"SelectionItemBox\" Value=\"{Binding RelativeSource={RelativeSource Self}, Path=EmptyItem}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/DataGrid.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:n=\"clr-namespace:ScreenToGif.Controls\">\n\n    <Style x:Key=\"Style.ColumnHeader.Thumb\" TargetType=\"{x:Type Thumb}\">\n        <Setter Property=\"Width\" Value=\"8\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Cursor\" Value=\"SizeWE\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                    <Border Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\"/>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridRowHeader}\" x:Shared=\"False\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.RowHeader.Background}\"/>\n        <Setter Property=\"FontWeight\" Value=\"Bold\"/>\n        <Setter Property=\"FontSize\" Value=\"15\"/>\n        <Setter Property=\"Width\" Value=\"20\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"Focusable\" Value=\"False\"/>\n        <!--<Setter Property=\"ClickMode\" Value=\"Release\"/>-->\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.RowHeader.Background.Hovered}\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsRowSelected\" Value=\"True\">\n                <Setter Property=\"Content\">\n                    <Setter.Value>\n                        <Border Margin=\"4\" Height=\"10\" Width=\"10\" Background=\"{DynamicResource Vector.Arrow.Blue.Right}\"/>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridRow}\">\n        <Style.Triggers>\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.DataGrid.Foreground.Selected}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Background.Selected}\"/>\n            </Trigger>\n\n            <Trigger Property=\"ItemsControl.AlternationIndex\" Value=\"0\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Background.Alternation1}\"/>\n            </Trigger>\n\n            <Trigger Property=\"ItemsControl.AlternationIndex\" Value=\"1\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Background.Alternation2}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGrid}\">\n        <Setter Property=\"CanUserAddRows\" Value=\"False\"/>\n        <Setter Property=\"CanUserDeleteRows\" Value=\"False\"/>\n        <Setter Property=\"CanUserResizeRows\" Value=\"False\"/>\n        <Setter Property=\"AutoGenerateColumns\" Value=\"False\"/>\n        <Setter Property=\"HeadersVisibility\" Value=\"Column\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"AlternationCount\" Value=\"2\"/>\n        <Setter Property=\"RowHeight\" Value=\"20\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGrid}\">\n                    <Border x:Name=\"border\" SnapsToDevicePixels=\"True\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n                        <Border.Background>\n                            <SolidColorBrush Color=\"{DynamicResource ControlLightColor}\" />\n                        </Border.Background>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Disabled\">\n                                    <Storyboard>\n                                        <ColorAnimationUsingKeyFrames Storyboard.TargetName=\"border\" Storyboard.TargetProperty=\"(Panel.Background).(SolidColorBrush.Color)\">\n                                            <EasingColorKeyFrame KeyTime=\"0\" Value=\"{DynamicResource ControlLightColor}\" />\n                                        </ColorAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n\n                                <VisualState x:Name=\"Normal\" />\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n\n                        <ScrollViewer x:Name=\"DG_ScrollViewer\" Focusable=\"false\" Background=\"Black\">\n                            <ScrollViewer.Template>\n                                <ControlTemplate TargetType=\"{x:Type ScrollViewer}\">\n                                    <Grid>\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition Width=\"Auto\" />\n                                            <ColumnDefinition Width=\"*\" />\n                                            <ColumnDefinition Width=\"Auto\" />\n                                        </Grid.ColumnDefinitions>\n                                        <Grid.RowDefinitions>\n                                            <RowDefinition Height=\"Auto\" />\n                                            <RowDefinition Height=\"*\" />\n                                            <RowDefinition Height=\"Auto\" />\n                                        </Grid.RowDefinitions>\n\n                                        <Button Focusable=\"false\" Command=\"{x:Static DataGrid.SelectAllCommand}\"\n                                                Style=\"{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}\"\n                                                Visibility=\"{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\"\n                                                Width=\"{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\" />\n\n                                        <DataGridColumnHeadersPresenter x:Name=\"PART_ColumnHeadersPresenter\" Grid.Column=\"1\" Grid.Row=\"0\"\n                                                                        Visibility=\"{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\" />\n\n                                        <ScrollContentPresenter x:Name=\"PART_ScrollContentPresenter\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Grid.Row=\"1\"\n                                                                CanContentScroll=\"{TemplateBinding CanContentScroll}\" />\n\n                                        <ScrollBar x:Name=\"PART_VerticalScrollBar\" Grid.Column=\"2\" Grid.Row=\"1\" Orientation=\"Vertical\" ViewportSize=\"{TemplateBinding ViewportHeight}\"\n                                                   Maximum=\"{TemplateBinding ScrollableHeight}\" Visibility=\"{TemplateBinding ComputedVerticalScrollBarVisibility}\"\n                                                   Value=\"{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\"/>\n\n                                        <Grid Grid.Column=\"1\" Grid.Row=\"2\">\n                                            <Grid.ColumnDefinitions>\n                                                <ColumnDefinition Width=\"{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}\" />\n                                                <ColumnDefinition Width=\"*\" />\n                                            </Grid.ColumnDefinitions>\n\n                                            <ScrollBar x:Name=\"PART_HorizontalScrollBar\" Grid.Column=\"1\" Orientation=\"Horizontal\" ViewportSize=\"{TemplateBinding ViewportWidth}\"\n                                                       Maximum=\"{TemplateBinding ScrollableWidth}\" Visibility=\"{TemplateBinding ComputedHorizontalScrollBarVisibility}\"\n                                                       Value=\"{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\"/>\n                                        </Grid>\n                                    </Grid>\n                                </ControlTemplate>\n                            </ScrollViewer.Template>\n                            <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\n                        </ScrollViewer>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Setter Property=\"HorizontalGridLinesBrush\" Value=\"{DynamicResource Brush.DataGrid.Border}\"/>\n        <Setter Property=\"VerticalGridLinesBrush\" Value=\"{DynamicResource Brush.DataGrid.Border}\"/>\n    </Style>\n\n    <!--Cell Styles-->\n    <Style TargetType=\"{x:Type DataGridCell}\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <!--<Setter Property=\"BorderThickness\" Value=\"1\"/>-->\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"\n                            HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" SnapsToDevicePixels=\"True\">\n                        <ContentPresenter VerticalAlignment=\"Center\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Background.Selected}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.DataGrid.Foreground.Selected}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.DataGrid.Background.Selected}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n\n            <!--<MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                    <Condition Property=\"IsEditing\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n                <Setter Property=\"Background\" Value=\"White\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                    <Condition Property=\"IsEditing\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"White\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource {x:Static SystemColors.HighlightBrushKey}}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                    <Condition Property=\"IsEditing\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"Black\"/>\n                <Setter Property=\"Background\" Value=\"White\"/>\n            </MultiTrigger>-->\n        </Style.Triggers>\n    </Style>\n\n    <Style x:Key=\"Style.Cell.Center\" TargetType=\"{x:Type DataGridCell}\" BasedOn=\"{StaticResource {x:Type DataGridCell}}\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"\n                            HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" SnapsToDevicePixels=\"True\">\n                        <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"Style.Cell.Right\" TargetType=\"{x:Type DataGridCell}\" BasedOn=\"{StaticResource {x:Type DataGridCell}}\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridCell}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                            HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" SnapsToDevicePixels=\"True\">\n                        <ContentPresenter HorizontalAlignment=\"Right\" TextBlock.TextAlignment=\"Right\" VerticalAlignment=\"Center\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--Header Styles-->\n    <Style TargetType=\"{x:Type DataGridColumnHeader}\">\n        <Setter Property=\"Height\" Value=\"24\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.DataGrid.Header.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"0,0,1,1\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.DataGrid.Header.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Header.Background}\"/>\n        <Setter Property=\"Padding\" Value=\"2,0\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridColumnHeader}\">\n                    <Grid>\n                        <n:DataGridHeaderBorder BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                                Background=\"{TemplateBinding Background}\" IsClickable=\"{TemplateBinding CanUserSort}\" \n                                                IsPressed=\"{TemplateBinding IsPressed}\" IsHovered=\"{TemplateBinding IsMouseOver}\" \n                                                Padding=\"{TemplateBinding Padding}\" SortDirection=\"{TemplateBinding SortDirection}\" \n                                                SeparatorBrush=\"{TemplateBinding SeparatorBrush}\" SeparatorVisibility=\"{TemplateBinding SeparatorVisibility}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <ContentPresenter Grid.Column=\"0\" x:Name=\"Presenter\" HorizontalAlignment=\"Left\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\n\n                                <Path Grid.Column=\"1\" x:Name=\"SortArrow\" Width=\"8\" Height=\"6\" VerticalAlignment=\"Center\" Fill=\"{DynamicResource Brush.DataGrid.Header.Glyph}\"\n                                      Margin=\"2,0\" Stretch=\"Fill\" RenderTransformOrigin=\"0.5,0.5\" Data=\"M0,0 L1,0 0.5,1 z\" Visibility=\"Collapsed\"/>\n                            </Grid>\n                        </n:DataGridHeaderBorder>\n\n                        <Thumb x:Name=\"PART_LeftHeaderGripper\" HorizontalAlignment=\"Left\" Style=\"{StaticResource Style.ColumnHeader.Thumb}\"/>\n                        <Thumb x:Name=\"PART_RightHeaderGripper\" HorizontalAlignment=\"Right\" Style=\"{StaticResource Style.ColumnHeader.Thumb}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"SortDirection\" Value=\"Ascending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"SortArrow\" Property=\"RenderTransform\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"180\"/>\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n                        <Trigger Property=\"SortDirection\" Value=\"Descending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"{DynamicResource Brush.DataGrid.Header.Glyph.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"{DynamicResource Brush.DataGrid.Header.Glyph.Pressed}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Header.Background.Hover}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.DataGrid.Header.Foreground.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.DataGrid.Header.Background.Pressed}\"/>\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.DataGrid.Header.Foreground.Pressed}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridColumnHeader}\" x:Key=\"Style.Header.Center\" BasedOn=\"{StaticResource {x:Type DataGridColumnHeader}}\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridColumnHeader}\">\n                    <Grid>\n                        <n:DataGridHeaderBorder BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                                Background=\"{TemplateBinding Background}\" IsClickable=\"{TemplateBinding CanUserSort}\" \n                                                IsPressed=\"{TemplateBinding IsPressed}\" IsHovered=\"{TemplateBinding IsMouseOver}\" \n                                                Padding=\"{TemplateBinding Padding}\" SortDirection=\"{TemplateBinding SortDirection}\" \n                                                SeparatorBrush=\"{TemplateBinding SeparatorBrush}\" SeparatorVisibility=\"{TemplateBinding SeparatorVisibility}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <ContentPresenter Grid.Column=\"0\" x:Name=\"Presenter\" HorizontalAlignment=\"Center\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n\n                                <Path Grid.Column=\"1\" x:Name=\"SortArrow\" Width=\"8\" Height=\"6\" VerticalAlignment=\"Center\" Fill=\"{DynamicResource Brush.DataGrid.Header.Glyph}\"\n                                      Margin=\"2,0\" Stretch=\"Fill\" RenderTransformOrigin=\"0.5,0.5\" Data=\"M0,0 L1,0 0.5,1 z\" Visibility=\"Collapsed\"/>\n                            </Grid>\n                        </n:DataGridHeaderBorder>\n\n                        <Thumb x:Name=\"PART_LeftHeaderGripper\" HorizontalAlignment=\"Left\" Style=\"{StaticResource Style.ColumnHeader.Thumb}\"/>\n                        <Thumb x:Name=\"PART_RightHeaderGripper\" HorizontalAlignment=\"Right\" Style=\"{StaticResource Style.ColumnHeader.Thumb}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"SortDirection\" Value=\"Ascending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"SortArrow\" Property=\"RenderTransform\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"180\"/>\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n                        <Trigger Property=\"SortDirection\" Value=\"Descending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"{DynamicResource Brush.DataGrid.Header.Glyph.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"{DynamicResource Brush.DataGrid.Header.Glyph.Pressed}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type DataGridColumnHeader}\" x:Key=\"Style.Header.Right\" BasedOn=\"{StaticResource {x:Type DataGridColumnHeader}}\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type DataGridColumnHeader}\">\n                    <Grid>\n                        <n:DataGridHeaderBorder BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                                Background=\"{TemplateBinding Background}\" IsClickable=\"{TemplateBinding CanUserSort}\" \n                                                IsPressed=\"{TemplateBinding IsPressed}\" IsHovered=\"{TemplateBinding IsMouseOver}\" \n                                                Padding=\"{TemplateBinding Padding}\" SortDirection=\"{TemplateBinding SortDirection}\" \n                                                SeparatorBrush=\"{TemplateBinding SeparatorBrush}\" SeparatorVisibility=\"{TemplateBinding SeparatorVisibility}\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Path Grid.Column=\"0\" x:Name=\"SortArrow\" Width=\"8\" Height=\"6\" VerticalAlignment=\"Center\" Fill=\"{DynamicResource Brush.DataGrid.Header.Glyph}\"\n                                      Margin=\"2,0\" Stretch=\"Fill\" RenderTransformOrigin=\"0.5,0.5\" Data=\"M0,0 L1,0 0.5,1 z\" Visibility=\"Collapsed\"/>\n\n                                <ContentPresenter Grid.Column=\"1\" x:Name=\"Presenter\" HorizontalAlignment=\"Right\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                            </Grid>\n                        </n:DataGridHeaderBorder>\n\n                        <Thumb x:Name=\"PART_LeftHeaderGripper\" HorizontalAlignment=\"Left\" Style=\"{StaticResource Style.ColumnHeader.Thumb}\"/>\n                        <Thumb x:Name=\"PART_RightHeaderGripper\" HorizontalAlignment=\"Right\" Style=\"{StaticResource Style.ColumnHeader.Thumb}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"SortDirection\" Value=\"Ascending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"SortArrow\" Property=\"RenderTransform\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"180\"/>\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n\n                        <Trigger Property=\"SortDirection\" Value=\"Descending\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"{DynamicResource Brush.DataGrid.Header.Glyph.Hover}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"SortArrow\" Property=\"Fill\" Value=\"{DynamicResource Brush.DataGrid.Header.Glyph.Pressed}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/EncoderListViewItem.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n                    xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\">\n\n    <c:DoubleToPercentage x:Key=\"DoubleToPercentageConverter\"/>\n    <c:BytesToSize x:Key=\"BytesToSizeConverter\"/>\n\n    <ControlTemplate x:Key=\"Template.Encoding\" TargetType=\"{x:Type n:EncoderListViewItem}\">\n        <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition Height=\"6\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n                \n                <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"InternalBorder\" Background=\"{TemplateBinding Icon}\" \n                        Margin=\"3\" Visibility=\"Visible\" Effect=\"{x:Null}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"CancelButton\" Padding=\"2\" Icon=\"{DynamicResource Vector.Close}\" ContentWidth=\"15\" ContentHeight=\"15\"\n                                  VerticalAlignment=\"Stretch\" HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Stretch\"\n                                  Visibility=\"Hidden\" MaxWidth=\"{Binding Path=Height, RelativeSource={RelativeSource Mode=Self}}\" Style=\"{DynamicResource Style.Button.NoText}\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip x:Name=\"CancelToolTip\" Content=\"{DynamicResource S.Action.Cancel}\" Placement=\"Left\" VerticalOffset=\"-5\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" x:Name=\"PercentageLabel\" Content=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Percentage}\" ContentStringFormat=\"{}{0:##0.0} %\"\n                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" HorizontalContentAlignment=\"Center\"\n                       FontFamily=\"{DynamicResource FontFamilyLight}\" BorderThickness=\"0\" MinWidth=\"50\"/>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"2\" Content=\"{TemplateBinding Text}\" HorizontalAlignment=\"Stretch\" Padding=\"0,1,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <ProgressBar Grid.Row=\"1\" Grid.Column=\"2\" Value=\"{TemplateBinding Percentage}\" IsIndeterminate=\"{TemplateBinding IsIndeterminate}\"\n                             Minimum=\"0\" Maximum=\"100\" Height=\"4\" HorizontalAlignment=\"Stretch\" Orientation=\"Horizontal\" HorizontalContentAlignment=\"Stretch\"/>\n            </Grid>\n        </Border>\n\n        <ControlTemplate.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                    <Condition Property=\"IsEnabled\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter TargetName=\"CancelButton\" Property=\"Visibility\" Value=\"Visible\"/>\n                <Setter TargetName=\"InternalBorder\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"OutputType\" Value=\"Gif\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Gif}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Apng\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Apng}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Webp\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Webp}\"/>\n            </Trigger>\n\n            <Trigger Property=\"OutputType\" Value=\"Bmp\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Bmp}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Jpeg\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Jpg}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Png\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Apng}\"/>\n            </Trigger>\n            \n            <Trigger Property=\"OutputType\" Value=\"Avi\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Mov\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Mp4\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Mkv\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Webm\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            \n            <Trigger Property=\"OutputType\" Value=\"Psd\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Psd}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Stg\">\n                <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Project}\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsIndeterminate\" Value=\"True\">\n                <Setter TargetName=\"PercentageLabel\" Property=\"Content\" Value=\"~\"/>\n            </Trigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.Completed\" TargetType=\"{x:Type n:EncoderListViewItem}\">\n        <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"\n                Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"InternalBorder\" Background=\"{DynamicResource Vector.Ok.Round}\"\n                        Margin=\"3\" Visibility=\"Visible\" Effect=\"{x:Null}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                \n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"CancelButton\" Padding=\"2\" Icon=\"{DynamicResource Vector.Eraser}\" ContentWidth=\"15\" ContentHeight=\"15\"\n                                  VerticalAlignment=\"Stretch\" HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Stretch\"\n                                  Visibility=\"Hidden\" MaxWidth=\"{Binding Path=Height, RelativeSource={RelativeSource Mode=Self}}\" Style=\"{DynamicResource Style.Button.NoText}\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip x:Name=\"CancelToolTip\" Content=\"{DynamicResource S.Encoder.Remove}\" Placement=\"Left\" VerticalOffset=\"-5\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FileSizeLabel\" Content=\"{TemplateBinding SizeInBytes, Converter={StaticResource BytesToSizeConverter}}\" \n                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"0\"\n                       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" FontStyle=\"Italic\" BorderThickness=\"0\" MinWidth=\"45\"/>\n\n                <StackPanel Grid.Column=\"2\"  HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\">\n                    <WrapPanel Orientation=\"Horizontal\">\n                        <TextBlock Text=\"{DynamicResource S.Encoder.Completed}\" Margin=\"0,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                        <TextBlock x:Name=\"CopiedTextBlock\" Visibility=\"Collapsed\" Margin=\"0,0,5,0\">\n                            <Run Text=\"{DynamicResource S.Encoder.Completed.Clipboard}\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        </TextBlock>\n\n                        <TextBlock x:Name=\"CopyFailedTextBlock\" Visibility=\"Visible\" Margin=\"0,0,5,0\">\n                            <Hyperlink x:Name=\"CopyFailedHyperlink\" ToolTip=\"{DynamicResource S.Encoder.Error.Info}\">\n                                <Run Text=\"{DynamicResource S.Encoder.Completed.Clipboard.Fail}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n\n                        <TextBlock x:Name=\"ExecutedTextBlock\" Visibility=\"Collapsed\" Margin=\"0,0,5,0\">\n                            <Hyperlink x:Name=\"ExecutedHyperlink\" ToolTip=\"{DynamicResource S.Encoder.Completed.Command.Output}\">\n                                <Run Text=\"{DynamicResource S.Encoder.Completed.Command}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n\n                        <TextBlock x:Name=\"ExecutionFailedTextBlock\" Visibility=\"Visible\" Margin=\"0,0,5,0\">\n                            <Hyperlink x:Name=\"ExecutionFailedHyperlink\" ToolTip=\"{DynamicResource S.Encoder.Error.Info}\">\n                                <Run Text=\"{DynamicResource S.Encoder.Completed.Command.Fail}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n                    </WrapPanel>\n\n                    <StackPanel x:Name=\"UploadStackPanel\" Orientation=\"Horizontal\" Visibility=\"Collapsed\">\n                        <TextBlock x:Name=\"UploadedTextBlock\" Visibility=\"Collapsed\" ToolTip=\"{DynamicResource S.Encoder.Completed.Upload.Delete}\">\n                            <Hyperlink x:Name=\"UploadHyperlink\">\n                                <Run Text=\"{TemplateBinding UploadLinkDisplay}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n                        <TextBlock x:Name=\"UploadFailedTextBlock\" Visibility=\"Visible\">\n                            <Hyperlink x:Name=\"UploadFailedHyperlink\" ToolTip=\"{DynamicResource S.Encoder.Error.Info}\">\n                                <Run Text=\"{DynamicResource S.Encoder.Completed.Upload.Fail}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n                    </StackPanel>\n                </StackPanel>\n\n                <TextBlock Grid.Column=\"3\" x:Name=\"TimeTextBlock\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TotalTime, StringFormat={}{0:mm}:{0:ss}}\"\n                           Foreground=\"{DynamicResource Element.Foreground.Gray112}\" VerticalAlignment=\"Center\" Margin=\"5,3\">\n                    <TextBlock.ToolTip>\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Encoder.Completed.Elapsed}\"/>\n\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Encoder.Completed.Elapsed.Analysis}\"/>\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TimeToAnalyze, StringFormat={}{0:mm}:{0:ss}:{0:fff}}\"/>\n\n                            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Encoder.Completed.Elapsed.Encoding}\"/>\n                            <TextBlock Grid.Row=\"2\" Grid.Column=\"1\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TimeToEncode, StringFormat={}{0:mm}:{0:ss}:{0:fff}}\"/>\n\n                            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" x:Name=\"UploadTimeHeaderTextBlock\" Text=\"{DynamicResource S.Encoder.Completed.Elapsed.Upload}\"/>\n                            <TextBlock Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"UploadTimeTextBlock\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TimeToUpload, StringFormat={}{0:mm}:{0:ss}:{0:fff}}\"/>\n\n                            <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" x:Name=\"CopyTimeHeaderTextBlock\" Text=\"{DynamicResource S.Encoder.Completed.Elapsed.Copy}\"/>\n                            <TextBlock Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"CopyTimeTextBlock\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TimeToCopy, StringFormat={}{0:mm}:{0:ss}:{0:fff}}\"/>\n\n                            <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" x:Name=\"ExecuteTimeHeaderTextBlock\" Text=\"{DynamicResource S.Encoder.Completed.Elapsed.Commands}\"/>\n                            <TextBlock Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"ExecuteTimeTextBlock\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TimeToExecute, StringFormat={}{0:mm}:{0:ss}:{0:fff}}\"/>\n                        </Grid>\n                    </TextBlock.ToolTip>\n                </TextBlock>\n\n                <n:ExtendedButton Grid.Column=\"4\" x:Name=\"FileButton\" Style=\"{DynamicResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Gif}\" \n                                  Padding=\"2,0\" ContentWidth=\"20\" ContentHeight=\"20\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\">\n                    <n:ExtendedButton.ToolTip>\n                        <TextBlock Foreground=\"{DynamicResource Element.Foreground}\">\n                            <Run Text=\"{DynamicResource S.Encoder.OpenFile}\"/>\n                            <LineBreak/>\n                            <Run Text=\"{TemplateBinding OutputFilename}\"/>\n                        </TextBlock>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <n:ExtendedButton Grid.Column=\"5\" x:Name=\"FolderButton\" Style=\"{DynamicResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Open}\" \n                                  Padding=\"2,0\" ContentWidth=\"20\" ContentHeight=\"20\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\">\n                    <n:ExtendedButton.ToolTip>\n                        <TextBlock Foreground=\"{DynamicResource Element.Foreground}\">\n                            <Run Text=\"{DynamicResource S.Encoder.ExploreFolder}\"/>\n                            <LineBreak/>\n                            <Run Text=\"{TemplateBinding OutputPath}\"/>\n                        </TextBlock>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n            </Grid>\n\n            <Border.ContextMenu>\n                <ContextMenu>\n                    <n:ExtendedMenuItem x:Name=\"CopyMenuItem\" Header=\"{DynamicResource S.Editor.Home.Copy}\" Icon=\"{DynamicResource Vector.Copy}\"/>\n                    <Separator/>\n                    <n:ExtendedMenuItem x:Name=\"CopyImageMenuItem\" Header=\"{DynamicResource S.Encoder.Copy.Image}\" Visibility=\"Collapsed\"/>\n                    <n:ExtendedMenuItem x:Name=\"CopyFilenameMenuItem\" Header=\"{DynamicResource S.Encoder.Copy.Filename}\"/>\n                    <n:ExtendedMenuItem x:Name=\"CopyFolderMenuItem\" Header=\"{DynamicResource S.Encoder.Copy.Folder}\"/>\n                    <n:ExtendedMenuItem x:Name=\"CopyLinkMenuItem\" Header=\"{DynamicResource S.Encoder.Copy.Link}\" Visibility=\"Collapsed\"/>\n                </ContextMenu>\n            </Border.ContextMenu>\n        </Border>\n\n        <ControlTemplate.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                    <Condition Property=\"IsEnabled\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter TargetName=\"CancelButton\" Property=\"Visibility\" Value=\"Visible\"/>\n                <Setter TargetName=\"InternalBorder\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"OutputType\" Value=\"Gif\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Gif}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Apng\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Apng}\"/>\n                <Setter TargetName=\"CopyImageMenuItem\" Property=\"Visibility\" Value=\"Visible\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Webp\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Webp}\"/>\n            </Trigger>\n\n            <Trigger Property=\"OutputType\" Value=\"Bmp\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Bmp}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Jpeg\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Jpeg}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Png\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Apng}\"/>\n            </Trigger>\n            \n            <Trigger Property=\"OutputType\" Value=\"Avi\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Mov\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Mp4\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Mkv\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Webm\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Video}\"/>\n            </Trigger>\n            \n            <Trigger Property=\"OutputType\" Value=\"Psd\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Psd}\"/>\n            </Trigger>\n            <Trigger Property=\"OutputType\" Value=\"Stg\">\n                <Setter TargetName=\"FileButton\" Property=\"Icon\" Value=\"{DynamicResource Vector.Project}\"/>\n            </Trigger>\n\n            <Trigger Property=\"CopiedToClipboard\" Value=\"True\">\n                <Setter TargetName=\"CopiedTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n            </Trigger>\n\n            <Trigger Property=\"CopyTaskException\" Value=\"{x:Null}\">\n                <Setter TargetName=\"CopyFailedTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n\n            <Trigger Property=\"CommandExecuted\" Value=\"True\">\n                <Setter TargetName=\"ExecutedTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n            </Trigger>\n\n            <Trigger Property=\"CommandTaskException\" Value=\"{x:Null}\">\n                <Setter TargetName=\"ExecutionFailedTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n\n            <Trigger Property=\"AreMultipleFiles\" Value=\"True\">\n                <Setter TargetName=\"FileButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n            \n            <Trigger Property=\"Uploaded\" Value=\"True\">\n                <Setter TargetName=\"UploadedTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                <Setter TargetName=\"CopyLinkMenuItem\" Property=\"Visibility\" Value=\"Visible\"/>\n            </Trigger>\n\n            <Trigger Property=\"UploadTaskException\" Value=\"{x:Null}\">\n                <Setter TargetName=\"UploadFailedTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n\n            <Trigger SourceName=\"UploadedTextBlock\" Property=\"Visibility\" Value=\"Visible\">\n                <Setter TargetName=\"UploadStackPanel\" Property=\"Visibility\" Value=\"Visible\"/>\n            </Trigger>\n            <Trigger SourceName=\"UploadFailedTextBlock\" Property=\"Visibility\" Value=\"Visible\">\n                <Setter TargetName=\"UploadStackPanel\" Property=\"Visibility\" Value=\"Visible\"/>\n            </Trigger>\n\n            <Trigger Property=\"TotalTime\" Value=\"{x:Static s:TimeSpan.Zero}\">\n                <Setter TargetName=\"TimeTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n            <Trigger Property=\"TimeToUpload\" Value=\"{x:Static s:TimeSpan.Zero}\">\n                <Setter TargetName=\"UploadTimeHeaderTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                <Setter TargetName=\"UploadTimeTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n            <Trigger Property=\"TimeToCopy\" Value=\"{x:Static s:TimeSpan.Zero}\">\n                <Setter TargetName=\"CopyTimeHeaderTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                <Setter TargetName=\"CopyTimeTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n            <Trigger Property=\"TimeToExecute\" Value=\"{x:Static s:TimeSpan.Zero}\">\n                <Setter TargetName=\"ExecuteTimeHeaderTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                <Setter TargetName=\"ExecuteTimeTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </Trigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.Error\" TargetType=\"{x:Type n:EncoderListViewItem}\">\n        <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"InternalBorder\" Background=\"{DynamicResource Vector.Cancel.Round}\" \n                        Margin=\"3\" Visibility=\"Visible\" Effect=\"{x:Null}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"CancelButton\" Padding=\"2\" Icon=\"{DynamicResource Vector.Eraser}\" ContentWidth=\"15\" ContentHeight=\"15\" \n                                  VerticalAlignment=\"Stretch\" HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Stretch\"\n                                  Visibility=\"Hidden\" MaxWidth=\"{Binding Path=Height, RelativeSource={RelativeSource Mode=Self}}\" Style=\"{DynamicResource Style.Button.NoText}\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip Content=\"{DynamicResource S.Encoder.Remove}\" Placement=\"Left\" VerticalOffset=\"-5\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"2\" Content=\"{DynamicResource S.Encoder.Error}\" Foreground=\"{DynamicResource Element.Foreground}\" \n                       HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\" Padding=\"0,1,0,0\"/>\n\n                <n:ExtendedButton Grid.Column=\"3\" x:Name=\"DetailsButton\" Style=\"{DynamicResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Application}\" \n                                  Padding=\"2,0\" ContentWidth=\"20\" ContentHeight=\"20\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip Content=\"{DynamicResource S.Encoder.Details}\" Placement=\"Top\" HorizontalOffset=\"-5\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n            </Grid>\n        </Border>\n\n        <ControlTemplate.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                    <Condition Property=\"IsEnabled\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter TargetName=\"CancelButton\" Property=\"Visibility\" Value=\"Visible\"/>\n                <Setter TargetName=\"InternalBorder\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.Canceled\" TargetType=\"{x:Type n:EncoderListViewItem}\">\n        <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition Height=\"6\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"CancelButton\" Padding=\"2\" Icon=\"{DynamicResource Vector.Close}\" ContentWidth=\"15\" ContentHeight=\"15\"  \n                                  VerticalAlignment=\"Stretch\" HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Stretch\"\n                                  MaxWidth=\"{Binding Path=Height, RelativeSource={RelativeSource Mode=Self}}\" Style=\"{DynamicResource Style.Button.NoText}\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip x:Name=\"CancelToolTip\" Content=\"{DynamicResource S.Encoder.Remove}\" Placement=\"Left\" VerticalOffset=\"-5\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" x:Name=\"PercentageLabel\" Content=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Percentage}\" ContentStringFormat=\"{}{0:##0.0} %\" \n                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" HorizontalContentAlignment=\"Center\"\n                       FontFamily=\"{DynamicResource FontFamilyLight}\" BorderThickness=\"0\" MinWidth=\"45\"/>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"2\" Content=\"{DynamicResource S.Encoder.Canceled}\" Foreground=\"{DynamicResource Element.Foreground}\" HorizontalAlignment=\"Stretch\" Padding=\"0,1,0,0\"/>\n\n                <ProgressBar Grid.Row=\"1\" Grid.Column=\"2\" Value=\"{TemplateBinding Percentage}\" Minimum=\"0\" Maximum=\"100\" Height=\"4\" HorizontalAlignment=\"Stretch\" Orientation=\"Horizontal\" HorizontalContentAlignment=\"Stretch\"/>\n            </Grid>\n        </Border>\n    </ControlTemplate>\n\n    <ControlTemplate x:Key=\"Template.File\" TargetType=\"{x:Type n:EncoderListViewItem}\">\n        <Border x:Name=\"MainBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"InternalBorder\" Background=\"{DynamicResource Vector.FilePermission}\" Margin=\"3\" \n                        Visibility=\"Visible\" Effect=\"{x:Null}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                \n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"CancelButton\" Padding=\"2\" Icon=\"{DynamicResource Vector.Eraser}\" ContentWidth=\"15\" ContentHeight=\"15\" \n                                  VerticalAlignment=\"Stretch\" HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Stretch\"\n                                  Visibility=\"Hidden\" MaxWidth=\"{Binding Path=Height, RelativeSource={RelativeSource Mode=Self}}\" \n                                  Style=\"{DynamicResource Style.Button.NoText}\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip Content=\"{DynamicResource S.Encoder.Remove}\" Placement=\"Left\" VerticalOffset=\"-5\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"2\" Content=\"{DynamicResource S.Encoder.DeletedMoved}\" Foreground=\"{DynamicResource Element.Foreground}\" \n                       HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\" Padding=\"0,1,0,0\"/>\n            </Grid>\n        </Border>\n\n        <ControlTemplate.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                    <Condition Property=\"IsEnabled\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter TargetName=\"CancelButton\" Property=\"Visibility\" Value=\"Visible\"/>\n                <Setter TargetName=\"InternalBorder\" Property=\"Visibility\" Value=\"Collapsed\"/>\n            </MultiTrigger>\n        </ControlTemplate.Triggers>\n    </ControlTemplate>\n\n    <!--Encoder ListViewItem-->\n    <Style TargetType=\"{x:Type n:EncoderListViewItem}\">\n        <Setter Property=\"MinHeight\" Value=\"36\"/>\n        <Setter Property=\"Padding\" Value=\"1\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Style.Triggers>\n            <Trigger Property=\"Status\" Value=\"Processing\">\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.Encoding}\"/>\n            </Trigger>\n            <Trigger Property=\"Status\" Value=\"Completed\">\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.Completed}\"/>\n            </Trigger>\n            <Trigger Property=\"Status\" Value=\"Error\">\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.Error}\"/>\n            </Trigger>\n            <Trigger Property=\"Status\" Value=\"Canceled\">\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.Canceled}\"/>\n            </Trigger>\n            <Trigger Property=\"Status\" Value=\"FileDeletedOrMoved\">\n                <Setter Property=\"Template\" Value=\"{StaticResource Template.File}\"/>\n            </Trigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                    <Condition Property=\"IsEnabled\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"Selector.IsSelectionActive\" Value=\"False\"/>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Item.SelectedInactive.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Item.SelectedInactive.Border}\"/>\n            </MultiTrigger>\n\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"Selector.IsSelectionActive\" Value=\"True\"/>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Background\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Generic.xaml",
    "content": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n                    xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n                    xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n                    xmlns:s=\"clr-namespace:System;assembly=mscorlib\"\n                    xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\">\n\n    <ResourceDictionary.MergedDictionaries>\n        <ResourceDictionary Source=\"/ScreenToGif;component/Themes/Common.xaml\"/>\n        <ResourceDictionary Source=\"/ScreenToGif;component/Themes/EncoderListViewItem.xaml\"/>\n        <ResourceDictionary Source=\"/ScreenToGif;component/Themes/Controls/ExtendedComboBox.xaml\"/>\n    </ResourceDictionary.MergedDictionaries>\n\n    <!--Converters-->\n    <BooleanToVisibilityConverter x:Key=\"Bool2VisibilityConverterGeneric\"/>\n    <c:StringToInt x:Key=\"StringToInt\"/>\n    <c:ContentToVisibility x:Key=\"ContentToVisibility\"/>\n    <c:UriToBitmap x:Key=\"UriToBitmapConverter\"/>\n    <c:IntToDelayString x:Key=\"IntToDelayStringConverter\"/>\n    <c:DoubleToPercentage x:Key=\"DoubleToPercentageConverter\"/>\n    <c:BytesToSize x:Key=\"BytesToSizeConverter\"/>\n    <c:ColorToAlpha x:Key=\"ColorToAlphaConverter\"/>\n    <c:IntToString x:Key=\"IntToStringConverter\"/>\n    <c:MultiLineTitle x:Key=\"MultiLineTitleConverter\"/>\n    <c:KeysToString x:Key=\"KeysToString\"/>\n    <c:IntToRect x:Key=\"IntToRect\"/>\n    <c:ColorToBrush x:Key=\"ColorToBrush\"/>\n    <c:InvertedBool x:Key=\"InvertedBool\"/>\n    <c:ScaleConverter x:Key=\"ScaleConverter\"/>\n    <c:CenterPopupConverter x:Key=\"CenterPopupConverter\"/>\n    <c:BoolAndToVisibility x:Key=\"BoolAndToVisibility\"/>\n    <c:IntToBool x:Key=\"IntToBool\"/>\n    <c:EnumToBool x:Key=\"EnumToBool\"/>\n    <c:TimeSpanToTotalMilliseconds x:Key=\"TimeSpanToTotalMilliseconds\"/>\n    <c:TimeSpanToString x:Key=\"TimeSpanToString\"/>\n\n    <!--Window Style -->\n    <Style TargetType=\"{x:Type n:LightWindow}\">\n        <Setter Property=\"WindowStyle\" Value=\"None\"/>\n        <Setter Property=\"ResizeMode\" Value=\"NoResize\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Panel.Background}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Light}\"/>\n        <Setter Property=\"MinHeight\" Value=\"100\"/>\n        <Setter Property=\"MinWidth\" Value=\"180\"/>\n        <Setter Property=\"Title\" Value=\"ScreenToGif\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"False\"/>\n        <Setter Property=\"UseLayoutRounding\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:LightWindow}\">\n                    <Border x:Name=\"MainBorder\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"4\">\n                        <AdornerDecorator>\n                            <Grid x:Name=\"MainGrid\" Background=\"{x:Null}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"5\" x:Name=\"FirstRow\"/>\n                                    <RowDefinition Height=\"25\" x:Name=\"SecondRow\"/>\n                                    <RowDefinition/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Grid Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" x:Name=\"TopGrid\" Background=\"{TemplateBinding Background}\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Column=\"0\" x:Name=\"CaptionText\" Text=\"{TemplateBinding Title}\" FontFamily=\"{DynamicResource FontFamilyNormal}\" FontSize=\"16\" VerticalAlignment=\"Center\"\n                                               FontWeight=\"Regular\" Margin=\"5,0,0,0\" Foreground=\"{TemplateBinding Foreground}\"/>\n\n                                    <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Recorder.ClickOrPress}\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" \n                                                   Foreground=\"{DynamicResource Element.Foreground.Gray112}\">\n                                        <TextBlock.Visibility>\n                                            <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.Interaction}\"/>\n                                                <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"FrameCount\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"0\"/>\n                                            </MultiBinding>\n                                        </TextBlock.Visibility>\n                                    </TextBlock>\n\n                                    <n:DisplayTimer Grid.Column=\"2\" x:Name=\"DisplayTimer\" Margin=\"5\" CornerRadius=\"3\" Padding=\"5,0\" CapturedCount=\"{TemplateBinding FrameCount}\" IsImpreciseCapture=\"{TemplateBinding HasImpreciseCapture}\"/>\n\n                                    <n:ExtendedButton Grid.Column=\"3\" x:Name=\"MinimizeButton\" Style=\"{DynamicResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Minimize}\" \n                                                      Width=\"30\" Padding=\"6\" ContentWidth=\"14\" ContentHeight=\"14\" TabIndex=\"9\"/>\n                                    <n:ExtendedButton Grid.Column=\"4\" x:Name=\"CloseButton\" Style=\"{DynamicResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Close}\" \n                                                      Width=\"30\" Padding=\"6\" ContentWidth=\"14\" ContentHeight=\"14\" TabIndex=\"10\"/>\n                                </Grid>\n\n                                <Rectangle Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"TopLeftRectangle\" Stroke=\"{x:Null}\" Fill=\"{TemplateBinding Background}\" Cursor=\"SizeNWSE\" Width=\"5\" Height=\"5\"/>\n                                <Rectangle Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TopRectangle\" Stroke=\"{x:Null}\" Fill=\"Transparent\" Cursor=\"SizeNS\" Height=\"5\"/>\n                                <Rectangle Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"TopRightRectangle\" Stroke=\"{x:Null}\" Fill=\"{TemplateBinding Background}\" Cursor=\"SizeNESW\" Width=\"5\" Height=\"5\"/>\n                                <Rectangle Grid.Row=\"1\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"LeftRectangle\" Stroke=\"{x:Null}\" Fill=\"{TemplateBinding Background}\" Cursor=\"SizeWE\" Width=\"5\"/>\n\n                                <ContentPresenter Grid.Row=\"2\" Grid.Column=\"1\" Grid.RowSpan=\"2\" x:Name=\"Presenter\"/>\n\n                                <Rectangle Grid.Row=\"1\" Grid.Column=\"2\" Grid.RowSpan=\"2\" x:Name=\"RightRectangle\" Stroke=\"{x:Null}\" Fill=\"{TemplateBinding Background}\" Cursor=\"SizeWE\" Width=\"5\"/>\n                                <Rectangle Grid.Row=\"3\" Grid.Column=\"0\" x:Name=\"BottomLeftRectangle\" Stroke=\"{x:Null}\" Fill=\"{TemplateBinding Background}\" Cursor=\"SizeNESW\" Width=\"5\" Height=\"5\"/>\n                                <Rectangle Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"BottomRectangle\" Stroke=\"{x:Null}\" Fill=\"Transparent\" Cursor=\"SizeNS\" Height=\"5\"/>\n                                <Rectangle Grid.Row=\"3\" Grid.Column=\"2\" x:Name=\"BottomRightRectangle\" Stroke=\"{x:Null}\" Fill=\"{TemplateBinding Background}\" Cursor=\"SizeNWSE\" Height=\"5\" Width=\"5\"/>\n                            </Grid>\n                        </AdornerDecorator>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsRecording\" Value=\"True\">\n                            <Setter TargetName=\"MinimizeButton\" Property=\"IsEnabled\" Value=\"False\"/>\n                            <Setter TargetName=\"CloseButton\" Property=\"IsEnabled\" Value=\"False\"/>\n\n                            <Setter TargetName=\"TopLeftRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"TopRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"TopRightRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"LeftRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"RightRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"BottomLeftRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"BottomRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"BottomRightRectangle\" Property=\"IsHitTestVisible\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsThin\" Value=\"True\">\n                            <Setter TargetName=\"FirstRow\" Property=\"Height\" Value=\"2\"/>\n                            <Setter TargetName=\"SecondRow\" Property=\"Height\" Value=\"0\"/>\n                            <Setter TargetName=\"TopGrid\" Property=\"Visibility\" Value=\"Collapsed\"/>\n\n                            <Setter TargetName=\"TopRectangle\" Property=\"Fill\" Value=\"{Binding ElementName=LeftRectangle, Path=Fill}\"/>\n                            <Setter TargetName=\"TopRectangle\" Property=\"Height\" Value=\"2\"/>\n                            <Setter TargetName=\"BottomRectangle\" Property=\"Height\" Value=\"2\"/>\n                            <Setter TargetName=\"LeftRectangle\" Property=\"Width\" Value=\"2\"/>\n                            <Setter TargetName=\"RightRectangle\" Property=\"Width\" Value=\"2\"/>\n                            <Setter TargetName=\"BottomLeftRectangle\" Property=\"Width\" Value=\"2\"/>\n                            <Setter TargetName=\"BottomRightRectangle\" Property=\"Width\" Value=\"2\"/>\n                            <Setter TargetName=\"TopLeftRectangle\" Property=\"Width\" Value=\"2\"/>\n                            <Setter TargetName=\"TopRightRectangle\" Property=\"Width\" Value=\"2\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--ExtendedTexBox Style-->\n    <Style TargetType=\"{x:Type n:ExtendedTextBox}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Padding\" Value=\"2\"/>\n        <Setter Property=\"MinHeight\" Value=\"23\"/>\n        <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"AllowDrop\" Value=\"True\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedTextBox}\">\n                    <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                            VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\"\n                            Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                          VerticalScrollBarVisibility=\"Hidden\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                            <TextBlock x:Name=\"WatermarkTextBlock\" Text=\"{TemplateBinding Watermark}\" IsHitTestVisible=\"False\" Foreground=\"{DynamicResource Element.Foreground.Watermark}\"\n                                       Padding=\"3,2\" Visibility=\"Collapsed\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <Path x:Name=\"InnerPath\" Data=\"M 0,0 6,6 0,6 z\" Fill=\"{DynamicResource Element.Border.Required}\" HorizontalAlignment=\"Left\" \n                                  VerticalAlignment=\"Bottom\" Opacity=\"0\" ToolTip=\"{DynamicResource S.Required}\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsObligatory\" Value=\"True\"/>\n                                <Condition Property=\"Text\" Value=\"{x:Static s:String.Empty}\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Required}\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"InnerPath\" Value=\"1\"/>\n                        </MultiTrigger>\n                        <Trigger Property=\"IsReadOnly\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.ReadOnly}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.7\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"InnerPath\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </Trigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Text\" Value=\"{x:Static s:String.Empty}\"/>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"Visibility\" TargetName=\"WatermarkTextBlock\" Value=\"Visible\"/>\n                        </MultiTrigger>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Text\" Value=\"{x:Null}\"/>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"Visibility\" TargetName=\"WatermarkTextBlock\" Value=\"Visible\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                                <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                            <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"InnerPath\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </MultiTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n    <!--IntegerBox Style-->\n    <Style TargetType=\"{x:Type n:IntegerBox}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Height\" Value=\"23\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"MaxLength\" Value=\"9\"/>\n        <Setter Property=\"Padding\" Value=\"2,0\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:IntegerBox}\">\n                    <Border x:Name=\"border\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" CornerRadius=\"4\"\n                            BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            Background=\"{TemplateBinding Background}\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\"\n                            HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" SnapsToDevicePixels=\"True\">\n                        <Border x:Name=\"InnerBorder\">\n                            <Grid x:Name=\"InnerGrid\">\n                                <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\"\n                                              VerticalScrollBarVisibility=\"Hidden\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                                <TextBlock x:Name=\"WatermarkTextBlock\" Text=\"{TemplateBinding Watermark}\" IsHitTestVisible=\"False\" Foreground=\"{DynamicResource Element.Foreground.Watermark}\"\n                                           Padding=\"3,2\" Visibility=\"Collapsed\"/>\n\n                                <Path x:Name=\"InnerPath\" Data=\"M 0,0 6,6 0,6 z\" Fill=\"{DynamicResource Element.Border.Required}\" HorizontalAlignment=\"Left\" \n                                      VerticalAlignment=\"Bottom\" Opacity=\"0\" ToolTip=\"{DynamicResource S.Required}\"/>\n                            </Grid>\n                        </Border>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsObligatory\" Value=\"True\"/>\n                                <Condition Property=\"Text\" Value=\"{x:Static s:String.Empty}\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Required}\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"InnerPath\" Value=\"1\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsObligatory\" Value=\"True\"/>\n                                <Condition Property=\"Value\" Value=\"0\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Required}\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"InnerPath\" Value=\"1\"/>\n                        </MultiTrigger>\n\n                        <Trigger Property=\"IsReadOnly\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.ReadOnly}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.7\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"InnerPath\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </Trigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Text\" Value=\"{x:Static s:String.Empty}\"/>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"Visibility\" TargetName=\"WatermarkTextBlock\" Value=\"Visible\"/>\n                        </MultiTrigger>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Text\" Value=\"{x:Null}\"/>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"Visibility\" TargetName=\"WatermarkTextBlock\" Value=\"Visible\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                                <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                            <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"InnerPath\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </MultiTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--IntegerUpDown Style-->\n    <Style TargetType=\"{x:Type n:IntegerUpDown}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:IntegerUpDown}\">\n                    <Border Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\" Background=\"{TemplateBinding Background}\"\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"2\">\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"1\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"55*\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition Width=\"45*\" MinWidth=\"20\" MaxWidth=\"25\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <ScrollViewer Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" x:Name=\"PART_ContentHost\" Focusable=\"False\" \n                                          HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"\n                                          VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                          HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"3\" x:Name=\"VerticalSeparator\" Width=\"1\" Margin=\"0\" \n                                       VerticalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"UpButton\" Content=\"▲\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n\n                            <Separator Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"HorizontalSeparator\" Height=\"1\" Margin=\"0\"\n                                       HorizontalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"2\" Grid.Column=\"2\" x:Name=\"DownButton\" Content=\"▼\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"VerticalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"UpButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"DownButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\"  Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Visibility\" TargetName=\"UpButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"DownButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"HorizontalSeparator\" Value=\"Visible\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--NullableIntegerBox Style-->\n    <Style TargetType=\"{x:Type n:NullableIntegerBox}\" BasedOn=\"{StaticResource {x:Type n:ExtendedTextBox}}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n    </Style>\n\n    <!--NullableIntegerUpDown Style-->\n    <Style TargetType=\"{x:Type n:NullableIntegerUpDown}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:NullableIntegerUpDown}\">\n                    <Border BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"2\" Background=\"{TemplateBinding Background}\"\n                            Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\">\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"1\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"55*\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition Width=\"45*\" MinWidth=\"20\" MaxWidth=\"25\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <ScrollViewer Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" x:Name=\"PART_ContentHost\" Focusable=\"False\" \n                                          HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"\n                                          VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                          HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"3\" x:Name=\"VerticalSeparator\" Width=\"1\" Margin=\"0\" \n                                       VerticalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"UpButton\" Content=\"▲\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n\n                            <Separator Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"HorizontalSeparator\" Height=\"1\" Margin=\"0\"\n                                       HorizontalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"2\" Grid.Column=\"2\" x:Name=\"DownButton\" Content=\"▼\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"VerticalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"UpButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"DownButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\"  Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Visibility\" TargetName=\"UpButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"DownButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"HorizontalSeparator\" Value=\"Visible\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n    \n    <!--DoubleBox Style-->\n    <Style TargetType=\"{x:Type n:DoubleBox}\" BasedOn=\"{StaticResource {x:Type n:ExtendedTextBox}}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n    </Style>\n\n    <!--DoubleUpDown Style-->\n    <Style TargetType=\"{x:Type n:DoubleUpDown}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:DoubleUpDown}\">\n                    <Border BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"2\" Background=\"{TemplateBinding Background}\"\n                            Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\">\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"1\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"55*\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition Width=\"45*\" MinWidth=\"20\" MaxWidth=\"25\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <ScrollViewer Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" x:Name=\"PART_ContentHost\" Focusable=\"False\" \n                                          HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"\n                                          VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                          HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"3\" x:Name=\"VerticalSeparator\" Width=\"1\" Margin=\"0\" \n                                       VerticalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"UpButton\" Content=\"▲\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n\n                            <Separator Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"HorizontalSeparator\" Height=\"1\" Margin=\"0\"\n                                       HorizontalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"2\" Grid.Column=\"2\" x:Name=\"DownButton\" Content=\"▼\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"VerticalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"UpButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"DownButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\"  Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Visibility\" TargetName=\"UpButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"DownButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"HorizontalSeparator\" Value=\"Visible\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--DecimalBox Style-->\n    <Style TargetType=\"{x:Type n:DecimalBox}\" BasedOn=\"{StaticResource {x:Type n:ExtendedTextBox}}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n    </Style>\n\n    <!--DecimalUpDown Style-->\n    <Style TargetType=\"{x:Type n:DecimalUpDown}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:DecimalUpDown}\">\n                    <Border BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"2\" Background=\"{TemplateBinding Background}\"\n                            Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\">\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"1\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"55*\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition Width=\"45*\" MinWidth=\"20\" MaxWidth=\"25\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <ScrollViewer Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" x:Name=\"PART_ContentHost\" Focusable=\"False\" \n                                          HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"\n                                          VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                          HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"3\" x:Name=\"VerticalSeparator\" Width=\"1\" Margin=\"0\" \n                                       VerticalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"UpButton\" Content=\"▲\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n\n                            <Separator Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"HorizontalSeparator\" Height=\"1\" Margin=\"0\"\n                                       HorizontalAlignment=\"Stretch\" Visibility=\"Collapsed\" BorderBrush=\"{DynamicResource Element.Border.Medium}\"/>\n\n                            <RepeatButton Grid.Row=\"2\" Grid.Column=\"2\" x:Name=\"DownButton\" Content=\"▼\" IsTabStop=\"False\" Focusable=\"False\"\n                                          Style=\"{StaticResource Style.RepeatButton}\" FontSize=\"8\" VerticalContentAlignment=\"Center\" \n                                          BorderThickness=\"0\" Padding=\"0,-1,0,0\" Margin=\"0\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"VerticalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"UpButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger SourceName=\"DownButton\" Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"HorizontalSeparator\"  Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Visibility\" TargetName=\"UpButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"DownButton\" Value=\"Hidden\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"HorizontalSeparator\" Value=\"Visible\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n    \n    <!--HexaDecimalBox Style-->\n    <Style TargetType=\"{x:Type n:HexadecimalBox}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Height\" Value=\"23\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"MaxLength\" Value=\"9\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:HexadecimalBox}\">\n                    <Border Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\"\n                            BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            Background=\"{TemplateBinding Background}\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\"\n                            HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" SnapsToDevicePixels=\"True\" CornerRadius=\"2\">\n                        <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\"\n                                      VerticalScrollBarVisibility=\"Hidden\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsReadOnly\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.ReadOnly}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--KeyBox Style-->\n    <Style TargetType=\"{x:Type n:KeyBox}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Height\" Value=\"23\"/>\n        <Setter Property=\"MinWidth\" Value=\"50\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Focusable\" Value=\"True\"/>\n        <Setter Property=\"ToolTip\" Value=\"{DynamicResource S.Options.Shortcuts.Info}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:KeyBox}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Width=\"{TemplateBinding Width}\"\n                            Height=\"{TemplateBinding Height}\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\" \n                            Background=\"{TemplateBinding Background}\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" CornerRadius=\"2\"\n                            HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" SnapsToDevicePixels=\"True\" Focusable=\"True\">\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <TextBlock Grid.Column=\"1\" x:Name=\"AltTextBlock\" Text=\"Alt +\" Margin=\"2,0\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" IsHitTestVisible=\"False\" Visibility=\"Collapsed\"/>\n                            <TextBlock Grid.Column=\"2\" x:Name=\"CtrlTextBlock\" Text=\"Ctrl +\" Margin=\"2,0\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" IsHitTestVisible=\"False\" Visibility=\"Collapsed\"/>\n                            <TextBlock Grid.Column=\"3\" x:Name=\"ShiftTextBlock\" Text=\"Shift +\" Margin=\"2,0\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" IsHitTestVisible=\"False\" Visibility=\"Collapsed\"/>\n                            <TextBlock Grid.Column=\"4\" x:Name=\"WindowsTextBlock\" Text=\"Windows +\" Margin=\"2,0\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" IsHitTestVisible=\"False\" Visibility=\"Collapsed\"/>\n\n                            <TextBlock Grid.Column=\"0\" Grid.ColumnSpan=\"8\" x:Name=\"CompleteKeyTextBlock\" Text=\"{TemplateBinding Text}\" Margin=\"2,0\" \n                                       VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                       TextAlignment=\"Center\" IsHitTestVisible=\"False\" Visibility=\"Collapsed\"/>\n\n                            <n:ExtendedButton Grid.Column=\"8\" x:Name=\"RemoveButton\" Icon=\"{DynamicResource Vector.Close}\" Style=\"{DynamicResource Style.Button.NoText.Border}\" \n                                              ContentWidth=\"9\" ContentHeight=\"12\" Width=\"16\" Margin=\"1,0,0,0\" BorderThickness=\"1,0,0,0\" Height=\"23\" ToolTip=\"{DynamicResource S.KeyStrokes.Edit.Remove}\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsControlDown\" Value=\"True\">\n                            <Setter TargetName=\"CtrlTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsShiftDown\" Value=\"True\">\n                            <Setter TargetName=\"ShiftTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsAltDown\" Value=\"True\">\n                            <Setter TargetName=\"AltTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsWindowsDown\" Value=\"True\">\n                            <Setter TargetName=\"WindowsTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsSelectionFinished\" Value=\"True\">\n                            <Setter TargetName=\"CompleteKeyTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"AltTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"CtrlTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"ShiftTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"WindowsTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"CanRemove\" Value=\"False\">\n                            <Setter TargetName=\"RemoveButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n            </Trigger>\n            <Trigger Property=\"IsKeyboardFocusWithin\" Value=\"True\">\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n            </Trigger>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--HeaderedTooltip Style-->\n    <Style TargetType=\"{x:Type n:HeaderedTooltip}\" BasedOn=\"{StaticResource {x:Type ToolTip}}\">\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"Padding\" Value=\"5\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:HeaderedTooltip}\">\n                    <Border BorderBrush=\"{DynamicResource Element.Border}\" Background=\"{DynamicResource Element.Background}\" BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Large}\" Margin=\"5\" CornerRadius=\"4\">\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"ImageBorder\" Background=\"{TemplateBinding Icon}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding MaxSize}\" Width=\"{TemplateBinding MaxSize}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            \n                            <Label Grid.Row=\"0\" Grid.Column=\"1\" Content=\"{TemplateBinding Header}\" FontWeight=\"SemiBold\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                                   HorizontalAlignment=\"Stretch\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"PART_InlinesPresenter\" Text=\"{TemplateBinding Text}\" \n                                       Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"{TemplateBinding Padding}\" TextWrapping=\"WrapWithOverflow\" \n                                       HorizontalAlignment=\"Stretch\" TextAlignment=\"{TemplateBinding TextAlignment}\"/>\n                        </Grid>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--ExtendedMenuItem Style-->\n    <Style TargetType=\"{x:Type n:ExtendedMenuItem}\">\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}, FallbackValue={x:Static HorizontalAlignment.Left}}\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type ItemsControl}}, FallbackValue={x:Static VerticalAlignment.Center}}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource FontFamilyNormal}\"/>\n        <Setter Property=\"FontSize\" Value=\"13\"/>\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"Margin\" Value=\"0\"/>\n        <Setter Property=\"Padding\" Value=\"2\"/>\n        <Setter Property=\"Height\" Value=\"24\"/>\n\n        <!--SubmenuItem-->\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedMenuItem}\">\n                    <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                            Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_38\" CornerRadius=\"4\">\n                        <Grid x:Name=\"Grid\" Uid=\"Grid_49\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition SharedSizeGroup=\"MenuItemIconColumnGroup\" MinWidth=\"24\" Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition MinWidth=\"5\" SharedSizeGroup=\"MenuItemIGTColumnGroup\" Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"14\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Grid x:Name=\"CheckSquare\" Grid.Column=\"0\" Background=\"Transparent\" Margin=\"3,0\" VerticalAlignment=\"Center\">\n                                <Viewbox x:Name=\"CheckViewBox\" Visibility=\"Collapsed\" Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" Stretch=\"Uniform\">\n                                    <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" Uid=\"Path_12\" Visibility=\"Hidden\"/>\n                                </Viewbox>\n\n                                <Border x:Name=\"ImageBorder\" Background=\"{TemplateBinding Icon}\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                        Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            </Grid>\n\n                            <ContentPresenter x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" VerticalAlignment=\"Center\"\n                                              Content=\"{TemplateBinding Header}\" Grid.Column=\"1\" ContentSource=\"Header\" Margin=\"3,0\" \n                                              RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_33\"/>\n\n                            <TextBlock Grid.Column=\"2\" x:Name=\"InputGestureText\" Uid=\"TextBlock_10\" Margin=\"3,0\" Text=\"{TemplateBinding InputGestureText}\" \n                                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" FontSize=\"12\" FontWeight=\"Bold\" VerticalAlignment=\"Center\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsChecked\" Value=\"True\">\n                            <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                            <Setter Property=\"Background\" TargetName=\"CheckSquare\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"HasIcon\" Value=\"True\">\n                            <Setter Property=\"Visibility\" TargetName=\"ImageBorder\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"HasIcon\" Value=\"False\">\n                            <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Visible\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"Role\" Value=\"TopLevelHeader\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <Setter Property=\"Margin\" Value=\"0\"/>\n                <Setter Property=\"Padding\" Value=\"6,2\"/>\n                <Setter Property=\"MinHeight\" Value=\"26\"/>\n                <Setter Property=\"MinWidth\" Value=\"50\"/>\n\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:ExtendedMenuItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_39\" CornerRadius=\"4\">\n                                <Grid x:Name=\"Grid\" Uid=\"Grid_49\" IsSharedSizeScope=\"False\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Grid x:Name=\"CheckSquare\" Grid.Column=\"0\" Background=\"Transparent\" Visibility=\"Collapsed\">\n                                        <Viewbox x:Name=\"CheckViewBox\" Visibility=\"Collapsed\" Margin=\"2,0,0,0\" Stretch=\"Uniform\" Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\">\n                                            <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" Margin=\"4,0,6,0\" \n                                                  Uid=\"Path_12\" Visibility=\"Hidden\" VerticalAlignment=\"Center\"/>\n                                        </Viewbox>\n\n                                        <Border x:Name=\"ImageBorder\" Background=\"{TemplateBinding Icon}\" Opacity=\"{DynamicResource Element.Opacity}\" Margin=\"2,0,0,0\" Visibility=\"Collapsed\" \n                                                Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                                    </Grid>\n\n                                    <ContentPresenter Grid.Column=\"1\" x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" ContentSource=\"Header\" Margin=\"3,0,6,0\"  \n                                                      RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_35\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                                    <!-- Popup with the SubMenus -->\n                                    <Popup Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Name=\"SubMenuPopup\" Placement=\"Bottom\" IsOpen=\"{TemplateBinding IsSubmenuOpen}\" AllowsTransparency=\"True\" Focusable=\"False\" PopupAnimation=\"Fade\" HorizontalOffset=\"-2\">\n                                        <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"{DynamicResource Element.Background}\" BorderBrush=\"{DynamicResource Element.Border}\" CornerRadius=\"4\"\n                                                BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"1\">\n                                            <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                                        </Border>\n                                    </Popup>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                                    <Setter Property=\"Background\" TargetName=\"CheckSquare\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasIcon\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"ImageBorder\" Value=\"Visible\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckSquare\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasIcon\" Value=\"False\">\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Collapsed\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckSquare\" Value=\"Collapsed\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n\n            <Trigger Property=\"Role\" Value=\"TopLevelItem\">\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:ExtendedMenuItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_39\" CornerRadius=\"4\">\n                                <Grid x:Name=\"Grid\" Uid=\"Grid_49\" IsSharedSizeScope=\"False\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition SharedSizeGroup=\"MenuItemIconColumnGroup\" MinWidth=\"24\" Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition MinWidth=\"5\" SharedSizeGroup=\"MenuItemIGTColumnGroup\" Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"14\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Grid Grid.Column=\"0\" x:Name=\"CheckSquare\" Background=\"Transparent\" Margin=\"3,0\" Visibility=\"Collapsed\">\n                                        <Viewbox x:Name=\"CheckViewBox\" Visibility=\"Collapsed\" Stretch=\"Uniform\" Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\">\n                                            <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\"\n                                                  Uid=\"Path_12\" Visibility=\"Hidden\" VerticalAlignment=\"Center\"/>\n                                        </Viewbox>\n\n                                        <Border x:Name=\"ImageBorder\" Background=\"{TemplateBinding Icon}\" Opacity=\"{DynamicResource Element.Opacity}\" Visibility=\"Collapsed\" \n                                                Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                                    </Grid>\n\n                                    <ContentPresenter Grid.Column=\"1\" x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" \n                                                      Content=\"{TemplateBinding Header}\" ContentSource=\"Header\" Margin=\"3,0\" \n                                                      RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                      Uid=\"ContentPresenter_35\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                                    <Setter Property=\"Background\" TargetName=\"CheckSquare\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasIcon\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"ImageBorder\" Value=\"Visible\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckSquare\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasIcon\" Value=\"False\">\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Collapsed\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckSquare\" Value=\"Collapsed\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n\n            <Trigger Property=\"Role\" Value=\"SubmenuHeader\">\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:ExtendedMenuItem}\">\n                            <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Uid=\"Border_42\" CornerRadius=\"4\">\n                                <Grid x:Name=\"Grid\" Uid=\"Grid_50\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition SharedSizeGroup=\"MenuItemIconColumnGroup\" MinWidth=\"24\" Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                        <ColumnDefinition MinWidth=\"5\" SharedSizeGroup=\"MenuItemIGTColumnGroup\" Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"14\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Grid x:Name=\"CheckSquare\" Grid.Column=\"0\" Background=\"Transparent\" Margin=\"3,0\" Visibility=\"Collapsed\">\n                                        <Viewbox x:Name=\"CheckViewBox\" Visibility=\"Collapsed\" Stretch=\"Uniform\" Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\">\n                                            <Path x:Name=\"GlyphPanel\" Data=\"M0,2L0,4.8 2.5,7.4 7.1,2.8 7.1,0 2.5,4.6z\" Fill=\"{TemplateBinding Foreground}\" FlowDirection=\"LeftToRight\" \n                                                  Uid=\"Path_12\" Visibility=\"Hidden\" VerticalAlignment=\"Center\"/>\n                                        </Viewbox>\n\n                                        <Border x:Name=\"ImageBorder\" Background=\"{TemplateBinding Icon}\" Opacity=\"{DynamicResource Element.Opacity}\" Visibility=\"Collapsed\" \n                                                Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                                    </Grid>\n\n                                    <ContentPresenter Grid.Column=\"1\" x:Name=\"ContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" \n                                                      ContentSource=\"Header\" Margin=\"3,0\" RecognizesAccessKey=\"True\" \n                                                      SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" Uid=\"ContentPresenter_39\" VerticalAlignment=\"Center\"/>\n\n                                    <TextBlock x:Name=\"InputGestureText\" Grid.Column=\"2\" Margin=\"3,0\" \n                                               Text=\"{TemplateBinding InputGestureText}\" Uid=\"TextBlock_10\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" \n                                               FontSize=\"12\" FontWeight=\"Bold\" VerticalAlignment=\"Center\" TextAlignment=\"Left\"/>\n\n                                    <Path x:Name=\"Path\" Grid.Column=\"3\" Data=\"M0,0L4,3.5 0,7z\" Fill=\"{TemplateBinding Foreground}\" Margin=\"4,0,6,0\" Uid=\"Path_16\" VerticalAlignment=\"Center\"/>\n\n                                    <Popup Name=\"Popup\" Grid.Column=\"3\" Placement=\"Right\" IsOpen=\"{TemplateBinding IsSubmenuOpen}\" AllowsTransparency=\"True\" Focusable=\"False\" PopupAnimation=\"Fade\" VerticalOffset=\"-2\">\n                                        <Border Name=\"SubmenuBorder\" SnapsToDevicePixels=\"True\" Background=\"{DynamicResource Element.Background}\" BorderBrush=\"{DynamicResource Element.Border}\" CornerRadius=\"4\"\n                                                BorderThickness=\"1\" Effect=\"{DynamicResource Shadow.Border.Small}\" Margin=\"1\">\n                                            <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\"/>\n                                        </Border>\n                                    </Popup>\n                                </Grid>\n                            </Border>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"GlyphPanel\" Value=\"Visible\"/>\n                                    <Setter Property=\"Background\" TargetName=\"CheckSquare\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasIcon\" Value=\"True\">\n                                    <Setter Property=\"Visibility\" TargetName=\"ImageBorder\" Value=\"Visible\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckSquare\" Value=\"Visible\"/>\n                                </Trigger>\n                                <Trigger Property=\"HasIcon\" Value=\"False\">\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckViewBox\" Value=\"Collapsed\"/>\n                                    <Setter Property=\"Visibility\" TargetName=\"CheckSquare\" Value=\"Collapsed\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n\n            <Trigger Property=\"IsHighlighted\" Value=\"True\">\n                <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.MenuItem.Background.Hover}\"/>\n                <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Brush.MenuItem.Border.Hover}\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Brush.MenuItem.Background.Pressed}\"/>\n            </Trigger>\n\n            <!--When !DarkMode, !IsMouseOver, !IsKeyboardFocused-->\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"Role\" Value=\"TopLevelHeader\"/>\n                    <Condition Property=\"IsOverNonClientArea\" Value=\"True\"/>\n                    <Condition Property=\"DarkMode\" Value=\"False\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"#FF000000\"/>\n            </MultiTrigger>\n\n            <!--When DarkMode, !IsMouseOver, !IsKeyboardFocused-->\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"Role\" Value=\"TopLevelHeader\"/>\n                    <Condition Property=\"IsOverNonClientArea\" Value=\"True\"/>\n                    <Condition Property=\"DarkMode\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"False\"/>\n                    <Condition Property=\"IsKeyboardFocused\" Value=\"False\"/>\n                </MultiTrigger.Conditions>\n\n                <Setter Property=\"Foreground\" Value=\"WhiteSmoke\"/>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\"0.7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--HideableTabControl Style-->\n    <Style TargetType=\"{x:Type n:HideableTabControl}\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:HideableTabControl}\">\n                    <Grid>\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"*\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <n:ExtendedToggleButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"NotificationsButton\" MinHeight=\"26\" Text=\"{DynamicResource S.Notifications}\" Style=\"{DynamicResource Style.ToggleButton.NoBorder}\"\n                                                ContentHeight=\"16\" ContentWidth=\"16\" BorderThickness=\"0\" Padding=\"2,2,4,2\" TextWrapping=\"NoWrap\" VerticalAlignment=\"Center\" IsOverNonClientArea=\"True\"\n                                                IsHitTestVisible=\"{Binding ElementName=MainPopup, Path=IsOpen, Mode=OneWay, Converter={StaticResource InvertedBool}}\">\n                            <n:ExtendedToggleButton.Resources>\n                                <Storyboard x:Key=\"NotificationStoryboard\">\n                                    <DoubleAnimation Storyboard.TargetName=\"NotificationsButton\" Storyboard.TargetProperty=\"Opacity\" From=\"1\" To=\"0.4\"\n                                                     RepeatBehavior=\"10x\" AutoReverse=\"True\" Duration=\"0:0:0.6\"/>\n                                </Storyboard>\n                            </n:ExtendedToggleButton.Resources>\n                        </n:ExtendedToggleButton>\n\n                        <Popup Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"MainPopup\" Placement=\"Bottom\" PlacementTarget=\"{Binding ElementName=NotificationsButton}\" \n                               Margin=\"0\" Width=\"400\" Height=\"Auto\" MinHeight=\"100\" MaxHeight=\"400\" SnapsToDevicePixels=\"True\" AllowsTransparency=\"True\"\n                               StaysOpen=\"False\" PopupAnimation=\"Fade\" IsOpen=\"{Binding ElementName=NotificationsButton, Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                            <Popup.HorizontalOffset>\n                                <MultiBinding Converter=\"{StaticResource CenterPopupConverter}\">\n                                    <Binding ElementName=\"MainPopup\" Path=\"PlacementTarget.ActualWidth\"/>\n                                    <Binding ElementName=\"NotificationBox\" Path=\"ActualWidth\"/>\n                                </MultiBinding>\n                            </Popup.HorizontalOffset>\n                            \n                            <n:NotificationBox x:Name=\"NotificationBox\"/>\n                        </Popup>\n\n                        <Menu Grid.Row=\"0\" Grid.Column=\"2\" Effect=\"{x:Null}\" Background=\"Transparent\" VerticalAlignment=\"Center\">\n                            <n:ExtendedMenuItem x:Name=\"ExtrasMenuItem\" Header=\"{DynamicResource S.Editor.Extras}\" Icon=\"{DynamicResource Vector.Editor}\" ContentHeight=\"16\" ContentWidth=\"16\" BorderThickness=\"0\">\n                                <n:ExtendedMenuItem x:Name=\"OptionsMenuItem\" Header=\"{DynamicResource S.StartUp.Options}\" Icon=\"{DynamicResource Vector.Options}\" \n                                                    ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{TemplateBinding OptionsCommand}\"/>\n                                <n:ExtendedMenuItem x:Name=\"FeedbackMenuItem\" Header=\"{DynamicResource S.Feedback.Feedback}\" Icon=\"{DynamicResource Vector.Application}\" \n                                                    ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{TemplateBinding FeedbackCommand}\"/>\n                                <n:ExtendedMenuItem x:Name=\"TroubleshootMenuItem\" Header=\"{DynamicResource S.Troubleshoot.Title}\" Icon=\"{DynamicResource Vector.Warning}\" \n                                                    ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{TemplateBinding TroubleshootCommand}\"/>\n                                \n                                <Separator Height=\"1\"/>\n                                \n                                <n:ExtendedMenuItem x:Name=\"HelpMenuItem\" Header=\"{DynamicResource S.Editor.Help}\" Icon=\"{DynamicResource Vector.Question}\" \n                                                    ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{TemplateBinding HelpCommand}\"/>\n                            </n:ExtendedMenuItem>\n                        </Menu>\n\n                        <Border Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ContentBorder\" BorderBrush=\"{DynamicResource Element.Border.Light}\"\n                                BorderThickness=\"0,1\" Background=\"{DynamicResource Panel.Background.Level2}\" CornerRadius=\"4\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <ContentPresenter Grid.Column=\"0\" Grid.ColumnSpan=\"2\" ContentSource=\"SelectedContent\"/>\n\n                                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"HideGridButton\" Icon=\"{DynamicResource Glyph.Up}\" \n                                                  HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" \n                                                  HorizontalAlignment=\"Center\" VerticalAlignment=\"Bottom\" ContentWidth=\"16\" ContentHeight=\"16\" MinWidth=\"28\"\n                                                  Margin=\"0,0,1,1\" Padding=\"2\" Style=\"{DynamicResource Style.Button.NoText}\"/>\n                            </Grid>\n                        </Border>\n\n                        <TabPanel Grid.Row=\"0\" Grid.Column=\"0\" Name=\"TabPanel\" Margin=\"5,5,0,-2\" IsItemsHost=\"True\" Background=\"Transparent\"/>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--AwareTabItem Style-->\n    <Style TargetType=\"{x:Type n:AwareTabItem}\">\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource FontFamilyLight}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:AwareTabItem}\">\n                    <Grid Name=\"Panel\" Background=\"Transparent\">\n                        <Border Name=\"ContentBorder\" BorderBrush=\"{DynamicResource Element.Border.Light}\" Background=\"{TemplateBinding Background}\" BorderThickness=\"0\" CornerRadius=\"4,4,0,0\">\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" x:Name=\"ImageBorder\" Background=\"{TemplateBinding Icon}\" Margin=\"10,2,2,2\"\n                                        Height=\"14\" Width=\"14\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Opacity=\".6\"/>\n\n                                <ContentPresenter Grid.Column=\"1\" x:Name=\"ContentSite\" VerticalAlignment=\"Center\" Effect=\"{x:Null}\" \n                                                  HorizontalAlignment=\"Center\" ContentSource=\"Header\" Margin=\"2,2,10,2\"/>\n                            </Grid>\n                        </Border>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger SourceName=\"ImageBorder\" Property=\"Visibility\" Value=\"Collapsed\">\n                            <Setter TargetName=\"ContentSite\" Property=\"Margin\" Value=\"10,2\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"Icon\" Value=\"{x:Null}\">\n                            <Setter TargetName=\"ImageBorder\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"ContentSite\" Property=\"Margin\" Value=\"10,2\"/>\n                        </Trigger>\n\n                        <DataTrigger Binding=\"{Binding Path=IsMouseOver, ElementName=Panel}\" Value=\"True\">\n                            <DataTrigger.EnterActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" Storyboard.TargetName=\"ImageBorder\" To=\"1\"/>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </DataTrigger.EnterActions>\n                            <DataTrigger.ExitActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetProperty=\"Opacity\" Storyboard.TargetName=\"ImageBorder\"/>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </DataTrigger.ExitActions>\n\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Header}\"/>\n                            <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                        </DataTrigger>\n\n                        <Trigger Property=\"IsSelected\" Value=\"True\">\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Header}\"/>\n                            <Setter Property=\"Background\" Value=\"{DynamicResource Panel.Background.Level2}\"/>\n                            <Setter TargetName=\"ContentBorder\" Property=\"BorderThickness\" Value=\"1,1,1,0\"/>\n                            <Setter TargetName=\"ImageBorder\" Property=\"Opacity\" Value=\"1\"/>\n                        </Trigger>\n\n                        <!--When ExtendChrome, !IsDark, !IsSelected-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=EditorExtendChrome, FallbackValue=False}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsDark}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}\" Value=\"False\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Foreground\" Value=\"#FF000000\"/>\n                            <Setter TargetName=\"ContentBorder\" Property=\"Background\" Value=\"#90FFFFFF\"/>\n                        </MultiDataTrigger>\n\n                        <!--When ExtendChrome, !IsDark, IsMouseOver-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=EditorExtendChrome, FallbackValue=False}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsDark}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}\" Value=\"True\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Header}\"/>\n                        </MultiDataTrigger>\n\n                        <!--When ExtendChrome, !IsDark, IsSelected-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=EditorExtendChrome, FallbackValue=False}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsDark}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}\" Value=\"True\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter TargetName=\"Panel\" Property=\"Background\" Value=\"{DynamicResource Panel.Background.Level2}\"/>\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Header}\"/>\n                            <Setter TargetName=\"ContentBorder\" Property=\"BorderThickness\" Value=\"1,1,1,0\"/>\n                        </MultiDataTrigger>\n\n                        <!--When ExtendChrome, IsDark, !IsSelected-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=EditorExtendChrome, FallbackValue=False}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsDark}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}\" Value=\"False\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Foreground\" Value=\"#FFF8F8FF\"/>\n\n                            <Setter TargetName=\"ContentBorder\" Property=\"Background\">\n                                <Setter.Value>\n                                    <RadialGradientBrush>\n                                        <GradientStop Color=\"{Binding Source={x:Static SystemParameters.WindowGlassColor}, \n                                                      Converter={StaticResource ColorToAlphaConverter}, ConverterParameter=6E}\" Offset=\"0\"/>\n                                        <GradientStop Color=\"{Binding Source={x:Static SystemParameters.WindowGlassColor}, \n                                                      Converter={StaticResource ColorToAlphaConverter}, ConverterParameter=50}\" Offset=\"0.4\"/>\n                                        <GradientStop Offset=\"1\"/>\n                                    </RadialGradientBrush>\n                                </Setter.Value>\n                            </Setter>\n                        </MultiDataTrigger>\n\n                        <!--When ExtendChrome, IsDark, IsMouseOver-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=EditorExtendChrome, FallbackValue=False}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsDark}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}\" Value=\"True\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter Property=\"Foreground\" Value=\"#FFBFEFFF\"/>\n                        </MultiDataTrigger>\n\n                        <!--When ExtendChrome, IsDark, IsSelected-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=EditorExtendChrome, FallbackValue=False}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsDark}\" Value=\"True\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}\" Value=\"True\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter TargetName=\"Panel\" Property=\"Background\" Value=\"{DynamicResource Panel.Background.Level2}\"/>\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Header}\"/>\n                            <Setter TargetName=\"ContentBorder\" Property=\"BorderThickness\" Value=\"1,1,1,0\"/>\n                        </MultiDataTrigger>\n\n                        <!--When !ShowBackground, !IsSelected-->\n                        <MultiDataTrigger>\n                            <MultiDataTrigger.Conditions>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=ShowBackground}\" Value=\"False\"/>\n                                <Condition Binding=\"{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}\" Value=\"False\"/>\n                            </MultiDataTrigger.Conditions>\n\n                            <Setter TargetName=\"ContentBorder\" Property=\"Background\" Value=\"Transparent\"/>\n                        </MultiDataTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    \n    <!--StatusBand Style-->\n    <Style TargetType=\"{x:Type n:StatusBand}\">\n        <Setter Property=\"Visibility\" Value=\"Collapsed\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:StatusBand}\">\n                    <Grid x:Name=\"WarningGrid\" Height=\"Auto\" MinHeight=\"30\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"30\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"30\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid.Resources>\n                            <Storyboard x:Key=\"HideWarningStoryboard\">\n                                <DoubleAnimation Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=WarningGrid,Path=Opacity}\" To=\"0\" Duration=\"0:0:0.5\">\n                                    <DoubleAnimation.EasingFunction>\n                                        <PowerEase Power=\"8\"/>\n                                    </DoubleAnimation.EasingFunction>\n                                </DoubleAnimation>\n\n                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(Grid.Visibility)\" Duration=\"0:0:0.5\">\n                                    <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:0.2\"/>\n                                </ObjectAnimationUsingKeyFrames>\n\n                                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty=\"(Grid.IsHitTestVisible)\" Duration=\"0:0:0.0\">\n                                    <DiscreteBooleanKeyFrame Value=\"False\" KeyTime=\"0:0:0.0\"/>\n                                </BooleanAnimationUsingKeyFrames>\n                            </Storyboard>\n\n                            <!--Storyboard.TargetName=\"WarningGrid\" -->\n                            <Storyboard x:Key=\"ShowWarningStoryboard\">\n                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty=\"(Grid.Visibility)\" Duration=\"0:0:0\" >\n                                    <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n                                </ObjectAnimationUsingKeyFrames>\n\n                                <DoubleAnimation Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:0.5\">\n                                    <DoubleAnimation.EasingFunction>\n                                        <PowerEase Power=\"8\"/>\n                                    </DoubleAnimation.EasingFunction>\n                                </DoubleAnimation>\n\n                                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty=\"(Grid.IsHitTestVisible)\" Duration=\"0:0:0.0\">\n                                    <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0.0\"/>\n                                </BooleanAnimationUsingKeyFrames>\n                            </Storyboard>\n                        </Grid.Resources>\n\n                        <Border Grid.Column=\"0\" x:Name=\"WarningBorder\" Background=\"{DynamicResource Vector.Info}\" Margin=\"3\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        \n                        <TextBlock Grid.Column=\"1\" x:Name=\"WarningTextBlock\" Text=\"{TemplateBinding Text}\" FontSize=\"12\" \n                                   Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" Margin=\"5,0,5,0\"/>\n\n                        <TextBlock Grid.Column=\"1\" x:Name=\"LinkTextBlock\" FontSize=\"12\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" Margin=\"5,0,5,0\" Visibility=\"Collapsed\">\n                            <Hyperlink x:Name=\"MainHyperlink\">\n                                <Run Text=\"{TemplateBinding Text}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n\n                        <n:ExtendedButton Grid.Column=\"2\" x:Name=\"SuppressButton\" Icon=\"{DynamicResource Vector.Close}\" ContentWidth=\"16\" ContentHeight=\"16\"\n                                          HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Center\" Style=\"{DynamicResource Style.Button.NoText}\" MinWidth=\"30\"\n                                          ToolTip=\"{DynamicResource S.Suppress}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\">\n                            <!--<n:ExtendedButton.Triggers>\n                                <EventTrigger RoutedEvent=\"Button.Click\">\n                                    <EventTrigger.Actions>\n                                        <BeginStoryboard Storyboard=\"{StaticResource HideWarningStoryboard}\" Storyboard.TargetName=\"WarningGrid\" HandoffBehavior=\"SnapshotAndReplace\"/>\n                                    </EventTrigger.Actions>\n                                </EventTrigger>\n                            </n:ExtendedButton.Triggers>-->\n                        </n:ExtendedButton>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"Type\" Value=\"Update\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.StatusBand.Info}\"/>\n                            <Setter TargetName=\"WarningBorder\" Property=\"Background\" Value=\"{DynamicResource Vector.Synchronize}\"/>\n                        </Trigger>\n                        <Trigger Property=\"Type\" Value=\"Info\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.StatusBand.Info}\"/>\n                            <Setter TargetName=\"WarningBorder\" Property=\"Background\" Value=\"{DynamicResource Vector.Info}\"/>\n                        </Trigger>\n                        <Trigger Property=\"Type\" Value=\"Warning\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.StatusBand.Warning}\"/>\n                            <Setter TargetName=\"WarningBorder\" Property=\"Background\" Value=\"{DynamicResource Vector.Warning}\"/>\n                        </Trigger>\n                        <Trigger Property=\"Type\" Value=\"Error\">\n                            <Setter TargetName=\"WarningGrid\" Property=\"Background\" Value=\"{DynamicResource Brush.StatusBand.Error}\"/>\n                            <Setter TargetName=\"WarningBorder\" Property=\"Background\" Value=\"{DynamicResource Vector.Cancel.Round}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsLink\" Value=\"True\">\n                            <Setter TargetName=\"LinkTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"WarningTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--ExtendedCheckBox Style-->\n    <Style TargetType=\"{x:Type n:ExtendedCheckBox}\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"4,0,0,0\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedCheckBox}\">\n                    <Grid x:Name=\"templateRoot\" Background=\"Transparent\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Border x:Name=\"checkBoxBorder\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                Background=\"{TemplateBinding Background}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                Margin=\"1\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" CornerRadius=\"2\" Height=\"16\" Width=\"16\">\n                            <Grid x:Name=\"markGrid\">\n                                <Path x:Name=\"optionMark\" Data=\"m0 3.5q0-0.2 0.1-0.4 0.2-0.1 0.4-0.1 0.2 0 0.4 0.1l2.6 2.7 5.6-5.7q0.2-0.1 0.4-0.1 0.1 0 0.2 0 0.1 0.1 0.2 0.1 0 0.1 0.1 0.2 0 0.1 0 0.2 0 0.2-0.1 0.4l-6 6q-0.2 0.1-0.4 0.1-0.2 0-0.4-0.1l-3-3q-0.1-0.2-0.1-0.4z\"\n                                      Fill=\"{DynamicResource Element.Glyph}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Margin=\"2\" Opacity=\"0\" Stretch=\"None\"/>\n\n                                <Rectangle x:Name=\"indeterminateMark\" Fill=\"{DynamicResource Element.Glyph}\" Margin=\"2\" Opacity=\"0\"/>\n                            </Grid>\n                        </Border>\n\n                        <TextBlock Grid.Column=\"1\" x:Name=\"MainTextBlock\" Focusable=\"False\" TextWrapping=\"{TemplateBinding TextWrapping}\" Margin=\"{TemplateBinding Padding}\"\n                                   HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" Padding=\"0,-1,0,0\">\n                            <Run Text=\"{TemplateBinding Text}\"/>\n                            <Run x:Name=\"MarginRun\" Text=\" \"/>\n                            <Run Text=\"{TemplateBinding Info}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                        </TextBlock>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"HasContent\" Value=\"True\">\n                            <Setter Property=\"FocusVisualStyle\">\n                                <Setter.Value>\n                                    <Style>\n                                        <Setter Property=\"Control.Template\">\n                                            <Setter.Value>\n                                                <ControlTemplate>\n                                                    <Rectangle Margin=\"14,0,0,0\" SnapsToDevicePixels=\"True\" Stroke=\"{DynamicResource Element.Foreground}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                                                </ControlTemplate>\n                                            </Setter.Value>\n                                        </Setter>\n                                    </Style>\n                                </Setter.Value>\n                            </Setter>\n\n                            <Setter Property=\"Padding\" Value=\"4,-1,0,0\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"Text\" Value=\"{x:Null}\">\n                            <Setter TargetName=\"MarginRun\" Property=\"Text\" Value=\"\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsSmall\" Value=\"True\">\n                            <Setter TargetName=\"checkBoxBorder\" Property=\"Height\" Value=\"Auto\"/>\n                            <Setter TargetName=\"checkBoxBorder\" Property=\"Width\" Value=\"Auto\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"{DynamicResource Element.Glyph.Hover}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"{DynamicResource Element.Glyph.Pressed}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsChecked\" Value=\"True\">\n                            <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"1\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"indeterminateMark\" Value=\"0\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsChecked\" Value=\"{x:Null}\">\n                            <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"0\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"indeterminateMark\" Value=\"1\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--LabelSeparator Style-->\n    <Style TargetType=\"{x:Type n:LabelSeparator}\">\n        <Setter Property=\"Height\" Value=\"Auto\"/>\n        <Setter Property=\"Padding\" Value=\"3\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Border.Light}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"UseLayoutRounding\" Value=\"True\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:LabelSeparator}\">\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition x:Name=\"LeftColumn\" Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition x:Name=\"RightColumn\" Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Rectangle Grid.Column=\"0\" x:Name=\"LeftRectangle\" Height=\"1\" Fill=\"{TemplateBinding Background}\" VerticalAlignment=\"Center\" Margin=\"0,0,2,0\"/>\n                        <TextBlock Grid.Column=\"1\" Text=\"{TemplateBinding Text}\" Padding=\"{TemplateBinding Padding}\" Foreground=\"{TemplateBinding Foreground}\"\n                                   VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                        <Rectangle Grid.Column=\"2\" x:Name=\"RightRectangle\" Height=\"1\" Fill=\"{TemplateBinding Background}\" VerticalAlignment=\"Center\" Margin=\"2,0,0,0\"/>\n                        <TextBlock Grid.Column=\"3\" x:Name=\"RightTextBlock\" Text=\"{TemplateBinding TextRight}\" Padding=\"{TemplateBinding Padding}\" \n                                   Foreground=\"{TemplateBinding Foreground}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"TextRight\" Value=\"{x:Static s:String.Empty}\">\n                            <Setter TargetName=\"RightTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"TextRight\" Value=\"{x:Null}\">\n                            <Setter TargetName=\"RightTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"TextAlignment\" Value=\"Left\">\n                            <Setter TargetName=\"LeftColumn\" Property=\"Width\" Value=\"0\"/>\n                            <Setter TargetName=\"LeftRectangle\" Property=\"Margin\" Value=\"0\"/>\n                            <Setter TargetName=\"LeftRectangle\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        <Trigger Property=\"TextAlignment\" Value=\"Right\">\n                            <Setter TargetName=\"RightColumn\" Property=\"Width\" Value=\"0\"/>\n                            <Setter TargetName=\"RightRectangle\" Property=\"Margin\" Value=\"0\"/>\n                            <Setter TargetName=\"RightRectangle\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--ColorBox Style-->\n    <Style TargetType=\"{x:Type n:ColorBox}\">\n        <Setter Property=\"Height\" Value=\"26\"/>\n        <Setter Property=\"MinWidth\" Value=\"70\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"Cursor\" Value=\"Hand\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"ToolTip\" Value=\"{DynamicResource S.SelectColor}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ColorBox}\">\n                    <Border x:Name=\"MainBorder\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"4\"\n                            Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\" MaxHeight=\"{TemplateBinding MaxHeight}\" MaxWidth=\"{TemplateBinding MaxWidth}\">\n                        <Border.Background>\n                            <DrawingBrush Viewport=\"0,0,10,10\" ViewportUnits=\"Absolute\" TileMode=\"Tile\">\n                                <DrawingBrush.Drawing>\n                                    <DrawingGroup>\n                                        <GeometryDrawing Brush=\"White\">\n                                            <GeometryDrawing.Geometry>\n                                                <RectangleGeometry Rect=\"0,0 100,100\"/>\n                                            </GeometryDrawing.Geometry>\n                                        </GeometryDrawing>\n                                        <GeometryDrawing Brush=\"LightGray\">\n                                            <GeometryDrawing.Geometry>\n                                                <GeometryGroup>\n                                                    <RectangleGeometry Rect=\"0,0 50,50\"/>\n                                                    <RectangleGeometry Rect=\"50,50 50,50\"/>\n                                                </GeometryGroup>\n                                            </GeometryDrawing.Geometry>\n                                        </GeometryDrawing>\n                                    </DrawingGroup>\n                                </DrawingBrush.Drawing>\n                            </DrawingBrush>\n                        </Border.Background>\n\n                        <Border BorderThickness=\"0\" VerticalAlignment=\"Stretch\" HorizontalAlignment=\"Stretch\" CornerRadius=\"4\"\n                                Background=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedColor, Converter={StaticResource ColorToBrush}}\"/>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter Property=\"Opacity\" Value=\"0.8\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--CircularProgressBar Style-->\n    <Style TargetType=\"{x:Type n:CircularProgressBar}\">\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Center\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:CircularProgressBar}\">\n                    <Path x:Name=\"PathRoot\" Stroke=\"{TemplateBinding SegmentColor}\" StrokeThickness=\"{TemplateBinding StrokeThickness}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Top\">\n                        <Path.Data>\n                            <PathGeometry>\n                                <PathGeometry.Figures>\n                                    <PathFigureCollection>\n                                        <PathFigure x:Name=\"PathFigure\">\n                                            <PathFigure.Segments>\n                                                <PathSegmentCollection>\n                                                    <ArcSegment x:Name=\"ArcSegment\" SweepDirection=\"Clockwise\"/>\n                                                </PathSegmentCollection>\n                                            </PathFigure.Segments>\n                                        </PathFigure>\n                                    </PathFigureCollection>\n                                </PathGeometry.Figures>\n                            </PathGeometry>\n                        </Path.Data>\n                    </Path>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".7\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n\n    \n    <!--ZoomControl Style-->\n    <Style TargetType=\"{x:Type n:ZoomBox}\">\n        <Setter Property=\"ClipToBounds\" Value=\"True\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ZoomBox}\">\n                    <ScrollViewer x:Name=\"ScrollViewer\" ClipToBounds=\"True\" Background=\"Transparent\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\" >\n                        <Grid x:Name=\"Grid\" RenderTransformOrigin=\"0.5,0.5\" Background=\"Transparent\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                            <Grid.LayoutTransform>\n                                <TransformGroup>\n                                    <ScaleTransform x:Name=\"ScaleTransform\"/>\n                                </TransformGroup>\n                            </Grid.LayoutTransform>\n\n                            <Viewbox Grid.Column=\"0\" Grid.Row=\"0\">\n                                <Image x:Name=\"ImageControl\" RenderOptions.BitmapScalingMode=\"NearestNeighbor\" Source=\"{TemplateBinding ImageSource, Converter={StaticResource UriToBitmapConverter}}\"/>\n                            </Viewbox>\n                        </Grid>\n                    </ScrollViewer>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--FrameViewer Style-->\n    <Style TargetType=\"{x:Type n:FrameViewer}\">\n        <Setter Property=\"ClipToBounds\" Value=\"True\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:FrameViewer}\">\n                    <ScrollViewer x:Name=\"ScrollViewer\" ClipToBounds=\"True\" Background=\"Transparent\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\" >\n                        <Grid x:Name=\"Grid\" RenderTransformOrigin=\"0.5,0.5\" Background=\"Transparent\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                            <Grid.LayoutTransform>\n                                <TransformGroup>\n                                    <ScaleTransform x:Name=\"ScaleTransform\"/>\n                                </TransformGroup>\n                            </Grid.LayoutTransform>\n\n                            <Viewbox>\n                                <Image x:Name=\"ImageControl\" RenderOptions.BitmapScalingMode=\"NearestNeighbor\" Source=\"{TemplateBinding Source}\"/>\n                            </Viewbox>\n                        </Grid>\n                    </ScrollViewer>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n\n    <!--SpectrumSlider Styles -->\n    <Style x:Key=\"Style.RepeatButton.Slider\" TargetType=\"{x:Type RepeatButton}\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"True\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n        <Setter Property=\"Focusable\" Value=\"False\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\n                    <Border Background=\"{TemplateBinding Background}\"/>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"{x:Type n:ColorThumb}\" TargetType=\"{x:Type n:ColorThumb}\">\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type Thumb}\">\n                    <Viewbox>\n                        <Grid Background=\"Transparent\" Cursor=\"Hand\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"4*\"/>\n                                <ColumnDefinition Width=\"6*\" MinWidth=\"10\"/>\n                                <ColumnDefinition Width=\"4*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Polygon Grid.Column=\"0\" x:Name=\"LeftPolygon\" Fill=\"{DynamicResource Element.Background}\" Stroke=\"{DynamicResource Element.Border}\" \n                                     StrokeThickness=\"0.5\" Points=\"0.5,0  5.5,4.5  0.5,9\" UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\"/>\n                            <Polygon Grid.Column=\"2\" x:Name=\"RightPolygon\" Fill=\"{DynamicResource Element.Background}\" Stroke=\"{DynamicResource Element.Border}\" \n                                     StrokeThickness=\"0.5\" Points=\"5.5,0  0.5,4.5  5.5,9\" UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\"/>\n                        </Grid>\n                    </Viewbox>\n                    \n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"LeftPolygon\" Property=\"Fill\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                            <Setter TargetName=\"RightPolygon\" Property=\"Fill\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                            <Setter TargetName=\"LeftPolygon\" Property=\"Stroke\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                            <Setter TargetName=\"RightPolygon\" Property=\"Stroke\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsDragging\" Value=\"True\">\n                            <Setter TargetName=\"LeftPolygon\" Property=\"Fill\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter TargetName=\"RightPolygon\" Property=\"Fill\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter TargetName=\"LeftPolygon\" Property=\"Stroke\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                            <Setter TargetName=\"RightPolygon\" Property=\"Stroke\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"{x:Type n:SpectrumSlider}\" TargetType=\"{x:Type n:SpectrumSlider}\">\n        <Setter Property=\"Orientation\" Value=\"Vertical\"/>\n        <Setter Property=\"Stylus.IsPressAndHoldEnabled\" Value=\"False\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Minimum\" Value=\"0\"/>\n        <Setter Property=\"Maximum\" Value=\"100\"/>\n        <Setter Property=\"TickFrequency\" Value=\"0.001\"/>\n        <Setter Property=\"IsSnapToTickEnabled\" Value=\"True\"/>\n        <Setter Property=\"IsDirectionReversed\" Value=\"False\"/>\n        <Setter Property=\"Value\" Value=\"1\"/>\n\n        <Setter Property=\"Background\">\n            <Setter.Value>\n                <DrawingBrush Viewport=\"0,0,10,10\" ViewportUnits=\"Absolute\" TileMode=\"Tile\">\n                    <DrawingBrush.Drawing>\n                        <DrawingGroup>\n                            <GeometryDrawing Brush=\"White\">\n                                <GeometryDrawing.Geometry>\n                                    <RectangleGeometry Rect=\"0,0 100,100\"/>\n                                </GeometryDrawing.Geometry>\n                            </GeometryDrawing>\n\n                            <GeometryDrawing Brush=\"LightGray\">\n                                <GeometryDrawing.Geometry>\n                                    <GeometryGroup>\n                                        <RectangleGeometry Rect=\"0,0 50,50\"/>\n                                        <RectangleGeometry Rect=\"50,50 50,50\"/>\n                                    </GeometryGroup>\n                                </GeometryDrawing.Geometry>\n                            </GeometryDrawing>\n                        </DrawingGroup>\n                    </DrawingBrush.Drawing>\n                </DrawingBrush>\n            </Setter.Value>\n        </Setter>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SpectrumSlider}\">\n                    <Border Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Height=\"{TemplateBinding Height}\" CornerRadius=\"4\">\n                        <Grid MinWidth=\"{TemplateBinding Slider.MinWidth}\" ClipToBounds=\"False\" Effect=\"{DynamicResource Shadow.Border.Large}\">\n                            <!--Spectrum-->\n                            <Border x:Name=\"TrackBackground\" Width=\"Auto\">\n                                <Rectangle x:Name=\"PART_SpectrumDisplay\" Stretch=\"Fill\" VerticalAlignment=\"Stretch\"/>\n                            </Border>\n\n                            <!--Selection Range-->\n                            <Canvas HorizontalAlignment=\"Center\" Width=\"4\">\n                                <Rectangle x:Name=\"PART_SelectionRange\" Canvas.Left=\"1\" Fill=\"{DynamicResource Element.Foreground}\" Width=\"2.0\" Visibility=\"Hidden\"/>\n                            </Canvas>\n\n                            <Track Name=\"PART_Track\">\n                                <Track.DecreaseRepeatButton>\n                                    <RepeatButton x:Name=\"DecreaseRepeatButton\" Style=\"{StaticResource Style.RepeatButton.Slider}\" Command=\"Slider.DecreaseLarge\"/>\n                                </Track.DecreaseRepeatButton>\n                                <Track.IncreaseRepeatButton>\n                                    <RepeatButton x:Name=\"IncreaseRepeatButton\" Style=\"{StaticResource Style.RepeatButton.Slider}\" Command=\"Slider.IncreaseLarge\"/>\n                                </Track.IncreaseRepeatButton>\n                                <Track.Thumb>\n                                    <n:ColorThumb x:Name=\"Thumb\" Height=\"Auto\" ThumbColor=\"{Binding SelectedColor, RelativeSource={RelativeSource TemplatedParent}}\" Margin=\"-1,-10\"/>\n                                </Track.Thumb>\n                            </Track>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <!-- Display SelectionRange background -->\n                        <Trigger Property=\"IsSelectionRangeEnabled\" Value=\"True\">\n                            <Setter TargetName=\"PART_SelectionRange\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"Width\" Value=\"Auto\">\n                            <Setter Property=\"MinWidth\" Value=\"21\"/>\n                        </Trigger>\n                        <Trigger Property=\"Height\" Value=\"Auto\">\n                            <Setter Property=\"MinHeight\" Value=\"104\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--RangeSlider Styles-->\n    <Style x:Key=\"Style.Slider.Special\" TargetType=\"Slider\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Slider\">\n                    <Grid x:Name=\"Root\">\n                        <Grid x:Name=\"HorizontalTemplate\">\n                            <Track x:Name=\"PART_Track\">\n                                <Track.IncreaseRepeatButton>\n                                    <RepeatButton x:Name=\"HorizontalTrackLargeChangeIncreaseRepeatButton\" Template=\"{StaticResource Template.RepeatButton.Simple}\" IsTabStop=\"False\"/>\n                                </Track.IncreaseRepeatButton>\n                                <Track.DecreaseRepeatButton>\n                                    <RepeatButton x:Name=\"HorizontalTrackLargeChangeDecreaseRepeatButton\" Template=\"{StaticResource Template.RepeatButton.Simple}\" IsTabStop=\"False\"/>\n                                </Track.DecreaseRepeatButton>\n\n                                <Track.Thumb>\n                                    <Thumb x:Name=\"HorizontalThumb\" Height=\"18\" Width=\"10\" Template=\"{StaticResource Template.Slider.Thumb.Horizontal}\" IsTabStop=\"False\"/>\n                                </Track.Thumb>\n                            </Track>\n                        </Grid>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"TickPlacement\" Value=\"BottomRight\">\n                            <Setter TargetName=\"HorizontalThumb\" Property=\"Template\" Value=\"{StaticResource Template.Slider.Thumb.Bottom}\"/>\n                        </Trigger>\n                        <Trigger Property=\"TickPlacement\" Value=\"TopLeft\">\n                            <Setter TargetName=\"HorizontalThumb\" Property=\"Template\" Value=\"{StaticResource Template.Slider.Thumb.Top}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type n:RangeSlider}\">\n        <Setter Property=\"TickPlacement\" Value=\"BottomRight\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:RangeSlider}\">\n                    <Grid x:Name=\"LayoutRoot\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\" MinHeight=\"{TemplateBinding MinHeight}\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <TickBar x:Name=\"TopTick\" Grid.Row=\"0\" Fill=\"{DynamicResource Element.Border}\" TickFrequency=\"1\" Height=\"4\" Margin=\"5,0,5,2\" Placement=\"Top\" Visibility=\"Collapsed\"/>\n                        <TickBar x:Name=\"BottomTick\" Grid.Row=\"2\" Fill=\"{DynamicResource Element.Border}\" TickFrequency=\"1\" Height=\"4\" Margin=\"5,1,5,0\" Placement=\"Bottom\" Visibility=\"Collapsed\"/>\n\n                        <Border x:Name=\"TrackBorder\" Grid.Row=\"1\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"1\" Height=\"3\" VerticalAlignment=\"Center\" Margin=\"4,0\"/>\n                        <Border x:Name=\"ProgressBorder\" Grid.Row=\"1\" Background=\"{DynamicResource Element.Border.Hover}\" BorderThickness=\"0\" Height=\"3\" VerticalAlignment=\"Center\"/>\n\n                        <Slider x:Name=\"LowerSlider\" Grid.Row=\"1\" IsTabStop=\"False\"\n                                Minimum=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Minimum, Mode=TwoWay}\"\n                                Maximum=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Maximum, Mode=TwoWay}\"\n                                Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=LowerValue, Mode=TwoWay}\"\n                                TickPlacement=\"{TemplateBinding TickPlacement}\" AutoToolTipPlacement=\"TopLeft\" Style=\"{StaticResource Style.Slider.Special}\"/>\n\n                        <Slider x:Name=\"UpperSlider\" Grid.Row=\"1\" IsTabStop=\"False\"\n                                Minimum=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Minimum, Mode=TwoWay}\"\n                                Maximum=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Maximum, Mode=TwoWay}\"\n                                Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=UpperValue, Mode=TwoWay}\"\n                                TickPlacement=\"{TemplateBinding TickPlacement}\" AutoToolTipPlacement=\"TopLeft\" Style=\"{StaticResource Style.Slider.Special}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"TickPlacement\" Value=\"TopLeft\">\n                            <Setter Property=\"Visibility\" TargetName=\"TopTick\" Value=\"Visible\"/>\n                            <Setter Property=\"Margin\" TargetName=\"ProgressBorder\" Value=\"0,3,0,0\"/>\n                        </Trigger>\n                        <Trigger Property=\"TickPlacement\" Value=\"BottomRight\">\n                            <Setter Property=\"Visibility\" TargetName=\"BottomTick\" Value=\"Visible\"/>\n                            <Setter Property=\"Margin\" TargetName=\"ProgressBorder\" Value=\"0,0,0,3\"/>\n                        </Trigger>\n                        <Trigger Property=\"TickPlacement\" Value=\"Both\">\n                            <Setter Property=\"Visibility\" TargetName=\"TopTick\" Value=\"Visible\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"BottomTick\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" TargetName=\"ProgressBorder\" Value=\"0.7\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--Card Style-->\n    <Style TargetType=\"{x:Type n:Card}\">\n        <Setter Property=\"MinHeight\" Value=\"40\"/>\n        <Setter Property=\"Width\" Value=\"190\"/>\n        <Setter Property=\"Margin\" Value=\"2\"/>\n        <Setter Property=\"Background\" Value=\"#20FFFFFF\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"1\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"Cursor\" Value=\"Hand\"/>\n        <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Add}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:Card}\">\n                    <Border x:Name=\"MainBorder\" Background=\"{TemplateBinding Background}\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" CornerRadius=\"4\">\n                        <Grid x:Name=\"MainGrid\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"32\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"HeaderTextBlock\" Margin=\"2,0\" Padding=\"1\"\n                                       Text=\"{TemplateBinding Header}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"\n                                       FontSize=\"12\" Foreground=\"{TemplateBinding Foreground}\"/>\n\n                            <Border Grid.Row=\"1\" Grid.Column=\"0\" Background=\"{TemplateBinding Icon}\" Margin=\"5\" Opacity=\"{DynamicResource Element.Opacity}\" Height=\"20\" Width=\"20\"\n                                    VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"/>\n\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"DescriptionTexBlock\" Text=\"{TemplateBinding Description}\" \n                                       Foreground=\"{TemplateBinding Foreground}\" TextWrapping=\"WrapWithOverflow\" Focusable=\"False\" \n                                       HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Padding=\"5,0,0,0\"\n                                       Margin=\"{TemplateBinding Padding}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                            <ProgressBar Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"MainProgressBar\" VerticalAlignment=\"Bottom\" Height=\"5\" \n                                         Visibility=\"Collapsed\" Maximum=\"100\" IsIndeterminate=\"True\" BorderThickness=\"0\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"MainBorder\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"MainBorder\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"Status\" Value=\"Processing\">\n                            <Setter Property=\"IsHitTestVisible\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"Status\" Value=\"Available\">\n                            <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Add}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"Status\" Value=\"Processing\">\n                            <Setter Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter TargetName=\"MainProgressBar\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"MainProgressBar\" Property=\"IsIndeterminate\" Value=\"True\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"Status\" Value=\"Ready\">\n                            <Setter Property=\"Icon\" Value=\"{DynamicResource Vector.Ok.Round}\"/>\n                            <Setter Property=\"ToolTip\" Value=\"{DynamicResource Extras.Ready.Info}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"Status\" Value=\"Error\">\n                            <Setter Property=\"Background\" TargetName=\"MainGrid\" Value=\"#10F24D4D\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--ExtendedListBoxItem Style (Language List)-->\n    <Style TargetType=\"{x:Type n:ExtendedListBoxItem}\">\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"Padding\" Value=\"4,1\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedListBoxItem}\">\n                    <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" CornerRadius=\"4\"\n                            Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" SnapsToDevicePixels=\"True\">\n                        <Grid ToolTip=\"{TemplateBinding Tag}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Column=\"0\" Background=\"{TemplateBinding Icon}\" Opacity=\"{DynamicResource Element.Opacity}\" Margin=\"2,0\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                            <!--Remove later.-->\n                            <Viewbox Grid.Column=\"0\" x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\" Margin=\"2,0\" Stretch=\"Uniform\" StretchDirection=\"Both\" \n                                     Width=\"{TemplateBinding ContentWidth}\" Height=\"{TemplateBinding ContentHeight}\" Effect=\"{x:Null}\">\n                                <ContentPresenter Content=\"{TemplateBinding Image}\" Width=\"Auto\" Height=\"Auto\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                            </Viewbox>\n\n                            <ContentPresenter Grid.Column=\"1\" Content=\"{TemplateBinding Content}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                              Margin=\"5,0,0,0\" VerticalAlignment=\"Center\"/>\n\n                            <!--<TextBlock Grid.Column=\"2\" Margin=\"5,5,5,3\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                                <Run Text=\"•\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Run Text=\"{TemplateBinding MainAuthor}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" FontWeight=\"Bold\" ToolTip=\"Current translator\"/>\n                                <Run Text=\"-\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Run Text=\"{TemplateBinding Author}\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n                            </TextBlock>-->\n                            \n                            <Label Grid.Column=\"2\" Content=\"{TemplateBinding Author}\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" Margin=\"5,0,0,0\" HorizontalAlignment=\"Left\"/>\n                            \n                            <Viewbox Grid.Column=\"3\" x:Name=\"SelectionMark\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Margin=\"2,0\" Stretch=\"UniformToFill\" StretchDirection=\"Both\" \n                                     MaxWidth=\"{TemplateBinding ContentWidth}\" Effect=\"{x:Null}\" Visibility=\"Collapsed\">\n                                <Path x:Name=\"optionMark\" Data=\"F1 M 9.97498,.8 L 4.6983,9.09834  L 1,5.19331 L 1.27664,3.52165 L 4.255,6.08833 L 9.33331,1.288e-005 Z\" Fill=\"{DynamicResource Element.Glyph}\" \n                                      Margin=\"1\" Stretch=\"None\"/>\n                            </Viewbox>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                            </MultiTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Selector.IsSelectionActive\" Value=\"False\"/>\n                                <Condition Property=\"IsSelected\" Value=\"True\"/>\n                            </MultiTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedInactive.Background}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedInactive.Border}\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Selector.IsSelectionActive\" Value=\"True\"/>\n                                <Condition Property=\"IsSelected\" Value=\"True\"/>\n                            </MultiTrigger.Conditions>\n                            <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"ShowMarkOnSelection\" Value=\"True\"/>\n                                <Condition Property=\"IsSelected\" Value=\"True\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter TargetName=\"SelectionMark\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </MultiTrigger>\n                        \n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--NotificationBox Style-->\n    <Style TargetType=\"{x:Type n:NotificationBox}\">\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Margin\" Value=\"2\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Panel.Background}\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:NotificationBox}\">\n                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Margin=\"{TemplateBinding Margin}\" \n                            Background=\"{TemplateBinding Background}\" Effect=\"{DynamicResource Shadow.Border.Dark}\" CornerRadius=\"4\">\n                        <Grid>\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <ScrollViewer Grid.Row=\"0\" x:Name=\"MainScrollViewer\" Focusable=\"False\" Padding=\"{TemplateBinding Padding}\" VerticalScrollBarVisibility=\"Auto\">\n                                <ItemsPresenter/>\n                            </ScrollViewer>\n\n                            <TextBlock Grid.Row=\"0\" x:Name=\"EllipsesTextBlock\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" FontSize=\"40\" Height=\"46\" Margin=\"0,-30,0,0\" Text=\"...\" \n                                       Foreground=\"{DynamicResource Element.Foreground.Gray112}\" Visibility=\"Collapsed\"/>\n\n                            <Grid Grid.Row=\"1\" x:Name=\"ControlGrid\" Background=\"{DynamicResource Panel.Background.Level2}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Column=\"0\" x:Name=\"NotificationTextBlock\" Margin=\"5\" HorizontalAlignment=\"Center\" FontSize=\"14\" TextWrapping=\"Wrap\">\n                                    <Hyperlink x:Name=\"NotificationHyperlink\">\n                                        <Run Text=\"{DynamicResource S.Notifications.Dismiss}\"/>\n                                    </Hyperlink>\n                                </TextBlock>\n\n                                <TextBlock Grid.Column=\"1\" x:Name=\"EncodingTextBlock\" Margin=\"5\" HorizontalAlignment=\"Center\" FontSize=\"14\" TextWrapping=\"Wrap\">\n                                    <Hyperlink x:Name=\"EncodingHyperlink\">\n                                        <Run Text=\"{DynamicResource S.Encoder.Dismiss}\"/>\n                                    </Hyperlink>\n                                </TextBlock>\n                            </Grid>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"HasAnyNotification\" Value=\"False\"/>\n                                <Condition Property=\"HasAnyEncoding\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter TargetName=\"EllipsesTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </MultiTrigger>\n                        \n                        <Trigger Property=\"OnlyDisplayList\" Value=\"True\">\n                            <Setter TargetName=\"ControlGrid\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"HasAnyNotification\" Value=\"False\">\n                            <Setter TargetName=\"NotificationTextBlock\" Property=\"IsEnabled\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"HasAnyEncoding\" Value=\"False\">\n                            <Setter TargetName=\"EncodingTextBlock\" Property=\"IsEnabled\" Value=\"False\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"IsHitTestVisible\" Value=\"False\"/>\n                            <Setter Property=\"Opacity\" Value=\"0.8\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n    <!--ExtendedProgressBar Style-->\n    <Style TargetType=\"{x:Type n:ExtendedProgressBar}\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.ProgressBar.Primary}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Back}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExtendedProgressBar}\">\n                    <Grid x:Name=\"TemplateRoot\">\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Determinate\"/>\n                                <VisualState x:Name=\"Indeterminate\">\n                                    <Storyboard RepeatBehavior=\"Forever\">\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)\" Storyboard.TargetName=\"Animation\">\n                                            <EasingDoubleKeyFrame KeyTime=\"0\" Value=\"0.25\"/>\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:1\" Value=\"0.25\"/>\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:2\" Value=\"0.25\"/>\n                                        </DoubleAnimationUsingKeyFrames>\n                                        <PointAnimationUsingKeyFrames Storyboard.TargetProperty=\"(UIElement.RenderTransformOrigin)\" Storyboard.TargetName=\"Animation\">\n                                            <EasingPointKeyFrame KeyTime=\"0\" Value=\"-0.5,0.5\"/>\n                                            <EasingPointKeyFrame KeyTime=\"0:0:1\" Value=\"0.5,0.5\"/>\n                                            <EasingPointKeyFrame KeyTime=\"0:0:2\" Value=\"1.5,0.5\"/>\n                                        </PointAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n\n                        <Border BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\"/>\n                        <Rectangle x:Name=\"PART_Track\"/>\n\n                        <Grid x:Name=\"PART_Indicator\" ClipToBounds=\"True\" HorizontalAlignment=\"Left\">\n                            <Rectangle x:Name=\"Indicator\" Fill=\"{TemplateBinding Foreground}\"/>\n                            <Rectangle x:Name=\"Animation\" Fill=\"{TemplateBinding Foreground}\" RenderTransformOrigin=\"0.5,0.5\" Visibility=\"Collapsed\">\n                                <Rectangle.RenderTransform>\n                                    <TransformGroup>\n                                        <ScaleTransform/>\n                                        <SkewTransform/>\n                                        <RotateTransform/>\n                                        <TranslateTransform/>\n                                    </TransformGroup>\n                                </Rectangle.RenderTransform>\n                            </Rectangle>\n                        </Grid>\n\n                        <Border x:Name=\"PercentageBorder\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Visibility=\"Collapsed\" Background=\"{DynamicResource Brush.ProgressBar.Detail}\" CornerRadius=\"5\">\n                            <TextBlock x:Name=\"PercentageTextBlock\" Foreground=\"{DynamicResource Element.Foreground}\" Margin=\"3,0\" Padding=\"0\" VerticalAlignment=\"Center\">\n                                <TextBlock.Text>\n                                    <MultiBinding Converter=\"{StaticResource ScaleConverter}\" StringFormat=\"{}{0:P2}\">\n                                        <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"Value\"/>\n                                        <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"Maximum\"/>\n                                    </MultiBinding>\n                                </TextBlock.Text>\n                            </TextBlock>\n                        </Border>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"Orientation\" Value=\"Vertical\">\n                            <Setter Property=\"LayoutTransform\" TargetName=\"TemplateRoot\">\n                                <Setter.Value>\n                                    <RotateTransform Angle=\"-90\"/>\n                                </Setter.Value>\n                            </Setter>\n                        </Trigger>\n\n                        <Trigger Property=\"ShowPercentage\" Value=\"True\">\n                            <Setter TargetName=\"PercentageBorder\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"IsIndeterminate\" Value=\"True\">\n                            <Setter Property=\"Visibility\" TargetName=\"Indicator\" Value=\"Collapsed\"/>\n                            <Setter Property=\"Visibility\" TargetName=\"Animation\" Value=\"Visible\"/>\n                            <Setter TargetName=\"PercentageBorder\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"State\" Value=\"Info\">\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.ProgressBar.Info}\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"State\" Value=\"Warning\">\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.ProgressBar.Warning}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"State\" Value=\"Danger\">\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.ProgressBar.Danger}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n\n    <!--SelectControl Style-->\n    <Style TargetType=\"{x:Type n:SelectControlOld}\">\n        <Setter Property=\"Background\" Value=\"#30000000\"/>\n        <Setter Property=\"Foreground\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"White\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SelectControlOld}\">\n                    <Canvas x:Name=\"MainCanvas\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\">\n                        <Canvas.Resources>\n                            <Storyboard x:Key=\"StrokeDashStoryboard\" x:Name=\"StrokeDashStoryboard\">\n                                <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetName=\"MainPath\" Storyboard.TargetProperty=\"(Shape.StrokeDashOffset)\" RepeatBehavior=\"Forever\">\n                                    <SplineDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0\"/>\n                                    <SplineDoubleKeyFrame KeyTime=\"00:00:00.6000000\" Value=\"10\"/>\n                                </DoubleAnimationUsingKeyFrames>\n                            </Storyboard>\n                        </Canvas.Resources>\n\n                        <Canvas.Triggers>\n                            <EventTrigger RoutedEvent=\"n:SelectControlOld.Loaded\">\n                                <BeginStoryboard Storyboard=\"{StaticResource StrokeDashStoryboard}\"/>\n                            </EventTrigger>\n                            <EventTrigger RoutedEvent=\"n:SelectControlOld.SelectionAccepted\">\n                                <StopStoryboard BeginStoryboardName=\"StrokeDashStoryboard\"/>\n                            </EventTrigger>\n                            <EventTrigger RoutedEvent=\"n:SelectControlOld.SelectionCanceled\">\n                                <StopStoryboard BeginStoryboardName=\"StrokeDashStoryboard\"/>\n                            </EventTrigger>\n                        </Canvas.Triggers>\n\n                        <Path x:Name=\"MainPath\" Grid.ZIndex=\"0\" StrokeDashArray=\"5\" Stroke=\"{TemplateBinding BorderBrush}\" StrokeThickness=\"{TemplateBinding BorderThickness}\" \n                              Fill=\"{TemplateBinding Background}\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\">\n                            <Path.Data>\n                                <CombinedGeometry GeometryCombineMode=\"Exclude\">\n                                    <CombinedGeometry.Geometry1>\n                                        <RectangleGeometry x:Name=\"ExternalRect\">\n                                            <RectangleGeometry.Rect>\n                                                <MultiBinding Converter=\"{StaticResource IntToRect}\">\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"ActualWidth\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"ActualHeight\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                </MultiBinding>\n                                            </RectangleGeometry.Rect>\n                                        </RectangleGeometry>\n                                    </CombinedGeometry.Geometry1>\n                                    <CombinedGeometry.Geometry2>\n                                        <RectangleGeometry x:Name=\"InternalRect\">\n                                            <RectangleGeometry.Rect>\n                                                <MultiBinding Converter=\"{StaticResource IntToRect}\">\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.Width\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.Height\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.X\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.Y\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                </MultiBinding>\n                                            </RectangleGeometry.Rect>\n                                        </RectangleGeometry>\n                                    </CombinedGeometry.Geometry2>\n                                </CombinedGeometry>\n                            </Path.Data>\n                        </Path>\n\n                        <Rectangle x:Name=\"SelectRectangle\" Fill=\"#20FFFFFF\" Grid.ZIndex=\"1\"\n                                   Canvas.Left=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Left}\" Canvas.Top=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Top}\"\n                                   Width=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Width}\" Height=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Height}\"/>\n\n                        <n:ExtendedUniformGrid x:Name=\"StatusControlGrid\" Columns=\"3\" Cursor=\"Arrow\" Visibility=\"Hidden\" Grid.ZIndex=\"9\" Background=\"{DynamicResource Element.Background}\">\n                            <n:ExtendedButton x:Name=\"AcceptButton\" Text=\"{DynamicResource S.Recorder.Accept}\" ContentWidth=\"24\" ContentHeight=\"24\" Style=\"{DynamicResource Style.Button.Horizontal.White}\" \n                                              Icon=\"{DynamicResource Vector.Ok}\" ToolTip=\"Enter\" ToolTipService.Placement=\"Bottom\" Height=\"30\" Padding=\"4\"/>\n\n                            <n:ExtendedButton x:Name=\"RetryButton\" Text=\"{DynamicResource S.Recorder.Retry}\" ContentWidth=\"24\" ContentHeight=\"24\" Style=\"{DynamicResource Style.Button.Horizontal.White}\" \n                                              Icon=\"{DynamicResource Vector.Synchronize}\" ToolTip=\"{DynamicResource S.Recorder.Retry.Shortcut}\" ToolTipService.Placement=\"Bottom\" Height=\"30\" Padding=\"4\"/>\n\n                            <n:ExtendedButton x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" ContentWidth=\"24\" ContentHeight=\"24\" Style=\"{DynamicResource Style.Button.Horizontal.White}\" \n                                              Icon=\"{DynamicResource Vector.Cancel}\" ToolTip=\"Esc\" ToolTipService.Placement=\"Bottom\" Height=\"30\" Padding=\"4\"/>\n                        </n:ExtendedUniformGrid>\n\n                        <TextBlock x:Name=\"SizeTextBlock\" Grid.ZIndex=\"1\" FontSize=\"18\" Foreground=\"White\" Background=\"#60000000\" Padding=\"2,0\"\n                                   VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsHitTestVisible=\"False\" Visibility=\"Hidden\">\n                            <TextBlock.Text>\n                                <MultiBinding StringFormat=\"{}{0} × {1}\">\n                                    <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"NonExpandedSelection.Width\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                    <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"NonExpandedSelection.Height\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                </MultiBinding>\n                            </TextBlock.Text>\n                        </TextBlock>\n\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"TopLeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNWSE\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"TopRightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNESW\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"BottomLeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNESW\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"BottomRightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNWSE\" Visibility=\"Collapsed\"/>\n\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"TopThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNS\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"BottomThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNS\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"LeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeWE\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"RightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeWE\" Visibility=\"Collapsed\"/>\n\n                        <Grid x:Name=\"ZoomGrid\" Height=\"140\" Width=\"120\" Background=\"#60000000\" Visibility=\"Hidden\" Grid.ZIndex=\"8\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"2\"/>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"20\"/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition Width=\"2\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Image Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" Grid.ColumnSpan=\"3\" x:Name=\"CroppedImage\" Stretch=\"UniformToFill\" \n                                   RenderOptions.BitmapScalingMode=\"NearestNeighbor\" RenderOptions.EdgeMode=\"Unspecified\" UseLayoutRounding=\"True\"/>\n\n                            <Rectangle Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Height=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n                            <Rectangle Grid.Row=\"1\" Grid.Column=\"2\" Height=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n                            <Rectangle Grid.Row=\"0\" Grid.Column=\"1\" Width=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n                            <Rectangle Grid.Row=\"2\" Grid.Column=\"1\" Width=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n\n                            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ZoomTextBlock\" Foreground=\"AliceBlue\" Text=\"X: 1 Y: 2\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n\n                        <!--<Grid x:Name=\"RectGrid\" Height=\"Auto\" Width=\"Auto\" Background=\"#60000000\" Grid.ZIndex=\"9\" Visibility=\"Hidden\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"*\"/>\n                            </Grid.RowDefinitions>\n\n                            <Grid Grid.Row=\"0\" x:Name=\"MoveSizeWidgetGrid\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"20\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Column=\"0\" Padding=\"3,2\" Text=\"Selection\"/>\n                                <n:ExtendedButton Grid.Column=\"1\" x:Name=\"CloseSizeWidgetButton\" Icon=\"{DynamicResource Vector.Cancel}\" Style=\"{DynamicResource Style.Button.NoText.White}\" Padding=\"2\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"1\" Background=\"#20000000\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Left:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Left}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Top:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Top}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Width:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Width, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Height:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"3\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Height, Mode=TwoWay}\"/>\n                            </Grid>\n                        </Grid>-->\n                    </Canvas>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"FinishedSelection\" Value=\"True\">\n                            <Setter TargetName=\"TopLeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"TopRightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomLeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomRightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n\n                            <Setter TargetName=\"TopThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"LeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"RightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"Mode\" Value=\"Region\">\n                            <Setter TargetName=\"MainCanvas\" Property=\"Cursor\" Value=\"Cross\"/>\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Cursor\" Value=\"SizeAll\"/>\n                        </Trigger>\n                        <Trigger Property=\"Mode\" Value=\"Window\">\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Cursor\" Value=\"Hand\"/>\n                        </Trigger>\n                        <Trigger Property=\"Mode\" Value=\"Fullscreen\">\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Cursor\" Value=\"Hand\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type n:SelectControl}\">\n        <Setter Property=\"Background\" Value=\"#30000000\"/>\n        <Setter Property=\"Foreground\" Value=\"White\"/>\n        <Setter Property=\"BorderBrush\" Value=\"White\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:SelectControl}\">\n                    <ControlTemplate.Resources>\n                        <Storyboard x:Key=\"StrokeDashStoryboard\" x:Name=\"StrokeDashStoryboard\">\n                            <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetName=\"MainPath\" Storyboard.TargetProperty=\"(Shape.StrokeDashOffset)\" RepeatBehavior=\"Forever\">\n                                <SplineDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0\"/>\n                                <SplineDoubleKeyFrame KeyTime=\"00:00:00.6\" Value=\"10\"/>\n                            </DoubleAnimationUsingKeyFrames>\n                        </Storyboard>\n                    </ControlTemplate.Resources>\n                    \n                    <Canvas x:Name=\"MainCanvas\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\">\n                        <Path x:Name=\"MainPath\" Grid.ZIndex=\"0\" StrokeDashArray=\"5\" Stroke=\"{TemplateBinding BorderBrush}\" StrokeThickness=\"{TemplateBinding BorderThickness}\" \n                              Fill=\"{TemplateBinding Background}\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\">\n                            <Path.Data>\n                                <CombinedGeometry GeometryCombineMode=\"Exclude\">\n                                    <CombinedGeometry.Geometry1>\n                                        <RectangleGeometry x:Name=\"ExternalRect\">\n                                            <RectangleGeometry.Rect>\n                                                <MultiBinding Converter=\"{StaticResource IntToRect}\" FallbackValue=\"0,0,0,0\">\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"ActualWidth\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"ActualHeight\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                                </MultiBinding>\n                                            </RectangleGeometry.Rect>\n                                        </RectangleGeometry>\n                                    </CombinedGeometry.Geometry1>\n                                    <CombinedGeometry.Geometry2>\n                                        <RectangleGeometry x:Name=\"InternalRect\">\n                                            <RectangleGeometry.Rect>\n                                                <MultiBinding Converter=\"{StaticResource IntToRect}\" FallbackValue=\"0,0,0,0\">\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.Width\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\" FallbackValue=\"0\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.Height\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\" FallbackValue=\"0\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.X\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\" FallbackValue=\"0\"/>\n                                                    <Binding RelativeSource=\"{RelativeSource Mode=TemplatedParent}\" Path=\"Selected.Y\" Mode=\"OneWay\" UpdateSourceTrigger=\"PropertyChanged\" FallbackValue=\"0\"/>\n                                                </MultiBinding>\n                                            </RectangleGeometry.Rect>\n                                        </RectangleGeometry>\n                                    </CombinedGeometry.Geometry2>\n                                </CombinedGeometry>\n                            </Path.Data>\n                        </Path>\n\n                        <Rectangle x:Name=\"SelectRectangle\" Fill=\"#20FFFFFF\" Grid.ZIndex=\"1\"\n                                   Canvas.Left=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Left, FallbackValue=0}\" \n                                   Canvas.Top=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Top, FallbackValue=0}\"\n                                   Width=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Width, FallbackValue=0}\" \n                                   Height=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Height, FallbackValue=0}\"/>\n\n                        <n:ExtendedUniformGrid x:Name=\"StatusControlGrid\" Columns=\"3\" Cursor=\"Arrow\" Visibility=\"Hidden\" Grid.ZIndex=\"9\" Background=\"{DynamicResource Element.Background}\">\n                            <n:ExtendedButton x:Name=\"AcceptButton\" Text=\"{DynamicResource S.Recorder.Accept}\" ContentWidth=\"22\" ContentHeight=\"22\" Style=\"{DynamicResource Style.Button.Horizontal.White}\" \n                                              Icon=\"{DynamicResource Vector.Ok}\" ToolTip=\"{DynamicResource S.Keys.Enter}\" ToolTipService.Placement=\"Bottom\" Height=\"30\" Padding=\"4\"/>\n\n                            <n:ExtendedButton x:Name=\"RetryButton\" Text=\"{DynamicResource S.Recorder.Retry}\" ContentWidth=\"22\" ContentHeight=\"22\" Style=\"{DynamicResource Style.Button.Horizontal.White}\" \n                                              Icon=\"{DynamicResource Vector.Synchronize}\" ToolTip=\"{DynamicResource S.Mouse.Right}\" ToolTipService.Placement=\"Bottom\" Height=\"30\" Padding=\"4\"/>\n\n                            <n:ExtendedButton x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" ContentWidth=\"22\" ContentHeight=\"22\" Style=\"{DynamicResource Style.Button.Horizontal.White}\" \n                                              Icon=\"{DynamicResource Vector.Cancel}\" ToolTip=\"{DynamicResource S.Keys.Esc}\" ToolTipService.Placement=\"Bottom\" Height=\"30\" Padding=\"4\"/>\n                        </n:ExtendedUniformGrid>\n\n                        <Grid x:Name=\"SizeGrid\" Grid.ZIndex=\"1\" Background=\"#75000000\" Visibility=\"Hidden\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <TextBlock Grid.Row=\"0\" x:Name=\"SizeTextBlock\" Padding=\"2,0\"\n                                   VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsHitTestVisible=\"False\">\n                                <Run FontSize=\"18\" Foreground=\"White\">\n                                    <Run.Text>\n                                        <MultiBinding StringFormat=\"{}{0} × {1}\">\n                                            <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"NonExpandedSelection.Width\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                            <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"NonExpandedSelection.Height\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                        </MultiBinding>\n                                    </Run.Text>\n                                </Run>\n                                \n                                <Run x:Name=\"ScaleRun\" FontSize=\"16\" Foreground=\"Cyan\" \n                                     Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Scale, UpdateSourceTrigger=PropertyChanged, StringFormat={} ×{0:0.00}}\"/>\n                            </TextBlock>\n\n                            <TextBlock Grid.Row=\"1\" x:Name=\"NativeSizeTextBlock\" Padding=\"2,0\"\n                                   VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsHitTestVisible=\"False\">\n                                <Run FontSize=\"18\" Foreground=\"White\">\n                                    <Run.Text>\n                                    <MultiBinding StringFormat=\"{}{0} × {1}\">\n                                        <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"NonExpandedNativeSelection.Width\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                        <Binding RelativeSource=\"{RelativeSource TemplatedParent}\" Path=\"NonExpandedNativeSelection.Height\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                    </MultiBinding>\n                                    </Run.Text>\n                                </Run>\n                                \n                                <Run FontSize=\"16\" Foreground=\"Aqua\" Text=\" ×1.00\"/>\n                            </TextBlock>\n                        </Grid>\n\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"TopLeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNWSE\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"TopRightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNESW\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"BottomLeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNESW\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"BottomRightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNWSE\" Visibility=\"Collapsed\"/>\n\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"TopThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNS\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"BottomThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNS\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"LeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeWE\" Visibility=\"Collapsed\"/>\n                        <Thumb Grid.ZIndex=\"2\" x:Name=\"RightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeWE\" Visibility=\"Collapsed\"/>\n\n                        <Grid x:Name=\"ZoomGrid\" Height=\"140\" Width=\"120\" Background=\"#60000000\" Visibility=\"Hidden\" Grid.ZIndex=\"8\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"2\"/>\n                                <RowDefinition/>\n                                <RowDefinition Height=\"20\"/>\n                            </Grid.RowDefinitions>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition Width=\"2\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Image Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" Grid.ColumnSpan=\"3\" x:Name=\"CroppedImage\" Stretch=\"UniformToFill\" \n                                   RenderOptions.BitmapScalingMode=\"NearestNeighbor\" RenderOptions.EdgeMode=\"Unspecified\" UseLayoutRounding=\"True\"/>\n\n                            <Rectangle Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Height=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n                            <Rectangle Grid.Row=\"1\" Grid.Column=\"2\" Height=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n                            <Rectangle Grid.Row=\"0\" Grid.Column=\"1\" Width=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n                            <Rectangle Grid.Row=\"2\" Grid.Column=\"1\" Width=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n\n                            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ZoomTextBlock\" Foreground=\"AliceBlue\" Text=\"X: 1 Y: 2\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                        </Grid>\n\n                        <!--<Grid x:Name=\"RectGrid\" Height=\"Auto\" Width=\"Auto\" Background=\"#60000000\" Grid.ZIndex=\"9\" Visibility=\"Hidden\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"*\"/>\n                            </Grid.RowDefinitions>\n\n                            <Grid Grid.Row=\"0\" x:Name=\"MoveSizeWidgetGrid\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"*\"/>\n                                    <ColumnDefinition Width=\"20\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Column=\"0\" Padding=\"3,2\" Text=\"Selection\"/>\n                                <n:ExtendedButton Grid.Column=\"1\" x:Name=\"CloseSizeWidgetButton\" Icon=\"{DynamicResource Vector.Cancel}\" Style=\"{DynamicResource Style.Button.NoText.White}\" Padding=\"2\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"1\" Background=\"#20000000\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Left:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Left}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Top:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Top}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Width:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Width, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Padding=\"3,2\" Text=\"Height:\" VerticalAlignment=\"Center\"/>\n                                <n:IntegerBox Grid.Row=\"3\" Grid.Column=\"1\" Margin=\"2,1\" MinWidth=\"60\" HorizontalAlignment=\"Stretch\" UpdateOnInput=\"False\"\n                                              Value=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Height, Mode=TwoWay}\"/>\n                            </Grid>\n                        </Grid>-->\n                    </Canvas>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"FinishedSelection\" Value=\"True\">\n                            <Setter TargetName=\"TopLeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"TopRightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomLeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomRightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n\n                            <Setter TargetName=\"TopThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"LeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"RightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"Mode\" Value=\"Region\">\n                            <Setter TargetName=\"MainCanvas\" Property=\"Cursor\" Value=\"Cross\"/>\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Cursor\" Value=\"SizeAll\"/>\n                        </Trigger>\n                        <Trigger Property=\"Mode\" Value=\"Window\">\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Cursor\" Value=\"Hand\"/>\n                        </Trigger>\n                        <Trigger Property=\"Mode\" Value=\"Fullscreen\">\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Cursor\" Value=\"Hand\"/>\n                        </Trigger>\n                        <Trigger Property=\"Scale\" Value=\"1\">\n                            <Setter TargetName=\"NativeSizeTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"ScaleRun\" Property=\"Text\" Value=\"\"/>\n                        </Trigger>\n                        <Trigger Property=\"Selected\" Value=\"{x:Static Rect.Empty}\">\n                            <Setter TargetName=\"SelectRectangle\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"AnimateBorder\" Value=\"True\">\n                            <Trigger.EnterActions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetName=\"MainPath\" Storyboard.TargetProperty=\"(Shape.StrokeDashOffset)\" RepeatBehavior=\"Forever\">\n                                            <SplineDoubleKeyFrame KeyTime=\"00:00:00\" Value=\"0\"/>\n                                            <SplineDoubleKeyFrame KeyTime=\"00:00:00.6\" Value=\"10\"/>\n                                        </DoubleAnimationUsingKeyFrames>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </Trigger.EnterActions>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n    \n    \n    <!--MoveResizeControl Style-->\n    <Style TargetType=\"{x:Type n:MoveResizeControl}\">\n        <Setter Property=\"BorderBrush\" Value=\"White\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:MoveResizeControl}\">\n                    <Canvas Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" ClipToBounds=\"True\">\n                        <Border x:Name=\"SelectBorder\" Cursor=\"SizeAll\"\n                                Canvas.Left=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Left}\" Canvas.Top=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Top}\"\n                                Width=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Width}\" Height=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Height}\">\n                            <ContentPresenter/>\n                        </Border>\n\n                        <Rectangle x:Name=\"DashedRectangle\" StrokeDashArray=\"5\" Stroke=\"#FFABABAB\" \n                                   Canvas.Left=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Left}\" Canvas.Top=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Top}\"\n                                   Width=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Width}\" Height=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selected.Height}\"/>\n\n                        <Thumb x:Name=\"TopLeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNWSE\" Visibility=\"Collapsed\"/>\n                        <Thumb x:Name=\"TopRightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNESW\" Visibility=\"Collapsed\"/>\n                        <Thumb x:Name=\"BottomLeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNESW\" Visibility=\"Collapsed\"/>\n                        <Thumb x:Name=\"BottomRightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNWSE\" Visibility=\"Collapsed\"/>\n\n                        <Thumb x:Name=\"TopThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNS\" Visibility=\"Collapsed\"/>\n                        <Thumb x:Name=\"BottomThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeNS\" Visibility=\"Collapsed\"/>\n                        <Thumb x:Name=\"LeftThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeWE\" Visibility=\"Collapsed\"/>\n                        <Thumb x:Name=\"RightThumb\" Style=\"{DynamicResource ScrollBar.Thumb}\" Height=\"10\" Width=\"10\" Cursor=\"SizeWE\" Visibility=\"Collapsed\"/>\n                    </Canvas>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"CanResize\" Value=\"True\">\n                            <Setter TargetName=\"TopLeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"TopRightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomLeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomRightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n\n                            <Setter TargetName=\"TopThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"BottomThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"LeftThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"RightThumb\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        <Trigger Property=\"CanMove\" Value=\"False\">\n                            <Setter TargetName=\"SelectBorder\" Property=\"Cursor\" Value=\"Arrow\"/>\n                        </Trigger>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"CanResize\" Value=\"False\"/>\n                                <Condition Property=\"CanMove\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter TargetName=\"DashedRectangle\" Property=\"Visibility\" Value=\"Hidden\"/>\n                        </MultiTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--DrawingCanvas Style-->\n    <Style TargetType=\"{x:Type n:DrawingCanvas}\">\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Foreground\" Value=\"White\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"Focusable\" Value=\"True\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:DrawingCanvas}\">\n                    <Grid>\n                        <Canvas x:Name=\"MainCanvas\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" Background=\"{TemplateBinding Background}\">\n                            <Rectangle x:Name=\"SelectionRectangle\" Fill=\"#80737373\" Panel.ZIndex=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path= ControlsZIndex}\" Stroke=\"#FF737373\" StrokeThickness=\"1\" Tag=\"0\"\n                                       Canvas.Left=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selection.Left}\" Canvas.Top=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selection.Top}\"\n                                       Width=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selection.Width}\" Height=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Selection.Height}\"/>\n                        </Canvas>\n\n                        <InkCanvas x:Name=\"MainInkCanvas\" Width=\"{TemplateBinding Width}\" Height=\"{TemplateBinding Height}\" Background=\"Transparent\" Visibility=\"Collapsed\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"DrawingMode\" Value=\"Shape\">\n                            <Setter Property=\"Cursor\" Value=\"Cross\"/>\n                            <Setter TargetName=\"SelectionRectangle\" Property=\"Cursor\" Value=\"SizeAll\"/>\n                        </Trigger>\n                        <Trigger Property=\"DrawingMode\" Value=\"Select\">\n                            <Setter TargetName=\"SelectionRectangle\" Property=\"Cursor\" Value=\"Hand\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--DisplayTimer Style-->\n    <Style TargetType=\"{x:Type n:DisplayTimer}\">\n        <Setter Property=\"Background\" Value=\"DarkRed\"/>\n        <Setter Property=\"Foreground\" Value=\"White\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"Focusable\" Value=\"False\"/>\n        \n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:DisplayTimer}\">\n                    <Border x:Name=\"MainBorder\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderBrush}\" Padding=\"{TemplateBinding Padding}\"\n                            CornerRadius=\"{TemplateBinding CornerRadius}\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\">\n                        <Border.ToolTip>\n                            <Grid>\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" x:Name=\"ElapsedTooltipTextBlock\" Text=\"{DynamicResource S.Recorder.Timer.Elapsed}\"/>\n\n                                <TextBlock Grid.Row=\"1\" x:Name=\"AutomaticTooltipTextBlock\">\n                                    <Run Text=\"{DynamicResource S.Recorder.Timer.Total}\"/>\n                                    <Run Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=CapturedCount, StringFormat={}{0:N0}}\"/>\n                                </TextBlock>\n\n                                <TextBlock Grid.Row=\"2\" x:Name=\"ManualTooltipTextBlock\">\n                                    <Run Text=\"{DynamicResource S.Recorder.Timer.Manual}\"/>\n                                    <Run Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ManuallyCapturedCount, StringFormat={}{0:N0}}\"/>\n                                </TextBlock>\n\n                                <TextBlock Grid.Row=\"3\" x:Name=\"PausedTooltipTextBlock\" Text=\"{DynamicResource S.Recorder.Timer.Paused}\" Margin=\"0,3,0,0\" Visibility=\"Collapsed\"/>\n                                <TextBlock Grid.Row=\"3\" x:Name=\"ImpreciseTooltipTextBlock\" Text=\"{DynamicResource S.Recorder.Timer.Imprecise}\" Margin=\"0,3,0,0\" FontWeight=\"SemiBold\" Visibility=\"Collapsed\"/>\n                            </Grid>\n                        </Border.ToolTip>\n                        \n                        <Grid VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n                            \n                            <Border Grid.Column=\"0\" x:Name=\"ImpreciseBorder\" Background=\"{DynamicResource Vector.Warning}\" Height=\"12\" Width=\"0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            <Border Grid.Column=\"1\" x:Name=\"PauseBorder\" Background=\"{DynamicResource Vector.Pause.Color}\" Height=\"12\" Width=\"0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                            <TextBlock Grid.Column=\"2\" x:Name=\"NegativeTextBlock\" FontSize=\"14\" Padding=\"0\" Margin=\"0\" Text=\"-\" Visibility=\"Collapsed\"/>\n                            <TextBlock Grid.Column=\"3\" x:Name=\"ElapsedTextBlock\" FontSize=\"14\" Padding=\"0\" Margin=\"0\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Elapsed, Converter={StaticResource TimeSpanToString}}\"/>\n\n                            <TextBlock Grid.Column=\"4\" x:Name=\"ManualTextBlock\" FontSize=\"14\" Padding=\"0\" Margin=\"2,0,0,0\" Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ManuallyCapturedCount, StringFormat={}+{0:0}}\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsRunning\" Value=\"False\">\n                            <Setter TargetName=\"MainBorder\" Property=\"Opacity\" Value=\"0.7\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"IsPaused\" Value=\"True\">\n                            <Trigger.EnterActions>\n                                <BeginStoryboard>\n                                    <Storyboard TargetName=\"PauseBorder\">\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Width\" Duration=\"0:0:0.1\" From=\"0\" To=\"12\"/>\n                                        <ThicknessAnimation Storyboard.TargetProperty=\"Margin\" Duration=\"0:0:0.1\" From=\"0\" To=\"0,0,3,0\"/>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </Trigger.EnterActions>\n\n                            <Trigger.ExitActions>\n                                <BeginStoryboard>\n                                    <Storyboard TargetName=\"PauseBorder\">\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Width\" Duration=\"0:0:0.1\" From=\"12\"/>\n                                        <ThicknessAnimation Storyboard.TargetProperty=\"Margin\" Duration=\"0:0:0.1\" From=\"0,0,3,0\"/>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </Trigger.ExitActions>\n                            \n                            <Setter TargetName=\"PausedTooltipTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsImpreciseCapture\" Value=\"True\">\n                            <Trigger.EnterActions>\n                                <BeginStoryboard>\n                                    <Storyboard TargetName=\"ImpreciseBorder\">\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Width\" Duration=\"0:0:0.1\" From=\"0\" To=\"12\"/>\n                                        <ThicknessAnimation Storyboard.TargetProperty=\"Margin\" Duration=\"0:0:0.1\" From=\"0\" To=\"0,0,3,0\"/>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </Trigger.EnterActions>\n\n                            <Trigger.ExitActions>\n                                <BeginStoryboard>\n                                    <Storyboard TargetName=\"ImpreciseBorder\">\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Width\" Duration=\"0:0:0.1\" From=\"12\"/>\n                                        <ThicknessAnimation Storyboard.TargetProperty=\"Margin\" Duration=\"0:0:0.1\" From=\"0,0,3,0\"/>\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </Trigger.ExitActions>\n\n                            <Setter TargetName=\"ImpreciseTooltipTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsNegative\" Value=\"True\">\n                            <Setter TargetName=\"NegativeTextBlock\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"Elapsed\" Value=\"{x:Static s:TimeSpan.Zero}\">\n                            <Setter TargetName=\"ElapsedTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"ElapsedTooltipTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        \n                        <Trigger Property=\"ManuallyCapturedCount\" Value=\"0\">\n                            <Setter TargetName=\"ManualTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"ManualTooltipTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"CapturedCount\" Value=\"0\">\n                            <Setter TargetName=\"AutomaticTooltipTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n                        \n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"Elapsed\" Value=\"{x:Static s:TimeSpan.Zero}\"/>\n                                <Condition Property=\"ManuallyCapturedCount\" Value=\"0\"/>\n                            </MultiTrigger.Conditions>\n                            \n                            <Setter Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </MultiTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--TimeBox Style-->\n    <Style TargetType=\"{x:Type n:TimeBox}\">\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Padding\" Value=\"2\"/>\n        <Setter Property=\"MinHeight\" Value=\"23\"/>\n        <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"AllowDrop\" Value=\"True\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:TimeBox}\">\n                    <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Background=\"{TemplateBinding Background}\" \n                            VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" SnapsToDevicePixels=\"True\" CornerRadius=\"4\"\n                            Height=\"{TemplateBinding Height}\" Width=\"{TemplateBinding Width}\" MinWidth=\"{TemplateBinding MinWidth}\" MinHeight=\"{TemplateBinding MinHeight}\">\n                        <Grid x:Name=\"InnerGrid\">\n                            <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"False\" HorizontalScrollBarVisibility=\"Hidden\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                          VerticalScrollBarVisibility=\"Hidden\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n\n                            <Path x:Name=\"InnerPath\" Data=\"M 0,0 6,6 0,6 z\" Fill=\"{DynamicResource Element.Border.Required}\" HorizontalAlignment=\"Left\" \n                                  VerticalAlignment=\"Bottom\" Opacity=\"0\" ToolTip=\"{DynamicResource S.Required}\"/>\n                        </Grid>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsObligatory\" Value=\"True\"/>\n                                <Condition Property=\"Text\" Value=\"{x:Static s:String.Empty}\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Required}\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"InnerPath\" Value=\"1\"/>\n                        </MultiTrigger>\n                        \n                        <Trigger Property=\"IsReadOnly\" Value=\"True\">\n                            <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.ReadOnly}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.7\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"InnerPath\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </Trigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"IsKeyboardFocused\" Value=\"True\"/>\n                                <Condition Property=\"IsReadOnly\" Value=\"False\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                            <Setter Property=\"Background\" TargetName=\"border\" Value=\"{DynamicResource Element.Background.Focused}\"/>\n                            <Setter Property=\"Fill\" TargetName=\"InnerPath\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </MultiTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--Buttons-->\n    <Style x:Key=\"Style.Button.TitleBar\" TargetType=\"{x:Type Button}\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Padding\" Value=\"0\"/>\n        <Setter Property=\"WindowChrome.IsHitTestVisibleInChrome\" Value=\"True\"/>\n        <Setter Property=\"RenderOptions.EdgeMode\" Value=\"Aliased\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type Button}\">\n                    <Border Background=\"{TemplateBinding Background}\" BorderThickness=\"0\" SnapsToDevicePixels=\"true\">\n                        <ContentPresenter x:Name=\"contentPresenter\" Margin=\"0\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Focusable=\"False\" RecognizesAccessKey=\"True\" />\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"Style.Button.TitleBar.Close\" TargetType=\"{x:Type Button}\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Padding\" Value=\"0\"/>\n        <Setter Property=\"WindowChrome.IsHitTestVisibleInChrome\" Value=\"True\"/>\n        <Setter Property=\"RenderOptions.EdgeMode\" Value=\"Aliased\"/>\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type Button}\">\n                    <Border x:Name=\"border\" Background=\"Transparent\" BorderThickness=\"0\" SnapsToDevicePixels=\"true\">\n                        <Path Width=\"46\" Height=\"32\" Data=\"M 18,11 27,20 M 18,20 27,11\" Stroke=\"{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}\"\n                              StrokeThickness=\"1\" Margin=\"0\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                    </Border>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                            <Setter TargetName=\"border\" Property=\"Background\" Value=\"#C42B1C\"/>\n                            <Setter Property=\"Foreground\" Value=\"#FFFFFF\" />\n                        </Trigger>\n\n                        <Trigger Property=\"IsPressed\" Value=\"True\">\n                            <Setter TargetName=\"border\" Property=\"Background\" Value=\"#E6C42B1C\"/>\n                            <Setter Property=\"Foreground\" Value=\"#B3FFFFFF\" />\n                        </Trigger>\n\n                        <Trigger Property=\"IsEnabled\" Value=\"False\">\n                            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--Window-->\n    <Style TargetType=\"{x:Type n:ExWindow}\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Panel.Background}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExWindow}\">\n                    <Grid Background=\"{TemplateBinding Background}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition/>\n                        </Grid.RowDefinitions>\n\n                        <Grid Grid.Row=\"1\" x:Name=\"NonClientAreaElement\" Height=\"32\" VerticalAlignment=\"Top\" ZIndex=\"999\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Image Grid.Column=\"0\" x:Name=\"IconImage\" Width=\"18\" Height=\"18\" Source=\"{TemplateBinding Icon}\" Margin=\"10,4,5,4\"/>\n\n                            <TextBlock Grid.Column=\"1\" x:Name=\"TitleTextBlock\" Margin=\"5,0,0,0\" FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground}\"\n                                       VerticalAlignment=\"Center\" Text=\"{TemplateBinding Title}\"/>\n\n                            <Grid Grid.Column=\"2\" x:Name=\"CaptionButtonsGrid\" Visibility=\"Collapsed\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Button Grid.Column=\"0\" x:Name=\"MinimizeButton\" Style=\"{StaticResource Style.Button.TitleBar}\"\n                                        Width=\"46\" Height=\"32\" Margin=\"0,1,0,0\" Command=\"SystemCommands.MinimizeWindowCommand\">\n                                    <Path Width=\"46\" Height=\"32\" Data=\"M 18,15 H 28\" Stroke=\"{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}\" StrokeThickness=\"1\"/>\n                                </Button>\n\n                                <Button Grid.Column=\"1\" x:Name=\"MaximizeButton\" Style=\"{StaticResource Style.Button.TitleBar}\"\n                                        Width=\"46\" Height=\"32\" Margin=\"0,1,0,0\" Command=\"SystemCommands.MaximizeWindowCommand\">\n                                    <Path Width=\"46\" Height=\"32\" Data=\"M 18.5,10.5 H 27.5 V 19.5 H 18.5 Z\" Stroke=\"{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}\" StrokeThickness=\"1\"/>\n                                </Button>\n\n                                <Button Grid.Column=\"1\" x:Name=\"RestoreButton\" Style=\"{StaticResource Style.Button.TitleBar}\" Visibility=\"Collapsed\"\n                                        Width=\"46\" Height=\"32\" Margin=\"0,1,0,0\" Command=\"SystemCommands.RestoreWindowCommand\">\n                                    <Path Width=\"46\" Height=\"32\" Data=\"M 18.5,12.5 H 25.5 V 19.5 H 18.5 Z M 20.5,12.5 V 10.5 H 27.5 V 17.5 H 25.5\"\n                                          Stroke=\"{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}\" StrokeThickness=\"1\"/>\n                                </Button>\n\n                                <Button Grid.Column=\"2\" x:Name=\"CloseButton\" Style=\"{StaticResource Style.Button.TitleBar.Close}\"\n                                        Width=\"46\" Height=\"32\" Margin=\"0,1,1,0\" Command=\"SystemCommands.CloseWindowCommand\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Border Grid.Row=\"1\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                BorderThickness=\"{TemplateBinding BorderThickness}\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n                            <AdornerDecorator>\n                                <ContentPresenter/>\n                            </AdornerDecorator>\n                        </Border>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsActive\" Value=\"False\">\n                            <Setter TargetName=\"TitleTextBlock\" Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"ExtendIntoTitleBar\" Value=\"True\">\n                            <Setter TargetName=\"IconImage\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"TitleTextBlock\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"ExtendIntoTitleBar\" Value=\"False\">\n                            <Setter TargetName=\"NonClientAreaElement\" Property=\"Grid.Row\" Value=\"0\"/>\n                            <Setter Property=\"Padding\" Value=\"4,2\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"WindowState\" Value=\"Maximized\">\n                            <Setter TargetName=\"NonClientAreaElement\" Property=\"Margin\" Value=\"8,8,8,0\"/>\n                            <Setter Property=\"Padding\" Value=\"8,0,8,8\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"WillRenderCustomCaptionButtons\" Value=\"True\">\n                            <Setter TargetName=\"CaptionButtonsGrid\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"ShowMinimizeButton\" Value=\"False\">\n                            <Setter TargetName=\"MinimizeButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n\n                        <Trigger Property=\"ShowMaximizeButton\" Value=\"False\">\n                            <Setter TargetName=\"MaximizeButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"RestoreButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </Trigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"ShowMaximizeButton\" Value=\"True\"/>\n                                <Condition Property=\"WindowState\" Value=\"Maximized\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter TargetName=\"MaximizeButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                            <Setter TargetName=\"RestoreButton\" Property=\"Visibility\" Value=\"Visible\"/>\n                        </MultiTrigger>\n\n                        <MultiTrigger>\n                            <MultiTrigger.Conditions>\n                                <Condition Property=\"ShowMaximizeButton\" Value=\"True\"/>\n                                <Condition Property=\"WindowState\" Value=\"Normal\"/>\n                            </MultiTrigger.Conditions>\n\n                            <Setter TargetName=\"MaximizeButton\" Property=\"Visibility\" Value=\"Visible\"/>\n                            <Setter TargetName=\"RestoreButton\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                        </MultiTrigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <!--ListViewItem-->\n    <Style TargetType=\"{x:Type n:ExListViewItem}\">\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"Padding\" Value=\"3,1\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{DynamicResource Style.FocusVisual.NoMargin}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:ExListViewItem}\">\n                    <Border BorderBrush=\"{TemplateBinding BorderBrush}\" Background=\"{TemplateBinding Background}\" BorderThickness=\"1\" Padding=\"{TemplateBinding Padding}\" CornerRadius=\"4\">\n                        <Grid MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Row=\"0\" Grid.Column=\"0\" Background=\"{TemplateBinding Icon}\" Margin=\"2,0\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                    Height=\"{TemplateBinding ContentHeight}\" Width=\"{TemplateBinding ContentWidth}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n\n                            <ContentPresenter Grid.Column=\"1\" Content=\"{TemplateBinding Content}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                              Margin=\"{TemplateBinding Padding}\" VerticalAlignment=\"Center\">\n                                <ContentPresenter.Resources>\n                                    <Style TargetType=\"TextBlock\">\n                                        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\n                                    </Style>\n                                </ContentPresenter.Resources>\n                            </ContentPresenter>\n                        </Grid>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsSelected\" Value=\"True\"/>\n                    <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                </MultiTrigger.Conditions>\n                \n                <MultiTrigger.Setters>\n                    <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                    <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n                </MultiTrigger.Setters>\n            </MultiTrigger>\n\n            <Trigger Property=\"IsSelected\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Checked}\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsMouseOver\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Hover}\"/>\n            </Trigger>\n\n            <Trigger Property=\"IsPressed\" Value=\"True\">\n                <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background.Pressed}\"/>\n            </Trigger>\n        </Style.Triggers>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/Themes/Old.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                    xmlns:u=\"clr-namespace:ScreenToGif.Util\"\n                    xmlns:n=\"clr-namespace:ScreenToGif.Controls\">\n\n    <!--CheckBox Style-->\n    <Style TargetType=\"{x:Type CheckBox}\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\"/>\n\n        <!--Default Values-->\n        <Setter Property=\"FocusVisualStyle\">\n            <Setter.Value>\n                <Style>\n                    <Setter Property=\"Control.Template\">\n                        <Setter.Value>\n                            <ControlTemplate>\n                                <Rectangle Margin=\"2\" SnapsToDevicePixels=\"True\" Stroke=\"{DynamicResource Element.Border.Hover}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n                </Style>\n            </Setter.Value>\n        </Setter>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type CheckBox}\">\n                    <Grid x:Name=\"templateRoot\" Background=\"Transparent\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Border x:Name=\"checkBoxBorder\" Margin=\"1\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                        Background=\"{TemplateBinding Background}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                            <Grid x:Name=\"markGrid\">\n                                <Path x:Name=\"optionMark\" Data=\"F1 M 9.97498,.8 L 4.6983,9.09834  L 1,5.19331 L 1.27664,3.52165 L 4.255,6.08833 L 9.33331,1.288e-005 Z\" Fill=\"#FF858585\" Margin=\"1\" Opacity=\"0\" Stretch=\"None\"/>\n                                <Rectangle x:Name=\"indeterminateMark\" Fill=\"#FF858585\" Margin=\"2\" Opacity=\"0\"/>\n                            </Grid>\n                        </Border>\n\n                        <ContentPresenter x:Name=\"contentPresenter\" Grid.Column=\"1\" Focusable=\"False\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                                  Margin=\"{TemplateBinding Padding}\" RecognizesAccessKey=\"True\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" \n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"HasContent\" Value=\"True\">\n                            <Setter Property=\"FocusVisualStyle\">\n                                <Setter.Value>\n                                    <Style>\n                                        <Setter Property=\"Control.Template\">\n                                            <Setter.Value>\n                                                <ControlTemplate>\n                                                    <Rectangle Margin=\"14,0,0,0\" SnapsToDevicePixels=\"true\" Stroke=\"{DynamicResource Element.Border.Hover}\" StrokeThickness=\"1\" StrokeDashArray=\"1 2\"/>\n                                                </ControlTemplate>\n                                            </Setter.Value>\n                                        </Setter>\n                                    </Style>\n                                </Setter.Value>\n                            </Setter>\n                            <Setter Property=\"Padding\" Value=\"4,-1,0,0\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                            <!--<Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFD5E1F2\"/>-->\n                            <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFF3F9FF\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"#FFA3BDE3\"/>\n                            <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF212121\"/>\n                            <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"#FF212121\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsEnabled\" Value=\"false\">\n                            <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFE6E6E6\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"#FFBCBCBC\"/>\n                            <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF707070\"/>\n                            <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"#FF707070\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"true\">\n                            <Setter Property=\"Background\" TargetName=\"checkBoxBorder\" Value=\"#FFA3BDE3\"/>\n                            <Setter Property=\"BorderBrush\" TargetName=\"checkBoxBorder\" Value=\"#FFA3BDE3\"/>\n                            <Setter Property=\"Fill\" TargetName=\"optionMark\" Value=\"#FF212121\"/>\n                            <Setter Property=\"Fill\" TargetName=\"indeterminateMark\" Value=\"#FF212121\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsChecked\" Value=\"true\">\n                            <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"1\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"indeterminateMark\" Value=\"0\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsChecked\" Value=\"{x:Null}\">\n                            <Setter Property=\"Opacity\" TargetName=\"optionMark\" Value=\"0\"/>\n                            <Setter Property=\"Opacity\" TargetName=\"indeterminateMark\" Value=\"1\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type TextBox}\">\n        <Setter Property=\"Background\" Value=\"{DynamicResource Element.Background}\"/>\n        <Setter Property=\"BorderBrush\" Value=\"{DynamicResource Element.Border}\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground}\"/>\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n        <Setter Property=\"Padding\" Value=\"1\"/>\n        <Setter Property=\"MinHeight\" Value=\"23\"/>\n        <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\"/>\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n        <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\"/>\n        <Setter Property=\"AllowDrop\" Value=\"true\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n        <Setter Property=\"SelectionBrush\" Value=\"{DynamicResource Element.Selection}\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type TextBox}\">\n                    <Border x:Name=\"border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" \n                                    Background=\"{TemplateBinding Background}\" SnapsToDevicePixels=\"True\" Padding=\"{TemplateBinding Padding}\">\n                        <ScrollViewer x:Name=\"PART_ContentHost\" Focusable=\"false\" HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Hidden\"/>\n                    </Border>\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsEnabled\" Value=\"false\">\n                            <Setter Property=\"Opacity\" TargetName=\"border\" Value=\"0.56\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Hover}\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsKeyboardFocused\" Value=\"true\">\n                            <Setter Property=\"BorderBrush\" TargetName=\"border\" Value=\"{DynamicResource Element.Border.Pressed}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsInactiveSelectionHighlightEnabled\" Value=\"true\"/>\n                    <Condition Property=\"IsSelectionActive\" Value=\"false\"/>\n                </MultiTrigger.Conditions>\n                <Setter Property=\"SelectionBrush\" Value=\"{DynamicResource Element.Selection.Inactive}\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n\n    <!--Dropdown Button Style-->\n    <Style TargetType=\"{x:Type ToggleButton}\" x:Key=\"Style.ToggleButton.Horizontal.Simple\">\n        <Setter Property=\"OverridesDefaultStyle\" Value=\"true\"/>\n        <Setter Property=\"IsTabStop\" Value=\"false\"/>\n        <Setter Property=\"Focusable\" Value=\"false\"/>\n        <Setter Property=\"ClickMode\" Value=\"Press\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type ToggleButton}\">\n                    <Grid x:Name=\"templateRoot\" MinHeight=\"{TemplateBinding MinHeight}\" SnapsToDevicePixels=\"True\" Background=\"{TemplateBinding Background}\"/>\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"IsMouseOver\" Value=\"true\">\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFD5E1F2\"/>\n                        </Trigger>\n                        <Trigger Property=\"IsPressed\" Value=\"true\">\n                            <Setter Property=\"Background\" TargetName=\"templateRoot\" Value=\"#FFA3BDE3\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"{x:Type n:DropDownButton}\">\n        <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Style.FocusVisual.NoMargin}\"/>\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\n        <Setter Property=\"IsEditable\" Value=\"False\"/>\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}\"/>\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\"/>\n        <Setter Property=\"Padding\" Value=\"6,3,5,3\"/>\n        <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"true\"/>\n        <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\"/>\n        <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\"/>\n\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"{x:Type n:DropDownButton}\">\n                    <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"true\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition MinWidth=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\" Width=\"0\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Popup x:Name=\"PART_Popup\" AllowsTransparency=\"true\" Grid.ColumnSpan=\"2\" IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\" Placement=\"Bottom\">\n                            <Grid x:Name=\"shadow\" Background=\"Transparent\" MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                                <Border x:Name=\"DropDownBorder\" BorderBrush=\"#FFABADB3\" BorderThickness=\"1\" Background=\"White\" Effect=\"{DynamicResource Shadow.Border}\" Margin=\"0,0,0,5\">\n                                    <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                                        <Grid x:Name=\"grid\" RenderOptions.ClearTypeHint=\"Enabled\">\n                                            <Canvas x:Name=\"canvas\" HorizontalAlignment=\"Left\" Height=\"0\" VerticalAlignment=\"Top\" Width=\"0\">\n                                                <Rectangle x:Name=\"opaqueRect\" Fill=\"{Binding Background, ElementName=DropDownBorder}\" Height=\"{Binding ActualHeight, ElementName=DropDownBorder}\"\n                                                           Width=\"{Binding ActualWidth, ElementName=DropDownBorder}\"/>\n                                            </Canvas>\n                                            <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                                        </Grid>\n                                    </ScrollViewer>\n                                </Border>\n                            </Grid>\n                        </Popup>\n\n                        <ToggleButton Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ToggleButton\" Background=\"{TemplateBinding Background}\" \n                                      IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                                      IsEnabled=\"{TemplateBinding IsEnabled}\" Style=\"{StaticResource Style.ToggleButton.Horizontal.Simple}\"/>\n\n                        <Viewbox Grid.Column=\"0\" x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                 Margin=\"{TemplateBinding Padding}\" Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" IsHitTestVisible=\"False\" \n                                 Stretch=\"Uniform\" StretchDirection=\"Both\" MaxHeight=\"{TemplateBinding MaxSize}\" Effect=\"{x:Null}\">\n                            <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" HorizontalAlignment=\"Center\"/>\n                        </Viewbox>\n\n                        <TextBlock Grid.Column=\"1\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                   HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                   VerticalAlignment=\"Center\" Text=\"{TemplateBinding Description}\" TextWrapping=\"WrapWithOverflow\" \n                                   Effect=\"{TemplateBinding Effect}\" IsHitTestVisible=\"False\"/>\n\n                        <Path Grid.Column=\"2\" x:Name=\"arrow\" Data=\"F1 M 0,0 L 2.667,2.66665 L 5.3334,0 L 5.3334,-1.78168 L 2.6667,0.88501 L0,-1.78168 L0,0 Z\" \n                              Fill=\"#FF606060\" HorizontalAlignment=\"Center\" Margin=\"0,1,0,0\" VerticalAlignment=\"Center\"\n                              Width=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}\"/>\n                    </Grid>\n\n                    <ControlTemplate.Triggers>\n                        <Trigger Property=\"HasItems\" Value=\"false\">\n                            <Setter Property=\"Height\" TargetName=\"DropDownBorder\" Value=\"95\"/>\n                        </Trigger>\n                        <Trigger Property=\"ScrollViewer.CanContentScroll\" SourceName=\"DropDownScrollViewer\" Value=\"false\">\n                            <Setter Property=\"Canvas.Top\" TargetName=\"opaqueRect\" Value=\"{Binding VerticalOffset, ElementName=DropDownScrollViewer}\"/>\n                            <Setter Property=\"Canvas.Left\" TargetName=\"opaqueRect\" Value=\"{Binding HorizontalOffset, ElementName=DropDownScrollViewer}\"/>\n                        </Trigger>\n                    </ControlTemplate.Triggers>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n\n        <Style.Triggers>\n            <Trigger Property=\"IsVertical\" Value=\"True\">\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"{x:Type n:DropDownButton}\">\n                            <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"true\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"*\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <Popup x:Name=\"PART_Popup\" AllowsTransparency=\"true\" Grid.ColumnSpan=\"2\" IsOpen=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\" Placement=\"Bottom\">\n                                    <Grid x:Name=\"shadow\" Background=\"Transparent\" MaxHeight=\"{TemplateBinding MaxDropDownHeight}\" MinWidth=\"{Binding ActualWidth, ElementName=templateRoot}\">\n                                        <Border x:Name=\"DropDownBorder\" BorderBrush=\"#FFABADB3\" BorderThickness=\"1\" Background=\"White\" Effect=\"{DynamicResource Shadow.Border}\" Margin=\"0,0,0,5\">\n                                            <ScrollViewer x:Name=\"DropDownScrollViewer\">\n                                                <Grid x:Name=\"grid\" RenderOptions.ClearTypeHint=\"Enabled\">\n                                                    <Canvas x:Name=\"canvas\" HorizontalAlignment=\"Left\" Height=\"0\" VerticalAlignment=\"Top\" Width=\"0\">\n                                                        <Rectangle x:Name=\"opaqueRect\" Fill=\"{Binding Background, ElementName=DropDownBorder}\" Height=\"{Binding ActualHeight, ElementName=DropDownBorder}\"\n                                               Width=\"{Binding ActualWidth, ElementName=DropDownBorder}\"/>\n                                                    </Canvas>\n                                                    <ItemsPresenter x:Name=\"ItemsPresenter\" KeyboardNavigation.DirectionalNavigation=\"Contained\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\"/>\n                                                </Grid>\n                                            </ScrollViewer>\n                                        </Border>\n                                    </Grid>\n                                </Popup>\n\n                                <ToggleButton Grid.Row=\"0\" Grid.RowSpan=\"3\" x:Name=\"ToggleButton\" Background=\"{TemplateBinding Background}\" \n                                              IsChecked=\"{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}\" \n                                              IsEnabled=\"{TemplateBinding IsEnabled}\" Style=\"{StaticResource Style.ToggleButton.Horizontal.Simple}\"/>\n\n                                <Viewbox Grid.Row=\"0\" x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsEnabled=\"{TemplateBinding IsEnabled}\"\n                                         Margin=\"{TemplateBinding Padding}\" Width=\"{TemplateBinding MaxSize}\" Height=\"{TemplateBinding MaxSize}\" IsHitTestVisible=\"False\" \n                                         Stretch=\"Uniform\" StretchDirection=\"Both\" MaxHeight=\"{TemplateBinding MaxSize}\" Effect=\"{x:Null}\">\n                                    <ContentPresenter ContentSource=\"{TemplateBinding Content}\" Width=\"Auto\" Height=\"Auto\" HorizontalAlignment=\"Center\"/>\n                                </Viewbox>\n\n                                <TextBlock Grid.Row=\"1\" x:Name=\"TextBlockInternal\" MaxWidth=\"{Binding Path=ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\" \n                                           HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"{TemplateBinding Padding}\" \n                                           VerticalAlignment=\"Center\" Text=\"{TemplateBinding Description}\" TextWrapping=\"WrapWithOverflow\" \n                                           Effect=\"{TemplateBinding Effect}\" IsHitTestVisible=\"False\"/>\n\n                                <Viewbox Grid.Row=\"2\" MaxHeight=\"7\" MaxWidth=\"7\" Margin=\"1\" Stretch=\"Uniform\" StretchDirection=\"Both\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                                    <Path  x:Name=\"arrow\" Data=\"F1 M 0,0 L 2.667,2.66665 L 5.3334,0 L 5.3334,-1.78168 L 2.6667,0.88501 L0,-1.78168 L0,0 Z\" Fill=\"#FF606060\"/>\n                                </Viewbox>\n                            </Grid>\n\n                            <ControlTemplate.Triggers>\n                                <Trigger Property=\"HasItems\" Value=\"false\">\n                                    <Setter Property=\"Height\" TargetName=\"DropDownBorder\" Value=\"95\"/>\n                                </Trigger>\n                                <Trigger Property=\"ScrollViewer.CanContentScroll\" SourceName=\"DropDownScrollViewer\" Value=\"false\">\n                                    <Setter Property=\"Canvas.Top\" TargetName=\"opaqueRect\" Value=\"{Binding VerticalOffset, ElementName=DropDownScrollViewer}\"/>\n                                    <Setter Property=\"Canvas.Left\" TargetName=\"opaqueRect\" Value=\"{Binding HorizontalOffset, ElementName=DropDownScrollViewer}\"/>\n                                </Trigger>\n                            </ControlTemplate.Triggers>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Trigger>\n\n            <Trigger Property=\"IsEnabled\" Value=\"False\">\n                <Setter Property=\"Opacity\" Value=\".6\"/>\n                <Setter Property=\"Effect\" Value=\"{x:Null}\"/>\n            </Trigger>\n            <MultiTrigger>\n                <MultiTrigger.Conditions>\n                    <Condition Property=\"IsGrouping\" Value=\"true\"/>\n                    <Condition Property=\"VirtualizingPanel.IsVirtualizingWhenGrouping\" Value=\"false\"/>\n                </MultiTrigger.Conditions>\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"false\"/>\n            </MultiTrigger>\n        </Style.Triggers>\n    </Style>\n</ResourceDictionary>"
  },
  {
    "path": "ScreenToGif/UserControls/BorderPanel.xaml",
    "content": "﻿<UserControl x:Class=\"ScreenToGif.UserControls.BorderPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"400\" d:DesignWidth=\"300\"\n             SnapsToDevicePixels=\"True\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"27\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n        <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"BorderColorBox\" Margin=\"10,5\"\n                        SelectedColor=\"{Binding Color, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <Grid Grid.Row=\"1\" Grid.Column=\"1\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <Grid Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" HorizontalAlignment=\"Center\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Border Grid.Column=\"0\" Background=\"{StaticResource Vector.Arrow.Blue.Top}\" Width=\"15\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                    <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"BorderTopThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"20\" Margin=\"3,5\" Width=\"55\" \n                                     Value=\"{Binding TopThickness, Mode=TwoWay}\"/>\n                </Grid>\n\n                <Border Grid.Row=\"1\" Grid.Column=\"0\" Background=\"{StaticResource Vector.Arrow.Blue.Left}\" Width=\"15\" Height=\"15\" Margin=\"5,0,0,0\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"BorderLeftThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"20\" Margin=\"3,5\" Width=\"55\" \n                                 Value=\"{Binding LeftThickness, Mode=TwoWay}\"/>\n\n                <Border Grid.Row=\"1\" Grid.Column=\"3\" Background=\"{StaticResource Vector.Arrow.Blue.Right}\" Width=\"15\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"BorderRightThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"20\" Margin=\"3,5\" Width=\"55\" \n                                 Value=\"{Binding RightThickness, Mode=TwoWay}\"/>\n\n                <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" HorizontalAlignment=\"Center\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Border Grid.Column=\"0\" Background=\"{StaticResource Vector.Arrow.Blue.Bottom}\" Width=\"15\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                    <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"BorderBottomThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"20\" Margin=\"3,5\" Width=\"55\" \n                                     Value=\"{Binding BottomThickness, Mode=TwoWay}\"/>\n                </Grid>\n            </Grid>\n        </Grid>\n\n        <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Border.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                       FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n        </Grid>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/BorderPanel.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class BorderPanel : UserControl\n{\n    public BorderPanel()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/DelayPanel.xaml",
    "content": "﻿<UserControl x:Class=\"ScreenToGif.UserControls.DelayPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"210\" d:DesignWidth=\"300\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"27\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Delay}\"/>\n        <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Delay.Mode}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"TypeComboBox\" Margin=\"10,5\" \n                      SelectedIndex=\"{Binding Type, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}\">\n                <ComboBoxItem Content=\"{DynamicResource S.Delay.Mode.Override}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Delay.Mode.IncreaseDecrease}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Delay.Mode.Scale}\"/>\n            </ComboBox>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.DelayMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                       Visibility=\"{Binding ElementName=NewDelayIntegerUpDown, Path=Visibility}\"/>\n            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"NewDelayIntegerUpDown\" Minimum=\"10\" Maximum=\"25500\" Margin=\"10,5\" MinWidth=\"80\" \n                             Value=\"{Binding NewDelay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                             Visibility=\"{Binding ElementName=TypeComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=0}\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.ValueMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                       Visibility=\"{Binding ElementName=IncreaseDecreaseDelayIntegerUpDown, Path=Visibility}\"/>\n            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"IncreaseDecreaseDelayIntegerUpDown\" Minimum=\"-10000\" Maximum=\"10000\" Margin=\"10,5\" MinWidth=\"80\" \n                             Value=\"{Binding IncreaseDecreaseDelay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                             Visibility=\"{Binding ElementName=TypeComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=1}\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.ScaleValue}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                       Visibility=\"{Binding ElementName=ScalePercentageDoubleUpDown, Path=Visibility}\"/>\n            <n:DoubleUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ScalePercentageDoubleUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                            Value=\"{Binding Percent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                            Visibility=\"{Binding ElementName=TypeComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=2}\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{Binding DelayTypeUnit, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                       VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Delay.Override.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                       FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"\n                       Visibility=\"{Binding ElementName=TypeComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=0}\"/>\n\n            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Delay.IncreaseDecrease.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                       FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"\n                       Visibility=\"{Binding ElementName=TypeComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=1}\"/>\n\n            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Delay.Scale.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\"\n                       FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"\n                       Visibility=\"{Binding ElementName=TypeComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=2}\"/>\n        </Grid>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/DelayPanel.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class DelayPanel : UserControl\n{\n    public DelayPanel()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/ExportPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.ExportPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:i=\"clr-namespace:ScreenToGif.Controls.Items\"\n             xmlns:u=\"clr-namespace:ScreenToGif.Util.Converters\"\n             xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n             xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n             xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n             xmlns:p=\"clr-namespace:ScreenToGif.ViewModel.UploadPresets;assembly=ScreenToGif.ViewModel\"\n             xmlns:uc=\"clr-namespace:ScreenToGif.UserControls\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"450\" d:DesignWidth=\"300\" Focusable=\"False\" IsTabStop=\"False\"\n             x:Name=\"ThisPanel\" Loaded=\"Panel_Loaded\" Unloaded=\"ExportPanel_Unloaded\">\n    \n    <UserControl.Resources>\n        <c:SelectionCountToDescription x:Key=\"SelectionCountToDescription\"/>\n        <c:ContentToVisibility x:Key=\"ContentToVisibility\"/>\n        <u:PresetToSubViewModelConverter x:Key=\"PresetToSubViewModel\"/>\n        \n        <x:Array x:Key=\"ExportItemArray\" Type=\"{x:Type i:ExportItem}\">\n            <!--Animated Image-->\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Apng}\" Description=\"{DynamicResource S.SaveAs.Apng.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Animated}\" FileType=\"{x:Static e:ExportFormats.Apng}\" ImageId=\"Vector.Apng\"/>\n\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Gif}\" Description=\"{DynamicResource S.SaveAs.Gif.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Animated}\" FileType=\"{x:Static e:ExportFormats.Gif}\" ImageId=\"Vector.Gif\"/>\n\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Webp}\" Description=\"{DynamicResource S.SaveAs.Webp.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Animated}\" FileType=\"{x:Static e:ExportFormats.Webp}\" ImageId=\"Vector.Webp\"/>\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Avif}\" Description=\"{DynamicResource S.SaveAs.Avif.Info}\"\n              ExportType=\"{DynamicResource S.SaveAs.Type.Animated}\" FileType=\"{x:Static e:ExportFormats.Avif}\" ImageId=\"Vector.Jpeg\"/>\n            \n            <!--Video-->\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Avi}\" Description=\"{DynamicResource S.SaveAs.Avi.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Video}\" FileType=\"{x:Static e:ExportFormats.Avi}\" ImageId=\"Vector.Video\"/>\n            \n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Mkv}\" Description=\"{DynamicResource S.SaveAs.Mkv.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Video}\" FileType=\"{x:Static e:ExportFormats.Mkv}\" ImageId=\"Vector.Video\"/>\n            \n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Mov}\" Description=\"{DynamicResource S.SaveAs.Mov.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Video}\" FileType=\"{x:Static e:ExportFormats.Mov}\" ImageId=\"Vector.Video\"/>\n            \n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Mp4}\" Description=\"{DynamicResource S.SaveAs.Mp4.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Video}\" FileType=\"{x:Static e:ExportFormats.Mp4}\" ImageId=\"Vector.Video\"/>\n            \n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Webm}\" Description=\"{DynamicResource S.SaveAs.Webm.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Video}\" FileType=\"{x:Static e:ExportFormats.Webm}\" ImageId=\"Vector.Video\"/>\n            \n            <!--Frames-->\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Bmp}\" Description=\"{DynamicResource S.SaveAs.Bmp.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Frames}\" FileType=\"{x:Static e:ExportFormats.Bmp}\" ImageId=\"Vector.Bmp\"/>\n\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Jpeg}\" Description=\"{DynamicResource S.SaveAs.Jpeg.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Frames}\" FileType=\"{x:Static e:ExportFormats.Jpeg}\" ImageId=\"Vector.Jpeg\"/>\n\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Png}\" Description=\"{DynamicResource S.SaveAs.Png.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Frames}\" FileType=\"{x:Static e:ExportFormats.Png}\" ImageId=\"Vector.Apng\"/>\n            \n            <!--Other-->\n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Project}\" Description=\"{DynamicResource S.SaveAs.Project.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Other}\" FileType=\"{x:Static e:ExportFormats.Stg}\" ImageId=\"Vector.Project\"/>\n            \n            <i:ExportItem Title=\"{DynamicResource S.SaveAs.Psd}\" Description=\"{DynamicResource S.SaveAs.Psd.Info}\"\n                          ExportType=\"{DynamicResource S.SaveAs.Type.Other}\" FileType=\"{x:Static e:ExportFormats.Psd}\" ImageId=\"Vector.Psd\"/>\n        </x:Array>\n\n        <CollectionViewSource x:Key=\"CollectionViewSource\" Source=\"{StaticResource ExportItemArray}\">\n            <CollectionViewSource.GroupDescriptions>\n                <PropertyGroupDescription PropertyName=\"ExportType\"/>\n            </CollectionViewSource.GroupDescriptions>\n        </CollectionViewSource>\n    </UserControl.Resources>\n\n    <Grid x:Name=\"MainGrid\" DataContext=\"{Binding ElementName=ThisPanel, Path=CurrentPreset, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Expander Grid.Row=\"0\" Header=\"{DynamicResource S.SaveAs.Type}\" IsExpanded=\"{Binding IsSaveTypeExpanded, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <ComboBox Grid.Row=\"0\" x:Name=\"TypeComboBox\" VerticalAlignment=\"Center\" Margin=\"10,3,5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                          SelectedValue=\"{Binding SaveType, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" SelectedValuePath=\"FileType\"\n                          ToolTip=\"{DynamicResource S.SaveAs.Type.Format}\" ItemsSource=\"{Binding Source={StaticResource CollectionViewSource}}\"\n                          SelectionChanged=\"TypeComboBox_SelectionChanged\">\n\n                    <ComboBox.GroupStyle>\n                        <GroupStyle>\n                            <GroupStyle.HeaderTemplate>\n                                <DataTemplate>\n                                    <n:LabelSeparator Text=\"{Binding Name}\"/>\n                                </DataTemplate>\n                            </GroupStyle.HeaderTemplate>\n                        </GroupStyle>\n                    </ComboBox.GroupStyle>\n                </ComboBox>\n\n                <ComboBox Grid.Row=\"1\" x:Name=\"PresetComboBox\" VerticalAlignment=\"Center\" Margin=\"10,3,5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                          ToolTip=\"{DynamicResource S.SaveAs.Type.Preset}\" SelectionChanged=\"PresetComboBox_SelectionChanged\"/>\n\n                <Grid Grid.Row=\"2\" Margin=\"5,0\" Height=\"35\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition />\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Border Grid.Column=\"0\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Background=\"{DynamicResource Brush.StatusBand.Info}\" CornerRadius=\"3\" Margin=\"5,0\"\n                            Visibility=\"{Binding ElementName=PresetComboBox, Path=SelectedItem.HasAutoSave, Converter={StaticResource Bool2Visibility}}\" ToolTip=\"{DynamicResource S.Preset.Autosave.Info}\">\n                        <TextBlock Text=\"{DynamicResource S.Preset.Autosave}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3,0\" Padding=\"0\" VerticalAlignment=\"Center\"/>\n                    </Border>\n\n                    <n:ExtendedButton Grid.Column=\"1\" x:Name=\"AddPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Add}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"AddPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Presets.Add}\" ToolTipService.Placement=\"Bottom\"/>\n                    <n:ExtendedButton Grid.Column=\"2\" x:Name=\"SavePresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Save}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"SavePreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Presets.Save}\" ToolTipService.Placement=\"Bottom\"\n                                      IsEnabled=\"{Binding ElementName=PresetComboBox, Path=SelectedItem.HasAutoSave, Converter={StaticResource InvertedBool}}\"/>\n                    <n:ExtendedButton Grid.Column=\"3\" x:Name=\"EditPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Pen}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"EditPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Presets.Edit}\" ToolTipService.Placement=\"Bottom\"/>\n                    <n:ExtendedButton Grid.Column=\"4\" x:Name=\"RemovePresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Remove}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"RemovePreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Presets.Remove}\" ToolTipService.Placement=\"Bottom\"\n                                      IsEnabled=\"{Binding ElementName=PresetComboBox, Path=SelectedItem.IsDefault, Converter={StaticResource InvertedBool}}\"/>\n                    <n:ExtendedButton Grid.Column=\"5\" x:Name=\"ResetPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Repeat}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"ResetPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Presets.Reset}\" ToolTipService.Placement=\"Bottom\"\n                                      IsEnabled=\"{Binding ElementName=PresetComboBox, Path=SelectedItem.IsDefault, FallbackValue=False}\"/>\n                </Grid>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"1\" x:Name=\"EncoderExpander\" Header=\"{DynamicResource S.SaveAs.Encoder}\" IsExpanded=\"{Binding IsEncoderExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <ComboBox Grid.Row=\"0\" x:Name=\"EncoderComboBox\" VerticalAlignment=\"Center\" Margin=\"10,3,5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                          SelectedValuePath=\"Value\" ToolTip=\"{DynamicResource S.SaveAs.Encoder.Info}\" SelectionChanged=\"EncoderComboBox_SelectionChanged\">\n                    <ComboBox.ItemContainerStyle>\n                        <Style TargetType=\"ComboBoxItem\">\n                            <Style.Triggers>\n                                <DataTrigger Binding=\"{Binding IsEnabled}\" Value=\"False\">\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\"/>\n                                </DataTrigger>\n                            </Style.Triggers>\n                        </Style>\n                    </ComboBox.ItemContainerStyle>\n\n                    <i:GenericItem x:Name=\"EncoderScreenToGifItem\" Title=\"ScreenToGif\" Description=\"{DynamicResource S.SaveAs.Encoder.ScreenToGif.Info}\"\n                                   Value=\"{x:Static e:EncoderTypes.ScreenToGif}\" ImageId=\"Vector.Logo\"/>\n\n                    <i:GenericItem x:Name=\"EncoderKGySoftItem\" Title=\"KGy SOFT\" Description=\"{DynamicResource S.SaveAs.Encoder.KGySoft.Info}\"\n                                   Value=\"{x:Static e:EncoderTypes.KGySoft}\" ImageId=\"Vector.KGySoft\"/>\n\n                    <i:GenericItem x:Name=\"EncoderFfmpegItem\" Title=\"FFmpeg\" Description=\"{DynamicResource S.SaveAs.Encoder.Ffmpeg.Info}\"\n                                   Value=\"{x:Static e:EncoderTypes.FFmpeg}\" ImageId=\"Vector.Ffmpeg\"/>\n\n                    <i:GenericItem x:Name=\"EncoderGifskiItem\" Title=\"Gifski\" Description=\"{DynamicResource S.SaveAs.Encoder.Gifski.Info}\"\n                                   Value=\"{x:Static e:EncoderTypes.Gifski}\" ImageId=\"Vector.Gifski\"/>\n\n                    <i:GenericItem x:Name=\"EncoderSystemItem\" Title=\"System\" Description=\"{DynamicResource S.SaveAs.Encoder.System.Info}\"\n                                   Value=\"{x:Static e:EncoderTypes.System}\" ImageId=\"Vector.Net\"/>\n                </ComboBox>\n\n                <ComboBox Grid.Row=\"1\" x:Name=\"QuantizerComboBox\" VerticalAlignment=\"Center\" Margin=\"10,3,5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                          SelectedValuePath=\"QuantizationType\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Info}\" Visibility=\"Collapsed\"\n                          SelectedValue=\"{Binding Quantizer}\" SelectionChanged=\"QuantizerComboBox_SelectionChanged\">\n\n                    <i:QuantizationMethodItem Title=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Neural}\" Description=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Neural.Info}\"\n                                              QuantizationType=\"{x:Static e:ColorQuantizationTypes.Neural}\" ImageId=\"Vector.Encoder.HighFidelity\"/>\n\n                    <i:QuantizationMethodItem Title=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Octree}\" Description=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Octree.Info}\"\n                                              QuantizationType=\"{x:Static e:ColorQuantizationTypes.Octree}\" ImageId=\"Vector.Encoder.LowGraphics\"/>\n\n                    <i:QuantizationMethodItem Title=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.MedianCut}\" Description=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.MedianCut.Info}\"\n                                              QuantizationType=\"{x:Static e:ColorQuantizationTypes.MedianCut}\" ImageId=\"Vector.Encoder.LowGraphics\"/>\n\n                    <i:QuantizationMethodItem Title=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Grayscale}\" Description=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.Grayscale.Info}\"\n                                              QuantizationType=\"{x:Static e:ColorQuantizationTypes.Grayscale}\" ImageId=\"Vector.Encoder.Grayscale\"/>\n\n                    <i:QuantizationMethodItem Title=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.MostUsed}\" Description=\"{DynamicResource S.SaveAs.GifOptions.Quantizer.MostUsed.Info}\"\n                                              QuantizationType=\"{x:Static e:ColorQuantizationTypes.MostUsed}\" ImageId=\"Vector.Encoder.MostUsed\"/>\n                </ComboBox>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"2\" x:Name=\"EncoderOptionsExpander\" Header=\"{DynamicResource S.SaveAs.Encoder.Options}\" IsExpanded=\"{Binding IsEncoderOptionsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n            <Grid x:Name=\"EncoderGrid\">\n                <!--Apng-->\n                <Grid x:Name=\"EmbeddedApngOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <n:ExtendedCheckBox Grid.Row=\"0\" x:Name=\"ApngLoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.ApngOptions.Looped}\" \n                                        IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding IsChecked, ElementName=ApngLoopedCheckBox, Converter={StaticResource Bool2Visibility}}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"1*\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"ApngRepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                            Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever, Mode=TwoWay}\"/>\n\n                        <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"RepeatCountApngIntegerUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                                         Value=\"{Binding RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding IsChecked, ElementName=ApngRepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   IsEnabled=\"{Binding IsChecked, ElementName=ApngRepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                    </Grid>\n\n                    <n:ExtendedCheckBox Grid.Row=\"2\" x:Name=\"ApngDetectCheckBox\" Margin=\"0,3,3,3\" Text=\"{DynamicResource S.SaveAs.ApngOptions.DetectUnchanged}\" \n                                        IsChecked=\"{Binding DetectUnchanged}\"/>\n\n                    <n:ExtendedCheckBox Grid.Row=\"3\" x:Name=\"ApngPaintTransparentCheckBox\" Margin=\"10,3,3,3\" Text=\"{DynamicResource S.SaveAs.ApngOptions.PaintTransparent}\" \n                                        IsChecked=\"{Binding PaintTransparent}\" Visibility=\"{Binding ElementName=ApngDetectCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                </Grid>\n\n                <Grid x:Name=\"FfmpegApngOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\" IsSharedSizeScope=\"True\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <!--Mode-->\n                    <Grid Grid.Row=\"0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Mode}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Name=\"FfmpegApngModeComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding SettingsMode}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Normal}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Normal}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Advanced}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Advanced}\"/>\n                        </ComboBox>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Advanced}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters}\" VerticalAlignment=\"Top\" Padding=\"0\" Margin=\"0,6,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FfmpegApngParameterTextBox\" MinHeight=\"23\" Margin=\"5,3,3,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\"\n                                           AcceptsReturn=\"True\" Text=\"{Binding Parameters}\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters.Info}\"/>\n                        \n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"3,0\">\n                            <Hyperlink NavigateUri=\"http://bing.com\" RequestNavigate=\"PreviewCommand_RequestNavigate\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Preview.Info}\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Preview}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"http://www.ffmpeg.org/ffmpeg-filters.html\" RequestNavigate=\"Hyperlink_RequestNavigate\" ToolTip=\"ffmpeg.org\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Filters}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Normal}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        \n                        <!--Prediction methods-->\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.ApngOptions.Prediction}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegApngPreditionComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding PredictionMethod}\">\n                            <ComboBoxItem Tag=\"{x:Static e:PredictionMethods.None}\" Content=\"{DynamicResource S.SaveAs.ApngOptions.Prediction.None}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:PredictionMethods.Sub}\" Content=\"{DynamicResource S.SaveAs.ApngOptions.Prediction.Sub}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:PredictionMethods.Up}\" Content=\"{DynamicResource S.SaveAs.ApngOptions.Prediction.Up}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:PredictionMethods.Avg}\" Content=\"{DynamicResource S.SaveAs.ApngOptions.Prediction.Average}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:PredictionMethods.Paeth}\" Content=\"Paeth\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:PredictionMethods.Mixed}\" Content=\"{DynamicResource S.SaveAs.ApngOptions.Prediction.Mixed}\"/>\n                        </ComboBox>\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"3\" x:Name=\"PredictionHelpButton\" Margin=\"0,3,3,3\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Question}\"\n                                          ContentHeight=\"15\" ContentWidth=\"15\" ToolTip=\"{DynamicResource S.Documentation}\" Click=\"PredictionHelpButton_Click\"/>\n\n                        <!--Pixel Format-->\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegApngPixelFormatComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding PixelFormat}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Gray}\" Content=\"Gray\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Gray16Be}\" Content=\"Gray16Be\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.MonoB}\" Content=\"MonoB\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Pal8}\" Content=\"Pal8\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Rgb24}\" Content=\"Rgb24\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.RgbA}\" Content=\"RgbA\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Rgb48Be}\" Content=\"Rgb48Be\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Rgba64Be}\" Content=\"Rgba64Be\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Ya8}\" Content=\"Ya8\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Ya16Be}\" Content=\"Ya16Be\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Framerate}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegApngFramerateComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Framerate}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Film}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Film}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Pal}\" Content=\"PAL\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Ntsc}\" Content=\"NTSC\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Custom}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Custom}\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <n:DoubleUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"FfmpegApngFramerateIntegerUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"1\" Maximum=\"1000\" Value=\"{Binding CustomFramerate, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Framerate, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:Framerates.Custom}}\"/>\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"2\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"\n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\" Visibility=\"{Binding ElementName=FfmpegApngFramerateIntegerUpDown, Path=Visibility}\"/>\n\n                        <!--Loop-->\n                        <n:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" x:Name=\"FfmpegApngLoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.ApngOptions.Looped}\" \n                                            IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                        <Grid Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" Visibility=\"{Binding IsChecked, ElementName=FfmpegApngLoopedCheckBox, Converter={StaticResource Bool2Visibility}}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"1*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegApngRepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                                Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever, Mode=TwoWay}\"/>\n\n                            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"FfmpegRepeatCountApngIntegerUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                                             Value=\"{Binding RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding IsChecked, ElementName=FfmpegApngRepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                       IsEnabled=\"{Binding IsChecked, ElementName=FfmpegApngRepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                        </Grid>\n                    </Grid>\n                </Grid>\n\n                <!--Gif-->\n                <Grid x:Name=\"EmbeddedGifOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <!--Sampling factor-->\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"SamplingTextBlock\" Text=\"{DynamicResource S.SaveAs.GifOptions.Sampling}\" VerticalAlignment=\"Center\" Margin=\"0,3,3,3\" Padding=\"0\" \n                               Foreground=\"{DynamicResource Element.Foreground.Medium}\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Sampling.Info}\"/>\n\n                    <Slider Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"SamplingFactorSlider\" Margin=\"0,3,3,0\" AutoToolTipPlacement=\"TopLeft\" TickPlacement=\"BottomRight\" \n                            Minimum=\"1\" Maximum=\"20\" Value=\"{Binding SamplingFactor, Mode=TwoWay}\" \n                            SmallChange=\"1\" IsSnapToTickEnabled=\"True\" IsMoveToPointEnabled=\"True\" Visibility=\"{Binding Visibility, ElementName=SamplingTextBlock, Mode=OneWay}\"\n                            ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Sampling.Info}\"/>\n\n                    <Grid Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"SamplingFactorGrid\" Margin=\"0,0,3,3\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Column=\"0\" FontSize=\"11\">\n                            <Run Text=\"1\"/>\n                            <Run Text=\"•\"/>\n                            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Best}\"/>\n                        </TextBlock>\n\n                        <TextBlock Grid.Column=\"2\" FontSize=\"11\">\n                            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Fastest}\"/>\n                            <Run Text=\"•\"/>\n                            <Run Text=\"20\"/>\n                        </TextBlock>\n                    </Grid>\n                    \n                    <!--Color count-->\n                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.Colors}\" VerticalAlignment=\"Center\" Padding=\"0\" Margin=\"0,3,3,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"5\" Width=\"80\" Minimum=\"2\" Maximum=\"256\" HorizontalAlignment=\"Left\"\n                                     Value=\"{Binding MaximumColorCount, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Colors.Info}\"/>\n\n                    <!--Global color table-->\n                    <n:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"GlobalColorTableCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.GlobalColorTable}\" TextWrapping=\"Wrap\"\n                                        IsChecked=\"{Binding UseGlobalColorTable}\" Margin=\"0,3,3,3\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.GlobalColorTable.Info}\">\n                        <n:ExtendedCheckBox.Visibility>\n                            <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                                <Binding Path=\"ColorQuantization\" Converter=\"{StaticResource InvertedEnumToBool}\" ConverterParameter=\"{x:Static e:ColorQuantizationTypes.Octree}\"/>\n                                <Binding Path=\"ColorQuantization\" Converter=\"{StaticResource InvertedEnumToBool}\" ConverterParameter=\"{x:Static e:ColorQuantizationTypes.Grayscale}\"/>\n                            </MultiBinding>\n                        </n:ExtendedCheckBox.Visibility>\n                    </n:ExtendedCheckBox>\n\n                    <!--Loop-->\n                    <n:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"LoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Looped}\" IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                    <Grid Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Visibility=\"{Binding ElementName=LoopedCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"1*\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"RepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                            Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever}\"/>\n\n                        <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"RepeatCountNumericUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                                         Value=\"{Binding RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding IsChecked, ElementName=RepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                                   IsEnabled=\"{Binding IsChecked, ElementName=RepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                    </Grid>\n\n                    <!--Transparency-->\n                    <n:ExtendedCheckBox Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"EnableTransparencyCheckBox\" Margin=\"0,3,3,3\" Text=\"{DynamicResource S.SaveAs.GifOptions.Transparency.Enable}\" \n                                        IsChecked=\"{Binding EnableTransparency}\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Transparency.Enable.Info}\" CheckedChanged=\"EnableTransparencyCheckBox_CheckedChanged\"/>\n\n                    <Grid Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"10,0,0,0\" Visibility=\"{Binding ElementName=EnableTransparencyCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"SelectTransparentColorCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Transparency.Pick}\" \n                                            IsChecked=\"{Binding SelectTransparencyColor}\" Margin=\"0,3,3,3\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Transparency.Pick.Info}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Margin=\"10,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   Visibility=\"{Binding IsChecked, ElementName=SelectTransparentColorCheckBox, Converter={StaticResource Bool2Visibility}, Mode=OneWay}\"/>\n                        <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"TransparencyColorBox\" Margin=\"10,5\" Width=\"100\"\n                                    SelectedColor=\"{Binding TransparencyColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                    Visibility=\"{Binding IsChecked, ElementName=SelectTransparentColorCheckBox, Converter={StaticResource Bool2Visibility}, Mode=OneWay}\"/>\n                    </Grid>\n\n                    <!--Detect unchanged pixels-->\n                    <n:ExtendedCheckBox Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"DetectCheckBox\" Margin=\"0,3,3,3\" Text=\"{DynamicResource S.SaveAs.GifOptions.DetectUnchanged}\" \n                                        IsChecked=\"{Binding DetectUnchanged}\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.DetectUnchanged.Info}\"\n                                        IsEnabled=\"{Binding EnableTransparency, Converter={StaticResource InvertedBool}}\"/>\n\n                    <Grid Grid.Row=\"9\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"10,0,0,0\" Visibility=\"{Binding ElementName=DetectCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"PaintWithChromaCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.PaintWithChroma}\" TextWrapping=\"Wrap\"\n                                            IsChecked=\"{Binding PaintTransparent}\" Margin=\"0,3,3,3\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.PaintWithChroma.Info}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.ChromaKey}\" VerticalAlignment=\"Center\" Margin=\"10,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   Visibility=\"{Binding IsChecked, ElementName=PaintWithChromaCheckBox, Converter={StaticResource Bool2Visibility}, Mode=OneWay}\"/>\n                        <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ChromaKeyColorBox\" Margin=\"10,5\" Width=\"100\" SelectedColor=\"{Binding ChromaKey, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                    Visibility=\"{Binding IsChecked, ElementName=PaintWithChromaCheckBox, Converter={StaticResource Bool2Visibility}, Mode=OneWay}\"/>\n                    </Grid>\n                </Grid>\n\n                <uc:KGySoftGifOptionsPanel x:Name=\"KGySoftGifOptionsPanel\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\"\n                                           DataContext=\"{Binding Converter={StaticResource PresetToSubViewModel}}\"\n                                           CurrentFrame=\"{Binding ElementName=ThisPanel, Path=CurrentFrame, Mode=OneWay}\"/>\n\n                <Grid x:Name=\"FfmpegGifOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\" IsSharedSizeScope=\"True\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <!--Mode-->\n                    <Grid Grid.Row=\"0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Mode}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Name=\"FfmpegGifModeComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding SettingsMode}\" \n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Normal}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Normal}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Advanced}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Advanced}\"/>\n                        </ComboBox>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Advanced}, FallbackValue=Collapsed}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters}\" VerticalAlignment=\"Top\" Padding=\"0\" Margin=\"0,6,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FfmpegGifParameterTextBox\" MinHeight=\"23\" Margin=\"5,3,3,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\"\n                                           AcceptsReturn=\"True\" Text=\"{Binding Parameters}\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters.Info}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"3,0\">\n                            <Hyperlink NavigateUri=\"http://bing.com\" RequestNavigate=\"PreviewCommand_RequestNavigate\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Preview.Info}\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Preview}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"https://ffmpeg.org/ffmpeg-formats.html#gif-2\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Format}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"http://www.ffmpeg.org/ffmpeg-filters.html#palettegen-1\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Filters}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Normal}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <!--Dither-->\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.Dither}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegGifDitherComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Dither}\">\n                            <ComboBoxItem Tag=\"{x:Static e:DitherMethods.Bayer}\" Content=\"Bayer\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:DitherMethods.Heckbert}\" Content=\"Heckbert\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:DitherMethods.FloydSteinberg}\" Content=\"Floyd Steinberg\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:DitherMethods.Sierra2}\" Content=\"Sierra 2\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:DitherMethods.Sierra2Lite}\" Content=\"Sierra 2 Lite\"/>\n                        </ComboBox>\n\n                        <!--Bayer scale-->\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.Dither.Scale}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   Visibility=\"{Binding ElementName=BayerScaleUpDown, Path=Visibility}\"/>\n                        <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"BayerScaleUpDown\" Margin=\"5,3,3,3\" Width=\"80\" Minimum=\"0\" Maximum=\"5\" HorizontalAlignment=\"Left\"\n                                         Value=\"{Binding BayerScale, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Colors.Info}\"\n                                         Visibility=\"{Binding Dither, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:DitherMethods.Bayer}}\"/>\n                        \n                        <!--Pixel Format-->\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegGifPixelFormatComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding PixelFormat}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Bgr4Byte}\" Content=\"Bgr4Byte\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Bgr8}\" Content=\"Bgr8\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Gray}\" Content=\"Gray\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Pal8}\" Content=\"Pal8\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Rgb4Byte}\" Content=\"Rgb4Byte\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Rgb8}\" Content=\"Rgb8\"/>\n                        </ComboBox>\n\n                        <!--Vsync-->\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Vsync}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"3\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegGifVsyncComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Vsync}\"\n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Off}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Off}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Passthrough}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Passthrough}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Cfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Cfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Vfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Vfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Drop}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Drop}\"/>\n                        </ComboBox>\n                        \n                        <!--Framerate-->\n                        <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Framerate}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"4\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegGifFramerateComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Framerate}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Film}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Film}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Pal}\" Content=\"PAL\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Ntsc}\" Content=\"NTSC\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Custom}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Custom}\"/>\n                        </ComboBox>\n\n                        <!--Custom Framerate-->\n                        <n:DoubleUpDown Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"FfmpegGifFramerateIntegerUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"1\" Maximum=\"1000\" Value=\"{Binding CustomFramerate, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Framerate, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:Framerates.Custom}}\"/>\n                        <TextBlock Grid.Row=\"5\" Grid.Column=\"2\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"\n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\" Visibility=\"{Binding ElementName=FfmpegGifFramerateIntegerUpDown, Path=Visibility}\"/>\n\n                        <!--Global color table-->\n                        <n:ExtendedCheckBox Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegGifGlobalColorTableCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.GlobalColorTable}\" TextWrapping=\"Wrap\"\n                                            IsChecked=\"{Binding UseGlobalColorTable}\" Margin=\"0,3,3,3\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.GlobalColorTable.Info}\"/>\n                        <!--Loop-->\n                        <n:ExtendedCheckBox Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegGifLoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Looped}\" \n                                            IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                        <Grid Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Visibility=\"{Binding Looped, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"1*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegGifRepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                                Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever, Mode=TwoWay}\"/>\n\n                            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"FfmpegRepeatCountGifIntegerUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                                             Value=\"{Binding RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding RepeatForever, Converter={StaticResource InvertedBool}}\"/>\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                       IsEnabled=\"{Binding RepeatForever, Converter={StaticResource InvertedBool}}\"/>\n                        </Grid>\n                    </Grid>\n                </Grid>\n\n                <Grid x:Name=\"GifskiGifOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <!--Quality-->\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.Quality}\" VerticalAlignment=\"Center\" Margin=\"0,3,3,3\" Padding=\"0\" \n                               Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                    <Slider Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"GifskiQualitySlider\" Margin=\"0,3,3,0\" AutoToolTipPlacement=\"TopLeft\" TickPlacement=\"BottomRight\" \n                            Minimum=\"1\" Maximum=\"100\" Value=\"{Binding Quality}\" SmallChange=\"1\" IsSnapToTickEnabled=\"True\" IsMoveToPointEnabled=\"True\"/>\n\n                    <Grid Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"0,0,3,3\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Column=\"0\" FontSize=\"11\">\n                            <Run Text=\"1\"/>\n                            <Run Text=\"•\"/>\n                            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Fastest}\"/>\n                        </TextBlock>\n\n                        <TextBlock Grid.Column=\"2\" FontSize=\"11\">\n                            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Best}\"/>\n                            <Run Text=\"•\"/>\n                            <Run Text=\"100\"/>\n                        </TextBlock>\n                    </Grid>\n                    \n                    <!--Faster encoding-->\n                    <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"GifskiFastCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Gifski.Faster}\" TextWrapping=\"Wrap\"\n                                        IsChecked=\"{Binding Fast}\" Margin=\"0,3,3,3\" ToolTip=\"{DynamicResource S.SaveAs.GifOptions.Gifski.Faster.Info}\"/>\n\n                    <!--Loop-->\n                    <n:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"GifskiRepeatForeverCheckBox\" Margin=\"0,3,3,3\"\n                                        Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever}\"/>\n                </Grid>\n\n                <Grid x:Name=\"SystemGifOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <!--Loop-->\n                    <n:ExtendedCheckBox Grid.Row=\"0\" x:Name=\"SystemGifLoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Looped}\" \n                                        IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding ElementName=SystemGifLoopedCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"1*\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"SystemGifRepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                            Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever}\"/>\n\n                        <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"SystemGifRepeatCountNumericUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                                         Value=\"{Binding Path=RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding IsChecked, ElementName=FfmpegGifRepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                                   VerticalAlignment=\"Center\" IsEnabled=\"{Binding IsChecked, ElementName=FfmpegGifRepeatForeverCheckBox, Converter={StaticResource InvertedBool}}\"/>\n                    </Grid>\n                </Grid>\n \n                <!--Webp-->\n                <Grid x:Name=\"FfmpegWebpOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\" IsSharedSizeScope=\"True\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <!--Mode-->\n                    <Grid Grid.Row=\"0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"WebpModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Mode}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Name=\"FfmpegWebpModeComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding SettingsMode}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Normal}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Normal}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Advanced}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Advanced}\"/>\n                        </ComboBox>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Advanced}, FallbackValue=Collapsed}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"WebpModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters}\" VerticalAlignment=\"Top\" Padding=\"0\" Margin=\"0,6,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FfmpegWebpParameterTextBox\" MinHeight=\"23\" Margin=\"5,3,3,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\"\n                                           AcceptsReturn=\"True\" Text=\"{Binding Parameters}\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters.Info}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"3,0\">\n                            <Hyperlink NavigateUri=\"http://bing.com\" RequestNavigate=\"PreviewCommand_RequestNavigate\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Preview.Info}\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Preview}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"https://ffmpeg.org/ffmpeg-formats.html#libwebp\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Format}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"http://www.ffmpeg.org/ffmpeg-filters.html\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Filters}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Normal}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"WebpModeSizeGroup\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <!--Codec Preset-->\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegWebpPresetComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding CodecPreset}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.None}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.None}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.Default}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.Default}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.Drawing}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.Drawing}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.Icon}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.Icon}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.Picture}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.Picture}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.Photo}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.Photo}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoCodecPresets.Text}\" Content=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset.Text}\"/>\n                        </ComboBox>\n\n                        <!--Pixel Format-->\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegWebpPixelFormatComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding PixelFormat}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.BgrA}\" Content=\"BgrA\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Yuv420p}\" Content=\"Yuv420p\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoPixelFormats.Yuva420p}\" Content=\"Yuva420p\"/>\n                        </ComboBox>\n\n                        <!--Vsync-->\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Vsync}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegWebpVsyncComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Vsync}\"\n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Off}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Off}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Passthrough}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Passthrough}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Cfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Cfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Vfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Vfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Drop}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Drop}\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Framerate}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"3\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegWebpFramerateComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Framerate}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Film}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Film}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Pal}\" Content=\"PAL\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Ntsc}\" Content=\"NTSC\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Custom}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Custom}\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <n:DoubleUpDown Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"FfmpegWebpFramerateIntegerUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"1\" Maximum=\"1000\" Value=\"{Binding CustomFramerate, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Framerate, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:Framerates.Custom}}\"/>\n                        <TextBlock Grid.Row=\"4\" Grid.Column=\"2\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"\n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\" Visibility=\"{Binding ElementName=FfmpegGifFramerateIntegerUpDown, Path=Visibility}\"/>\n\n                        <!--Quality-->\n                        <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.Quality}\" VerticalAlignment=\"Center\" Margin=\"0,3,3,3\" Padding=\"0\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                        <Slider Grid.Row=\"5\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"WebpQualitySlider\" Margin=\"5,3,3,0\" AutoToolTipPlacement=\"TopLeft\" TickPlacement=\"BottomRight\" \n                                Minimum=\"0\" Maximum=\"100\" Value=\"{Binding Quality, Mode=TwoWay}\" SmallChange=\"1\" IsSnapToTickEnabled=\"True\" IsMoveToPointEnabled=\"True\"/>\n\n                        <Grid Grid.Row=\"6\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"WebpQualityGrid\" Margin=\"0,0,3,3\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <TextBlock Grid.Column=\"0\" FontSize=\"11\">\n                            <Run Text=\"0\"/>\n                            <Run Text=\"•\"/>\n                            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Fastest}\"/>\n                            </TextBlock>\n\n                            <TextBlock Grid.Column=\"2\" FontSize=\"11\">\n                            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Best}\"/>\n                            <Run Text=\"•\"/>\n                            <Run Text=\"100\"/>\n                            </TextBlock>\n                        </Grid>\n\n                        <!--Lossless-->\n                        <n:ExtendedCheckBox Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegWebpLosslessCheckBox\" Text=\"{DynamicResource S.SaveAs.WebpOptions.Lossless}\" TextWrapping=\"Wrap\"\n                                            IsChecked=\"{Binding Lossless}\" Margin=\"0,3,3,3\"/>\n\n                        <!--Loop-->\n                        <n:ExtendedCheckBox Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" x:Name=\"FfmpegWebpLoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Looped}\" \n                                            IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                        <Grid Grid.Row=\"9\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" Visibility=\"{Binding Looped, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"1*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegWebpRepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                                Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever, Mode=TwoWay}\"/>\n\n                            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"FfmpegRepeatCountWebpIntegerUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                                             Value=\"{Binding RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding RepeatForever, Converter={StaticResource InvertedBool}}\"/>\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                       IsEnabled=\"{Binding RepeatForever, Converter={StaticResource InvertedBool}}\"/>\n                        </Grid>\n                    </Grid>\n                </Grid>\n\n                <!-- Avif -->\n                <Grid x:Name=\"FfmpegAvifOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\" IsSharedSizeScope=\"True\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <!--Mode-->\n                    <Grid Grid.Row=\"0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"WebpModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Mode}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Name=\"FfmpegAvifModeComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding SettingsMode}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Normal}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Normal}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Advanced}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Advanced}\"/>\n                        </ComboBox>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Advanced}, FallbackValue=Collapsed}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"WebpModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters}\" VerticalAlignment=\"Top\" Padding=\"0\" Margin=\"0,6,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FfmpegAvifParameterTextBox\" MinHeight=\"23\" Margin=\"5,3,3,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\"\n                           AcceptsReturn=\"True\" Text=\"{Binding Parameters}\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters.Info}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"3,0\">\n            <Hyperlink NavigateUri=\"http://bing.com\" RequestNavigate=\"PreviewCommand_RequestNavigate\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Preview.Info}\">\n                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Preview}\"/>\n            </Hyperlink>\n            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n            <Hyperlink NavigateUri=\"https://ffmpeg.org/ffmpeg-formats.html#avif\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Format}\"/>\n            </Hyperlink>\n            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n            <Hyperlink NavigateUri=\"http://www.ffmpeg.org/ffmpeg-filters.html\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Filters}\"/>\n            </Hyperlink>\n                        </TextBlock>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Normal}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"WebpModeSizeGroup\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <!--Codec-->\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Codec}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegAvifCodecComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Type\"\n              ItemTemplate=\"{StaticResource Template.ComboBox.Item}\" SelectedValue=\"{Binding VideoCodec, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n              ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Codec.Info}\"/>\n\n                        <!--Acceleration Engine-->\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegAvifAccelerationComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n              SelectedValue=\"{Binding HardwareAcceleration, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n              ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Info}\"\n              IsEnabled=\"False\">\n                            <!-- We have not implemented av1_qsv/nvenc/amf yet, so IsEnabled=\"False\" is necessary here -->\n                            <!-- <ComboBoxItem Tag=\"{x:Static e:HardwareAccelerationModes.Off}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Off}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:HardwareAccelerationModes.On}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.On}\"/> -->\n                            <ComboBoxItem Tag=\"{x:Static e:HardwareAccelerationModes.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Auto}\"/>\n                        </ComboBox>\n\n                        <!--Pixel Format-->\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegAvifPixelFormatComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Type\" SelectedValue=\"{Binding PixelFormat, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" ItemsSource=\"{Binding ElementName=FfmpegAvifCodecComboBox, Path=SelectedItem.PixelFormats}\"  ItemTemplate=\"{StaticResource Template.ComboBox.Item}\"/>\n\n                        <!--Vsync-->\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Vsync}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"3\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegAvifVsyncComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Vsync}\"\n                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Off}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Off}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Passthrough}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Passthrough}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Cfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Cfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Vfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Vfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Drop}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Drop}\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Framerate}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"4\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"FfmpegAvifFramerateComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Framerate}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Film}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Film}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Pal}\" Content=\"PAL\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Ntsc}\" Content=\"NTSC\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Custom}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Custom}\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <n:DoubleUpDown Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"FfmpegAvifFramerateIntegerUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"1\" Maximum=\"1000\" Value=\"{Binding CustomFramerate, Mode=TwoWay}\"\n                        Visibility=\"{Binding Framerate, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:Framerates.Custom}}\"/>\n                        <TextBlock Grid.Row=\"5\" Grid.Column=\"2\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"\n                   Foreground=\"{DynamicResource Element.Foreground.Medium}\" Visibility=\"{Binding ElementName=FfmpegGifFramerateIntegerUpDown, Path=Visibility}\"/>\n\n                        <!--Quality-->\n                        <TextBlock Grid.Row=\"6\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.GifOptions.Quality}\" VerticalAlignment=\"Center\" Margin=\"0,3,3,3\" Padding=\"0\" \n                   Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                        <Slider Grid.Row=\"6\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"AvifQualitySlider\" Margin=\"5,3,3,0\" AutoToolTipPlacement=\"TopLeft\" TickPlacement=\"BottomRight\" \n                Minimum=\"0\" Maximum=\"100\" Value=\"{Binding Quality, Mode=TwoWay}\" SmallChange=\"1\" IsSnapToTickEnabled=\"True\" IsMoveToPointEnabled=\"True\"/>\n\n                        <Grid Grid.Row=\"7\" Grid.Column=\"1\" Grid.ColumnSpan=\"3\" x:Name=\"AvifQualityGrid\" Margin=\"0,0,3,3\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition/>\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <TextBlock Grid.Column=\"0\" FontSize=\"11\">\n            <Run Text=\"0\"/>\n            <Run Text=\"•\"/>\n            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Fastest}\"/>\n                            </TextBlock>\n\n                            <TextBlock Grid.Column=\"2\" FontSize=\"11\">\n            <Run Text=\"{DynamicResource S.SaveAs.GifOptions.Best}\"/>\n            <Run Text=\"•\"/>\n            <Run Text=\"100\"/>\n                            </TextBlock>\n                        </Grid>\n\n                        <!--Loop-->\n                        <n:ExtendedCheckBox Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" x:Name=\"FfmpegAvifLoopedCheckBox\" Text=\"{DynamicResource S.SaveAs.GifOptions.Looped}\" \n                            IsChecked=\"{Binding Looped}\" Margin=\"0,3,3,3\"/>\n\n                        <Grid Grid.Row=\"9\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" Visibility=\"{Binding Looped, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"1*\"/>\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegAvifRepeatForeverCheckBox\" Margin=\"10,3,3,3\"\n                                Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatForever}\" IsChecked=\"{Binding RepeatForever, Mode=TwoWay}\"/>\n\n                            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"FfmpegRepeatCountAvifIntegerUpDown\" Margin=\"10,3,3,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"100\" \n                             Value=\"{Binding RepeatCount, Mode=TwoWay}\" MinWidth=\"45\" IsEnabled=\"{Binding RepeatForever, Converter={StaticResource InvertedBool}}\"/>\n                            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.GifOptions.RepeatCount}\" Margin=\"0,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                       IsEnabled=\"{Binding RepeatForever, Converter={StaticResource InvertedBool}}\"/>\n                        </Grid>\n                    </Grid>\n                </Grid>\n\n                <!--Videos-->\n                <Grid x:Name=\"FfmpegVideoOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\" IsSharedSizeScope=\"True\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    \n                    <!--Mode-->\n                    <Grid Grid.Row=\"0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Mode}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Name=\"FfmpegVideoModeComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\" \n                                  SelectedValue=\"{Binding SettingsMode, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Normal}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Normal}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:VideoSettingsModes.Advanced}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Mode.Advanced}\"/>\n                        </ComboBox>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Advanced}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters}\" VerticalAlignment=\"Top\" Padding=\"0\" Margin=\"0,6,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FfmpegVideoParameterTextBox\" MinHeight=\"23\" Margin=\"5,3,3,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\"\n                                           AcceptsReturn=\"True\" Text=\"{Binding Parameters, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters.Info}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"3,0\">\n                            <Hyperlink NavigateUri=\"http://bing.com\" RequestNavigate=\"PreviewCommand_RequestNavigate\" ToolTip=\"{DynamicResource S.SaveAs.Ffmpeg.Preview.Info}\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Preview}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"https://ffmpeg.org/ffmpeg-formats.html\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Format}\"/>\n                            </Hyperlink>\n                            <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            <Hyperlink NavigateUri=\"http://www.ffmpeg.org/ffmpeg-filters.html\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                <Run Text=\"{DynamicResource S.SaveAs.Ffmpeg.Help.Filters}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n\n                        <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"10,10,5,0\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.SaveAs.Ffmpeg.Parameters.Pass}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Visibility=\"{Binding SettingsMode, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:VideoSettingsModes.Normal}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\" SharedSizeGroup=\"ModeSizeGroup\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <!--Codec-->\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Codec}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegCodecComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Type\"\n                                  ItemTemplate=\"{StaticResource Template.ComboBox.Item}\" SelectedValue=\"{Binding VideoCodec, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Codec.Info}\"/>\n                    \n                        <!--Codec Presets-->\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.WebpOptions.CodecPreset}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegVideoPresetComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Type\"\n                                  SelectedValue=\"{Binding CodecPreset, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                  ItemTemplate=\"{StaticResource Template.ComboBox.Item}\" ItemsSource=\"{Binding ElementName=FfmpegCodecComboBox, Path=SelectedItem.CodecPresets}\" \n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.CodecPreset.Info}\"/>\n                    \n                        <!--Acceleration Engine-->\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegAccelerationComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding HardwareAcceleration, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:HardwareAccelerationModes.Off}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Off}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:HardwareAccelerationModes.On}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.On}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:HardwareAccelerationModes.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Auto}\"/>\n                        </ComboBox>\n\n                        <!--Pixel Format-->\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"3\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegPixelFormatComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Type\"\n                                  SelectedValue=\"{Binding PixelFormat, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" ItemTemplate=\"{StaticResource Template.ComboBox.Item}\"\n                                  ItemsSource=\"{Binding ElementName=FfmpegCodecComboBox, Path=SelectedItem.PixelFormats}\"/>\n\n                        <!--Vsync-->\n                        <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Vsync}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"4\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegVsyncComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding Vsync, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                  ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Info}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Off}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.HardwareAcceleration.Off}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Passthrough}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Passthrough}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Cfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Cfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Vfr}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Vfr}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Vsyncs.Drop}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Vsync.Drop}\"/>\n                        </ComboBox>\n                        \n                        <!--Framerate-->\n                        <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Framerate}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"5\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegFramerateComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding Framerate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\">\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Auto}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.PixelFormat.Auto}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Film}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Film}\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Pal}\" Content=\"PAL\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Ntsc}\" Content=\"NTSC\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:Framerates.Custom}\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Framerate.Custom}\"/>\n                        </ComboBox>\n\n                        <!--Framerate-->\n                        <n:DecimalUpDown Grid.Row=\"6\" Grid.Column=\"1\" x:Name=\"FfmpegFramerateDoubleUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"1\" Maximum=\"1000\"\n                                         Value=\"{Binding CustomFramerate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                         Visibility=\"{Binding Framerate, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:Framerates.Custom}}\"/>\n                        <TextBlock Grid.Row=\"6\" Grid.Column=\"2\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"\n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\" Visibility=\"{Binding ElementName=FfmpegFramerateDoubleUpDown, Path=Visibility}\"/>\n                        \n                        <!--Pass-->\n                        <TextBlock Grid.Row=\"7\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Pass}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:IntegerUpDown Grid.Row=\"7\" Grid.Column=\"1\" x:Name=\"FfmpegPassIntegerUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"1\" Maximum=\"2\"\n                                         Value=\"{Binding Pass, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"/>\n                        \n                        <!--CRF-->\n                        <TextBlock Grid.Row=\"8\" Grid.Column=\"0\" Text=\"CRF:\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   Visibility=\"{Binding ElementName=FfmpegCrfDecimalUpDown, Path=Visibility}\"/>\n                        <n:NullableIntegerUpDown Grid.Row=\"8\" Grid.Column=\"1\" x:Name=\"FfmpegCrfDecimalUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\"\n                                                 Minimum=\"{Binding ElementName=FfmpegCodecComboBox, Path=SelectedItem.MinimumCrf}\" Maximum=\"{Binding ElementName=FfmpegCodecComboBox, Path=SelectedItem.MaximumCrf}\" \n                                                 Value=\"{Binding ConstantRateFactor, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                                 Visibility=\"{Binding ElementName=FfmpegCodecComboBox, Path=SelectedItem.CanSetCrf, Converter={StaticResource Bool2Visibility}}\"\n                                                 ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Crf.Info}\"/>\n                        \n                        <!--Bitrate Mode-->\n                        <TextBlock Grid.Row=\"9\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Mode}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Row=\"9\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FfmpegBitrateComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding IsVariableBitRate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\">\n                            <ComboBoxItem Tag=\"False\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Mode.Constant}\"/>\n                            <ComboBoxItem Tag=\"True\" Content=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Mode.Variable}\"/>\n                        </ComboBox>\n                        \n                        <!--Quality Level-->\n                        <TextBlock Grid.Row=\"10\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.QualityLevel}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   Visibility=\"{Binding ElementName=FfmpegQualityLevelIntegerUpDown, Path=Visibility}\"/>\n                        <n:IntegerUpDown Grid.Row=\"10\" Grid.Column=\"1\" x:Name=\"FfmpegQualityLevelIntegerUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"0\" Maximum=\"31\"\n                                         Value=\"{Binding QualityLevel, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" EmptyIfValue=\"0\" ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.QualityLevel.Info}\"\n                                         Visibility=\"{Binding IsVariableBitRate, Converter={StaticResource Bool2Visibility}}\"/>\n                        \n                        <!--Bitrate-->\n                        <TextBlock Grid.Row=\"10\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                   Visibility=\"{Binding ElementName=FfmpegBitrateDecimalUpDown, Path=Visibility}\"/>\n                        <n:DecimalUpDown Grid.Row=\"10\" Grid.Column=\"1\" x:Name=\"FfmpegBitrateDecimalUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"0\" Maximum=\"999999\"\n                                         Value=\"{Binding BitRate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" \n                                         EmptyIfValue=\"0\" ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Info}\" Visibility=\"{Binding IsVariableBitRate, Converter={StaticResource InvertedBoolToVisibility}}\"/>\n                        <ComboBox Grid.Row=\"10\" Grid.Column=\"2\" x:Name=\"FfmpegBitrateUnitComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding BitRateUnit, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                  Visibility=\"{Binding ElementName=FfmpegBitrateDecimalUpDown, Path=Visibility}\">\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Bits}\" Content=\"Bits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Kilobits}\" Content=\"Kilobits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Megabits}\" Content=\"Megabits\"/>\n                        </ComboBox>\n                        \n                        <!--Minimum rate-->\n                        <TextBlock Grid.Row=\"11\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Minimum}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:DecimalUpDown Grid.Row=\"11\" Grid.Column=\"1\" x:Name=\"FfmpegMinBitrateDecimalUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"0\" Maximum=\"999999\"\n                                         Value=\"{Binding MinimumBitRate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" \n                                         EmptyIfValue=\"0\" ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Minimum.Info}\"/>\n                        <ComboBox Grid.Row=\"11\" Grid.Column=\"2\" x:Name=\"FfmpegMinBitrateUnitComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding MinimumBitRateUnit, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\">\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Bits}\" Content=\"Bits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Kilobits}\" Content=\"Kilobits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Megabits}\" Content=\"Megabits\"/>\n                        </ComboBox>\n\n                        <!--Maximum rate-->\n                        <TextBlock Grid.Row=\"12\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Maximum}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:DecimalUpDown Grid.Row=\"12\" Grid.Column=\"1\" x:Name=\"FfmpegMaxBitrateDecimalUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"0\" Maximum=\"999999\"\n                                         Value=\"{Binding MaximumBitRate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" \n                                         EmptyIfValue=\"0\" ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Maximum.Info}\"/>\n                        <ComboBox Grid.Row=\"12\" Grid.Column=\"2\" x:Name=\"FfmpegMaxBitrateUnitComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding MaximumBitRateUnit, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\">\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Bits}\" Content=\"Bits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Kilobits}\" Content=\"Kilobits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Megabits}\" Content=\"Megabits\"/>\n                        </ComboBox>\n\n                        <!--Buffer size-->\n                        <TextBlock Grid.Row=\"13\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Buffer}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <n:DecimalUpDown Grid.Row=\"13\" Grid.Column=\"1\" x:Name=\"FfmpegBufferBitrateDecimalUpDown\" Margin=\"5,3,3,3\" MinWidth=\"80\" StepValue=\"1\" Minimum=\"0\" Maximum=\"999999\"\n                                         Value=\"{Binding RateControlBuffer, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" \n                                         EmptyIfValue=\"0\" ToolTip=\"{DynamicResource S.SaveAs.VideoOptions.Bitrate.Buffer.Info}\"/>\n                        <ComboBox Grid.Row=\"13\" Grid.Column=\"2\" x:Name=\"FfmpegBufferBitrateUnitComboBox\" Margin=\"5,3,3,3\" Height=\"23\" SelectedValuePath=\"Tag\"\n                                  SelectedValue=\"{Binding RateControlBufferUnit, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\">\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Bits}\" Content=\"Bits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Kilobits}\" Content=\"Kilobits\"/>\n                            <ComboBoxItem Tag=\"{x:Static e:RateUnits.Megabits}\" Content=\"Megabits\"/>\n                        </ComboBox>\n                    </Grid>\n                </Grid>\n\n                <!--Images-->\n                <Grid x:Name=\"EmbeddedImageOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <n:ExtendedCheckBox Grid.Row=\"0\" x:Name=\"ImagesZipCheckBox\" Margin=\"0,3,3,3\" IsChecked=\"{Binding ZipFiles, FallbackValue=False}\"\n                                        Text=\"{DynamicResource S.SaveAs.ImageOptions.Zip}\" ToolTip=\"{DynamicResource S.SaveAs.ImageOptions.Zip.Info}\" CheckedChanged=\"ImagesZipCheckBox_CheckedChanged\"/>\n                </Grid>\n\n                <!--Project-->\n                <Grid x:Name=\"EmbeddedStgOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Recorder.Compression}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"0\" VerticalAlignment=\"Center\"/>\n                    <ComboBox Grid.Column=\"1\" x:Name=\"ProjectCompressionComboBox\" MinWidth=\"120\" VerticalAlignment=\"Center\" Margin=\"5,3\"\n                              SelectedIndex=\"{Binding CompressionLevel, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                        <ComboBoxItem Content=\"{DynamicResource S.Options.Recorder.Compression.Optimal}\"/>\n                        <ComboBoxItem Content=\"{DynamicResource S.Options.Recorder.Compression.Fastest}\"/>\n                        <ComboBoxItem Content=\"{DynamicResource S.Options.Recorder.Compression.NoCompression}\"/>\n                    </ComboBox>\n                </Grid>\n                \n                <!--Photoshop-->\n                <Grid x:Name=\"EmbeddedPsdOptionsGrid\" Margin=\"10,0,0,0\" Visibility=\"Collapsed\">\n                    <n:ExtendedCheckBox Grid.Row=\"0\" x:Name=\"PsdCompressImageCheckBox\" Margin=\"0,3,3,3\" IsChecked=\"{Binding CompressImage, FallbackValue=False}\"\n                                        Text=\"{DynamicResource S.SaveAs.PsdOptions.Compress}\" ToolTip=\"{DynamicResource S.SaveAs.PsdOptions.Compress.Info}\"/>\n                </Grid>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"3\" x:Name=\"SaveOptionsExpander\" Header=\"{DynamicResource S.SaveAs.SaveOptions}\" IsExpanded=\"{Binding IsExportOptionsExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n            <Grid x:Name=\"SaveGrid\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <n:ExtendedCheckBox Grid.Row=\"0\" x:Name=\"PartialExportCheckBox\" Text=\"{DynamicResource S.SaveAs.SaveOptions.Partial}\" Margin=\"10,3,3,3\"\n                                    IsChecked=\"{Binding ExportPartially, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=False}\"/>\n                \n                <n:ExtendedCheckBox Grid.Row=\"1\" x:Name=\"SaveFileCheckBox\" Text=\"{DynamicResource S.SaveAs.SaveOptions.PickFolder}\" Margin=\"10,3,3,3\"\n                                    IsChecked=\"{Binding PickLocation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=False}\"\n                                    CheckedChanged=\"SaveType_Checked\"/>\n\n                <Grid Grid.Row=\"2\" Visibility=\"{Binding ElementName=SaveFileCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <StackPanel Orientation=\"Horizontal\" Margin=\"20,0,0,0\">\n                        <TextBlock Text=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"0\" VerticalAlignment=\"Center\"/>\n\n                        <WrapPanel Margin=\"5,0,0,0\">\n                            <n:ExtendedRadioButton x:Name=\"OverwriteWarnRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode.Warn}\" \n                                           IsChecked=\"{Binding OverwriteMode, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:OverwriteModes.Warn}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode.Warn.Info}\"/>\n                            <Separator Width=\"1\"/>\n                            <n:ExtendedRadioButton x:Name=\"OverwritePromptRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode.Prompt}\" \n                                           IsChecked=\"{Binding OverwriteMode, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:OverwriteModes.Prompt}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode.Prompt.Info}\"/>\n                            <Separator Width=\"1\"/>\n                            <n:ExtendedRadioButton x:Name=\"OverwriteAllowRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode.Allow}\" \n                                           IsChecked=\"{Binding OverwriteMode, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:OverwriteModes.Allow}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.OverwriteMode.Allow.Info}\"/>\n                        </WrapPanel>\n                    </StackPanel>\n                    \n                    <n:ExtendedCheckBox Grid.Row=\"1\" x:Name=\"SaveAsProjectTooCheckBox\" Text=\"{DynamicResource S.SaveAs.SaveOptions.ProjectToo}\" Margin=\"20,3,3,3\"\n                                        IsChecked=\"{Binding ExportAsProjectToo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                </Grid>\n\n                <n:ExtendedCheckBox Grid.Row=\"3\" x:Name=\"UploadFileCheckBox\" Text=\"{DynamicResource S.SaveAs.SaveOptions.UploadFile}\" Margin=\"10,3,3,3\"\n                                    IsChecked=\"{Binding UploadFile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=False}\" Unchecked=\"UploadFileCheckBox_Unchecked\"/>\n                \n                <n:ExtendedCheckBox Grid.Row=\"4\" x:Name=\"CopyFileCheckBox\" Text=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard}\" Margin=\"10,3,3,3\"\n                                    IsChecked=\"{Binding SaveToClipboard, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <WrapPanel Grid.Row=\"5\" Margin=\"20,0,0,0\" Visibility=\"{Binding IsChecked, ElementName=CopyFileCheckBox, Converter={StaticResource Bool2Visibility}}\">\n                    <n:ExtendedRadioButton x:Name=\"CopyFileRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.File}\" \n                                           IsChecked=\"{Binding CopyType, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CopyModes.File}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.File.Info}\"/>\n                    <Separator Width=\"1\"/>\n                    <n:ExtendedRadioButton x:Name=\"CopyFolderPathRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.FolderPath}\" \n                                           IsChecked=\"{Binding CopyType, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CopyModes.FolderPath}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.FolderPath.Info}\"/>\n                    <Separator Width=\"1\"/>\n                    <n:ExtendedRadioButton x:Name=\"CopyFilePathRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.FilePath}\" \n                                           IsChecked=\"{Binding CopyType, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CopyModes.FilePath}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.FilePath.Info}\"/>\n                    <Separator Width=\"1\" Visibility=\"{Binding ElementName=CopyLinkRadioButton, Path=Visibility}\"/>\n                    <n:ExtendedRadioButton x:Name=\"CopyLinkRadioButton\" ContentWidth=\"0\" ContentHeight=\"0\" Padding=\"0,2,2,2\" Text=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.Link}\"\n                                           IsChecked=\"{Binding CopyType, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CopyModes.Link}}\"\n                                           ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.CopyToClipboard.Link.Info}\"\n                                           Visibility=\"{Binding ElementName=UploadFileCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                </WrapPanel>\n\n                <n:ExtendedCheckBox Grid.Row=\"6\" x:Name=\"CustomCommandsCheckBox\" Text=\"{DynamicResource S.SaveAs.SaveOptions.ExecuteCommands}\" Margin=\"10,3,3,3\"\n                                    IsChecked=\"{Binding ExecuteCustomCommands, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <n:ExtendedTextBox Grid.Row=\"7\" x:Name=\"CustomCommandsTextBox\" MinHeight=\"23\" Margin=\"20,3,3,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"WrapWithOverflow\" \n                                   AcceptsReturn=\"True\" Text=\"{Binding CustomCommands, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                   Visibility=\"{Binding IsChecked, ElementName=CustomCommandsCheckBox, Converter={StaticResource Bool2Visibility}}\"\n                                   ToolTip=\"{DynamicResource S.SaveAs.SaveOptions.ExecuteCommands.Info}\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"4\" x:Name=\"PartialExportExpander\" Header=\"{DynamicResource S.SaveAs.Partial}\" IsExpanded=\"{Binding IsPartialExportExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=False}\"\n                  Visibility=\"{Binding ElementName=PartialExportCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <ComboBox Grid.Row=\"0\" x:Name=\"PartialExportComboBox\" VerticalAlignment=\"Center\" Margin=\"0,3,5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                          SelectedValuePath=\"Value\" SelectedValue=\"{Binding PartialExport, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue={x:Static e:PartialExportModes.FrameRange}}\" \n                          ToolTip=\"{DynamicResource S.SaveAs.Partial.Mode.Info}\" SelectionChanged=\"EncoderComboBox_SelectionChanged\">\n                    <i:GenericItem Title=\"{DynamicResource S.SaveAs.Partial.Mode.Selection}\" Description=\"{DynamicResource S.SaveAs.Partial.Mode.Selection.Info}\"\n                                   Value=\"{x:Static e:PartialExportModes.Selection}\" ImageId=\"Vector.Cursor\"/>\n\n                    <i:GenericItem Title=\"{DynamicResource S.SaveAs.Partial.Mode.Frames}\" Description=\"{DynamicResource S.SaveAs.Partial.Mode.Frames.Info}\"\n                                   Value=\"{x:Static e:PartialExportModes.FrameRange}\" ImageId=\"Vector.Number\"/>\n\n                    <i:GenericItem Title=\"{DynamicResource S.SaveAs.Partial.Mode.Time}\" Description=\"{DynamicResource S.SaveAs.Partial.Mode.Time.Info}\"\n                                   Value=\"{x:Static e:PartialExportModes.TimeRange}\" ImageId=\"Vector.Clock\"/>\n\n                    <i:GenericItem Title=\"{DynamicResource S.SaveAs.Partial.Mode.Expression}\" Description=\"{DynamicResource S.SaveAs.Partial.Mode.Expression.Info}\"\n                                   Value=\"{x:Static e:PartialExportModes.FrameExpression}\" ImageId=\"Vector.Expression\"/>\n                </ComboBox>\n\n                <Grid Grid.Row=\"1\" x:Name=\"SelectionGrid\" Visibility=\"{Binding PartialExport, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:PartialExportModes.Selection}}\">\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{Binding ElementName=ThisPanel, Path=SelectionCount, Converter={StaticResource SelectionCountToDescription}}\" \n                               HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                </Grid>\n\n                <Grid Grid.Row=\"1\" x:Name=\"FrameRangeGrid\" Visibility=\"{Binding PartialExport, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:PartialExportModes.FrameRange}, FallbackValue={x:Static Visibility.Collapsed}}\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <n:RangeSlider Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"5\" x:Name=\"FrameRangeSlider\" Margin=\"0,3,5,3\" TickPlacement=\"BottomRight\" \n                                   Maximum=\"{Binding ElementName=ThisPanel, Path=FrameCount}\" LowerValue=\"{Binding PartialExportFrameStart, Mode=TwoWay}\" UpperValue=\"{Binding PartialExportFrameEnd, Mode=TwoWay}\"/>\n\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Partial.From}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"FrameRangeStartIntegerUpDown\" Margin=\"3,3,3,3\" MinWidth=\"50\" StepValue=\"1\" Minimum=\"0\" \n                                     Maximum=\"{Binding ElementName=FrameRangeSlider, Path=Maximum, Mode=TwoWay}\" Value=\"{Binding PartialExportFrameStart, Mode=TwoWay}\"/>\n\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"3\" Text=\"{DynamicResource S.SaveAs.Partial.To}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"4\" x:Name=\"FrameRangeEndIntegerUpDown\" Margin=\"3,3,5,3\" MinWidth=\"50\" StepValue=\"1\" Minimum=\"0\" \n                                     Maximum=\"{Binding ElementName=FrameRangeSlider, Path=Maximum, Mode=TwoWay}\" Value=\"{Binding PartialExportFrameEnd, Mode=TwoWay}\"/>\n                </Grid>\n\n                <Grid Grid.Row=\"1\" x:Name=\"TimeRangeGrid\" Visibility=\"{Binding PartialExport, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:PartialExportModes.TimeRange}, FallbackValue={x:Static Visibility.Collapsed}}\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Partial.From}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:TimeBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"TimeRangeStartIntegerUpDown\" Margin=\"3,3,3,3\" MinWidth=\"75\" Minimum=\"0\" DisplayMilliseconds=\"True\" \n                               Maximum=\"{Binding ElementName=ThisPanel, Path=TotalTime}\" Selected=\"{Binding PartialExportTimeStart, Mode=TwoWay}\"/>\n\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"3\" Text=\"{DynamicResource S.SaveAs.Partial.To}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:TimeBox Grid.Row=\"1\" Grid.Column=\"4\" x:Name=\"TimeRangeEndIntegerUpDown\" Margin=\"3,3,5,3\" MinWidth=\"75\" Minimum=\"0\" DisplayMilliseconds=\"True\"\n                               Maximum=\"{Binding ElementName=ThisPanel, Path=TotalTime}\" Selected=\"{Binding PartialExportTimeEnd, Mode=TwoWay}\"/>\n                </Grid>\n\n                <Grid Grid.Row=\"1\" x:Name=\"ExpressionRangeGrid\" Visibility=\"{Binding PartialExport, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:PartialExportModes.FrameExpression}}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.SaveAs.Partial.Expression}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5,3\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FrameRangeTextBox\" Margin=\"3,3,5,3\" Text=\"{Binding PartialExportFrameExpression}\" AllowSpacing=\"True\" AllowedCharacters=\"0123456789-,\"\n                                       ToolTip=\"{DynamicResource S.SaveAs.Partial.Expression.Info}\"/>\n                </Grid>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"5\" x:Name=\"OutputExpander\" Header=\"{DynamicResource S.SaveAs.File}\" IsExpanded=\"{Binding IsOutputExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                  Visibility=\"{Binding ElementName=SaveFileCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <!--Folder-->\n                <Grid Grid.Row=\"0\" Margin=\"10,0,0,0\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"30\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <n:ExtendedTextBox Grid.Column=\"0\" x:Name=\"FolderTextBox\" Text=\"{Binding OutputFolder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                                       MinHeight=\"23\" Height=\"Auto\" Margin=\"1,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"\n                                       ToolTip=\"{DynamicResource S.SaveAs.File.Location}\" TextChanged=\"FilenameTextBox_TextChanged\"/>\n\n                    <n:ExtendedButton Grid.Column=\"1\" x:Name=\"ChooseLocatioButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Open}\" ContentWidth=\"20\" ContentHeight=\"20\" \n                                      ToolTip=\"{DynamicResource S.SaveAs.File.Choose}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Click=\"ChooseLocation_Click\"/>\n                </Grid>\n                \n                <!--Filename-->\n                <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"25\"/>\n                        <ColumnDefinition Width=\"25\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <n:ExtendedTextBox Grid.Column=\"0\" x:Name=\"FilenameTextBox\" Text=\"{Binding OutputFilename, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                                       MinHeight=\"23\" Margin=\"1,3\" VerticalContentAlignment=\"Center\" ToolTip=\"{DynamicResource S.SaveAs.File.Name}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                       TextWrapping=\"Wrap\" TextChanged=\"FilenameTextBox_TextChanged\"/>\n\n                    <ComboBox Grid.Column=\"1\" Name=\"ExtensionComboBox\" Margin=\"1,3\" MinHeight=\"25\" ToolTip=\"{DynamicResource S.SaveAs.File.Format}\"\n                              SelectedItem=\"{Binding Extension, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" SelectionChanged=\"Extension_SelectionChanged\"/>\n\n                    <n:ExtendedButton Grid.Column=\"2\" x:Name=\"IncreaseCountButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Add}\" ContentWidth=\"15\" ContentHeight=\"15\" \n                                      ToolTip=\"{DynamicResource S.SaveAs.File.Increase}\" ToolTipService.Placement=\"Bottom\" Click=\"IncreaseNumber_Click\"/>\n                    \n                    <n:ExtendedButton Grid.Column=\"3\" x:Name=\"DecreaseCountButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Subtract}\" ContentWidth=\"15\" ContentHeight=\"15\" \n                                      ToolTip=\"{DynamicResource S.SaveAs.File.Decrease}\" ToolTipService.Placement=\"Bottom\" Click=\"DecreaseNumber_Click\"/>\n                </Grid>\n\n                <!--File already exists-->\n                <Grid Grid.Row=\"2\" Name=\"FileExistsGrid\" Visibility=\"Collapsed\" Margin=\"10,0,0,0\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Warning}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" FontStyle=\"Italic\" FontSize=\"11\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\">\n                        <Hyperlink NavigateUri=\"bing.com\" RequestNavigate=\"FileHyperlink_RequestNavigate\" ToolTip=\"{DynamicResource S.Encoder.OpenFile}\" Cursor=\"Hand\">\n                            <Run Text=\"{DynamicResource S.SaveAs.File.Exists}\"/>\n                        </Hyperlink>\n                    </TextBlock>\n                </Grid>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"6\" x:Name=\"UploadExpander\" Header=\"{DynamicResource S.SaveAs.Upload}\" IsExpanded=\"{Binding IsUploadExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=True}\"\n                  Visibility=\"{Binding ElementName=UploadFileCheckBox, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <n:ExtendedComboBox Grid.Row=\"0\" x:Name=\"UploadPresetComboBox\" VerticalAlignment=\"Center\" Margin=\"10,3,5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                                    SelectedValuePath=\"Title\" SelectedValue=\"{Binding UploadService, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.SaveAs.Upload.Info}\">\n                    <n:ExtendedComboBox.GroupStyle>\n                        <GroupStyle>\n                            <GroupStyle.HeaderTemplate>\n                                <DataTemplate>\n                                    <n:LabelSeparator x:Name=\"Separator\" Text=\"{Binding Name}\"/>\n                                    \n                                    <DataTemplate.Triggers>\n                                        <Trigger Property=\"Name\" Value=\"{x:Null}\">\n                                            <Setter TargetName=\"Separator\" Property=\"Visibility\" Value=\"Collapsed\"/>\n                                        </Trigger>\n                                    </DataTemplate.Triggers>\n                                </DataTemplate>\n                            </GroupStyle.HeaderTemplate>\n                        </GroupStyle>\n                    </n:ExtendedComboBox.GroupStyle>\n                    \n                    <n:ExtendedComboBox.EmptyItem>\n                        <p:UploadPreset Title=\"{StaticResource S.SaveAs.Upload.Unavailable.Title}\" Description=\"{StaticResource S.SaveAs.Upload.Unavailable.Description}\" ImageId=\"Vector.Info\"/>\n                    </n:ExtendedComboBox.EmptyItem>\n\n                    <n:ExtendedComboBox.NoSelectionItem>\n                        <p:UploadPreset Title=\"{StaticResource S.SaveAs.Upload.Select.Title}\" Description=\"{StaticResource S.SaveAs.Upload.Select.Description}\" ImageId=\"Vector.Info\"/>\n                    </n:ExtendedComboBox.NoSelectionItem>\n                </n:ExtendedComboBox>\n\n                <Grid Grid.Row=\"1\" Margin=\"5,0\" Height=\"35\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition />\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Border Grid.Column=\"0\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Background=\"{DynamicResource Brush.StatusBand.Error}\" CornerRadius=\"3\" Margin=\"5,0\"\n                            Visibility=\"{Binding ElementName=UploadPresetComboBox, Path=SelectedItem.HasLimit, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\" \n                            ToolTip=\"{DynamicResource S.SaveAs.Upload.Limit}\">\n                        <TextBlock Text=\"{Binding ElementName=UploadPresetComboBox, Path=SelectedItem.Limit}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3,0\" Padding=\"0\" VerticalAlignment=\"Center\"/>\n                    </Border>\n\n                    <n:ExtendedButton Grid.Column=\"1\" x:Name=\"AddUploadPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Add}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"AddUploadPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Upload.Add}\" ToolTipService.Placement=\"Bottom\"/>\n                    <n:ExtendedButton Grid.Column=\"2\" x:Name=\"EditUploadPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Pen}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"EditUploadPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Upload.Edit}\" ToolTipService.Placement=\"Bottom\"\n                                      IsEnabled=\"{Binding ElementName=UploadPresetComboBox, Path=SelectedItem, Converter={StaticResource ContentToVisibility}}\"/>\n                    <n:ExtendedButton Grid.Column=\"3\" x:Name=\"HistoryUploadPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Clock}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"HistoryUploadPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Upload.History}\" ToolTipService.Placement=\"Bottom\"\n                                      IsEnabled=\"{Binding ElementName=UploadPresetComboBox, Path=SelectedItem, Converter={StaticResource ContentToVisibility}}\"/>\n                    <n:ExtendedButton Grid.Column=\"4\" x:Name=\"RemoveUploadPresetButton\" Style=\"{StaticResource Style.Button.NoText}\" \n                                      Icon=\"{StaticResource Vector.Remove}\" ContentWidth=\"15\" ContentHeight=\"15\" Click=\"RemoveUploadPreset_Click\"\n                                      ToolTip=\"{DynamicResource S.SaveAs.Presets.Remove}\" ToolTipService.Placement=\"Bottom\"\n                                      IsEnabled=\"{Binding ElementName=UploadPresetComboBox, Path=SelectedItem, Converter={StaticResource ContentToVisibility}}\"/>\n                </Grid>\n            </Grid>\n        </Expander>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/ExportPanel.xaml.cs",
    "content": "using Microsoft.Win32;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Controls.Items;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.ViewModel.ExportPresets;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Avif;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;\nusing ScreenToGif.ViewModel.ExportPresets.Image;\nusing ScreenToGif.ViewModel.ExportPresets.Other;\nusing ScreenToGif.ViewModel.ExportPresets.Video;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Avi;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Mkv;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Mov;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Mp4;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Webm;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.Windows;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Input;\nusing System.Windows.Threading;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class ExportPanel : UserControl, IPanel\n{\n    private readonly DispatcherTimer _searchTimer;\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty CurrentPresetProperty = DependencyProperty.Register(nameof(CurrentPreset), typeof(ExportPreset), typeof(ExportPanel), new PropertyMetadata(default(ExportPreset)));\n\n    public static readonly DependencyProperty FrameCountProperty = DependencyProperty.Register(nameof(FrameCount), typeof(int), typeof(ExportPanel), new PropertyMetadata(default(int)));\n\n    public static readonly DependencyProperty SelectionCountProperty = DependencyProperty.Register(nameof(SelectionCount), typeof(int), typeof(ExportPanel), new PropertyMetadata(default(int)));\n\n    public static readonly DependencyProperty TotalTimeProperty = DependencyProperty.Register(nameof(TotalTime), typeof(TimeSpan), typeof(ExportPanel), new PropertyMetadata(default(TimeSpan)));\n\n    public static readonly DependencyProperty CurrentFrameProperty = DependencyProperty.Register(nameof(CurrentFrame), typeof(FrameViewModel), typeof(ExportPanel), new PropertyMetadata(default(FrameViewModel)));\n\n    public ExportPreset CurrentPreset\n    {\n        get => (ExportPreset)GetValue(CurrentPresetProperty);\n        set => SetValue(CurrentPresetProperty, value);\n    }\n\n    public int FrameCount\n    {\n        get => (int)GetValue(FrameCountProperty);\n        set => SetValue(FrameCountProperty, value);\n    }\n\n    public int SelectionCount\n    {\n        get => (int)GetValue(SelectionCountProperty);\n        set => SetValue(SelectionCountProperty, value);\n    }\n\n    public TimeSpan TotalTime\n    {\n        get => (TimeSpan)GetValue(TotalTimeProperty);\n        set => SetValue(TotalTimeProperty, value);\n    }\n\n    public FrameViewModel CurrentFrame\n    {\n        get => (FrameViewModel)GetValue(CurrentFrameProperty);\n        set => SetValue(CurrentFrameProperty, value);\n    }\n\n    #endregion\n\n    #region Custom Events\n\n    public static readonly RoutedEvent SaveEvent = EventManager.RegisterRoutedEvent(nameof(Save), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ExportPanel));\n\n    public static readonly RoutedEvent ValidatedEvent = EventManager.RegisterRoutedEvent(nameof(Validated), RoutingStrategy.Bubble, typeof(ValidatedEventHandler), typeof(ExportPanel));\n\n    public static readonly RoutedEvent ValidationRemovedEvent = EventManager.RegisterRoutedEvent(nameof(ValidationRemoved), RoutingStrategy.Bubble, typeof(ValidatedEventHandler), typeof(ExportPanel));\n\n    /// <summary>\n    /// Event raised when the save is triggered within this user control.\n    /// </summary>\n    public event RoutedEventHandler Save\n    {\n        add => AddHandler(SaveEvent, value);\n        remove => RemoveHandler(SaveEvent, value);\n    }\n\n    /// <summary>\n    /// Event raised when a warning is triggered within this user control.\n    /// </summary>\n    public event ValidatedEventHandler Validated\n    {\n        add => AddHandler(ValidatedEvent, value);\n        remove => RemoveHandler(ValidatedEvent, value);\n    }\n\n    /// <summary>\n    /// Event raised when a request for removal of warning is triggered within this user control.\n    /// </summary>\n    public event ValidatedEventHandler ValidationRemoved\n    {\n        add => AddHandler(ValidationRemovedEvent, value);\n        remove => RemoveHandler(ValidationRemovedEvent, value);\n    }\n\n\n    public void RaiseSaveEvent()\n    {\n        if (SaveEvent == null)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(SaveEvent));\n    }\n\n    public void RaiseValidatedEvent(ValidatedEventArgs args)\n    {\n        if (ValidatedEvent == null)\n            return;\n\n        args.RoutedEvent = ValidatedEvent;\n\n        RaiseEvent(args);\n    }\n\n    public void RaiseValidatedEvent(string message, StatusReasons reason, Action action = null)\n    {\n        if (ValidatedEvent == null)\n            return;\n\n        RaiseEvent(new ValidatedEventArgs(ValidatedEvent, message, reason, action));\n    }\n\n    public void RaiseValidationRemovedEvent(StatusReasons reason)\n    {\n        if (ValidatedEvent == null)\n            return;\n\n        RaiseEvent(new ValidatedEventArgs(ValidationRemovedEvent, null, reason));\n    }\n\n    #endregion\n\n\n    public ExportPanel()\n    {\n        InitializeComponent();\n\n        #region Initialize timers\n\n        _searchTimer = new DispatcherTimer(DispatcherPriority.Background);\n        _searchTimer.Interval = TimeSpan.FromMilliseconds(500);\n        _searchTimer.Tick += SearchTimer_Tick;\n\n        #endregion\n\n        #region Store restrictions\n\n#if FULL_MULTI_MSIX_STORE\n\n            CustomCommandsCheckBox.IsEnabled = false;\n            CustomCommandsTextBox.IsEnabled = false;\n\n#endif\n\n        #endregion\n    }\n\n\n    #region Methods\n\n    /// <summary>\n    /// Adjusts the UI for the different types of file types, encoders and quantizers.\n    /// </summary>\n    /// <param name=\"type\"></param>\n    private void AdjustPresentation(ExportFormats type)\n    {\n        foreach (var item in EncoderComboBox.Items.OfType<GenericItem>())\n            item.IsEnabled = false;\n\n        //File types can have different properties that need to be displayed.\n        switch (type)\n        {\n            case ExportFormats.Apng:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".apng\", \".png\" };\n                break;\n            case ExportFormats.Gif:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = true;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = Environment.Is64BitProcess;\n                EncoderSystemItem.IsEnabled = true;\n                ExtensionComboBox.ItemsSource = new List<string> { \".gif\" };\n                break;\n            case ExportFormats.Webp:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".webp\" };\n                break;\n            case ExportFormats.Avif:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".avif\" };\n                break;\n\n\n            case ExportFormats.Avi:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".avi\" };\n                break;\n            case ExportFormats.Mkv:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".mkv\" };\n                break;\n            case ExportFormats.Mov:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".mov\" };\n                break;\n            case ExportFormats.Mp4:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".mp4\" };\n                break;\n            case ExportFormats.Webm:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".webm\" };\n                break;\n\n\n            case ExportFormats.Jpeg:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = false;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".jpg\", \".jpeg\", \".zip\" };\n                break;\n            case ExportFormats.Png:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = false;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".png\", \".zip\" };\n                break;\n            case ExportFormats.Bmp:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = false;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".bmp\", \".zip\" };\n                break;\n\n\n            case ExportFormats.Stg:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = false;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".stg\", \".zip\" };\n                break;\n            case ExportFormats.Psd:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = false;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                ExtensionComboBox.ItemsSource = new List<string> { \".psd\" };\n                break;\n        }\n\n        SaveAsProjectTooCheckBox.Visibility = type != ExportFormats.Stg ? Visibility.Visible : Visibility.Collapsed;\n        UploadFileCheckBox.Visibility = type != ExportFormats.Bmp && type != ExportFormats.Jpeg && type != ExportFormats.Png ? Visibility.Visible : Visibility.Collapsed;\n        CopyFileCheckBox.Visibility = type != ExportFormats.Bmp && type != ExportFormats.Jpeg && type != ExportFormats.Png ? Visibility.Visible : Visibility.Collapsed;\n        CustomCommandsCheckBox.Visibility = type != ExportFormats.Bmp && type != ExportFormats.Jpeg && type != ExportFormats.Png ? Visibility.Visible : Visibility.Collapsed;\n        SaveFileCheckBox.IsEnabled = UploadFileCheckBox.Visibility == Visibility.Visible || CopyFileCheckBox.Visibility == Visibility.Visible;\n    }\n\n    private void LoadPresets(ExportFormats type, ExportPreset toLoad = null, bool firstLoad = false)\n    {\n        //Get all presets of given type. It's possible that there's none available.\n        var search = UserSettings.All.ExportPresets?.OfType<ExportPreset>().Where(w => w.Type == type) ?? new List<ExportPreset>();\n\n        //Ignore unsupported profiles.\n        if (!Environment.Is64BitProcess)\n            search = search.Where(tp => tp is not GifskiGifPreset);\n\n        var list = search.ToList();\n\n        //Get the missing default presets.\n        GeneratePresets(type, list);\n\n        //TODO: Check if default presets were recently updated and display an info about it.\n\n        //Localize the default presets.\n        foreach (var preset in list.Where(w => w.IsDefault))\n        {\n            preset.Title = LocalizationHelper.Get(preset.TitleKey).Replace(\"{0}\", preset.DefaultExtension);\n            preset.Description = LocalizationHelper.Get(preset.DescriptionKey);\n            preset.OutputFolder = preset.OutputFolder ?? Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);\n            preset.OutputFilename = (preset.OutputFilenameKey ?? \"\").Length <= 0 || !string.IsNullOrWhiteSpace(preset.OutputFilename) ? preset.OutputFilename : LocalizationHelper.Get(preset.OutputFilenameKey);\n        }\n\n        //Persist the changes to the settings.\n        PersistPresets(list, type);\n\n        //Display the presets and select the default one, based on the selected file type.\n        PresetComboBox.ItemsSource = null;\n        PresetComboBox.ItemsSource = list.OrderBy(o => o.Encoder).ThenBy(t => t.Title).ToList();\n        PresetComboBox.SelectedItem = null;\n        PresetComboBox.SelectedItem = toLoad ?? list.FirstOrDefault(f => f.IsSelected) ?? list.FirstOrDefault();\n\n        if (PresetComboBox.SelectedItem == null) //Why?\n            PresetComboBox.SelectedItem = toLoad ?? list.FirstOrDefault(f => f.IsSelected) ?? list.FirstOrDefault();\n    }\n\n    private void LoadUploadPresets(ExportPreset preset, UploadPreset uploadPreset = null)\n    {\n        var type = (preset.Extension ?? preset.DefaultExtension) == \".zip\" ? ExportFormats.Zip : preset.Type;\n        var list = UserSettings.All.UploadPresets?.OfType<UploadPreset>().Where(w => w.AllowedTypes.Count == 0 || w.AllowedTypes.Contains(type)).ToList() ?? new List<UploadPreset>();\n\n        //No need to adding grouping when there's no item to be displayed.\n        if (list.Count == 0)\n        {\n            UploadPresetComboBox.ItemsSource = null;\n            UploadPresetComboBox.ItemsSource = list;\n            return;\n        }\n\n        //Groups by authentication mode.\n        var lcv = new ListCollectionView(list.OrderBy(o => o.IsAnonymous).ThenBy(t => t.Title).ToList());\n        lcv.GroupDescriptions?.Add(new PropertyGroupDescription(\"Mode\"));\n\n        var previous = preset.UploadService;\n\n        UploadPresetComboBox.IsEnabled = true;\n        UploadPresetComboBox.ItemsSource = lcv;\n\n        if (uploadPreset != null && list.Contains(uploadPreset))\n            preset.UploadService = uploadPreset.Title;\n        else\n            preset.UploadService = previous;\n    }\n\n    private IEnumerable<ExportPreset> GeneratePresets(ExportFormats type, ICollection<ExportPreset> presets)\n    {\n        switch (type)\n        {\n            //Animated images.\n            case ExportFormats.Gif:\n            {\n                AddDistinct(presets, EmbeddedGifPreset.Defaults);\n                AddDistinct(presets, KGySoftGifPreset.Defaults);\n                AddDistinct(presets, FfmpegGifPreset.Defaults);\n\n                //Gifski only runs on x64.\n                if (Environment.Is64BitProcess)\n                    AddDistinct(presets, GifskiGifPreset.Defaults);\n\n                AddDistinct(presets, SystemGifPreset.Default);\n                break;\n            }\n            case ExportFormats.Apng:\n            {\n                AddDistinct(presets, EmbeddedApngPreset.Default);\n                AddDistinct(presets, FfmpegApngPreset.Defaults);\n                break;\n            }\n            case ExportFormats.Webp:\n            {\n                AddDistinct(presets, FfmpegWebpPreset.Defaults);\n                break;\n            }\n            case ExportFormats.Avif:\n            {\n                AddDistinct(presets, FfmpegAvifPreset.Defaults);\n                break;\n            }\n\n            //Videos.\n            case ExportFormats.Avi:\n            {\n                AddDistinct(presets, FfmpegAviPreset.Default);\n                break;\n            }\n            case ExportFormats.Mkv:\n            {\n                AddDistinct(presets, FfmpegMkvPreset.Defaults);\n                break;\n            }\n            case ExportFormats.Mov:\n            {\n                AddDistinct(presets, FfmpegMovPreset.Defaults);\n                break;\n            }\n            case ExportFormats.Mp4:\n            {\n                AddDistinct(presets, FfmpegMp4Preset.Defaults);\n                break;\n            }\n            case ExportFormats.Webm:\n            {\n                AddDistinct(presets, FfmpegWebmPreset.Defaults);\n                break;\n            }\n\n            //Images.\n            case ExportFormats.Jpeg:\n            {\n                AddDistinct(presets, JpegPreset.Default);\n                break;\n            }\n            case ExportFormats.Png:\n            {\n                AddDistinct(presets, PngPreset.Default);\n                break;\n            }\n            case ExportFormats.Bmp:\n            {\n                AddDistinct(presets, BmpPreset.Default);\n                break;\n            }\n\n            //Other.\n            case ExportFormats.Stg:\n            {\n                AddDistinct(presets, StgPreset.Default);\n                break;\n            }\n            case ExportFormats.Psd:\n            {\n                AddDistinct(presets, PsdPreset.Default);\n                break;\n            }\n        }\n\n        return presets;\n    }\n\n    private void AddDistinct(ICollection<ExportPreset> current, IEnumerable<IExportPreset> newList)\n    {\n        foreach (var preset in newList.Where(preset => current.Where(w => w.Type == preset.Type).All(a => a.TitleKey != preset.TitleKey)))\n            current.Add((ExportPreset)preset);\n    }\n\n    private void AddDistinct(ICollection<ExportPreset> current, IExportPreset newPreset)\n    {\n        if (current.Where(w => w.Type == newPreset.Type).All(a => a.TitleKey != newPreset.TitleKey))\n            current.Add((ExportPreset)newPreset);\n    }\n\n    private void SetPresetAsLastSelected(ExportPreset preset)\n    {\n        if (preset == null)\n            return;\n\n        //Get all presets of given type. It's possible that there's none available.\n        var list = UserSettings.All.ExportPresets?.OfType<ExportPreset>().Where(w => w.Type == preset.Type).ToList() ?? new List<ExportPreset>();\n\n        //Set the selected preset as the last selected one.\n        foreach (var pre in list)\n        {\n            pre.IsSelected = (pre.Title ?? \"\").Equals(preset.Title ?? \"\");\n\n            if (pre.Encoder == preset.Encoder)\n                pre.IsSelectedForEncoder = pre.IsSelected;\n        }\n\n        foreach (var pre in PresetComboBox.ItemsSource.OfType<ExportPreset>())\n        {\n            pre.IsSelected = (pre.Title ?? \"\").Equals(preset.Title ?? \"\");\n\n            if (pre.Encoder == preset.Encoder)\n                pre.IsSelectedForEncoder = pre.IsSelected;\n        }\n\n        PersistPresets(list, preset.Type);\n    }\n\n    private static void PersistPresets(IEnumerable<ExportPreset> typeList, ExportFormats type)\n    {\n        var list = UserSettings.All.ExportPresets?.OfType<ExportPreset>().Where(w => w.Type != type).ToList() ?? [];\n\n        list.AddRange(typeList);\n\n        UserSettings.All.ExportPresets = new ArrayList(list.ToArray());\n    }\n\n    private void AdjustCodecs(ExportPreset preset)\n    {\n        if (preset is not VideoPreset videoPreset)\n            return;\n\n        FfmpegCodecComboBox.SelectionChanged -= FfmpegCodecComboBox_SelectionChanged;\n        var codec = videoPreset.VideoCodec;\n\n        switch (videoPreset.Type)\n        {\n            case ExportFormats.Avi:\n            {\n                FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                {\n                    new Mpeg2(),\n                    new Mpeg4()\n                };\n\n                break;\n            }\n\n            case ExportFormats.Mkv:\n            {\n                if (videoPreset.HardwareAcceleration == HardwareAccelerationModes.On)\n                {\n                    FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                    {\n                        new X264(),\n                        new H264Amf(),\n                        new H264Nvenc(),\n                        new H264Qsv(),\n                        new X265(),\n                        new HevcAmf(),\n                        new HevcNvenc(),\n                        new HevcQsv(),\n                        new Vp8(),\n                        new Vp9(),\n                        new LibAom(),\n                        new SvtAv1(),\n                        new Rav1E()\n                    };\n                }\n                else\n                {\n                    FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                    {\n                        new X264(),\n                        new X265(),\n                        new Vp8(),\n                        new Vp9(),\n                        new LibAom(),\n                        new SvtAv1(),\n                        new Rav1E()\n                    };\n                }\n\n                break;\n            }\n            case ExportFormats.Mov:\n            {\n                if (videoPreset.HardwareAcceleration == HardwareAccelerationModes.On)\n                {\n                    FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                    {\n                        new X264(),\n                        new H264Amf(),\n                        new H264Nvenc(),\n                        new H264Qsv(),\n                        new X265(),\n                        new HevcAmf(),\n                        new HevcNvenc(),\n                        new HevcQsv()\n                    };\n                }\n                else\n                {\n                    FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                    {\n                        new X264(),\n                        new X265()\n                    };\n                }\n\n                break;\n            }\n            case ExportFormats.Mp4:\n            {\n                if (videoPreset.HardwareAcceleration == HardwareAccelerationModes.On)\n                {\n                    FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                    {\n                        new X264(),\n                        new H264Amf(),\n                        new H264Nvenc(),\n                        new H264Qsv(),\n                        new X265(),\n                        new HevcAmf(),\n                        new HevcNvenc(),\n                        new HevcQsv(),\n                        new LibAom(),\n                        new SvtAv1(),\n                        new Rav1E()\n                    };\n                }\n                else\n                {\n                    FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                    {\n                        new X264(),\n                        new X265(),\n                        new LibAom(),\n                        new SvtAv1(),\n                        new Rav1E()\n                    };\n                }\n\n                break;\n            }\n            case ExportFormats.Webm:\n            {\n                FfmpegCodecComboBox.ItemsSource = new List<VideoCodec>\n                {\n                    new Vp8(),\n                    new Vp9(),\n                    new LibAom(),\n                    new SvtAv1(),\n                    new Rav1E()\n                };\n\n                break;\n            }\n        }\n\n        videoPreset.VideoCodec = VideoCodecs.NotSelected;\n        FfmpegCodecComboBox.SelectionChanged += FfmpegCodecComboBox_SelectionChanged;\n        videoPreset.VideoCodec = codec;\n    }\n\n    private void AdjustAvifCodecs(ExportPreset preset)\n    {\n        if (preset is not FfmpegAvifPreset avifPreset)\n            return;\n\n        FfmpegAvifCodecComboBox.SelectionChanged -= FfmpegAvifCodecComboBox_SelectionChanged;\n        var codec = avifPreset.VideoCodec;\n\n        // We have not implemented av1_qsv/nvenc/amf yet\n\n        FfmpegAvifCodecComboBox.ItemsSource = new List<VideoCodec>\n        {\n            new LibAom(),\n            new Rav1E(),\n            new SvtAv1(),\n        };\n\n        avifPreset.VideoCodec = VideoCodecs.NotSelected;\n        FfmpegAvifCodecComboBox.SelectionChanged += FfmpegAvifCodecComboBox_SelectionChanged;\n        avifPreset.VideoCodec = codec;\n    }\n\n    private void ChangeFileNumber(int change)\n    {\n        //If there's no filename declared, show the default one.\n        if (string.IsNullOrWhiteSpace(CurrentPreset.OutputFilename))\n        {\n            CurrentPreset.OutputFilename = LocalizationHelper.Get(CurrentPreset.OutputFilenameKey);\n            return;\n        }\n\n        var index = CurrentPreset.OutputFilename.Length;\n        int start = -1, end = -1;\n\n        //Detects the last number in a string.\n        foreach (var c in CurrentPreset.OutputFilename.Reverse())\n        {\n            if (char.IsNumber(c))\n            {\n                if (end == -1)\n                    end = index;\n\n                start = index - 1;\n            }\n            else if (start == index)\n                break;\n\n            index--;\n        }\n\n        //If there's no number.\n        if (end == -1)\n        {\n            CurrentPreset.OutputFilename += $\" ({change})\";\n            return;\n        }\n\n        //If it's a negative number, include the signal.\n        if (start > 0 && CurrentPreset.OutputFilename.Substring(start - 1, 1).Equals(\"-\"))\n            start--;\n\n        //Cut, convert, merge.\n        if (int.TryParse(CurrentPreset.OutputFilename.Substring(start, end - start), out var number))\n        {\n            var offset = start + number.ToString().Length;\n\n            CurrentPreset.OutputFilename = CurrentPreset.OutputFilename.Substring(0, start) + (number + change) + CurrentPreset.OutputFilename.Substring(offset, CurrentPreset.OutputFilename.Length - end);\n        }\n    }\n\n    private bool IsExpressionValid(string expression)\n    {\n        if (string.IsNullOrWhiteSpace(expression))\n            return false;\n\n        //Divide by commas\n        var blocks = expression.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n\n        foreach (var block in blocks)\n        {\n            var subs = block.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);\n\n            //Only one X - Y range per block.\n            if (subs.Length > 2)\n                return false;\n\n            //Only valid, within-range numerical values accepted.\n            foreach (var sub in subs)\n            {\n                if (!int.TryParse(sub, out var number))\n                    return false;\n\n                if (number < 0 || number > FrameCount - 1)\n                    return false;\n            }\n        }\n\n        return true;\n    }\n\n    private void SyncPath()\n    {\n        if (CurrentPreset == null || !UserSettings.All.SyncPathFolder)\n            return;\n\n        foreach (var preset in UserSettings.All.ExportPresets?.OfType<ExportPreset>() ?? new List<ExportPreset>())\n        {\n            if (UserSettings.All.SyncPathForSameType && preset.Type != CurrentPreset.Type)\n                continue;\n\n            preset.OutputFolder = CurrentPreset.OutputFolder;\n\n            if (!UserSettings.All.SyncPathFilename)\n                continue;\n\n            preset.OutputFilename = CurrentPreset.OutputFilename;\n        }\n    }\n\n    public async Task<bool> IsValid()\n    {\n        #region Validate preset specific properties\n\n        var args = await CurrentPreset.IsValid();\n\n        if (args != null)\n        {\n            if (args.Reason == StatusReasons.FileAlreadyExists)\n                FileExistsGrid.Visibility = Visibility.Visible;\n\n            RaiseValidatedEvent(args);\n            return false;\n        }\n\n        #endregion\n\n        if (CurrentPreset.PickLocation)\n        {\n            if (CurrentPreset.OverwriteMode != OverwriteModes.Allow && File.Exists(Path.Combine(CurrentPreset.OutputFolder, CurrentPreset.ResolvedFilename + CurrentPreset.Extension)))\n            {\n                if (CurrentPreset.OverwriteMode == OverwriteModes.Prompt)\n                {\n                    if (!Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Dialogs.Overwrite.Title\"), LocalizationHelper.Get(\"S.SaveAs.Dialogs.Overwrite.Instruction\"),\n                        LocalizationHelper.GetWithFormat(\"S.SaveAs.Dialogs.Overwrite.Message\", \"A file with the name '{0}' already exists in that folder.\\r\\nWould you like to overwrite it?\", CurrentPreset.ResolvedFilename + CurrentPreset.Extension)))\n                    {\n                        RaiseValidatedEvent(\"S.SaveAs.Warning.Overwrite\", StatusReasons.FileAlreadyExists);\n                        return false;\n                    }\n                }\n                else\n                {\n                    RaiseValidatedEvent(\"S.SaveAs.Warning.Overwrite\", StatusReasons.FileAlreadyExists);\n                    return false;\n                }\n            }\n\n            if (CurrentPreset.ExportAsProjectToo)\n            {\n                if (CurrentPreset.OverwriteMode != OverwriteModes.Allow)\n                {\n                    //Get the project extension in use.\n                    var extension = UserSettings.All.ExportPresets.OfType<StgPreset>().OrderBy(o => o.IsSelectedForEncoder).Select(s => s.Extension ?? s.DefaultExtension).FirstOrDefault() ?? \".stg\";\n\n                    if (File.Exists(Path.Combine(CurrentPreset.OutputFolder, CurrentPreset.OutputFilename + extension)))\n                    {\n                        RaiseValidatedEvent(\"S.SaveAs.Warning.Overwrite.Project\", StatusReasons.FileAlreadyExists);\n                        return false;\n                    }\n                }\n            }\n        }\n\n        if (CurrentPreset.UploadFile)\n        {\n            var presetType = CurrentPreset.Extension == \".zip\" ? ExportFormats.Zip : CurrentPreset.Type;\n            var upload = UserSettings.All.UploadPresets.OfType<UploadPreset>().FirstOrDefault(f => (f.AllowedTypes.Count == 0 || f.AllowedTypes.Contains(presetType)) && f.Title == CurrentPreset.UploadService);\n\n            args = await PresetExtensions.IsValid(upload);\n\n            if (args != null)\n            {\n                RaiseValidatedEvent(args);\n                return false;\n            }\n        }\n\n        if (CurrentPreset.ExportPartially)\n        {\n            if (CurrentPreset.PartialExport == PartialExportModes.Selection && SelectionCount < 1)\n            {\n                RaiseValidatedEvent(\"S.SaveAs.Warning.Partial.NoSelection\", StatusReasons.InvalidState);\n                return false;\n            }\n\n            if (CurrentPreset.PartialExport == PartialExportModes.FrameExpression && !IsExpressionValid(CurrentPreset.PartialExportFrameExpression))\n            {\n                RaiseValidatedEvent(\"S.SaveAs.Warning.Partial.InvalidExpression\", StatusReasons.InvalidState);\n                return false;\n            }\n        }\n\n        #region FFmpeg\n\n        if (CurrentPreset.RequiresFfmpeg)\n        {\n            if (!await PathHelper.IsFfmpegPresent())\n            {\n                RaiseValidatedEvent(\"S.Editor.Warning.Ffmpeg\", StatusReasons.MissingFfmpeg, () => App.MainViewModel.OpenOptions.Execute(Options.PluginsIndex));\n                return false;\n            }\n\n            if (!string.IsNullOrWhiteSpace(UserSettings.All.FfmpegLocation) && UserSettings.All.FfmpegLocation.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n            {\n                RaiseValidatedEvent(\"S.Options.Extras.FfmpegLocation.Invalid\", StatusReasons.MissingFfmpeg, () => App.MainViewModel.OpenOptions.Execute(Options.PluginsIndex));\n                return false;\n            }\n\n            if (CurrentPreset is not IFfmpegPreset ffmpegPreset)\n                return false;\n\n            if (ffmpegPreset.SettingsMode == VideoSettingsModes.Advanced)\n            {\n                //Empty.\n                if (string.IsNullOrWhiteSpace(ffmpegPreset.Parameters))\n                {\n                    RaiseValidatedEvent(\"S.SaveAs.Warning.Ffmpeg.Empty\", StatusReasons.EmptyProperty);\n                    return false;\n                }\n\n                //Missing special parameters.\n                if (!ffmpegPreset.Parameters.Contains(\"{I}\") || !ffmpegPreset.Parameters.Contains(\"{O}\"))\n                {\n                    RaiseValidatedEvent(\"S.SaveAs.Warning.Ffmpeg.MissingPath\", StatusReasons.InvalidState);\n                    return false;\n                }\n            }\n        }\n\n        #endregion\n\n        #region Gifski\n\n        if (CurrentPreset.RequiresGifski)\n        {\n            if (!PathHelper.IsGifskiPresent())\n            {\n                RaiseValidatedEvent(\"S.Editor.Warning.Gifski\", StatusReasons.MissingGifski, () => App.MainViewModel.OpenOptions.Execute(Options.PluginsIndex));\n                return false;\n            }\n\n            if (!string.IsNullOrWhiteSpace(UserSettings.All.GifskiLocation) && UserSettings.All.GifskiLocation.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n            {\n                RaiseValidatedEvent(\"S.Options.Extras.GifskiLocation.Invalid\", StatusReasons.MissingGifski, () => App.MainViewModel.OpenOptions.Execute(Options.PluginsIndex));\n                return false;\n            }\n        }\n\n        #endregion\n\n        return true;\n    }\n\n    public ExportPreset GetPreset()\n    {\n        return (CurrentPreset ?? PresetComboBox.SelectedItem as ExportPreset)?.ShallowCopy();\n    }\n\n    #endregion\n\n    #region Events\n\n    private void Panel_Loaded(object sender, RoutedEventArgs e)\n    {\n        PresetComboBox.Focus();\n\n        //If a default file type was not selected, it picks 'Gif' as default.\n        if (TypeComboBox.SelectedValue is not ExportFormats type)\n            TypeComboBox.SelectedValue = type = ExportFormats.Gif;\n\n        //Gifski is only supported in x64.\n        EncoderGifskiItem.IsEnabled = Environment.Is64BitProcess;\n\n        AdjustPresentation(type);\n        LoadPresets(type, null, true);\n    }\n\n    private void TypeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (TypeComboBox.SelectedValue is not ExportFormats type)\n            return;\n\n        AdjustPresentation(type);\n        LoadPresets(type);\n    }\n\n\n    private void PresetComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset selected)\n            return;\n\n        var firstLoad = CurrentPreset == null;\n\n        //Hide all other grids.\n        foreach (var grid in EncoderGrid.Children.Cast<UIElement>())\n            grid.Visibility = Visibility.Collapsed;\n\n        SetPresetAsLastSelected(selected);\n        SyncPath();\n\n        //Set encoder.\n        EncoderComboBox.SelectedValue = selected.Encoder;\n        QuantizerComboBox.Visibility = UserSettings.All.SaveType == ExportFormats.Gif && selected.Encoder == EncoderTypes.ScreenToGif ? Visibility.Visible : Visibility.Collapsed;\n        EncoderExpander.SetResourceReference(HeaderedContentControl.HeaderProperty, QuantizerComboBox.Visibility == Visibility.Visible ? \"S.SaveAs.Encoder.Quantizer\" : \"S.SaveAs.Encoder\");\n\n        //Remove events prior to changing preset.\n        FfmpegAccelerationComboBox.SelectionChanged -= FfmpegAccelerationComboBox_SelectionChanged;\n\n        //Load video codecs.\n        AdjustCodecs(selected);\n        AdjustAvifCodecs(selected);\n\n        //Set the preset to the UI.\n        CurrentPreset = selected.HasAutoSave ? selected : selected.ShallowCopy();\n\n        //Adjust values for non-persistent properties.\n        selected.PartialExportFrameStart = 0;\n        selected.PartialExportFrameEnd = FrameCount;\n        selected.PartialExportTimeStart = TimeSpan.Zero;\n        selected.PartialExportTimeEnd = TotalTime;\n        selected.PartialExportFrameExpression = $\"0 - {FrameCount - 1}\";\n\n        //Select the upload preset.\n        LoadUploadPresets(selected);\n\n        if (string.IsNullOrWhiteSpace(selected.Extension))\n            selected.Extension = selected.DefaultExtension;\n\n        //Get the selected preset and display its settings in the next expanders.\n        switch (selected.Type)\n        {\n            //Animated images.\n            case ExportFormats.Apng:\n            {\n                if (selected is not ApngPreset apngPreset)\n                    break;\n\n                switch (apngPreset.Encoder)\n                {\n                    case EncoderTypes.ScreenToGif:\n                        EmbeddedApngOptionsGrid.Visibility = Visibility.Visible;\n                        break;\n                    case EncoderTypes.FFmpeg:\n                        FfmpegApngOptionsGrid.Visibility = Visibility.Visible;\n                        break;\n                }\n\n                break;\n            }\n            case ExportFormats.Gif:\n            {\n                if (selected is not GifPreset gifPreset)\n                    break;\n\n                switch (gifPreset.Encoder)\n                {\n                    case EncoderTypes.ScreenToGif:\n                        EmbeddedGifOptionsGrid.Visibility = Visibility.Visible;\n                        break;\n                    case EncoderTypes.KGySoft:\n                        KGySoftGifOptionsPanel.Visibility = Visibility.Visible;\n                        break;\n                    case EncoderTypes.System:\n                        SystemGifOptionsGrid.Visibility = Visibility.Visible;\n                        break;\n                    case EncoderTypes.FFmpeg:\n                        FfmpegGifOptionsGrid.Visibility = Visibility.Visible;\n                        break;\n                    case EncoderTypes.Gifski:\n                        GifskiGifOptionsGrid.Visibility = Visibility.Visible;\n                        break;\n                }\n\n                break;\n            }\n            case ExportFormats.Webp:\n                FfmpegWebpOptionsGrid.Visibility = Visibility.Visible;\n                break;\n            case ExportFormats.Avif:\n                FfmpegAvifOptionsGrid.Visibility = Visibility.Visible;\n                FfmpegAvifAccelerationComboBox.SelectionChanged += FfmpegAvifAccelerationComboBox_SelectionChanged;\n                break;\n\n            //Videos.\n            case ExportFormats.Avi:\n            case ExportFormats.Mkv:\n            case ExportFormats.Mov:\n            case ExportFormats.Mp4:\n            case ExportFormats.Webm:\n                FfmpegVideoOptionsGrid.Visibility = Visibility.Visible;\n                FfmpegAccelerationComboBox.SelectionChanged += FfmpegAccelerationComboBox_SelectionChanged;\n                break;\n\n            //Images.\n            case ExportFormats.Jpeg:\n            case ExportFormats.Png:\n            case ExportFormats.Bmp:\n                EmbeddedImageOptionsGrid.Visibility = Visibility.Visible;\n                break;\n\n            //Others.\n            case ExportFormats.Stg:\n                EmbeddedStgOptionsGrid.Visibility = Visibility.Visible;\n                break;\n            case ExportFormats.Psd:\n                EmbeddedPsdOptionsGrid.Visibility = Visibility.Visible;\n                break;\n        }\n\n        if (firstLoad)\n        {\n            Dispatcher.InvokeAsync(() =>\n            {\n                if (CurrentPreset.PickLocation)\n                    FilenameTextBox.Focus();\n                else if (CurrentPreset.UploadFile)\n                    UploadPresetComboBox.Focus();\n            }, DispatcherPriority.Loaded);\n        }\n    }\n\n    private void AddPreset_Click(object sender, RoutedEventArgs e)\n    {\n        var add = new Preset\n        {\n            Current = PresetComboBox.SelectedItem as ExportPreset,\n            IsNew = true\n        };\n\n        var result = add.ShowDialog();\n\n        if (result != true)\n            return;\n\n        //Select the created preset.\n        LoadPresets(add.Current.Type, add.Current);\n    }\n\n    private void SavePreset_Click(object sender, RoutedEventArgs e)\n    {\n        if (CurrentPreset == null)\n            return;\n\n        var list = UserSettings.All.ExportPresets.OfType<ExportPreset>().ToList();\n        var oldPreset = list.FirstOrDefault(f => f.Type == CurrentPreset.Type && f.Title == CurrentPreset.Title);\n\n        if (oldPreset != null)\n            list.Remove(oldPreset);\n\n        list.Add(CurrentPreset);\n\n        UserSettings.All.ExportPresets = new ArrayList(list);\n    }\n\n    private void EditPreset_Click(object sender, RoutedEventArgs e)\n    {\n        var edit = new Preset\n        {\n            Current = PresetComboBox.SelectedItem as ExportPreset\n        };\n\n        var result = edit.ShowDialog();\n\n        if (result != true)\n            return;\n\n        //Select the edited preset.\n        LoadPresets(edit.Current.Type, edit.Current);\n    }\n\n    private void RemovePreset_Click(object sender, RoutedEventArgs e)\n    {\n        //TODO: Let the user remove default presets (just not the main default for the type). Add a way to restore removed presets.\n\n        //Ask if the user really wants to remove the preset.\n        if (PresetComboBox.SelectedItem is not ExportPreset preset || !Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Presets.Ask.Delete.Title\"), LocalizationHelper.Get(\"S.SaveAs.Presets.Ask.Delete.Instruction\"),\n                LocalizationHelper.Get(\"S.SaveAs.Presets.Ask.Delete.Message\")))\n            return;\n\n        //Remove the preset directly from the settings and reload all presets.\n        UserSettings.All.ExportPresets.Remove(preset);\n        LoadPresets(preset.Type);\n    }\n\n    private void ResetPreset_Click(object sender, RoutedEventArgs e)\n    {\n        //Ask if the user really wants to reset the preset to its default settings.\n        if (PresetComboBox.SelectedItem is not ExportPreset preset || !Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Presets.Ask.Reset.Title\"), LocalizationHelper.Get(\"S.SaveAs.Presets.Ask.Reset.Instruction\"),\n                LocalizationHelper.Get(\"S.SaveAs.Presets.Ask.Reset.Message\")))\n            return;\n\n        var hasReset = GeneratePresets(preset.Type, new List<ExportPreset>()).FirstOrDefault(f => f.TitleKey == preset.TitleKey);\n\n        if (hasReset == null)\n            return; //TODO: What to do? Tell the user that this is an old preset, which is not being used anymore.\n\n        UserSettings.All.ExportPresets.Remove(preset);\n        UserSettings.All.ExportPresets.Add(hasReset);\n        LoadPresets(hasReset.Type, hasReset);\n    }\n\n\n    private void EncoderComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded || EncoderGrid.Children.Cast<UIElement>().All(a => a.Visibility == Visibility.Collapsed))\n            return;\n\n        if (EncoderComboBox.SelectedValue is not EncoderTypes encoder || encoder == CurrentPreset?.Encoder)\n            return;\n\n        PresetComboBox.SelectedItem = PresetComboBox.ItemsSource.OfType<ExportPreset>().FirstOrDefault(f => f.Type == UserSettings.All.SaveType && f.Encoder == encoder && f.IsSelectedForEncoder) ??\n                                      PresetComboBox.ItemsSource.OfType<ExportPreset>().FirstOrDefault(f => f.Type == UserSettings.All.SaveType && f.Encoder == encoder);\n        QuantizerComboBox.Visibility = UserSettings.All.SaveType == ExportFormats.Gif && encoder == EncoderTypes.ScreenToGif ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    private void QuantizerComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        switch (QuantizerComboBox.SelectedValue as ColorQuantizationTypes?)\n        {\n            case ColorQuantizationTypes.Neural:\n                SamplingTextBlock.Visibility = Visibility.Visible;\n                SamplingFactorSlider.Visibility = Visibility.Visible;\n                SamplingFactorGrid.Visibility = Visibility.Visible;\n                GlobalColorTableCheckBox.Visibility = Visibility.Visible;\n                break;\n            case ColorQuantizationTypes.Octree:\n                SamplingTextBlock.Visibility = Visibility.Collapsed;\n                SamplingFactorSlider.Visibility = Visibility.Collapsed;\n                SamplingFactorGrid.Visibility = Visibility.Collapsed;\n                GlobalColorTableCheckBox.Visibility = Visibility.Collapsed;\n                break;\n            case ColorQuantizationTypes.MedianCut:\n                SamplingTextBlock.Visibility = Visibility.Collapsed;\n                SamplingFactorSlider.Visibility = Visibility.Collapsed;\n                SamplingFactorGrid.Visibility = Visibility.Collapsed;\n                GlobalColorTableCheckBox.Visibility = Visibility.Visible;\n                break;\n            case ColorQuantizationTypes.Grayscale:\n                SamplingTextBlock.Visibility = Visibility.Collapsed;\n                SamplingFactorSlider.Visibility = Visibility.Collapsed;\n                SamplingFactorGrid.Visibility = Visibility.Collapsed;\n                GlobalColorTableCheckBox.Visibility = Visibility.Collapsed;\n                break;\n            case ColorQuantizationTypes.MostUsed:\n                SamplingTextBlock.Visibility = Visibility.Collapsed;\n                SamplingFactorSlider.Visibility = Visibility.Collapsed;\n                SamplingFactorGrid.Visibility = Visibility.Collapsed;\n                GlobalColorTableCheckBox.Visibility = Visibility.Visible;\n                break;\n        }\n    }\n\n    private void EnableTransparencyCheckBox_CheckedChanged(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded || CurrentPreset is not EmbeddedGifPreset preset)\n            return;\n\n        if (!DetectCheckBox.IsEnabled)\n            preset.DetectUnchanged = false;\n    }\n\n    private void PredictionHelpButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://www.w3.org/TR/PNG-Filters.html\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to navigate to the PNG prediction method documentation.\");\n        }\n    }\n\n    private void PreviewCommand_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n    {\n        if (CurrentPreset is not IFfmpegPreset ffmpegPreset)\n            return;\n\n        var previewer = new CommandPreviewer\n        {\n            Parameters = ffmpegPreset.Parameters,\n            Extension = CurrentPreset.Extension ?? CurrentPreset.DefaultExtension\n        };\n        previewer.ShowDialog();\n    }\n\n    private void FfmpegCodecComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (FfmpegCodecComboBox.SelectedItem is not VideoCodec selected || CurrentPreset is not VideoPreset videoPreset)\n            return;\n\n        //That's a lot of work just to maintain the binding. Sure there must be an easy way, right?\n        var containsPreset = selected.CodecPresets.Any(a => a.Type == videoPreset.CodecPreset);\n        var containsFormat = selected.PixelFormats.Any(a => a.Type == videoPreset.PixelFormat);\n        var codecPreset = videoPreset.CodecPreset;\n        var pixelFormat = videoPreset.PixelFormat;\n\n        //For some reason, if the same enum is being set, the combo does not display the selection.\n        videoPreset.CodecPreset = VideoCodecPresets.NotSelected;\n        videoPreset.PixelFormat = VideoPixelFormats.NotSelected;\n\n        switch (selected.Type)\n        {\n            case VideoCodecs.Mpeg2:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.None;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.Mpeg4:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.None;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.X264:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.H264Amf:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Balanced;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.H264Nvenc:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.H264Qsv:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Auto;\n                break;\n            case VideoCodecs.X265:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.HevcAmf:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Balanced;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.HevcNvenc:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.P010Le;\n                break;\n            case VideoCodecs.HevcQsv:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Auto;\n                break;\n            case VideoCodecs.Vp8:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.Vp9:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.LibAom:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.None;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.SvtAv1:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.Rav1E:\n                videoPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                videoPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n        }\n    }\n\n    private void FfmpegAvifCodecComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (FfmpegAvifCodecComboBox.SelectedItem is not VideoCodec selected || CurrentPreset is not FfmpegAvifPreset avifPreset)\n            return;\n\n        //That's a lot of work just to maintain the binding. Sure there must be an easy way, right?\n        var containsPreset = selected.CodecPresets.Any(a => a.Type == avifPreset.CodecPreset);\n        var containsFormat = selected.PixelFormats.Any(a => a.Type == avifPreset.PixelFormat);\n        var codecPreset = avifPreset.CodecPreset;\n        var pixelFormat = avifPreset.PixelFormat;\n\n        //For some reason, if the same enum is being set, the combo does not display the selection.\n        avifPreset.CodecPreset = VideoCodecPresets.NotSelected;\n        avifPreset.PixelFormat = VideoPixelFormats.NotSelected;\n\n        switch(selected.Type)\n        {\n            case VideoCodecs.LibAom:\n                avifPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.None;\n                avifPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.SvtAv1:\n                avifPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                avifPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n            case VideoCodecs.Rav1E:\n                avifPreset.CodecPreset = containsPreset ? codecPreset : VideoCodecPresets.Medium;\n                avifPreset.PixelFormat = containsFormat ? pixelFormat : VideoPixelFormats.Yuv420p;\n                break;\n        }\n    }\n\n    private void FfmpegAccelerationComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        AdjustCodecs(CurrentPreset);\n\n        if (FfmpegCodecComboBox.SelectedIndex == -1)\n            FfmpegCodecComboBox.SelectedIndex = 0;\n    }\n\n    private void FfmpegAvifAccelerationComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        AdjustAvifCodecs(CurrentPreset);\n\n        if (FfmpegAvifCodecComboBox.SelectedIndex == -1)\n            FfmpegAvifCodecComboBox.SelectedIndex = 0;\n    }\n\n    private void ImagesZipCheckBox_CheckedChanged(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        LoadUploadPresets(preset);\n    }\n\n    private void ChooseLocation_Click(object sender, RoutedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        try\n        {\n            var output = preset.OutputFolder ?? \"\";\n\n            if (output.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n                output = \"\";\n\n            //It's only a relative path if not null/empty and there's no root folder declared.\n            var isRelative = !string.IsNullOrWhiteSpace(output) && !Path.IsPathRooted(output);\n            var notAlt = !string.IsNullOrWhiteSpace(output) && preset.OutputFolder.Contains(Path.DirectorySeparatorChar);\n\n            var initial = Directory.Exists(output) ? output : Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);\n\n            if ((Keyboard.Modifiers & ModifierKeys.Shift) == 0)\n            {\n                #region Select folder\n\n                var fs = new FolderSelector\n                {\n                    Description = LocalizationHelper.Get(\"S.SaveAs.File.SelectFolder\"),\n                    DefaultFolder = isRelative ? Path.GetFullPath(initial) : initial,\n                    SelectedPath = isRelative ? Path.GetFullPath(initial) : initial\n                };\n\n                if (!fs.ShowDialog())\n                    return;\n\n                preset.OutputFolder = fs.SelectedPath;\n                ChooseLocatioButton.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n\n                #endregion\n            }\n            else\n            {\n                #region Save folder and file\n\n                var sfd = new SaveFileDialog\n                {\n                    FileName = preset.OutputFilename,\n                    InitialDirectory = isRelative ? Path.GetFullPath(initial) : initial\n                };\n\n                #region Extensions\n\n                switch (preset.Type)\n                {\n                    //Animated image.\n                    case ExportFormats.Apng:\n                        sfd.Filter = string.Format(\"{0}|*.png|{0}|*.apng\", LocalizationHelper.Get(\"S.Editor.File.Apng\"));\n                        sfd.DefaultExt = preset.Extension ?? \".png\";\n                        break;\n                    case ExportFormats.Gif:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Gif\")} (.gif)|*.gif\";\n                        sfd.DefaultExt = \".gif\";\n                        break;\n                    case ExportFormats.Webp:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Webp\")} (.webp)|*.webp\";\n                        sfd.DefaultExt = \".webp\";\n                        break;\n                    case ExportFormats.Avif:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Avif\")} (.avif)|*.avif\";\n                        sfd.DefaultExt = \".avif\";\n                        break;\n\n                    //Video.\n                    case ExportFormats.Avi:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Avi\")} (.avi)|*.avi\";\n                        sfd.DefaultExt = \".avi\";\n                        break;\n                    case ExportFormats.Mkv:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Mkv\")} (.mkv)|*.mkv\";\n                        sfd.DefaultExt = \".mkv\";\n                        break;\n                    case ExportFormats.Mov:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Mov\")} (.mov)|*.mov\";\n                        sfd.DefaultExt = \".mov\";\n                        break;\n                    case ExportFormats.Mp4:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Mp4\")} (.mp4)|*.mp4\";\n                        sfd.DefaultExt = \".mp4\";\n                        break;\n                    case ExportFormats.Webm:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Webm\")} (.webm)|*.webm\";\n                        sfd.DefaultExt = \".webm\";\n                        break;\n\n                    //Images.\n                    case ExportFormats.Bmp:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Image.Bmp\")} (.bmp)|*.bmp|{LocalizationHelper.Get(\"S.Editor.File.Project.Image.Zip\")} (.zip)|*.zip\";\n                        sfd.DefaultExt = preset.Extension ?? preset.DefaultExtension ?? \".bmp\";\n                        break;\n                    case ExportFormats.Jpeg:\n                        sfd.Filter = string.Format(\"{0}|*.jpg|{0}|*.jpeg|{1} (.zip)|*.zip\", LocalizationHelper.Get(\"S.Editor.File.Image.Jpeg\"), LocalizationHelper.Get(\"S.Editor.File.Project.Image.Zip\"));\n                        sfd.DefaultExt = preset.Extension ?? preset.DefaultExtension ?? \".jpg\";\n                        break;\n                    case ExportFormats.Png:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Image.Png\")} (.png)|*.png|{LocalizationHelper.Get(\"S.Editor.File.Project.Image.Zip\")} (.zip)|*.zip\";\n                        sfd.DefaultExt = preset.Extension ?? preset.DefaultExtension ?? \".png\";\n                        break;\n\n                    //Other.\n                    case ExportFormats.Stg:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Project\")} (.stg)|*.stg|{LocalizationHelper.Get(\"S.Editor.File.Project.Zip\")} (.zip)|*.zip\";\n                        sfd.DefaultExt = preset.Extension ?? \".stg\";\n                        break;\n                    case ExportFormats.Psd:\n                        sfd.Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Psd\")} (.psd)|*.psd\";\n                        sfd.DefaultExt = \".psd\";\n                        break;\n                }\n\n                #endregion\n\n                var result = sfd.ShowDialog();\n\n                if (!result.HasValue || !result.Value)\n                    return;\n\n                //TODO: process output before setting to property?\n\n                preset.OutputFolder = Path.GetDirectoryName(sfd.FileName);\n                preset.OutputFilename = Path.GetFileNameWithoutExtension(sfd.FileName);\n                preset.OverwriteMode = File.Exists(sfd.FileName) ? OverwriteModes.Prompt : OverwriteModes.Warn;\n                preset.Extension = Path.GetExtension(sfd.FileName);\n\n                RaiseSaveEvent();\n\n                #endregion\n            }\n\n            //Converts to a relative path again.\n            if (isRelative && !string.IsNullOrWhiteSpace(preset.OutputFolder))\n            {\n                var selected = new Uri(preset.OutputFolder);\n                var baseFolder = new Uri(AppDomain.CurrentDomain.BaseDirectory);\n                var relativeFolder = selected.AbsolutePath.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar) == baseFolder.AbsolutePath.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar) ?\n                    \".\" : Uri.UnescapeDataString(baseFolder.MakeRelativeUri(selected).ToString());\n\n                //This app even returns you the correct slashes/backslashes.\n                preset.OutputFolder = notAlt ? relativeFolder.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar) : relativeFolder.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);\n            }\n        }\n        catch (ArgumentException sx)\n        {\n            LogWriter.Log(sx, \"Error while trying to choose the output path and filename.\", preset.OutputFolder + preset.OutputFilename);\n\n            preset.OutputFolder = \"\";\n            preset.OutputFilename = \"\";\n            throw;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to choose the output path and filename.\", preset.OutputFolder + preset.OutputFilename);\n            throw;\n        }\n    }\n\n    private void FilenameTextBox_TextChanged(object sender, TextChangedEventArgs e)\n    {\n        if (!IsLoaded || !(PresetComboBox.SelectedItem is ExportPreset preset))\n            return;\n\n        _searchTimer?.Stop();\n\n        //If no file will be saved, there's no need to verify.\n        if (!preset.PickLocation || preset.CanExportMultipleFiles)\n        {\n            FileExistsGrid.Visibility = Visibility.Collapsed;\n            RaiseValidationRemovedEvent(StatusReasons.FileAlreadyExists);\n            return;\n        }\n\n        _searchTimer?.Start();\n    }\n\n    private void SearchTimer_Tick(object sender, EventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        _searchTimer.Stop();\n\n        var preset = CurrentPreset;\n\n        if (preset == null)\n            return;\n\n        try\n        {\n            //Check if there's a file with the same path.\n            var exists = File.Exists(Path.Combine(preset.OutputFolder, PathHelper.ReplaceRegexInName(preset.OutputFilename) + preset.Extension));\n\n            FileExistsGrid.Visibility = exists ? Visibility.Visible : Visibility.Collapsed;\n            RaiseValidationRemovedEvent(StatusReasons.FileAlreadyExists);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Check if exists\");\n\n            RaiseValidatedEvent(\"S.SaveAs.Warning.Filename.Invalid\", StatusReasons.InvalidState, () => new ExceptionViewer(ex).Show());\n            FileExistsGrid.Visibility = Visibility.Collapsed;\n        }\n    }\n\n    private void SaveType_Checked(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        FilenameTextBox_TextChanged(null, null);\n    }\n\n    private void Extension_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        if (preset is ImagePreset imagePreset)\n            imagePreset.ZipFilesInternal = (string)ExtensionComboBox.SelectedValue == \".zip\";\n\n        FilenameTextBox_TextChanged(null, null);\n    }\n\n    private void IncreaseNumber_Click(object sender, RoutedEventArgs e)\n    {\n        ChangeFileNumber(1);\n    }\n\n    private void DecreaseNumber_Click(object sender, RoutedEventArgs e)\n    {\n        ChangeFileNumber(-1);\n    }\n\n    private void FileHyperlink_RequestNavigate(object sender, RoutedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        try\n        {\n            //If the file name template result changed, it will be impossible to open the previous file. The user should simple try to save it again.\n            ProcessHelper.StartWithShell(Path.Combine(preset.OutputFolder, PathHelper.ReplaceRegexInName(preset.OutputFilename) + preset.Extension));\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Open file that already exists using the hyperlink\");\n        }\n    }\n\n    private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(e.Uri.AbsoluteUri);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, $\"Error while trying to navigate to a given URI: '{e?.Uri?.AbsoluteUri}'.\");\n        }\n    }\n\n    private void UploadFileCheckBox_Unchecked(object sender, RoutedEventArgs e)\n    {\n        if (CurrentPreset.CopyType == CopyModes.Link)\n            CurrentPreset.CopyType = CopyModes.File;\n    }\n\n    private void AddUploadPreset_Click(object sender, RoutedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        var upload = new Upload { Type = preset.Extension == \".zip\" ? ExportFormats.Zip : preset.Type };\n        var result = upload.ShowDialog();\n\n        if (result != true)\n            return;\n\n        UserSettings.All.UploadPresets.Add(upload.CurrentPreset);\n        UserSettings.Save();\n\n        LoadUploadPresets(preset, upload.CurrentPreset);\n    }\n\n    private void EditUploadPreset_Click(object sender, RoutedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        if (UploadPresetComboBox.SelectedItem is not UploadPreset selected)\n            return;\n\n        var upload = new Upload { CurrentPreset = selected.ShallowCopy(), IsEditing = true };\n        var result = upload.ShowDialog();\n\n        if (result != true)\n            return;\n\n        UserSettings.All.UploadPresets.Remove(selected);\n        UserSettings.All.UploadPresets.Add(upload.CurrentPreset);\n        UserSettings.Save();\n\n        //Update the upload preset in all export presets.\n        if (selected.Title != upload.CurrentPreset.Title)\n        {\n            foreach (var exportPreset in UserSettings.All.ExportPresets.OfType<ExportPreset>().Where(w => w.UploadService == selected.Title))\n                exportPreset.UploadService = upload.CurrentPreset.Title;\n        }\n\n        LoadUploadPresets(preset, upload.CurrentPreset);\n    }\n\n    private void HistoryUploadPreset_Click(object sender, RoutedEventArgs e)\n    {\n        if (UploadPresetComboBox.SelectedItem is not UploadPreset selected)\n            return;\n\n        var history = new UploadHistory\n        {\n            CurrentPreset = selected\n        };\n        history.ShowDialog();\n    }\n\n    private void RemoveUploadPreset_Click(object sender, RoutedEventArgs e)\n    {\n        if (PresetComboBox.SelectedItem is not ExportPreset preset)\n            return;\n\n        //Ask if the user really wants to remove the preset.\n        if (UploadPresetComboBox.SelectedItem is not UploadPreset selected || !Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Upload.Ask.Delete.Title\"), LocalizationHelper.Get(\"S.SaveAs.Upload.Ask.Delete.Instruction\"),\n                LocalizationHelper.Get(\"S.SaveAs.Upload.Ask.Delete.Message\")))\n            return;\n\n        UserSettings.All.UploadPresets.Remove(selected);\n        UserSettings.Save();\n\n        //Remove the upload preset from all export presets.\n        foreach (var exportPreset in UserSettings.All.ExportPresets.OfType<ExportPreset>().Where(w => w.UploadService == selected.Title))\n            exportPreset.UploadService = null;\n\n        LoadUploadPresets(preset);\n    }\n\n    private void ExportPanel_Unloaded(object sender, RoutedEventArgs e)\n    {\n        SyncPath();\n\n        UserSettings.Save();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/UserControls/ImageViewer.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.ImageViewer\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             mc:Ignorable=\"d\"\n             x:Name=\"Viewer\"\n             Unloaded=\"ImageViewer_OnUnloaded\">\n    <ScrollViewer x:Name=\"ScrollContainer\" CanContentScroll=\"True\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\"\n                  PreviewMouseWheel=\"ScrollContainer_OnPreviewMouseWheel\"\n                  PreviewMouseLeftButtonDown=\"ScrollContainer_OnPreviewMouseLeftButtonDown\"\n                  MouseMove=\"ScrollContainer_OnMouseMove\"\n                  MouseLeftButtonUp=\"ScrollContainer_OnMouseLeftButtonUp\"\n                  ScrollChanged=\"ScrollContainer_OnScrollChanged\">\n        <Image x:Name=\"DisplayImage\" Source=\"{Binding ElementName=Viewer, Path=Source, Mode=OneWay}\"\n               Stretch=\"None\" SnapsToDevicePixels=\"True\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" MouseWheel=\"DisplayImage_OnMouseWheel\"/>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "ScreenToGif/UserControls/ImageViewer.xaml.cs",
    "content": "#region Usings\n\n#region Used Namespaces\n\nusing System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Forms;\nusing System.Windows.Input;\nusing System.Windows.Media;\n\n#endregion\n\n#region Used Aliases\n\nusing Cursors = System.Windows.Input.Cursors;\nusing MouseEventArgs = System.Windows.Input.MouseEventArgs;\nusing UserControl = System.Windows.Controls.UserControl;\n\n#endregion\n\n#endregion\n\n#nullable enable\n\nnamespace ScreenToGif.UserControls;\n\n/// <summary>\n/// Represents an image display control with zooming and panning.\n/// Some solutions are ported from here (keyboard interaction is not implemented though): https://github.com/koszeggy/KGySoft.WinForms/blob/master/KGySoft.WinForms/Controls/ImageViewer.cs\n/// </summary>\npublic partial class ImageViewer : UserControl\n{\n    #region Constants\n\n    private const double _maxZoom = 16d;\n\n    #endregion\n\n    #region Fields\n\n    #region Static Fields\n\n    public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(nameof(Source), typeof(ImageSource), typeof(ImageViewer), new PropertyMetadata(default(ImageSource)));\n\n    #endregion\n\n    #region Instance Fields\n\n    private ImageSource? _lastSource;\n    private double _zoom = 1d;\n    private Point? _zoomingOrigin;\n    private Point? _draggingOrigin;\n\n    #endregion\n\n    #endregion\n\n    #region Properties\n\n    public ImageSource? Source\n    {\n        get => (ImageSource)GetValue(SourceProperty);\n        set => SetValue(SourceProperty, value);\n    }\n\n    #endregion\n\n    #region Constructors\n\n    public ImageViewer() => InitializeComponent();\n\n    #endregion\n\n    #region Methods\n\n    #region Protected Methods\n\n    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)\n    {\n        base.OnPropertyChanged(e);\n        if (e.Property == SourceProperty)\n        {\n            // Resetting auto size only if a new source is set, but keeping it if resetting the last value after a null Source\n            if (e.NewValue is not null && !ReferenceEquals(_lastSource, e.NewValue))\n                ResetAutoSize();\n            _lastSource ??= e.NewValue as ImageSource;\n        }\n    }\n\n    #endregion\n\n    #region Private Methods\n\n    /// <summary>\n    /// Gets an auto value for zoom, which is:\n    /// - 0, if Source is not set\n    /// - 1, if the image fits in the boundaries\n    /// - less than 1, if it has to be shrunk to fit in the bounds\n    /// </summary>\n    private double GetAutoZoom()\n    {\n        var image = Source;\n        if (image == null)\n            return 0d;\n\n        var width = MaxWidth < Double.PositiveInfinity ? MaxWidth : ScrollContainer.ActualWidth;\n        var height = MaxHeight < Double.PositiveInfinity ? MaxHeight : ScrollContainer.ActualHeight;\n        var imageWidth = image.Width;\n        var imageHeight = image.Height;\n        double aspectRatio;\n        double result;\n\n        if (imageWidth <= width && imageHeight <= height)\n            return 1;\n\n        if (imageWidth > imageHeight)\n        {\n            aspectRatio = width / imageWidth;\n            result = aspectRatio;\n            if (height < imageHeight * result)\n            {\n                aspectRatio = height / imageHeight;\n                result = aspectRatio;\n            }\n\n            return result;\n        }\n\n        aspectRatio = height / imageHeight;\n        result = aspectRatio;\n        if (width < imageWidth * result)\n        {\n            aspectRatio = width / imageWidth;\n            result = aspectRatio;\n        }\n\n        return result;\n    }\n\n    private void ResetAutoSize()\n    {\n        var autoZoom = GetAutoZoom();\n        if (autoZoom <= 0)\n            return;\n\n        SetZoom(autoZoom);\n        ScrollContainer.UpdateLayout();\n    }\n\n    private void ApplyZoomChange(double delta)\n    {\n        if (delta.Equals(0d))\n            return;\n        delta += 1;\n        SetZoom(Math.Clamp(_zoom * delta, GetAutoZoom(), _maxZoom));\n    }\n\n    private void SetZoom(double zoom)\n    {\n        var scale = new ScaleTransform(zoom, zoom);\n        DisplayImage.LayoutTransform = scale;\n        var quality = zoom switch\n        {\n            1d or >= 2d => BitmapScalingMode.NearestNeighbor, // intended, so magnified pixels are not blurred\n            > 1d => BitmapScalingMode.Linear, // (1..2) - nearest neighbor is just too ugly in this range\n            _ => BitmapScalingMode.HighQuality // < 1\n        };\n        RenderOptions.SetBitmapScalingMode(DisplayImage, quality);\n        _zoom = zoom;\n    }\n\n    #endregion\n\n    #region Event handlers\n\n    private void ImageViewer_OnUnloaded(object sender, RoutedEventArgs e) => _lastSource = null;\n\n    private void ScrollContainer_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        // If Control is not pressed while scrolling, and the vertical scrollbar is not visible, forwarding the scroll to the self user control.\n        // Without this, scrolling the parent would not work when the mouse is over ImageViewer, whereas it works over other controls, which feels strange.\n        if (Keyboard.Modifiers != ModifierKeys.Control && ScrollContainer.ComputedVerticalScrollBarVisibility != Visibility.Visible)\n        {\n            e.Handled = true;\n            var forwardedArgs = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) { RoutedEvent = MouseWheelEvent };\n            RaiseEvent(forwardedArgs);\n        }\n\n        // Otherwise, letting the event reach the display image, unless when maximum zoom is reached and still zooming in\n        if (Keyboard.Modifiers == ModifierKeys.Control && e.Delta > 0 && _zoom >= _maxZoom)\n            e.Handled = true;\n    }\n\n    private void DisplayImage_OnMouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        // Normal scrolling\n        if (Keyboard.Modifiers != ModifierKeys.Control)\n            return;\n\n        // Ctrl + MouseWheel: zooming\n        var p = Mouse.GetPosition(DisplayImage);\n        _zoomingOrigin = p;\n        var delta = (double)e.Delta / SystemInformation.MouseWheelScrollDelta / 5d;\n        ApplyZoomChange(delta);\n    }\n\n    private void ScrollContainer_OnScrollChanged(object sender, ScrollChangedEventArgs e)\n    {\n        if (_zoomingOrigin is null || Source is null || e is { ExtentHeightChange: 0, ExtentWidthChange: 0 })\n            return;\n\n        ScrollContainer.UpdateLayout();\n\n        var origin = _zoomingOrigin;\n        Point? pos = Mouse.GetPosition(DisplayImage);\n        _zoomingOrigin = null;\n\n        // making sure that zooming happens at the mouse cursor position\n        var diff = new Vector(pos.Value.X - origin.Value.X, pos.Value.Y - origin.Value.Y);\n        var scale = new Vector(e.ExtentWidth / DisplayImage.ActualWidth, e.ExtentHeight / DisplayImage.ActualHeight);\n        var offset = new Vector(ScrollContainer.HorizontalOffset - (diff.X * scale.X), ScrollContainer.VerticalOffset - (diff.Y * scale.Y));\n\n        if (Double.IsNaN(offset.X) || Double.IsNaN(offset.Y) || Double.IsInfinity(offset.X) || Double.IsInfinity(offset.Y))\n            return;\n\n        ScrollContainer.ScrollToHorizontalOffset(offset.X);\n        ScrollContainer.ScrollToVerticalOffset(offset.Y);\n    }\n\n    private void ScrollContainer_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        var mousePosition = e.GetPosition(ScrollContainer);\n        if (mousePosition.X >= ScrollContainer.ViewportWidth || mousePosition.Y >= ScrollContainer.ViewportHeight)\n            return;\n\n        // start dragging\n        ScrollContainer.Cursor = Cursors.SizeAll;\n        _draggingOrigin = mousePosition;\n        Mouse.Capture(ScrollContainer);\n    }\n\n    private void ScrollContainer_OnMouseMove(object sender, MouseEventArgs e)\n    {\n        if (_draggingOrigin is null)\n            return;\n\n        // dragging\n        var pos = e.GetPosition(ScrollContainer);\n        var diff = new Vector(pos.X - _draggingOrigin.Value.X, pos.Y - _draggingOrigin.Value.Y);\n        _draggingOrigin = pos;\n        ScrollContainer.ScrollToHorizontalOffset(ScrollContainer.HorizontalOffset - diff.X);\n        ScrollContainer.ScrollToVerticalOffset(ScrollContainer.VerticalOffset - diff.Y);\n    }\n\n    private void ScrollContainer_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        if (_draggingOrigin is null)\n            return;\n\n        // finish dragging\n        ScrollContainer.Cursor = Cursors.Arrow;\n        ScrollContainer.ReleaseMouseCapture();\n        _draggingOrigin = null;\n    }\n\n    #endregion\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/UserControls/ImgurPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.ImgurPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"500\" d:DesignWidth=\"320\"\n             x:Name=\"ThisPanel\" Loaded=\"ImgurPanel_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <n:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n        <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Options.Upload.Preset.Details}\" IsExpanded=\"True\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Name}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"NameTextBox\" Text=\"{Binding Title}\" Margin=\"5,3\" MaxLength=\"50\" IsObligatory=\"True\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Description}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ExtendedTextBox Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{Binding Description}\" MinHeight=\"23\" Margin=\"5,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\" MaxLength=\"100\"/>\n                \n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Mode}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"5,3\" VerticalContentAlignment=\"Center\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding IsAnonymous}\">\n                    <ComboBoxItem Content=\"{DynamicResource S.Options.Upload.Preset.Mode.Anonymous}\" Tag=\"True\"/>\n                    <ComboBoxItem Content=\"{DynamicResource S.Options.Upload.Preset.Mode.Authenticated}\" Tag=\"False\"/>\n                </ComboBox>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Options.Upload.Preset.Authorization}\" IsExpanded=\"True\" Visibility=\"{Binding IsAnonymous, Converter={StaticResource InvertedBoolToVisibility}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Margin=\"3\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                    <Hyperlink NavigateUri=\"imgur.com\" RequestNavigate=\"TokenHyperlink_RequestNavigate\">\n                        <Run Text=\"{DynamicResource S.Options.Upload.Preset.GetToken}\"/>\n                    </Hyperlink>\n                </TextBlock>\n\n                <Border Grid.Row=\"1\" Height=\"10\" Background=\"{StaticResource Vector.Arrow.Blue.Bottom}\" Margin=\"3\"/>\n\n                <n:ExtendedTextBox Grid.Row=\"2\" Text=\"{Binding OAuthToken}\" Margin=\"5,3\" TextWrapping=\"Wrap\" \n                                   Watermark=\"{DynamicResource S.Options.Upload.Preset.Token}\" HorizontalContentAlignment=\"Center\" IsObligatory=\"True\"/>\n\n                <Border Grid.Row=\"3\" Height=\"10\" Background=\"{StaticResource Vector.Arrow.Blue.Bottom}\" Margin=\"3\"/>\n\n                <n:ExtendedButton Grid.Row=\"4\" Text=\"{DynamicResource S.Options.Upload.Preset.Authorize}\" Icon=\"{StaticResource Vector.Ok}\" \n                                  ContentWidth=\"16\" ContentHeight=\"16\" Margin=\"3\" HorizontalAlignment=\"Center\" Click=\"AuthorizeButton_Click\"/>\n\n                <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Margin=\"5,3\" Text=\"{Binding Status}\" HorizontalAlignment=\"Center\" \n                           TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Options.Upload.Preset.Options}\" IsExpanded=\"True\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <n:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Direct}\" Margin=\"5,3\" \n                                    IsChecked=\"{Binding UseDirectLinks, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                <n:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Imgur.Gifv}\" Margin=\"5,3\"\n                                    IsChecked=\"{Binding UseGifvLinks, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Imgur.ToAlbum}\" Margin=\"5,3\"\n                                    IsChecked=\"{Binding UploadToAlbum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                    Visibility=\"{Binding IsAnonymous, Converter={StaticResource InvertedBoolToVisibility}}\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"4\" Header=\"{DynamicResource S.Options.Upload.Preset.Album}\" IsExpanded=\"True\">\n            <Expander.Visibility>\n                <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                    <Binding Path=\"IsAnonymous\" Converter=\"{StaticResource InvertedBool}\"/>\n                    <Binding Path=\"UploadToAlbum\"/>\n                </MultiBinding>\n            </Expander.Visibility>\n            \n            <Grid Margin=\"10,0,0,0\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"35\"/>\n                </Grid.ColumnDefinitions>\n\n                <ComboBox Grid.Column=\"0\" x:Name=\"AlbumComboBox\" Margin=\"5,3\" SelectedValuePath=\"Id\"\n                          SelectedValue=\"{Binding SelectedAlbum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\" MinWidth=\"40\"/>\n                                    <ColumnDefinition Width=\"1\"/>\n                                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"400\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Column=\"0\" Text=\"{Binding Id}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"0\"/>\n                                <TextBlock Grid.Column=\"2\" Text=\"{Binding Title}\" Margin=\"3,0,0,0\" FontWeight=\"SemiBold\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                                <TextBlock Grid.Column=\"3\" Text=\"{Binding Description}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" FontStyle=\"Italic\" TextWrapping=\"NoWrap\"/>\n                            </Grid>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n\n                    <!--Description=\"Instead of selecting an album right now, choose one later.\"-->\n                    <!--<i:ImgurAlbum Id=\"♥♦♣♠\" Title=\"Prompt me before uploading\" Description=\"This is a description\"/>-->\n                </ComboBox>\n\n                <n:ExtendedButton Grid.Column=\"1\" Style=\"{StaticResource Style.Button.NoText.Border}\" Margin=\"0,3,5,3\"\n                                  Icon=\"{StaticResource Vector.Repeat}\" ContentHeight=\"15\" ContentWidth=\"15\" Height=\"25\"\n                                  ToolTip=\"{DynamicResource S.Options.Upload.Preset.Imgur.Reload}\" Click=\"LoadAlbums_Click\"/>\n            </Grid>\n        </Expander>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/ImgurPanel.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing ScreenToGif.Cloud;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.ViewModel.UploadPresets.Imgur;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class ImgurPanel : UserControl, IPanel\n{\n    private string _originalTitle = \"\";\n\n    public ImgurPanel()\n    {\n        InitializeComponent();\n    }\n\n\n    private void ImgurPanel_Loaded(object sender, RoutedEventArgs e)\n    {\n        _originalTitle = NameTextBox.Text.Trim();\n\n        NameTextBox.Focus();\n\n        UpdateAlbumList(true);\n    }\n        \n    private void TokenHyperlink_RequestNavigate(object sender, System.Windows.RoutedEventArgs e)\n    {\n        try\n        {\n            StatusBand.Hide();\n            ProcessHelper.StartWithShell(Imgur.GetAuthorizationAdress());\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Creating the link and opening a Imgur related page.\");\n            StatusBand.Error(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.GetToken\"));\n        }\n    }\n\n    private async void AuthorizeButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (DataContext is not ImgurPreset preset)\n            return;\n\n        if (string.IsNullOrWhiteSpace(preset.OAuthToken))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Token\"));\n            return;\n        }\n\n        try\n        {\n            ThisPanel.IsEnabled = false;\n            StatusBand.Hide();\n\n            if (await Imgur.GetTokens(preset))\n            {\n                preset.OAuthToken = null;\n                StatusBand.Info(LocalizationHelper.Get(\"S.Options.Upload.Preset.Info.Authorized\"));\n                return;\n            }\n\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.AuthError\"));\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Authorizing access - Imgur\");\n\n            StatusBand.Error(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.AuthError\"), () => new ExceptionViewer(ex).ShowDialog());\n        }\n        finally\n        {\n            ThisPanel.IsEnabled = true;\n            UpdateAlbumList();\n        }\n    }\n\n    private void LoadAlbums_Click(object sender, RoutedEventArgs e)\n    {\n        UpdateAlbumList();\n    }\n\n\n    private async void UpdateAlbumList(bool offline = false)\n    {\n        try\n        {\n            ThisPanel.IsEnabled = false;\n\n            if (DataContext is not ImgurPreset preset)\n                return;\n\n            if (!offline && !await Imgur.IsAuthorized(preset))\n                return;\n\n            var list = offline && preset.Albums != null ? preset.Albums.Cast<ImgurAlbum>().ToList() : offline ? null : await Imgur.GetAlbums(preset);\n\n            if (list == null)\n            {\n                list = new List<ImgurAlbum>();\n\n                if (!offline)\n                    StatusBand.Error(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.AlbumLoad\"));\n            }\n\n            if (!offline || list.All(a => a.Id != \"♥♦♣♠\"))\n                list.Insert(0, new ImgurAlbum { Id = \"♥♦♣♠\", Title = LocalizationHelper.Get(\"S.Options.Upload.Preset.Imgur.AskMe\") });\n\n            AlbumComboBox.ItemsSource = list;\n\n            if (AlbumComboBox.SelectedIndex == -1)\n                AlbumComboBox.SelectedIndex = 0;\n        }\n        finally\n        {\n            ThisPanel.IsEnabled = true;\n        }\n    }\n        \n    public async Task<bool> IsValid()\n    {\n        if (DataContext is not ImgurPreset preset)\n            return false;\n\n        if (string.IsNullOrWhiteSpace(preset.Title))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Title\"));\n            return false;\n        }\n\n        if (UserSettings.All.UploadPresets.OfType<UploadPreset>().Any(a => a.Title != _originalTitle && a.Title == preset.Title.Trim()))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Repeated\"));\n            return false;\n        }\n\n        if (!preset.IsAnonymous && !await Imgur.IsAuthorized(preset))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Authenticate\"));\n            return false;\n        }\n\n        return true;\n    }\n\n    public UploadPreset GetPreset()\n    {\n        return DataContext as ImgurPreset;\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/KGySoftGifOptionsPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.KGySoftGifOptionsPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:vm=\"clr-namespace:ScreenToGif.ViewModel\"\n             xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:uc=\"clr-namespace:ScreenToGif.UserControls\"\n             mc:Ignorable=\"d\"\n             Name=\"This\" d:DataContext=\"{d:DesignInstance vm:KGySoftGifOptionsViewModel, IsDesignTimeCreatable=False}\"\n             Unloaded=\"KGySoftGifOptionsPanel_OnUnloaded\" DataContextChanged=\"KGySoftGifOptionsPanel_OnDataContextChanged\">\n\n    <StackPanel Margin=\"0,0,3,0\">\n        <!--Quantizer-->\n        <GroupBox Header=\"{DynamicResource S.SaveAs.KGySoft.Quantizer}\">\n            <StackPanel>\n                <!--Selectable quantizers-->\n                <ComboBox x:Name=\"QuantizersComboBox\" Height=\"38\" Margin=\"3\" ItemsSource=\"{Binding Quantizers}\" SelectedValue=\"{Binding QuantizerId}\"\n                          SelectedValuePath=\"Id\" ItemTemplate=\"{StaticResource Template.ComboBox.SimpleNoIcon}\"/>\n\n                <!--Quantizers Options-->\n                <Grid>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <!--Back Color-->\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"3,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                               Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.BackColor}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.BackColor.Info}\"/>\n                    <c:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"3\" AllowTransparency=\"False\" SelectedColor=\"{Binding BackColor, Mode=TwoWay}\"\n                                ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.BackColor.Info}\"/>\n\n                    <!--Alpha Threshold-->\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"3,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                               Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.AlphaThreshold}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info}\"\n                               Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasAlphaThreshold), Converter={StaticResource Bool2Visibility}}\"/>\n                    <Slider Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"0,3\" TickPlacement=\"BottomRight\" AutoToolTipPlacement=\"TopLeft\" Minimum=\"0\" Maximum=\"255\" TickFrequency=\"32\"\n                            Value=\"{Binding AlphaThreshold}\" SmallChange=\"1\" LargeChange=\"32\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.AlphaThreshold.Info}\"\n                            Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasAlphaThreshold), Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <!--White Threshold-->\n                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"3,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                               Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.WhiteThreshold}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info}\"\n                               Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasWhiteThreshold), Converter={StaticResource Bool2Visibility}}\"/>\n                    <Slider Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"0,3\" TickPlacement=\"BottomRight\" AutoToolTipPlacement=\"TopLeft\" Minimum=\"0\" Maximum=\"255\" TickFrequency=\"32\"\n                            Value=\"{Binding WhiteThreshold}\" SmallChange=\"1\" LargeChange=\"32\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.WhiteThreshold.Info}\"\n                            Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasWhiteThreshold), Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <!--Direct Mapping-->\n                    <c:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\" Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.DirectMapping}\"\n                                        ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.DirectMapping.Info}\" IsChecked=\"{Binding DirectMapping}\"\n                                        Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasDirectMapping), Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <!--Palette Size-->\n                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"3,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                               Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.PaletteSize}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.PaletteSize.Info}\"\n                               Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasMaxColors), Converter={StaticResource Bool2Visibility}}\"/>\n                    <c:IntegerUpDown Grid.Row=\"4\" Grid.Column=\"1\" Margin=\"3\" TextAlignment=\"Right\" Minimum=\"2\" Maximum=\"256\" StepValue=\"1\" Value=\"{Binding PaletteSize, Mode=TwoWay}\"\n                                     ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.PaletteSize.Info}\"\n                                     Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasMaxColors), Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <!--Bit Level-->\n                    <c:ExtendedCheckBox Grid.Row=\"5\" Grid.Column=\"0\" Margin=\"3,8,5,8\" Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.CustomBitLevel}\"\n                                        ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.CustomBitLevel.Info}\" IsChecked=\"{Binding IsCustomBitLevel}\"\n                                        Visibility=\"{Binding ElementName=QuantizersComboBox, Path=SelectedItem.(vm:QuantizerDescriptor.HasBitLevel), Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n                    <Slider Grid.Row=\"5\" Grid.Column=\"1\" Margin=\"0,3\" TickPlacement=\"BottomRight\" AutoToolTipPlacement=\"TopLeft\"\n                            Minimum=\"1\" Maximum=\"8\" TickFrequency=\"1\" Value=\"{Binding BitLevel, FallbackValue=0}\" SmallChange=\"1\" LargeChange=\"32\"\n                            ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.BitLevel.Info}\">\n                        <Slider.Visibility>\n                            <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                                <Binding ElementName=\"QuantizersComboBox\" Path=\"SelectedItem.(vm:QuantizerDescriptor.HasBitLevel)\"/>\n                                <Binding Path=\"IsCustomBitLevel\"/>\n                            </MultiBinding>\n                        </Slider.Visibility>\n                    </Slider>\n\n                    <!--Linear Color Space-->\n                    <c:ExtendedCheckBox Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\"\n                                        Text=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.LinearColorSpace}\"\n                                        ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Quantizer.LinearColorSpace.Info}\"\n                                        IsChecked=\"{Binding LinearColorSpace}\"/>\n\n                </Grid>\n            </StackPanel>\n        </GroupBox>\n\n        <!--Ditherer-->\n        <GroupBox>\n            <GroupBox.Header>\n                <c:ExtendedCheckBox Text=\"{DynamicResource S.SaveAs.KGySoft.Ditherer}\" IsChecked=\"{Binding UseDitherer}\" Margin=\"0,0,-10,0\"/>\n            </GroupBox.Header>\n            \n            <StackPanel IsEnabled=\"{Binding UseDitherer}\">\n                <!--Selectable ditherers-->\n                <ComboBox Name=\"DithererComboBox\" Height=\"38\" Margin=\"3\" ItemsSource=\"{Binding Ditherers}\"\n                          SelectedValue=\"{Binding DithererId}\" SelectedValuePath=\"Id\" ItemTemplate=\"{StaticResource Template.ComboBox.SimpleNoIcon}\"/>\n\n                <!--Ditherer Options-->\n                <Grid>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"45\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <!--Strength-->\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"3,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                               Text=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.Strength}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.Strength.Info}\"\n                               Visibility=\"{Binding ElementName=DithererComboBox, Path=SelectedItem.(vm:DithererDescriptor.HasStrength), Converter={StaticResource Bool2Visibility}}\"/>\n                    <Slider Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"0,3\" TickPlacement=\"BottomRight\" Minimum=\"0\" Maximum=\"1\" TickFrequency=\"0.1\"\n                            Value=\"{Binding Strength}\" SmallChange=\"0.01\" LargeChange=\"0.25\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.Strength.Info}\"\n                            Visibility=\"{Binding ElementName=DithererComboBox, Path=SelectedItem.(vm:DithererDescriptor.HasStrength), Converter={StaticResource Bool2Visibility}}\"/>\n                    <!--Issue: StringFormat cannot be a DynamicResource-->\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Margin=\"0,0,3,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Text=\"{Binding Strength, StringFormat=#0.##%;;Auto}\"\n                               Visibility=\"{Binding ElementName=DithererComboBox, Path=SelectedItem.(vm:DithererDescriptor.HasStrength), Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <!--Seed-->\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Margin=\"3,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                               ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.Seed.Info}\" Text=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.Seed}\"\n                               Visibility=\"{Binding ElementName=DithererComboBox, Path=SelectedItem.(vm:DithererDescriptor.HasSeed), Converter={StaticResource Bool2Visibility}}\"/>\n                    <c:NullableIntegerBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"5,3\" Value=\"{Binding Seed, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.Seed.Info}\"\n                                          Visibility=\"{Binding ElementName=DithererComboBox, Path=SelectedItem.(vm:DithererDescriptor.HasSeed), Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <!--Serpentine Processing-->\n                    <c:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"5,3,3,3\" Text=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing}\"\n                                        ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Ditherer.IsSerpentineProcessing.Info}\" IsChecked=\"{Binding IsSerpentineProcessing}\"\n                                        Visibility=\"{Binding ElementName=DithererComboBox, Path=SelectedItem.(vm:DithererDescriptor.HasSerpentineProcessing), Converter={StaticResource Bool2Visibility}}\"/>\n                </Grid>\n            </StackPanel>\n        </GroupBox>\n\n        <!--Preview-->\n        <GroupBox Header=\"{DynamicResource S.SaveAs.KGySoft.Preview}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\" MinHeight=\"16\"/>\n                </Grid.RowDefinitions>\n\n                <c:ExtendedCheckBox Grid.Row=\"0\" Margin=\"3\" Text=\"{DynamicResource S.SaveAs.KGySoft.Preview.ShowCurrentFrame}\"\n                                    ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Preview.ShowCurrentFrame.Info}\" IsChecked=\"{Binding ShowCurrentFrame}\"/>\n\n                <!--Tried to use ZoomBox, but it requires the image as a path (converted to bitmap twice: in LoadFromPath, and in Generic.xaml by template)\n                    FrameViewer seemed another option, but it looks quite incomplete.\n                    In the end, I implemented an ImageViewer control with zooming and panning -->\n                <!--<Image Grid.Row=\"1\" Source=\"{Binding PreviewImage, Mode=OneWay}\" RenderOptions.BitmapScalingMode=\"HighQuality\"/>-->\n                <uc:ImageViewer Grid.Row=\"1\" Source=\"{Binding PreviewImage, Mode=OneWay}\" MaxHeight=\"300\"\n                                ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Preview.Info}\"/>\n\n                <DockPanel Grid.Row=\"1\" LastChildFill=\"False\">\n                    <ProgressBar DockPanel.Dock=\"Bottom\" Height=\"4\" Margin=\"10,0\" IsIndeterminate=\"True\"\n                                 Visibility=\"{Binding IsGenerating, Converter={StaticResource Bool2Visibility}}\"/>\n                </DockPanel>\n                \n                <Label Grid.Row=\"1\" Template=\"{StaticResource WarningLabel}\" Content=\"{DynamicResource S.SaveAs.KGySoft.Preview.Refresh}\"\n                       Visibility=\"{Binding ShowRefreshPreview, Converter={StaticResource Bool2Visibility}}\" PreviewMouseLeftButtonUp=\"RefreshPreview_Click\"/>\n                <Label Grid.Row=\"1\" Template=\"{StaticResource ErrorLabel}\" Content=\"{Binding PreviewError}\"\n                       Visibility=\"{Binding PreviewError, Converter={StaticResource ContentToVisibility}}\" PreviewMouseLeftButtonUp=\"RefreshPreview_Click\"/>\n            </Grid>\n        </GroupBox>\n\n        <!--Animation Settings-->\n        <GroupBox Header=\"{DynamicResource S.SaveAs.KGySoft.Animation}\">\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <!--Repeat Count-->\n                <c:ExtendedCheckBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\" Text=\"{DynamicResource S.SaveAs.KGySoft.Animation.EndlessLoop}\"\n                                    ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.EndlessLoop.Info}\" IsChecked=\"{Binding EndlessLoop}\"/>\n                <c:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" VerticalContentAlignment=\"Center\" Margin=\"15,7,5,7\"\n                                    Text=\"{DynamicResource S.SaveAs.KGySoft.Animation.PingPong}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.PingPong.Info}\"\n                                    IsChecked=\"{Binding PingPong}\" Visibility=\"{Binding EndlessLoop, Converter={StaticResource Bool2Visibility}}\"/>\n                \n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Margin=\"15,6,3,7\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                           Text=\"{DynamicResource S.SaveAs.KGySoft.Animation.LoopCount}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.LoopCount.Info}\"\n                           Visibility=\"{Binding EndlessLoop, Converter={StaticResource InvertedBoolToVisibility}}\"/>\n                <c:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"5,3\" TextAlignment=\"Right\" Minimum=\"1\" Maximum=\"65535\" StepValue=\"1\"\n                                 ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.LoopCount.Info}\" Visibility=\"{Binding EndlessLoop, Converter={StaticResource InvertedBoolToVisibility}}\"/>\n\n                <!--Allow Delta Frames-->\n                <c:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\" Text=\"{DynamicResource S.SaveAs.KGySoft.Animation.AllowDeltaFrames}\"\n                                    ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.AllowDeltaFrames.Info}\" IsChecked=\"{Binding AllowDeltaFrames}\"/>\n                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Margin=\"15,5,3,5\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                           Text=\"{DynamicResource S.SaveAs.KGySoft.Animation.DeltaTolerance}\" ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.DeltaTolerance.Info}\"\n                           Visibility=\"{Binding AllowDeltaFrames, Converter={StaticResource Bool2Visibility}}\"/>\n                \n                <Slider Grid.Row=\"3\" Grid.Column=\"1\" Margin=\"5,3\" TickPlacement=\"BottomRight\" AutoToolTipPlacement=\"TopLeft\"\n                        Minimum=\"0\" Maximum=\"255\" TickFrequency=\"32\" Value=\"{Binding DeltaTolerance}\" SmallChange=\"1\" LargeChange=\"32\"\n                        ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.DeltaTolerance.Info}\" Visibility=\"{Binding AllowDeltaFrames, Converter={StaticResource Bool2Visibility}}\"/>\n                <Label Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"20,3,10,3\" Template=\"{StaticResource WarningLabel}\"\n                       Content=\"{DynamicResource S.SaveAs.KGySoft.Animation.HighDeltaTolerance}\"\n                       PreviewMouseLeftButtonUp=\"HighDeltaToleranceLabel_Click\"\n                       Visibility=\"{Binding IsHighTolerance, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Allow Clipped Frames-->\n                <c:ExtendedCheckBox Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\" Text=\"{DynamicResource S.SaveAs.KGySoft.Animation.AllowClippedFrames}\"\n                                    ToolTip=\"{DynamicResource S.SaveAs.KGySoft.Animation.AllowClippedFrames.Info}\" IsChecked=\"{Binding AllowClippedFrames}\"/> \n                <Label Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\" Template=\"{StaticResource InfoLabel}\"\n                       Content=\"{DynamicResource S.SaveAs.KGySoft.Animation.AllowDeltaIgnored}\" Visibility=\"{Binding IsAllowDeltaIgnored, Converter={StaticResource Bool2Visibility}}\"\n                       PreviewMouseLeftButtonUp=\"AllowDeltaIgnoredLabel_Click\"/>\n                <Label Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3\" Template=\"{StaticResource InfoLabel}\"\n                       Content=\"{DynamicResource S.SaveAs.KGySoft.Animation.AllowClippedIgnored}\"\n                       Visibility=\"{Binding IsAllowClippedIgnored, Converter={StaticResource Bool2Visibility}}\"\n                       PreviewMouseLeftButtonUp=\"AllowClippedIgnoredLabel_Click\"/>\n            </Grid>\n        </GroupBox>\n    </StackPanel>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/KGySoftGifOptionsPanel.xaml.cs",
    "content": "#region Usings\n\nusing System.Windows;\nusing System.Windows.Controls;\n\nusing ScreenToGif.ViewModel;\nusing System.Windows.Input;\n\n#endregion\n\nnamespace ScreenToGif.UserControls\n{\n    /// <summary>\n    /// Interaction logic for KGySoftGifOptionsPanel.xaml\n    /// </summary>\n    public partial class KGySoftGifOptionsPanel : UserControl\n    {\n        public static readonly DependencyProperty CurrentFrameProperty = DependencyProperty.Register(nameof(CurrentFrame), typeof(FrameViewModel), typeof(KGySoftGifOptionsPanel), new PropertyMetadata(default(FrameViewModel)));\n\n        #region Properties\n\n        public FrameViewModel CurrentFrame\n        {\n            get => (FrameViewModel)GetValue(CurrentFrameProperty);\n            set => SetValue(CurrentFrameProperty, value);\n        }\n\n        private KGySoftGifOptionsViewModel ViewModel => DataContext as KGySoftGifOptionsViewModel;\n\n        #endregion\n\n        #region Constructors\n\n        public KGySoftGifOptionsPanel() => InitializeComponent();\n\n        #endregion\n\n        #region Methods\n\n        #region Protected Methods\n\n        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)\n        {\n            base.OnPropertyChanged(e);\n            if (e.Property == CurrentFrameProperty && ViewModel != null)\n                ViewModel.CurrentFramePath = CurrentFrame?.Image;\n        }\n\n        #endregion\n\n        #region Event Handlers\n\n        private async void RefreshPreview_Click(object sender, MouseButtonEventArgs e) => await ViewModel.RefreshPreview();\n        private void AllowDeltaIgnoredLabel_Click(object sender, MouseButtonEventArgs e) => ViewModel.AllowClippedFrames = true;\n        private void AllowClippedIgnoredLabel_Click(object sender, MouseButtonEventArgs e) => ViewModel.AllowDeltaFrames = true;\n        private void HighDeltaToleranceLabel_Click(object sender, MouseButtonEventArgs e) => ViewModel.DeltaTolerance = 0;\n        private void KGySoftGifOptionsPanel_OnUnloaded(object sender, RoutedEventArgs e) => ViewModel?.Dispose();\n\n        private async void KGySoftGifOptionsPanel_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)\n        {\n            (e.OldValue as KGySoftGifOptionsViewModel)?.Dispose();\n            if (e.NewValue is KGySoftGifOptionsViewModel vm)\n            {\n                vm.CurrentFramePath = CurrentFrame?.Image;\n                await vm.Apply();\n            }\n        }\n\n        #endregion\n\n        #endregion\n\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/KeyStrokesPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.KeyStrokesPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:cm=\"clr-namespace:System.ComponentModel;assembly=WindowsBase\"\n             xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n             xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"400\" d:DesignWidth=\"300\"\n             SnapsToDevicePixels=\"True\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Grid.Resources>\n            <c:FontToSupportedGliph x:Key=\"FontToSupportedGliphConverter\"/>\n            \n            <CollectionViewSource x:Key=\"MyFonts\" x:Shared=\"False\" Source=\"{Binding Source={x:Static Fonts.SystemFontFamilies}, Converter={StaticResource FontToSupportedGliphConverter}}\">\n                <CollectionViewSource.SortDescriptions>\n                    <cm:SortDescription PropertyName=\"Source\"/>\n                </CollectionViewSource.SortDescriptions>\n            </CollectionViewSource>\n\n            <DataTemplate x:Key=\"FontTemplate\">\n                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                    <TextBlock FontFamily=\"{Binding .}\" FontSize=\"16\" Text=\"{Binding .}\" ToolTip=\"{Binding Path=.Source}\"/>\n                </VirtualizingStackPanel>\n            </DataTemplate>\n        </Grid.Resources>\n        \n        <Expander Grid.Row=\"0\" Header=\"{DynamicResource S.KeyStrokes.Keys}\" IsExpanded=\"{Binding IsKeyStrokesKeysExpanded, Source={x:Static t:UserSettings.All}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.IgnoreModifiers}\" Margin=\"0,5\"\n                                    IsChecked=\"{Binding KeyStrokesIgnoreNonModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                    ToolTip=\"{DynamicResource S.KeyStrokes.IgnoreModifiers.Info}\"/>\n\n                <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.IgnoreInjected}\" Margin=\"0,5\"\n                                    IsChecked=\"{Binding KeyStrokesIgnoreInjected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                    ToolTip=\"{DynamicResource S.KeyStrokes.IgnoreInjected.Info}\"/>\n\n                <n:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Translate}\" Margin=\"0,5\"\n                                    IsChecked=\"{Binding KeyStrokesTranslate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                    ToolTip=\"{DynamicResource S.KeyStrokes.Translate.Info}\"/>\n\n                <n:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Extend}\" Margin=\"0,5\"\n                                    IsChecked=\"{Binding KeyStrokesExtended, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <StackPanel Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Orientation=\"Horizontal\" Margin=\"10,0,0,0\" \n                            Visibility=\"{Binding KeyStrokesExtended, Converter={StaticResource Bool2Visibility}}\">\n                    <TextBlock Text=\"{DynamicResource S.KeyStrokes.By}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:IntegerUpDown Minimum=\"10\" Maximum=\"1000\" Margin=\"5\" MinWidth=\"70\" Value=\"{Binding KeyStrokesDelay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                </StackPanel>\n\n                <n:ExtendedCheckBox Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Earlier}\" Margin=\"0,5\"\n                                    IsChecked=\"{Binding KeyStrokesEarlier, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <StackPanel Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Orientation=\"Horizontal\" Margin=\"10,0,0,0\" \n                            Visibility=\"{Binding KeyStrokesEarlier, Converter={StaticResource Bool2Visibility}}\">\n                    <TextBlock Text=\"{DynamicResource S.KeyStrokes.By}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <n:IntegerUpDown Minimum=\"10\" Maximum=\"1000\" Margin=\"5\" MinWidth=\"70\" Value=\"{Binding KeyStrokesEarlierBy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                </StackPanel>\n\n                <TextBlock Grid.Row=\"8\" Grid.Column=\"0\" Text=\"{DynamicResource S.KeyStrokes.Separator}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ExtendedTextBox Grid.Row=\"8\" Grid.Column=\"1\" Margin=\"5,3\" MinWidth=\"70\" Text=\"{Binding KeyStrokesSeparator, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsKeyStrokesFontExpanded, Source={x:Static t:UserSettings.All}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                          ItemTemplate=\"{DynamicResource FontTemplate}\" SelectedItem=\"{Binding KeyStrokesFontFamily, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                    <ComboBox.ItemsSource>\n                        <Binding Source=\"{StaticResource MyFonts}\"/>\n                    </ComboBox.ItemsSource>\n\n                    <ComboBox.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                        </ItemsPanelTemplate>\n                    </ComboBox.ItemsPanel>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" SelectedValuePath=\"FontStyle\" \n                          SelectedValue=\"{Binding KeyStrokesFontStyle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                            </VirtualizingStackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n\n                    <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                    <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                    <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" SelectedValuePath=\"FontWeight\" \n                          SelectedValue=\"{Binding KeyStrokesFontWeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\" />\n                            </VirtualizingStackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n\n                    <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                    <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                    <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                    <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                    <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                    <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                    <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                    <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                    <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                    <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                    <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                    <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                    <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                    <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                    <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                    <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"10\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                 Value=\"{Binding KeyStrokesFontSize, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" SelectedColor=\"{Binding KeyStrokesFontColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Outline}\" IsExpanded=\"{Binding IsKeyStrokesOutlineExpanded, Source={x:Static t:UserSettings.All}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"20\" Margin=\"10,5\" MinWidth=\"70\" \n                                 Value=\"{Binding KeyStrokesOutlineThickness, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" SelectedColor=\"{Binding KeyStrokesOutlineColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Background}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ColorBox Grid.Row=\"2\" Grid.Column=\"1\" SelectedColor=\"{Binding KeyStrokesBackgroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Caption.Layout}\" IsExpanded=\"{Binding IsKeyStrokesLayoutExpanded, Source={x:Static t:UserSettings.All}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Vertical}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" SelectedValuePath=\"VerticalAlignment\" \n                          SelectedValue=\"{Binding KeyStrokesVerticalAlignment, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n\n                    <TextBlock VerticalAlignment=\"Top\" Text=\"{DynamicResource S.VerticalAlignment.Top}\"/>\n                    <TextBlock VerticalAlignment=\"Center\" Text=\"{DynamicResource S.VerticalAlignment.Center}\"/>\n                    <TextBlock VerticalAlignment=\"Bottom\" Text=\"{DynamicResource S.VerticalAlignment.Bottom}\"/>\n                    <TextBlock VerticalAlignment=\"Stretch\" Text=\"{DynamicResource S.Alignment.Stretch}\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Horizontal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" SelectedValuePath=\"HorizontalAlignment\" \n                          SelectedValue=\"{Binding KeyStrokesHorizontalAlignment, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n\n                    <TextBlock HorizontalAlignment=\"Left\" Text=\"{DynamicResource S.HorizontalAlignment.Left}\"/>\n                    <TextBlock HorizontalAlignment=\"Center\" Text=\"{DynamicResource S.HorizontalAlignment.Center}\"/>\n                    <TextBlock HorizontalAlignment=\"Right\" Text=\"{DynamicResource S.HorizontalAlignment.Right}\"/>\n                    <TextBlock HorizontalAlignment=\"Stretch\" Text=\"{DynamicResource S.Alignment.Stretch}\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Margin}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" Minimum=\"-100\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                 Value=\"{Binding KeyStrokesMargin, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Padding}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                 Value=\"{Binding KeyStrokesPadding, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.MinHeight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"4\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                 Value=\"{Binding KeyStrokesMinHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n            </Grid>\n        </Expander>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/KeyStrokesPanel.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class KeyStrokesPanel : UserControl\n{\n    public KeyStrokesPanel()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/MouseClicksPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.MouseEventsPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"150\" d:DesignWidth=\"300\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"27\"/>\n            <RowDefinition/>\n        </Grid.RowDefinitions>\n\n        <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n        <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseHighlight.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" SelectedColor=\"{Binding HighlightForegroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n            \n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.Left}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" SelectedColor=\"{Binding LeftButtonForegroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.Middle}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"2\" Grid.Column=\"1\" SelectedColor=\"{Binding MiddleButtonForegroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.Right}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"3\" Grid.Column=\"1\" SelectedColor=\"{Binding RightButtonForegroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n            <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.FirstExtra}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" SelectedColor=\"{Binding FirstExtraMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n            <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.SecondExtra}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"5\" Grid.Column=\"1\" SelectedColor=\"{Binding SecondExtraMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n            <TextBlock Grid.Row=\"6\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:DoubleUpDown Grid.Row=\"6\" Grid.Column=\"1\" x:Name=\"ClickWidthDoubleUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\"\n                            Value=\"{Binding Width, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <TextBlock Grid.Row=\"7\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:DoubleUpDown Grid.Row=\"7\" Grid.Column=\"1\" x:Name=\"ClickHeightDoubleUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\"\n                            Value=\"{Binding Height, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/MouseClicksPanel.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class MouseEventsPanel : UserControl\n{\n    public MouseEventsPanel()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/ProgressPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.ProgressPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:cm=\"clr-namespace:System.ComponentModel;assembly=WindowsBase\"\n             xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n             xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n             xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"400\" d:DesignWidth=\"300\"\n             SnapsToDevicePixels=\"True\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"23\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"23\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"23\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Grid.Resources>\n            <c:FontToSupportedGliph x:Key=\"FontToSupportedGliphConverter\"/>\n            \n            <CollectionViewSource x:Key=\"MyFonts\" x:Shared=\"False\" Source=\"{Binding Source={x:Static Fonts.SystemFontFamilies}, Converter={StaticResource FontToSupportedGliphConverter}}\">\n                <CollectionViewSource.SortDescriptions>\n                    <cm:SortDescription PropertyName=\"Source\"/>\n                </CollectionViewSource.SortDescriptions>\n            </CollectionViewSource>\n\n            <DataTemplate x:Key=\"FontTemplate\">\n                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                    <TextBlock FontFamily=\"{Binding .}\" FontSize=\"16\" Text=\"{Binding .}\" ToolTip=\"{Binding Path=.Source}\"/>\n                </VirtualizingStackPanel>\n            </DataTemplate>\n\n            <c:IntToBool x:Key=\"IntToBool\"/>\n            <c:BoolAndToVisibility x:Key=\"BoolAndToVisibility\"/>\n            <c:BoolAndOrOrToVisibility x:Key=\"BoolAndOrOrToVisibility\"/>\n        </Grid.Resources>\n\n        <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Progress.Type}\"/>\n        <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedRadioButton Grid.Column=\"0\" x:Name=\"BarRadioButton\" Icon=\"{StaticResource Vector.Progress}\" Text=\"{DynamicResource S.Progress.Type.Bar}\" \n                                   IsChecked=\"{Binding Type, Mode=TwoWay, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:ProgressTypes.Bar}}\"/>\n\n            <n:ExtendedRadioButton Grid.Column=\"1\" x:Name=\"TextRadioButton\" Icon=\"{StaticResource Vector.FreeText}\" Text=\"{StaticResource S.Progress.Type.Text}\"\n                                   IsChecked=\"{Binding Type, Mode=TwoWay, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:ProgressTypes.Text}}\"/>\n        </Grid>\n\n        <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsProgressFontGroupExpanded, Source={x:Static t:UserSettings.All}}\"\n                  Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ProgressFontComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                          ItemTemplate=\"{DynamicResource FontTemplate}\" SelectedItem=\"{Binding FontFamily, Mode=TwoWay}\">\n                    <ComboBox.ItemsSource>\n                        <Binding Source=\"{StaticResource MyFonts}\" />\n                    </ComboBox.ItemsSource>\n\n                    <ComboBox.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                        </ItemsPanelTemplate>\n                    </ComboBox.ItemsPanel>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ProgressFontStyleComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                          SelectedValuePath=\"FontStyle\" SelectedValue=\"{Binding FontStyle, Mode=TwoWay}\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                            </VirtualizingStackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n\n                    <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                    <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                    <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"ProgressFontWeightComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                          SelectedValuePath=\"FontWeight\" SelectedValue=\"{Binding FontWeight, Mode=TwoWay}\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\" />\n                            </VirtualizingStackPanel>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n\n                    <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                    <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                    <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                    <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                    <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                    <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                    <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                    <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                    <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                    <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                    <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                    <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                    <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                    <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                    <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                    <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ProgressFontSizeNumericUpDown\" Minimum=\"10\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                 Value=\"{Binding FontSize, Mode=TwoWay}\"/>\n\n                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" SelectedColor=\"{Binding FontColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n            </Grid>\n        </Expander>\n\n        <n:LabelSeparator Grid.Row=\"3\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n        <Grid Grid.Row=\"4\" Margin=\"10,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" SelectedColor=\"{Binding Color, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Progress.Precision}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                       Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n            <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ProgressPrecisionComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                      SelectedIndex=\"{Binding Precision, Mode=TwoWay}\" Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\">\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Minutes}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Seconds}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Milliseconds}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Percentage}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Count}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Custom}\"/>\n                <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.DateOfRecording}\"/>\n            </ComboBox>\n\n            <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Progress.Precision.ShowTotal}\" Margin=\"10,5,5,5\"\n                                IsChecked=\"{Binding ShowTotal, Mode=TwoWay}\" Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" x:Name=\"ProgressFormatTextBlock\" Text=\"{DynamicResource S.Progress.Format}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\">\n                <TextBlock.Visibility>\n                    <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                        <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"5\"/>\n                        <Binding ElementName=\"TextRadioButton\" Path=\"IsChecked\"/>\n                    </MultiBinding>\n                </TextBlock.Visibility>\n            </TextBlock>\n            <n:ExtendedTextBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"CustomProgressTextBox\" Margin=\"10,5\"\n                               Text=\"{Binding Format, Mode=TwoWay}\" Visibility=\"{Binding ElementName=ProgressFormatTextBlock, Path=Visibility}\">\n                <n:ExtendedTextBox.ToolTip>\n                    <n:HeaderedTooltip Header=\"{DynamicResource S.Progress.Format.Header}\" StaysOpen=\"True\">\n                        <Run Text=\"{DynamicResource S.Progress.Format.Milliseconds}\"/>\n                        <LineBreak/>\n                        <Run Text=\"{DynamicResource S.Progress.Format.Seconds}\"/>\n                        <LineBreak/>\n                        <Run Text=\"{DynamicResource S.Progress.Format.Minutes}\"/>\n                        <LineBreak/>\n                        <Run Text=\"{DynamicResource S.Progress.Format.Percentage}\"/>\n                        <LineBreak/>\n                        <Run Text=\"{DynamicResource S.Progress.Format.FrameNumber}\"/>\n                        <LineBreak/>\n                        <LineBreak/>\n                        <Run Text=\"{DynamicResource S.Progress.Format.Totals}\" FontWeight=\"SemiBold\"/>\n                        <LineBreak/>\n                        <Run Text=\"@ms, @s, @m, @p, @f\"/>\n                        <LineBreak/>\n                        <LineBreak/>\n                        <Run Text=\"{DynamicResource S.Progress.Format.Examples}\" FontWeight=\"SemiBold\"/>\n                        <LineBreak/>\n                        <Run Text=\"'$s/@s s' = 2/10 s\"/>\n                        <LineBreak/>\n                        <Run Text=\"'$p/@p%' = 25/100%\"/>\n                    </n:HeaderedTooltip>\n                </n:ExtendedTextBox.ToolTip>\n            </n:ExtendedTextBox>\n\n            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" x:Name=\"ProgressStartNumberTextBlock\" Text=\"{DynamicResource S.Progress.Precision.StartNumber}\" VerticalAlignment=\"Center\" \n                       Foreground=\"{DynamicResource Element.Foreground.Medium}\">\n                <TextBlock.Visibility>\n                    <MultiBinding Converter=\"{StaticResource BoolAndOrOrToVisibility}\">\n                        <Binding ElementName=\"TextRadioButton\" Path=\"IsChecked\"/>\n                        <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"4\"/>\n                        <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"5\"/>\n                    </MultiBinding>\n                </TextBlock.Visibility>\n            </TextBlock>\n            <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ProgressStartNumberIntegerUpDown\" Minimum=\"0\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                             Value=\"{Binding StartNumber, Mode=TwoWay}\" Visibility=\"{Binding ElementName=ProgressStartNumberTextBlock, Path=Visibility}\" ToolTip=\"{DynamicResource S.Progress.Precision.StartNumber.ToolTip}\"/>\n\n            <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" x:Name=\"ProgressDateFormatTextBlock\" Text=\"{DynamicResource S.Progress.Format}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\">\n                <TextBlock.Visibility>\n                    <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                        <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"6\"/>\n                        <Binding ElementName=\"TextRadioButton\" Path=\"IsChecked\"/>\n                    </MultiBinding>\n                </TextBlock.Visibility>\n            </TextBlock>\n            <n:ExtendedTextBox Grid.Row=\"4\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"CustomProgressDateTextBox\" Margin=\"10,5\"\n                               Text=\"{Binding DateFormat, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                               Visibility=\"{Binding ElementName=ProgressDateFormatTextBlock, Path=Visibility}\" ToolTip=\"{DynamicResource S.Progress.Format.Date}\"/>\n\n            <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ToolTip=\"docs.microsoft.com\"\n                       Visibility=\"{Binding ElementName=ProgressDateFormatTextBlock, Path=Visibility}\">\n\n                <Hyperlink NavigateUri=\"https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                    <Run Text=\"{DynamicResource S.Progress.Format.Date.Standard}\"/>\n                </Hyperlink>\n                <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <Hyperlink NavigateUri=\"https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                    <Run Text=\"{DynamicResource  S.Progress.Format.Date.Custom}\"/>\n                </Hyperlink>\n            </TextBlock>\n\n            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                       Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n            <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ProgressThicknessNumericUpDown\" Minimum=\"1\" Maximum=\"30\" Margin=\"10,5\" MinWidth=\"70\" \n                             Value=\"{Binding Thickness, Mode=TwoWay}\" Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n        </Grid>\n\n        <n:LabelSeparator Grid.Row=\"5\" Text=\"{DynamicResource S.Caption.Layout}\"/>\n        <Grid Grid.Row=\"6\" Margin=\"10,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Vertical}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ProgressVerticalComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\"\n                      SelectedValuePath=\"VerticalAlignment\" SelectedValue=\"{Binding VerticalAlignment, Mode=TwoWay}\">\n\n                <TextBlock VerticalAlignment=\"Top\" Text=\"{DynamicResource S.VerticalAlignment.Top}\"/>\n                <TextBlock VerticalAlignment=\"Center\" Text=\"{DynamicResource S.VerticalAlignment.Center}\"/>\n                <TextBlock VerticalAlignment=\"Bottom\" Text=\"{DynamicResource S.VerticalAlignment.Bottom}\"/>\n            </ComboBox>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Horizontal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ProgressHorizontalComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" \n                      SelectedValuePath=\"HorizontalAlignment\" SelectedValue=\"{Binding HorizontalAlignment, Mode=TwoWay}\">\n\n                <TextBlock HorizontalAlignment=\"Left\" Text=\"{DynamicResource S.HorizontalAlignment.Left}\"/>\n                <TextBlock HorizontalAlignment=\"Center\" Text=\"{DynamicResource S.HorizontalAlignment.Center}\"/>\n                <TextBlock HorizontalAlignment=\"Right\" Text=\"{DynamicResource S.HorizontalAlignment.Right}\"/>\n            </ComboBox>\n\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Progress.Orientation}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                       Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n            <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"ProgressOrientationComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"110\" \n                      SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Orientation, Mode=TwoWay}\"\n                      Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\">\n\n                <TextBlock Text=\"{DynamicResource S.Orientation.Horizontal}\">\n                    <TextBlock.Tag>\n                        <x:Static Member=\"Orientation.Horizontal\"/>\n                    </TextBlock.Tag>\n                </TextBlock>\n                <TextBlock Text=\"{DynamicResource S.Orientation.Vertical}\">\n                    <TextBlock.Tag>\n                        <x:Static Member=\"Orientation.Vertical\"/>\n                    </TextBlock.Tag>\n                </TextBlock>\n            </ComboBox>\n        </Grid>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/ProgressPanel.xaml.cs",
    "content": "using System;\nusing System.Windows.Controls;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class ProgressPanel : UserControl\n{\n    public ProgressPanel()\n    {\n        InitializeComponent();\n    }\n\n    private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(e.Uri.AbsoluteUri);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, $\"Error while trying to navigate to a given URI: '{e?.Uri?.AbsoluteUri}'.\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/ResizePanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.ResizePanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"250\" d:DesignWidth=\"300\"\n             DataContext=\"{x:Null}\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Expander Grid.Row=\"0\" Header=\"{DynamicResource S.Resize.Difference}\" IsExpanded=\"True\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <!--Original-->\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" HorizontalAlignment=\"Center\">\n                    <Run x:Name=\"CurrentWidthRun\" Text=\"{Binding OriginalWidth, StringFormat={}{0:0}}\"/>\n                    <Run Text=\" × \"/>\n                    <Run x:Name=\"CurrentHeightRun\" Text=\"{Binding OriginalHeight, StringFormat={}{0:0}}\"/>\n                    <Run Text=\"px\"/>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" HorizontalAlignment=\"Center\">\n                    <Run x:Name=\"CurrentDpiRun\" Text=\"{Binding OriginalDpi, StringFormat={}{0:0}}\"/>\n                    <Run Text=\"{DynamicResource S.Resize.Dpi}\"/>\n                </TextBlock>\n                \n                <Border Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" VerticalAlignment=\"Center\" Background=\"{StaticResource Vector.MoveRight}\" Width=\"15\" Height=\"15\" Margin=\"5\"/>\n\n                <!--Current-->\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" HorizontalAlignment=\"Center\">\n                    <Run Text=\"{Binding Width, Mode=OneWay, StringFormat={}{0:0}}\"/>\n                    <Run Text=\" × \"/>\n                    <Run Text=\"{Binding Height, Mode=OneWay, StringFormat={}{0:0}}\"/>\n                    <Run Text=\"px\"/>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" HorizontalAlignment=\"Center\">\n                    <Run Text=\"{Binding Dpi, Mode=OneWay, StringFormat={}{0:0}}\"/>\n                    <Run Text=\"{DynamicResource S.Resize.Dpi}\"/>\n                </TextBlock>\n\n                <!--Change-->\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"3\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" Margin=\"3\"\n                           Text=\"{Binding SizeDiff, Mode=OneWay, StringFormat={}{0:(+0 '%');(-0 '%');''}}\" FontStyle=\"Italic\">\n                    <TextBlock.ToolTip>\n                        <TextBlock VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" Margin=\"3\">\n                            <Run Text=\"{Binding WidthDiff, Mode=OneWay, StringFormat={}{0:(+# '%');(-# '%');'~ 0 %'}}\" FontStyle=\"Italic\"/>\n                            <Run Text=\" × \"/>\n                            <Run Text=\"{Binding HeightDiff, Mode=OneWay, StringFormat={}{0:(+# '%');(-# '%');'~ 0 %'}}\" FontStyle=\"Italic\"/>\n                        </TextBlock>\n                    </TextBlock.ToolTip>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"3\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\" Margin=\"3\"\n                           Text=\"{Binding DpiDiff, Mode=OneWay, StringFormat={}{0:(+# '%');(-# '%');''}}\" FontStyle=\"Italic\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Resize.Options}\" IsExpanded=\"True\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.ImportVideo.Width}\" Margin=\"0,5,0,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"WidthResizeIntegerUpDown\" Minimum=\"1\" Maximum=\"5000\" Margin=\"15,5,5,5\" Height=\"25\" MinWidth=\"70\"\n                                 Value=\"{Binding Width, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" Visibility=\"{Binding DisplayInPixels}\"/>\n                <n:DecimalUpDown Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"WidthResizeDecimalUpDown\" Minimum=\"1\" Maximum=\"5000\" Margin=\"15,5,5,5\" Height=\"25\" MinWidth=\"70\"\n                                 Value=\"{Binding WidthInPercent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" Visibility=\"{Binding DisplayInPercents, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n\n                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"0,3,5,3\" SelectedValuePath=\"Tag\" MinWidth=\"80\" SelectedValue=\"{Binding SizeUnit}\">\n                    <ComboBoxItem Tag=\"{x:Static e:SizeUnits.Pixels}\" Content=\"px\"/>\n                    <ComboBoxItem Tag=\"{x:Static e:SizeUnits.Percent}\" Content=\"%\"/>\n                </ComboBox>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.ImportVideo.Height}\" Margin=\"0,5,0,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"0\" x:Name=\"HeightResizeIntegerUpDown\" Minimum=\"1\" Maximum=\"5000\" Margin=\"15,5,5,5\" Height=\"25\" MinWidth=\"70\"\n                                 Value=\"{Binding Height, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" Visibility=\"{Binding DisplayInPixels}\"/>\n                <n:DecimalUpDown Grid.Row=\"3\" Grid.Column=\"0\" x:Name=\"HeightResizeDecimalUpDown\" Minimum=\"1\" Maximum=\"5000\" Margin=\"15,5,5,5\" Height=\"25\" MinWidth=\"70\"\n                                 Value=\"{Binding HeightInPercent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"\n                                 Visibility=\"{Binding DisplayInPercents, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n\n                <ComboBox Grid.Row=\"3\" Grid.Column=\"1\" Margin=\"0,5,5,5\" SelectedValuePath=\"Tag\" MinWidth=\"80\" SelectedValue=\"{Binding SizeUnit}\">\n                    <ComboBoxItem Tag=\"{x:Static e:SizeUnits.Pixels}\" Content=\"px\"/>\n                    <ComboBoxItem Tag=\"{x:Static e:SizeUnits.Percent}\" Content=\"%\"/>\n                </ComboBox>\n\n                <n:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"KeepAspectCheckBox\" Text=\"{DynamicResource S.Resize.KeepAspect}\"\n                                    Margin=\"5,5\" IsChecked=\"{Binding KeepAspectRatio}\"/>\n\n                <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.Resize.Dpi2}\" Margin=\"0,5,0,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:IntegerUpDown Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"1\" x:Name=\"DpiNumericUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"15,5,5,5\" Width=\"80\" HorizontalAlignment=\"Left\"\n                                 Value=\"{Binding Dpi, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\"/>\n                \n                <TextBlock Grid.Row=\"7\" Grid.Column=\"0\" Text=\"{DynamicResource S.Resize.ScalingQuality}\" Margin=\"0,5,0,0\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <ComboBox Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ResizeScalingQualityComboBox\" Margin=\"15,5,5,5\" SelectedValuePath=\"Tag\"\n                          SelectedValue=\"{Binding ScalingMode}\">\n                    <ComboBoxItem Tag=\"{x:Static BitmapScalingMode.Fant}\" Content=\"{DynamicResource S.Resize.ScalingQuality.Fant}\"/>\n                    <ComboBoxItem Tag=\"{x:Static BitmapScalingMode.Linear}\" Content=\"{DynamicResource S.Resize.ScalingQuality.Linear}\"/>\n                    <ComboBoxItem Tag=\"{x:Static BitmapScalingMode.NearestNeighbor}\" Content=\"{DynamicResource S.Resize.ScalingQuality.NearestNeighbor}\"/>\n                </ComboBox>\n\n                <!--<n:ExtendedToggleButton Grid.Row=\"0\" Grid.Column=\"3\" Grid.RowSpan=\"2\" Style=\"{StaticResource Style.ToggleButton.NoText}\" Icon=\"{StaticResource Vector.Lock}\"\n                                            ContentWidth=\"15\" ContentHeight=\"15\" Margin=\"3\" ToolTip=\"{DynamicResource S.Resize.KeepAspect}\"/>-->\n            </Grid>\n        </Expander>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/ResizePanel.xaml.cs",
    "content": "using System.Windows.Controls;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class ResizePanel : UserControl\n{\n    public ResizePanel()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/ShadowPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.ShadowPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             xmlns:v=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"400\" d:DesignWidth=\"300\"\n             SnapsToDevicePixels=\"True\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"27\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"27\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Grid.Resources>\n            <v:PercentageToOpacity x:Key=\"PercentageToOpacity\"/>\n        </Grid.Resources>\n\n        <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n        <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.ShadowColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ShadowColorBox\" Margin=\"10,5\" SelectedColor=\"{Binding Color, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" AllowTransparency=\"False\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.BackgroundColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"BackgroundColorBox\" Margin=\"10,5\" SelectedColor=\"{Binding BackgroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" AllowTransparency=\"False\"/>\n\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.BlurRadius}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:DoubleUpDown Grid.Row=\"2\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" Value=\"{Binding BlurRadius, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ValueChanged=\"Properties_ValueChanged\"/>\n\n            <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.Direction}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:DoubleUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"360\" Margin=\"10,5\" Value=\"{Binding Direction, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ValueChanged=\"Properties_ValueChanged\"/>\n            \n            <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Watermark.Opacity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:DoubleUpDown Grid.Row=\"4\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" Value=\"{Binding Opacity, Mode=TwoWay, Converter={StaticResource PercentageToOpacity}, UpdateSourceTrigger=PropertyChanged}\"\n                            ValueChanged=\"Properties_ValueChanged\"/>\n            \n            <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.Depth}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <n:DoubleUpDown Grid.Row=\"5\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" Value=\"{Binding Depth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                            ValueChanged=\"Properties_ValueChanged\"/>\n        </Grid>\n\n        <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Preview}\"/>\n        <Grid Grid.Row=\"3\" x:Name=\"PreviewGrid\" Margin=\"10,5\" Background=\"{Binding BackgroundColor, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ColorToBrush}}\">\n            <Border x:Name=\"PreviewViewBox\" Background=\"{StaticResource Vector.Image}\" Height=\"50\" Width=\"50\">\n                <Border.Effect>\n                    <DropShadowEffect Color=\"{Binding Color, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" \n                                      BlurRadius=\"{Binding BlurRadius, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                      Direction=\"{Binding Direction, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                      Opacity=\"{Binding Opacity, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                      ShadowDepth=\"{Binding Depth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                </Border.Effect>\n            </Border>\n        </Grid>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/ShadowPanel.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.Tasks;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class ShadowPanel : UserControl\n{\n    public ShadowPanel()\n    {\n        InitializeComponent();\n    }\n\n    private void Properties_ValueChanged(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            if (DataContext is not ShadowViewModel model || PreviewViewBox.Width < 0)\n                return;\n\n            //Converts the direction in degrees to radians.\n            var radians = Math.PI / 180.0 * model.Direction;\n            var offsetX = model.Depth * Math.Cos(radians);\n            var offsetY = model.Depth * Math.Sin(radians);\n\n            //Each side can have a different offset based on the direction of the shadow.\n            var offsetLeft = offsetX < 0 ? offsetX * -1 : 0;\n            var offsetTop = offsetY > 0 ? offsetY : 0;\n            var offsetRight = offsetX > 0 ? offsetX : 0;\n            var offsetBottom = offsetY < 0 ? offsetY * -1 : 0;\n\n            //Measure drop shadow space.\n            var marginLeft = offsetLeft > 0 ? offsetLeft + model.BlurRadius / 2d : Math.Max(model.BlurRadius / 2d - offsetLeft, 0); //- offsetX\n            var marginTop = offsetTop > 0 ? offsetTop + model.BlurRadius / 2d : Math.Max(model.BlurRadius / 2d - offsetTop, 0); //- offsetY\n            var marginRight = offsetRight > 0 ? offsetRight + model.BlurRadius / 2d : Math.Max(model.BlurRadius / 2d + offsetRight, 0); //+ offsetX\n            var marginBottom = offsetBottom > 0 ? offsetBottom + model.BlurRadius / 2d : Math.Max(model.BlurRadius / 2d + offsetBottom, 0); //+ offsetY\n\n            PreviewGrid.Width = marginLeft + PreviewViewBox.Width + marginRight;\n            PreviewGrid.Height = Math.Round(marginTop + PreviewViewBox.Height + marginBottom, 0);\n\n            PreviewGrid.InvalidateVisual();\n            PreviewViewBox.InvalidateProperty(EffectProperty);\n\n            //PreviewGrid.Width = left + totalWidth;\n            //PreviewGrid.Height = top + totalHeight;\n            //PreviewGrid.Margin = new Thickness(left, top, 0, 0);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to measure dropshadow size for the shadow task.\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/UserControls/YandexPanel.xaml",
    "content": "<UserControl x:Class=\"ScreenToGif.UserControls.YandexPanel\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n             xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n             mc:Ignorable=\"d\" d:DesignHeight=\"500\" d:DesignWidth=\"320\"\n             x:Name=\"ThisPanel\" Loaded=\"YandexPanel_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <n:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n        <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Options.Upload.Preset.Details}\" IsExpanded=\"True\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Name}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"NameTextBox\" Text=\"{Binding Title}\" Margin=\"5,3\" MaxLength=\"50\" IsObligatory=\"True\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Preset.Description}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                <n:ExtendedTextBox Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{Binding Description}\" MinHeight=\"23\" Margin=\"5,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\" MaxLength=\"100\"/>\n            </Grid>\n        </Expander>\n\n        <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Options.Upload.Preset.Authorization}\" IsExpanded=\"True\">\n            <Grid Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Margin=\"3\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                    <Hyperlink NavigateUri=\"www.yandex.com\" RequestNavigate=\"TokenHyperlink_RequestNavigate\">\n                        <Run Text=\"{DynamicResource S.Options.Upload.Preset.GetToken}\"/>\n                    </Hyperlink>\n                </TextBlock>\n\n                <Border Grid.Row=\"1\" Height=\"10\" Background=\"{StaticResource Vector.Arrow.Blue.Bottom}\" Margin=\"3\"/>\n\n                <n:ExtendedTextBox Grid.Row=\"2\" x:Name=\"TokenTextBox\" Text=\"{Binding OAuthToken}\" Margin=\"5,3\" TextWrapping=\"Wrap\" \n                                   Watermark=\"{DynamicResource S.Options.Upload.Preset.Token}\" HorizontalContentAlignment=\"Center\" IsObligatory=\"True\"/>\n            </Grid>\n        </Expander>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "ScreenToGif/UserControls/YandexPanel.xaml.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing ScreenToGif.Cloud;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.ViewModel.UploadPresets.Yandex;\n\nnamespace ScreenToGif.UserControls;\n\npublic partial class YandexPanel : UserControl, IPanel\n{\n    private string _originalTitle = \"\";\n\n    public YandexPanel()\n    {\n        InitializeComponent();\n    }\n\n    private void YandexPanel_Loaded(object sender, RoutedEventArgs e)\n    {\n        _originalTitle = NameTextBox.Text.Trim();\n\n        NameTextBox.Focus();\n    }\n        \n    private void TokenHyperlink_RequestNavigate(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            StatusBand.Hide();\n            ProcessHelper.StartWithShell(YandexDisk.GetAuthorizationAdress());\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Creating the link and opening a Yandex Disk related page.\");\n            StatusBand.Error(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.GetToken\"));\n        }\n    }\n\n\n    public Task<bool> IsValid()\n    {\n        if (DataContext is not YandexPreset preset)\n            return Task.FromResult(false);\n\n        if (string.IsNullOrWhiteSpace(preset.Title))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Title\"));\n            NameTextBox.Focus();\n            return Task.FromResult(false);\n        }\n\n        if (UserSettings.All.UploadPresets.OfType<UploadPreset>().Any(a => a.Title != _originalTitle && a.Title == preset.Title.Trim()))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Repeated\"));\n            NameTextBox.Focus();\n            return Task.FromResult(false);\n        }\n\n        if (string.IsNullOrWhiteSpace(preset.OAuthToken))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Options.Upload.Preset.Warning.Token\"));\n            TokenTextBox.Focus();\n            return Task.FromResult(false);\n        }\n\n        return Task.FromResult(true);\n    }\n\n    public UploadPreset GetPreset()\n    {\n        return DataContext as YandexPreset;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/ActionStack.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Do, Undo, Redo stack.\n/// </summary>\npublic static class ActionStack\n{\n    #region Variables\n\n    public static ProjectInfo Project { get; set; }\n\n    private static readonly ExtendedStack<StateChange> UndoStack = new();\n    private static readonly ExtendedStack<StateChange> RedoStack = new();\n\n    #endregion\n\n    public enum EditAction\n    {\n        Remove,\n        ImageAndProperties,\n        Properties,\n        Add,\n        Reorder,\n        RemoveAndAlter,\n        AddAndAlter,\n    }\n\n    public class StateChange\n    {\n        public EditAction Cause { get; set; }\n        public List<FrameInfo> Frames { get; set; }\n        public string CurrentFolder { get; set; }\n\n        public List<int> Indexes { get; set; }\n        public List<int> Indexes2 { get; set; }\n\n        /// <summary>\n        /// Signals that this state should not be available.\n        /// </summary>\n        public bool IgnoreWhenReset { get; set; }\n    }\n\n    #region Save State\n\n    public static void SaveState(EditAction action, List<FrameInfo> frames, List<int> positions)\n    {\n        if (!ShouldSaveState())\n            return;\n\n        var orderedPositions = positions.OrderBy(x => x).ToList();\n        var savedFrames = new List<FrameInfo>();\n        var currentFolder = CreateCurrent(true);\n\n        switch (action)\n        {\n            case EditAction.Remove:\n\n                //Saves the frames that will be deleted (using the given list of positions).\n                foreach (var position in orderedPositions)\n                {\n                    var frame = frames[position];\n                    var savedFrame = Path.Combine(currentFolder, Path.GetFileName(frame.Path)); // position + \".png\");\n\n                    //Copy to a folder.\n                    File.Copy(frame.Path, savedFrame);\n\n                    savedFrames.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                //Create a StageChange object with the saved frames and push to the undo stack.\n                UndoStack.Push(new StateChange\n                {\n                    Cause = action,\n                    Frames = savedFrames,\n                    CurrentFolder = currentFolder,\n                    Indexes = orderedPositions\n                });\n\n                break;\n            case EditAction.ImageAndProperties:\n\n                //Saves the frames that will be altered (using the given list of positions).\n                foreach (var position in orderedPositions)\n                {\n                    var frame = frames[position];\n                    var savedFrame = Path.Combine(currentFolder, Path.GetFileName(frame.Path)); // position + \".png\");\n\n                    //Copy to a folder.\n                    File.Copy(frame.Path, savedFrame);\n\n                    savedFrames.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                //Create a StageChange object with the saved frames and push to the undo stack.\n                UndoStack.Push(new StateChange\n                {\n                    Cause = action,\n                    Frames = savedFrames,\n                    CurrentFolder = currentFolder,\n                    Indexes = orderedPositions\n                });\n\n                break;\n            case EditAction.Properties:\n\n                //Saves the frames that will be altered, without copying the images (using the given list of positions).\n                foreach (var position in orderedPositions)\n                {\n                    var frame = frames[position];\n\n                    savedFrames.Add(new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                //Create a StageChange object with the saved frames and push to the undo stack.\n                UndoStack.Push(new StateChange\n                {\n                    Cause = action,\n                    Frames = savedFrames,\n                    Indexes = orderedPositions\n                });\n\n                break;\n            default:\n                throw new ArgumentOutOfRangeException(nameof(action), action, null);\n        }\n\n        ClearRedo();\n        TrimUndo();\n    }\n\n    public static void SaveState(EditAction action, List<FrameInfo> frames, List<int> removeList, List<int> alterList)\n    {\n        if (action != EditAction.RemoveAndAlter)\n            throw new ArgumentException(\"Parameters different than RemoveAndAlter are not supported.\", nameof(action));\n\n        if (!ShouldSaveState())\n            return;\n\n        var savedFrames = new List<FrameInfo>();\n        var currentFolder = CreateCurrent(true);\n\n        #region Removed\n\n        //Saves the frames that will be deleted (using the given list of positions).\n        foreach (var position in removeList)\n        {\n            var frame = frames[position];\n            var savedFrame = Path.Combine(currentFolder, Path.GetFileName(frame.Path));\n\n            //Copy to a folder.\n            File.Copy(frame.Path, savedFrame);\n\n            savedFrames.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n        }\n\n        #endregion\n\n        #region Altered\n\n        //Saves the frames that will be altered, without copying the images (using the given list of positions).\n        foreach (var position in alterList)\n        {\n            var frame = frames[position];\n\n            savedFrames.Add(new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n        }\n\n        #endregion\n\n        UndoStack.Push(new StateChange\n        {\n            Cause = action,\n            Frames = savedFrames,\n            CurrentFolder = currentFolder, //Ignore this property when frame is set as \"Altered\".\n            Indexes = removeList,\n            Indexes2 = alterList,\n        });\n\n        ClearRedo();\n        TrimUndo();\n    }\n\n    /// <summary>\n    /// Save the state of the list of frames. This overload is used by the EditAction.Add.\n    /// </summary>\n    /// <param name=\"action\">The action, currently just the Add.</param>\n    /// <param name=\"position\">The position where the frames will be inserted.</param>\n    /// <param name=\"quantity\">The quantity of inserted frames.</param>\n    public static void SaveState(EditAction action, int position, int quantity)\n    {\n        if (action != EditAction.Add)\n            throw new ArgumentException(\"Parameters different than Add are not supported.\", nameof(action));\n\n        if (!ShouldSaveState())\n            return;\n\n        //Saves the position where the new frames will be inserted.\n        UndoStack.Push(new StateChange\n        {\n            Cause = action,\n            Indexes = Util.Other.ListOfIndexes(position, quantity)\n        });\n\n        ClearRedo();\n        TrimUndo();\n    }\n\n    /// <summary>\n    /// Save the state of the list of frames. This overload is used by the EditAction.Reorder.\n    /// </summary>\n    /// <param name=\"action\">The action, currently just the Reorder.</param>\n    /// <param name=\"frames\">The old (current) list of frames.</param>\n    public static void SaveState(EditAction action, List<FrameInfo> frames)\n    {\n        if (action != EditAction.Reorder)\n            throw new ArgumentException(\"Parameters different than Reorder are not supported.\", nameof(action));\n\n        if (!ShouldSaveState())\n            return;\n\n        //Saves the frames before the reordering.\n        UndoStack.Push(new StateChange\n        {\n            Cause = action,\n            Frames = frames,\n        });\n\n        ClearRedo();\n        TrimUndo();\n    }\n\n    #endregion\n\n    #region Actions\n\n    public static List<FrameInfo> Undo(List<FrameInfo> current, bool pushToRedo = true)\n    {\n        //Pop from Undo stack.\n        var latestUndo = UndoStack.Pop();\n\n        #region Push into Redo stack\n\n        if (pushToRedo)\n        {\n            var redoStateChange = new StateChange();\n\n            //To redo the action, it should be saved as the inverse of the current undo.\n            switch (latestUndo.Cause)\n            {\n                case EditAction.Remove:\n\n                    #region Add (Inverse)\n\n                    redoStateChange.Cause = EditAction.Add;\n                    redoStateChange.Indexes = new List<int>(latestUndo.Indexes);\n\n                    #endregion\n\n                    break;\n                case EditAction.Add:\n\n                    #region Remove (Inverse)\n\n                    var savedFrames = new List<FrameInfo>();\n                    var redoFolder = CreateCurrent(false);\n\n                    redoStateChange.Cause = EditAction.Remove;\n                    redoStateChange.Indexes = new List<int>(latestUndo.Indexes);\n\n                    //Saves the frames that will be deleted (using the given list of positions).\n                    foreach (var position in latestUndo.Indexes)\n                    {\n                        var frame = current[position];\n                        var savedFrame = Path.Combine(redoFolder, Path.GetFileName(frame.Path));\n\n                        //Copy to a folder.\n                        File.Copy(frame.Path, savedFrame);\n\n                        savedFrames.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                    }\n\n                    redoStateChange.Frames = savedFrames;\n\n                    #endregion\n\n                    break;\n                case EditAction.ImageAndProperties:\n\n                    #region Alter the images and properties (Inverse)\n\n                    var savedFrames2 = new List<FrameInfo>();\n                    var redoFolder2 = CreateCurrent(false);\n\n                    redoStateChange.Cause = EditAction.ImageAndProperties;\n                    redoStateChange.Indexes = latestUndo.Indexes;\n\n                    //Saves the frames that will be deleted (using the given list of positions).\n                    foreach (var position in latestUndo.Indexes)\n                    {\n                        var frame = current[position];\n                        var savedFrame = Path.Combine(redoFolder2, Path.GetFileName(frame.Path));\n\n                        //Copy to a folder.\n                        File.Copy(frame.Path, savedFrame);\n\n                        savedFrames2.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                    }\n\n                    redoStateChange.Frames = savedFrames2;\n\n                    #endregion\n\n                    break;\n                case EditAction.Properties:\n\n                    #region Alter the properties (Inverse)\n\n                    redoStateChange.Cause = EditAction.Properties;\n                    redoStateChange.Frames = new List<FrameInfo>(latestUndo.Frames);\n                    redoStateChange.Indexes = new List<int>(latestUndo.Indexes);\n\n                    #endregion\n\n                    break;\n                case EditAction.Reorder:\n\n                    #region Reorder (Inverse)\n\n                    redoStateChange.Cause = EditAction.Reorder;\n                    redoStateChange.Frames = current.CopyList();\n\n                    #endregion\n\n                    break;\n                case EditAction.RemoveAndAlter:\n\n                    #region Add and alter the properties (Inverse)\n\n                    redoStateChange.Cause = EditAction.AddAndAlter;\n                    //Save only the altered frames.\n                    redoStateChange.Frames = new List<FrameInfo>(latestUndo.Frames).Skip(latestUndo.Indexes.Count).Take(latestUndo.Indexes2.Count).ToList();\n                    redoStateChange.Indexes = new List<int>(latestUndo.Indexes);\n                    redoStateChange.Indexes2 = new List<int>(latestUndo.Indexes2);\n\n                    #endregion\n\n                    break;\n\n                case EditAction.AddAndAlter: //Check.\n\n                    #region Remove and alter the properties (Inverse)\n\n                    var savedFrames3 = new List<FrameInfo>();\n                    var redoFolder3 = CreateCurrent(false);\n\n                    redoStateChange.Cause = EditAction.RemoveAndAlter;\n                    redoStateChange.Indexes = new List<int>(latestUndo.Indexes);\n                    redoStateChange.Indexes2 = new List<int>(latestUndo.Indexes2);\n\n                    //Saves the frames that will be deleted (using the given list of positions).\n                    foreach (var position in latestUndo.Indexes)\n                    {\n                        var frame = current[position];\n                        var savedFrame = Path.Combine(redoFolder3, Path.GetFileName(frame.Path));\n\n                        //Copy to a folder.\n                        File.Copy(frame.Path, savedFrame);\n\n                        savedFrames3.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                    }\n\n                    //Saves the altered frames, without saving the images.\n                    foreach (var position in latestUndo.Indexes2)\n                    {\n                        var frame = current[position];\n                        savedFrames3.Add(new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                    }\n\n                    redoStateChange.Frames = savedFrames3;\n\n                    #endregion\n\n                    break;\n            }\n\n            RedoStack.Push(redoStateChange);\n        }\n\n        #endregion\n\n        #region Undo\n\n        switch (latestUndo.Cause)\n        {\n            case EditAction.Remove:\n\n                #region Insert again the frames\n\n                if (latestUndo.Frames == null || latestUndo.Frames.Count == 0)\n                    throw new Exception(\"No frames to undo.\");\n\n                var folder = Path.GetDirectoryName(current[0].Path);\n\n                var currentIndex = 0;\n                foreach (var index in latestUndo.Indexes)\n                {\n                    var frame = latestUndo.Frames[currentIndex];\n                    var file = Path.Combine(folder, Path.GetFileName(frame.Path));\n\n                    //Copy file to folder.\n                    File.Copy(frame.Path, file);\n\n                    //Add to list.\n                    current.Insert(index, new FrameInfo(file, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n\n                    currentIndex++;\n                }\n\n                //Erase the undo folder.\n                Directory.Delete(Path.GetDirectoryName(latestUndo.Frames[0].Path), true);\n\n                #endregion\n\n                break;\n            case EditAction.ImageAndProperties:\n\n                #region Alter the image and properties\n\n                if (latestUndo.Frames == null || latestUndo.Frames.Count == 0)\n                    throw new Exception(\"No frames to redo.\");\n\n                var alteredIndex2 = 0;\n                foreach (var frame in latestUndo.Frames)\n                {\n                    //Get the current frame before or after returning the properties values?\n                    var currentFrame = current[latestUndo.Indexes[alteredIndex2]];\n\n                    current[latestUndo.Indexes[alteredIndex2]] = new FrameInfo(currentFrame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index); //Image location stays the same.\n\n                    //Copy file to folder.\n                    File.Copy(frame.Path, currentFrame.Path, true);\n\n                    alteredIndex2++;\n                }\n\n                //Erase the undo folder.\n                Directory.Delete(Path.GetDirectoryName(latestUndo.Frames[0].Path), true);\n\n                #endregion\n\n                break;\n            case EditAction.Properties:\n\n                #region Alter the properties\n\n                if (latestUndo.Frames == null || latestUndo.Frames.Count == 0)\n                    throw new Exception(\"No frames to undo.\");\n\n                var alteredIndex = 0;\n                foreach (var frame in latestUndo.Frames)\n                {\n                    current[latestUndo.Indexes[alteredIndex]] = new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index);\n\n                    alteredIndex++;\n                }\n\n                #endregion\n\n                break;\n            case EditAction.Add:\n\n                #region Remove the added frames\n\n                foreach (var index in latestUndo.Indexes.OrderByDescending(x => x))\n                {\n                    File.Delete(current[index].Path);\n\n                    current.RemoveAt(index);\n                }\n\n                #endregion\n\n                break;\n            case EditAction.Reorder:\n\n                #region Reorder the frames to a previous order\n\n                current = latestUndo.Frames.CopyList();\n\n                #endregion\n\n                break;\n            case EditAction.AddAndAlter: //Check.\n\n                #region Remove the added frames and alter the properties\n\n                for (var i = latestUndo.Indexes.Count -1; i >= 0; i--)\n                {\n                    var removeIndex = latestUndo.Indexes[i];\n\n                    //Alter the properties.\n                    if (removeIndex > 0)\n                        current[removeIndex - 1].Delay = current[removeIndex].Delay;\n\n                    //Remove the file.\n                    File.Delete(current[removeIndex].Path);\n                    current.RemoveAt(removeIndex);\n                }\n\n                #endregion\n\n                break;\n            case EditAction.RemoveAndAlter:\n\n                #region Insert again the frames\n\n                if (latestUndo.Frames == null || latestUndo.Frames.Count == 0)\n                    throw new Exception(\"No frames to undo.\");\n\n                var folder2 = Path.GetDirectoryName(current[0].Path);\n\n                var currentIndex2 = 0;\n                foreach (var index in latestUndo.Indexes)\n                {\n                    var frame = latestUndo.Frames[currentIndex2];\n                    var file = Path.Combine(folder2, Path.GetFileName(frame.Path));\n\n                    //Copy file to folder.\n                    File.Copy(frame.Path, file);\n\n                    //Add to list.\n                    current.Insert(index, new FrameInfo(file, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n\n                    currentIndex2++;\n                }\n\n                //Erase the undo folder.\n                Directory.Delete(Path.GetDirectoryName(latestUndo.Frames[0].Path), true);\n\n                #endregion\n\n                #region Alter the properties\n\n                var alteredIndex3 = 0;\n                foreach (var frame in latestUndo.Frames.Skip(latestUndo.Indexes.Count))\n                {\n                    current[latestUndo.Indexes2[alteredIndex3]] = new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index);\n\n                    alteredIndex3++;\n                }\n\n                #endregion\n\n                break;\n            default:\n                throw new ArgumentOutOfRangeException();\n        }\n\n        #endregion\n\n        GC.Collect();\n\n        return current;\n    }\n\n    public static List<FrameInfo> Redo(List<FrameInfo> current)\n    {\n        //Pop from Redo stack.\n        var latestRedo = RedoStack.Pop();\n\n        #region Push into Undo stack\n\n        var undoStateChange = new StateChange();\n\n        switch (latestRedo.Cause)\n        {\n            case EditAction.Remove:\n\n                #region Add (Inverse)\n\n                undoStateChange.Cause = EditAction.Add;\n                undoStateChange.Indexes = new List<int>(latestRedo.Indexes);\n\n                #endregion\n\n                break;\n            case EditAction.Add:\n\n                #region Remove (Inverse)\n\n                var savedFrames = new List<FrameInfo>();\n                var redoFolder = CreateCurrent(true);\n\n                undoStateChange.Cause = EditAction.Remove;\n                undoStateChange.Indexes = new List<int>(latestRedo.Indexes);\n\n                //Saves the frames that will be deleted (using the given list of positions).\n                foreach (var position in latestRedo.Indexes)\n                {\n                    var frame = current[position];\n                    var savedFrame = Path.Combine(redoFolder, Path.GetFileName(frame.Path));\n\n                    //Copy to a folder.\n                    File.Copy(frame.Path, savedFrame);\n\n                    savedFrames.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                undoStateChange.Frames = savedFrames;\n\n                #endregion\n\n                break;\n            case EditAction.ImageAndProperties:\n\n                #region Alter the images and properties (Inverse)\n\n                var savedFrames2 = new List<FrameInfo>();\n                var redoFolder2 = CreateCurrent(false);\n\n                undoStateChange.Cause = EditAction.ImageAndProperties;\n                undoStateChange.Indexes = new List<int>(latestRedo.Indexes);\n\n                //Saves the frames that will be deleted (using the given list of positions).\n                foreach (var position in latestRedo.Indexes)\n                {\n                    var frame = current[position];\n                    var savedFrame = Path.Combine(redoFolder2, Path.GetFileName(frame.Path));\n\n                    //Copy to a folder.\n                    File.Copy(frame.Path, savedFrame);\n\n                    savedFrames2.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                undoStateChange.Frames = savedFrames2;\n\n                #endregion\n\n                break;\n            case EditAction.Properties:\n\n                #region Alter the properties (Inverse)\n\n                undoStateChange.Cause = EditAction.Properties;\n                undoStateChange.Frames = new List<FrameInfo>(latestRedo.Frames);\n                undoStateChange.Indexes = new List<int>(latestRedo.Indexes);\n\n                #endregion\n\n                break;\n\n            case EditAction.Reorder:\n\n                #region Reorder (Inverse)\n\n                undoStateChange.Cause = EditAction.Reorder;\n                undoStateChange.Frames = current.CopyList();\n\n                #endregion\n\n                break;\n\n            case EditAction.RemoveAndAlter:\n\n                #region Add and alter the properties (Inverse)\n\n                undoStateChange.Cause = EditAction.AddAndAlter;\n                //Save only the altered frames.\n                undoStateChange.Frames = new List<FrameInfo>(latestRedo.Frames).Skip(latestRedo.Indexes.Count).Take(latestRedo.Indexes2.Count).ToList();\n                undoStateChange.Indexes = new List<int>(latestRedo.Indexes);\n                undoStateChange.Indexes2 = new List<int>(latestRedo.Indexes2);\n\n                #endregion\n\n                break;\n\n            case EditAction.AddAndAlter: //Check.\n\n                #region Remove and alter the properties (Inverse)\n\n                var savedFrames3 = new List<FrameInfo>();\n                var redoFolder3 = CreateCurrent(false);\n\n                undoStateChange.Cause = EditAction.RemoveAndAlter;\n                undoStateChange.Indexes = new List<int>(latestRedo.Indexes);\n                undoStateChange.Indexes2 = new List<int>(latestRedo.Indexes2);\n\n                //Saves the frames that will be deleted (using the given list of positions).\n                foreach (var position in latestRedo.Indexes)\n                {\n                    var frame = current[position];\n                    var savedFrame = Path.Combine(redoFolder3, Path.GetFileName(frame.Path));\n\n                    //Copy to a folder.\n                    File.Copy(frame.Path, savedFrame);\n\n                    savedFrames3.Add(new FrameInfo(savedFrame, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                //Saves the altered frames, without saving the images.\n                foreach (var position in latestRedo.Indexes2)\n                {\n                    var frame = current[position];\n                    savedFrames3.Add(new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n                }\n\n                undoStateChange.Frames = savedFrames3;\n\n                #endregion\n\n                break;\n        }\n\n        UndoStack.Push(undoStateChange);\n\n        #endregion\n\n        #region Redo\n\n        switch (latestRedo.Cause)\n        {\n            case EditAction.Remove:\n\n                #region Insert again the frames\n\n                if (latestRedo.Frames == null || latestRedo.Frames.Count == 0)\n                    throw new Exception(\"No frames to redo.\");\n\n                var folder = Path.GetDirectoryName(current[0].Path);\n\n                var currentIndex = 0;\n                foreach (var index in latestRedo.Indexes)\n                {\n                    var frame = latestRedo.Frames[currentIndex];\n                    var file = Path.Combine(folder, Path.GetFileName(frame.Path));\n\n                    //Copy file to folder.\n                    File.Copy(frame.Path, file);\n\n                    //Add to list.\n                    current.Insert(index, new FrameInfo(file, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n\n                    currentIndex++;\n                }\n\n                //Erase the redo folder.\n                Directory.Delete(Path.GetDirectoryName(latestRedo.Frames[0].Path), true);\n\n                #endregion\n\n                break;\n            case EditAction.ImageAndProperties:\n\n                #region Alter the image\n\n                if (latestRedo.Frames == null || latestRedo.Frames.Count == 0)\n                    throw new Exception(\"No frames to redo.\");\n\n                var folder2 = Path.GetDirectoryName(current[0].Path);\n\n                foreach (var frame in latestRedo.Frames)\n                {\n                    var file = Path.Combine(folder2, Path.GetFileName(frame.Path));\n\n                    //Copy file to folder.\n                    File.Copy(frame.Path, file, true);\n                }\n\n                //Erase the undo folder.\n                Directory.Delete(Path.GetDirectoryName(latestRedo.Frames[0].Path), true);\n\n                #endregion\n\n                break;\n            case EditAction.Properties:\n\n                #region Alter the properties\n\n                if (latestRedo.Frames == null || latestRedo.Frames.Count == 0)\n                    throw new Exception(\"No frames to redo.\");\n\n                var alteredIndex = 0;\n                foreach (var frame in latestRedo.Frames)\n                {\n                    current[latestRedo.Indexes[alteredIndex]] = new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index);\n\n                    alteredIndex++;\n                }\n\n                #endregion\n\n                break;\n            case EditAction.Add:\n\n                #region Remove the added frames\n\n                foreach (var index in latestRedo.Indexes.OrderByDescending(x => x))\n                {\n                    File.Delete(current[index].Path);\n\n                    current.RemoveAt(index);\n                }\n\n                #endregion\n\n                break;\n            case EditAction.Reorder:\n\n                #region Reorder the frames to a previous order\n\n                current = latestRedo.Frames.CopyList();\n\n                #endregion\n\n                break;\n\n            case EditAction.AddAndAlter: //Check.\n\n                #region Remove the added frames and alter the properties\n\n                for (var i = latestRedo.Indexes.Count - 1; i >= 0; i--)\n                {\n                    var removeIndex = latestRedo.Indexes[i];\n\n                    //Alter the properties.\n                    if (removeIndex > 0)\n                        current[removeIndex - 1].Delay += current[removeIndex].Delay;\n\n                    //Remove the file.\n                    File.Delete(current[removeIndex].Path);\n                    current.RemoveAt(removeIndex);\n                }\n\n                #endregion\n\n                break;\n            case EditAction.RemoveAndAlter:\n\n                #region Insert again the frames\n\n                if (latestRedo.Frames == null || latestRedo.Frames.Count == 0)\n                    throw new Exception(\"No frames to redo.\");\n\n                var folder3 = Path.GetDirectoryName(current[0].Path);\n\n                var currentIndex2 = 0;\n                foreach (var index in latestRedo.Indexes)\n                {\n                    var frame = latestRedo.Frames[currentIndex2];\n                    var file = Path.Combine(folder3, Path.GetFileName(frame.Path));\n\n                    //Copy file to folder.\n                    File.Copy(frame.Path, file);\n\n                    //Add to list.\n                    current.Insert(index, new FrameInfo(file, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n\n                    currentIndex2++;\n                }\n\n                //Erase the undo folder.\n                Directory.Delete(Path.GetDirectoryName(latestRedo.Frames[0].Path), true);\n\n                #endregion\n\n                #region Alter the properties\n\n                var alteredIndex3 = 0;\n                foreach (var frame in latestRedo.Frames.Skip(latestRedo.Indexes.Count))\n                {\n                    current[latestRedo.Indexes2[alteredIndex3]] = new FrameInfo(frame.Path, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index);\n\n                    alteredIndex3++;\n                }\n\n                #endregion\n\n                break;\n        }\n\n        #endregion\n\n        GC.Collect();\n\n        return current;\n    }\n\n    public static List<FrameInfo> Reset(List<FrameInfo> current)\n    {\n        //TODO: Save the current state before resetting all.\n        //Signal that it was reset.\n\n        var count = UndoStack.Count;\n\n        //Pop all iteration from Undo stack\n        for (var i = 0; i < count; i++)\n            current = Undo(current, false);\n\n        ClearUndo();\n        ClearRedo();\n\n        return current;\n    }\n\n    #endregion\n\n    #region Auxiliary\n\n    /// <summary>\n    ///Creates the destination folder where the frames will be stored.\n    /// </summary>\n    private static string CreateCurrent(bool isUndo)\n    {\n        var folder = Path.Combine(isUndo ? Project.UndoStackPath : Project.RedoStackPath, DateTime.Now.ToString(\"yy-MM-dd hh-mm-ss fff\"));\n\n        if (!Directory.Exists(folder))\n            Directory.CreateDirectory(folder);\n\n        return folder;\n    }\n\n\n    /// <summary>\n    /// Clear the Action Stack.\n    /// </summary>\n    public static void Clear()\n    {\n        ClearUndo();\n        ClearRedo();\n    }\n\n    private static void ClearUndo()\n    {\n        try\n        {\n            foreach (var frame in UndoStack.Where(x => x.Frames != null)\n                         .SelectMany(list => list.Frames.Where(frame => frame.Path != null && File.Exists(frame.Path) && frame.Path.Contains(\"ActionStack\" + Path.DirectorySeparatorChar + \"Undo\"))))\n            {\n                File.Delete(frame.Path);\n            }\n        }\n        finally\n        {\n            UndoStack.Clear();\n        }\n    }\n\n    private static void ClearRedo()\n    {\n        try\n        {\n            foreach (var frame in RedoStack.Where(x => x.Frames != null)\n                         .SelectMany(list => list.Frames.Where(frame => frame.Path != null && File.Exists(frame.Path) && frame.Path.Contains(\"ActionStack\" + Path.DirectorySeparatorChar + \"Redo\"))))\n            {\n                File.Delete(frame.Path);\n            }\n        }\n        finally\n        {\n            RedoStack.Clear();\n        }\n    }\n\n    private static void TrimUndo()\n    {\n        if (!UserSettings.All.SetHistoryLimit)\n            return;\n\n        if (UndoStack.Count <= UserSettings.All.HistoryLimit)\n            return;\n\n        try\n        {\n            for (var i = UserSettings.All.HistoryLimit; i < UndoStack.Count; i++)\n            {\n                var last = UndoStack.PopBottom();\n\n                if (last?.Frames == null)\n                    continue;\n\n                foreach (var frame in last.Frames.Where(frame => frame.Path != null && File.Exists(frame.Path) && frame.Path.Contains(\"ActionStack\" + Path.DirectorySeparatorChar + \"Undo\")))\n                    File.Delete(frame.Path);\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to trim the undo stack.\");\n        }\n    }\n\n\n    public static bool ShouldSaveState()\n    {\n        return !UserSettings.All.SetHistoryLimit || UserSettings.All.HistoryLimit > 0;\n    }\n\n    /// <summary>\n    /// Verifies if the Undo stack has elements and nothing else is happening.\n    /// </summary>\n    /// <returns>True if able to Undo.</returns>\n    public static bool CanUndo()\n    {\n        return UndoStack.Count > 0;\n    }\n\n    /// <summary>\n    /// Verifies if the Redo stack has elements and nothing else is happening.\n    /// </summary>\n    /// <returns>True if able to Redo.</returns>\n    public static bool CanRedo()\n    {\n        return RedoStack.Count > 0;\n    }\n\n    /// <summary>\n    /// Verifies if it's possible to reset.\n    /// </summary>\n    /// <returns>True if able to Reset.</returns>\n    public static bool CanReset()\n    {\n        //Can only reset if there's one or more state changes that won't be ignored.\n        return UndoStack.Count > 0 || (UndoStack.Count == 1 && UndoStack.All(x => !x.IgnoreWhenReset));\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Util/BrushAnimation.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\n\nnamespace ScreenToGif.Util;\n\npublic class BrushAnimation : AnimationTimeline\n{\n    #region Properties\n\n    public static readonly DependencyProperty FromProperty = DependencyProperty.Register(nameof(From), typeof(Brush), typeof(BrushAnimation), new PropertyMetadata(new SolidColorBrush()));\n    public static readonly DependencyProperty ToProperty = DependencyProperty.Register(nameof(To), typeof(Brush), typeof(BrushAnimation), new PropertyMetadata(new SolidColorBrush()));\n\n    public Brush From\n    {\n        get => (Brush)GetValue(FromProperty);\n        set => SetValue(FromProperty, value);\n    }\n\n    public Brush To\n    {\n        get => (Brush)GetValue(ToProperty);\n        set => SetValue(ToProperty, value);\n    }\n\n    #endregion\n        \n    public override Type TargetPropertyType => typeof(Brush);\n\n    protected override Freezable CreateInstanceCore()\n    {\n        return new BrushAnimation();\n    }\n        \n    public override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock)\n    {\n        //To solid color.\n        if (To is SolidColorBrush solidTo)\n        {\n            if (From is LinearGradientBrush linear)\n            {\n                var newLinear = new LinearGradientBrush();\n\n                foreach (var stop in linear.GradientStops)\n                {\n                    var animation = new ColorAnimation(stop.Color, solidTo.Color, Duration);\n                    var color = animation.GetCurrentValue(stop.Color, solidTo.Color, animationClock);\n\n                    newLinear.GradientStops.Add(new GradientStop(color, stop.Offset));\n                }\n\n                return newLinear;\n            }\n\n            if (From is SolidColorBrush solid)\n            {\n                var newsolid = new SolidColorBrush();\n                var solidAnimation = new ColorAnimation(solid.Color, solidTo.Color, Duration);\n                    \n                newsolid.Color = solidAnimation.GetCurrentValue(solid.Color, solidTo.Color, animationClock);\n\n                return newsolid;\n            }\n        }\n\n        //To linear color.\n        if (To is LinearGradientBrush linearTo)\n        {\n                \n        }\n\n        return defaultDestinationValue;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/ClipBoard.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing ScreenToGif.Model;\n\nnamespace ScreenToGif.Util;\n\npublic static class Clipboard\n{\n    #region Properties\n\n    private static string Folder { get; set; }\n\n    private static string CurrentFolder { get; set; }\n\n    public static List<List<FrameInfo>> Items { get; private set; } = new();\n\n    #endregion\n\n    #region Public Methods\n\n    /// <summary>\n    /// Copies the selected frames to a Clipboard folder.\n    /// </summary>\n    /// <param name=\"target\">The selected frames.</param>\n    /// <returns>The selected copied frames.</returns>\n    public static bool Copy(List<FrameInfo> target)\n    {\n        try\n        {\n            PrepareCurrent(target[0].Path);\n\n            var newList = new List<FrameInfo>();\n\n            foreach (var frameInfo in target)\n            {\n                //Changes the path of the image.\n                var filename = Path.Combine(CurrentFolder, Path.GetFileName(frameInfo.Path));\n\n                //Copy the image to the folder.\n                File.Copy(frameInfo.Path, filename, true);\n\n                //Create the new object and add to the list.\n                newList.Add(new FrameInfo(filename, frameInfo.Delay, frameInfo.CursorX, frameInfo.CursorY, frameInfo.ButtonClicked, frameInfo.KeyList, frameInfo.Index));\n            }\n\n            //Adds the current copied list to the clipboard.\n            Items.Add(newList);\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Copy to Clipboard\");\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Cuts the selected frames to a Clipboard folder.\n    /// </summary>\n    /// <param name=\"target\">The selected frames.</param>\n    /// <returns>The selected cut frames.</returns>\n    public static bool Cut(List<FrameInfo> target)\n    {\n        try\n        {\n            PrepareCurrent(target[0].Path);\n\n            var newList = new List<FrameInfo>();\n\n            foreach (var frameInfo in target)\n            {\n                //Changes the path of the image.\n                var filename = Path.Combine(CurrentFolder, Path.GetFileName(frameInfo.Path));\n\n                //Copy the image to the folder.\n                File.Copy(frameInfo.Path, filename, true);\n                File.Delete(frameInfo.Path);\n\n                //Create the new object and add to the list.\n                newList.Add(new FrameInfo(filename, frameInfo.Delay, frameInfo.CursorX, frameInfo.CursorY, frameInfo.ButtonClicked, frameInfo.KeyList, frameInfo.Index));\n            }\n\n            //Adds the current cut list to the clipboard.\n            Items.Add(newList);\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Cut to Clipboard\");\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Copies the selected frames to a Clipboard folder.\n    /// </summary>\n    /// <returns>The selected copied/cut frames.</returns>\n    public static List<FrameInfo> Paste(string location, int index, int pasteIndex)\n    {\n        var newList = new List<FrameInfo>();\n        //var recordingFolder = Path.GetDirectoryName(Items[index][0].Path);\n        var recordingFolder = Path.GetDirectoryName(location);\n\n        foreach (var frameInfo in Items[index])\n        {\n            //Changes the path of the image.\n            var filename = GetUniqueFilename(recordingFolder, \"P\");\n            //var filename = Path.Combine(recordingFolder, $\"{pasteIndex} - {Path.GetFileNameWithoutExtension(frameInfo.Path)} {DateTime.Now:hh-mm-ss-ffff}.png\");\n\n            //Copy the image to the folder.\n            File.Copy(frameInfo.Path, filename, true);\n\n            //Create the new object and add to the list.\n            newList.Add(new FrameInfo(filename, frameInfo.Delay, frameInfo.CursorX, frameInfo.CursorY, frameInfo.ButtonClicked, frameInfo.KeyList, frameInfo.Index));\n        }\n\n        return newList;\n    }\n\n    /// <summary>\n    /// Removes the item from the clipboard.\n    /// </summary>\n    /// <param name=\"index\">The index to be removed.</param>\n    public static void Remove(int index)\n    {\n        foreach (var frameInfo in Items[index])\n        {\n            //Copy the image to the folder.\n            File.Delete(frameInfo.Path);\n        }\n\n        Items.RemoveAt(index);\n    }\n\n    #endregion\n\n    #region Private Methods\n\n    private static void Prepare(string imageLocation)\n    {\n        Folder = Path.Combine(Path.GetDirectoryName(imageLocation), \"Clipboard\");\n\n        if (!Directory.Exists(Folder))\n            Directory.CreateDirectory(Folder);\n    }\n\n    private static void PrepareCurrent(string imageLocation)\n    {\n        Prepare(imageLocation);\n\n        CurrentFolder = Path.Combine(Folder, Items.Count.ToString());\n\n        if (!Directory.Exists(CurrentFolder))\n            Directory.CreateDirectory(CurrentFolder);\n    }\n\n    private static string GetUniqueFilename(string folder, string prefix = \"\")\n    {\n        try\n        {\n            var index = 0;\n            var name = Path.Combine(folder, $\"{prefix}{index}.png\");\n\n            while (File.Exists(name))\n                name = Path.Combine(folder, $\"{prefix}{index++}.png\");\n\n            return name;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"impossible to get a unique filename.\");\n            return Path.Combine(folder, $\"{prefix}{DateTime.Now:hh-mm-ss-ffff}.png\");\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Util/ColorExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows.Media;\nusing ScreenToGif.Controls;\n\nnamespace ScreenToGif.Util;\n\ninternal static class ColorExtensions\n{\n    public static bool IsEnoughContrast(this Color color1, Color color2)\n    {\n        Console.WriteLine(GetBrightness(color1) + \": \" + GetBrightness2(color1) + \" - \" + GetBrightness2(color2) + \" = \" + Math.Abs(GetBrightness2(color1) - GetBrightness2(color2)));\n\n        return Math.Abs(GetBrightness2(color1) - GetBrightness2(color2)) > 125;\n    }\n\n    public static int GetBrightness4(this Color color)\n    {\n        return color.R + (2*color.G) + color.B;\n    }\n\n    public static float GetBrightness3(this Color color)\n    {\n        var num = color.R / 255f;\n        var num2 = color.G / 255f;\n        var num3 = color.B / 255f;\n        var num4 = num;\n        var num5 = num;\n        if (num2 > num4)\n            num4 = num2;\n        if (num3 > num4)\n            num4 = num3;\n        if (num2 < num5)\n            num5 = num2;\n        if (num3 < num5)\n            num5 = num3;\n        return (num4 + num5) / 2f;\n    }\n\n    public static double GetBrightness2(this Color c)\n    {\n        return 0.2126 * c.R + 0.7152 * c.G + 0.0722 * c.B;\n        //return (0.299*c.R + 0.587*c.G + 0.114*c.B);\n    }\n\n    public static int GetBrightness1(this Color c)\n    {\n        return (int)Math.Sqrt(\n            c.R * c.R * .241 +\n            c.G * c.G * .691 +\n            c.B * c.B * .068);\n    }\n\n    public static int GetBrightness(this Color c)\n    {\n        return (2 * c.R) + (5 * c.G) + c.B;\n    }\n\n    public static float GetHue(this Color color)\n    {\n        if ((color.R == color.G) && (color.G == color.B))\n            return 0f;\n        var num = color.R / 255f;\n        var num2 = color.G / 255f;\n        var num3 = color.B / 255f;\n        var num7 = 0f;\n        var num4 = num;\n        var num5 = num;\n        if (num2 > num4)\n            num4 = num2;\n        if (num3 > num4)\n            num4 = num3;\n        if (num2 < num5)\n            num5 = num2;\n        if (num3 < num5)\n            num5 = num3;\n        var num6 = num4 - num5;\n        if (num == num4)\n            num7 = (num2 - num3) / num6;\n        else if (num2 == num4)\n            num7 = 2f + (num3 - num) / num6;\n        else if (num3 == num4)\n            num7 = 4f + (num - num2) / num6;\n        num7 *= 60f;\n        if (num7 < 0f)\n            num7 += 360f;\n        return num7;\n    }\n\n    public static float GetSaturation(this Color color)\n    {\n        var num = color.R / 255f;\n        var num2 = color.G / 255f;\n        var num3 = color.B / 255f;\n\n        var num7 = 0f;\n        var num4 = num;\n        var num5 = num;\n        if (num2 > num4)\n            num4 = num2;\n        if (num3 > num4)\n            num4 = num3;\n        if (num2 < num5)\n            num5 = num2;\n        if (num3 < num5)\n            num5 = num3;\n        if (num4 == num5)\n            return num7;\n\n        var num6 = (num4 + num5) / 2f;\n        if (num6 <= 0.5)\n            return (num4 - num5) / (num4 + num5);\n        return (num4 - num5) / (2f - num4 - num5);\n    }\n\n\n    #region Color Comparison\n\n    /// <summary>\n    /// Closest match for hues only.\n    /// </summary>\n    /// <param name=\"colors\"></param>\n    /// <param name=\"target\"></param>\n    /// <returns></returns>\n    public static int ClosestColorHue(List<Color> colors, Color target)\n    {\n        var hue1 = target.GetHue();\n        var diffs = colors.Select(n => GetHueDistance(n.GetHue(), hue1));\n        var diffMin = diffs.Min(n => n);\n\n        return diffs.ToList().FindIndex(n => n == diffMin);\n    }\n\n    /// <summary>\n    /// Closest match in RGB space.\n    /// </summary>\n    /// <param name=\"colors\"></param>\n    /// <param name=\"target\"></param>\n    /// <returns></returns>\n    public static int ClosestColorRgb(List<Color> colors, Color target)\n    {\n        //var colorDiffs = colors.AsParallel().Select(n => ColorDiff(n, target)).Min(n => n);\n        //return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);\n\n        var distance = int.MaxValue;\n        var indexOfMin = -1;\n        Parallel.For(0, colors.Count, (i, x) =>\n        {\n            var diff = ColorDiff(colors[i], target);\n\n            if (diff < distance)\n            {\n                distance = diff;\n                indexOfMin = i;\n            }\n\n            if (distance == 0)\n                x.Break();\n        });\n\n        return indexOfMin;\n\n        //return colors.AsParallel().Select(n=> ColorDiff(n, target)).IndexOfMin();\n    }\n\n    public static int IndexOfMin<T>(this IEnumerable<T> list) where T : IComparable\n    {\n        //or\n        /* int min = self[0];\n           int minIndex = 0;\n\n           for (int i = 1; i < self.Count; ++i) {\n               if (self[i] < min) {\n                   min = self[i];\n                   minIndex = i;\n               }\n           }*/\n\n        var enumerator = list.GetEnumerator();\n        enumerator.MoveNext();\n\n        var minValue = enumerator.Current;\n\n        var minOffset = 0;\n        for (var i = 1; enumerator.MoveNext(); ++i)\n        {\n            if (enumerator.Current.CompareTo(minValue) >= 0)\n                continue;\n\n            minValue = enumerator.Current;\n            minOffset = i;\n        }\n\n        return minOffset;\n    }\n\n    /// <summary>\n    /// Weighed distance using hue, saturation and brightness.\n    /// </summary>\n    /// <param name=\"colors\"></param>\n    /// <param name=\"target\"></param>\n    /// <returns></returns>\n    public static int ClosestColorHsb(List<Color> colors, Color target)\n    {\n        var hue1 = target.GetHue();\n        var num1 = ColorNum(target);\n        var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) +\n                                       GetHueDistance(n.GetHue(), hue1));\n        var diffMin = diffs.Min(x => x);\n        return diffs.ToList().FindIndex(n => n == diffMin);\n    }\n\n    /// <summary>\n    /// Color brightness as perceived.\n    /// </summary>\n    /// <param name=\"c\">The Color</param>\n    /// <returns>The brightness.</returns>\n    public static float GetLuminance(Color c)\n    {\n        return (c.R * 0.299f + c.G * 0.587f + c.B * 0.114f) / 256f;\n    }\n\n    /// <summary>\n    /// Gets the distance between two hues.\n    /// </summary>\n    /// <param name=\"hue1\">Hue 1</param>\n    /// <param name=\"hue2\">Hue 2</param>\n    /// <returns>The distance.</returns>\n    public static float GetHueDistance(float hue1, float hue2)\n    {\n        var d = Math.Abs(hue1 - hue2); return d > 180 ? 360 - d : d;\n    }\n\n    public static float ColorNum(Color c)\n    {\n        var factorSat = 3;\n        var factorBri = 3;\n        return c.GetSaturation() * factorSat + GetBrightness(c) * factorBri;\n    }\n\n    /// <summary>\n    /// Gets the distance in the RGB space.\n    /// </summary>\n    /// <param name=\"first\">Color 1</param>\n    /// <param name=\"second\">Color 2</param>\n    /// <returns>The distance.</returns>\n    public static int ColorDiff(Color first, Color second)\n    {\n        return (int)Math.Sqrt((first.R - second.R) * (first.R - second.R) + (first.G - second.G) * (first.G - second.G) + (first.B - second.B) * (first.B - second.B));\n    }\n\n    #endregion\n\n    /// <summary>\n    /// Converts an RGB color to an HSV color\n    /// </summary>\n    /// <param name=\"color\">Color</param>\n    /// <returns>A HsvColor object.</returns>\n    public static HsvColor RgbToHsv(this Color color)\n    {\n        double h = 0, s;\n\n        double min = Math.Min(Math.Min(color.R, color.G), color.B);\n        double v = Math.Max(Math.Max(color.R, color.G), color.B);\n        var delta = v - min;\n\n        if (v == 0.0)\n            s = 0;\n        else\n            s = delta / v;\n\n        if (s == 0)\n            h = 0.0;\n        else\n        {\n            if (color.R == v)\n                h = (color.G - color.B) / delta;\n            else if (color.G == v)\n                h = 2 + (color.B - color.R) / delta;\n            else if (color.B == v)\n                h = 4 + (color.R - color.G) / delta;\n\n            h *= 60;\n            if (h < 0.0)\n                h = h + 360;\n        }\n\n        var hsvColor = new HsvColor();\n        hsvColor.H = h;\n        hsvColor.S = s;\n        hsvColor.V = v / 255;\n\n        return hsvColor;\n    }\n\n    /// <summary>\n    /// Converts an RGB color to an HSV color\n    /// </summary>\n    /// <param name=\"r\">Red</param>\n    /// <param name=\"b\">Blue</param>\n    /// <param name=\"g\">Green</param>\n    /// <returns>A HsvColor object.</returns>\n    public static HsvColor RgbToHsv(int r, int g, int b)\n    {\n        double h = 0, s;\n\n        double min = Math.Min(Math.Min(r, g), b);\n        double v = Math.Max(Math.Max(r, g), b);\n        var delta = v - min;\n\n        if (v == 0.0)\n            s = 0;\n        else\n            s = delta / v;\n\n        if (s == 0)\n            h = 0.0;\n        else\n        {\n            if (r == v)\n                h = (g - b) / delta;\n            else if (g == v)\n                h = 2 + (b - r) / delta;\n            else if (b == v)\n                h = 4 + (r - g) / delta;\n\n            h *= 60;\n            if (h < 0.0)\n                h = h + 360;\n        }\n\n        var hsvColor = new HsvColor();\n        hsvColor.H = h;\n        hsvColor.S = s;\n        hsvColor.V = v / 255;\n\n        return hsvColor;\n    }\n\n    /// <summary>\n    /// Converts an HSV color to an RGB color.\n    /// </summary>\n    /// <param name=\"h\">Hue</param>\n    /// <param name=\"s\">Saturation</param>\n    /// <param name=\"v\">Value</param>\n    /// <param name=\"alpha\">Alpha</param>\n    /// <returns></returns>\n    public static Color HsvToRgb(double h, double s, double v, double alpha)\n    {\n        double r, g, b;\n\n        if (s == 0)\n        {\n            r = v;\n            g = v;\n            b = v;\n        }\n        else\n        {\n            if (h == 360)\n                h = 0;\n            else\n                h = h / 60;\n\n            var i = (int)Math.Truncate(h);\n            var f = h - i;\n\n            var p = v * (1.0 - s);\n            var q = v * (1.0 - s * f);\n            var t = v * (1.0 - s * (1.0 - f));\n\n            switch (i)\n            {\n                case 0:\n                    r = v;\n                    g = t;\n                    b = p;\n                    break;\n\n                case 1:\n                    r = q;\n                    g = v;\n                    b = p;\n                    break;\n\n                case 2:\n                    r = p;\n                    g = v;\n                    b = t;\n                    break;\n\n                case 3:\n                    r = p;\n                    g = q;\n                    b = v;\n                    break;\n\n                case 4:\n                    r = t;\n                    g = p;\n                    b = v;\n                    break;\n\n                default:\n                    r = v;\n                    g = p;\n                    b = q;\n                    break;\n            }\n        }\n\n        return Color.FromArgb((byte)alpha, (byte)(r * 255), (byte)(g * 255), (byte)(b * 255));\n    }\n\n    /// <summary>\n    /// Generates a list of colors with hues ranging from 0-360 and a saturation and value of 1.\n    /// </summary>\n    /// <returns>The List of Colors</returns>\n    public static List<Color> GenerateHsvSpectrum(int count)\n    {\n        var colorsList = new List<Color>();\n\n        var stop = 360d / count;\n        var isDecimal = stop % 1 > 0;\n            \n        for (var i = 0; i <= (isDecimal ? count - 1 : count); i++)\n            colorsList.Add(HsvToRgb(360 - i * stop, 1, 1, 255));\n\n        if (isDecimal)\n            colorsList.Add(HsvToRgb(360, 1, 1, 255));\n\n        return colorsList;\n    }\n\n    /// <summary>\n    /// Generates a list of colors with transparency ranging from 0-255.\n    /// </summary>\n    public static List<Color> GenerateAlphaSpectrum(Color color, int count = 2)\n    {\n        var colorsList = new List<Color>();\n\n        var stop = 255d / count;\n        var isDecimal = stop % 1 > 0;\n\n        for (var i = 0; i <= (isDecimal ? count - 1 : count); i++)\n            colorsList.Add(Color.FromArgb((byte)(i * stop), color.R, color.G, color.B));\n\n        if (isDecimal)\n            colorsList.Add(Color.FromArgb(255, color.R, color.G, color.B));\n\n        colorsList.Reverse();\n\n        return colorsList;\n    }\n\n    public static System.Drawing.Color ToDrawingColor(this Color color) => System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B);\n}"
  },
  {
    "path": "ScreenToGif/Util/ComboBoxItemTemplateSelector.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Util;\n\npublic class ComboBoxItemTemplateSelector : DataTemplateSelector\n{\n    #region SelectedTemplate\n\n    public static DependencyProperty SelectedTemplateProperty = DependencyProperty.RegisterAttached(\"SelectedTemplate\", typeof(DataTemplate), typeof(ComboBoxItemTemplateSelector), new UIPropertyMetadata(null));\n\n    [AttachedPropertyBrowsableForType(typeof(ComboBox))]\n    public static DataTemplate GetSelectedTemplate(ComboBox obj)\n    {\n        return (DataTemplate)obj.GetValue(SelectedTemplateProperty);\n    }\n\n    public static void SetSelectedTemplate(ComboBox obj, DataTemplate value)\n    {\n        obj.SetValue(SelectedTemplateProperty, value);\n    }\n\n    #endregion\n\n    #region DropDownTemplate\n\n    public static DependencyProperty DropDownTemplateProperty = DependencyProperty.RegisterAttached(\"DropDownTemplate\", typeof(DataTemplate), typeof(ComboBoxItemTemplateSelector), new UIPropertyMetadata(null));\n\n    [AttachedPropertyBrowsableForType(typeof(ComboBox))]\n    public static DataTemplate GetDropDownTemplate(ComboBox obj)\n    {\n        return (DataTemplate)obj.GetValue(DropDownTemplateProperty);\n    }\n\n    public static void SetDropDownTemplate(ComboBox obj, DataTemplate value)\n    {\n        obj.SetValue(DropDownTemplateProperty, value);\n    }\n\n    #endregion\n\n    public override DataTemplate SelectTemplate(object item, DependencyObject container)\n    {\n        var comboBoxItem = container.GetVisualParent<ComboBoxItem>();\n        return comboBoxItem == null ? GetSelectedTemplate(container.GetVisualParent<ComboBox>()) : GetDropDownTemplate(ItemsControl.ItemsControlFromItemContainer(comboBoxItem) as ComboBox);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/Commands.cs",
    "content": "﻿using System.Windows.Input;\n\nnamespace ScreenToGif.Util\n{\n    /// <summary>\n    /// Custom Commands.\n    /// </summary>\n    public static class Commands\n    {\n        //TODO: Localize everything.\n\n        #region File Tab\n\n        /// <summary>\n        /// New Recording Command, Ctrl + N\n        /// </summary>\n        public static RoutedUICommand NewRecording { get; set; } = new RoutedUICommand(\"New Recording\", \"NewRecording\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.N, ModifierKeys.Control, \"Ctrl + N\") });\n\n        /// <summary>\n        /// New Webcam Recording Command, Ctrl + W\n        /// </summary>\n        public static RoutedUICommand NewWebcamRecording { get; set; } = new RoutedUICommand(\"New Webcam Recording\", \"NewWebcamRecording\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.W, ModifierKeys.Control, \"Ctrl + W\") });\n        \n        /// <summary>\n        /// New Board Recording Command, Ctrl + B\n        /// </summary>\n        public static RoutedUICommand NewBoardRecording { get; set; } = new RoutedUICommand(\"New Board Recording\", \"Board\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.B, ModifierKeys.Control, \"Ctrl + B\") });\n\n        #region New Empty Animation\n\n        /// <summary>\n        /// New Animation Command, Ctrl + Alt + A\n        /// </summary>\n        public static RoutedUICommand NewAnimation { get; set; } = new RoutedUICommand(\"New Animation\", \"NewAnimation\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.A, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + A\") });\n\n        #endregion\n\n        #region Insert Recording\n\n        /// <summary>\n        /// Insert Recording Command, Ctrl + Shift + N\n        /// </summary>\n        public static RoutedUICommand InsertRecording { get; set; } = new RoutedUICommand(\"Insert Recording\", \"InsertRecording\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.N, ModifierKeys.Control | ModifierKeys.Shift, \"Ctrl + Shift + N\") });\n\n        #endregion\n\n        #region Insert Webcam Recording\n\n        /// <summary>\n        /// Insert Webcam Recording Command, Ctrl + Shift + W\n        /// </summary>\n        public static RoutedUICommand InsertWebcamRecording { get; set; } = new RoutedUICommand(\"Insert Webcam Recording\", \"InsertWebcamRecording\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.W, ModifierKeys.Control | ModifierKeys.Shift, \"Ctrl + Shift + W\") });\n\n        #endregion\n\n        #region Insert Board Recording\n\n        /// <summary>\n        /// Insert Board Recording Command, Ctrl + Shift + B\n        /// </summary>\n        public static RoutedUICommand InsertBoardRecording { get; set; } = new RoutedUICommand(\"Insert Board Recording\", \"InsertBoardRecording\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.B, ModifierKeys.Control | ModifierKeys.Shift, \"Ctrl + Shift + B\") });\n\n        #endregion\n\n        #region Insert From Media\n\n        /// <summary>\n        /// Insert From Media Command, Ctrl + Shift + O\n        /// </summary>\n        public static RoutedUICommand InsertFromMedia { get; set; } = new RoutedUICommand(\"Insert From Media\", \"InsertFromMedia\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.O, ModifierKeys.Control | ModifierKeys.Shift, \"Ctrl + Shift + O\") });\n\n        #endregion\n\n        #region Save as\n\n        /// <summary>\n        /// Save as Command, Ctrl + S\n        /// </summary>\n        public static RoutedUICommand SaveAs { get; set; } = new RoutedUICommand(\"Save As\", \"SaveAs\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.S, ModifierKeys.Control, \"Ctrl + S\") });\n\n        #endregion\n\n        /// <summary>\n        /// Load Command, Ctrl + O\n        /// </summary>\n        public static RoutedUICommand Load { get; set; } = new RoutedUICommand(\"Load\", \"Load\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.O, ModifierKeys.Control, \"Ctrl + O\") });\n\n        /// <summary>\n        /// Load Recent Command, Ctrl + L\n        /// </summary>\n        public static RoutedUICommand LoadRecent { get; set; } = new RoutedUICommand(\"Load Recent\", \"LoadRecent\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.L, ModifierKeys.Control, \"Ctrl + L\") });\n\n        #region Discart Project\n\n        /// <summary>\n        /// Discart Project Command, Ctrl + Delete\n        /// </summary>\n        public static RoutedUICommand DiscardProject { get; set; } = new RoutedUICommand(\"Discard Project\", \"DiscardProject\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Delete, ModifierKeys.Control, \"Ctrl + Delete\") });\n\n        #endregion\n\n        #endregion\n\n        #region Home Tab\n\n        #region Override Delay\n\n        /// <summary>\n        /// OverrideDelay Command, Alt + O\n        /// </summary>\n        public static RoutedUICommand OverrideDelay { get; set; } = new RoutedUICommand(\"Override Delay\", \"OverrideDelay\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.O, ModifierKeys.Alt, \"Alt + O\") });\n\n        #endregion\n\n        #region Change Speed\n\n        /// <summary>\n        /// IncreaseDecreaseDelay Command, Alt + Y\n        /// </summary>\n        public static RoutedUICommand ChangeDelay { get; set; } = new RoutedUICommand(\"Change Delay\", \"IncreaseDecreaseDelay\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Y, ModifierKeys.Alt, \"Alt + Y\") });\n\n        #endregion\n\n        #region Scale Delay\n\n         /// <summary>\n         /// ScaleDelay Command, Alt + 5\n         /// </summary>\n         public static RoutedUICommand ScaleDelay { get; set; } = new RoutedUICommand(\"Scale Delay\", \"ScaleDelay\", typeof(Commands),\n               new InputGestureCollection { new KeyGesture(Key.D5, ModifierKeys.Alt, \"Alt + 5\") });\n\n        #endregion\n\n      #region Zoom100\n\n      /// <summary>\n      /// Zoom100 Command, Alt + 0\n      /// </summary>\n      public static RoutedUICommand Zoom100 { get; set; } = new RoutedUICommand(\"Set Zoom to 100%\", \"Zoom100\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.D0, ModifierKeys.Alt, \"Alt + 0\") });\n\n        #endregion\n\n        #region SizeToContent\n\n        /// <summary>\n        /// SizeToContent Command, Alt + 1\n        /// </summary>\n        public static RoutedUICommand SizeToContent { get; set; } = new RoutedUICommand(\"Size to Content\", \"SizeToContent\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.D1, ModifierKeys.Alt, \"Alt + 1\") });\n\n        #endregion\n\n        #region FitImage\n\n        /// <summary>\n        /// FitImage Command, Alt + -\n        /// </summary>\n        public static RoutedUICommand FitImage { get; set; } = new RoutedUICommand(\"Fit Image\", \"FitImage\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.OemMinus, ModifierKeys.Alt, \"Alt + -\") });\n\n        #endregion\n\n        #endregion\n\n        #region Playback Tab\n\n        #region FirstFrame\n\n        /// <summary>\n        /// FirstFrame Command, Home\n        /// </summary>\n        public static RoutedUICommand FirstFrame { get; set; } = new RoutedUICommand(\"Select First Frame\", \"FirstFrame\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Home, ModifierKeys.None, \"Home\") });\n\n        #endregion\n\n        #region PreviousFrame\n\n        /// <summary>\n        /// PreviousFrame Command, PageUp\n        /// </summary>\n        public static RoutedUICommand PreviousFrame { get; set; } = new RoutedUICommand(\"Select Previous Frame\", \"PreviousFrame\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.PageUp, ModifierKeys.None, \"PageUp\") });\n\n        #endregion\n\n        #region Play\n\n        /// <summary>\n        /// Play Command, Alt + P\n        /// </summary>\n        public static RoutedUICommand Play { get; set; } = new RoutedUICommand(\"Play\", \"Play\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.P, ModifierKeys.Alt, \"Alt + P\"), new KeyGesture(Key.Space) });\n\n        #endregion\n\n        #region NextFrame\n\n        /// <summary>\n        /// NextFrame Command, PageDown\n        /// </summary>\n        public static RoutedUICommand NextFrame { get; set; } = new RoutedUICommand(\"Select Next Frame\", \"NextFrame\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.PageDown, ModifierKeys.None, \"PageDown\") });\n\n        #endregion\n\n        #region LastFrame\n\n        /// <summary>\n        /// LastFrame Command, End\n        /// </summary>\n        public static RoutedUICommand LastFrame { get; set; } = new RoutedUICommand(\"Select Last Frame\", \"LastFrame\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.End, ModifierKeys.None, \"End\") });\n\n        #endregion\n\n        #endregion\n\n        #region Edit Tab\n\n        #region Reset\n\n        /// <summary>\n        /// Reset Command, Ctrl + R\n        /// </summary>\n        public static RoutedUICommand Reset { get; set; } = new RoutedUICommand (\"Reset\", \"Reset\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.R, ModifierKeys.Control, \"Ctrl + R\") });\n\n        #endregion\n\n        #region Clipboard\n\n        /// <summary>\n        /// Explore Clipboard Command, No Input\n        /// </summary>\n        public static RoutedUICommand ExploreClipboard { get; set; } = new RoutedUICommand(\"Explore Clipboard Content\", \"ExploreClipboard\", typeof(Commands));\n\n        /// <summary>\n        /// Remove Clipboard Entry Command, No Input\n        /// </summary>\n        public static RoutedUICommand RemoveClipboardEntry { get; set; } = new RoutedUICommand(\"Remove Clipboard Entry\", \"RemoveClipboardEntry\", typeof(Commands));\n\n        #endregion\n\n        #region DeletePrevious\n\n        /// <summary>\n        /// DeletePrevious Command, Alt + Left\n        /// </summary>\n        public static RoutedUICommand DeletePrevious { get; set; } = new RoutedUICommand(\"Delete All Previous Frames\", \"DeletePrevious\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Left, ModifierKeys.Alt, \"Alt + Left\") });\n\n        #endregion\n\n        /// <summary>\n        /// DeleteNext Command, Alt + Right\n        /// </summary>\n        public static RoutedUICommand DeleteNext { get; set; } = new RoutedUICommand(\"Delete All Next Frames\", \"DeleteNext\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Right, ModifierKeys.Alt, \"Alt + Right\") });\n\n        /// <summary>\n        /// Remove Duplicates Command, Alt + Delete\n        /// </summary>\n        public static RoutedUICommand RemoveDuplicates { get; set; } = new RoutedUICommand(\"Remove Duplicates\", \"RemoveDuplicates\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Delete, ModifierKeys.Alt, \"Alt + Delete\") });\n\n        /// <summary>\n        /// Reduce Command, Ctrl + Shift + Delete\n        /// </summary>\n        public static RoutedUICommand Reduce { get; set; } = new RoutedUICommand(\"Reduce Frame Count\", \"Reduce\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Delete, ModifierKeys.Control | ModifierKeys.Shift, \"Ctrl + Shift + Delete\") });\n\n        #region Reverse\n\n        /// <summary>\n        /// Reverse Command, Ctrl + Alt + R\n        /// </summary>\n        public static RoutedUICommand Reverse { get; set; } = new RoutedUICommand(\"Reverse\", \"Reverse\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.R, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + R\") });\n\n        #endregion\n\n        #region Yoyo\n\n        /// <summary>\n        /// Yoyo Command, Ctrl + Y\n        /// </summary>\n        public static RoutedUICommand Yoyo { get; set; } = new RoutedUICommand(\"Yoyo\", \"Yoyo\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Y, ModifierKeys.Control) });\n\n        #endregion\n\n        #region Move Left\n\n        /// <summary>\n        /// Move Left Command, Ctrl + Shift + Left\n        /// </summary>\n        public static RoutedUICommand MoveLeft { get; set; } = new RoutedUICommand(\"Move Left\", \"MoveLeft\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Left, ModifierKeys.Control | ModifierKeys.Shift) });\n\n        #endregion\n\n        #region Move Right\n\n        /// <summary>\n        /// Move Right Command, Ctrl + Shift + Right\n        /// </summary>\n        public static RoutedUICommand MoveRight { get; set; } = new RoutedUICommand(\"Move Right\", \"MoveRight\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Right, ModifierKeys.Control | ModifierKeys.Shift) });\n\n        #endregion\n\n        #endregion\n\n        #region Image Tab\n\n        #region Resize\n\n        /// <summary>\n        /// Resize Command, Alt + R\n        /// </summary>\n        public static RoutedUICommand Resize { get; set; } = new RoutedUICommand(\"Resize\", \"Resize\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.R, ModifierKeys.Alt, \"Alt + R\") });\n\n        #endregion\n\n        #region Crop\n\n        /// <summary>\n        /// Crop Command, Alt + C\n        /// </summary>\n        public static RoutedUICommand Crop { get; set; } = new RoutedUICommand(\"Crop\", \"Crop\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.C, ModifierKeys.Alt, \"Alt + C\") });\n\n        #endregion\n\n        #region Flip/Rotate\n\n        /// <summary>\n        /// Flip/Rotate Command, Alt + L\n        /// </summary>\n        public static RoutedUICommand FlipRotate { get; set; } = new RoutedUICommand(\"Flip or Rotate\", \"FlipRotate\", typeof(Commands), \n            new InputGestureCollection {new KeyGesture(Key.L, ModifierKeys.Alt, \"Alt + L\")});\n\n        #region FlipVertical\n\n        //private static RoutedUICommand _flipVertical = new RoutedUICommand(\"FlipVertical\", \"FlipVertical\", typeof(Commands));\n\n        ///// <summary>\n        ///// FlipVertical Command, No Input\n        ///// </summary>\n        //public static RoutedUICommand FlipVertical\n        //{\n        //    get { return _flipVertical; }\n        //    set { _flipVertical = value; }\n        //}\n\n        #endregion\n\n        #region FlipHorizontal\n\n        //private static RoutedUICommand _flipHorizontal = new RoutedUICommand(\"FlipHorizontal\", \"FlipHorizontal\", typeof(Commands));\n\n        ///// <summary>\n        ///// FlipHorizontal Command, No Input\n        ///// </summary>\n        //public static RoutedUICommand FlipHorizontal\n        //{\n        //    get { return _flipHorizontal; }\n        //    set { _flipHorizontal = value; }\n        //}\n\n        #endregion\n\n        #region RotateLeft90\n\n        //private static RoutedUICommand _rotateLeft90 = new RoutedUICommand(\"RotateLeft90\", \"RotateLeft90\", typeof(Commands));\n\n        ///// <summary>\n        ///// RotateLeft90 Command, No Input\n        ///// </summary>\n        //public static RoutedUICommand RotateLeft90\n        //{\n        //    get { return _rotateLeft90; }\n        //    set { _rotateLeft90 = value; }\n        //}\n\n        #endregion\n\n        #region RotateRight90\n\n        //private static RoutedUICommand _rotateRight90 = new RoutedUICommand(\"RotateRight90\", \"RotateRight90\", typeof(Commands));\n\n        ///// <summary>\n        ///// RotateRight90 Command, No Input\n        ///// </summary>\n        //public static RoutedUICommand RotateRight90\n        //{\n        //    get { return _rotateRight90; }\n        //    set { _rotateRight90 = value; }\n        //}\n\n        #endregion\n\n        #endregion\n\n        #region Filter\n\n        /// <summary>\n        /// Filter Command, No Input\n        /// </summary>\n        public static RoutedUICommand Filter { get; set; } = new RoutedUICommand(\"Filter\", \"Filter\", typeof(Commands));\n\n        #endregion\n\n        #region Caption\n\n        /// <summary>\n        /// Caption Command, Alt + S\n        /// </summary>\n        public static RoutedUICommand Caption { get; set; } = new RoutedUICommand(\"Caption\", \"Caption\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.S, ModifierKeys.Alt, \"Alt + S\") });\n\n        #endregion\n\n        #region Free Text\n\n        /// <summary>\n        /// Free Text Command, Alt + F\n        /// </summary>\n        public static RoutedUICommand FreeText { get; set; } = new RoutedUICommand(\"Free Text\", \"FreeText\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.F, ModifierKeys.Alt, \"Alt + F\") });\n\n        #endregion\n\n        #region Title Frame\n\n        /// <summary>\n        /// Title Frame Command, Alt + T\n        /// </summary>\n        public static RoutedUICommand TitleFrame { get; set; } = new RoutedUICommand(\"Title Frame\", \"TitleFrame\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.T, ModifierKeys.Alt, \"Alt + T\") });\n\n        #endregion\n\n        #region Key Strokes\n\n        /// <summary>\n        /// Key Strokes Command, Alt + H\n        /// </summary>\n        public static RoutedUICommand KeyStrokes { get; set; } = new RoutedUICommand(\"Key Strokes\", \"KeyStrokes\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.H, ModifierKeys.Alt, \"Alt + H\") });\n\n        #endregion\n\n        #region Free Drawing\n\n        /// <summary>\n        /// Free Drawing Command, Alt + D\n        /// </summary>\n        public static RoutedUICommand FreeDrawing { get; set; } = new RoutedUICommand(\"Free Drawing\", \"FreeDrawing\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.D, ModifierKeys.Alt, \"Alt + D\") });\n\n        #endregion\n\n        #region Shapes\n\n        /// <summary>\n        /// Shapes Command, Alt + J\n        /// </summary>\n        public static RoutedUICommand Shapes { get; set; } = new RoutedUICommand(\"Shapes\", \"Shapes\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.J, ModifierKeys.Alt, \"Alt + J\") });\n\n        #endregion\n\n        #region Mouse Clicks\n\n        /// <summary>\n        /// Mouse Clicks Command, Alt + I\n        /// </summary>\n        public static RoutedUICommand MouseClicks { get; set; } = new RoutedUICommand(\"Mouse Clicks\", \"MouseClicks\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.I, ModifierKeys.Alt, \"Alt + I\") });\n\n        #endregion\n\n        #region Watermark\n\n        /// <summary>\n        /// Watermark Command, Alt + W\n        /// </summary>\n        public static RoutedUICommand Watermark { get; set; } = new RoutedUICommand(\"Watermark\", \"Watermark\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.W, ModifierKeys.Alt, \"Alt + W\") });\n\n        #endregion\n\n        #region Border\n\n        /// <summary>\n        /// Border Command, Alt + B\n        /// </summary>\n        public static RoutedUICommand Border { get; set; } = new RoutedUICommand(\"Border\", \"Border\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.B, ModifierKeys.Alt, \"Alt + B\") });\n\n        #endregion\n\n        #region Obfuscate\n\n        /// <summary>\n        /// Obfuscate Command, Ctrl + H\n        /// </summary>\n        public static RoutedUICommand Obfuscate { get; set; } = new RoutedUICommand(\"Obfuscate\", \"Obfuscate\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.H, ModifierKeys.Control, \"Ctrl + H\") });\n\n        #endregion\n\n        #region Cinemagraph\n\n        /// <summary>\n        /// Cinemagraph Command, Alt + G\n        /// </summary>\n        public static RoutedUICommand Cinemagraph { get; set; } = new RoutedUICommand(\"Cinemagraph\", \"Cinemagraph\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.G, ModifierKeys.Alt, \"Alt + G\") });\n\n        #endregion\n\n        #region Progress\n\n        /// <summary>\n        /// Progress Command, Alt + K\n        /// </summary>\n        public static RoutedUICommand Progress { get; set; } = new RoutedUICommand(\"Progress\", \"Progress\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.K, ModifierKeys.Alt, \"Alt + K\") });\n\n        #endregion\n\n        #endregion\n\n        #region Selection Tab\n\n        #region Select All\n\n        /// <summary>\n        /// Select All Command, Ctrl + A\n        /// </summary>\n        public static RoutedUICommand SelectAll { get; set; } = new RoutedUICommand(\"Select All Frames\", \"SelectAll\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.A, ModifierKeys.Control, \"Ctrl + A\") });\n\n        #endregion\n\n        #region Go To\n\n        /// <summary>\n        /// Go To Command, Ctrl + G\n        /// </summary>\n        public static RoutedUICommand GoTo { get; set; } = new RoutedUICommand(\"Go To the Selected Frame\", \"GoTo\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.G, ModifierKeys.Control, \"Ctrl + G\") });\n\n        #endregion\n\n        #region Inverse Selection\n\n        /// <summary>\n        /// Inverse Selection Command, Ctrl + I\n        /// </summary>\n        public static RoutedUICommand InverseSelection { get; set; } = new RoutedUICommand(\"Inverse Selection of Frames\", \"InverseSelection\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.I, ModifierKeys.Control, \"Ctrl + I\") });\n\n        #endregion\n\n        #region Unselect\n\n        /// <summary>\n        /// Unselect Command, Ctrl + U\n        /// </summary>\n        public static RoutedUICommand Unselect { get; set; } = new RoutedUICommand(\"Unselect Frames\", \"Unselect\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.U, ModifierKeys.Control, \"Ctrl + U\") });\n\n        #endregion\n\n        #endregion\n\n        #region Transitions\n\n        /// <summary>\n        /// Fade Command, Ctrl + Alt + T\n        /// </summary>\n        public static RoutedUICommand Fade { get; set; } = new RoutedUICommand(\"Fade Transition\", \"Fade \", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.T, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + T\") });\n\n        /// <summary>\n        /// Slide Command, Ctrl + Alt + Y\n        /// </summary>\n        public static RoutedUICommand Slide { get; set; } = new RoutedUICommand(\"Slide Transition\", \"Slide \", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Y, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + Y\") });\n\n        #endregion\n\n        #region Other\n\n        /// <summary>\n        /// Options Command, Ctrl + Alt + O\n        /// </summary>\n        public static RoutedUICommand Options { get; set; } = new RoutedUICommand(\"Options\", \"Options\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.O, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + O\") });\n\n        /// <summary>\n        /// Update Command, Ctrl + Alt + U\n        /// </summary>\n        public static RoutedUICommand Update { get; set; } = new RoutedUICommand(\"Update\", \"Update\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.U, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + U\") });\n\n        /// <summary>\n        /// Create Local Settings Command, Ctrl + Alt + C\n        /// </summary>\n        public static RoutedUICommand CreateLocalSettings { get; set; } = new RoutedUICommand(\"Create Local Settings\", \"CreateLocalSettings\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.C, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + C\") });\n\n        /// <summary>\n        /// Remove Local Settings Command, Ctrl + Alt + D\n        /// </summary>\n        public static RoutedUICommand RemoveLocalSettings { get; set; } = new RoutedUICommand(\"Remove Local Settings\", \"RemoveLocalSettings\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.D, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + D\") });\n\n        /// <summary>\n        /// Open Local Settings Command, Ctrl + Shift + A\n        /// </summary>\n        public static RoutedUICommand OpenLocalSettings { get; set; } = new RoutedUICommand(\"Open Local Settings\", \"OpenLocalSettings\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.A, ModifierKeys.Control | ModifierKeys.Shift, \"Ctrl + Shift + A\") });\n\n        /// <summary>\n        /// Remove AppData Settings Command, Ctrl + Alt + F\n        /// </summary>\n        public static RoutedUICommand RemoveAppDataSettings { get; set; } = new RoutedUICommand(\"Remove AppData Settings\", \"RemoveAppDataSettings\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.F, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + F\") });\n\n        /// <summary>\n        /// Open AppData Settings Command, Ctrl + Alt + A\n        /// </summary>\n        public static RoutedUICommand OpenAppDataSettings { get; set; } = new RoutedUICommand(\"Open AppData Settings\", \"OpenAppDataSettings\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.A, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + A\") });\n\n        /// <summary>\n        /// Clear all completed encodings, Ctrl + D\n        /// </summary>\n        public static RoutedUICommand ClearAll { get; set; } = new RoutedUICommand(\"Clear All\", \"ClearAll\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.D, ModifierKeys.Control, \"Ctrl + D\") });\n\n        #region FramesListView\n\n        /// <summary>\n        /// Open Image Command, No Input.\n        /// </summary>\n        public static RoutedUICommand OpenImage { get; set; } = new RoutedUICommand(\"Open Image\", \"OpenImage\", typeof(Commands));\n\n        /// <summary>\n        /// Explore Folder Command, No Input.\n        /// </summary>\n        public static RoutedUICommand ExploreFolder { get; set; } = new RoutedUICommand(\"Explore Folder\", \"ExploreFolder\", typeof(Commands));\n\n        /// <summary>\n        /// Export Images Command, No Input.\n        /// </summary>\n        public static RoutedUICommand ExportImages { get; set; } = new RoutedUICommand(\"Export Selected Images\", \"ExportImages\", typeof(Commands));\n\n        #endregion\n\n        #region Check for Videos Devices\n\n        /// <summary>\n        /// Check Video Devices Command, Ctrl + Alt + F5\n        /// </summary>\n        public static RoutedUICommand CheckVideoDevices { get; set; } = new RoutedUICommand(\"Check for Video Devices\", \"CheckVideoDevices\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.F5, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + F5\") });\n\n        #endregion\n\n        #region Open Editor\n\n        /// <summary>\n        /// Editor Command, Ctrl + E\n        /// </summary>\n        public static RoutedUICommand Editor { get; set; } = new RoutedUICommand(\"Editor\", \"Editor\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.E, ModifierKeys.Control, \"Ctrl + E\") });\n\n        #endregion\n\n        #region Enable Snapshot\n\n        /// <summary>\n        /// Enable/Disable Snapshot Command, No Input\n        /// </summary>\n        public static RoutedUICommand EnableSnapshot { get; set; } = new RoutedUICommand(\"Enable Snapshot\", \"EnableSnapshot\", typeof(Commands));\n\n        #endregion\n\n        #region Enable Thin Mode\n\n        /// <summary>\n        /// Enable/Disable Thin mode Command, No Input\n        /// </summary>\n        public static RoutedUICommand EnableThinMode { get; set; } = new RoutedUICommand(\"Enable Thin Mode\", \"EnableThinMode\", typeof(Commands));\n\n        #endregion\n\n\n        /// <summary>\n        /// Enable/Disable Snap to Window Command, \"Ctrl + Alt + Z\"\n        /// </summary>\n        public static RoutedUICommand EnableSnapToWindow { get; set; } = new RoutedUICommand(\"Enable Snap To Window\", \"EnableSnapToWindow\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Z, ModifierKeys.Control | ModifierKeys.Alt, \"Ctrl + Alt + Z\") });\n\n        /// <summary>\n        /// Ok Action Command, Alt + E\n        /// </summary>\n        public static RoutedUICommand OkAction { get; set; } = new RoutedUICommand(\"Ok\", \"OkAction\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.E, ModifierKeys.Alt, \"Alt + E\"), new KeyGesture(Key.Enter) });\n\n        /// <summary>\n        /// Cancel Action Command, Esc\n        /// </summary>\n        public static RoutedUICommand CancelAction { get; set; } = new RoutedUICommand(\"Cancel\", \"CancelAction\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Escape, ModifierKeys.None, \"Esc\") });\n\n        #endregion\n\n        #region Localization\n\n        /// <summary>\n        /// Move Up Entry Command, Alt + Up\n        /// </summary>\n        public static RoutedUICommand MoveUpLocalization { get; set; } = new RoutedUICommand(\"Move Upwards\", \"MoveUpLocalization\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Up, ModifierKeys.Alt, \"Alt + Up\") });\n\n        /// <summary>\n        /// Move Down Entry Command, Alt + Down\n        /// </summary>\n        public static RoutedUICommand MoveDownLocalization { get; set; } = new RoutedUICommand(\"Move Downwards\", \"MoveDownLocalization\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Down, ModifierKeys.Alt, \"Alt + Down\") });\n\n        /// <summary>\n        /// Add Entry Command, Ctrl + O\n        /// </summary>\n        public static RoutedUICommand AddLocalization { get; set; } = new RoutedUICommand(\"Add Localization\", \"AddLocalization\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.O, ModifierKeys.Control, \"Ctrl + O\") });\n\n        /// <summary>\n        /// Save Entry Command, Ctrl + S\n        /// </summary>\n        public static RoutedUICommand SaveLocalization { get; set; } = new RoutedUICommand(\"Save Localization\", \"SaveLocalization\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.S, ModifierKeys.Control, \"Ctrl + S\") });\n\n        /// <summary>\n        /// Remove Entry Command, Delete\n        /// </summary>\n        public static RoutedUICommand RemoveLocalization { get; set; } = new RoutedUICommand(\"Remove Localization\", \"RemoveLocalization\", typeof(Commands), \n            new InputGestureCollection {new KeyGesture(Key.Delete, ModifierKeys.None, \"Delete\") });\n\n        #endregion\n\n        #region List of entries\n\n        /// <summary>\n        /// Move Up Entry Command, Alt + Up\n        /// </summary>\n        public static RoutedUICommand MoveUp { get; set; } = new RoutedUICommand(\"Move Upwards\", \"MoveUp\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Up, ModifierKeys.Alt, \"Alt + Up\") });\n\n        /// <summary>\n        /// Move Down Entry Command, Alt + Down\n        /// </summary>\n        public static RoutedUICommand MoveDown { get; set; } = new RoutedUICommand(\"Move Downwards\", \"MoveDown\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Down, ModifierKeys.Alt, \"Alt + Down\") });\n\n        /// <summary>\n        /// Add Entry Command, Ctrl + N\n        /// </summary>\n        public static RoutedUICommand Add { get; set; } = new RoutedUICommand(\"Add\", \"AddNew\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.N, ModifierKeys.Control, \"Ctrl + N\") });\n\n        /// <summary>\n        /// Add Entry Command, Ctrl + E\n        /// </summary>\n        public static RoutedUICommand Edit { get; set; } = new RoutedUICommand(\"Edit\", \"Edit\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.E, ModifierKeys.Control, \"Ctrl + E\") });\n\n        /// <summary>\n        /// Remove Entry Command, Delete\n        /// </summary>\n        public static RoutedUICommand Remove { get; set; } = new RoutedUICommand(\"Remove\", \"Remove\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.Delete, ModifierKeys.None, \"Delete\") });\n\n        #endregion\n\n        public static readonly RoutedUICommand Exit = new RoutedUICommand(\"Exit\", \"Exit\", typeof(Commands),\n            new InputGestureCollection { new KeyGesture(Key.F4, ModifierKeys.Alt) });\n    }\n}\n"
  },
  {
    "path": "ScreenToGif/Util/Converters/CommandToKeyGesture.cs",
    "content": "using ScreenToGif.Util.Helpers;\nusing System;\nusing System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class CommandToKeyGesture : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var command = value as RoutedUICommand;\n\n        if (command?.InputGestures == null)\n            return Binding.DoNothing;\n\n        //var keys = Native.GetSelectKeyText(gesture.Key, gesture.Modifiers);\n\n        foreach (KeyGesture gesture in command.InputGestures)\n            if (gesture.Key != Key.None)\n                return $\"{KeyHelper.GetSelectKeyText(gesture.Key, gesture.Modifiers)}\";\n\n        return Binding.DoNothing;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/Converters/KeyGestureToString.cs",
    "content": "using ScreenToGif.Util.Helpers;\nusing System;\nusing System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class KeyGestureToString : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not KeyGesture gesture || gesture.Key == Key.None)\n            return Binding.DoNothing;\n\n        return $\"{KeyHelper.GetSelectKeyText(gesture.Key, gesture.Modifiers)}\";\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/Converters/PresetToSubViewModelConverter.cs",
    "content": "#region Usings\n\nusing System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\n#endregion\n\nnamespace ScreenToGif.Util.Converters;\n\n// NOTE: This class is needed because by default ExportPanel uses the preset as a data context (which is actually a model-like class)\n// instead of real view model classes (and actual VM functionality such as data sources of selections are just in the codebehind).\n// This converter returns a specific ViewModel class for presets whose View (eg. separated user controls) rely on a real view model;\n// otherwise, returns the original preset instance.\npublic class PresetToSubViewModelConverter : IValueConverter\n{\n    #region Methods\n\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n        => value is KGySoftGifPreset kGySoftGifPreset\n            ? new KGySoftGifOptionsViewModel(kGySoftGifPreset)\n            : value;\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n        => Binding.DoNothing;\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Util/Converters/RoutedCommandToInputGestureText.cs",
    "content": "using ScreenToGif.Util.Helpers;\nusing System;\nusing System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class CommandToInputGestureText : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var command = value as RoutedUICommand;\n\n        if (command?.InputGestures == null)\n            return Binding.DoNothing;\n\n        //var keys = Native.GetSelectKeyText(gesture.Key, gesture.Modifiers);\n        foreach (KeyGesture gesture in command.InputGestures)\n            return $\"{LocalizationHelper.Get(command.Text) ?? command.Text}\\n({KeyHelper.GetSelectKeyText(gesture.Key, gesture.Modifiers)})\";\n\n        return Binding.DoNothing;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/Converters/ShortcutKeys.cs",
    "content": "using ScreenToGif.Util.Helpers;\nusing System;\nusing System.Globalization;\nusing System.Windows.Data;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class ShortcutKeys : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var param = parameter as string;\n\n        switch (param)\n        {\n            case \"1\": //Start/Pause\n                return KeyHelper.GetSelectKeyText(UserSettings.All.StartPauseShortcut, UserSettings.All.StartPauseModifiers, true, true);\n            case \"2\": //Stop\n                return KeyHelper.GetSelectKeyText(UserSettings.All.StopShortcut, UserSettings.All.StopModifiers, true, true);\n            case \"3\": //Discard\n                return KeyHelper.GetSelectKeyText(UserSettings.All.DiscardShortcut, UserSettings.All.DiscardModifiers, true, true);\n        }\n\n        return \"\";\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/EncodingManager.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Globalization;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\n\nusing KGySoft.CoreLibraries;\nusing KGySoft.Drawing;\nusing KGySoft.Drawing.Imaging;\nusing KGySoft.Threading;\n\nusing ScreenToGif.Cloud;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.ImageUtil;\nusing ScreenToGif.Util.Codification.Apng;\nusing ScreenToGif.Util.Codification.Gif.Encoder;\nusing ScreenToGif.Util.Codification.Psd;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.ViewModel.ExportPresets;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;\nusing ScreenToGif.ViewModel.ExportPresets.Image;\nusing ScreenToGif.ViewModel.ExportPresets.Other;\nusing ScreenToGif.ViewModel.ExportPresets.Video;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.Windows.Other;\n\nusing Color = System.Windows.Media.Color;\nusing Encoder = ScreenToGif.Windows.Other.Encoder;\nusing LegacyGifEncoder = ScreenToGif.Util.Codification.Gif.LegacyEncoder.GifEncoder;\nusing KGySoftGifEncoder = KGySoft.Drawing.Imaging.GifEncoder;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Avif;\n\nnamespace ScreenToGif.Util;\n\ninternal class EncodingManager\n{\n    #region Variables\n\n    public static List<EncodingItem> Encodings { get; set; } = new List<EncodingItem>();\n\n    /// <summary>\n    /// List of CancellationTokenSource, used to cancel each task.\n    /// </summary>\n    private static readonly List<CancellationTokenSource> CancellationTokenList = new List<CancellationTokenSource>();\n\n    /// <summary>\n    /// List of Tasks, each task executes the encoding process for one recording.\n    /// </summary>\n    private static readonly List<Task> TaskList = new List<Task>();\n\n    /// <summary>\n    /// List of encoding views, used to update the data without lagging the UI.\n    /// </summary>\n    internal static readonly List<EncoderListViewItem> ViewList = new List<EncoderListViewItem>();\n\n    #endregion\n\n    internal static void StartEncoding(ExportProject project, ExportPreset preset)\n    {\n        //If the user still wants an encoder window, here's when it should be opened.\n        if (UserSettings.All.DisplayEncoder)\n            Application.Current.Dispatcher?.Invoke(() => Encoder.Start(preset.Scale));\n\n        //Creates the Cancellation Token\n        var cancellationTokenSource = new CancellationTokenSource();\n        CancellationTokenList.Add(cancellationTokenSource);\n\n        var context = Application.Current.Dispatcher?.Invoke(TaskScheduler.FromCurrentSynchronizationContext);\n\n        //Creates Task and send the Task Id.\n        var taskId = -1;\n        var task = new Task(async () =>\n        {\n            //ReSharper disable once AccessToModifiedClosure\n            await Encode(project, preset, taskId, cancellationTokenSource);\n\n        }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning);\n        taskId = task.Id;\n\n        #region Error handling\n\n        task.ContinueWith(t =>\n        {\n            var aggregateException = t.Exception;\n            aggregateException?.Handle(exception => true);\n\n            Update(taskId, EncodingStatus.Error, null, false, t.Exception);\n            LogWriter.Log(t.Exception, \"Encoding error.\");\n\n        }, CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, context);\n\n        #endregion\n\n        //Adds the encoding to the list.\n        Encodings.Add(new EncodingItem\n        {\n            Id = taskId,\n            OutputType = preset.Type,\n            Text = LocalizationHelper.Get(\"S.Encoder.Starting\"),\n            FrameCount = project.FrameCount,\n            TokenSource = cancellationTokenSource\n        });\n\n        try\n        {\n            TaskList.Add(task);\n            task.Start();\n        }\n        catch (Exception ex)\n        {\n            ErrorDialog.Ok(\"Task Error\", \"Unable to start the encoding task\", \"A generic error occurred while trying to start the encoding task.\", ex);\n            LogWriter.Log(ex, \"Error while starting the task.\");\n        }\n\n        //Application.Current.Dispatcher.Invoke(() => Refresh(taskId));\n        Application.Current.Dispatcher?.Invoke(() => EncodingAdded(taskId));\n    }\n\n    #region Encoding manipulation\n\n    internal static void Update(int id, int currentFrame, string text)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        item.CurrentFrame = currentFrame;\n        item.Text = text;\n        item.IsIndeterminate = false;\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n    internal static void Update(int id, int currentFrame)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        item.CurrentFrame = currentFrame;\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n    internal static void Update(int id, int type, TimeSpan elapsed)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        switch (type)\n        {\n            case 0: //Analysis.\n                item.TimeToAnalyze = elapsed;\n                break;\n            case 1: //Encoding.\n                item.TimeToEncode = elapsed;\n                break;\n            case 2: //Upload.\n                item.TimeToUpload = elapsed;\n                break;\n            case 3: //Copy.\n                item.TimeToCopy = elapsed;\n                break;\n            case 4: //Execute commands.\n                item.TimeToExecute = elapsed;\n                break;\n        }\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n    internal static void Update(int id, string text, bool isIndeterminate = false, bool findText = false)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        item.Text = !findText ? text : LocalizationHelper.Get(text);\n        item.IsIndeterminate = isIndeterminate;\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n    /// <summary>\n    /// Updates the status of the encoding of a current item.\n    /// </summary>\n    /// <param name=\"status\">The current status.</param>\n    /// <param name=\"id\">The unique ID of the item.</param>\n    /// <param name=\"fileName\">The name of the output file.</param>\n    /// <param name=\"isIndeterminate\">The state of the progress bar.</param>\n    /// <param name=\"exception\">The exception details of the error.</param>\n    /// <param name=\"maxSteps\">Optionally sets the maximum steps of the processing if (<paramref name=\"status\"/> is <see cref=\"EncodingStatus.Processing\"/>).</param>\n    internal static void Update(int id, EncodingStatus status, string fileName = null, bool isIndeterminate = false, Exception exception = null, int? maxSteps = null)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        var wasStatusUpdated = item.Status != status;\n\n        item.Status = status;\n        item.IsIndeterminate = isIndeterminate;\n\n        switch (status)\n        {\n            case EncodingStatus.Processing:\n                item.Text = String.Format(LocalizationHelper.Get(\"S.Encoder.Processing\"), fileName == null ? String.Empty : Path.GetFileName(fileName));\n                if (maxSteps.HasValue)\n                    item.FrameCount = maxSteps.Value;\n                break;\n            case EncodingStatus.Completed:\n            {\n                if (fileName == null)\n                    break;\n\n                if (File.Exists(fileName))\n                {\n                    var fileInfo = new FileInfo(fileName);\n                    fileInfo.Refresh();\n\n                    item.SizeInBytes = fileInfo.Length;\n                    item.OutputFilename = fileName;\n                    item.SavedToDisk = true;\n                }\n\n                break;\n            }\n            case EncodingStatus.Error:\n            {\n                item.Exception = exception;\n                break;\n            }\n        }\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item, wasStatusUpdated));\n    }\n\n    internal static void UpdateMultiple(int id, EncodingStatus status, List<string> fileNames, bool isIndeterminate = false)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        var wasStatusUpdated = item.Status != status;\n\n        item.Status = status;\n        item.IsIndeterminate = isIndeterminate;\n        item.AreMultipleFiles = true;\n\n        if (status == EncodingStatus.Completed && fileNames?.Any() == true)\n        {\n            foreach (var fileInfo in fileNames.Where(File.Exists).Select(fileName => new FileInfo(fileName)))\n            {\n                fileInfo.Refresh();\n\n                item.SizeInBytes += fileInfo.Length;\n            }\n\n            if (item.SizeInBytes > 0)\n            {\n                item.OutputFilename = fileNames.FirstOrDefault();\n                item.SavedToDisk = true;\n            }\n        }\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item, wasStatusUpdated));\n    }\n\n\n    private static void SetUpload(int id, bool uploaded, string link, string deleteLink = null, Exception exception = null)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        item.Uploaded = uploaded;\n        item.UploadLink = link;\n        item.UploadLinkDisplay = !string.IsNullOrWhiteSpace(link) ? link.Replace(\"https:/\", \"\").Replace(\"http:/\", \"\").Trim('/') : link;\n        item.DeletionLink = deleteLink;\n        item.UploadTaskException = exception;\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n    private static void SetCopy(int id, bool copied, Exception exception = null)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        item.CopiedToClipboard = copied;\n        item.CopyTaskException = exception;\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n    private static void SetCommand(int id, bool executed, string command, string output, Exception exception = null)\n    {\n        var item = Encodings.FirstOrDefault(x => x.Id == id);\n\n        if (item == null)\n            return;\n\n        item.CommandExecuted = executed;\n        item.Command = command;\n        item.CommandOutput = output;\n        item.CommandTaskException = exception;\n\n        Application.Current.Dispatcher.Invoke(() => EncodingUpdated(item));\n    }\n\n\n    /// <summary>\n    /// Gets the current status of the encoding of a current item.\n    /// </summary>\n    /// <param name=\"id\">The unique ID of the item.</param>\n    internal static EncodingStatus? GetStatus(int id)\n    {\n        return Encodings.FirstOrDefault(f => f.Id == id)?.Status;\n    }\n\n    private static string GetUploadLink(int id)\n    {\n        return Encodings.FirstOrDefault(f => f.Id == id)?.UploadLink;\n    }\n\n\n    internal static void RemoveEncodings(int id)\n    {\n        RemoveEncodings(e => e.Id == id);\n    }\n\n    internal static void RemoveFinishedEncodings()\n    {\n        RemoveEncodings(p => p.Status != EncodingStatus.Processing);\n    }\n\n    internal static void RemoveEncodings(Predicate<EncodingItem> match)\n    {\n        var list = Encodings.Where(match.Invoke).ToList();\n\n        foreach (var encoding in list)\n        {\n            Encodings.Remove(encoding);\n\n            TaskList.FirstOrDefault(f => f.Id == encoding.Id)?.Dispose();\n            encoding.TokenSource.Dispose();\n\n            TaskList.RemoveAll(r => r.Id == encoding.Id);\n            CancellationTokenList.Remove(encoding.TokenSource);\n\n            EncodingRemoved(encoding.Id);\n        }\n    }\n\n    internal static void StopAllEncodings()\n    {\n        foreach (var tokenSource in CancellationTokenList)\n            tokenSource.Cancel();\n    }\n\n    #endregion\n\n    #region Progress report\n\n    internal static void EncodingAdded(int id)\n    {\n        foreach (var window in Application.Current.Windows.OfType<IEncoding>())\n        {\n            //When set to display the encodings on a separated window, ignore the others (vice-versa).\n            if (!UserSettings.All.DisplayEncoder == window.IsEncoderWindow && Encoder.IsAvailable)\n                continue;\n\n            var view = window.EncodingAdded(id);\n\n            if (view != null)\n                ViewList.Add(view);\n        }\n    }\n\n    internal static void EncodingUpdated(EncodingItem current, bool statusUpdated = false)\n    {\n        foreach (var item in ViewList.Where(w => w.Id == current.Id))\n        {\n            item.Status = current.Status;\n            item.FrameCount = current.FrameCount;\n            item.CurrentFrame = current.CurrentFrame;\n            item.Text = current.Text;\n            item.IsIndeterminate = current.IsIndeterminate;\n            item.SizeInBytes = current.SizeInBytes;\n            item.OutputFilename = current.OutputFilename;\n            item.SavedToDisk = current.SavedToDisk;\n            item.AreMultipleFiles = current.AreMultipleFiles;\n            item.Exception = current.Exception;\n\n            item.Uploaded = current.Uploaded;\n            item.UploadLink = current.UploadLink;\n            item.UploadLinkDisplay = current.UploadLinkDisplay;\n            item.DeletionLink = current.DeletionLink;\n            item.UploadTaskException = current.UploadTaskException;\n\n            item.CopiedToClipboard = current.CopiedToClipboard;\n            item.CopyTaskException = current.CopyTaskException;\n\n            item.CommandExecuted = current.CommandExecuted;\n            item.Command = current.Command;\n            item.CommandOutput = current.CommandOutput;\n            item.CommandTaskException = current.CommandTaskException;\n\n            item.TimeToAnalyze = current.TimeToAnalyze;\n            item.TimeToEncode = current.TimeToEncode;\n            item.TimeToUpload = current.TimeToUpload;\n            item.TimeToCopy = current.TimeToCopy;\n            item.TimeToExecute = current.TimeToExecute;\n        }\n\n        if (!statusUpdated)\n            return;\n\n        foreach (var window in Application.Current.Windows.OfType<IEncoding>())\n        {\n            //When set to display the encodings on a separated window, ignore the others (vice-versa).\n            if (!UserSettings.All.DisplayEncoder == window.IsEncoderWindow && Encoder.IsAvailable)\n                continue;\n\n            window.EncodingUpdated(current.Id, true);\n        }\n    }\n\n    internal static void EncodingRemoved(int id)\n    {\n        foreach (var window in Application.Current.Windows.OfType<IEncoding>())\n        {\n            var view = window.EncodingRemoved(id);\n\n            if (view != null)\n                ViewList.Remove(view);\n        }\n    }\n\n    internal static void MoveEncodingsToPopups()\n    {\n        foreach (var window in Application.Current.Windows.OfType<IEncoding>())\n        {\n            //Only send this message to editors.\n            if (window.IsEncoderWindow)\n                continue;\n\n            window.EncodingUpdated(null, false);\n        }\n    }\n\n    #endregion\n\n    #region Encoding\n\n    private static async Task Encode(ExportProject project, ExportPreset preset, int id, CancellationTokenSource tokenSource)\n    {\n        var processing = LocalizationHelper.Get(\"S.Encoder.Processing\");\n        var watch = new Stopwatch();\n        watch.Start();\n\n        try\n        {\n            #region File naming\n\n            if (preset.PickLocation)\n            {\n                preset.FullPath = Path.Combine(preset.OutputFolder, preset.ResolvedFilename + (preset.Extension ?? preset.DefaultExtension));\n            }\n            else\n            {\n                preset.OutputFolder = Path.GetTempPath(); //Get path where the cache is stored instead.\n                preset.OutputFilename = Guid.NewGuid() + preset.Extension;\n                preset.FullPath = Path.Combine(preset.OutputFolder, preset.OutputFilename);\n\n                //If somehow this happens, try again. TODO: File should be created on the spot, to properly prevent this issue.\n                if (File.Exists(Path.Combine(preset.OutputFilename, preset.OutputFilename)))\n                {\n                    preset.OutputFilename = Guid.NewGuid() + preset.Extension;\n                    preset.FullPath = Path.Combine(preset.OutputFolder, preset.OutputFilename);\n                }\n            }\n\n            #endregion\n\n            switch (preset.Type)\n            {\n                case ExportFormats.Apng:\n                {\n                    #region Apng\n\n                    switch (preset.Encoder)\n                    {\n                        case EncoderTypes.ScreenToGif:\n                        {\n                            if (preset is not EmbeddedApngPreset embApngPreset)\n                                return;\n\n                            #region Cut/Paint Unchanged Pixels\n\n                            if (embApngPreset.DetectUnchanged)\n                            {\n                                Update(id, 0, LocalizationHelper.Get(\"S.Encoder.Analyzing\"));\n\n                                if (embApngPreset.PaintTransparent)\n                                    project.FramesFiles = ImageMethods.PaintTransparentAndCut(project.FramesFiles, Colors.Transparent, id, tokenSource);\n                                else\n                                    project.FramesFiles = ImageMethods.CutUnchanged(project.FramesFiles, id, tokenSource);\n\n                                Update(id, 0, watch.Elapsed);\n                                watch.Restart();\n                            }\n                            else\n                            {\n                                var size = project.FramesFiles[0].Path.ScaledSize();\n                                project.FramesFiles.ForEach(x => x.Rect = new Int32Rect(0, 0, (int)size.Width, (int)size.Height));\n                            }\n\n                            #endregion\n\n                            #region Encoding\n\n                            using (var stream = new MemoryStream())\n                            {\n                                var frameCount = project.FramesFiles.Count(x => x.HasArea);\n\n                                using (var encoder = new Apng(stream, frameCount, embApngPreset.Looped && project.FrameCount > 1 ? (embApngPreset.RepeatForever ? 0 : embApngPreset.RepeatCount) : 1))\n                                {\n                                    for (var i = 0; i < project.FramesFiles.Count; i++)\n                                    {\n                                        if (!project.FramesFiles[i].HasArea && embApngPreset.DetectUnchanged)\n                                            continue;\n\n                                        if (project.FramesFiles[i].Delay == 0)\n                                            project.FramesFiles[i].Delay = 10;\n\n                                        encoder.AddFrame(project.FramesFiles[i].Path, project.FramesFiles[i].Rect, project.FramesFiles[i].Delay);\n\n                                        Update(id, i, string.Format(processing, i));\n\n                                        #region Cancellation\n\n                                        if (tokenSource.Token.IsCancellationRequested)\n                                        {\n                                            Update(id, EncodingStatus.Canceled);\n                                            break;\n                                        }\n\n                                        #endregion\n                                    }\n                                }\n\n                                try\n                                {\n                                    using (var fileStream = new FileStream(embApngPreset.FullPath, FileMode.Create, FileAccess.Write, FileShare.None, 4096))\n                                        stream.WriteTo(fileStream);\n                                }\n                                catch (Exception ex)\n                                {\n                                    Update(id, EncodingStatus.Error);\n                                    LogWriter.Log(ex, \"Apng Encoding\");\n                                }\n                            }\n\n                            #endregion\n\n                            break;\n                        }\n\n                        case EncoderTypes.FFmpeg:\n                        {\n                            await EncodeWithFfmpeg(preset, project.FramesFiles, id, tokenSource, processing);\n                            break;\n                        }\n                    }\n\n                    Update(id, 1, watch.Elapsed);\n                    watch.Restart();\n\n                    break;\n\n                    #endregion\n                }\n                case ExportFormats.Gif:\n                {\n                    #region Gif\n\n                    switch (preset.Encoder)\n                    {\n                        case EncoderTypes.ScreenToGif:\n\n                            #region Frame analysis\n\n                            Update(id, 0, LocalizationHelper.Get(\"S.Encoder.Analyzing\"));\n\n                            if (preset is not EmbeddedGifPreset embGifPreset)\n                                return;\n\n                            if (embGifPreset.EnableTransparency)\n                            {\n                                ImageMethods.PaintAndCutForTransparency(project, embGifPreset.SelectTransparencyColor ? embGifPreset.TransparencyColor : new Color?(), embGifPreset.ChromaKey, id, tokenSource);\n                            }\n                            else if (embGifPreset.DetectUnchanged)\n                            {\n                                if (embGifPreset.PaintTransparent)\n                                    ImageMethods.PaintTransparentAndCut(project, embGifPreset.ChromaKey, id, tokenSource);\n                                else\n                                    ImageMethods.CutUnchanged(project, id, tokenSource);\n                            }\n\n                            Update(id, 0, watch.Elapsed);\n                            watch.Restart();\n\n                            if (tokenSource.Token.IsCancellationRequested)\n                            {\n                                Update(id, EncodingStatus.Canceled);\n                                return;\n                            }\n\n                            #endregion\n\n                            #region ScreenToGif encoding\n\n                            using (var stream = new MemoryStream())\n                            {\n                                using (var encoder = new GifFile(stream))\n                                {\n                                    encoder.RepeatCount = embGifPreset.Looped && project.FrameCount > 1 ? (embGifPreset.RepeatForever ? 0 : embGifPreset.RepeatCount) : -1;\n                                    encoder.UseGlobalColorTable = embGifPreset.UseGlobalColorTable;\n                                    encoder.TransparentColor = embGifPreset.EnableTransparency && embGifPreset.SelectTransparencyColor ? Color.FromArgb(0, embGifPreset.TransparencyColor.R, embGifPreset.TransparencyColor.G, embGifPreset.TransparencyColor.B) :\n                                        (embGifPreset.DetectUnchanged && embGifPreset.PaintTransparent) || embGifPreset.EnableTransparency ? Color.FromArgb(0, embGifPreset.ChromaKey.R, embGifPreset.ChromaKey.G, embGifPreset.ChromaKey.B) :\n                                        new Color?();\n                                    encoder.MaximumNumberColor = embGifPreset.MaximumColorCount;\n                                    encoder.UseFullTransparency = embGifPreset.EnableTransparency;\n                                    encoder.QuantizationType = embGifPreset.Quantizer;\n                                    encoder.SamplingFactor = embGifPreset.SamplingFactor;\n\n                                    //Get the last index, in cases where the last frames have no changes.\n                                    var last = project.FramesFiles.FindLastIndex(f => f.HasArea);\n\n                                    //Read the frames pixels from the cache.\n                                    using (var fileStream = new FileStream(project.ChunkPath, FileMode.Open, FileAccess.Read, FileShare.Read))\n                                    {\n                                        Update(id, 0, string.Format(processing, 0));\n\n                                        for (var i = 0; i < project.Frames.Count; i++)\n                                        {\n                                            if (!project.Frames[i].HasArea && embGifPreset.DetectUnchanged)\n                                                continue;\n\n                                            if (project.Frames[i].Delay == 0)\n                                                project.Frames[i].Delay = 10;\n\n                                            fileStream.Position = project.Frames[i].DataPosition;\n                                            encoder.AddFrame(fileStream.ReadBytes((int)project.Frames[i].DataLength), project.Frames[i].Rect, project.Frames[i].Delay, last == i);\n\n                                            Update(id, i, string.Format(processing, i));\n\n                                            #region Cancellation\n\n                                            if (tokenSource.Token.IsCancellationRequested)\n                                            {\n                                                Update(id, EncodingStatus.Canceled);\n                                                break;\n                                            }\n\n                                            #endregion\n                                        }\n                                    }\n                                }\n\n                                try\n                                {\n                                    using (var fileStream = new FileStream(preset.FullPath, FileMode.Create, FileAccess.Write, FileShare.None, 4096))\n                                        stream.WriteTo(fileStream);\n                                }\n                                catch (Exception ex)\n                                {\n                                    Update(id, EncodingStatus.Error);\n                                    LogWriter.Log(ex, \"Improved Encoding\");\n                                }\n                            }\n\n                            #endregion\n\n                            break;\n\n                        case EncoderTypes.KGySoft:\n                            if (preset is not KGySoftGifPreset kgySoftGifPreset)\n                                return;\n\n                            await EncodeKGySoftGif(kgySoftGifPreset, project.FramesFiles, id, tokenSource.Token);\n                            break;\n\n                        case EncoderTypes.System:\n\n                            #region System encoding\n\n                            if (preset is not SystemGifPreset systemGifPreset)\n                                return;\n\n                            using (var stream = new MemoryStream())\n                            {\n                                using (var encoder = new LegacyGifEncoder(stream, null, null, systemGifPreset.Looped && project.FrameCount > 1 ? (systemGifPreset.RepeatForever ? 0 : systemGifPreset.RepeatCount) : -1))\n                                {\n                                    for (var i = 0; i < project.FramesFiles.Count; i++)\n                                    {\n                                        var bitmapAux = new Bitmap(project.FramesFiles[i].Path);\n                                        encoder.AddFrame(bitmapAux, 0, 0, TimeSpan.FromMilliseconds(project.FramesFiles[i].Delay));\n                                        bitmapAux.Dispose();\n\n                                        Update(id, i, string.Format(processing, i));\n\n                                        #region Cancellation\n\n                                        if (tokenSource.Token.IsCancellationRequested)\n                                        {\n                                            Update(id, EncodingStatus.Canceled);\n                                            break;\n                                        }\n\n                                        #endregion\n                                    }\n                                }\n\n                                stream.Position = 0;\n\n                                try\n                                {\n                                    using (var fileStream = new FileStream(systemGifPreset.FullPath, FileMode.Create, FileAccess.Write, FileShare.None, Constants.BufferSize, false))\n                                        stream.WriteTo(fileStream);\n                                }\n                                catch (Exception ex)\n                                {\n                                    Update(id, EncodingStatus.Error);\n                                    LogWriter.Log(ex, \"Encoding with paint.Net.\");\n                                }\n                            }\n\n                            #endregion\n\n                            break;\n\n                        case EncoderTypes.FFmpeg:\n                            await EncodeWithFfmpeg(preset, project.FramesFiles, id, tokenSource, processing);\n                            break;\n\n                        case EncoderTypes.Gifski:\n                        {\n                            #region Gifski encoding\n\n                            Update(id, EncodingStatus.Processing, null, true);\n\n                            if (preset is not GifskiGifPreset gifskiGifPreset)\n                                return;\n\n                            if (!PathHelper.IsGifskiPresent())\n                                throw new ApplicationException(\"Gifski not present.\");\n\n                            if (File.Exists(preset.FullPath))\n                                File.Delete(preset.FullPath);\n\n                            var size = project.FramesFiles[0].Path.ScaledSize();\n\n                            try\n                            {\n                                using var gifski = new GifskiInterop();\n                                var handle = gifski.Start((uint)size.Width, (uint)size.Height, gifskiGifPreset.Quality, gifskiGifPreset.RepeatForever, gifskiGifPreset.Fast);\n\n                                if (gifski.IsOlderThan0Dot9)\n                                {\n                                    #region Older\n\n                                    ThreadPool.QueueUserWorkItem(delegate\n                                    {\n                                        Thread.Sleep(500);\n\n                                        if (GetStatus(id) == EncodingStatus.Error)\n                                            return;\n\n                                        Update(id, EncodingStatus.Processing, null, false);\n\n                                        GifskiErrorCodes res;\n\n                                        try\n                                        {\n                                            for (var i = 0; i < project.FramesFiles.Count; i++)\n                                            {\n                                                #region Cancellation\n\n                                                if (tokenSource.Token.IsCancellationRequested)\n                                                {\n                                                    Update(id, EncodingStatus.Canceled);\n                                                    break;\n                                                }\n\n                                                #endregion\n\n                                                Update(id, i, string.Format(processing, i));\n\n                                                res = gifski.AddFrame(handle, (uint)i, project.FramesFiles[i].Path, project.FramesFiles[i].Delay);\n\n                                                if (res != GifskiErrorCodes.Ok)\n                                                    throw new Exception(\"Error while adding frames with Gifski. \" + res, new Win32Exception(res.ToString())) { HelpLink = $\"Result:\\n\\r{Marshal.GetLastWin32Error()}\" };\n                                            }\n\n                                            res = gifski.EndAdding(handle);\n\n                                            if (res != GifskiErrorCodes.Ok)\n                                                throw new Exception(\"Error while finishing adding frames with Gifski. \" + res, new Win32Exception(res.ToString())) { HelpLink = $\"Result:\\n\\r{Marshal.GetLastWin32Error()}\" };\n                                        }\n                                        catch (Exception eee)\n                                        {\n                                            LogWriter.Log(eee, \"encode with gifski\");\n                                        }\n\n                                    }, null);\n\n                                    gifski.End(handle, gifskiGifPreset.FullPath);\n\n                                    #endregion\n                                }\n                                else\n                                {\n                                    #region Version 0.9.3 and newer\n\n                                    var res = gifski.SetOutput(handle, gifskiGifPreset.FullPath);\n\n                                    if (res != GifskiErrorCodes.Ok)\n                                        throw new Exception(\"Error while setting output with Gifski. \" + res, new Win32Exception()) { HelpLink = $\"Result:\\n\\r{Marshal.GetLastWin32Error()}\" };\n\n                                    Thread.Sleep(500);\n\n                                    if (GetStatus(id) == EncodingStatus.Error)\n                                        return;\n\n                                    Update(id, EncodingStatus.Processing, null, false);\n\n                                    var lastDelay = project.FramesFiles[project.FramesFiles.Count - 1].Delay / 1000d;\n\n                                    for (var i = 0; i < project.FramesFiles.Count; i++)\n                                    {\n                                        #region Cancellation\n\n                                        if (tokenSource.Token.IsCancellationRequested)\n                                        {\n                                            Update(id, EncodingStatus.Canceled);\n                                            break;\n                                        }\n\n                                        #endregion\n\n                                        Update(id, i, string.Format(processing, i));\n\n                                        System.Diagnostics.Debug.WriteLine($\"Frame: {i}\");\n\n                                        res = gifski.AddFrame(handle, (uint)i, project.FramesFiles[i].Path, project.FramesFiles[i].Delay, lastDelay, i + 1 == project.FramesFiles.Count);\n\n                                        System.Diagnostics.Debug.WriteLine($\"Ok: {i}\");\n\n                                        if (res != GifskiErrorCodes.Ok)\n                                            throw new Exception(\"Error while adding frames with Gifski. \" + res, new Win32Exception(res.ToString())) { HelpLink = $\"Result:\\n\\r{Marshal.GetLastWin32Error()}\" };\n                                    }\n\n                                    Update(id, EncodingStatus.Processing, null, false);\n\n                                    gifski.EndAdding(handle);\n\n                                    #endregion\n                                }\n                            }\n                            catch (Exception exx)\n                            {\n                                LogWriter.Log(exx, \"gifski\");\n                            }\n\n                            var fileInfo2 = new FileInfo(gifskiGifPreset.FullPath);\n\n                            if (!fileInfo2.Exists || fileInfo2.Length == 0)\n                                throw new Exception(\"Error while encoding the gif with Gifski. Empty output file.\", new Win32Exception()) { HelpLink = $\"Result:\\n\\r{Marshal.GetLastWin32Error()}\" };\n\n                            #endregion\n\n                            break;\n                        }\n\n                        default:\n                            throw new Exception(\"Undefined Gif encoder type\");\n                    }\n\n                    Update(id, 1, watch.Elapsed);\n                    watch.Restart();\n\n                    break;\n\n                    #endregion\n                }\n\n                case ExportFormats.Bmp:\n                case ExportFormats.Jpeg:\n                case ExportFormats.Png:\n                {\n                    if (preset is not ImagePreset imagePreset)\n                        return;\n\n                    var padLength = project.FramesFiles.Select(s => s.Index).Max().ToString().Length;\n\n                    if (!imagePreset.ZipFiles)\n                    {\n                        var frameList = new List<string>();\n\n                        foreach (var frame in project.FramesFiles)\n                        {\n                            var path = Path.Combine(preset.OutputFolder, $\"{preset.ResolvedFilename}-{frame.Index.ToString().PadLeft(padLength, '0')}{preset.Extension ?? preset.DefaultExtension}\");\n\n                            if (File.Exists(path))\n                                File.Delete(path);\n\n                            Update(id, frame.Index, string.Format(processing, frame.Index));\n\n                            switch (preset.Type)\n                            {\n                                case ExportFormats.Bmp:\n                                {\n                                    using var fileStream = new FileStream(path, FileMode.Create);\n                                    var bmpEncoder = new BmpBitmapEncoder();\n                                    bmpEncoder.Frames.Add(BitmapFrame.Create(frame.Path.SourceFrom()));\n                                    bmpEncoder.Save(fileStream);\n\n                                    break;\n                                }\n                                case ExportFormats.Jpeg:\n                                {\n                                    using var fileStream = new FileStream(path, FileMode.Create);\n                                    var jpgEncoder = new JpegBitmapEncoder { QualityLevel = 100 };\n                                    jpgEncoder.Frames.Add(BitmapFrame.Create(frame.Path.SourceFrom()));\n                                    jpgEncoder.Save(fileStream);\n\n                                    break;\n                                }\n                                case ExportFormats.Png:\n                                {\n                                    File.Copy(frame.Path, path, true);\n                                    break;\n                                }\n                            }\n\n                            frameList.Add(path);\n                        }\n\n                        UpdateMultiple(id, EncodingStatus.Completed, frameList);\n                        return;\n                    }\n                    else\n                    {\n                        var fileName = Path.Combine(preset.OutputFolder, preset.ResolvedFilename + \".zip\");\n\n                        if (File.Exists(fileName))\n                            File.Delete(fileName);\n\n                        //Temporary folder.\n                        var outPath = Path.Combine(project.Path, \"Export\");\n\n                        if (Directory.Exists(outPath))\n                            Directory.Delete(outPath, true);\n\n                        var dir = Directory.CreateDirectory(outPath);\n\n                        //Get files.\n                        foreach (var frame in project.FramesFiles)\n                        {\n                            switch (preset.Type)\n                            {\n                                case ExportFormats.Bmp:\n                                {\n                                    var path = Path.Combine(dir.FullName, $\"{frame.Index.ToString().PadLeft(padLength, '0')}.bmp\");\n\n                                    using (var fileStream = new FileStream(path, FileMode.Create))\n                                    {\n                                        var bmpEncoder = new BmpBitmapEncoder();\n                                        bmpEncoder.Frames.Add(BitmapFrame.Create(frame.Path.SourceFrom()));\n                                        bmpEncoder.Save(fileStream);\n                                    }\n\n                                    break;\n                                }\n                                case ExportFormats.Jpeg:\n                                {\n                                    var path = Path.Combine(dir.FullName, $\"{frame.Index.ToString().PadLeft(padLength, '0')}.jpg\");\n\n                                    using (var fileStream = new FileStream(path, FileMode.Create))\n                                    {\n                                        var jpgEncoder = new JpegBitmapEncoder { QualityLevel = 100 };\n                                        jpgEncoder.Frames.Add(BitmapFrame.Create(frame.Path.SourceFrom()));\n                                        jpgEncoder.Save(fileStream);\n                                    }\n\n                                    break;\n                                }\n                                case ExportFormats.Png:\n                                {\n                                    var path = Path.Combine(dir.FullName, $\"{frame.Index.ToString().PadLeft(padLength, '0')}.png\");\n\n                                    File.Copy(frame.Path, path, true);\n                                    break;\n                                }\n                            }\n                        }\n\n                        //Create Zip and clear temporary folder.\n                        ZipFile.CreateFromDirectory(dir.FullName, fileName);\n                        Directory.Delete(dir.FullName, true);\n                    }\n\n                    break;\n                }\n\n                case ExportFormats.Webp:\n                case ExportFormats.Avif:\n                case ExportFormats.Avi:\n                case ExportFormats.Mov:\n                case ExportFormats.Mp4:\n                case ExportFormats.Mkv:\n                case ExportFormats.Webm:\n                {\n                    #region FFmpeg\n\n                    await EncodeWithFfmpeg(preset, project.FramesFiles, id, tokenSource, processing);\n\n                    Update(id, 1, watch.Elapsed);\n                    watch.Restart();\n\n                    break;\n\n                    #endregion\n                }\n\n                case ExportFormats.Psd:\n                {\n                    #region Psd\n\n                    if (preset is not PsdPreset psdPreset)\n                        return;\n\n                    using (var stream = new MemoryStream())\n                    {\n                        using (var encoder = new Psd(stream, psdPreset.Height, psdPreset.Width, psdPreset.CompressImage, psdPreset.SaveTimeline))\n                        {\n                            for (var i = 0; i < project.FramesFiles.Count; i++)\n                            {\n                                if (project.FramesFiles[i].Delay == 0)\n                                    project.FramesFiles[i].Delay = 10;\n\n                                encoder.AddFrame(i, project.FramesFiles[i].Path, project.FramesFiles[i].Delay);\n\n                                Update(id, i, string.Format(processing, i));\n\n                                #region Cancellation\n\n                                if (tokenSource.Token.IsCancellationRequested)\n                                {\n                                    Update(id, EncodingStatus.Canceled);\n                                    break;\n                                }\n\n                                #endregion\n                            }\n                        }\n\n                        using (var fileStream = new FileStream(psdPreset.FullPath, FileMode.Create, FileAccess.Write, FileShare.None, 4096))\n                            stream.WriteTo(fileStream);\n                    }\n\n                    Update(id, 1, watch.Elapsed);\n                    watch.Restart();\n\n                    break;\n\n                    #endregion\n                }\n                case ExportFormats.Stg:\n                {\n                    #region Project\n\n                    if (preset is not StgPreset stgPreset)\n                        return;\n\n                    Update(id, EncodingStatus.Processing, null, true);\n                    Update(id, 0, LocalizationHelper.Get(\"S.Encoder.CreatingFile\"));\n\n                    if (File.Exists(stgPreset.FullPath))\n                        File.Delete(stgPreset.FullPath);\n\n                    ZipFile.CreateFromDirectory(Path.GetDirectoryName(project.FramesFiles[0].Path), stgPreset.FullPath, stgPreset.CompressionLevel, false);\n\n                    Update(id, 1, watch.Elapsed);\n                    watch.Restart();\n\n                    break;\n\n                    #endregion\n                }\n\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(preset));\n            }\n\n            //If it was canceled, try deleting the file.\n            if (tokenSource.Token.IsCancellationRequested)\n            {\n                if (File.Exists(preset.FullPath))\n                    File.Delete(preset.FullPath);\n\n                Update(id, EncodingStatus.Canceled);\n                return;\n            }\n\n            #region Upload\n\n            if (preset.UploadFile && File.Exists(preset.FullPath))\n            {\n                Update(id, \"S.Encoder.Uploading\", true, true);\n\n                try\n                {\n                    //Get selected preset.\n                    var presetType = preset.Extension == \".zip\" ? ExportFormats.Zip : preset.Type;\n                    var uploadPreset = UserSettings.All.UploadPresets.OfType<UploadPreset>().FirstOrDefault(f => (f.AllowedTypes.Count == 0 || f.AllowedTypes.Contains(presetType)) && f.Title == preset.UploadService);\n\n                    if (uploadPreset == null)\n                        throw new Exception($\"Missing upload preset called {preset.UploadService}\");\n\n                    //TODO: Limit upload by imposed service limits.\n\n                    //Try uploading to the selected service.\n                    var cloud = CloudFactory.CreateCloud(uploadPreset.Type);\n                    var history = await cloud.UploadFileAsync(uploadPreset, preset.FullPath, CancellationToken.None);\n\n                    uploadPreset.History.Add(history);\n                    UserSettings.Save();\n\n                    if (history.Result != 200)\n                        throw new Exception(history.Message);\n\n                    SetUpload(id, true, history.GetLink(uploadPreset), history.DeletionLink);\n                }\n                catch (Exception e)\n                {\n                    LogWriter.Log(e, \"It was not possible to upload.\");\n                    SetUpload(id, false, null, null, e);\n                }\n                finally\n                {\n                    Update(id, 2, watch.Elapsed);\n                    watch.Restart();\n                }\n            }\n\n            #endregion\n\n            #region Copy to clipboard\n\n            if (preset.SaveToClipboard && File.Exists(preset.FullPath))\n            {\n                Application.Current.Dispatcher.Invoke(() =>\n                {\n                    try\n                    {\n                        var data = new DataObject();\n\n                        switch (preset.CopyType)\n                        {\n                            case CopyModes.File:\n                                //data.SetData(DataFormats.GetDataFormat(\"GIF\").Name, System.Drawing.Image.FromFile(param.Filename));\n                                data.SetFileDropList(new StringCollection { preset.FullPath });\n                                break;\n                            case CopyModes.FolderPath:\n                                data.SetText(Path.GetDirectoryName(preset.FullPath) ?? preset.FullPath, TextDataFormat.UnicodeText);\n                                break;\n                            case CopyModes.Link:\n                                var link = GetUploadLink(id);\n\n                                data.SetText(string.IsNullOrEmpty(link) ? preset.FullPath : link, TextDataFormat.UnicodeText);\n                                break;\n                            default:\n                                data.SetText(preset.FullPath, TextDataFormat.UnicodeText);\n                                break;\n                        }\n\n                        //It tries to set the data to the clipboard 10 times before failing it to do so.\n                        //This issue may happen if the clipboard is opened by any clipboard manager.\n                        for (var i = 0; i < 10; i++)\n                        {\n                            try\n                            {\n                                System.Windows.Clipboard.SetDataObject(data, true);\n                                break;\n                            }\n                            catch (COMException ex)\n                            {\n                                if ((uint)ex.ErrorCode != 0x800401D0) //CLIPBRD_E_CANT_OPEN\n                                    throw;\n                            }\n\n                            Thread.Sleep(100);\n                        }\n\n                        SetCopy(id, true);\n                    }\n                    catch (Exception e)\n                    {\n                        LogWriter.Log(e, \"It was not possible to copy the file.\");\n                        SetCopy(id, false, e);\n                    }\n                });\n\n                Update(id, 3, watch.Elapsed);\n                watch.Restart();\n            }\n\n            #endregion\n\n            #region Execute commands\n\n#if !FULL_MULTI_MSIX_STORE\n\n            if (preset.ExecuteCustomCommands && !string.IsNullOrWhiteSpace(preset.CustomCommands))\n            {\n                Update(id, \"S.Encoder.Executing\", true, true);\n\n                var command = preset.CustomCommands.Replace(\"{p}\", \"\\\"\" + preset.FullPath + \"\\\"\").Replace(\"{f}\", \"\\\"\" + Path.GetDirectoryName(preset.OutputFolder) + \"\\\"\").Replace(\"{u}\", \"\\\"\" + GetUploadLink(id) + \"\\\"\");\n                var output = \"\";\n\n                try\n                {\n                    foreach (var com in command.Split(['\\n'], StringSplitOptions.RemoveEmptyEntries))\n                    {\n                        var procStartInfo = new ProcessStartInfo(\"cmd\", \"/c \" + com)\n                        {\n                            RedirectStandardOutput = true,\n                            RedirectStandardError = true,\n                            UseShellExecute = false,\n                            CreateNoWindow = true\n                        };\n\n                        using (var process = new Process())\n                        {\n                            process.StartInfo = procStartInfo;\n                            process.Start();\n\n                            var message = await process.StandardOutput.ReadToEndAsync();\n                            var error = await process.StandardError.ReadToEndAsync();\n\n                            if (!string.IsNullOrWhiteSpace(message))\n                                output += message + Environment.NewLine;\n\n                            if (!string.IsNullOrWhiteSpace(error))\n                            {\n                                output += error + Environment.NewLine;\n                                throw new Exception(output);\n                            }\n\n                            process.WaitForExit(1000);\n                        }\n                    }\n\n                    SetCommand(id, true, command, output);\n                }\n                catch (Exception e)\n                {\n                    LogWriter.Log(e, \"It was not possible to run the post encoding command.\");\n                    SetCommand(id, false, command, output, e);\n                }\n                finally\n                {\n                    Update(id, 4, watch.Elapsed);\n                    watch.Restart();\n                }\n            }\n\n#endif\n\n            #endregion\n\n            if (!tokenSource.Token.IsCancellationRequested)\n                Update(id, EncodingStatus.Completed, preset.FullPath);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Encode\");\n\n            Update(id, EncodingStatus.Error, null, false, ex);\n        }\n        finally\n        {\n            watch.Stop();\n\n            #region Delete the encoder folder\n\n            try\n            {\n                var folder = Path.GetDirectoryName(project.UsesFiles ? project.FramesFiles[0].Path : project.ChunkPath);\n\n                if (!string.IsNullOrEmpty(folder))\n                    if (Directory.Exists(folder))\n                        Directory.Delete(folder, true);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Cleaning the encoder folder\");\n            }\n\n            #endregion\n\n            GC.Collect();\n        }\n    }\n\n    private static async Task EncodeKGySoftGif(KGySoftGifPreset preset, IList<IFrame> frames, int id, CancellationToken cancellationToken)\n    {\n        #region Local Methods\n\n        IEnumerable<IReadableBitmapData> FramesIterator()\n        {\n            for (int i = 0; i < frames.Count; i++)\n            {\n                Update(id, i);\n                using var bitmap = new Bitmap(frames[i].Path);\n                using var bitmapData = bitmap.GetReadableBitmapData();\n                yield return bitmapData;\n            }\n        }\n\n        #endregion\n\n        // A little cheating for PingPong mode: though the encoder could handle it, we convert it explicitly to a simple forward loop so\n        // we can update the progress in FramesIterator and don't need to pass a DrawingProgress implementation to TaskConfig.Progress\n        var animationMode = (AnimationMode)preset.RepeatCount;\n\n        if (animationMode == AnimationMode.PingPong)\n        {\n            animationMode = AnimationMode.Repeat;\n\n            for (int i = frames.Count - 2; i > 0; i--)\n                frames.Add(frames[i]);\n        }\n\n        Update(id, EncodingStatus.Processing, maxSteps: frames.Count);\n        var config = new AnimatedGifConfiguration(FramesIterator(), frames.Select(f => TimeSpan.FromMilliseconds(f.Delay)))\n        {\n            AllowDeltaFrames = preset.AllowDeltaFrames,\n            AllowClippedFrames = preset.AllowClippedFrames,\n            AnimationMode = animationMode,\n            DeltaTolerance = preset.DeltaTolerance,\n            SizeHandling = AnimationFramesSizeHandling.Center,\n            Quantizer = QuantizerDescriptor.Create(preset.QuantizerId, preset),\n            Ditherer = DithererDescriptor.Create(preset.DithererId, preset),\n        };\n\n        await using var stream = File.Create(preset.FullPath, Constants.BufferSize);\n        await KGySoftGifEncoder.EncodeAnimationAsync(config, stream, new TaskConfig\n        {\n            CancellationToken = cancellationToken,\n            ThrowIfCanceled = false\n        });\n\n        if (!cancellationToken.IsCancellationRequested)\n            await stream.FlushAsync(cancellationToken);\n    }\n\n    private static async Task EncodeWithFfmpeg(ExportPreset preset, List<IFrame> listFrames, int id, CancellationTokenSource tokenSource, string processing)\n    {\n        Update(id, EncodingStatus.Processing, null, true);\n\n        if (!await PathHelper.IsFfmpegPresent())\n            throw new ApplicationException(\"FFmpeg not present.\");\n\n        if (File.Exists(preset.FullPath))\n            File.Delete(preset.FullPath);\n\n        #region Generate concat\n\n        var concat = new StringBuilder();\n        foreach (var frame in listFrames)\n        {\n            concat.AppendLine(\"file '\" + frame.Path + \"'\");\n            concat.AppendLine(\"duration \" + (frame.Delay / 1000d).ToString(CultureInfo.InvariantCulture));\n        }\n\n        if (preset.Type is not ExportFormats.Gif or ExportFormats.Apng or ExportFormats.Webp or ExportFormats.Avif)\n        {\n            //Fix for last frame.\n            concat.AppendLine(\"file '\" + listFrames.LastOrDefault()?.Path + \"'\");\n            concat.AppendLine(\"duration 0\");\n        }\n\n        var concatPath = Path.GetDirectoryName(listFrames[0].Path) ?? Path.GetTempPath();\n        var concatFile = Path.Combine(concatPath, \"concat.txt\");\n\n        if (!Directory.Exists(concatPath))\n            Directory.CreateDirectory(concatPath);\n\n        if (File.Exists(concatFile))\n            File.Delete(concatFile);\n\n        File.WriteAllText(concatFile, concat.ToString());\n\n        #endregion\n\n        var firstPass = \"\";\n        var secondPass = \"\";\n        //TODO: Adapt the code to support v4 or v6\n        switch (preset.Type)\n        {\n            case ExportFormats.Gif:\n            {\n                #region Gif\n\n                if (preset is not FfmpegGifPreset gifPreset)\n                    return;\n\n                //ffmpeg -vsync 0 {I} -loop 0 -lavfi palettegen=stats_mode=single[pal],[0:v][pal]paletteuse=new=1:dither=sierra2_4a:diff_mode=rectangle -f gif {O}\n                if (gifPreset.SettingsMode == VideoSettingsModes.Advanced)\n                    firstPass = gifPreset.Parameters.Replace(\"\\n\", \" \").Replace(\"\\r\", \"\");\n                else\n                {\n                    //Input and loop.\n                    firstPass += \"{I} \";\n                    firstPass += $\"-loop {(gifPreset.Looped ? gifPreset.RepeatForever ? 0 : gifPreset.RepeatCount : -1)} \";\n\n                    //Palette and dither. Does not work properly: (gifPreset.UseGlobalColorTable ? \"diff\" : \"single\")\n                    firstPass += $\"-lavfi palettegen=stats_mode=diff[pal],[0:v][pal]paletteuse={(gifPreset.UseGlobalColorTable ? \"\" : \"new=1:\")}\";\n                    firstPass += $\"dither={gifPreset.Dither.GetDescription()}\";\n                    firstPass += (gifPreset.Dither == DitherMethods.Bayer ? $\":bayer_scale={gifPreset.BayerScale}\" : \"\");\n                    firstPass += \":diff_mode=rectangle \";\n\n                    //Pixel format.\n                    if (gifPreset.PixelFormat != VideoPixelFormats.Auto)\n                        firstPass += $\"-pix_fmt {gifPreset.PixelFormat.GetLowerDescription()} \";\n\n                    //Framerate.\n                    if (gifPreset.Framerate != Framerates.Auto)\n                        firstPass += $\"-r {(gifPreset.Framerate == Framerates.Custom ? gifPreset.CustomFramerate.ToString(CultureInfo.InvariantCulture) : gifPreset.Framerate.GetLowerDescription())} \";\n\n                    //Format and output.\n                    firstPass += \"-f gif \";\n\n                    //Vsync\n                    if (gifPreset.Vsync != Vsyncs.Off)\n                    {\n                        if (UserSettings.All.HasOlderFfmpegVersion)\n                            firstPass += \"-fps_mode \" + gifPreset.Vsync.GetLowerDescription();\n                        else\n                            firstPass += \"-vsync \" + gifPreset.Vsync.GetLowerDescription();\n                    }\n\n                    firstPass += \" {O}\";\n                }\n\n                break;\n\n                #endregion\n            }\n            case ExportFormats.Apng:\n            {\n                #region Apng\n\n                if (preset is not FfmpegApngPreset apngPreset)\n                    return;\n\n                //ffmpeg -vsync 0 {I} -pred mixed -plays 0 -f apng {O}\n                if (apngPreset.SettingsMode == VideoSettingsModes.Advanced)\n                    firstPass = apngPreset.Parameters.Replace(\"\\n\", \" \").Replace(\"\\r\", \"\");\n                else\n                {\n                    //Input and loop.\n                    firstPass += \"{I} \";\n                    firstPass += $\"-plays {(apngPreset.Looped ? apngPreset.RepeatForever ? 0 : apngPreset.RepeatCount : -1)} \";\n\n                    //Prediction method.\n                    if (apngPreset.PredictionMethod != PredictionMethods.None)\n                        firstPass += $\"-pred {apngPreset.PredictionMethod.ToString().ToLower()} \";\n\n                    //Pixel format.\n                    if (apngPreset.PixelFormat != VideoPixelFormats.Auto)\n                        firstPass += $\"-pix_fmt {apngPreset.PixelFormat.GetLowerDescription()} \";\n\n                    //Framerate.\n                    if (apngPreset.Framerate != Framerates.Auto)\n                        firstPass += $\"-r {(apngPreset.Framerate == Framerates.Custom ? apngPreset.CustomFramerate.ToString(CultureInfo.InvariantCulture) : apngPreset.Framerate.GetLowerDescription())} \";\n\n                    //Format and output.\n                    firstPass += \"-f apng \";\n\n                    //Vsync\n                    if (apngPreset.Vsync != Vsyncs.Off)\n                    {\n                        if (UserSettings.All.HasOlderFfmpegVersion)\n                            firstPass += \"-fps_mode \" + apngPreset.Vsync.GetLowerDescription();\n                        else\n                            firstPass += \"-vsync \" + apngPreset.Vsync.GetLowerDescription();\n                    }\n\n                    firstPass += \" {O}\";\n                }\n\n                break;\n\n                #endregion\n            }\n            case ExportFormats.Webp:\n            {\n                #region Webp\n\n                if (preset is not FfmpegWebpPreset webpPreset)\n                    return;\n\n                //ffmpeg -vsync 0 {I} -c:v libwebp_anim -lossless 0 -quality 75 -loop 0 -f webp {O}\n                if (webpPreset.SettingsMode == VideoSettingsModes.Advanced)\n                    firstPass = webpPreset.Parameters.Replace(\"\\n\", \" \").Replace(\"\\r\", \"\");\n                else\n                {\n                    //Vsync\n                    if (webpPreset.Vsync != Vsyncs.Off)\n                        firstPass += $\"-vsync {webpPreset.Vsync.ToString().ToLower()} \";\n\n                    //Input, encoder and loop.\n                    firstPass += \"{I} -c:v libwebp_anim \";\n                    firstPass += $\"-loop {(webpPreset.Looped ? webpPreset.RepeatForever ? 0 : webpPreset.RepeatCount : -1)} \";\n\n                    //Codec preset.\n                    if (webpPreset.CodecPreset != VideoCodecPresets.Default)\n                        firstPass += $\"-preset {webpPreset.CodecPreset.GetLowerDescription()} \";\n\n                    //Lossless.\n                    firstPass += $\"-lossless {(webpPreset.Lossless ? \"1\" : \"0\")} \";\n\n                    //Quality.\n                    firstPass += $\"-quality {webpPreset.Quality} \";\n\n                    //Pixel format.\n                    if (webpPreset.PixelFormat != VideoPixelFormats.Auto)\n                        firstPass += $\"-pix_fmt {webpPreset.PixelFormat.GetLowerDescription()} \";\n\n                    //Framerate.\n                    if (webpPreset.Framerate != Framerates.Auto)\n                        firstPass += $\"-r {(webpPreset.Framerate == Framerates.Custom ? webpPreset.CustomFramerate.ToString(CultureInfo.InvariantCulture) : webpPreset.Framerate.GetLowerDescription())} \";\n\n                    //Format and output.\n                    firstPass += \"-f webp \";\n\n                    //Vsync\n                    if (webpPreset.Vsync != Vsyncs.Off)\n                    {\n                        if (UserSettings.All.HasOlderFfmpegVersion)\n                            firstPass += \"-fps_mode \" + webpPreset.Vsync.GetLowerDescription();\n                        else\n                            firstPass += \"-vsync \" + webpPreset.Vsync.GetLowerDescription();\n                    }\n\n                    firstPass += \" {O}\";\n                }\n\n                break;\n\n                #endregion\n            }\n            case ExportFormats.Avif:\n            {\n                #region Avif\n\n                if (preset is not FfmpegAvifPreset avifPreset)\n                    return;\n\n                //ffmpeg -vsync 0 {I} -c:v libwebp_anim -lossless 0 -quality 75 -loop 0 -f webp {O}\n                if (avifPreset.SettingsMode == VideoSettingsModes.Advanced)\n                    firstPass = avifPreset.Parameters.Replace(\"\\n\", \" \").Replace(\"\\r\", \"\");\n                else\n                {\n                    //Vsync\n                    if (avifPreset.Vsync != Vsyncs.Off)\n                        firstPass += $\"-vsync {avifPreset.Vsync.ToString().ToLower()} \";\n\n                    //Input, encoder and loop.\n                    firstPass += $\"{{I}} -c:v {avifPreset.VideoCodec.GetLowerDescription()} \";\n                    firstPass += $\"-loop {(avifPreset.Looped ? avifPreset.RepeatForever ? 0 : avifPreset.RepeatCount : -1)} \";\n\n                    //Codec preset.\n                    if (avifPreset.CodecPreset != VideoCodecPresets.Default)\n                        firstPass += $\"-preset {avifPreset.CodecPreset.GetLowerDescription()} \";\n\n                    //Quality.\n                    firstPass += $\"-quality {avifPreset.Quality} \";\n\n                    //Pixel format.\n                    if (avifPreset.PixelFormat != VideoPixelFormats.Auto)\n                        firstPass += $\"-pix_fmt {avifPreset.PixelFormat.GetLowerDescription()} \";\n\n                    //Framerate.\n                    if (avifPreset.Framerate != Framerates.Auto)\n                        firstPass += $\"-r {(avifPreset.Framerate == Framerates.Custom ? avifPreset.CustomFramerate.ToString(CultureInfo.InvariantCulture) : avifPreset.Framerate.GetLowerDescription())} \";\n\n                    //Format and output.\n                    firstPass += \"-f avif \";\n\n                    //Vsync\n                    if (avifPreset.Vsync != Vsyncs.Off)\n                    {\n                        if (UserSettings.All.HasOlderFfmpegVersion)\n                            firstPass += \"-fps_mode \" + avifPreset.Vsync.GetLowerDescription();\n                        else\n                            firstPass += \"-vsync \" + avifPreset.Vsync.GetLowerDescription();\n                    }\n\n                    firstPass += \" {O}\";\n                }\n\n                break;\n\n                #endregion\n            }\n\n            case ExportFormats.Avi:\n            case ExportFormats.Mkv:\n            case ExportFormats.Mov:\n            case ExportFormats.Mp4:\n            case ExportFormats.Webm:\n            {\n                #region Video\n\n                if (preset is not VideoPreset videoPreset)\n                    return;\n\n                if (videoPreset.SettingsMode == VideoSettingsModes.Advanced)\n                {\n                    firstPass = videoPreset.Parameters.Replace(\"\\n\", \" \").Replace(\"\\r\", \"\");\n\n                    if (firstPass.Contains(\"-pass 2\"))\n                    {\n                        firstPass = firstPass.Replace(\"-pass 2\", $\"-pass 1 -passlogfile \\\"{preset.FullPath}\\\" \");\n                        secondPass = \"-hide_banner \" + firstPass.Replace(\"-pass 1\", $\"-pass 2 -passlogfile \\\"{preset.FullPath}\\\" \");\n                    }\n                }\n                else\n                {\n                    //Hardware acceleration.\n                    if (videoPreset.HardwareAcceleration != HardwareAccelerationModes.Off)\n                        firstPass += \"-hwaccel auto \";\n\n                    //Input and encoder.\n                    firstPass += \"{I} \";\n                    firstPass += $\"-c:v {videoPreset.VideoCodec.GetLowerDescription()} \";\n\n                    //Some codecs require special treatments.\n                    if (videoPreset.VideoCodec == VideoCodecs.Mpeg4)\n                        firstPass += \"-vtag xvid \";\n                    else if (videoPreset.VideoCodec == VideoCodecs.Vp9)\n                        firstPass += \"-tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 \";\n\n                    //Codec preset.\n                    if (videoPreset.CodecPreset != VideoCodecPresets.Default && videoPreset.CodecPreset != VideoCodecPresets.None && videoPreset.CodecPreset != VideoCodecPresets.NotSelected)\n                    {\n                        if (videoPreset.VideoCodec is VideoCodecs.SvtAv1 or VideoCodecs.Rav1E)\n                            firstPass += $\"-preset {(int) videoPreset.CodecPreset} \";\n                        else\n                            firstPass += $\"-preset {videoPreset.CodecPreset.GetLowerDescription()} \";\n                    }\n\n                    //Pixel format.\n                    if (videoPreset.PixelFormat != VideoPixelFormats.Auto)\n                        firstPass += $\"-pix_fmt {videoPreset.PixelFormat.GetLowerDescription()} \";\n\n                    //Workaround, makes the size to be divisible by two.\n                    firstPass += \"-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \"; //\"scale=iw+mod(iw,2):ih+mod(ih,2):flags=neighbor\" OR \"pad=width={W}:height={H}:x=0:y=0:color=black\"\n\n                    //CRF.\n                    if (videoPreset.ConstantRateFactor > 0)\n                        firstPass += $\"-crf {videoPreset.ConstantRateFactor.Value.ToString(CultureInfo.InvariantCulture)} \";\n\n                    //Bitrate.\n                    if (videoPreset.IsVariableBitRate)\n                        firstPass += $\"-q:v {videoPreset.QualityLevel.ToString(CultureInfo.InvariantCulture)} \";\n                    else\n                    {\n                        if (videoPreset.BitRate > 0)\n                            firstPass += $\"-b:v {videoPreset.BitRate.ToString(CultureInfo.InvariantCulture)}{videoPreset.BitRateUnit.GetDescription()} \";\n                        else if (videoPreset.BitRate == 0 && (videoPreset.VideoCodec == VideoCodecs.Vp8 || videoPreset.VideoCodec == VideoCodecs.Vp9))\n                            firstPass += \"-b:v 0 \";\n                    }\n\n                    //Minimum bitrate.\n                    if (videoPreset.MinimumBitRate > 0)\n                        firstPass += $\"-minrate {videoPreset.MinimumBitRate.ToString(CultureInfo.InvariantCulture)}{videoPreset.MinimumBitRateUnit.GetDescription()} \";\n\n                    //Maximum bitrate.\n                    if (videoPreset.MaximumBitRate > 0)\n                        firstPass += $\"-maxrate {videoPreset.MaximumBitRate.ToString(CultureInfo.InvariantCulture)}{videoPreset.MaximumBitRateUnit.GetDescription()} \";\n\n                    //Buffer size.\n                    if (videoPreset.RateControlBuffer > 0)\n                        firstPass += $\"-bufsize {videoPreset.RateControlBuffer.ToString(CultureInfo.InvariantCulture)}{videoPreset.RateControlBufferUnit.GetDescription()} \";\n\n                    //First pass adjustments.\n                    if (videoPreset.Pass > 1)\n                    {\n                        if (videoPreset.VideoCodec == VideoCodecs.X265)\n                            firstPass += \"-x265-params pass=1 \";\n                        else\n                            firstPass += \"-pass 1 \";\n\n                        firstPass += $\"-passlogfile \\\"{preset.FullPath}\\\" \";\n                    }\n\n                    //Framerate.\n                    if (videoPreset.Framerate != Framerates.Auto)\n                        firstPass += $\"-r {(videoPreset.Framerate == Framerates.Custom ? videoPreset.CustomFramerate.ToString(CultureInfo.InvariantCulture) : videoPreset.Framerate.GetLowerDescription())} \";\n\n                    //Format and output.\n                    firstPass += $\"-f {preset.Type.ToString().ToLower().Replace(\"mkv\", \"matroska\")} \";\n\n                    //Vsync\n                    if (videoPreset.Vsync != Vsyncs.Off)\n                    {\n                        if (UserSettings.All.HasOlderFfmpegVersion)\n                            firstPass += \"-fps_mode \" + videoPreset.Vsync.GetLowerDescription();\n                        else\n                            firstPass += \"-vsync \" + videoPreset.Vsync.GetLowerDescription();\n                    }\n\n                    firstPass += \" {O}\";\n\n                    //Second pass, using a similar command with some adjustments.\n                    if (videoPreset.Pass > 1)\n                        secondPass = \"-hide_banner \" + firstPass.Replace(\"-pass 1\", \"-pass 2\").Replace(\"pass=1\", \"pass=2\");\n                }\n\n                break;\n\n                #endregion\n            }\n        }\n\n        //Replace special params.\n        firstPass = firstPass.Replace(\"{I}\", $\"-safe 0 -f concat -i \\\"file:{concatFile}\\\"\").Replace(\"{O}\", $\"-y \\\"{preset.FullPath}\\\"\")\n            .Replace(\"{H}\", preset.Height.DivisibleByTwo().ToString(CultureInfo.InvariantCulture)).Replace(\"{W}\", preset.Width.DivisibleByTwo().ToString(CultureInfo.InvariantCulture));\n\n        secondPass = secondPass.Replace(\"{I}\", $\"-safe 0 -f concat -i \\\"file:{concatFile}\\\"\").Replace(\"{O}\", $\"-y \\\"{preset.FullPath}\\\"\")\n            .Replace(\"{H}\", preset.Height.DivisibleByTwo().ToString(CultureInfo.InvariantCulture)).Replace(\"{W}\", preset.Width.DivisibleByTwo().ToString(CultureInfo.InvariantCulture));\n\n        var process = new ProcessStartInfo(UserSettings.All.FfmpegLocation)\n        {\n            Arguments = firstPass,\n            CreateNoWindow = true,\n            ErrorDialog = false,\n            UseShellExecute = false,\n            RedirectStandardError = true\n        };\n\n        var log = \"\";\n        using (var pro = Process.Start(process))\n        {\n            var indeterminate = true;\n\n            Update(id, 0, LocalizationHelper.Get(\"S.Encoder.Analyzing\"));\n\n            while (!pro.StandardError.EndOfStream)\n            {\n                if (tokenSource.IsCancellationRequested)\n                {\n                    pro.Kill();\n                    return;\n                }\n\n                var line = pro.StandardError.ReadLine() ?? \"\";\n                log += Environment.NewLine + line;\n\n                var split = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);\n                var containsDuplicatedFrames = line.Contains(\"dup=\");\n\n                for (var block = 0; block < split.Length; block++)\n                {\n                    //frame=  321 fps=170 q=-0.0 Lsize=      57kB time=00:00:14.85 bitrate=  31.2kbits/s speed=7.87x\n                    if (!split[block].StartsWith(\"frame=\"))\n                        continue;\n\n                    if (int.TryParse(split[block + 1], out var frame))\n                    {\n                        if (containsDuplicatedFrames)\n                        {\n                            var dupFramesPosition = split.IndexOf(x => x.Contains(\"dup=\"));\n                            var dupFramesValue = split[dupFramesPosition][4..]; //skip dup=\n                            if (int.TryParse(dupFramesValue, out var duplicatedFrames))\n                            {\n                                // if we've managed to read number of duplicated frames - adjust the frame number\n                                frame -= duplicatedFrames;\n                            }\n                        }\n                        if (frame > 0)\n                        {\n                            if (indeterminate)\n                            {\n                                Update(id, EncodingStatus.Processing, null, false);\n                                indeterminate = false;\n                            }\n\n                            Update(id, frame, string.Format(processing, frame));\n                        }\n                    }\n\n                    break;\n                }\n            }\n        }\n\n        var fileInfo = new FileInfo(preset.FullPath);\n\n        //Execute the second pass, cleaning up the logs.\n        if (!string.IsNullOrWhiteSpace(secondPass))\n        {\n            //I could try using as a single command.\n            //ffmpeg -y -hwaccel auto {I} -c:v h264_nvenc -pix_fmt yuv420p -vf \"scale=trunc(iw/2)*2:trunc(ih/2)*2\" -pass 1 -f avi NUL\n            //&&\n            //ffmpeg -y -hwaccel auto {I} -c:v h264_nvenc -pix_fmt yuv420p -vf \"scale=trunc(iw/2)*2:trunc(ih/2)*2\" -pass 2 -f avi {O}\n\n            log += Environment.NewLine + SecondPassFfmpeg(secondPass, id, tokenSource, LocalizationHelper.Get(\"S.Encoder.Processing.Second\"));\n\n            EraseSecondPassLogs(preset.FullPath);\n        }\n\n        if (!fileInfo.Exists || fileInfo.Length == 0)\n            throw new Exception($\"Error while encoding the {preset.Type} with FFmpeg.\") { HelpLink = $\"Command:\\n\\r{firstPass + Environment.NewLine + secondPass}\\n\\rResult:\\n\\r{log}\" };\n    }\n\n    private static string SecondPassFfmpeg(string command, int id, CancellationTokenSource tokenSource, string processing)\n    {\n        var log = \"\";\n\n        var process = new ProcessStartInfo(UserSettings.All.FfmpegLocation)\n        {\n            Arguments = command,\n            CreateNoWindow = true,\n            ErrorDialog = false,\n            UseShellExecute = false,\n            RedirectStandardError = true\n        };\n\n        using (var pro = Process.Start(process))\n        {\n            var indeterminate = true;\n\n            Update(id, 0, LocalizationHelper.Get(\"S.Encoder.Analyzing.Second\"));\n\n            while (!pro.StandardError.EndOfStream)\n            {\n                if (tokenSource.IsCancellationRequested)\n                {\n                    pro.Kill();\n                    return log;\n                }\n\n                var line = pro.StandardError.ReadLine() ?? \"\";\n                log += Environment.NewLine + line;\n\n                var split = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);\n\n                for (var block = 0; block < split.Length; block++)\n                {\n                    //frame=  321 fps=170 q=-0.0 Lsize=      57kB time=00:00:14.85 bitrate=  31.2kbits/s speed=7.87x\n                    if (!split[block].StartsWith(\"frame=\"))\n                        continue;\n\n                    if (int.TryParse(split[block + 1], out var frame))\n                    {\n                        if (frame > 0)\n                        {\n                            if (indeterminate)\n                            {\n                                Update(id, EncodingStatus.Processing, null, false);\n                                indeterminate = false;\n                            }\n\n                            Update(id, frame, string.Format(processing, frame));\n                        }\n                    }\n\n                    break;\n                }\n            }\n        }\n\n        return log;\n    }\n\n    private static void EraseSecondPassLogs(string filename)\n    {\n        try\n        {\n            if (File.Exists(filename + \"-0.log.mbtree\"))\n                File.Delete(filename + \"-0.log.mbtree\");\n\n            if (File.Exists(filename + \"-0.log\"))\n                File.Delete(filename + \"-0.log\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to delete the log files created by the second pass.\");\n        }\n    }\n\n    #endregion\n}\n\n\ninterface IEncoding\n{\n    bool IsEncoderWindow { get; }\n\n    EncoderListViewItem EncodingAdded(int id);\n    void EncodingUpdated(int? id = null, bool onlyStatus = false);\n    EncoderListViewItem EncodingRemoved(int id);\n}\n\ninternal class EncodingItem\n{\n    public int Id { get; set; }\n\n    public ExportFormats OutputType { get; set; }\n\n    public EncodingStatus Status { get; set;}\n\n    public string Text { get; set; }\n\n    public int FrameCount { get; set; }\n\n    public int CurrentFrame { get; set; }\n\n    public bool IsIndeterminate { get; set; }\n\n    public long SizeInBytes { get; set; }\n\n    public string OutputFilename { get; set; }\n\n    public bool SavedToDisk { get; set; }\n\n    public bool AreMultipleFiles { get; set; }\n\n\n    public bool CopiedToClipboard { get; set; }\n\n    public Exception CopyTaskException { get; set; }\n\n\n    public bool CommandExecuted { get; set; }\n\n    public string Command { get; set; }\n\n    public string CommandOutput { get; set; }\n\n    public Exception CommandTaskException { get; set; }\n\n\n    public bool Uploaded { get; set; }\n\n    public string UploadLink { get; set; }\n\n    public string UploadLinkDisplay { get; set; }\n\n    public string DeletionLink { get; set; }\n\n    public Exception UploadTaskException { get; set; }\n\n    public Exception Exception { get; set; }\n\n    public CancellationTokenSource TokenSource { get; set; }\n\n\n    public TimeSpan TimeToAnalyze { get; set; }\n\n    public TimeSpan TimeToEncode { get; set; }\n\n    public TimeSpan TimeToUpload { get; set; }\n\n    public TimeSpan TimeToCopy { get; set; }\n\n    public TimeSpan TimeToExecute { get; set; }\n}"
  },
  {
    "path": "ScreenToGif/Util/Extensions/PresetExtensions.cs",
    "content": "using System.Linq;\nusing ScreenToGif.Domain.Events;\nusing System.Threading.Tasks;\nusing ScreenToGif.Cloud;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.ViewModel.UploadPresets.Imgur;\nusing ScreenToGif.ViewModel.UploadPresets.Yandex;\nusing ScreenToGif.Windows;\n\nnamespace ScreenToGif.Util.Extensions;\n\ninternal static class PresetExtensions\n{\n    internal static void Persist(this UploadPreset preset, string previousTitle = null)\n    {\n        var current = UserSettings.All.UploadPresets.OfType<UploadPreset>().FirstOrDefault(f => f.Title == (previousTitle ?? preset.Title));\n\n        if (current != null)\n            UserSettings.All.UploadPresets.Remove(current);\n\n        UserSettings.All.UploadPresets.Add(preset);\n        UserSettings.Save();\n    }\n\n    public static async Task<ValidatedEventArgs> IsValid(UploadPreset preset)\n    {\n        switch (preset)\n        {\n            case ImgurPreset imgur:\n                return await IsValid(imgur);\n\n            case YandexPreset yandex:\n                return await IsValid(yandex);\n        }\n\n        return await preset.IsValid();\n    }\n\n    public static async Task<ValidatedEventArgs> IsValid(ImgurPreset preset)\n    {\n        if (!preset.IsAnonymous && !await Imgur.IsAuthorized(preset))\n            return new ValidatedEventArgs(\"S.SaveAs.Warning.Upload.NotAuthorized\", StatusReasons.UploadServiceUnauthorized, () => App.MainViewModel.OpenOptions.Execute(Options.UploadIndex));\n\n        return await preset.IsValid();\n    }\n\n    public static async Task<ValidatedEventArgs> IsValid(YandexPreset preset)\n    {\n        if (!preset.IsAnonymous && !YandexDisk.IsAuthorized(preset))\n            return new ValidatedEventArgs(\"S.SaveAs.Warning.Upload.NotAuthorized\", StatusReasons.UploadServiceUnauthorized, () => App.MainViewModel.OpenOptions.Execute(Options.UploadIndex));\n\n        return await preset.IsValid();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/Extensions/SettingsExtension.cs",
    "content": "using ScreenToGif.Domain.Exceptions;\nusing ScreenToGif.Util.InterProcessChannel;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.IO;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Xml;\n\nnamespace ScreenToGif.Util.Extensions;\n\ninternal static class SettingsExtension\n{\n    internal static void ForceSave()\n    {\n        try\n        {\n            UserSettings.Save(true);\n        }\n        catch (SettingsPersistenceException e)\n        {\n            Retry(e.ResourceDictionary, e.IsLocal);\n        }\n    }\n\n    private static async void Retry(ResourceDictionary dic, bool isLocal)\n    {\n        try\n        {\n            if (!Dialog.Ask(LocalizationHelper.Get(\"S.SavingSettings.Title\"), LocalizationHelper.Get(\"S.SavingSettings.Instruction\"), LocalizationHelper.Get(\"S.SavingSettings.Message\")))\n                return;\n\n            //Get a new instance, but elevated.\n            var process = ProcessHelper.RestartAsAdminAdvanced(\"-settings\");\n            await Task.Delay(500);\n\n            var settings = new XmlWriterSettings\n            {\n                Indent = true,\n                IndentChars = \"\\t\",\n                OmitXmlDeclaration = true,\n                CheckCharacters = true,\n                CloseOutput = true,\n                ConformanceLevel = ConformanceLevel.Fragment,\n                Encoding = Encoding.UTF8\n            };\n\n            //Serialize the settings and pass to the new instance via IPC.\n            await using var stream = new StringWriter();\n            await using var writer = XmlWriter.Create(stream, settings);\n            XamlWriter.Save(dic, writer);\n            SettingsPersistenceChannel.SendMessage(process.Id, stream.ToString(), isLocal);\n\n            //Since the other instance only exists to save the settings (no interface is displayed), the process must be stopped.\n            process.Kill();\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to retry to save the settings.\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/FeedbackHelper.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Mail;\n\nnamespace ScreenToGif.Util;\n\ninternal static class FeedbackHelper\n{\n    internal static bool Send(string html, List<string> files = null)\n    {\n        //If returns null, try sending via email.\n        var response = SendToServer(html, files?.FirstOrDefault());\n\n        if (response == true)\n            return true;\n\n        if (response == false)\n            return false;\n\n        //Please, don't try to log with this email and password. :/\n        //Every time someone does this, I have to change the password and the Feedback feature stops working until I update the app.\n        var passList = (Secret.Password ?? \"\").Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);\n\n        foreach (var t in passList)\n        {\n            if (SendInternal(t, html, files ?? new List<string>()))\n                return true;\n        }\n\n        return false;\n    }\n\n    private static bool SendInternal(string pass, string html, List<string> files)\n    {\n        try\n        {\n            using var smtp = new SmtpClient\n            {\n                Timeout = 6 * 60 * 1000, //Minutes, seconds, milliseconds\n                Port = Secret.Port,\n                Host = Secret.Host,\n                EnableSsl = true,\n                UseDefaultCredentials = true,\n                Credentials = new NetworkCredential(Secret.Email, pass)\n            };\n\n            using var mail = new MailMessage\n            {\n                From = new MailAddress(\"screentogif@outlook.com\"),\n                Subject = \"ScreenToGif - Feedback\",\n                IsBodyHtml = true\n            };\n\n            mail.To.Add(\"nicke@outlook.com.br\");\n            mail.Body = html;\n\n            foreach (var file in files)\n                mail.Attachments.Add(new Attachment(file));\n\n            //smtp.SendCompleted += (sender, args) =>\n            //{\n            //    if (args.Error != null)\n            //        throw args.Error;\n            //};\n\n            smtp.Send(mail);\n\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while sending email\");\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Tries to send the feedback message to the api.\n    /// </summary>\n    /// <returns>If null, the app should try sending the feedback via email.</returns>\n    private static bool? SendToServer(string message, string file)\n    {\n        if (string.IsNullOrWhiteSpace(Secret.ServerAddress))\n            return null;\n\n        using var client = new HttpClient\n        {\n            BaseAddress = new Uri(Secret.ServerAddress)\n        };\n\n        try\n        {\n            var multiContent = new MultipartFormDataContent\n            {\n                {new StringContent(message), \"message\"},\n                {new ByteArrayContent(File.ReadAllBytes(file)), \"file\", file}\n            };\n\n            var result = client.PostAsync(\"api/v1/relay/send\", multiContent).Result;\n\n            if (result == null || result.StatusCode == HttpStatusCode.BadRequest)\n                return null;\n\n            return true;\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e.Message);\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/FrameworkHelper.cs",
    "content": "using System;\nusing Microsoft.Win32;\n\nnamespace ScreenToGif.Util;\n\ninternal static class FrameworkHelper\n{\n    internal static Version GetFrameworkVersion()\n    {\n        const string subkey = @\"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\\";\n\n        try\n        {\n            using (var sub = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))\n            {\n                if (sub?.GetValue(\"Release\") is not int key)\n                    return new Version(0, 0);\n\n                //Checking the version using >= enables forward compatibility.\n                if (key >= 528040)\n                    return new Version(4, 8);\n                if (key >= 461808)\n                    return new Version(4, 7, 2);\n                if (key >= 461308)\n                    return new Version(4, 7, 1);\n                if (key >= 460798)\n                    return new Version(4, 7);\n                if (key >= 394802)\n                    return new Version(4, 6, 2);\n                if (key >= 394254)\n                    return new Version(4, 6, 1);\n                if (key >= 393295)\n                    return new Version(4, 6);\n                if (key >= 379893)\n                    return new Version(4, 5, 2);\n                if (key >= 378675)\n                    return new Version(4, 5, 1);\n                if (key >= 378389)\n                    return new Version(4, 5);\n\n                //This code should never execute. A non-null release key should mean that 4.5 or later is installed.\n                return new Version(0, 0);\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to detect .Net Framework version.\");\n            return new Version(0, 0);\n        }\n    }\n\n    /// <summary>\n    /// Searches for the current .Net Framework version installed.\n    /// Code adapted from https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed\n    /// </summary>\n    internal static string QueryFrameworkVersion()\n    {\n        const string subkey = @\"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\\";\n\n        try\n        {\n            using (var sub = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))\n            {\n                if (sub?.GetValue(\"Release\") is not int key)\n                    return \"No 4.5 or later version detected\";\n\n                //Checking the version using >= enables forward compatibility.\n                if (key >= 528040)\n                    return \"4.8 or later\";\n                if (key >= 461808)\n                    return \"4.7.2\";\n                if (key >= 461308)\n                    return \"4.7.1\";\n                if (key >= 460798)\n                    return \"4.7\";\n                if (key >= 394802)\n                    return \"4.6.2\";\n                if (key >= 394254)\n                    return \"4.6.1\";\n                if (key >= 393295)\n                    return \"4.6\";\n                if (key >= 379893)\n                    return \"4.5.2\";\n                if (key >= 378675)\n                    return \"4.5.1\";\n                if (key >= 378389)\n                    return \"4.5\";\n\n                //This code should never execute. A non-null release key should mean that 4.5 or later is installed.\n                return \"No 4.5 or later version detected\";\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to detect .Net Framework version.\");\n            return \"Not detectable\";\n        }\n    }\n\n    /// <summary>\n    /// Searches for the current .Net Framework version installed and returns true if has the necessary version installed.\n    /// Code adapted from https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed\n    /// </summary>\n    internal static bool HasFramework()\n    {\n        const string subkey = @\"SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\\";\n\n        try\n        {\n            using (var sub = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))\n            {\n                if (sub?.GetValue(\"Release\") is not int key)\n                    return false;\n\n                //Has .Net 4.8 or newer. Checking the version using >= enables forward compatibility.\n                return key >= 528040;\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to detect .Net Framework version.\");\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/Global.cs",
    "content": "using System;\nusing ScreenToGif.ViewModel;\n\nnamespace ScreenToGif.Util;\n\ninternal static class Global\n{\n    internal static DateTime StartupDateTime { get; set; }\n\n    /// <summary>\n    /// When it's true, the global shortcuts won't work.\n    /// </summary>\n    internal static bool IgnoreHotKeys { get; set; }\n\n    /// <summary>\n    /// When it's true, the hotfix with the bug is installed.\n    /// https://github.com/dotnet/announcements/issues/53\n    /// </summary>\n    internal static bool IsHotFix4055002Installed { get; set; }\n\n    /// <summary>\n    /// When it's true, the app is currently deleting old projects.\n    /// </summary>\n    internal static bool IsCurrentlyDeletingFiles { get; set; }\n\n    /// <summary>\n    /// The available space on the disk that currently holds the data, as percentage.\n    /// </summary>\n    internal static double AvailableDiskSpacePercentage { get; set; }\n\n    /// <summary>\n    /// The available space on the disk that currently holds the data.\n    /// </summary>\n    internal static double AvailableDiskSpace { get; set; }\n\n    /// <summary>\n    /// Holds the details of the latest update available.\n    /// </summary>\n    internal static UpdateAvailable UpdateAvailable { get; set; }\n}"
  },
  {
    "path": "ScreenToGif/Util/NotificationManager.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Input;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Util;\n\ninternal class NotificationManager\n{\n    public static List<Notification> Notifications { get; set; } = new();\n\n\n    internal static void AddNotification(string text, StatusType kind, string tag, ICommand command = null, object commandParameter = null)\n    {\n        AddNotification(text, kind, tag, () => { command?.Execute(commandParameter); });\n    }\n\n    internal static void AddNotification(string text, StatusType kind, string tag, Action action = null)\n    {\n        var rand = new Random(Notifications.Count);\n        var id = rand.Next();\n\n        while (Notifications.Any(a => a.Id == id))\n            id = rand.Next();\n\n        Notifications.Add(new Notification { Id = id, Text = text, Kind = kind, Tag = tag, Action = action });\n\n        Refresh();\n    }\n\n\n    internal static void RemoveNotification(int id)\n    {\n        Notifications.RemoveAll(a => a.Id == id);\n\n        Refresh();\n    }\n\n    internal static void RemoveNotification(Predicate<Notification> match)\n    {\n        Notifications.RemoveAll(match);\n\n        Refresh();\n    }\n\n    internal static void RemoveAllNotifications()\n    {\n        Notifications.Clear();\n\n        Refresh();\n    }\n\n    /// <summary>\n    /// Warns all windows that implement the INotification interface that the notification data was updated.\n    /// </summary>\n    internal static void Refresh()\n    {\n        foreach (var notification in Application.Current.Windows.OfType<INotification>())\n            notification.NotificationUpdated();\n    }\n}\n\n\ninterface INotification\n{\n    void NotificationUpdated();\n}\n\ninternal class Notification\n{\n    public int Id { get; set; }\n\n    public string Text { get; set; }\n\n    public StatusType Kind { get; set; }\n\n    public string Tag { get; set; }\n\n    public UIElement Image { get; set; }\n\n    public Action Action { get; set; }\n}"
  },
  {
    "path": "ScreenToGif/Util/Other.cs",
    "content": "using ScreenToGif.Domain.Interfaces;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Interop;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Other helper methods.\n/// </summary>\npublic static class Other\n{\n    //private static string _assemblyShortName;\n\n    ///// <summary>\n    ///// Helper method for generating a \"pack://\" URI for a given relative file based on the\n    ///// assembly that this class is in.\n    ///// </summary>\n    //public static Uri MakePackUri(string relativeFile)\n    //{\n    //    var uriString = \"pack://application:,,,/\" + AssemblyShortName + \";component/\" + relativeFile;\n    //    return new Uri(uriString);\n    //}\n\n    //private static string AssemblyShortName\n    //{\n    //    get\n    //    {\n    //        if (_assemblyShortName != null)\n    //            return _assemblyShortName;\n\n    //        var a = typeof(Global).Assembly;\n\n    //        //Pull out the short name.\n    //        _assemblyShortName = a.ToString().Split(',')[0];\n\n    //        return _assemblyShortName;\n    //    }\n    //}\n\n    public static Point TransformToScreen(Point point, Visual relativeTo)\n    {\n        var hwndSource = PresentationSource.FromVisual(relativeTo) as HwndSource;\n        var root = hwndSource.RootVisual;\n\n        // Translate the point from the visual to the root.\n        var transformToRoot = relativeTo.TransformToAncestor(root);\n\n        var pointRoot = transformToRoot.Transform(point);\n\n        // Transform the point from the root to client coordinates.\n        var m = Matrix.Identity;\n\n        var transform = VisualTreeHelper.GetTransform(root);\n\n        if (transform != null)\n        {\n            m = Matrix.Multiply(m, transform.Value);\n        }\n\n        var offset = VisualTreeHelper.GetOffset(root);\n        m.Translate(offset.X, offset.Y);\n\n        var pointClient = m.Transform(pointRoot);\n\n        // Convert from “device-independent pixels” into pixels.\n        pointClient = hwndSource.CompositionTarget.TransformToDevice.Transform(pointClient);\n\n        var pointClientPixels = new PointW();\n        pointClientPixels.X = (0 < pointClient.X) ? (int)(pointClient.X + 0.5) : (int)(pointClient.X - 0.5);\n        pointClientPixels.Y = (0 < pointClient.Y) ? (int)(pointClient.Y + 0.5) : (int)(pointClient.Y - 0.5);\n\n        // Transform the point into screen coordinates.\n        var pointScreenPixels = pointClientPixels;\n        User32.ClientToScreen(hwndSource.Handle, ref pointScreenPixels);\n\n        //Native.GetCurrentPositionEx(hwndSource.Handle, out pointScreenPixels);\n        //Native.GetWindowOrgEx(hwndSource.Handle, out pointScreenPixels);\n\n        return new Point(pointScreenPixels.X, pointScreenPixels.Y);\n    }\n\n    public static string GetTextResource(string resourceName)\n    {\n        var assembly = Assembly.GetExecutingAssembly();\n        var result = \"\";\n\n        try\n        {\n            using var stream = assembly.GetManifestResourceStream(resourceName);\n\n            using (var reader = new StreamReader(stream))\n            {\n                result = reader.ReadToEnd();\n\n                reader.Close();\n            }\n\n            stream.Close();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Resource Loading\", resourceName);\n        }\n\n        return result;\n    }\n\n    private static Size MeasureString(this TextBlock textBlock)\n    {\n        var formattedText = new FormattedText(textBlock.Text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight,\n            new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch), textBlock.FontSize, Brushes.Black, 96d);\n\n        return new Size(formattedText.Width, formattedText.Height);\n    }\n\n    internal static Size Scale(this Size size, double scale)\n    {\n        return new Size(Math.Round(size.Width * scale, MidpointRounding.AwayFromZero), Math.Round(size.Height * scale, MidpointRounding.AwayFromZero));\n    }\n\n    internal static Point Scale(this Point point, double scale)\n    {\n        return new Point(Math.Round(point.X * scale, MidpointRounding.AwayFromZero), Math.Round(point.Y * scale, MidpointRounding.AwayFromZero));\n    }\n\n    /// <summary>\n    /// Gets the DPI of the current window.\n    /// </summary>\n    /// <param name=\"window\">The Window.</param>\n    /// <returns>The DPI of the given Window.</returns>\n    public static double Dpi(this Window window)\n    {\n        var source = PresentationSource.FromVisual(window);\n\n        if (source?.CompositionTarget != null)\n            return 96d * source.CompositionTarget.TransformToDevice.M11;\n\n        return 96d;\n    }\n\n    /// <summary>\n    /// Gets the DPI of the system.\n    /// </summary>\n    /// <returns>The DPI of the system.</returns>\n    public static double DpiOfSystem()\n    {\n        using (var source = new HwndSource(new HwndSourceParameters()))\n            return 96d * (source.CompositionTarget?.TransformToDevice.M11 ?? 1D);\n    }\n\n    /// <summary>\n    /// Gets the scale of the current window.\n    /// </summary>\n    /// <param name=\"window\">The Window.</param>\n    /// <returns>The scale of the given Window.</returns>\n    public static double Scale(this Visual window)\n    {\n        var source = PresentationSource.FromVisual(window);\n\n        if (source?.CompositionTarget != null)\n            return source.CompositionTarget.TransformToDevice.M11;\n\n        return 1d;\n    }\n\n    /// <summary>\n    /// Gets the scale of the system.\n    /// </summary>\n    /// <returns>The scale of the system.</returns>\n    public static double ScaleOfSystem()\n    {\n        using (var source = new HwndSource(new HwndSourceParameters()))\n            return source.CompositionTarget?.TransformToDevice.M11 ?? 1D;\n    }\n\n    public static List<DetectedRegion> AdjustPosition(this List<DetectedRegion> list, double x, double y)\n    {\n        foreach (var region in list)\n            region.Bounds = new Rect(new Point(region.Bounds.X - x, region.Bounds.Y - y), region.Bounds.Size);\n\n        return list;\n    }\n\n    [Obsolete(\"Use LocalizationHelper.Get() instead\")]\n    public static string TextResource(this FrameworkElement visual, string key, string defaultValue = \"\")\n    {\n        return visual.TryFindResource(key) as string ?? defaultValue;\n    }\n\n    public static Brush RandomBrush()\n    {\n        var rnd = new Random();\n\n        var brushesType = typeof(Brushes);\n\n        var properties = brushesType.GetProperties();\n\n        var random = rnd.Next(properties.Length);\n\n        return (Brush)properties[random].GetValue(null, null);\n    }\n\n    public static void CopyPropertiesTo<T, TU>(this T source, TU dest)\n    {\n        var sourceProps = typeof(T).GetProperties().Where(x => x.CanRead).ToList();\n        var destProps = typeof(TU).GetProperties().Where(x => x.CanWrite).ToList();\n\n        foreach (var sourceProp in sourceProps)\n        {\n            if (destProps.All(x => x.Name != sourceProp.Name))\n                continue;\n\n            var p = destProps.First(x => x.Name == sourceProp.Name);\n\n            if (p.CanWrite)\n                p.SetValue(dest, sourceProp.GetValue(source, null), null);\n        }\n    }\n\n    #region List\n\n    public static List<FrameInfo> CopyList(this List<FrameInfo> target)\n    {\n        return new List<FrameInfo>(target.Select(s => new FrameInfo(s.Path, s.Delay, s.CursorX, s.CursorY, s.ButtonClicked,\n            s.KeyList != null ? new List<IKeyGesture>(s.KeyList.Select(y => new SimpleKeyGesture(y.Key, y.Modifiers, y.IsUppercase, y.IsInjected))) : null, s.Index)));\n    }\n\n    /// <summary>\n    /// Creates an index list based on the start and end indexes (positions).\n    /// </summary>\n    /// <param name=\"start\">The start index.</param>\n    /// <param name=\"end\">The end index. If it's a lower value than the start index, the start becomes the end and vice-versa.</param>\n    /// <returns>A list of ordered integers.</returns>\n    public static List<int> ListOfIndexesOld(int start, int end)\n    {\n        if (start > end)\n            return Enumerable.Range(end, start - end + 1).ToList();\n\n        return Enumerable.Range(start, end - start + 1).ToList();\n    }\n\n    /// <summary>\n    /// Creates an index list based on the start and end indexes (positions).\n    /// </summary>\n    /// <param name=\"start\">The start index.</param>\n    /// <param name=\"quantity\">The quantity indexes to create.</param>\n    /// <returns>A list of ordered integers.</returns>\n    public static List<int> ListOfIndexes(int start, int quantity)\n    {\n        //if (start > end)\n        //    return Enumerable.Range(end, start - end + 1).ToList();\n\n        return Enumerable.Range(start, quantity).ToList();\n    }\n\n    /// <summary>\n    /// Makes a Yo-yo effect with the given List (List + Reverted List)\n    /// </summary>\n    /// <param name=\"list\">The list to apply the effect</param>\n    /// <returns>A List with the Yo-yo effect</returns>\n    public static List<FrameInfo> Yoyo(List<FrameInfo> list)\n    {\n        var listReverted = new List<FrameInfo>(list);\n        listReverted.Reverse();\n\n        var currentFolder = Path.GetDirectoryName(list[0].Path);\n\n        foreach (var frame in listReverted)\n        {\n            var newPath = Path.Combine(currentFolder, list.Count + \" Y \" + DateTime.Now.ToString(\"yy MM dd hh mm ss fff\") + \".png\");\n\n            File.Copy(frame.Path, newPath);\n\n            list.Add(new FrameInfo(newPath, frame.Delay, frame.CursorX, frame.CursorY, frame.ButtonClicked, frame.KeyList, frame.Index));\n        }\n\n        return list;\n    }\n\n    public static List<FrameInfo> Move(this List<FrameInfo> list, int oldIndex, int newIndex)\n    {\n        //Saves the current item on a temp variable.\n        var item = list[oldIndex];\n\n        list.RemoveAt(oldIndex);\n        list.Insert(newIndex, item);\n\n        return list;\n    }\n\n    public static List<int> Move(this List<int> list, int oldIndex, int newIndex)\n    {\n        //Saves the current item on a temp variable.\n        var item = list[oldIndex];\n\n        list.RemoveAt(oldIndex);\n\n        //The actual index could have shifted due to the removal.\n        if (newIndex > oldIndex)\n            newIndex--;\n\n        list.Insert(newIndex, item);\n\n        return list;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Util/ScreenHelper.cs",
    "content": "using System.Windows;\nusing System.Windows.Interop;\n\nnamespace ScreenToGif.Util;\n\npublic class ScreenHelper\n{\n    public static System.Windows.Forms.Screen GetScreen(Window window)\n    {\n        return System.Windows.Forms.Screen.FromHandle(new WindowInteropHelper(window).Handle);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/ScrollSynchronizer.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Util;\n\npublic class ScrollSynchronizer : DependencyObject\n{\n    /// <summary>\n    /// Identifies the attached property ScrollGroup\n    /// </summary>\n    public static readonly DependencyProperty ScrollGroupProperty = DependencyProperty.RegisterAttached(\"ScrollGroup\", typeof(string), typeof(ScrollSynchronizer), new PropertyMetadata(OnScrollGroupChanged));\n\n    /// <summary>\n    /// List of all registered scroll viewers.\n    /// </summary>\n    private static readonly Dictionary<ScrollViewer, string> ScrollViewers = new();\n\n    /// <summary>\n    /// Contains the latest horizontal scroll offset for each scroll group.\n    /// </summary>\n    private static readonly Dictionary<string, double> HorizontalScrollOffsets = new();\n\n    /// <summary>\n    /// Contains the latest vertical scroll offset for each scroll group.\n    /// </summary>\n    private static readonly Dictionary<string, double> VerticalScrollOffsets = new();\n\n    /// <summary>\n    /// Sets the value of the attached property ScrollGroup.\n    /// </summary>\n    /// <param name=\"obj\">Object on which the property should be applied.</param>\n    /// <param name=\"scrollGroup\">Value of the property.</param>\n    public static void SetScrollGroup(DependencyObject obj, string scrollGroup)\n    {\n        obj.SetValue(ScrollGroupProperty, scrollGroup);\n    }\n\n    /// <summary>\n    /// Gets the value of the attached property ScrollGroup.\n    /// </summary>\n    /// <param name=\"obj\">Object for which the property should be read.</param>\n    /// <returns>Value of the property StartTime</returns>\n    public static string GetScrollGroup(DependencyObject obj)\n    {\n        return (string)obj.GetValue(ScrollGroupProperty);\n    }\n\n    /// <summary>\n    /// Occurs, when the ScrollGroupProperty has changed.\n    /// </summary>\n    /// <param name=\"d\">The DependencyObject on which the property has changed value.</param>\n    /// <param name=\"e\">Event data that is issued by any event that tracks changes to the effective value of this property.</param>\n    private static void OnScrollGroupChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not ScrollViewer scrollViewer)\n            return;\n\n        if (!string.IsNullOrEmpty((string)e.OldValue))\n        {\n            // Remove scrollviewer\n            if (ScrollViewers.ContainsKey(scrollViewer))\n            {\n                scrollViewer.ScrollChanged -= ScrollViewer_ScrollChanged;\n                ScrollViewers.Remove(scrollViewer);\n            }\n        }\n\n        if (!string.IsNullOrEmpty((string)e.NewValue))\n        {\n            // If group already exists, set scrollposition of new scrollviewer to the scrollposition of the group\n            if (HorizontalScrollOffsets.Keys.Contains((string)e.NewValue))\n                scrollViewer.ScrollToHorizontalOffset(HorizontalScrollOffsets[(string)e.NewValue]);\n            else\n                HorizontalScrollOffsets.Add((string)e.NewValue, scrollViewer.HorizontalOffset);\n\n            if (VerticalScrollOffsets.Keys.Contains((string)e.NewValue))\n                scrollViewer.ScrollToVerticalOffset(VerticalScrollOffsets[(string)e.NewValue]);\n            else\n                VerticalScrollOffsets.Add((string)e.NewValue, scrollViewer.VerticalOffset);\n\n            // Add scrollviewer\n            ScrollViewers.Add(scrollViewer, (string)e.NewValue);\n            scrollViewer.ScrollChanged += ScrollViewer_ScrollChanged;\n        }\n    }\n\n    /// <summary>\n    /// Occurs, when the scroll offset of one scrollviewer has changed.\n    /// </summary>\n    /// <param name=\"sender\">The sender of the event.</param>\n    /// <param name=\"e\">EventArgs of the event.</param>\n    private static void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)\n    {\n        if (e.VerticalChange == 0 && e.HorizontalChange == 0)\n            return;\n\n        var changedScrollViewer = sender as ScrollViewer;\n        Scroll(changedScrollViewer);\n    }\n\n    /// <summary>\n    /// Scrolls all scroll viewers of a group to the position of the selected scroll viewer.\n    /// </summary>\n    /// <param name=\"changedScrollViewer\">Sroll viewer, that specifies the current position of the group.</param>\n    private static void Scroll(ScrollViewer changedScrollViewer)\n    {\n        var group = ScrollViewers[changedScrollViewer];\n        VerticalScrollOffsets[group] = changedScrollViewer.VerticalOffset;\n        HorizontalScrollOffsets[group] = changedScrollViewer.HorizontalOffset;\n\n        foreach (var scrollViewer in ScrollViewers.Where((s) => s.Value == group && s.Key != changedScrollViewer))\n        {\n            if (scrollViewer.Key.VerticalOffset != changedScrollViewer.VerticalOffset)\n                scrollViewer.Key.ScrollToVerticalOffset(changedScrollViewer.VerticalOffset);\n\n            if (scrollViewer.Key.HorizontalOffset != changedScrollViewer.HorizontalOffset)\n                scrollViewer.Key.ScrollToHorizontalOffset(changedScrollViewer.HorizontalOffset);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/StorageUtils.cs",
    "content": "using System;\nusing System.IO;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows.Other;\nusing System.Linq;\n\nnamespace ScreenToGif.Util;\n\ninternal static class StorageUtils\n{\n    internal static void PurgeCache()\n    {\n        if (UserSettings.All.AskDeleteCacheWhenClosing && !CacheDialog.Ask(false, out _))\n            return;\n\n        try\n        {\n            var cache = PathHelper.AdjustPath(UserSettings.All.TemporaryFolderResolved);\n            var path = Path.Combine(cache, \"ScreenToGif\");\n\n            Directory.Delete(path, true);\n\n            //The user-defined cache directory may contain user data. It should only be removed if it is empty.\n            if (!Directory.EnumerateFileSystemEntries(cache).Any())\n                Directory.Delete(cache);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Purging cache\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Util/ThemeHelper.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Windows;\nusing Microsoft.Win32;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Deals with the selection of the app's theme.\n/// </summary>\ninternal static class ThemeHelper\n{\n    public static void SelectTheme(AppThemes theme = AppThemes.Light)\n    {\n        if (theme == AppThemes.FollowSystem)\n            theme = IsSystemUsingDarkTheme() ? AppThemes.Dark : AppThemes.Light;\n\n        //Checks if the theme is already the current in use.\n        var last = Application.Current.Resources.MergedDictionaries.LastOrDefault(l => l.Source != null && l.Source.ToString().Contains(\"Colors/\"));\n\n        if (last?.Source.ToString().EndsWith($\"/{theme}.xaml\") == true)\n            return;\n\n        //Tries to switch to the new theme.\n        var res = Application.Current.Resources.MergedDictionaries.FirstOrDefault(f => f.Source != null && f.Source.ToString().EndsWith($\"Colors/{theme}.xaml\"));\n\n        if (res == null)\n        {\n            res = Application.Current.Resources.MergedDictionaries.FirstOrDefault(f => f.Source != null && f.Source.ToString().EndsWith(\"Colors/Light.xaml\"));\n            UserSettings.All.MainTheme = AppThemes.Light;\n        }\n\n        Application.Current.Resources.MergedDictionaries.Remove(res);\n        Application.Current.Resources.MergedDictionaries.Add(res);\n\n        //Forces the refresh of the vectors with dynamic resources inside.\n        var glyphs = Application.Current.Resources.MergedDictionaries.FirstOrDefault(f => f.Source != null && f.Source.ToString().EndsWith(\"Resources/Glyphs.xaml\"));\n\n        Application.Current.Resources.MergedDictionaries.Remove(glyphs);\n        Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new System.Uri(\"Resources/Glyphs.xaml\", System.UriKind.RelativeOrAbsolute) });\n\n        RefreshNotificationIcon();\n    }\n\n    internal static bool IsSystemUsingDarkTheme()\n    {\n        try\n        {\n            using (var sub = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32)\n                       .OpenSubKey(@\"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\"))\n            {\n                if (sub?.GetValue(\"AppsUseLightTheme\") is int key)\n                    return key == 0;\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Not possible to get system's theme setting.\");\n        }\n\n        return false;\n    }\n\n    private static void RefreshNotificationIcon()\n    {\n        if (App.NotifyIcon == null)\n            return;\n\n        App.NotifyIcon.RefreshVisual();\n    }\n}"
  },
  {
    "path": "ScreenToGif/ViewModel/ApplicationBaseViewModel.cs",
    "content": "using ScreenToGif.Domain.ViewModels;\n\nnamespace ScreenToGif.ViewModel;\n\ninternal class ApplicationBaseViewModel : BaseViewModel\n{\n    #region Variables\n\n    private string _recorderGesture;\n    private string _webcamRecorderGesture;\n    private string _boardRecorderGesture;\n    private string _editorGesture;\n    private string _optionsGesture;\n    private string _exitGesture;\n    \n    #endregion\n\n    #region Properties\n\n    public string RecorderGesture\n    {\n        get => _recorderGesture;\n        set => SetProperty(ref _recorderGesture, value);\n    }\n\n    public string WebcamRecorderGesture\n    {\n        get => _webcamRecorderGesture;\n        set => SetProperty(ref _webcamRecorderGesture, value);\n    }\n\n    public string BoardRecorderGesture\n    {\n        get => _boardRecorderGesture;\n        set => SetProperty(ref _boardRecorderGesture, value);\n    }\n\n    public string EditorGesture\n    {\n        get => _editorGesture;\n        set => SetProperty(ref _editorGesture, value);\n    }\n\n    public string OptionsGesture\n    {\n        get => _optionsGesture;\n        set => SetProperty(ref _optionsGesture, value);\n    }\n\n    public string ExitGesture\n    {\n        get => _exitGesture;\n        set => SetProperty(ref _exitGesture, value);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/ViewModel/ApplicationViewModel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows;\nusing ScreenToGif.Windows.Other;\n\nnamespace ScreenToGif.ViewModel;\n\ninternal class ApplicationViewModel : ApplicationBaseViewModel\n{\n    #region Commands\n\n    public IExtendedCommand<int, bool> Open\n    {\n        get\n        {\n            return new AdvancedRelayCommand<int, bool>\n            {\n                ExecuteAction = (startup, fromConsole) =>\n                {\n                    if (!fromConsole && UserSettings.All.StartMinimized)\n                        startup = -1;\n\n                    //If files are being sent via parameter, force the editor to open.\n                    if (!fromConsole && Arguments.FileNames.Any())\n                        startup = 4;\n\n                    switch (startup)\n                    {\n                        case -1: //Minimized.\n                        {\n                            return;\n                        }\n\n                        case 1: //Screen recorder.\n                        {\n                            if (OpenRecorder.CanExecute(null))\n                                OpenRecorder.Execute(null);\n                            return;\n                        }\n\n                        case 2: //Webcam recorder.\n                        {\n                            if (OpenWebcamRecorder.CanExecute(null))\n                                OpenWebcamRecorder.Execute(null);\n                            return;\n                        }\n\n                        case 3: //Board recorder.\n                        {\n                            if (OpenBoardRecorder.CanExecute(null))\n                                OpenBoardRecorder.Execute(null);\n                            return;\n                        }\n\n                        case 4: //Editor.\n                        {\n                            OpenEditor.Execute(null);\n                            return;\n                        }\n\n                        case 5: //Options.\n                        {\n                            OpenOptions.Execute(null);\n                            return;\n                        }\n\n                        default: //Startup.\n                        {\n                            OpenLauncher.Execute(null);\n                            return;\n                        }\n                    }\n                }\n            };\n        }\n    }\n\n    public ICommand OpenLauncher\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                ExecuteAction = a =>\n                {\n                    var startup = Application.Current.Windows.OfType<Startup>().FirstOrDefault();\n\n                    if (startup == null)\n                    {\n                        startup = new Startup();\n                        startup.Closed += (sender, args) => { CloseOrNot(); };\n\n                        startup.Show();\n                    }\n                    else\n                    {\n                        if (startup.WindowState == WindowState.Minimized)\n                            startup.WindowState = WindowState.Normal;\n\n                        startup.Activate();\n                    }\n                }\n            };\n        }\n    }\n\n    public ICommand OpenRecorder\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = o =>\n                {\n                    //True if all windows are not Recorders.\n                    return Application.Current?.Windows.OfType<Window>().All(a => !(a is BaseRecorder)) ?? false;\n                },\n                ExecuteAction = a =>\n                {\n                    var caller = a as Window;\n                    var editor = a as Editor;\n\n                    if (editor == null)\n                        caller?.Hide();\n\n                    if (UserSettings.All.NewRecorder)\n                    {\n                        var recorderNew = new NewRecorder();\n                        recorderNew.Closed += (sender, args) =>\n                        {\n                            var window = sender as NewRecorder;\n\n                            if (window?.Project != null && window.Project.Any)\n                            {\n                                if (editor == null)\n                                {\n                                    ShowEditor(window.Project);\n                                    caller?.Close();\n                                }\n                                else\n                                    editor.RecorderCallback(window.Project);\n                            }\n                            else\n                            {\n                                if (editor == null)\n                                {\n                                    caller?.Show();\n                                    CloseOrNot();\n                                }\n                                else\n                                    editor.RecorderCallback(null);\n                            }\n                        };\n\n                        Application.Current.MainWindow = recorderNew;\n                        recorderNew.Show();\n\n                        return;\n                    }\n\n                    var recorder = new Recorder();\n                    recorder.Closed += (sender, args) =>\n                    {\n                        var window = sender as Recorder;\n\n                        if (window?.Project != null && window.Project.Any)\n                        {\n                            if (editor == null)\n                            {\n                                ShowEditor(window.Project);\n                                caller?.Close();\n                            }\n                            else\n                                editor.RecorderCallback(window.Project);\n                        }\n                        else\n                        {\n                            if (editor == null)\n                            {\n                                caller?.Show();\n                                CloseOrNot();\n                            }\n                            else\n                                editor.RecorderCallback(null);\n                        }\n                    };\n\n                    Application.Current.MainWindow = recorder;\n                    recorder.Show();\n                }\n            };\n        }\n    }\n\n    public ICommand OpenWebcamRecorder\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = o =>\n                {\n                    //True if all windows are not Recorders.\n                    return Application.Current?.Windows.OfType<Window>().All(a => !(a is BaseRecorder)) ?? false;\n                },\n                ExecuteAction = a =>\n                {\n                    var caller = a as Window;\n                    var editor = a as Editor;\n\n                    if (editor == null)\n                        caller?.Hide();\n\n                    var recorder = new Windows.Webcam();\n                    recorder.Closed += (sender, args) =>\n                    {\n                        var window = sender as Windows.Webcam;\n\n                        if (window?.Project != null && window.Project.Any)\n                        {\n                            if (editor == null)\n                            {\n                                ShowEditor(window.Project);\n                                caller?.Close();\n                            }\n                            else\n                                editor.RecorderCallback(window.Project);\n                        }\n                        else\n                        {\n                            if (editor == null)\n                            {\n                                caller?.Show();\n                                CloseOrNot();\n                            }\n                            else\n                                editor.RecorderCallback(null);\n                        }\n                    };\n\n                    Application.Current.MainWindow = recorder;\n                    recorder.Show();\n                }\n            };\n        }\n    }\n\n    public ICommand OpenBoardRecorder\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = o =>\n                {\n                    //True if all windows are not Recorders.\n                    return Application.Current?.Windows.OfType<Window>().All(a => !(a is BaseRecorder)) ?? false;\n                },\n                ExecuteAction = a =>\n                {\n                    var caller = a as Window;\n                    var editor = a as Editor;\n\n                    if (editor == null)\n                        caller?.Hide();\n\n                    var recorder = new Board();\n                    recorder.Closed += (sender, args) =>\n                    {\n                        var window = sender as Board;\n\n                        if (window?.Project != null && window.Project.Any)\n                        {\n                            if (editor == null)\n                            {\n                                ShowEditor(window.Project);\n                                caller?.Close();\n                            }\n                            else\n                                editor.RecorderCallback(window.Project);\n                        }\n                        else\n                        {\n                            if (editor == null)\n                            {\n                                caller?.Show();\n                                CloseOrNot();\n                            }\n                            else\n                                editor.RecorderCallback(null);\n                        }\n                    };\n\n                    Application.Current.MainWindow = recorder;\n                    recorder.Show();\n                }\n            };\n        }\n    }\n\n    public ICommand OpenEditor\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = a => true, //TODO: Always let this window opens or check if there's any other recorder active?\n                ExecuteAction = a =>\n                {\n                    var caller = a as Window;\n\n                    //TODO: Should it behave the same way as it does after a recording? Always open a new one or simply show all/one that was already opened?\n                    ShowEditor(null, a is string[]);\n\n                    caller?.Close();\n                }\n            };\n        }\n    }\n\n    public ICommand OpenOptions\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = a => true, //TODO: Always let this window opens or check if there's any other recorder active?\n                ExecuteAction = a =>\n                {\n                    var options = Application.Current.Windows.OfType<Options>().FirstOrDefault();\n                    var tab = a as int? ?? 0; //Parameter that selects which tab to be displayed.\n\n                    if (options == null)\n                    {\n                        options = new Options(tab);\n                        options.Closed += (sender, args) =>\n                        {\n                            CloseOrNot();\n                        };\n\n                        //TODO: Open as dialog or not? Block other windows?\n                        options.Show();\n                    }\n                    else\n                    {\n                        if (options.WindowState == WindowState.Minimized)\n                            options.WindowState = WindowState.Normal;\n\n                        options.SelectTab(tab);\n                        options.Activate();\n                    }\n                }\n            };\n        }\n    }\n\n    public ICommand OpenFeedback\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = a => true, //TODO: Always let this window opens or check if there's any other recorder active?\n                ExecuteAction = a =>\n                {\n                    var feedback = Application.Current.Windows.OfType<Feedback>().FirstOrDefault();\n\n                    if (feedback == null)\n                    {\n                        feedback = new Feedback();\n                        feedback.Closed += async (sender, args) =>\n                        {\n                            await Task.Factory.StartNew(App.MainViewModel.SendFeedback, TaskCreationOptions.LongRunning);\n\n                            CloseOrNot();\n                        };\n\n                        feedback.ShowDialog();\n                    }\n                    else\n                    {\n                        if (feedback.WindowState == WindowState.Minimized)\n                            feedback.WindowState = WindowState.Normal;\n\n                        feedback.Activate();\n                    }\n                }\n            };\n        }\n    }\n\n    public ICommand OpenTroubleshoot\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = a => true,\n                ExecuteAction = a =>\n                {\n                    var trouble = Application.Current.Windows.OfType<Troubleshoot>().FirstOrDefault();\n\n                    if (trouble == null)\n                    {\n                        trouble = new Troubleshoot();\n                        trouble.Closed += (sender, args) =>\n                        {\n                            CloseOrNot();\n                        };\n\n                        trouble.ShowDialog();\n                    }\n                    else\n                    {\n                        if (trouble.WindowState == WindowState.Minimized)\n                            trouble.WindowState = WindowState.Normal;\n\n                        trouble.Activate();\n                    }\n                }\n            };\n        }\n    }\n\n    public ICommand OpenHelp\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = a => true,\n                ExecuteAction = a =>\n                {\n                    try\n                    {\n                        ProcessHelper.StartWithShell(\"https://github.com/NickeManarin/ScreenToGif/wiki/Help\");\n                    }\n                    catch (Exception ex)\n                    {\n                        LogWriter.Log(ex, \"Opening the Help link\");\n                    }\n                }\n            };\n        }\n    }\n\n    public ICommand TrayLeftClick\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                ExecuteAction = a => Interact(UserSettings.All.LeftClickAction, UserSettings.All.LeftOpenWindow)\n            };\n        }\n    }\n\n    public ICommand TrayDoubleLeftClick\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                ExecuteAction = a => Interact(UserSettings.All.DoubleLeftClickAction, UserSettings.All.DoubleLeftOpenWindow)\n            };\n        }\n    }\n\n    public ICommand TrayMiddleClick\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                ExecuteAction = a => Interact(UserSettings.All.MiddleClickAction, UserSettings.All.MiddleOpenWindow)\n            };\n        }\n    }\n\n    public ICommand PromptUpdate\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                ExecuteAction = a =>\n                {\n                    if (Global.UpdateAvailable == null)\n                        return;\n\n                    //Try to install the update, closing the app if successful.\n                    if (InstallUpdate(true))\n                        Application.Current.Shutdown(69);\n                }\n            };\n        }\n    }\n\n    public ICommand ExitApplication\n    {\n        get\n        {\n            return new RelayCommand\n            {\n                CanExecutePredicate = o =>\n                {\n                    //TODO: Check if there's anything open or anything happening with editors.\n                    return Application.Current?.Windows.OfType<BaseRecorder>().All(a => a.Stage != RecorderStages.Recording) ?? false;\n                },\n                ExecuteAction = a =>\n                {\n                    if (UserSettings.All.NotifyWhileClosingApp && !Dialog.Ask(LocalizationHelper.Get(\"S.Exiting.Title\"), LocalizationHelper.Get(\"S.Exiting.Instruction\"), LocalizationHelper.Get(\"S.Exiting.Message\")))\n                        return;\n\n                    if (UserSettings.All.DeleteCacheWhenClosing)\n                        StorageUtils.PurgeCache();\n\n                    Application.Current.Shutdown(69);\n                }\n            };\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void ShowEditor(ProjectInfo project = null, bool openMedia = false)\n    {\n        var editor = Application.Current.Windows.OfType<Editor>().FirstOrDefault(f => f.Project == null || !f.Project.Any);\n\n        if (editor == null)\n        {\n            editor = new Editor { Project = project };\n            editor.Closed += (sender, args) => CloseOrNot();\n            editor.Show();\n        }\n        else\n        {\n            //TODO: Three modes for opening the editor:\n            //Always open a new window.\n            //Open a new window if there's no window without any project loaded.\n            //Open a new window if there's no idle window (with a project loaded).\n\n            //TODO: Detect if the last state was normal/maximized.\n            if (editor.WindowState == WindowState.Minimized)\n                editor.WindowState = WindowState.Normal;\n\n            if (project != null)\n                editor.LoadProject(project, true, false);\n            else if (openMedia)\n                editor.LoadFromArguments();\n        }\n\n        Application.Current.MainWindow = editor;\n        editor.Activate();\n    }\n\n    private void CloseOrNot()\n    {\n        //When closed, check if it's the last window, then close if it's the configured behavior.\n        if (UserSettings.All.ShowNotificationIcon && UserSettings.All.KeepOpen)\n            return;\n\n        //We only need to check loaded windows that have content, since any special window could be open.\n        if (Application.Current.Windows.Cast<Window>().Count(window => window.HasContent) == 0)\n        {\n            //Install the available update on closing.\n            if (UserSettings.All.InstallUpdates)\n                InstallUpdate();\n\n            if (UserSettings.All.DeleteCacheWhenClosing)\n                StorageUtils.PurgeCache();\n\n            Application.Current.Shutdown(2);\n        }\n    }\n\n    private void Interact(int action, int open)\n    {\n        switch (action)\n        {\n            case 1: //Open a window.\n            {\n                switch (open)\n                {\n                    case 1: //Startup.\n                    {\n                        OpenLauncher.Execute(null);\n                        break;\n                    }\n                    case 2: //Recorder.\n                    {\n                        if (!OpenRecorder.CanExecute(null))\n                        {\n                            var rec = Application.Current.Windows.OfType<BaseRecorder>().FirstOrDefault();\n\n                            if (rec != null)\n                            {\n                                if (rec.WindowState == WindowState.Minimized)\n                                    rec.WindowState = WindowState.Normal;\n\n                                //Bring to foreground.\n                                rec.Activate();\n                                return;\n                            }\n                        }\n\n                        OpenRecorder.Execute(null);\n                        return;\n                    }\n                    case 3: //Webcam.\n                    {\n                        if (!OpenWebcamRecorder.CanExecute(null))\n                        {\n                            var rec = Application.Current.Windows.OfType<BaseRecorder>().FirstOrDefault();\n\n                            if (rec != null)\n                            {\n                                if (rec.WindowState == WindowState.Minimized)\n                                    rec.WindowState = WindowState.Normal;\n\n                                //Bring to foreground.\n                                rec.Activate();\n                                return;\n                            }\n                        }\n\n                        OpenWebcamRecorder.Execute(null);\n                        break;\n                    }\n                    case 4: //Board.\n                    {\n                        if (!OpenBoardRecorder.CanExecute(null))\n                        {\n                            var rec = Application.Current.Windows.OfType<BaseRecorder>().FirstOrDefault();\n\n                            if (rec != null)\n                            {\n                                if (rec.WindowState == WindowState.Minimized)\n                                    rec.WindowState = WindowState.Normal;\n\n                                //Bring to foreground.\n                                rec.Activate();\n                                return;\n                            }\n                        }\n\n                        OpenBoardRecorder.Execute(null);\n                        break;\n                    }\n                    case 5: //Editor.\n                    {\n                        OpenEditor.Execute(null);\n                        break;\n                    }\n                }\n\n                break;\n            }\n\n            case 2: //Minimize/restore all windows.\n            {\n                var all = Application.Current.Windows.OfType<Window>().Where(w => w.Content != null).ToList();\n\n                if (all.Count == 0)\n                {\n                    Interact(1, open);\n                    return;\n                }\n\n                if (all.Any(n => n.WindowState != WindowState.Minimized))\n                {\n                    //Minimize all windows, disabling before to prevent some behaviors.\n                    foreach (var f in all)\n                        f.IsEnabled = false;\n\n                    foreach (var f in all)\n                        f.WindowState = WindowState.Minimized;\n\n                    foreach (var f in all)\n                        f.IsEnabled = true;\n                }\n                else\n                {\n                    //Restore all windows.\n                    foreach (var window in all)\n                        window.WindowState = WindowState.Normal;\n                }\n\n                break;\n            }\n\n            case 3: //Minimize all windows.\n            {\n                var all = Application.Current.Windows.OfType<Window>().Where(w => w.Content != null).ToList();\n\n                if (all.Count == 0)\n                {\n                    Interact(1, open);\n                    return;\n                }\n\n                foreach (var window in all)\n                    window.WindowState = WindowState.Minimized;\n\n                break;\n            }\n\n            case 4: //Restore all windows.\n            {\n                var all = Application.Current.Windows.OfType<Window>().Where(w => w.Content != null).ToList();\n\n                if (all.Count == 0)\n                {\n                    Interact(1, open);\n                    return;\n                }\n\n                foreach (var window in all)\n                    window.WindowState = WindowState.Normal;\n\n                break;\n            }\n        }\n    }\n\n    internal void ClearTemporaryFiles()\n    {\n        try\n        {\n            if (!UserSettings.All.AutomaticCleanUp || Global.IsCurrentlyDeletingFiles || string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolderResolved))\n                return;\n\n            Global.IsCurrentlyDeletingFiles = true;\n\n            ClearRecordingCache();\n            ClearUpdateCache();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Automatic clean up\");\n        }\n        finally\n        {\n            Global.IsCurrentlyDeletingFiles = false;\n            CheckDiskSpace();\n        }\n    }\n\n    private void ClearRecordingCache()\n    {\n        try\n        {\n            var path = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Recording\");\n\n            if (!Directory.Exists(path))\n                return;\n\n            var list = Directory.GetDirectories(path).Select(x => new DirectoryInfo(x))\n                .Where(w => (DateTime.Now - w.CreationTime).TotalDays > (UserSettings.All.AutomaticCleanUpDays > 0 ? UserSettings.All.AutomaticCleanUpDays : 5)).ToList();\n\n            //var list = Directory.GetDirectories(path).Select(x => new DirectoryInfo(x));\n\n            foreach (var folder in list)\n            {\n                if (MutexList.IsInUse(folder.Name))\n                    continue;\n\n                Directory.Delete(folder.FullName, true);\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Automatic clean up - Recordings\");\n        }\n    }\n\n    private void ClearUpdateCache()\n    {\n        try\n        {\n            var path = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Updates\");\n\n            if (!Directory.Exists(path))\n                return;\n\n            var list = Directory.EnumerateFiles(path).Select(x => new FileInfo(x))\n                .Where(w => (DateTime.Now - w.CreationTime).TotalDays > (UserSettings.All.AutomaticCleanUpDays > 0 ? UserSettings.All.AutomaticCleanUpDays : 5)).ToList();\n\n            foreach (var file in list)\n                File.Delete(file.FullName);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Automatic clean up - Updates\");\n        }\n    }\n\n    internal void CheckDiskSpace()\n    {\n        if (string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolderResolved))\n            return;\n\n        try\n        {\n            var isRelative = !string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolderResolved) && !Path.IsPathRooted(UserSettings.All.TemporaryFolderResolved);\n            var drive = new DriveInfo((isRelative ? Path.GetFullPath(UserSettings.All.TemporaryFolderResolved) : UserSettings.All.TemporaryFolderResolved).Substring(0, 1));\n\n            Global.AvailableDiskSpacePercentage = drive.AvailableFreeSpace * 100d / drive.TotalSize; //Get the percentage of space left.\n            Global.AvailableDiskSpace = drive.AvailableFreeSpace;\n\n            //If there's less than 2GB left.\n            if (drive.AvailableFreeSpace < 2_000_000_000)\n                Application.Current.Dispatcher?.Invoke(() => NotificationManager.AddNotification(LocalizationHelper.GetWithFormat(\"S.Editor.Warning.LowSpace\", Math.Round(Global.AvailableDiskSpacePercentage, 2)),\n                    StatusType.Warning, \"disk\", () => App.MainViewModel.OpenOptions.Execute(Options.StorageIndex)));\n            else\n                Application.Current.Dispatcher?.Invoke(() => NotificationManager.RemoveNotification(r => r.Tag == \"disk\"));\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while checking the space left in disk\");\n        }\n    }\n\n    internal void SendFeedback()\n    {\n        try\n        {\n            if (string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolderResolved))\n                return;\n\n            var path = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Feedback\");\n\n            if (!Directory.Exists(path))\n                return;\n\n            var list = new DirectoryInfo(path).EnumerateFiles(\"*.html\", SearchOption.TopDirectoryOnly);\n\n            foreach (var file in list)\n            {\n                //Get zip with same name as file\n                var zip = Path.Combine(file.DirectoryName, file.Name.Replace(\".html\", \".zip\"));\n\n                List<string> fileList = null;\n\n                if (File.Exists(zip))\n                    fileList = new List<string> { zip };\n\n                if (!FeedbackHelper.Send(File.ReadAllText(file.FullName), fileList))\n                    continue;\n\n                File.Delete(file.FullName);\n\n                if (File.Exists(zip))\n                    File.Delete(zip);\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Automatic feedback\");\n        }\n    }\n\n    internal async Task CheckForUpdates(bool forceCheck = false)\n    {\n        Global.UpdateAvailable = null;\n\n#if FULL_MULTI_MSIX_STORE\n            return;\n#endif\n\n        NetworkHelper.IsNetworkMetered();\n\n        if (!forceCheck && !UserSettings.All.CheckForUpdates)\n            return;\n        \n        //If the app was installed by Chocolatey, avoid updating via normal means.\n        if (await IsChocolateyPackage())\n            return;\n\n        //Try checking for the update on Github first then fallbacks to Fosshub.\n        if (!await CheckOnGithub())\n            await CheckOnFosshub();\n    }\n\n    private async Task<bool> IsChocolateyPackage()\n    {\n        try\n        {\n            //Binaries distributed via Chocolatey are of Installer or Portable types.\n            if (IdentityHelper.ApplicationType != ApplicationTypes.FullSingle && IdentityHelper.ApplicationType != ApplicationTypes.DependantSingle)\n                return false;\n\n            //If Chocolatey is installed and ScreenToGif was installed via its service, it will be listed.\n            var choco = await ProcessHelper.Start(\"choco list -l screentogif\");\n\n            if (!choco.Contains(\"screentogif\"))\n                return false;\n\n            //The Portable package gets shimmed when installing via choco.\n            //As for the Installer package, I'm letting it to be updated via normal means too (for now).\n            var shim = await ProcessHelper.Start(\"$a='path to executable: '; (ScreenToGif.exe --shimgen-noop | Select-String $a) -split $a | ForEach-Object Trim\");\n            var path = ProcessHelper.GetEntryAssemblyPath();\n\n            return shim.Contains(path);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Not possible to detect Chocolatey package.\");\n            return false;\n        }\n    }\n\n    private async Task<bool> CheckOnGithub()\n    {\n        try\n        {\n            #region GraphQL equivalent\n\n            //query {\n            //    repository(owner: \"NickeManarin\", name: \"ScreenToGif\") {\n            //        releases(first: 1, orderBy: { field: CREATED_AT, direction: DESC}) {\n            //            nodes {\n            //                name\n            //                tagName\n            //                createdAt\n            //                url\n            //                isPrerelease\n            //                description\n            //                releaseAssets(last: 2) {\n            //                    nodes {\n            //                        name\n            //                        downloadCount\n            //                        downloadUrl\n            //                        size\n            //                    }\n            //                }\n            //            }\n            //        }\n            //    }\n            //}\n\n            #endregion\n\n            var proxy = WebHelper.GetProxy();\n            var handler = new HttpClientHandler\n            {\n                Proxy = proxy,\n                UseProxy = proxy != null\n            };\n\n            using var client = new HttpClient(handler);\n            client.DefaultRequestHeaders.Add(\"User-Agent\", \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\");\n            using var response = await client.GetAsync(\"https://api.github.com/repos/NickeManarin/ScreenToGif/releases/latest\");\n            var result = await response.Content.ReadAsStringAsync();\n\n            var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result), new System.Xml.XmlDictionaryReaderQuotas());\n            var release = XElement.Load(jsonReader);\n\n            var version = Version.Parse(release.XPathSelectElement(\"tag_name\")?.Value ?? \"0.1\");\n\n            if (version.Major == 0 || version <= Assembly.GetExecutingAssembly().GetName().Version)\n                return true;\n\n            ParseDownloadUrls(release, version);\n\n            Application.Current.Dispatcher?.Invoke(() => NotificationManager.AddNotification(string.Format(LocalizationHelper.Get(\"S.Updater.NewRelease.Info\"),\n                Global.UpdateAvailable.Version), StatusType.Update, \"update\", PromptUpdate));\n\n            //Download update to be installed when the app closes.\n            if (UserSettings.All.InstallUpdates && Global.UpdateAvailable.HasDownloadLink && (UserSettings.All.DownloadWithMeteredNetwork || !NetworkHelper.IsNetworkMetered()))\n                await DownloadUpdate();\n\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to check for updates on Github\");\n            return false;\n        }\n        finally\n        {\n            GC.Collect();\n        }\n    }\n\n    private bool ParseDownloadUrls(XElement release, Version version, bool fromGithub = true)\n    {\n        var moniker = RuntimeInformation.OSArchitecture switch\n        {\n            Architecture.X64 => \"x64\",\n            Architecture.X86 => \"x86\",\n            _ => \"arm64\"\n        };\n\n        switch (IdentityHelper.ApplicationType)\n        {\n            case ApplicationTypes.FullMultiMsix:\n            {\n                //Only get Msix files.\n                //ScreenToGif.2.36.Package.x64.msix\n                //ScreenToGif.2.36.Package.msix\n\n                var package = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                {\n                    var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                    return name.EndsWith(\".package.\" + moniker + \".msix\") || name.EndsWith(\"package.msix\");\n                });\n\n                return SetDownloadDetails(fromGithub, version, release, package);\n            }\n            case ApplicationTypes.DependantSingle:\n            {\n                //Get portable or installer packages, light or not.\n                //ScreenToGif.2.36.Light.Portable.x64.zip\n                //ScreenToGif.2.36.Light.Portable.zip\n                //Or\n                //ScreenToGif.2.36.Light.Setup.x64.msi\n                //ScreenToGif.2.36.Light.Setup.msi\n\n                var portable = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                {\n                    var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                    return name.EndsWith(\".light.portable.\" + moniker + \".zip\") || name.EndsWith(\".light.portable.zip\");\n                });\n                var installer = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                {\n                    var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                    return name.EndsWith(\".light.setup.\" + moniker + \".msi\") || name.EndsWith(\".light.setup.msi\");\n                });\n\n                //If missing light (framework dependent) variant, download full package.\n                if (installer == null)\n                {\n                    portable = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                    {\n                        var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                        return name.EndsWith(\".portable.\" + moniker + \".zip\") || name.EndsWith(\".portable.zip\");\n                    });\n                    installer = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                    {\n                        var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                        return name.EndsWith(\".setup.\" + moniker + \".msi\") || name.EndsWith(\".setup.msi\");\n                    });\n                }\n\n                return SetDownloadDetails(fromGithub, version, release, installer, portable);\n            }\n            default:\n            {\n                //Get portable or installer packages, light or not.\n                //ScreenToGif.2.36.Portable.x64.zip\n                //ScreenToGif.2.36.Portable.zip\n                //Or\n                //ScreenToGif.2.36.Setup.x64.msi\n                //ScreenToGif.2.36.Setup.msi\n\n                var portable = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                {\n                    var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                    return (name.EndsWith(\".portable.\" + moniker + \".zip\") || name.EndsWith(\"portable.zip\")) && !name.Contains(\".light.\");\n                });\n                var installer = (release.Element(\"assets\") ?? release.Element(\"items\"))?.Elements().FirstOrDefault(f =>\n                {\n                    var name = (f.Element(\"name\")?.Value ?? f.Element(\"title\")?.Value ?? \"\").ToLower();\n\n                    return (name.EndsWith(\".setup.\" + moniker + \".msi\") || name.EndsWith(\"setup.msi\")) && !name.Contains(\".light.\");\n                });\n\n                return SetDownloadDetails(fromGithub, version, release, installer, portable);\n            }\n        }\n    }\n\n    private bool SetDownloadDetails(bool fromGithub, Version version, XElement release, XElement installer, XElement portable = null)\n    {\n        if (installer == null)\n        {\n            Global.UpdateAvailable = new UpdateAvailable\n            {\n                IsFromGithub = fromGithub,\n                Version = version,\n                Description = release.XPathSelectElement(\"body\")?.Value ?? \"\",\n                MustDownloadManually = true\n            };\n\n            return false;\n        }\n\n        if (fromGithub)\n        {\n            Global.UpdateAvailable = new UpdateAvailable\n            {\n                Version = version,\n                Description = release.XPathSelectElement(\"body\")?.Value ?? \"\",\n\n                PortableDownloadUrl = portable?.Element(\"browser_download_url\")?.Value ?? \"\",\n                PortableSize = Convert.ToInt64(portable?.Element(\"size\")?.Value ?? \"0\"),\n                PortableName = portable?.Element(\"name\")?.Value ?? \"ScreenToGif.zip\",\n\n                InstallerDownloadUrl = installer.Element(\"browser_download_url\")?.Value ?? \"\",\n                InstallerSize = Convert.ToInt64(installer.Element(\"size\")?.Value ?? \"0\"),\n                InstallerName = installer.Element(\"name\")?.Value ?? \"ScreenToGif.Setup.msi\"\n            };\n\n            return true;\n        }\n\n        Global.UpdateAvailable = new UpdateAvailable\n        {\n            IsFromGithub = false,\n            Version = version,\n            PortableDownloadUrl = portable?.Element(\"link\")?.Value ?? \"\",\n            InstallerDownloadUrl = installer.Element(\"link\")?.Value ?? \"\",\n        };\n\n        return true;\n    }\n\n    private async Task CheckOnFosshub()\n    {\n        try\n        {\n            var proxy = WebHelper.GetProxy();\n            var handler = new HttpClientHandler\n            {\n                Proxy = proxy,\n                UseProxy = proxy != null,\n            };\n\n            using var client = new HttpClient(handler);\n            client.DefaultRequestHeaders.Add(\"User-Agent\", \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\");\n            using var response = await client.GetAsync(\"https://www.fosshub.com/feed/5bfc6fce8c9fe8186f809d24.json\");\n            var result = await response.Content.ReadAsStringAsync();\n\n            var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result), new System.Xml.XmlDictionaryReaderQuotas());\n            var release = XElement.Load(jsonReader);\n\n            var version = Version.Parse(release.XPathSelectElement(\"release/items\")?.FirstNode?.XPathSelectElement(\"version\")?.Value ?? \"0.1\");\n\n            if (version.Major == 0 || version <= Assembly.GetExecutingAssembly().GetName().Version)\n                return;\n\n            ParseDownloadUrls(release, version);\n\n            //With Fosshub, the download must be manual.\n            Application.Current.Dispatcher?.Invoke(() => NotificationManager.AddNotification(string.Format(LocalizationHelper.Get(\"S.Updater.NewRelease.Info\"), Global.UpdateAvailable.Version),\n                StatusType.Update, \"update\", PromptUpdate));\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to check for updates on Fosshub\");\n        }\n        finally\n        {\n            GC.Collect();\n        }\n    }\n\n    internal async Task<bool> DownloadUpdate()\n    {\n        try\n        {\n            lock (UserSettings.Lock)\n            {\n                if (string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolderResolved) || Global.UpdateAvailable.IsDownloading)\n                    return false;\n\n                var folder = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Updates\");\n\n                if (!Directory.Exists(folder))\n                    Directory.CreateDirectory(folder);\n\n                Global.UpdateAvailable.ActivePath = Path.Combine(folder, Global.UpdateAvailable.ActiveName);\n\n                //Check if installer was already downloaded.\n                if (File.Exists(Global.UpdateAvailable.ActivePath))\n                {\n                    //Minor issue, if for some reason, the update has the exact same size, this won't work properly. I would need to check a hash.\n                    if (GetSize(Global.UpdateAvailable.ActivePath) == Global.UpdateAvailable.ActiveSize)\n                        return false;\n\n                    File.Delete(Global.UpdateAvailable.ActivePath);\n                }\n\n                Global.UpdateAvailable.IsDownloading = true;\n            }\n\n            var proxy = WebHelper.GetProxy();\n            var handler = new HttpClientHandler\n            {\n                Proxy = proxy,\n                UseProxy = proxy != null,\n            };\n\n            //TODO: Use HttpClientFactory\n            //https://www.aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/\n            //https://marcominerva.wordpress.com/2019/03/13/using-httpclientfactory-with-wpf-on-net-core-3-0/\n\n            using (var client = new HttpClient(handler))\n            {\n                client.DefaultRequestHeaders.Add(\"User-Agent\", \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\");\n\n                var response = await client.GetAsync(Global.UpdateAvailable.ActiveDownloadUrl);\n\n                if (response.IsSuccessStatusCode)\n                {\n                    var stream = await response.Content.ReadAsStreamAsync();\n                    var fileInfo = new FileInfo(Global.UpdateAvailable.ActivePath);\n                    await using var fileStream = fileInfo.OpenWrite();\n                    await stream.CopyToAsync(fileStream);\n                }\n                else\n                {\n                    throw new FileNotFoundException(\"Impossible to download update.\");\n                }\n            }\n\n            Global.UpdateAvailable.MustDownloadManually = false;\n            Global.UpdateAvailable.TaskCompletionSource?.TrySetResult(true);\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to automatically download update\");\n            Global.UpdateAvailable.MustDownloadManually = true;\n            Global.UpdateAvailable.TaskCompletionSource?.TrySetResult(false);\n            return false;\n        }\n        finally\n        {\n            Global.UpdateAvailable.IsDownloading = false;\n        }\n    }\n\n    internal bool InstallUpdate(bool wasPromptedManually = false)\n    {\n        try\n        {\n            //No new release available.\n            if (Global.UpdateAvailable == null)\n                return false;\n\n            //TODO: Check if Windows is not turning off.\n\n            var runAfterwards = false;\n\n            //Prompt if:\n            //Not configured to download the update automatically OR\n            //Configured to download but set to prompt anyway OR\n            //Update binary detection failed (manual update required) OR\n            //Download not completed (perharps because the notification was triggered by a query on Fosshub).\n            if (UserSettings.All.PromptToInstall || !UserSettings.All.InstallUpdates || string.IsNullOrWhiteSpace(Global.UpdateAvailable.ActivePath) || Global.UpdateAvailable.MustDownloadManually)\n            {\n                var download = new DownloadDialog { WasPromptedManually = wasPromptedManually };\n                var result = download.ShowDialog();\n\n                if (!result.HasValue || !result.Value)\n                    return false;\n\n                runAfterwards = download.RunAfterwards;\n            }\n\n            //Only try to install if the update was downloaded.\n            if (!File.Exists(Global.UpdateAvailable.ActivePath))\n                return false;\n\n            if (UserSettings.All.PortableUpdate || IdentityHelper.ApplicationType == ApplicationTypes.FullMultiMsix)\n            {\n                //In portable or Msix mode, simply open the zip/msix file and close ScreenToGif.\n                ProcessHelper.StartWithShell(Global.UpdateAvailable.ActivePath);\n                return true;\n            }\n\n            //Detect installed components.\n            var files = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory).ToList();\n            var isInstaller = files.Any(x => x.ToLowerInvariant().EndsWith(\"screentogif.visualelementsmanifest.xml\"));\n            var hasGifski = files.Any(x => x.ToLowerInvariant().EndsWith(\"gifski.dll\"));\n            var hasDesktopShortcut = File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), \"ScreenToGif.lnk\")) ||\n                                     File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), \"ScreenToGif.lnk\"));\n            var hasMenuShortcut = File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"Microsoft\", \"Windows\", \"Start Menu\", \"Programs\", \"ScreenToGif.lnk\")) ||\n                                  File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), \"Microsoft\", \"Windows\", \"Start Menu\", \"Programs\", \"ScreenToGif.lnk\"));\n\n            //MsiExec does not like relative paths.\n            var isRelative = !string.IsNullOrWhiteSpace(Global.UpdateAvailable.InstallerPath) && !Path.IsPathRooted(Global.UpdateAvailable.InstallerPath);\n            var nonRoot = isRelative ? Path.GetFullPath(Global.UpdateAvailable.InstallerPath) : Global.UpdateAvailable.InstallerPath;\n\n            //msiexec /i PATH INSTALLDIR=\"\" INSTALLAUTOMATICALLY=yes INSTALLPORTABLE=No ADDLOCAL=Binary\n            //msiexec /a PATH TARGETDIR=\"\" INSTALLAUTOMATICALLY=yes INSTALLPORTABLE=yes ADDLOCAL=Binary\n\n            var startInfo = new ProcessStartInfo\n            {\n                FileName = \"msiexec\",\n                Arguments = $\" {(isInstaller ? \"/i\" : \"/a\")} \\\"{nonRoot}\\\"\" +\n                            $\" {(isInstaller ? \"INSTALLDIR\" : \"TARGETDIR\")}=\\\"{AppDomain.CurrentDomain.BaseDirectory}\\\" INSTALLAUTOMATICALLY=yes INSTALLPORTABLE={(isInstaller ? \"no\" : \"yes\")}\" +\n                            $\" ADDLOCAL=Binary{(isInstaller ? \",Auxiliar\" : \"\")}{(hasGifski ? \",Gifski\" : \"\")}\" +\n                            $\" {(wasPromptedManually && runAfterwards ? \"RUNAFTER=yes\" : \"\")}\" +\n                            (isInstaller ? $\" INSTALLDESKTOPSHORTCUT={(hasDesktopShortcut ? \"yes\" : \"no\")} INSTALLSHORTCUT={(hasMenuShortcut ? \"yes\" : \"no\")}\" : \"\"),\n                Verb = UserSettings.All.ForceUpdateAsAdmin ? \"runas\" : \"\"\n            };\n\n            using (var process = new Process { StartInfo = startInfo })\n                process.Start();\n\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to automatically install update\");\n\n            ErrorDialog.Ok(\"ScreenToGif\", \"It was not possible to install the update\", ex.Message, ex);\n            return false;\n        }\n    }\n\n    private long GetSize(string path)\n    {\n        var info = new FileInfo(path);\n        info.Refresh();\n\n        return info.Length;\n    }\n\n    #endregion\n}\n\ninternal interface IExtendedCommand<in T, in TR>\n{\n    event EventHandler CanExecuteChanged;\n\n    bool CanExecute(object parameter);\n\n    void Execute(T parameter, TR secondParameter = default);\n}\n\ninternal class RelayCommand : ICommand\n{\n    public Predicate<object> CanExecutePredicate { get; set; }\n    public Action<object> ExecuteAction { get; set; }\n\n    public RelayCommand(Predicate<object> canExecute, Action<object> execute)\n    {\n        CanExecutePredicate = canExecute;\n        ExecuteAction = execute;\n    }\n\n    public RelayCommand()\n    { }\n\n    public event EventHandler CanExecuteChanged\n    {\n        add => CommandManager.RequerySuggested += value;\n        remove => CommandManager.RequerySuggested -= value;\n    }\n\n    public bool CanExecute(object parameter)\n    {\n        return CanExecutePredicate == null || CanExecutePredicate(parameter);\n    }\n\n    public void Execute(object parameter)\n    {\n        ExecuteAction(parameter);\n    }\n}\n\ninternal class AdvancedRelayCommand<T, TR> : IExtendedCommand<T, TR>\n{\n    public Predicate<object> CanExecutePredicate { get; set; }\n    public Action<T, TR> ExecuteAction { get; set; }\n\n    public AdvancedRelayCommand(Predicate<object> canExecute, Action<T, TR> execute)\n    {\n        CanExecutePredicate = canExecute;\n        ExecuteAction = execute;\n    }\n\n    public AdvancedRelayCommand()\n    { }\n\n    public event EventHandler CanExecuteChanged\n    {\n        add => CommandManager.RequerySuggested += value;\n        remove => CommandManager.RequerySuggested -= value;\n    }\n\n    public bool CanExecute(object parameter)\n    {\n        return CanExecutePredicate == null || CanExecutePredicate(parameter);\n    }\n\n    public void Execute(T parameter, TR secondParamater = default)\n    {\n        ExecuteAction(parameter, secondParamater);\n    }\n}\n\ninternal class ObsoleteAdvancedRelayCommand : RoutedUICommand, ICommand\n{\n    public Predicate<object> CanExecutePredicate { get; set; }\n    public Action<object> ExecuteAction { get; set; }\n\n    public ObsoleteAdvancedRelayCommand()\n    { }\n\n    public ObsoleteAdvancedRelayCommand(string text, string name, Type ownerType, InputGestureCollection inputGestures) : base(text, name, ownerType, inputGestures)\n    { }\n\n    bool ICommand.CanExecute(object parameter)\n    {\n        return CanExecutePredicate == null || CanExecutePredicate(parameter);\n    }\n\n    void ICommand.Execute(object parameter)\n    {\n        ExecuteAction(parameter);\n    }\n\n    //public bool CanExecute(object parameter)\n    //{\n    //    return CanExecutePredicate == null || CanExecutePredicate(parameter);\n    //}\n\n    //public void Execute(object parameter)\n    //{\n    //    ExecuteAction(parameter);\n    //}\n}"
  },
  {
    "path": "ScreenToGif/ViewModel/DithererDescriptor.cs",
    "content": "#region Usings\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Reflection;\n\nusing KGySoft.Drawing.Imaging;\nusing KGySoft.Reflection;\n\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\n#endregion\n\nnamespace ScreenToGif.ViewModel;\n\n/// <summary>\n/// Represents a read-only descriptor ViewModel for a ditherer.\n/// In fact, would be better as a nested class in <see cref=\"KGySoftGifOptionsViewModel\"/> but WPF binding does not tolerate that.\n/// </summary>\npublic class DithererDescriptor\n{\n    #region Fields\n\n    #region Static Fields\n\n    private static readonly DithererDescriptor[] _ditherers =\n    {\n        new(null),\n\n        new(typeof(OrderedDitherer), nameof(OrderedDitherer.Bayer2x2)),\n        new(typeof(OrderedDitherer), nameof(OrderedDitherer.Bayer3x3)),\n        new(typeof(OrderedDitherer), nameof(OrderedDitherer.Bayer4x4)),\n        new(typeof(OrderedDitherer), nameof(OrderedDitherer.Bayer8x8)),\n        new(typeof(OrderedDitherer), nameof(OrderedDitherer.DottedHalftone)),\n        new(typeof(OrderedDitherer), nameof(OrderedDitherer.BlueNoise)),\n\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.Atkinson)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.Burkes)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.FloydSteinberg)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.JarvisJudiceNinke)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.Sierra3)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.Sierra2)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.SierraLite)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.StevensonArce)),\n        new(typeof(ErrorDiffusionDitherer), nameof(ErrorDiffusionDitherer.Stucki)),\n\n        new(typeof(RandomNoiseDitherer).GetConstructor(new[] { typeof(float), typeof(int?) })),\n        new(typeof(InterleavedGradientNoiseDitherer).GetConstructor(new[] { typeof(float) })),\n    };\n\n    private static readonly Dictionary<string, DithererDescriptor> _ditherersById = _ditherers.Where(d => d.Id != null).ToDictionary(d => d.Id);\n\n    #endregion\n\n    #region Instance Fields\n\n    private readonly CreateInstanceAccessor _ctor;\n    private readonly ParameterInfo[] _parameters;\n    private readonly PropertyAccessor _property;\n\n    #endregion\n\n    #endregion\n\n    #region Properties\n\n    #region Static Properties\n\n    internal static DithererDescriptor[] Ditherers => _ditherers;\n\n    #endregion\n\n    #region Instance Properties\n\n    public string Id { get; }\n    public string Title => LocalizationHelper.Get($\"S.SaveAs.KGySoft.Ditherer.{Id?.Replace(\"x\", \"X\") ?? \"None\"}\");\n    public string Description => LocalizationHelper.Get($\"S.SaveAs.KGySoft.Ditherer.{Id?.Replace(\"x\", \"X\") ?? \"None\"}.Info\");\n    public bool HasStrength { get; }\n    public bool HasSeed { get; }\n    public bool HasSerpentineProcessing { get; }\n\n    #endregion\n\n    #endregion\n\n    #region Constructors\n\n    private DithererDescriptor(Type type, string propertyName) : this(type.GetProperty(propertyName))\n    {}\n\n    private DithererDescriptor(MemberInfo member)\n    {\n        switch (member)\n        {\n            case ConstructorInfo ctor:\n                _parameters = ctor.GetParameters();\n                _ctor = CreateInstanceAccessor.GetAccessor(ctor);\n                Id = ctor.DeclaringType.Name;\n                HasStrength = _parameters.Any(p => p.Name == \"strength\");\n                HasSeed = _parameters.Any(p => p.Name == \"seed\");\n                break;\n\n            case PropertyInfo property:\n                _property = PropertyAccessor.GetAccessor(property);\n                Id = $\"{property.DeclaringType.Name}.{property.Name}\";\n                HasStrength = property.DeclaringType == typeof(OrderedDitherer);\n                HasSerpentineProcessing = property.DeclaringType == typeof(ErrorDiffusionDitherer);\n                break;\n\n            case null:\n                break;\n\n            default:\n                throw new ArgumentException($\"Unexpected member: {member}\");\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    internal static IDitherer Create(string id, KGySoftGifPreset preset)\n    {\n        if (id == null)\n            return null;\n\n        var descriptor = _ditherersById.GetValueOrDefault(id) ?? throw new ArgumentException($\"Invalid {id}\", nameof(id));\n\n        //By constructor\n        if (descriptor._ctor != null)\n        {\n            var args = new object[descriptor._parameters.Length];\n\n            for (var i = 0; i < descriptor._parameters.Length; i++)\n            {\n                switch (descriptor._parameters[i].Name)\n                {\n                    case \"strength\":\n                        args[i] = preset.Strength;\n                        break;\n                    case \"seed\":\n                        args[i] = preset.Seed;\n                        break;\n                    default:\n                        throw new InvalidOperationException($\"Unexpected parameter: {descriptor._parameters[i]}\");\n                }\n            }\n\n            return (IDitherer)descriptor._ctor.CreateInstance(args);\n        }\n\n        //By property\n        Debug.Assert(descriptor._property != null);\n        var result = (IDitherer)descriptor._property.Get(null);\n\n        switch (result)\n        {\n            case OrderedDitherer ordered when preset.Strength > 0f:\n                result = ordered.ConfigureStrength(preset.Strength);\n                break;\n            case ErrorDiffusionDitherer errorDiffusion when preset.IsSerpentineProcessing:\n                result = errorDiffusion.ConfigureProcessingDirection(true);\n                break;\n        }\n\n        return result;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/ViewModel/KGySoftGifOptionsViewModel.cs",
    "content": "#region Usings\n\n#region Used Namespaces\n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Drawing;\nusing System.IO;\nusing System.Linq;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Media;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing KGySoft.ComponentModel;\nusing KGySoft.Drawing;\nusing KGySoft.Drawing.Imaging;\nusing KGySoft.Drawing.Wpf;\nusing KGySoft.Threading;\n\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\n#endregion\n\n#region Used Aliases\n\nusing Color = System.Windows.Media.Color;\n\n#endregion\n\n#endregion\n\n#nullable enable\n\nnamespace ScreenToGif.ViewModel;\n\n/// <summary>\n/// Provides the ViewModel class for the <see cref=\"KGySoftGifPreset\"/> model type.\n/// </summary>\npublic class KGySoftGifOptionsViewModel : ObservableObjectBase\n{\n    #region Nested Types\n\n    private record Configuration // as a record, so equality check compares the properties\n    {\n        #region Properties\n\n        internal IReadableBitmapData? Frame { get; private init; }\n        internal string? QuantizerId { get; private init; }\n        internal string? DithererId { get; private init; }\n        internal Color BackColor { get; private init; }\n        internal byte AlphaThreshold { get; private init; }\n        internal byte WhiteThreshold { get; private init; }\n        internal bool DirectMapping { get; private init; }\n        internal int PaletteSize { get; private init; }\n        internal byte? BitLevel { get; private init; }\n        internal bool LinearColorSpace { get; private init; }\n        internal float Strength { get; private init; }\n        internal int? Seed { get; private init; }\n        internal bool IsSerpentineProcessing { get; private init; }\n\n        #endregion\n\n        #region Methods\n\n        internal static Configuration Capture(KGySoftGifOptionsViewModel viewModel) => new Configuration\n        {\n            Frame = viewModel._currentFrame,\n            QuantizerId = viewModel.QuantizerId,\n            DithererId = viewModel.DithererId,\n            BackColor = viewModel.BackColor,\n            AlphaThreshold = viewModel.AlphaThreshold,\n            WhiteThreshold = viewModel.WhiteThreshold,\n            DirectMapping = viewModel.DirectMapping,\n            PaletteSize = viewModel.PaletteSize,\n            BitLevel = viewModel.BitLevel,\n            LinearColorSpace = viewModel.LinearColorSpace,\n            Strength = viewModel.Strength,\n            Seed = viewModel.Seed,\n            IsSerpentineProcessing = viewModel.IsSerpentineProcessing,\n        };\n\n        #endregion\n\n        #region Methods\n\n        // NOTE: Cannot use KGySoftGifOptionsViewModel._preset because it mutates the same instance,\n        // and the result should not be a cached in a field either, because it would be included in record equality.\n        internal KGySoftGifPreset GetPreset() => new KGySoftGifPreset\n        {\n            QuantizerId = QuantizerId,\n            DithererId = DithererId,\n            BackColor = BackColor,\n            AlphaThreshold = AlphaThreshold,\n            WhiteThreshold = WhiteThreshold,\n            DirectMapping = DirectMapping,\n            PaletteSize = PaletteSize,\n            BitLevel = BitLevel,\n            LinearColorSpace = LinearColorSpace,\n            Strength = Strength,\n            Seed = Seed,\n            IsSerpentineProcessing = IsSerpentineProcessing\n        };\n\n        #endregion\n    }\n\n    #endregion\n\n    #region Fields\n\n    #region Static Fields\n\n    private static readonly HashSet<string?> _affectsPreview =\n    [\n        nameof(QuantizerId),\n        nameof(BackColor),\n        nameof(AlphaThreshold),\n        nameof(WhiteThreshold),\n        nameof(DirectMapping),\n        nameof(PaletteSize),\n        nameof(BitLevel),\n        nameof(LinearColorSpace),\n\n        // ditherer settings\n        nameof(DithererId),\n        nameof(Strength),\n        nameof(Seed),\n        nameof(IsSerpentineProcessing),\n\n        // preview settings\n        nameof(ShowCurrentFrame)\n    ];\n\n    private static readonly HashSet<string?> _affectsNotifications =\n    [\n        nameof(QuantizerId),\n        nameof(AlphaThreshold),\n        nameof(AllowDeltaFrames),\n        nameof(AllowClippedFrames),\n        nameof(DeltaTolerance)\n    ];\n    \n    private static bool _lastShowCurrentFrame = true;\n    private static string? _lastDitherer;\n\n    #endregion\n\n    #region Instance Fields\n\n    private readonly KGySoftGifPreset _preset;\n    private readonly SemaphoreSlim _syncRoot = new SemaphoreSlim(1, 1);\n\n    private WriteableBitmap? _previewBitmap;\n    private IReadableBitmapData? _currentFrame;\n    private CancellationTokenSource? _cancelGeneratingPreview;\n    private Task? _generatePreviewTask;\n\n    #endregion\n\n    #endregion\n\n    #region Properties\n\n    // Quantizer\n    [SuppressMessage(\"Performance\", \"CA1822:Mark members as static\", Justification = \"Used by WPF binding\")]\n    public QuantizerDescriptor[] Quantizers => QuantizerDescriptor.Quantizers;\n    public string QuantizerId { get => Get(_preset.QuantizerId ?? QuantizerDescriptor.Quantizers[0].Id); set => Set(_preset.QuantizerId = value); }\n    public Color BackColor { get => Get(_preset.BackColor); set => Set(_preset.BackColor = value); }\n    public byte AlphaThreshold { get => Get(_preset.AlphaThreshold); set => Set(_preset.AlphaThreshold = value); }\n    public byte WhiteThreshold { get => Get(_preset.WhiteThreshold); set => Set(_preset.WhiteThreshold = value); }\n    public bool DirectMapping { get => Get(_preset.DirectMapping); set => Set(_preset.DirectMapping = value); }\n    public int PaletteSize { get => Get(_preset.PaletteSize); set => Set(_preset.PaletteSize = value); }\n    public byte? BitLevel { get => Get(_preset.BitLevel); set => Set(_preset.BitLevel = value); }\n    public bool IsCustomBitLevel { get => Get(_preset.BitLevel.HasValue); set => Set(value); }\n    public bool LinearColorSpace { get => Get(_preset.LinearColorSpace); set => Set(_preset.LinearColorSpace = value); }\n\n    // Ditherer\n    public bool UseDitherer { get => Get(_preset.DithererId != null); set => Set(value); }\n    public DithererDescriptor[] Ditherers => DithererDescriptor.Ditherers;\n    public string? DithererId { get => Get(_preset.DithererId); set => Set(_preset.DithererId = value); }\n    public float Strength { get => Get(_preset.Strength); set => Set(_preset.Strength = value); }\n    public int? Seed { get => Get(_preset.Seed); set => Set(_preset.Seed = value); }\n    public bool IsSerpentineProcessing { get => Get(_preset.IsSerpentineProcessing); set => Set(_preset.IsSerpentineProcessing = value); }\n\n    // Preview\n    public bool ShowCurrentFrame { get => Get(_lastShowCurrentFrame); set => Set(_lastShowCurrentFrame = value); }\n    public string? CurrentFramePath { get => Get<string?>(); set => Set(value); }\n    public bool IsGenerating { get => Get<bool>(); set => Set(value); }\n    public WriteableBitmap? PreviewImage { get => Get<WriteableBitmap>(); set => Set(value); }\n    public bool ShowRefreshPreview { get => Get<bool>(); set => Set(value); }\n    public string? PreviewError { get => Get<string?>(); set => Set(value); }\n\n    // Animation Settings\n    public int RepeatCount { get => Get(_preset.RepeatCount); set => Set(_preset.RepeatCount = value); }\n    public bool EndlessLoop { get => Get(_preset.RepeatCount <= 0); set => Set(value); }\n    public bool PingPong { get => Get(_preset.RepeatCount < 0); set => Set(value); }\n    public bool AllowDeltaFrames { get => Get(_preset.AllowDeltaFrames); set => Set(_preset.AllowDeltaFrames = value); }\n    public bool AllowClippedFrames { get => Get(_preset.AllowClippedFrames); set => Set(_preset.AllowClippedFrames = value); }\n    public byte DeltaTolerance { get => Get(_preset.DeltaTolerance); set => Set(_preset.DeltaTolerance = value); }\n    public bool IsAllowDeltaIgnored { get => Get<bool>(); set => Set(value); }\n    public bool IsAllowClippedIgnored { get => Get<bool>(); set => Set(value); }\n    public bool IsHighTolerance { get => Get<bool>(); set => Set(value); }\n\n    #endregion\n\n    #region Constructors\n\n    public KGySoftGifOptionsViewModel(KGySoftGifPreset preset)\n    {\n        _preset = preset;\n        _lastDitherer = preset.DithererId;\n    }\n\n    #endregion\n\n    #region Methods\n\n    #region Internal Methods\n\n    internal async Task Apply()\n    {\n        AdjustNotifications();\n        if (_previewBitmap != null)\n            return;\n\n        if (IsExpensivePreview())\n        {\n            ShowRefreshPreview = true;\n            return;\n        }\n\n        await EnsureCurrentFrame();\n        await GeneratePreviewAsync(Configuration.Capture(this));\n    }\n\n    internal async Task RefreshPreview()\n    {\n        ShowRefreshPreview = false;\n        await EnsureCurrentFrame();\n        await GeneratePreviewAsync(Configuration.Capture(this));\n    }\n\n    #endregion\n\n    #region Protected Methods\n\n    [SuppressMessage(\"ReSharper\", \"AsyncVoidEventHandlerMethod\", Justification = \"Overridden event handler method.\")]\n    protected override async void OnPropertyChanged(PropertyChangedExtendedEventArgs e)\n    {\n        base.OnPropertyChanged(e);\n        if (IsDisposed)\n            return;\n\n        switch (e.PropertyName)\n        {\n            case nameof(BitLevel):\n                IsCustomBitLevel = BitLevel.HasValue;\n                break;\n            case nameof(IsCustomBitLevel):\n                if (IsCustomBitLevel)\n                {\n                    if (BitLevel is null or < 1 or > 8)\n                        BitLevel = 5;\n                }\n                else\n                    BitLevel = null;\n                break;\n\n            case nameof(UseDitherer):\n                DithererId = e.NewValue is true ? _lastDitherer ?? Ditherers.First(d => d.Id != null).Id : null;\n                break;\n            case nameof(DithererId):\n                _lastDitherer = _preset.DithererId ?? _lastDitherer;\n                UseDitherer = _preset.DithererId != null;\n                break;\n\n            case nameof(CurrentFramePath):\n                if (ShowCurrentFrame)\n                    await UpdateCurrentFrameAsync();\n                break;\n            case nameof(ShowCurrentFrame):\n                await UpdateCurrentFrameAsync();\n                break;\n\n            case nameof(RepeatCount):\n                EndlessLoop = e.NewValue is <= 0;\n                PingPong = e.NewValue is < 0;\n                break;\n\n            case nameof(EndlessLoop):\n                if (e.NewValue is true)\n                    RepeatCount = 0;\n                else if (RepeatCount <= 0)\n                    RepeatCount = 1;\n                break;\n\n            case nameof(PingPong):\n                if (e.NewValue is true)\n                    RepeatCount = -1;\n                break;\n        }\n\n        // As there are some awaits among the cases above we need to re-check if we are already disposed.\n        if (IsDisposed)\n            return;\n\n        if (_affectsNotifications.Contains(e.PropertyName))\n            AdjustNotifications();\n\n        if (_affectsPreview.Contains(e.PropertyName) || e.PropertyName == nameof(CurrentFramePath) && ShowCurrentFrame)\n        {\n            if (PreviewError != null)\n                return;\n\n            if (IsExpensivePreview())\n            {\n                PreviewImage = null;\n                ShowRefreshPreview = true;\n                return;\n            }\n\n            await EnsureCurrentFrame();\n            await GeneratePreviewAsync(Configuration.Capture(this));\n        }\n    }\n\n    protected override void Dispose(bool disposing)\n    {\n        if (IsDisposed)\n            return;\n\n        // Canceling possible pending task but not awaiting it in Dispose, which is intended. GetAwaiter is just to suppress CS4014.\n        if (disposing)\n            CancelAndAwaitPendingGenerate().GetAwaiter();\n\n        base.Dispose(disposing);\n        if (disposing)\n        {\n            _previewBitmap = null;\n            _currentFrame?.Dispose();\n            _cancelGeneratingPreview?.Dispose();\n            _syncRoot.Dispose();\n        }\n    }\n\n    #endregion\n\n    #region Private Methods\n\n    private void AdjustNotifications()\n    {\n        var hasAlpha = QuantizerDescriptor.GetById(QuantizerId)?.HasAlphaThreshold is true && AlphaThreshold > 0;\n        IsAllowDeltaIgnored = !hasAlpha && AllowDeltaFrames && !AllowClippedFrames;\n        IsAllowClippedIgnored = !hasAlpha && !AllowDeltaFrames && AllowClippedFrames;\n        IsHighTolerance = DeltaTolerance > 64;\n    }\n\n    private async Task UpdateCurrentFrameAsync()\n    {\n        while (_currentFrame != null)\n        {\n            var currentFrame = _currentFrame;\n            await CancelAndAwaitPendingGenerate();\n\n            _currentFrame = null;\n            currentFrame.Dispose();\n            if (IsDisposed)\n                return;\n        }\n\n        if (CurrentFramePath == null || !Path.Exists(CurrentFramePath))\n        {\n            PreviewImage = null;\n            return;\n        }\n\n        // Note: we could use WPF images to open current frame: new WriteableBitmap(new BitmapImage(new Uri(CurrentFramePath))).GetReadWriteBitmapData();\n        // but it has serious drawbacks:\n        // - It copies the pixels one more time (BitmapImage->WriteableBitmap because WriteableBitmap cannot be created from an image file directly)\n        // - In WPF nothing is disposable (not even bitmaps, which wrap unmanaged handles) so we can't get rid of the temporarily allocated memory immediately\n        // Therefore, we use a disposable GDI+ Bitmap to create a managed clone of the image as simply as possible\n        try\n        {\n            using var bmp = ShowCurrentFrame ? new Bitmap(CurrentFramePath) : Icons.Shield.ExtractBitmap(new Size(256, 256))!;\n            using var nativeBitmapData = bmp.GetReadableBitmapData();\n            _currentFrame = (await nativeBitmapData.CloneAsync(nativeBitmapData.PixelFormat.ToKnownPixelFormat()))!; // will not be null, because it is never canceled\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Failed to update current frame.\");\n            _currentFrame = null;\n            _previewBitmap = null;\n            return;\n        }\n\n        // Since WriteableBitmap is not disposable we try to re-use it as much as possible.\n        // It is nullified only when the resolution changes (as frames have the same resolution it happens only when toggling built-in/current frame preview)\n        if (_previewBitmap != null && (_previewBitmap.PixelWidth != _currentFrame.Width || _previewBitmap.PixelHeight != _currentFrame.Height))\n            _previewBitmap = null;\n    }\n\n    private async Task EnsureCurrentFrame()\n    {\n        if (_currentFrame == null)\n            await UpdateCurrentFrameAsync();\n    }\n\n    private async Task GeneratePreviewAsync(Configuration cfg)\n    {\n        if (IsDisposed || cfg.Frame == null)\n            return;\n\n        // Using a while instead of an if, because the awaits make this method reentrant, and a continuation can be spawn after any await at any time.\n        // Therefore, it is possible that though we cleared _generatePreviewTask in WaitForPendingGenerate, it is not null upon starting the continuation.\n        while (_generatePreviewTask != null)\n            await CancelAndAwaitPendingGenerate();\n\n        // Using a manually completable task for the generateResultTask field. If this method had just one awaitable task we could simply assign that to the field.\n        TaskCompletionSource? generateTaskCompletion = null;\n\n        // This is essentially a lock. Achieved by a SemaphoreSlim, because an actual lock cannot be used with awaits in the code.\n        await _syncRoot.WaitAsync();\n        try\n        {\n            // lost race: returning if configuration has been changed by the time we entered the lock\n            if (cfg != Configuration.Capture(this) || IsDisposed)\n                return;\n\n            Debug.Assert(_cancelGeneratingPreview == null && _generatePreviewTask == null);\n\n            // We don't care about DPI here, the preview is stretched anyway.\n            // The instance is created only for the first time or when resolution changes (e.g. when toggling built-in/current frame preview)\n            _previewBitmap ??= new WriteableBitmap(cfg.Frame.Width, cfg.Frame.Height, 96, 96, PixelFormats.Pbgra32, null);\n\n            // Storing the task and cancellation source to a field, so it can be canceled/awaited on reentering, disposing, etc.\n            var tokenSource = _cancelGeneratingPreview = new CancellationTokenSource();\n            generateTaskCompletion = new TaskCompletionSource();\n            _generatePreviewTask = generateTaskCompletion.Task;\n            var token = tokenSource.Token;\n\n            ShowRefreshPreview = false;\n            PreviewError = null;\n            IsGenerating = true;\n            var bitmapData = _previewBitmap.GetReadWriteBitmapData();\n            try\n            {\n                var capturedPreset = cfg.GetPreset();\n                await cfg.Frame.CopyToAsync(bitmapData,\n                    new Rectangle(Point.Empty, new Size(cfg.Frame.Width, cfg.Frame.Height)), Point.Empty,\n                    QuantizerDescriptor.Create(cfg.QuantizerId, capturedPreset),\n                    DithererDescriptor.Create(cfg.DithererId, capturedPreset),\n                    new TaskConfig { CancellationToken = token, ThrowIfCanceled = false });\n            }\n            catch (Exception e)\n            {\n                if (IsDisposed || token.IsCancellationRequested)\n                    return;\n\n                LogWriter.Log(e, \"Failed to generate preview.\");\n                PreviewImage = null;\n                PreviewError = LocalizationHelper.GetWithFormat(\"S.SaveAs.KGySoft.Preview.Error\", \"Failed to generate preview: {0}\", e.Message);\n                return;\n            }\n            finally\n            {\n                bitmapData.Dispose();\n                if (!IsDisposed)\n                    IsGenerating = false;\n            }\n\n            if (token.IsCancellationRequested || ShowRefreshPreview)\n                return;\n\n            // Triggering preview update. Since we try to reuse always the same WriteableBitmap instance it might need a little trick:\n            if (ReferenceEquals(PreviewImage, _previewBitmap))\n                OnPropertyChanged(new PropertyChangedExtendedEventArgs(null, _previewBitmap, nameof(PreviewImage)));\n            else\n                PreviewImage = _previewBitmap;\n        }\n        finally\n        {\n            generateTaskCompletion?.SetResult();\n            try\n            {\n                if (!IsDisposed)\n                    _syncRoot.Release();\n            }\n            catch (ObjectDisposedException)\n            {\n                // there is still a small chance\n            }\n        }\n    }\n\n    private async Task CancelAndAwaitPendingGenerate()\n    {\n        #region Local Methods\n\n        void CancelRunningGenerate()\n        {\n            var tokenSource = _cancelGeneratingPreview;\n            if (tokenSource == null)\n                return;\n            tokenSource.Cancel();\n            tokenSource.Dispose();\n            _cancelGeneratingPreview = null;\n        }\n\n        async Task WaitForPendingGenerate()\n        {\n            var runningTask = _generatePreviewTask;\n            if (runningTask == null)\n                return;\n\n            Debug.Assert(_cancelGeneratingPreview == null, \"Only already canceled tasks are expected to be awaited here\");\n            _generatePreviewTask = null;\n\n            try\n            {\n                await runningTask;\n            }\n            catch (Exception)\n            {\n                // pending generate is always awaited after cancellation so ignoring everything from here\n            }\n        }\n\n        #endregion\n\n        CancelRunningGenerate();\n        await WaitForPendingGenerate();\n    }\n\n    private bool IsExpensivePreview() => BitLevel == 8 && QuantizerId == $\"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.Wu)}\";\n\n    #endregion\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/ViewModel/QuantizerDescriptor.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\n\nusing KGySoft.Drawing.Imaging;\nusing KGySoft.Drawing.Wpf;\nusing KGySoft.Reflection;\n\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\nnamespace ScreenToGif.ViewModel;\n\n/// <summary>\n/// Represents a read-only descriptor ViewModel for a quantizer.\n/// In fact, would be better as a nested class in <see cref=\"KGySoftGifOptionsViewModel\"/> but WPF binding does not tolerate that.\n/// </summary>\npublic class QuantizerDescriptor\n{\n    #region Fields\n\n    #region Static Fields\n\n    private static readonly QuantizerDescriptor[] _quantizers =\n    {\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.BlackAndWhite)),\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.Grayscale4)),\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.Grayscale16)),\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.Grayscale)),\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.SystemDefault4BppPalette)),\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.SystemDefault8BppPalette)),\n        new(typeof(PredefinedColorsQuantizer), nameof(PredefinedColorsQuantizer.Rgb332)),\n\n        new(typeof(OptimizedPaletteQuantizer), nameof(OptimizedPaletteQuantizer.Octree)),\n        new(typeof(OptimizedPaletteQuantizer), nameof(OptimizedPaletteQuantizer.MedianCut)),\n        new(typeof(OptimizedPaletteQuantizer), nameof(OptimizedPaletteQuantizer.Wu)),\n    };\n\n    private static readonly Dictionary<string, QuantizerDescriptor> _quantizersById = _quantizers.ToDictionary(d => d.Id);\n\n    #endregion\n\n    #region Instance Fields\n\n    private readonly MethodAccessor _method;\n    private readonly ParameterInfo[] _parameters;\n\n    #endregion\n\n    #endregion\n\n    #region Properties\n\n    #region Static Properties\n\n    internal static QuantizerDescriptor[] Quantizers => _quantizers;\n\n    #endregion\n\n    #region Instance Properties\n\n    public string Id { get; }\n    public string Title => LocalizationHelper.Get($\"S.SaveAs.KGySoft.Quantizer.{Id}\");\n    public string Description => LocalizationHelper.Get($\"S.SaveAs.KGySoft.Quantizer.{Id}.Info\");\n    public bool HasAlphaThreshold { get; }\n    public bool HasWhiteThreshold { get; }\n    public bool HasDirectMapping { get; }\n    public bool HasMaxColors { get; }\n    public bool HasBitLevel { get; }\n\n    #endregion\n\n    #endregion\n\n    #region Constructors\n\n    private QuantizerDescriptor(Type type, string methodName)\n    {\n        var method = type.GetMethods().FirstOrDefault(f => f.Name.Equals(methodName) && !f.GetCustomAttributes(typeof(ObsoleteAttribute), true).Any());\n\n        _method = MethodAccessor.GetAccessor(method);\n        Id = $\"{method.DeclaringType.Name}.{method.Name}\";\n        _parameters = method.GetParameters();\n\n        HasAlphaThreshold = _parameters.Any(p => p.Name == \"alphaThreshold\");\n        HasWhiteThreshold = _parameters.Any(p => p.Name == \"whiteThreshold\");\n        HasDirectMapping = _parameters.Any(p => p.Name == \"directMapping\");\n        HasMaxColors = _parameters.Any(p => p.Name == \"maxColors\");\n        HasBitLevel = method.DeclaringType == typeof(OptimizedPaletteQuantizer);\n    }\n\n    #endregion\n\n    #region Methods\n\n    internal static QuantizerDescriptor GetById(string id) => _quantizersById.GetValueOrDefault(id);\n\n    internal static IQuantizer Create(string id, KGySoftGifPreset preset)\n    {\n        var descriptor = _quantizersById.GetValueOrDefault(id ?? _quantizers[0].Id) ?? throw new ArgumentException($\"Invalid {id}\", nameof(id));\n\n        var args = new object[descriptor._parameters.Length];\n        for (var i = 0; i < descriptor._parameters.Length; i++)\n        {\n            switch (descriptor._parameters[i].Name)\n            {\n                case \"backColor\":\n                    args[i] = preset.BackColor.ToColor32();\n                    break;\n                case \"alphaThreshold\":\n                    args[i] = preset.AlphaThreshold;\n                    break;\n                case \"whiteThreshold\":\n                    args[i] = preset.WhiteThreshold;\n                    break;\n                case \"directMapping\":\n                    args[i] = preset.DirectMapping;\n                    break;\n                case \"maxColors\":\n                    args[i] = preset.PaletteSize;\n                    break;\n                default:\n                    throw new InvalidOperationException($\"Unexpected parameter: {descriptor._parameters[i]}\");\n            }\n        }\n\n        var result = (IQuantizer)descriptor._method.Invoke(null, args);\n\n        if (result is OptimizedPaletteQuantizer opt && preset.BitLevel != 0)\n            result = opt.ConfigureBitLevel(preset.BitLevel);\n\n        if (preset.LinearColorSpace)\n            result = result switch\n            {\n                OptimizedPaletteQuantizer o => o.ConfigureColorSpace(WorkingColorSpace.Linear),\n                PredefinedColorsQuantizer p => p.ConfigureColorSpace(WorkingColorSpace.Linear),\n                _ => throw new InvalidOperationException($\"Unexpected quantizer: {result.GetType()}\")\n            };\n\n        return result;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/AboutSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.AboutSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"AboutSettings\">\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <StackPanel DataContext=\"{x:Static t:UserSettings.All}\">\n            <c:StatusBand x:Name=\"StatusBand\"/>\n\n            <Grid HorizontalAlignment=\"Center\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" Background=\"{StaticResource Vector.Logo}\" Height=\"50\" Width=\"60\" Margin=\"10\" HorizontalAlignment=\"Center\" \n                        Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"1\" Content=\"ScreenToGif\" FontSize=\"18\" Margin=\"0,0,5,0\" \n                       HorizontalAlignment=\"Right\" VerticalContentAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <StackPanel Grid.Row=\"0\" Grid.Column=\"2\" Orientation=\"Horizontal\">\n                    <Label Content=\"{DynamicResource S.Options.About.Version}\" FontSize=\"18\" VerticalContentAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                    <Label Content=\"{Binding Source={x:Static t:UserSettings.All}, Path=VersionText}\" FontSize=\"18\" VerticalContentAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                    <Label x:Name=\"CheckForUpdatesLabel\" VerticalContentAlignment=\"Center\">\n                        <Hyperlink Click=\"CheckForUpdatesLabel_Click\">\n                            <Run Text=\"{DynamicResource S.Options.About.UpdateCheck}\"/>\n                        </Hyperlink>\n                    </Label>\n                </StackPanel>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"1\" FontSize=\"16\" HorizontalAlignment=\"Right\" Cursor=\"Hand\" Padding=\"3,5\" VerticalContentAlignment=\"Center\">\n                    <Hyperlink NavigateUri=\"https://www.screentogif.com/\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        screentogif.com\n                    </Hyperlink>\n                </Label>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"2\" Content=\"{DynamicResource S.Options.About.Author}\" FontSize=\"16\" VerticalContentAlignment=\"Center\" \n                       Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"StoreTextBlock\" Text=\"{DynamicResource S.Options.About.StoreVersion}\" Foreground=\"#882200\" Margin=\"5\"\n                           VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Visibility=\"Collapsed\"/>\n            </Grid>\n\n            <c:LabelSeparator Text=\"{DynamicResource S.Options.About.Contact}\"/>\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"Email:\" FontSize=\"12\" VerticalAlignment=\"Center\" Margin=\"15,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"mailto:nicke@outlook.com.br\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        nicke@outlook.com.br\n                    </Hyperlink>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"Discord:\" FontSize=\"12\" VerticalAlignment=\"Center\" Margin=\"15,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"3\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://discord.gg/XgEqDHX\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        <Run Text=\"{StaticResource S.Options.About.Contact.Discord}\"/>\n                    </Hyperlink>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"Reddit:\" FontSize=\"12\" VerticalAlignment=\"Center\" Margin=\"15,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://www.reddit.com/r/screentogif/\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        /r/ScreenToGif/\n                    </Hyperlink>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"Facebook:\" FontSize=\"12\" VerticalAlignment=\"Center\" Margin=\"15,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"3\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://www.facebook.com/ScreenToGif\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        <Run Text=\"{StaticResource S.Options.About.Contact.Facebook}\"/>\n                    </Hyperlink>\n                </TextBlock>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"Twitter:\" FontSize=\"12\" VerticalAlignment=\"Center\" Margin=\"15,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://twitter.com/NickeManarin\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        @NickeManarin\n                    </Hyperlink>\n                </TextBlock>\n\n                <!--<TextBlock Grid.Row=\"2\" Grid.Column=\"2\" Text=\"Gitter:\" FontSize=\"12\" VerticalAlignment=\"Center\" Margin=\"15,0,5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"3\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://gitter.im/ScreenToGif/Lobby\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        <Run Text=\"{StaticResource S.Options.About.Contact.Gitter}\"/>\n                    </Hyperlink>\n                </TextBlock>-->\n            </Grid>\n\n            <c:LabelSeparator Text=\"{DynamicResource S.Options.About.Technical}\"/>\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.About.Technical.License}\" FontSize=\"12\" VerticalContentAlignment=\"Center\" Margin=\"15,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyLight}\" HorizontalAlignment=\"Left\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://github.com/NickeManarin/ScreenToGif/blob/master/LICENSE.txt\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" \n                               Cursor=\"Hand\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        MS-PL\n                    </Hyperlink>\n                    <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <Hyperlink NavigateUri=\"https://tldrlegal.com/license/microsoft-public-license-(ms-pl)\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" \n                               Cursor=\"Hand\" RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        TL;DR Legal\n                    </Hyperlink>\n                    <Run Text=\"{DynamicResource S.Options.About.Technical.Free}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                </TextBlock>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.About.Technical.SourceCode}\" FontSize=\"12\" VerticalContentAlignment=\"Center\" Margin=\"15,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://github.com/NickeManarin/ScreenToGif\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" \n                               RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        github.com/NickeManarin/ScreenToGif\n                    </Hyperlink>\n                </TextBlock>\n\n                <Label Grid.Row=\"2\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.About.Technical.Privacy}\" FontSize=\"12\" VerticalContentAlignment=\"Center\" Margin=\"15,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://www.screentogif.com/privacy-terms\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" \n                               RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        screentogif.com/privacy-terms\n                    </Hyperlink>\n                </TextBlock>\n            </Grid>\n\n            <c:LabelSeparator Text=\"{DynamicResource S.Options.About.ABigThanksTo}\"/>\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"0\" Content=\"Visual Studio:\" FontSize=\"12\" VerticalContentAlignment=\"Center\" Margin=\"15,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://visualstudio.microsoft.com/\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" \n                               RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        visualstudio.microsoft.com\n                    </Hyperlink>\n                </Label>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"0\" Content=\"ReSharper:\" FontSize=\"12\" VerticalContentAlignment=\"Center\" Margin=\"15,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"1\" FontSize=\"12\" HorizontalAlignment=\"Left\" Cursor=\"Hand\" Padding=\"3,5\">\n                    <Hyperlink NavigateUri=\"https://www.jetbrains.com/resharper\" ToolTip=\"{Binding RelativeSource={RelativeSource Self}, Path=NavigateUri}\" \n                               RequestNavigate=\"Hyperlink_OnRequestNavigate\">\n                        jetbrains.com/resharper\n                    </Hyperlink>\n                </Label>\n\n                <Label Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Content=\"{DynamicResource S.Options.About.ABigThanksTo.Everyone}\" \n                       FontSize=\"12\" VerticalContentAlignment=\"Center\" Margin=\"15,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n            </Grid>\n        </StackPanel>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/AboutSettings.xaml.cs",
    "content": "using ScreenToGif.Util;\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class AboutSettings : Page\n{\n    public AboutSettings()\n    {\n        InitializeComponent();\n\n#if FULL_MULTI_MSIX_STORE\n        CheckForUpdatesLabel.Visibility = Visibility.Collapsed;\n        StoreTextBlock.Visibility = Visibility.Visible;\n#endif\n    }\n\n    private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(e.Uri.AbsoluteUri);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Open Hyperlink\");\n        }\n    }\n\n    private async void CheckForUpdatesLabel_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            CheckForUpdatesLabel.IsEnabled = false;\n\n            await App.MainViewModel.CheckForUpdates(true);\n\n            if (Global.UpdateAvailable != null)\n            {\n                App.MainViewModel.PromptUpdate.Execute(null);\n                return;\n            }\n\n            StatusBand.Info(LocalizationHelper.Get(\"S.Options.About.UpdateCheck.Nothing\"));\n        }\n        finally\n        {\n            CheckForUpdatesLabel.IsEnabled = true;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/ApplicationSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.ApplicationSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      xmlns:g=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n      Title=\"ApplicationSettings\" Loaded=\"ApplicationSettings_Loaded\">\n\n    <Page.Resources>\n        <g:IntToVisibility x:Key=\"IntToVisibility\"/>\n        <g:InvertedIntToVisibility x:Key=\"InvertedIntToVisibility\"/>\n    </Page.Resources>\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid DataContext=\"{x:Static t:UserSettings.All}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <c:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n            <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Options.App.Startup}\" IsExpanded=\"True\">\n                <StackPanel>\n                    <WrapPanel Margin=\"0,0,5,5\" HorizontalAlignment=\"Center\">\n                        <Grid x:Name=\"StartupModeGrid\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <c:ExtendedRadioButton Grid.Column=\"0\" x:Name=\"StartManuallyCheckBox\" ContentWidth=\"40\" ContentHeight=\"40\" Text=\"{DynamicResource S.Options.App.Startup.Mode.Manual}\" Padding=\"5\" IsChecked=\"True\"\n                                                   Icon=\"{StaticResource Vector.Cursor}\" ToolTip=\"{DynamicResource S.Options.App.Startup.Mode.Manual.Info}\"/>\n\n                            <c:ExtendedRadioButton Grid.Column=\"1\" x:Name=\"StartAutomaticallyCheckBox\" ContentWidth=\"40\" ContentHeight=\"40\" Text=\"{DynamicResource S.Options.App.Startup.Mode.Automatic}\" Padding=\"5\"\n                                                   Icon=\"{StaticResource Vector.Play}\" ToolTip=\"{DynamicResource S.Options.App.Startup.Mode.Automatic.Info}\" \n                                                   Checked=\"StartAutomaticallyCheckBox_Checked\" Unchecked=\"StartAutomaticallyCheckBox_Unchecked\"/>\n                        </Grid>\n\n                        <Separator Width=\"1\" Margin=\"3\"/>\n\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <c:ExtendedRadioButton Grid.Column=\"0\" ContentWidth=\"40\" ContentHeight=\"40\" Text=\"{DynamicResource S.Options.App.Startup.Instance.Single}\" Padding=\"5\" Icon=\"{StaticResource Vector.View}\" \n                                                   IsChecked=\"{Binding Path=SingleInstance, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Options.App.Startup.Instance.Single.Info}\"\n                                                   Checked=\"Instance_Checked\"/>\n                            <c:ExtendedRadioButton Grid.Column=\"1\" ContentWidth=\"40\" ContentHeight=\"40\" Text=\"{DynamicResource S.Options.App.Startup.Instance.Multiple}\" Padding=\"5\" Icon=\"{StaticResource Vector.Views}\" \n                                                   IsChecked=\"{Binding Path=SingleInstance, Mode=TwoWay, Converter={StaticResource InvertedBool}}\" ToolTip=\"{DynamicResource S.Options.App.Startup.Instance.Multiple.Info}\"\n                                                   Checked=\"Instance_Checked\"/>\n                        </Grid>\n                    </WrapPanel>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.Startup.Tray}\" Info=\"{DynamicResource S.Options.App.Startup.Tray.Info}\"\n                                        Margin=\"15,3,5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=StartMinimized, Mode=TwoWay}\" Checked=\"StartCheckBox_Checked\"/>\n\n                    <Grid Margin=\"15,0,5,5\" Visibility=\"{Binding StartMinimized, Converter={StaticResource InvertedBoolToVisibility}}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\" MinWidth=\"120\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Column=\"0\" Text=\"{DynamicResource S.Options.App.Startup.Window}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,5,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox Grid.Column=\"1\" SelectedIndex=\"{Binding Path=StartUp, Mode=TwoWay}\" MinWidth=\"120\" VerticalAlignment=\"Center\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Startup}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Recorder}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Webcam}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Board}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Editor}\"/>\n                        </ComboBox>\n\n                        <TextBlock Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Startup.Window.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </Grid>\n                </StackPanel>\n            </Expander>\n\n            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Options.App.Theme}\" IsExpanded=\"True\">\n                <Grid Margin=\"15,3,5,3\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Column=\"0\" Text=\"{DynamicResource S.Options.App.Theme.Scheme}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,5,0\" VerticalAlignment=\"Center\"/>\n                    <ComboBox Grid.Column=\"1\" x:Name=\"AppThemeComboBox\" Height=\"28\" VerticalContentAlignment=\"Center\" Padding=\"5,0\" SelectedValuePath=\"Tag\" \n                              SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=MainTheme, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                              SelectionChanged=\"AppThemeComboBox_SelectionChanged\">\n\n                        <StackPanel Orientation=\"Horizontal\" Tag=\"Light\">\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FFFFFFFF\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFFAFAFA\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFF5F5F5\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFF9F9FF\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFFFFFFF\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FFEFEFEF\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Light}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\" \n                                   Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        </StackPanel>\n\n                        <StackPanel Orientation=\"Horizontal\" Tag=\"Medium\">\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FFEDEDED\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFE3E3E3\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFD6D6D6\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFD7D7E4\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFE8E8E8\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FFECECEC\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Medium}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\" \n                                   Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        </StackPanel>\n\n                        <StackPanel Orientation=\"Horizontal\" Tag=\"Dark\">\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FF202020\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FFE8E8E8\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF262626\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FFE8E8E8\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF2A2A2A\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FFE8E8E8\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF323130\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FFE8E8E8\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF323232\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FFE8E8E8\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FF343434\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FFE8E8E8\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Dark}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\" \n                                   Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        </StackPanel>\n\n                        <StackPanel Orientation=\"Horizontal\" Tag=\"VeryDark\">\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FF101010\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF161616\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF1A1A1A\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF222120\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF222222\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FF242424\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.VeryDark}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\" \n                                   Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        </StackPanel>\n\n                        <StackPanel Orientation=\"Horizontal\" Tag=\"FollowSystem\">\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FFFFFFFF\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFFAFAFA\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FFF5F5F5\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"Black\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF222120\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,0,1\" Background=\"#FF222222\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FF242424\" Width=\"20\" Height=\"20\" ToolTip=\"{DynamicResource S.Options.App.Theme.Scheme.Example}\">\n                                <TextBlock Text=\"Aa\" Foreground=\"#FF696969\" HorizontalAlignment=\"Center\"/>\n                            </Border>\n                            <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.FollowSystem}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"\n                                   Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        </StackPanel>\n                    </ComboBox>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Options.App.Tray}\" IsExpanded=\"True\">\n                <StackPanel>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.Tray.Show}\" Margin=\"15,3,5,3\" IsChecked=\"{Binding Path=ShowNotificationIcon, Mode=TwoWay}\"\n                                        CheckedChanged=\"NotificationIconCheckBox_CheckedChanged\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.Tray.LeaveOpen}\" Margin=\"30,3,5,3\" IsChecked=\"{Binding Path=KeepOpen, Mode=TwoWay}\"\n                                        Visibility=\"{Binding ShowNotificationIcon, Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <Grid Margin=\"30,0,0,0\" Visibility=\"{Binding ShowNotificationIcon, Converter={StaticResource Bool2Visibility}}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <!--Left-->\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Left}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,3,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" SelectedIndex=\"{Binding Path=LeftClickAction, Mode=TwoWay}\" MinWidth=\"180\" VerticalAlignment=\"Center\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Nothing}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Open}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Toggle}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Minimize}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Restore}\"/>\n                        </ComboBox>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Window}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0,3,0\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding Path=LeftClickAction, Converter={StaticResource IntToVisibility}, ConverterParameter=1}\"/>\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Else}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0,3,0\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding Path=LeftClickAction, Converter={StaticResource InvertedIntToVisibility}, ConverterParameter=1}\"/>\n\n                        <ComboBox Grid.Row=\"0\" Grid.Column=\"3\" SelectedIndex=\"{Binding Path=LeftOpenWindow, Mode=TwoWay}\" MinWidth=\"120\" VerticalAlignment=\"Center\" Margin=\"0,3\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Open.None}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Startup}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Recorder}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Webcam}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Board}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Editor}\"/>\n                        </ComboBox>\n\n                        <!--Double left-->\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.DoubleLeft}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,3,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" SelectedIndex=\"{Binding Path=DoubleLeftClickAction, Mode=TwoWay}\" MinWidth=\"180\" VerticalAlignment=\"Center\" Margin=\"0,3\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Nothing}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Open}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Toggle}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Minimize}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Restore}\"/>\n                        </ComboBox>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Window}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0,3,0\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding Path=DoubleLeftClickAction, Converter={StaticResource IntToVisibility}, ConverterParameter=1}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Else}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0,3,0\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding Path=DoubleLeftClickAction, Converter={StaticResource InvertedIntToVisibility}, ConverterParameter=1}\"/>\n\n                        <ComboBox Grid.Row=\"1\" Grid.Column=\"3\" SelectedIndex=\"{Binding Path=DoubleLeftOpenWindow, Mode=TwoWay}\" MinWidth=\"120\" VerticalAlignment=\"Center\" Margin=\"0,3\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Open.None}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Startup}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Recorder}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Webcam}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Board}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Editor}\"/>\n                        </ComboBox>\n\n                        <!--Middle-->\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Middle}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,3,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" SelectedIndex=\"{Binding Path=MiddleClickAction, Mode=TwoWay}\" MinWidth=\"180\" VerticalAlignment=\"Center\" Margin=\"0,3\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Nothing}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Open}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Toggle}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Minimize}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Restore}\"/>\n                        </ComboBox>\n\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Window}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0,3,0\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding Path=MiddleClickAction, Converter={StaticResource IntToVisibility}, ConverterParameter=1}\"/>\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.App.Tray.Interactions.Else}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0,3,0\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding Path=MiddleClickAction, Converter={StaticResource InvertedIntToVisibility}, ConverterParameter=1}\"/>\n\n                        <ComboBox Grid.Row=\"2\" Grid.Column=\"3\" SelectedIndex=\"{Binding Path=MiddleOpenWindow, Mode=TwoWay}\" MinWidth=\"120\" VerticalAlignment=\"Center\" Margin=\"0,3\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Tray.Interactions.Open.None}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Startup}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Recorder}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Webcam}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Board}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.App.Startup.Window.Editor}\"/>\n                        </ComboBox>\n                    </Grid>\n                </StackPanel>\n            </Expander>\n\n            <Expander Grid.Row=\"4\" Header=\"{DynamicResource S.Options.App.General}\" IsExpanded=\"True\">\n                <StackPanel>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.General.WorkaroundQuota}\" Info=\"{DynamicResource S.Options.App.General.WorkaroundQuota.Info}\"\n                                        Margin=\"15,3,5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=WorkaroundQuota, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.General.NotifyWhileClosingApp}\" Margin=\"15,3,5,3\" IsChecked=\"{Binding Path=NotifyWhileClosingApp, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.General.DisableHardwareAcceleration}\" Info=\"{DynamicResource S.Options.App.General.DisableHardwareAcceleration.Info}\"\n                                        Margin=\"15,3,5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=DisableHardwareAcceleration, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.General.CheckForTranslationUpdates}\" Info=\"{DynamicResource S.Options.App.General.CheckForTranslationUpdates.Info}\"\n                                        Margin=\"15,3,5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=CheckForTranslationUpdates, Mode=TwoWay}\"/>\n\n                    <c:ExtendedCheckBox x:Name=\"UpdatesCheckBox\" Text=\"{DynamicResource S.Options.App.General.CheckForUpdates}\" Margin=\"15,3,5,3\" IsChecked=\"{Binding Path=CheckForUpdates, Mode=TwoWay}\"/>\n                    <StackPanel Visibility=\"{Binding CheckForUpdates, Converter={StaticResource Bool2Visibility}}\">\n                        <c:ExtendedCheckBox x:Name=\"PortableUpdateCheckBox\" Text=\"{DynamicResource S.Options.App.General.PortableUpdate}\" Info=\"{DynamicResource S.Options.App.General.PortableUpdate.Info}\" \n                                            Margin=\"30,3,5,3\" IsChecked=\"{Binding Path=PortableUpdate, Mode=TwoWay}\"/>\n                        <c:ExtendedCheckBox x:Name=\"AdminUpdateCheckBox\" Text=\"{DynamicResource S.Options.App.General.ForceUpdateAsAdmin}\" Margin=\"30,3,5,3\" IsChecked=\"{Binding Path=ForceUpdateAsAdmin, Mode=TwoWay}\"/>\n                        <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.General.UpdateOnClose}\" Margin=\"30,3,5,3\" IsChecked=\"{Binding Path=InstallUpdates, Mode=TwoWay}\"/>\n                        <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.App.General.PromptToInstall}\" Margin=\"45,3,5,3\" IsChecked=\"{Binding Path=PromptToInstall, Mode=TwoWay}\"\n                                            Visibility=\"{Binding InstallUpdates, Converter={StaticResource Bool2Visibility}}\"/>\n                        <c:ExtendedCheckBox x:Name=\"DownloadWithMeteredNetworkCheckBox\" Text=\"{DynamicResource S.Options.App.General.DownloadWithMeteredNetwork}\"\n                                            Info=\"{DynamicResource S.Options.App.General.DownloadWithMeteredNetwork.Info}\" Margin=\"30,3,5,3\" IsChecked=\"{Binding Path=DownloadWithMeteredNetwork, Mode=TwoWay}\"/>\n                    </StackPanel>\n                </StackPanel>\n            </Expander>\n        </Grid>\n    </ScrollViewer>\n</Page>\n"
  },
  {
    "path": "ScreenToGif/Views/Settings/ApplicationSettings.xaml.cs",
    "content": "using Microsoft.Win32;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.InterProcessChannel;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class ApplicationSettings : Page\n{\n    /// <summary>\n    /// Flag used to avoid multiple calls on the startup mode change.\n    /// </summary>\n    private bool _ignoreStartup;\n\n    public ApplicationSettings()\n    {\n        InitializeComponent();\n\n#if FULL_MULTI_MSIX_STORE\n        UpdatesCheckBox.Visibility = Visibility.Collapsed;\n        DownloadWithMeteredNetworkCheckBox.Visibility = Visibility.Collapsed;\n#elif FULL_MULTI_MSIX\n        PortableUpdateCheckBox.Visibility = Visibility.Collapsed;\n        AdminUpdateCheckBox.Visibility = Visibility.Collapsed;\n#endif\n    }\n\n    private void ApplicationSettings_Loaded(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            StartupModeGrid.IsEnabled = false;\n            Cursor = Cursors.AppStarting;\n            _ignoreStartup = true;\n\n            //Detect if this app is set to start with windows.\n            var sub = Registry.CurrentUser.OpenSubKey(\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\", false);\n            var key = sub?.GetValue(\"ScreenToGif\");\n            var name = ProcessHelper.GetEntryAssemblyPath();\n\n            if (key == null || key as string != name)\n            {\n                //If the key does not exist or its content does not point to the same executable, it means that this app will not run when the user logins.\n                StartManuallyCheckBox.IsChecked = true;\n            }\n            else\n            {\n                //If the key exists and its content point to the same executable, it means that this app will run when the user logins.\n                StartAutomaticallyCheckBox.IsChecked = true;\n            }\n\n            //Detect other version of this app?\n\n            StartupModeGrid.IsEnabled = true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to detect if the app is starting when the user logins\");\n            StartupModeGrid.IsEnabled = false;\n        }\n        finally\n        {\n            _ignoreStartup = false;\n            Cursor = Cursors.Arrow;\n        }\n    }\n\n    private void Instance_Checked(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        //With this inter process server, this instance can listen to arguments sent by other instances.\n        if (UserSettings.All.SingleInstance)\n            InstanceSwitcherChannel.RegisterServer(App.InstanceSwitch_Received);\n        else\n            InstanceSwitcherChannel.UnregisterServer();\n    }\n\n    private void AppThemeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        try\n        {\n            if (AppThemeComboBox.SelectedValue is not AppThemes selected)\n                throw new Exception(\"No theme was selected.\");\n\n            ThemeHelper.SelectTheme(selected);\n\n            App.NotifyIcon?.RefreshVisual();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while selecting the app's theme.\");\n            ExceptionDialog.Ok(ex, Title, \"Error while selecting the app's theme\", ex.Message);\n        }\n    }\n\n    private void StartAutomaticallyCheckBox_Checked(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            if (_ignoreStartup)\n                return;\n\n            Cursor = Cursors.AppStarting;\n            _ignoreStartup = true;\n\n            var sub = Registry.CurrentUser.OpenSubKey(\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\", true);\n            var name = ProcessHelper.GetEntryAssemblyPath();\n\n            if (string.IsNullOrWhiteSpace(name) || sub == null)\n            {\n                StatusBand.Error(LocalizationHelper.Get(\"S.Options.App.Startup.Mode.Warning\"));\n                throw new Exception(\"Impossible to set the app to run on startup. \" + name + (sub == null ? \", null\" : \"\"));\n            }\n\n            //Add the value in the registry so that the application runs at startup.\n            sub.SetValue(\"ScreenToGif\", name);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to set the app to run on startup.\");\n        }\n        finally\n        {\n            _ignoreStartup = false;\n            Cursor = Cursors.Arrow;\n        }\n    }\n\n    private void StartAutomaticallyCheckBox_Unchecked(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            if (_ignoreStartup)\n                return;\n\n            Cursor = Cursors.AppStarting;\n            _ignoreStartup = true;\n\n            var sub = Registry.CurrentUser.OpenSubKey(\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\", true);\n            var name = ProcessHelper.GetEntryAssemblyPath();\n\n            if (string.IsNullOrWhiteSpace(name) || sub == null)\n            {\n                StatusBand.Error(LocalizationHelper.Get(\"S.Options.App.Startup.Mode.Warning\"));\n                throw new Exception(\"Impossible to set the app to not run on startup. \" + name + (sub == null ? \", null\" : \"\"));\n            }\n\n            //Remove the value from the registry so that the application doesn't start automatically.\n            sub.DeleteValue(\"ScreenToGif\", false);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to set the app to not run on startup.\");\n        }\n        finally\n        {\n            _ignoreStartup = false;\n            Cursor = Cursors.Arrow;\n        }\n    }\n\n    private void StartCheckBox_Checked(object sender, RoutedEventArgs e)\n    {\n        UserSettings.All.ShowNotificationIcon = true;\n    }\n\n    private void NotificationIconCheckBox_CheckedChanged(object sender, RoutedEventArgs e)\n    {\n        //Can't have a minimized startup, if the icon is not present on the notification area.\n        if (!UserSettings.All.ShowNotificationIcon)\n            UserSettings.All.StartMinimized = false;\n\n        if (App.NotifyIcon != null)\n            App.NotifyIcon.Visibility = UserSettings.All.ShowNotificationIcon ? Visibility.Visible : Visibility.Collapsed;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/DonateSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.DonateSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:g=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"DonateSettings\">\n\n    <Page.Resources>\n        <g:InvertedVisibility x:Key=\"InvertedVisibility\"/>\n    </Page.Resources>\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid DataContext=\"{x:Static t:UserSettings.All}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"21\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition/>\n            <ColumnDefinition/>\n        </Grid.ColumnDefinitions>\n\n        <c:LabelSeparator Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"PaypalLabel\" Text=\"Paypal\"/>\n        <Grid Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"5,0,0,5\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\" HorizontalAlignment=\"Center\" MinWidth=\"500\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"DonateButton\" Text=\"{DynamicResource S.Options.Donate.Donate.Dollar}\" Margin=\"5\" Icon=\"{StaticResource Vector.Money}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Bottom\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"18\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"DonateButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"{DynamicResource S.Options.Donate.Paypal.Dollar}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"DonateEuroButton\" Text=\"{DynamicResource S.Options.Donate.Donate.Euro}\" Margin=\"5\" Icon=\"{StaticResource Vector.Money}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Bottom\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"18\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"DonateEuroButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\" \n                              ToolTipService.ToolTip=\"{DynamicResource S.Options.Donate.Paypal.Euro}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"DonateOtherButton\" Text=\"{DynamicResource S.Options.Donate.Donate}\" Margin=\"5\" Icon=\"{StaticResource Vector.Money}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Bottom\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"18\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"DonateOtherButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"{DynamicResource S.Options.Donate.Paypal.OwnCurrency}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"US$ - USA Dollar\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Padding=\"1\"/>\n            <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"€ - Euro\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Padding=\"1\"/>\n\n            <ComboBox Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"CurrencyComboBox\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" SelectedIndex=\"0\"\n                      Margin=\"3\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\">\n                <ComboBoxItem Content=\"AUD - Australian Dollar\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"BRL - Brazilian Real\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"CAD - Canadian Dollar\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"CZK - Czech Koruna\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"DKK - Danish Krone\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"HKD - Hong Kong Dollar\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"HUF - Hungarian Forint\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"ILS - Israeli New Sheqel\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"JPY - Japanese Yen\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"MXN - Mexican Peso\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"NOK - Norwegian Krone\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"NZD - New Zealand Dollar \" Padding=\"2\"/>\n                <ComboBoxItem Content=\"PHP - Philippine Peso\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"PLN - Polish Zloty\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"GBP - Pound Sterling\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"RUB - Russian Ruble\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"SGD - Singapore Dollar\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"SEK - Swedish Krona\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"CHK - Swiss Franc\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"TWD - Taiwan New Dollar\" Padding=\"2\"/>\n                <ComboBoxItem Content=\"THB - Thai Baht\" Padding=\"2\"/>\n            </ComboBox>\n\n            <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"Reference: screentogif • nicke@outlook.com.br\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" Padding=\"1\"/>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"2\" Grid.Column=\"0\" Text=\"Patreon\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\"/>\n        <Grid Grid.Row=\"3\" Grid.Column=\"0\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"PatreonButton\" Text=\"{DynamicResource S.Options.Donate.Subscribe}\" Margin=\"5\" Icon=\"{StaticResource Vector.Patreon}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"PatreonButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"https://www.patreon.com/nicke\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Donate.Subscribe.Patreon}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\"/>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"2\" Grid.Column=\"1\" Text=\"Stripe\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\"/>\n        <Grid Grid.Row=\"3\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"StripeButton\" Text=\"{DynamicResource S.Options.Donate.Donate.Dollar}\" Margin=\"5\" Icon=\"{StaticResource Vector.Flattr}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"StripeButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"https://donate.stripe.com/cN23dfaz9dJW1wc000\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Donate.Stripe}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\"/>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"4\" Grid.Column=\"0\" Text=\"Steam\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\"/>\n        <Grid Grid.Row=\"5\" Grid.Column=\"0\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"SteamButton\" Text=\"{DynamicResource S.Options.Donate.Gift}\" Margin=\"5\" Icon=\"{StaticResource Vector.Steam}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"SteamButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"http://steamcommunity.com/id/nickesm/wishlist\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\">\n                <Run Text=\"{DynamicResource S.Options.Donate.Gift.Steam}\"/>\n                <LineBreak/>\n                <Run Text=\"nicke@outlook.com.br\"/>\n            </TextBlock>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"4\" Grid.Column=\"1\" Text=\"GOG Galaxy\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\"/>\n        <Grid Grid.Row=\"5\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"GogButton\" Text=\"{DynamicResource S.Options.Donate.Gift}\" Margin=\"5\" Icon=\"{StaticResource Vector.Gog}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"GogButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"https://www.gog.com/u/Nickesm/wishlist\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\">\n                <Run Text=\"{DynamicResource S.Options.Donate.Gift.Gog}\"/>\n                <LineBreak/>\n                <Run Text=\"nicke@outlook.com.br\"/>\n            </TextBlock>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"6\" Grid.Column=\"0\" Text=\"Ko-fi\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\"/>\n        <Grid Grid.Row=\"7\" Grid.Column=\"0\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"KofiButton\" Text=\"{DynamicResource S.Options.Donate.Donate}\" Margin=\"5\" Icon=\"{StaticResource Vector.Kofi}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"KofiButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"https://ko-fi.com/nickemanarin\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Donate.Kofi}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\"/>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"6\" Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Donate.Crypto}\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\"/>\n        <Grid Grid.Row=\"7\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"CryptoButton\" Text=\"{DynamicResource S.Editor.Home.Copy}\" Margin=\"5\" Icon=\"{StaticResource Vector.Text}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"BitcoinCashCopy_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"1HN81cAwDo16tRtiYfkzvzFqikQUimM3S8\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <!--BitcoinCash: 1HN81cAwDo16tRtiYfkzvzFqikQUimM3S8-->\n            <!--Monero: 44yC9CkwHVfKPsKxg5RcA67GZEqiQH6QoBYtRKwkhDaE3tvRpiw1E5i6GShZYNsDq9eCtHnq49SrKjF4DG7NwjqWMoMueD4-->\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Donate.Crypto.BitcoinCash}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\"/>\n        </Grid>\n\n        <c:LabelSeparator Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Donate.Support}\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility, Converter={StaticResource InvertedVisibility}}\"/>\n        <Grid Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" HorizontalAlignment=\"Left\" Visibility=\"{Binding ElementName=PaypalLabel, Path=Visibility, Converter={StaticResource InvertedVisibility}}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"SupportButton\" Text=\"screentogif.com/donate\" Margin=\"5\" Icon=\"{StaticResource Vector.Web}\" \n                              ContentHeight=\"20\" ContentWidth=\"20\" HorizontalAlignment=\"Stretch\" MinWidth=\"120\" MinHeight=\"40\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\"\n                              Foreground=\"#FF143A61\" FontSize=\"14\" FontWeight=\"SemiBold\" FontStyle=\"Italic\" Cursor=\"Hand\"\n                              Click=\"SupportButton_Click\" Style=\"{StaticResource Style.Button.Horizontal.Special}\"\n                              ToolTipService.ToolTip=\"http://www.screentogif.com/donate\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Donate.Support.Visit}\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" \n                       FontStyle=\"Italic\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" TextWrapping=\"Wrap\"/>\n        </Grid>\n    </Grid>\n    </ScrollViewer>\n</Page>\n"
  },
  {
    "path": "ScreenToGif/Views/Settings/DonateSettings.xaml.cs",
    "content": "using ScreenToGif.Util;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class DonateSettings : Page\n{\n    public DonateSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void DonateButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=JCY2BGLULSWVJ&lc=US&item_name=ScreenToGif&item_number=screentogif&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Donation website\");\n            ErrorDialog.Ok(Title, \"Error opening the donation website\", ex.Message, ex);\n        }\n    }\n\n    private void DonateEuroButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=JCY2BGLULSWVJ&lc=US&item_name=ScreenToGif&item_number=screentogif&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Donation website\");\n\n            ErrorDialog.Ok(Title, \"Error opening the donation website\", ex.Message, ex);\n        }\n    }\n\n    private void DonateOtherButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            var currency = CurrencyComboBox.Text.Substring(0, 3);\n\n            ProcessHelper.StartWithShell($\"https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=JCY2BGLULSWVJ&lc=US&item_name=ScreenToGif&item_number=screentogif&currency_code={currency}&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Donation website\");\n\n            ErrorDialog.Ok(LocalizationHelper.Get(\"S.Options.Title\"), \"Error opening the donation website\", ex.Message, ex);\n        }\n    }\n\n    private void PatreonButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://www.patreon.com/nicke\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Patreon website\");\n            ErrorDialog.Ok(Title, \"Error opening the Patreon website\", ex.Message, ex);\n        }\n    }\n\n    private void StripeButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://donate.stripe.com/cN23dfaz9dJW1wc000\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Stripe website\");\n\n            ErrorDialog.Ok(LocalizationHelper.Get(\"S.Options.Title\"), \"Error opening the Stripe website\", ex.Message, ex);\n        }\n    }\n\n    private void SteamButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://steamcommunity.com/id/nickesm/wishlist\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Steam website\");\n            ErrorDialog.Ok(Title, \"Error opening the Steam website\", ex.Message, ex);\n        }\n    }\n\n    private void GogButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://www.gog.com/u/Nickesm/wishlist\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the GOG website\");\n            ErrorDialog.Ok(Title, \"Error opening the GOG website\", ex.Message, ex);\n        }\n    }\n\n    private void KofiButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://ko-fi.com/nickemanarin\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the Ko-fi website\");\n            ErrorDialog.Ok(Title, \"Error opening the Ko-fi website\", ex.Message, ex);\n        }\n    }\n\n    private void BitcoinCashCopy_Click(object sender, RoutedEventArgs e)\n    {\n        System.Windows.Clipboard.SetText(\"1HN81cAwDo16tRtiYfkzvzFqikQUimM3S8\");\n    }\n\n    private void MoneroHyperlink_Click(object sender, RoutedEventArgs e)\n    {\n        System.Windows.Clipboard.SetText(\"44yC9CkwHVfKPsKxg5RcA67GZEqiQH6QoBYtRKwkhDaE3tvRpiw1E5i6GShZYNsDq9eCtHnq49SrKjF4DG7NwjqWMoMueD4\");\n    }\n\n    private void SupportButton_Click(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://www.screentogif.com/donate\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Opening the donation website\");\n            ErrorDialog.Ok(Title, \"Error opening the donation website\", ex.Message, ex);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/EditorSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.EditorSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"EditorSettings\" Loaded=\"EditorSettings_Loaded\">\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <StackPanel DataContext=\"{x:Static t:UserSettings.All}\">\n            <Expander Header=\"{DynamicResource S.Options.Editor.Previewer}\" IsExpanded=\"True\">\n                <StackPanel Margin=\"10,0,5,0\">\n                    <Grid>\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Column=\"0\" Grid.Row=\"0\" Text=\"{DynamicResource S.Options.App.Theme.Scheme}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                                   Padding=\"2,0,5,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"ColorSchemesComboBox\" Height=\"28\" VerticalContentAlignment=\"Center\" Padding=\"5,0\" Margin=\"0,3\" \n                                  SelectionChanged=\"ColorSchemesComboBox_SelectionChanged\">\n                            <ComboBox.Items>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FFF5F5F5\" Width=\"20\" Height=\"20\"/>\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FFF0F0F0\" Width=\"20\" Height=\"20\"/>\n                                    <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.VeryLight}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"White\" Width=\"20\" Height=\"20\"/>\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FFD3D3D3\" Width=\"20\" Height=\"20\"/>\n                                    <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Light}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FF999999\" Width=\"20\" Height=\"20\"/>\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FF666666\" Width=\"20\" Height=\"20\"/>\n                                    <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Medium}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FF323232\" Width=\"20\" Height=\"20\"/>\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FF2D2D2D\" Width=\"20\" Height=\"20\"/>\n                                    <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Dark}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Background=\"#FFF5F5F5\" Width=\"20\" Height=\"20\"/>\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Background=\"#FF2D2D2D\" Width=\"20\" Height=\"20\"/>\n                                    <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.FollowSystem}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <Separator Height=\"1\"/>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"1,1,0,1\" Width=\"20\" Height=\"20\">\n                                        <Label Content=\"?\" Padding=\"0\" HorizontalContentAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" FontSize=\"14\"/>\n                                    </Border>\n                                    <Border BorderBrush=\"{DynamicResource Element.Border}\" BorderThickness=\"0,1,1,1\" Width=\"20\" Height=\"20\">\n                                        <Label Content=\"?\" Padding=\"0\" HorizontalContentAlignment=\"Center\" FontSize=\"14\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                                    </Border>\n                                    <Label Content=\"{DynamicResource S.Options.App.Theme.Scheme.Custom}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                            </ComboBox.Items>\n                        </ComboBox>\n\n                        <TextBlock Grid.Column=\"0\" Grid.Row=\"1\" Text=\"{DynamicResource S.Options.Editor.Previewer.GridSize}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                                   Padding=\"2,0,5,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox Grid.Column=\"1\" Grid.Row=\"1\" x:Name=\"GridSizeComboBox\" Height=\"28\" Tag=\"Editor\" VerticalContentAlignment=\"Center\" Padding=\"5,0\" Margin=\"0,3\" \n                                  SelectionChanged=\"GridSizeComboBox_SelectionChanged\">\n                            <ComboBox.Items>\n                                <StackPanel x:Name=\"VerySmallPanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"10 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.VerySmall}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel x:Name=\"SmallPanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"15 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Small}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel x:Name=\"MediumSizePanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"20 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Medium}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel x:Name=\"LargePanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"25 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Large}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel x:Name=\"VeryLargePanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"30 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.VeryLarge}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel x:Name=\"ILikeBigSquaresPanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"50 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.ILikeBigSquares}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                                <StackPanel x:Name=\"ImBlindPanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"100 pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.ImBlind}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\" FontWeight=\"Bold\" FontSize=\"14\"/>\n                                </StackPanel>\n                                <Separator/>\n                                <StackPanel x:Name=\"CustomSizePanel\" Orientation=\"Horizontal\">\n                                    <Label Content=\"? pt\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\" FontStyle=\"Italic\" Width=\"41\" HorizontalContentAlignment=\"Center\" Padding=\"0,3\"/>\n                                    <Label Content=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Custom}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" \n                                           VerticalContentAlignment=\"Center\" Padding=\"10,0,5,0\"/>\n                                </StackPanel>\n                            </ComboBox.Items>\n                        </ComboBox>\n                    </Grid>\n\n                    <Grid Margin=\"0,3\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <c:ColorBox Grid.Column=\"0\" x:Name=\"EvenColorBox\" Height=\"40\" SelectedColor=\"{Binding GridColor1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Tag=\"Editor\"\n                                    ToolTip=\"{DynamicResource S.Options.Editor.Previewer.EvenColor}\" ToolTipService.Placement=\"Bottom\" ColorChanged=\"ColorBox_ColorChanged\"/>\n\n                        <c:ColorBox Grid.Column=\"1\" x:Name=\"OddColorBox\" Height=\"40\" SelectedColor=\"{Binding GridColor2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Tag=\"Editor\"\n                                    ToolTip=\"{DynamicResource S.Options.Editor.Previewer.OddColor}\" ToolTipService.Placement=\"Bottom\" BorderThickness=\"0,1\" ColorChanged=\"ColorBox_ColorChanged\"/>\n\n                        <Border x:Name=\"GridSizeBorder\" Grid.Column=\"2\" BorderThickness=\"1\" BorderBrush=\"{DynamicResource Element.Border}\" CornerRadius=\"4\"\n                                Background=\"{StaticResource Checker.DrawingBrush}\" Cursor=\"Hand\" MouseLeftButtonDown=\"GridSizeBorder_MouseLeftButtonDown\"\n                                ToolTip=\"{DynamicResource S.Options.Editor.Previewer.GridSize}\" ToolTipService.Placement=\"Bottom\"/>\n                    </Grid>\n\n                    <Grid x:Name=\"GridSizeGrid\" Visibility=\"Collapsed\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"80\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"80\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid Grid.Column=\"0\" Background=\"{StaticResource Vector.WidthHeight}\" Height=\"23\" Width=\"23\" Margin=\"3\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                        <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Height}\" Padding=\"5\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <c:IntegerUpDown Grid.Column=\"2\" x:Name=\"GridHeightIntegerUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"5,3\" UpdateOnInput=\"True\" Tag=\"Editor\" ValueChanged=\"GridSizeIntegerUpDown_ValueChanged\"/>\n\n                        <TextBlock Grid.Column=\"3\" Text=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Width}\" Padding=\"5\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <c:IntegerUpDown Grid.Column=\"4\" x:Name=\"GridWidthIntegerUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"5,3\" UpdateOnInput=\"True\" Tag=\"Editor\" ValueChanged=\"GridSizeIntegerUpDown_ValueChanged\"/>\n\n                        <c:ExtendedButton Grid.Column=\"6\" Text=\"{DynamicResource S.Options.Editor.Previewer.GridSize.Apply}\" Icon=\"{StaticResource Vector.Ok}\" Style=\"{StaticResource Style.Button.Horizontal}\" \n                                          Padding=\"2\" ContentWidth=\"14\" ContentHeight=\"14\" Click=\"ApplySizeButton_Click\"/>\n                        <c:ExtendedButton Grid.Column=\"7\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" Style=\"{StaticResource Style.Button.Horizontal}\" \n                                          Padding=\"2\" ContentWidth=\"14\" ContentHeight=\"14\" Click=\"CancelSizeButton_Click\"/>\n                    </Grid>\n                </StackPanel>\n            </Expander>\n\n            <Expander Header=\"{DynamicResource S.Options.Recorder.Interface}\" IsExpanded=\"True\">\n                <StackPanel Margin=\"10,0,5,0\">\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.Interface.DisplayEncoder}\" Margin=\"0,3\" IsChecked=\"{Binding Path=DisplayEncoder, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.Interface.ExtendChrome}\" Margin=\"0,3\" IsChecked=\"{Binding Path=EditorExtendChrome, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.Interface.AutomaticallySizeOnContent}\" Margin=\"0,3\" IsChecked=\"{Binding Path=AutomaticallySizeOnContent, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.Interface.AutomaticallyFitImage}\" Margin=\"0,3\" IsChecked=\"{Binding Path=AutomaticallyFitImage, Mode=TwoWay}\"/>\n                </StackPanel>\n            </Expander>\n\n            <Expander Header=\"{DynamicResource S.Options.App.General}\" IsExpanded=\"True\">\n                <StackPanel Margin=\"10,0,5,0\">\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.NotifyFrameDeletion}\" Margin=\"0,3\" IsChecked=\"{Binding Path=NotifyFrameDeletion, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.NotifyProjectDiscard}\" Margin=\"0,3\" IsChecked=\"{Binding Path=NotifyProjectDiscard, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.NotifyWhileClosingEditor}\" Margin=\"0,3\" IsChecked=\"{Binding Path=NotifyWhileClosingEditor, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.TripleClickSelection}\" Margin=\"0,3\" IsChecked=\"{Binding Path=TripleClickSelection, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.DrawOutlineOutside}\" Margin=\"0,3\" IsChecked=\"{Binding Path=DrawOutlineOutside, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.DropFramesDuringPreviewIfBehind}\" Margin=\"0,3\" IsChecked=\"{Binding Path=DropFramesDuringPreviewIfBehind, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Info}\"/>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.LimitHistory}\" Margin=\"0,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=SetHistoryLimit, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Editor.General.LimitHistory.Info}\"/>\n\n                    <WrapPanel Margin=\"10,3,5,3\" Visibility=\"{Binding SetHistoryLimit, Converter={StaticResource Bool2Visibility}}\">\n                        <c:IntegerUpDown Minimum=\"0\" Maximum=\"150\" MinWidth=\"50\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=HistoryLimit, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Editor.General.LimitHistory.Maximum}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.SyncPath.Folder}\" Margin=\"0,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=SyncPathFolder, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Editor.General.SyncPath.Folder.Info}\"/>\n\n                    <StackPanel Margin=\"10,0,5,0\" IsEnabled=\"{Binding SyncPathFolder, Mode=OneWay}\">\n                        <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.SyncPath.Filename}\" Margin=\"0,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=SyncPathFilename, Mode=TwoWay}\"\n                                            Info=\"{DynamicResource S.Options.Editor.General.SyncPath.Filename.Info}\"/>\n\n                        <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Editor.General.SyncPath.SameType}\" Margin=\"0,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=SyncPathForSameType, Mode=TwoWay}\"\n                                            Info=\"{DynamicResource S.Options.Editor.General.SyncPath.SameType.Info}\"/>\n                    </StackPanel>\n                </StackPanel>\n            </Expander>\n        </StackPanel>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/EditorSettings.xaml.cs",
    "content": "using ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Threading;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class EditorSettings : Page\n{\n    /// <summary>\n    /// The latest size of the grid before being altered.\n    /// </summary>\n    private Rect _latestGridSize = Rect.Empty;\n\n    public EditorSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void EditorSettings_Loaded(object sender, RoutedEventArgs e)\n    {\n        CheckScheme(false);\n        CheckSize(false);\n    }\n\n    private void ColorSchemesComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        CheckScheme();\n    }\n\n    private void ColorBox_ColorChanged(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        CheckScheme(false);\n    }\n\n    private void CheckScheme(bool schemePicked = true)\n    {\n        try\n        {\n            EvenColorBox.IgnoreEvent = true;\n            OddColorBox.IgnoreEvent = true;\n\n            if (schemePicked)\n            {\n                #region If ComboBox Selected\n\n                switch (ColorSchemesComboBox.SelectedIndex)\n                {\n                    case 0:\n                        UserSettings.All.GridColorsFollowSystem = false;\n                        UserSettings.All.GridColor1 = Constants.VeryLightEven;\n                        UserSettings.All.GridColor2 = Constants.VeryLightOdd;\n                        break;\n                    case 1:\n                        UserSettings.All.GridColorsFollowSystem = false;\n                        UserSettings.All.GridColor1 = Constants.LightEven;\n                        UserSettings.All.GridColor2 = Constants.LightOdd;\n                        break;\n                    case 2:\n                        UserSettings.All.GridColorsFollowSystem = false;\n                        UserSettings.All.GridColor1 = Constants.MediumEven;\n                        UserSettings.All.GridColor2 = Constants.MediumOdd;\n                        break;\n                    case 3:\n                        UserSettings.All.GridColorsFollowSystem = false;\n                        UserSettings.All.GridColor1 = Constants.DarkEven;\n                        UserSettings.All.GridColor2 = Constants.DarkOdd;\n                        break;\n                    case 4:\n                        UserSettings.All.GridColorsFollowSystem = true;\n                        var isSystemUsingDark = ThemeHelper.IsSystemUsingDarkTheme();\n                        UserSettings.All.GridColor1 = isSystemUsingDark ? Constants.DarkEven : Constants.VeryLightEven;\n                        UserSettings.All.GridColor2 = isSystemUsingDark ? Constants.DarkOdd : Constants.VeryLightOdd;\n                        break;\n                }\n\n                return;\n\n                #endregion\n            }\n\n            #region If Color Picked\n\n            if (UserSettings.All.GridColor1.Equals(Constants.VeryLightEven) && UserSettings.All.GridColor2.Equals(Constants.VeryLightOdd) && !UserSettings.All.GridColorsFollowSystem)\n                ColorSchemesComboBox.SelectedIndex = 0;\n            else if (UserSettings.All.GridColor1.Equals(Constants.LightEven) && UserSettings.All.GridColor2.Equals(Constants.LightOdd))\n                ColorSchemesComboBox.SelectedIndex = 1;\n            else if (UserSettings.All.GridColor1.Equals(Constants.MediumEven) && UserSettings.All.GridColor2.Equals(Constants.MediumOdd))\n                ColorSchemesComboBox.SelectedIndex = 2;\n            else if (UserSettings.All.GridColor1.Equals(Constants.DarkEven) && UserSettings.All.GridColor2.Equals(Constants.DarkOdd) && !UserSettings.All.GridColorsFollowSystem)\n                ColorSchemesComboBox.SelectedIndex = 3;\n            else if (UserSettings.All.GridColorsFollowSystem &&\n                     (UserSettings.All.GridColor1.Equals(Constants.VeryLightEven) || UserSettings.All.GridColor1.Equals(Constants.DarkEven)) &&\n                     (UserSettings.All.GridColor2.Equals(Constants.VeryLightOdd) || UserSettings.All.GridColor2.Equals(Constants.DarkOdd)))\n                ColorSchemesComboBox.SelectedIndex = 4;\n            else\n            {\n                UserSettings.All.GridColorsFollowSystem = false;\n                ColorSchemesComboBox.SelectedIndex = 6;\n            }\n\n            #endregion\n        }\n        finally\n        {\n            EvenColorBox.IgnoreEvent = false;\n            OddColorBox.IgnoreEvent = false;\n        }\n    }\n\n    private void GridSizeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        CheckSize();\n    }\n\n    private void GridSizeBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        GridWidthIntegerUpDown.ValueChanged -= GridSizeIntegerUpDown_ValueChanged;\n        GridHeightIntegerUpDown.ValueChanged -= GridSizeIntegerUpDown_ValueChanged;\n\n        GridWidthIntegerUpDown.Value = (int)UserSettings.All.GridSize.Width;\n        GridHeightIntegerUpDown.Value = (int)UserSettings.All.GridSize.Height;\n        GridSizeGrid.Visibility = Visibility.Visible;\n        _latestGridSize = UserSettings.All.GridSize;\n\n        Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => GridHeightIntegerUpDown.Focus()));\n\n        GridWidthIntegerUpDown.ValueChanged += GridSizeIntegerUpDown_ValueChanged;\n        GridHeightIntegerUpDown.ValueChanged += GridSizeIntegerUpDown_ValueChanged;\n    }\n\n    private void GridSizeIntegerUpDown_ValueChanged(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        try\n        {\n            UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(GridWidthIntegerUpDown.Value, GridHeightIntegerUpDown.Value));\n\n            CheckSize(false);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Adjusting the Grid Size\");\n        }\n    }\n\n    private void ApplySizeButton_Click(object sender, RoutedEventArgs e)\n    {\n        Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => GridSizeBorder.Focus()));\n        GridSizeGrid.Visibility = Visibility.Collapsed;\n\n        GridSizeIntegerUpDown_ValueChanged(sender, e);\n    }\n\n    private void CancelSizeButton_Click(object sender, RoutedEventArgs e)\n    {\n        Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => GridSizeBorder.Focus()));\n        GridSizeGrid.Visibility = Visibility.Collapsed;\n        UserSettings.All.GridSize = _latestGridSize;\n\n        CheckSize(false);\n    }\n\n    private void CheckSize(bool sizePicked = true)\n    {\n        try\n        {\n            GridSizeComboBox.SelectionChanged -= GridSizeComboBox_SelectionChanged;\n\n            if (sizePicked)\n            {\n                #region If ComboBox Selected\n\n                switch (GridSizeComboBox.SelectedIndex)\n                {\n                    case 0:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(10, 10));\n                        break;\n                    case 1:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(15, 15));\n                        break;\n                    case 2:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(20, 20));\n                        break;\n                    case 3:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(25, 25));\n                        break;\n                    case 4:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(30, 30));\n                        break;\n                    case 5:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(50, 50));\n                        break;\n                    case 6:\n                        UserSettings.All.GridSize = new Rect(new Point(0, 0), new Point(100, 100));\n                        break;\n                }\n\n                return;\n\n                #endregion\n            }\n\n            #region If Settings Loaded\n\n            var sizeW = UserSettings.All.GridSize.Width;\n            var sizeH = UserSettings.All.GridSize.Height;\n\n            if (sizeW != sizeH)\n            {\n                GridSizeComboBox.SelectedIndex = 8;\n                return;\n            }\n\n            if (sizeW == 10)\n                GridSizeComboBox.SelectedIndex = 0;\n            else if (sizeW == 15)\n                GridSizeComboBox.SelectedIndex = 1;\n            else if (sizeW == 20)\n                GridSizeComboBox.SelectedIndex = 2;\n            else if (sizeW == 25)\n                GridSizeComboBox.SelectedIndex = 3;\n            else if (sizeW == 30)\n                GridSizeComboBox.SelectedIndex = 4;\n            else if (sizeW == 50)\n                GridSizeComboBox.SelectedIndex = 5;\n            else if (sizeW == 100)\n                GridSizeComboBox.SelectedIndex = 6;\n            else\n                GridSizeComboBox.SelectedIndex = 8;\n\n            #endregion\n        }\n        finally\n        {\n            GridSizeComboBox.SelectionChanged += GridSizeComboBox_SelectionChanged;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/LanguageSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.LanguageSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:g=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"LanguageSettings\">\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid DataContext=\"{x:Static t:UserSettings.All}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <c:LabelSeparator Text=\"{DynamicResource S.Options.Language.AppLanguage}\" Margin=\"0,0,0,5\"/>\n\n            <ListBox Grid.Row=\"1\" x:Name=\"LanguagePanel\" VerticalContentAlignment=\"Center\" Margin=\"10,0,0,5\" SelectionChanged=\"LanguagePanel_SelectionChanged\">\n                <ListBox.Resources>\n                    <ResourceDictionary>\n                        <ResourceDictionary.MergedDictionaries>\n                            <ResourceDictionary Source=\"/Resources/Flags.xaml\"/>\n                        </ResourceDictionary.MergedDictionaries>\n\n                        <g:TagToSelection x:Key=\"TagToSelection\"/>\n                    </ResourceDictionary>\n                </ListBox.Resources>\n\n                <ListBox.Template>\n                    <ControlTemplate>\n                        <ItemsPresenter/>\n                    </ControlTemplate>\n                </ListBox.Template>\n\n                <c:ExtendedListBoxItem Icon=\"{StaticResource Vector.Info}\" Tag=\"auto\" Content=\"{DynamicResource S.Options.Language.AppLanguage.AutoDetect}\" Author=\"{DynamicResource S.Options.Language.AppLanguage.AutoDetect.Author}\" \n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=auto, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.SaudiArabia}\" Tag=\"ar\" Content=\"Arabic / العربية\" Author=\"Alan\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=ar, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.China}\" Tag=\"zh\" Content=\"Chinese (Simplified) / 简体中文\" Author=\"Joel Yang, HiSen, Jeffiy, EMLVIRUS, 王晨旭, Wen Peng\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=zh, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Taiwan}\" Tag=\"zh-Hant\" Content=\"Chinese (Traditional) / 繁體中文（台灣）\" Author=\"Jerry Lum, Danfong Hsieh, Tse Zinno\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=zh-Hant, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.CzechRepublic}\" Tag=\"cs\" Content=\"Czech / Čeština\" Author=\"PePav\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=cs, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Denmark}\" Tag=\"da\" Content=\"Danish / Dansk\" Author=\"Regmos\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=da, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Netherlands}\" Tag=\"nl\" Content=\"Dutch / Nederlands\" Author=\"Stephan Paternotte, Jasper Verweij\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=nl, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.UnitedKingdom}\" Tag=\"en\" Content=\"English\" Author=\"Nicke Manarin\" \n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=en, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Finland}\" Tag=\"fi\" Content=\"Finnish / Suomi\" Author=\"VeikkoM\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=fi, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.France}\" Tag=\"fr\" Content=\"French / Français\" Author=\"Largo, Sébastien 'Tr4ncer' Villemain, Adrick\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=fr, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Germany}\" Tag=\"de\" Content=\"German / Deutsch\" Author=\"Mr-Update, Andy Kleinert, PeterK., Christoph Voigt, Michael Reukauff\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=de, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Greece}\" Tag=\"el\" Content=\"Greek / Ελληνικά\" Author=\"Χρήστος Μητσιάρης\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=el, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Israel}\" Tag=\"he\" Content=\"Hebrew / עברי\" Author=\"Elishy\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=he, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Hungary}\" Tag=\"hu\" Content=\"Hungarian / Magyar\" Author=\"László Földes, György Kőszeg\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=hu, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Italy}\" Tag=\"it\" Content=\"Italian / Italiano\" Author=\"HispidaBytes, Michele Locati, Giovanni Rinaldin\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=it, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Japan}\" Tag=\"ja\" Content=\"Japanese / 日本語\" Author=\"Kevin dela Cruz, Tokinori Shimodaira, Seaeees, oxosi, Toshio, Winston, Chihiro Watanabe\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=ja, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.SouthKorea}\" Tag=\"ko\" Content=\"Korean / 한국어\" Author=\"hoho, Manbok, Lytie\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=ko, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Poland}\" Tag=\"pl\" Content=\"Polish / Polski\" Author=\"Michał Stojke, Sebastian Pietras, Jakub Bazgier\" \n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=pl, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Brazil}\" Tag=\"pt\" Content=\"Portuguese / Português\" Author=\"Nicke Manarin\" \n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=pt, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Portugal}\" Tag=\"pt-PT\" Content=\"Portuguese (Portugal) / Português (Portugal)\" Author=\"Eduardo Godinho, Duarte Ramos\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=pt-PT, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.India}\" Tag=\"ta\" Content=\"Tamil / தமிழ்\" Author=\"தமிழ்நேரம் (TamilNeram.github.io)\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=ta, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Turkey}\" Tag=\"tr\" Content=\"Turkish / Türkçe\" Author=\"g-u-r-k-a-n, Volkan Dağdelen, seferciogluecce, Omer Mollamehmetoglu, Bekir\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=tr, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Argentina}\" Tag=\"es-AR\" Content=\"Spanish (Argentina) / Español (Argentina)\" Author=\"KNTRO (kntro@msn.com)\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=es-AR, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Spain}\" Tag=\"es\" Content=\"Spanish / Español\" Author=\"codedeep, Zabb\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=es, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.EastAfricanCommunity}\" Tag=\"sw\" Content=\"Swahili / Kiswahili\" Author=\"Mara Gati Lucky\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=sw, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Sweden}\" Tag=\"sv\" Content=\"Swedish / Svenska\" Author=\"Sopor, Andreas Johansson\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=sv, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Russia}\" Tag=\"ru\" Content=\"Russian / Русский\" Author=\"wvxwxvw, Zoltanleo, Qwitriy, ralienpp, Nivalis, Yuri Komar, Vadim Velezhenko\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=ru, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Ukraine}\" Tag=\"uk\" Content=\"Ukrainian / Українська\" Author=\"Prevter, Andrey Ìlečko\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=uk, Converter={StaticResource TagToSelection}}\"/>\n\n                <c:ExtendedListBoxItem Image=\"{StaticResource Flag.Vietnam}\" Tag=\"vi\" Content=\"Vietnamese / Tiếng Việt\" Author=\"Đỗ Quang Hưng\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=vi, Converter={StaticResource TagToSelection}}\"/>\n\n                <!--<n:ExtendedListBoxItem Image=\"{StaticResource Greece}\" Tag=\"el\" Content=\"Greek\" Author=\"No Author\"\n                                           ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=el, Converter={StaticResource TagToSelection}}\"/>\n\n                <n:ExtendedListBoxItem Image=\"{StaticResource Romania}\" Tag=\"ro\" Content=\"Romanian\" Author=\"No Author\"\n                                       ContentWidth=\"25\" ContentHeight=\"25\" IsSelected=\"{Binding LanguageCode, ConverterParameter=ro, Converter={StaticResource TagToSelection}}\"/>-->\n            </ListBox>\n\n            <TextBlock Grid.Row=\"2\" x:Name=\"TranslateHyperlink\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyLight}\" TextWrapping=\"WrapWithOverflow\" Padding=\"2\">\n                <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence1.1}\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <Hyperlink Click=\"TranslateHyperlink_OnClick\" ToolTip=\"{DynamicResource S.Options.Language.AppLanguage.Translate.ResourceLink.Tooltip}\" Cursor=\"Hand\">\n                    <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence1.2}\"/>\n                </Hyperlink>\n                <LineBreak/>\n                <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence2.1}\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <Hyperlink Click=\"ImportHyperlink_OnClick\" ToolTip=\"{DynamicResource S.Options.Language.AppLanguage.Translate.ImportLink.Tooltip}\" Cursor=\"Hand\">\n                    <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence2.2}\"/>\n                </Hyperlink>\n                <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence2.3}\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <LineBreak/>\n                <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence3.1}\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                <Hyperlink Click=\"EmailHyperlink_OnClick\" ToolTip=\"{DynamicResource S.Options.Language.AppLanguage.Translate.EmailLink.Tooltip}\" Cursor=\"Hand\">\n                    <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence3.2}\"/>\n                </Hyperlink>\n                <Run Text=\"{DynamicResource S.Options.Language.AppLanguage.Translate.Sentence3.3}\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n            </TextBlock>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/LanguageSettings.xaml.cs",
    "content": "using Microsoft.Win32;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing Localization = ScreenToGif.Windows.Other.Localization;\n\nnamespace ScreenToGif.Views.Settings;\n/// <summary>\n/// Interaction logic for LanguageSettings.xaml\n/// </summary>\npublic partial class LanguageSettings : Page\n{\n    public LanguageSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void LanguagePanel_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        //To avoid being called during startup of the window and to avoid being called twice after selection changes.\n        if (!IsLoaded || e.AddedItems.Count == 0)\n            return;\n\n        try\n        {\n            LocalizationHelper.SelectCulture(UserSettings.All.LanguageCode);\n\n            ForceUpdateSystemTray();\n        }\n        catch (Exception ex)\n        {\n            ErrorDialog.Ok(LocalizationHelper.Get(\"S.Options.Title\"), \"Error while stopping\", ex.Message, ex);\n            LogWriter.Log(ex, \"Error while trying to set the language.\");\n        }\n    }\n\n    private void TranslateHyperlink_OnClick(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://github.com/NickeManarin/ScreenToGif/wiki/Localization\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Open the latest resource available\");\n        }\n    }\n\n    private void TranslateOfflineHyperlink_OnClick(object sender, RoutedEventArgs e)\n    {\n        var sfd = new SaveFileDialog\n        {\n            AddExtension = true,\n            Filter = \"Resource Dictionary (*.xaml)|*.xaml\",\n            Title = \"Save Resource Dictionary\",\n            FileName = \"StringResources.en\"\n        };\n\n        var result = sfd.ShowDialog();\n\n        if (result.HasValue && result.Value)\n        {\n            try\n            {\n                LocalizationHelper.SaveDefaultResource(sfd.FileName);\n            }\n            catch (Exception ex)\n            {\n                Dialog.Ok(\"Impossible to Save\", \"Impossible to save the Xaml file\", ex.Message, Icons.Warning);\n            }\n        }\n    }\n\n    private void ImportHyperlink_OnClick(object sender, RoutedEventArgs e)\n    {\n        var local = new Localization();\n        local.ShowDialog();\n    }\n\n    private void EmailHyperlink_OnClick(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"mailto:nicke@outlook.com.br\");\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Open MailTo\");\n        }\n    }\n\n    private void ForceUpdateSystemTray()\n    {\n        if (App.NotifyIcon == null || App.NotifyIcon.ContextMenu == null)\n            return;\n\n        var items = App.NotifyIcon.ContextMenu.Items.OfType<ExtendedMenuItem>();\n\n        foreach (var item in items)\n            item.Header = LocalizationHelper.Get((string)item.Tag);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/PluginSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.PluginSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:v=\"clr-namespace:ScreenToGif.ViewModel.Settings;assembly=ScreenToGif.ViewModel\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      Title=\"Plugin Settings\" Loaded=\"PluginSettings_Loaded\">\n\n    <Page.DataContext>\n        <v:PluginSettingsViewModel/>\n    </Page.DataContext>\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"21\"/>\n                <RowDefinition MinHeight=\"29\" Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"21\"/>\n                <RowDefinition MinHeight=\"29\" Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <c:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n            <c:LabelSeparator Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Extras.FfmpegLocation}\"/>\n            <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"1\" Style=\"{StaticResource Style.Button.Borderless}\" Content=\"{DynamicResource S.Updater.Download}\" Command=\"{Binding DownloadFFmpegCommand}\" Visibility=\"{Binding DownloadFFmpegButtonVisibility, Mode=OneWay}\"/>\n            <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"1\" Style=\"{StaticResource Style.Button.Borderless}\" Content=\"{DynamicResource S.Clipboard.Remove}\" Command=\"{Binding RemoveFFmpegCommand}\" Visibility=\"{Binding RemoveFFmpegButtonVisibility, Mode=OneWay}\"/>\n\n            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" IsEnabled=\"{Binding AreFFmpegPropertiesEnabled, Mode=OneWay}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"30\"/>\n                </Grid.ColumnDefinitions>\n\n                <c:ExtendedTextBox Grid.Column=\"0\" Margin=\"10,3,0,3\" Text=\"{Binding FFmpegPath, Mode=TwoWay}\" IsReadOnly=\"True\"/>\n\n                <c:ExtendedButton Grid.Column=\"1\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Open}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                  ToolTip=\"{DynamicResource S.Options.Extras.FfmpegLocation.Select}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{Binding SelectFFmpegPathCommand}\"/>\n\n                <c:ExtendedButton Grid.Column=\"2\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Forward}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                  ToolTip=\"{DynamicResource S.Options.Storage.Paths.Browse}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{Binding BrowseFFmpegCommand}\"/>\n            </Grid>\n\n            <ProgressBar Grid.Row=\"3\" Grid.Column=\"0\" Visibility=\"{Binding IsProcessingFFmpegVisibility, Mode=OneWay}\" Margin=\"10,3,0,3\" Height=\"6\" IsIndeterminate=\"True\"/>\n\n            <c:LabelSeparator Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Extras.GifskiLocation}\"/>\n            <c:ExtendedButton Grid.Row=\"4\" Grid.Column=\"1\" Style=\"{StaticResource Style.Button.Borderless}\" Content=\"{DynamicResource S.Updater.Download}\" Command=\"{Binding DownloadGifskiCommand}\" Visibility=\"{Binding DownloadGifskiButtonVisibility, Mode=OneWay}\"/>\n            <c:ExtendedButton Grid.Row=\"4\" Grid.Column=\"1\" Style=\"{StaticResource Style.Button.Borderless}\" Content=\"{DynamicResource S.Clipboard.Remove}\" Command=\"{Binding RemoveGifskiCommand}\" Visibility=\"{Binding RemoveGifskiButtonVisibility, Mode=OneWay}\"/>\n\n            <Grid Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" IsEnabled=\"{Binding AreGifskiPropertiesEnabled, Mode=OneWay}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"30\"/>\n                </Grid.ColumnDefinitions>\n\n                <c:ExtendedTextBox Grid.Column=\"0\" Margin=\"10,3,0,3\" Text=\"{Binding GifskiPath, Mode=TwoWay}\" IsReadOnly=\"True\"/>\n\n                <c:ExtendedButton Grid.Column=\"1\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Open}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                  ToolTip=\"{DynamicResource S.Options.Extras.GifskiLocation.Select}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{Binding SelectGifskiPathCommand}\"/>\n\n                <c:ExtendedButton Grid.Column=\"2\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Forward}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                  ToolTip=\"{DynamicResource S.Options.Storage.Paths.Browse}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{Binding BrowseGifskiCommand}\"/>\n            </Grid>\n\n            <ProgressBar Grid.Row=\"6\" Grid.Column=\"0\" Visibility=\"{Binding IsProcessingGifskiVisibility, Mode=OneWay}\" Margin=\"10,3,0,3\" Height=\"6\" IsIndeterminate=\"True\"/>\n\n            <StackPanel Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Orientation=\"Horizontal\">\n                <Border Background=\"{StaticResource Vector.Info}\" Height=\"16\" Width=\"16\" Margin=\"2\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                <TextBlock Margin=\"2\" VerticalAlignment=\"Center\">\n                    <Hyperlink NavigateUri=\"https://ffmpeg.org/legal.html\" RequestNavigate=\"ExtrasHyperlink_OnRequestNavigate\">\n                        <Run Text=\"{DynamicResource S.Options.Extras.License.Ffmpeg}\"/>\n                    </Hyperlink>\n                    \n                    <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                    <Hyperlink NavigateUri=\"https://github.com/ImageOptim/gifski/blob/master/LICENSE\" RequestNavigate=\"ExtrasHyperlink_OnRequestNavigate\">\n                        <Run Text=\"{DynamicResource S.Options.Extras.License.Gifski}\"/>\n                    </Hyperlink>\n                    \n                    <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                    <Hyperlink NavigateUri=\"https://github.com/sharpdx/SharpDX/blob/master/LICENSE\" RequestNavigate=\"ExtrasHyperlink_OnRequestNavigate\">\n                        <Run Text=\"{DynamicResource S.Options.Extras.License.SharpDx}\"/>\n                    </Hyperlink>\n                </TextBlock>\n            </StackPanel>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/PluginSettings.xaml.cs",
    "content": "using Microsoft.Win32;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.Settings;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Navigation;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class PluginSettings : Page\n{\n    private readonly PluginSettingsViewModel _viewModel;\n\n    public PluginSettings()\n    {\n        InitializeComponent();\n\n        _viewModel = DataContext as PluginSettingsViewModel ?? throw new Exception(\"Missing view model\");\n\n        CommandBindings.Clear();\n        CommandBindings.AddRange(new[]\n        {\n            new CommandBinding(_viewModel.DownloadFFmpegCommand, (_, _) => _viewModel.DownloadFFmpeg(), (_, args) => args.CanExecute = !_viewModel.IsProcessingFFmpeg),\n            new CommandBinding(_viewModel.SelectFFmpegPathCommand, SelectFFmpeg_Executed, (_, args) => args.CanExecute = !_viewModel.IsProcessingFFmpeg),\n            new CommandBinding(_viewModel.RemoveFFmpegCommand, RemoveFFmpeg_Executed, (_, args) => args.CanExecute = !_viewModel.IsProcessingFFmpeg && !string.IsNullOrWhiteSpace(_viewModel.FFmpegPath)),\n            new CommandBinding(_viewModel.SeeErrorFFmpegCommand, BrowseFfmpeg_Executed, BrowseFfmpeg_CanExecute),\n            new CommandBinding(_viewModel.SeeErrorFFmpegCommand, SeeErrorFFmpeg_Executed, (_, args) => args.CanExecute = _viewModel.FFmpegHasError),\n            new CommandBinding(_viewModel.DownloadGifskiCommand, (_, _) => _viewModel.DownloadGifski(), (_, args) => args.CanExecute = !_viewModel.IsProcessingGifski),\n            new CommandBinding(_viewModel.SelectGifskiPathCommand, SelectGifski_Executed, (_, args) => args.CanExecute = !_viewModel.IsProcessingGifski),\n            new CommandBinding(_viewModel.RemoveGifskiCommand, RemoveGifski_Executed, (_, args) => args.CanExecute = !_viewModel.IsProcessingGifski && !string.IsNullOrWhiteSpace(_viewModel.GifskiPath)),\n            new CommandBinding(_viewModel.BrowseGifskiCommand, BrowseGifski_Executed, BrowseGifski_CanExecute),\n            new CommandBinding(_viewModel.SeeErrorGifskiCommand, SeeErrorGifski_Executed, (_, args) => args.CanExecute = _viewModel.GifskiHasError),\n        });\n    }\n\n    private async void PluginSettings_Loaded(object sender, RoutedEventArgs e)\n    {\n        await _viewModel.VerifyFFmpeg();\n\n        _viewModel.VerifyGifski();\n    }\n\n    //FFmpeg.\n    private async void RemoveFFmpeg_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            _viewModel.IsProcessingFFmpeg = true;\n            _viewModel.FFmpegError = null;\n\n            _viewModel.RemoveFFmpeg();\n\n            await _viewModel.VerifyFFmpeg(true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Removing FFmpeg\", _viewModel.FFmpegPath);\n\n            _viewModel.FFmpegError = ex;\n        }\n        finally\n        {\n            _viewModel.IsProcessingFFmpeg = false;\n        }\n    }\n\n    private async void SelectFFmpeg_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var previousPath = _viewModel.FFmpegPath;\n\n        _viewModel.IsProcessingFFmpeg = true;\n        _viewModel.FFmpegError = null;\n\n        try\n        {\n            var output = UserSettings.All.FfmpegLocation ?? \"\";\n\n            if (output.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n                output = \"\";\n\n            //It's only a relative path if not null/empty and there's no root folder declared.\n            var isRelative = !string.IsNullOrWhiteSpace(output) && !Path.IsPathRooted(output);\n            var notAlt = !string.IsNullOrWhiteSpace(output) && (UserSettings.All.FfmpegLocation ?? \"\").Contains(Path.DirectorySeparatorChar);\n\n            //Gets the current directory folder, where the file is located. If empty, it means that the path is relative.\n            var directory = !string.IsNullOrWhiteSpace(output) ? Path.GetDirectoryName(output) : \"\";\n\n            if (!string.IsNullOrWhiteSpace(output) && string.IsNullOrWhiteSpace(directory))\n                directory = AppDomain.CurrentDomain.BaseDirectory;\n\n            var initial = Directory.Exists(directory) ? directory : Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);\n\n            var ofd = new OpenFileDialog\n            {\n                FileName = \"ffmpeg\",\n                Filter = $\"{LocalizationHelper.Get(\"S.Options.Extras.FfmpegLocation.File\")} (*.exe, *.7z)|*.exe;*.7z\",\n                Title = LocalizationHelper.Get(\"S.Options.Extras.FfmpegLocation.Select\"),\n                InitialDirectory = isRelative ? Path.GetFullPath(initial) : initial,\n                DefaultExt = \".exe\"\n            };\n\n            var result = ofd.ShowDialog();\n\n            if (!result.HasValue || !result.Value)\n                return;\n\n            var path = ofd.FileName;\n\n            //Converts to a relative path again.\n            if (isRelative && !string.IsNullOrWhiteSpace(path))\n            {\n                var selected = new Uri(path);\n                var baseFolder = new Uri(AppDomain.CurrentDomain.BaseDirectory);\n                var relativeFolder = Uri.UnescapeDataString(baseFolder.MakeRelativeUri(selected).ToString());\n\n                //This app even returns you the correct slashes/backslashes.\n                path = notAlt ? relativeFolder : relativeFolder.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);\n            }\n\n            //If packed file selected, unpack first.\n            if (path?.EndsWith(\"7z\") == true)\n                path = await _viewModel.UnpackFFmpeg(path);\n\n            if (!string.IsNullOrWhiteSpace(path))\n                _viewModel.FFmpegPath = path;\n\n            await _viewModel.VerifyFFmpeg(true).ConfigureAwait(true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Selecting FFmpeg path\", _viewModel.FFmpegPath);\n\n            _viewModel.FFmpegError = ex;\n            _viewModel.FFmpegPath = previousPath;\n        }\n        finally\n        {\n            _viewModel.IsProcessingFFmpeg = false;\n        }\n    }\n\n    private void SeeErrorFFmpeg_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        ErrorDialog.Ok(\"ScreenToGif\", \"Error downloading/unpacking FFmpeg\", _viewModel.FFmpegError.Message, _viewModel.FFmpegError);\n    }\n\n    private void BrowseFfmpeg_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded;// && FfmpegImageCard.Status == ExtrasStatus.Ready;\n    }\n\n    private void BrowseFfmpeg_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            var path = PathHelper.AdjustPath(UserSettings.All.FfmpegLocation);\n\n            if (string.IsNullOrWhiteSpace(path))\n                return;\n\n            var folder = Path.GetDirectoryName(path);\n\n            if (string.IsNullOrWhiteSpace(folder))\n                return;\n\n            ProcessHelper.StartWithShell(folder);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to browse the FFmpeg folder.\");\n        }\n    }\n\n    //Gifski.\n    private void RemoveGifski_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            _viewModel.IsProcessingGifski = true;\n            _viewModel.GifskiError = null;\n\n            _viewModel.RemoveGifski();\n\n            _viewModel.VerifyGifski(true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Removing Gifski\", _viewModel.GifskiPath);\n\n            _viewModel.GifskiError = ex;\n        }\n        finally\n        {\n            _viewModel.IsProcessingGifski = false;\n        }\n    }\n\n    private async void SelectGifski_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var previousPath = _viewModel.GifskiPath;\n\n        _viewModel.IsProcessingGifski = true;\n        _viewModel.GifskiError = null;\n\n        try\n        {\n            var output = UserSettings.All.GifskiLocation ?? \"\";\n\n            if (output.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n                output = \"\";\n\n            //It's only a relative path if not null/empty and there's no root folder declared.\n            var isRelative = !string.IsNullOrWhiteSpace(output) && !Path.IsPathRooted(output);\n            var notAlt = !string.IsNullOrWhiteSpace(output) && (UserSettings.All.GifskiLocation ?? \"\").Contains(Path.DirectorySeparatorChar);\n\n            //Gets the current directory folder, where the file is located. If empty, it means that the path is relative.\n            var directory = !string.IsNullOrWhiteSpace(output) ? Path.GetDirectoryName(output) : \"\";\n\n            if (!string.IsNullOrWhiteSpace(output) && string.IsNullOrWhiteSpace(directory))\n                directory = AppDomain.CurrentDomain.BaseDirectory;\n\n            var initial = Directory.Exists(directory) ? directory : Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);\n\n            var ofd = new OpenFileDialog\n            {\n                FileName = \"gifski\",\n                Filter = $\"{LocalizationHelper.Get(\"S.Options.Extras.GifskiLocation.File\")} (*.dll, *.tar.xz)|*.dll;*.tar.xz\",\n                Title = LocalizationHelper.Get(\"S.Options.Extras.GifskiLocation.Select\"),\n                InitialDirectory = isRelative ? Path.GetFullPath(initial) : initial,\n                DefaultExt = \".dll\"\n            };\n\n            var result = ofd.ShowDialog();\n\n            if (!result.HasValue || !result.Value)\n                return;\n\n            var path = ofd.FileName;\n\n            //Converts to a relative path again.\n            if (isRelative && !string.IsNullOrWhiteSpace(path))\n            {\n                var selected = new Uri(path);\n                var baseFolder = new Uri(AppDomain.CurrentDomain.BaseDirectory);\n                var relativeFolder = Uri.UnescapeDataString(baseFolder.MakeRelativeUri(selected).ToString());\n\n                //This app even returns you the correct slashes/backslashes.\n                path = notAlt ? relativeFolder : relativeFolder.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);\n            }\n            \n            //If packed file selected, unpack first.\n            if (path?.EndsWith(\"tar.xz\") == true)\n                path = await _viewModel.UnpackGifski(path);\n\n            if (!string.IsNullOrWhiteSpace(path))\n                _viewModel.GifskiPath = path;\n\n            _viewModel.VerifyGifski(true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Selecting Gifski path\", _viewModel.GifskiPath);\n\n            _viewModel.GifskiError = ex;\n            _viewModel.GifskiPath = previousPath;\n        }\n        finally\n        {\n            _viewModel.IsProcessingGifski = false;\n        }\n    }\n\n    private void SeeErrorGifski_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        ErrorDialog.Ok(\"ScreenToGif\", \"Error downloading/unpacking Gifski\", _viewModel.GifskiError.Message, _viewModel.GifskiError);\n    }\n    \n    private void BrowseGifski_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded;// && GifskiImageCard.Status == ExtrasStatus.Ready;\n    }\n    \n    private void BrowseGifski_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            var path = PathHelper.AdjustPath(UserSettings.All.GifskiLocation);\n\n            if (string.IsNullOrWhiteSpace(path))\n                return;\n\n            var folder = Path.GetDirectoryName(path);\n\n            if (string.IsNullOrWhiteSpace(folder))\n                return;\n\n            ProcessHelper.StartWithShell(folder);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to browse the Gifski folder.\");\n        }\n    }\n\n    //Other.\n    private void ExtrasHyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(e.Uri.AbsoluteUri);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to navigate to the license website.\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/RecorderSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.RecorderSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n      xmlns:g=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n      Title=\"RecorderSettings\">\n\n    <Page.Resources>\n        <g:BoolOrToVisibility x:Key=\"BoolOrToVisibility\"/>\n    </Page.Resources>\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid DataContext=\"{x:Static t:UserSettings.All}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Expander Grid.Row=\"0\" Header=\"{DynamicResource S.Options.Recorder.Interface}\" IsExpanded=\"True\">\n                <Grid Margin=\"10,0,5,5\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" ContentHeight=\"46\" ContentWidth=\"56\" Text=\"{DynamicResource S.Options.Recorder.Interface.Old}\" Padding=\"5\" HorizontalAlignment=\"Right\"\n                                           IsChecked=\"{Binding Path=NewRecorder, Mode=TwoWay, Converter={StaticResource InvertedBool}}\" Icon=\"{StaticResource Vector.Recorder.Old}\"/>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" ContentHeight=\"46\" ContentWidth=\"56\" Text=\"{DynamicResource S.Options.Recorder.Interface.New}\" Padding=\"5\" HorizontalAlignment=\"Left\"\n                                           IsChecked=\"{Binding Path=NewRecorder, Mode=TwoWay}\" Icon=\"{StaticResource Vector.Recorder.New}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"5,3\" Visibility=\"{Binding Path=NewRecorder, Mode=OneWay, Converter={StaticResource InvertedBoolToVisibility}}\"\n                                        Text=\"{DynamicResource S.Options.Recorder.HideTitleBar}\" IsChecked=\"{Binding Path=RecorderThinMode, Mode=TwoWay}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Recorder.Magnifier}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.Magnifier.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=Magnifier, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Path=NewRecorder, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Recorder.AnimateBorder}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.AnimateBorder.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=AnimateRecorderBorder, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Path=NewRecorder, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Recorder.SelectionPanning}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.SelectionPanning.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=EnableSelectionPanning, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Path=NewRecorder, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Recorder.Compact}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.Compact.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=RecorderCompactMode, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Path=NewRecorder, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Recorder.DisplayDiscard}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.DisplayDiscard.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=RecorderDisplayDiscard, Mode=TwoWay}\"/>\n\n                    <c:ExtendedCheckBox Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Recorder.SelectionImprovement}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.SelectionImprovement.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=SelectionImprovement, Mode=TwoWay}\"\n                                        Visibility=\"{Binding Path=NewRecorder, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Options.Recorder.Frequency}\" IsExpanded=\"True\">\n                <Grid Margin=\"10,0,5,5\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ManualRadioButton\" ContentHeight=\"26\" ContentWidth=\"26\"\n                                           Text=\"{DynamicResource S.Options.Recorder.Frequency.Manual}\" Padding=\"5\" Margin=\"0,0,0,5\" TextWrapping=\"Wrap\"\n                                           IsChecked=\"{Binding CaptureFrequency, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Manual}}\" \n                                           Icon=\"{StaticResource Vector.Camera}\" ToolTip=\"{DynamicResource S.Options.Recorder.Frequency.Manual.Info}\"/>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"InteractionRadioButton\" ContentHeight=\"26\" ContentWidth=\"26\"\n                                           Text=\"{DynamicResource S.Options.Recorder.Frequency.Interaction}\" Padding=\"5\" Margin=\"0,0,0,5\" TextWrapping=\"Wrap\"\n                                           IsChecked=\"{Binding CaptureFrequency, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Interaction}}\" \n                                           Icon=\"{StaticResource Vector.Cursor}\" ToolTip=\"{DynamicResource S.Options.Recorder.Frequency.Interaction.Info}\"/>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"3\" x:Name=\"PerSecondRadioButton\" ContentHeight=\"26\" ContentWidth=\"26\" \n                                           Text=\"{DynamicResource S.Options.Recorder.Frequency.Second}\" Padding=\"5\" Margin=\"0,0,0,5\" TextWrapping=\"Wrap\"\n                                           IsChecked=\"{Binding CaptureFrequency, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerSecond}}\" \n                                           Icon=\"{StaticResource Vector.Delay}\" ToolTip=\"{DynamicResource S.Options.Recorder.Frequency.Second.Info}\"/>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"4\" x:Name=\"PerMinuteRadioButton\" ContentHeight=\"26\" ContentWidth=\"26\"\n                                           Text=\"{DynamicResource S.Options.Recorder.Frequency.Minute}\" Padding=\"5\" Margin=\"0,0,0,5\" TextWrapping=\"Wrap\"\n                                           IsChecked=\"{Binding CaptureFrequency, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerMinute}}\" \n                                           Icon=\"{StaticResource Vector.Delay.Minute}\" ToolTip=\"{DynamicResource S.Options.Recorder.Frequency.Minute.Info}\"/>\n\n                    <c:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"5\" x:Name=\"PerHourRadioButton\" ContentHeight=\"26\" ContentWidth=\"26\"\n                                           Text=\"{DynamicResource S.Options.Recorder.Frequency.Hour}\" Padding=\"5\" Margin=\"0,0,0,5\" TextWrapping=\"Wrap\"\n                                           IsChecked=\"{Binding CaptureFrequency, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerHour}}\"\n                                           Icon=\"{StaticResource Vector.Delay.Hour}\" ToolTip=\"{DynamicResource S.Options.Recorder.Frequency.Hour.Info}\"/>\n\n                    <WrapPanel Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"7\" Margin=\"0,0,5,0\" Visibility=\"{Binding ElementName=PerSecondRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource InvertedBoolToVisibility}, FallbackValue=Collapsed}\">\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Frequency.Playback}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0\" VerticalAlignment=\"Center\"/>\n                        <c:IntegerUpDown Minimum=\"10\" Maximum=\"25000\" Value=\"{Binding Path=PlaybackDelayManual, Mode=TwoWay}\" MinWidth=\"80\" Visibility=\"{Binding ElementName=ManualRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n                        <c:IntegerUpDown Minimum=\"10\" Maximum=\"25000\" Value=\"{Binding Path=PlaybackDelayInteraction, Mode=TwoWay}\" MinWidth=\"80\" Visibility=\"{Binding ElementName=InteractionRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n                        <c:IntegerUpDown Minimum=\"10\" Maximum=\"25000\" Value=\"{Binding Path=PlaybackDelayMinute, Mode=TwoWay}\" MinWidth=\"80\" Visibility=\"{Binding ElementName=PerMinuteRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n                        <c:IntegerUpDown Minimum=\"10\" Maximum=\"25000\" Value=\"{Binding Path=PlaybackDelayHour, Mode=TwoWay}\" MinWidth=\"80\" Visibility=\"{Binding ElementName=PerHourRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Frequency.Playback.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <WrapPanel Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"7\" Margin=\"0,5,0,0\"\n                               Visibility=\"{Binding ElementName=InteractionRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}, FallbackValue=Collapsed}\">\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Frequency.Trigger}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0\" VerticalAlignment=\"Center\"/>\n                        <c:IntegerUpDown Minimum=\"0\" Maximum=\"25000\" Value=\"{Binding Path=TriggerDelayInteraction, Mode=TwoWay}\" MinWidth=\"80\" />\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Frequency.Trigger.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\"\n                                   TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <WrapPanel Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"7\" Margin=\"0,5,0,0\"\n                               Visibility=\"{Binding ElementName=ManualRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}, FallbackValue=Collapsed}\">\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Frequency.Trigger}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0\" VerticalAlignment=\"Center\"/>\n                        <c:IntegerUpDown Minimum=\"0\" Maximum=\"25000\" Value=\"{Binding Path=TriggerDelayManual, Mode=TwoWay}\" MinWidth=\"80\" />\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Frequency.Trigger.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\"\n                                   TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <c:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"7\" Text=\"{DynamicResource S.Options.Recorder.FixedFramerate}\" \n                                        Info=\"{DynamicResource S.Options.Recorder.FixedFramerate.Info}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=FixedFrameRate, Mode=TwoWay}\"\n                                        Visibility=\"{Binding ElementName=PerSecondRadioButton, Path=IsChecked, Mode=OneWay, Converter={StaticResource Bool2Visibility}, FallbackValue=Collapsed}\"/>\n\n                    <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"7\" Margin=\"0,0,5,0\">\n                        <Grid.Visibility>\n                            <MultiBinding Converter=\"{StaticResource BoolOrToVisibility}\">\n                                <Binding ElementName=\"PerSecondRadioButton\" Path=\"IsChecked\" Mode=\"OneWay\"/>\n                                <Binding ElementName=\"PerMinuteRadioButton\" Path=\"IsChecked\" Mode=\"OneWay\"/>\n                                <Binding ElementName=\"PerHourRadioButton\" Path=\"IsChecked\" Mode=\"OneWay\"/>\n                            </MultiBinding>\n                        </Grid.Visibility>\n\n                        <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.CaptureChanges}\" Info=\"{DynamicResource S.Options.Recorder.CaptureChanges.Info}\" \n                                            Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=OnlyCaptureChanges, Mode=TwoWay}\"\n                                            Visibility=\"{Binding UseDesktopDuplication, Converter={StaticResource Bool2Visibility}}\"/>\n                    </Grid>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Options.Recorder.Mode}\" IsExpanded=\"True\">\n                <StackPanel Margin=\"10,0,0,0\">\n                    <WrapPanel Margin=\"0,0,5,5\" HorizontalAlignment=\"Center\">\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <c:ExtendedRadioButton Grid.Column=\"0\" ContentWidth=\"36\" ContentHeight=\"36\" Text=\"BitBlt\" Padding=\"5\" IsChecked=\"{Binding Path=UseDesktopDuplication, Mode=TwoWay, Converter={StaticResource InvertedBool}}\"\n                                                   Icon=\"{StaticResource Vector.Gdi}\" ToolTip=\"{DynamicResource S.Options.Recorder.Bitblt.Info}\"/>\n\n                            <c:ExtendedRadioButton Grid.Column=\"1\" ContentWidth=\"36\" ContentHeight=\"40\" Text=\"DirectX\" Padding=\"5\" IsChecked=\"{Binding Path=UseDesktopDuplication, Mode=TwoWay}\"\n                                                   Icon=\"{StaticResource Vector.DirectX}\" ToolTip=\"{DynamicResource S.Options.Recorder.DirectX.Info}\"/>\n                        </Grid>\n\n                        <Separator Width=\"1\" Margin=\"3\"/>\n\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <c:ExtendedRadioButton Grid.Column=\"0\" ContentWidth=\"36\" ContentHeight=\"36\" Text=\"{DynamicResource S.Options.Recorder.File}\" Padding=\"5\" Icon=\"{StaticResource Vector.ImageStack}\" \n                                                   IsChecked=\"{Binding Path=UseMemoryCache, Mode=TwoWay, Converter={StaticResource InvertedBool}}\" ToolTip=\"{DynamicResource S.Options.Recorder.File.Info}\"/>\n                            <c:ExtendedRadioButton Grid.Column=\"1\" ContentWidth=\"36\" ContentHeight=\"36\" Text=\"{DynamicResource S.Options.Recorder.Cache}\" Padding=\"5\" Icon=\"{StaticResource Vector.Cabinet}\" \n                                                   IsChecked=\"{Binding Path=UseMemoryCache, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Options.Recorder.Cache.Info}\"/>\n                        </Grid>\n                    </WrapPanel>\n\n                    <WrapPanel Margin=\"0,0,5,5\" Visibility=\"{Binding Path=UseMemoryCache, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\">\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Compression}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0\" VerticalAlignment=\"Center\"/>\n                        <ComboBox x:Name=\"CompressionComboBox\" MinWidth=\"120\" VerticalAlignment=\"Center\"\n                                  SelectedIndex=\"{Binding Path=CaptureCompression, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.Recorder.Compression.Optimal}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.Recorder.Compression.Fastest}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.Recorder.Compression.NoCompression}\"/>\n                        </ComboBox>\n\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Compression.Optimal.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Gray150}\" Visibility=\"{Binding ElementName=CompressionComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=0}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Compression.Fastest.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Gray150}\" Visibility=\"{Binding ElementName=CompressionComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=1}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.Compression.NoCompression.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Gray150}\" Visibility=\"{Binding ElementName=CompressionComboBox, Path=SelectedIndex, Converter={StaticResource IntToVisibility}, ConverterParameter=2}\"/>\n                    </WrapPanel>\n\n                    <WrapPanel Margin=\"0,0,5,5\" Visibility=\"{Binding Path=UseMemoryCache, Mode=OneWay, Converter={StaticResource Bool2Visibility}}\">\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.CacheSize}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,0\" VerticalAlignment=\"Center\"/>\n                        <c:DoubleUpDown Minimum=\"1\" Maximum=\"200\" Value=\"{Binding Path=MemoryCacheSize, Mode=TwoWay}\" MinWidth=\"80\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.CacheSize.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.PreventBlackFrames}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=PreventBlackFrames, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Recorder.PreventBlackFrames.Info}\">\n                        <c:ExtendedCheckBox.Visibility>\n                            <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                                <Binding Path=\"UseMemoryCache\" Mode=\"OneWay\"/>\n                                <Binding Path=\"UseDesktopDuplication\" Mode=\"OneWay\" Converter=\"{StaticResource InvertedBool}\"/>\n                            </MultiBinding>\n                        </c:ExtendedCheckBox.Visibility>\n                    </c:ExtendedCheckBox>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.RecordMouse}\" Margin=\"5,3\" IsChecked=\"{Binding Path=ShowCursor, Mode=TwoWay}\"/>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.ForceGarbageCollection}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=ForceGarbageCollection, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Recorder.ForceGarbageCollection.Info}\"/>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.RemoteImprovement}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=RemoteImprovement, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Recorder.RemoteImprovement.Info}\" Visibility=\"{Binding Path=UseDesktopDuplication, Mode=OneWay, Converter={StaticResource InvertedBoolToVisibility}}\"/>\n                </StackPanel>\n            </Expander>\n\n            <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Options.Recorder.Guidelines}\" IsExpanded=\"False\">\n                <Grid>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <c:ExtendedToggleButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"GuidelineThirdsToggleButton\" ContentHeight=\"30\" ContentWidth=\"40\" Style=\"{StaticResource Style.ToggleButton.NoBorder}\"\n                                            Text=\"{DynamicResource S.Options.Recorder.Guidelines.RuleOfThirds}\" Padding=\"10\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\" Icon=\"{StaticResource Vector.Guideline.Thirds}\"\n                                            IsChecked=\"{Binding DisplayThirdsGuideline, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Options.Recorder.Guidelines.RuleOfThirds.Info}\"/>\n\n                    <Grid Grid.Row=\"1\" Grid.Column=\"0\" IsEnabled=\"{Binding DisplayThirdsGuideline, Mode=OneWay}\" HorizontalAlignment=\"Center\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                        </Grid.RowDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\n                        <c:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"5,3\" Value=\"{Binding ThirdsGuidelineThickness, Mode=TwoWay}\" \n                                        Minimum=\"0.5\" Maximum=\"5\" MinWidth=\"80\" HorizontalAlignment=\"Left\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\n                        <c:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"5,3\" SelectedColor=\"{Binding ThirdsGuidelineColor, Mode=TwoWay}\" MinWidth=\"80\" HorizontalAlignment=\"Left\"/>\n\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shapes.Shapes.Dashes}\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\n                        <c:ExtendedTextBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"5,3\" AllowedCharacters=\"0123456789 \" MinWidth=\"80\" HorizontalAlignment=\"Left\"\n                                           Text=\"{Binding ThirdsGuidelineStrokeDashArray}\" ToolTip=\"{DynamicResource S.Shapes.Shapes.Dashes.Info}\"/>\n                    </Grid>\n\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" \n                               Text=\"{DynamicResource S.AndOr}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                    <Separator Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Width=\"1\" HorizontalAlignment=\"Center\"/>\n\n                    <c:ExtendedToggleButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"GuidelineCrosshairToggleButton\" ContentHeight=\"30\" ContentWidth=\"40\" Style=\"{StaticResource Style.ToggleButton.NoBorder}\"\n                                            Text=\"{DynamicResource S.Options.Recorder.Guidelines.Crosshair}\" Padding=\"10\" Margin=\"0,0,0,5\" HorizontalAlignment=\"Center\" Icon=\"{StaticResource Vector.Guideline.Crosshair}\"\n                                            IsChecked=\"{Binding DisplayCrosshairGuideline, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Options.Recorder.Guidelines.Crosshair.Info}\"/>\n\n                    <Grid Grid.Row=\"1\" Grid.Column=\"1\" IsEnabled=\"{Binding DisplayCrosshairGuideline, Mode=OneWay}\" HorizontalAlignment=\"Center\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                        </Grid.RowDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\n                        <c:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"5,3\" Value=\"{Binding CrosshairGuidelineThickness, Mode=TwoWay}\" \n                                        Minimum=\"0.5\" Maximum=\"5\" MinWidth=\"80\" HorizontalAlignment=\"Left\"/>\n\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\n                        <c:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"5,3\" SelectedColor=\"{Binding CrosshairGuidelineColor, Mode=TwoWay}\" MinWidth=\"80\" HorizontalAlignment=\"Left\"/>\n\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shapes.Shapes.Dashes}\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Center\"/>\n                        <c:ExtendedTextBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"5,3\" AllowedCharacters=\"0123456789 \" MinWidth=\"80\" HorizontalAlignment=\"Left\"\n                                           Text=\"{Binding CrosshairGuidelineStrokeDashArray}\" ToolTip=\"{DynamicResource S.Shapes.Shapes.Dashes.Info}\"/>\n                    </Grid>\n\n                    <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"10,10,5,0\" HorizontalAlignment=\"Center\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Options.Recorder.Guidelines.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                   Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                    </Grid>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"4\" Header=\"{DynamicResource S.Options.Other}\" IsExpanded=\"True\">\n                <StackPanel Margin=\"10,0,0,0\">\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.RememberSize}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=RecorderRememberSize, Mode=TwoWay}\"/>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.RememberPosition}\" Margin=\"25,3,5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=RecorderRememberPosition, Mode=TwoWay}\"\n                                        IsEnabled=\"{Binding RecorderRememberSize, Mode=OneWay}\" UncheckOnDisable=\"True\"/>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.PreStart}\" Margin=\"5,3\" IsChecked=\"{Binding Path=UsePreStart, Mode=TwoWay}\"/>\n                    <WrapPanel Margin=\"20,3,5,3\" Visibility=\"{Binding UsePreStart, Converter={StaticResource Bool2Visibility}}\">\n                        <c:IntegerUpDown Minimum=\"2\" Maximum=\"15\" MinWidth=\"50\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=PreStartValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.PreStart.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.CursorFollowing}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=CursorFollowing, Mode=TwoWay}\"\n                                        Info=\"{DynamicResource S.Options.Recorder.CursorFollowing.Info}\"/>\n\n                    <WrapPanel Margin=\"20,3,5,3\" Visibility=\"{Binding CursorFollowing, Converter={StaticResource Bool2Visibility}}\">\n                        <c:IntegerUpDown Minimum=\"2\" Maximum=\"100\" MinWidth=\"50\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FollowBuffer, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.FollowMargin.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n                    <WrapPanel Margin=\"20,3,5,3\" Visibility=\"{Binding CursorFollowing, Converter={StaticResource Bool2Visibility}}\">\n                        <c:IntegerUpDown Minimum=\"2\" Maximum=\"100\" MinWidth=\"50\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FollowBufferInvisible, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Recorder.FollowMarginInvisible.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Recorder.NotifyRecordingDiscard}\" Margin=\"5,3\" VerticalAlignment=\"Top\" IsChecked=\"{Binding Path=NotifyRecordingDiscard, Mode=TwoWay}\"/>\n                </StackPanel>\n            </Expander>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/RecorderSettings.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace ScreenToGif.Views.Settings;\n/// <summary>\n/// Interaction logic for RecorderSettings.xaml\n/// </summary>\npublic partial class RecorderSettings : Page\n{\n    public RecorderSettings()\n    {\n        InitializeComponent();\n    }\n}\n"
  },
  {
    "path": "ScreenToGif/Views/Settings/ShortcutsSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.ShortcutsSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"ShortcutsSettings\" Loaded=\"ShortcutsSettings_Loaded\" Unloaded=\"ShortcutsSettings_Unloaded\">\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <StackPanel DataContext=\"{x:Static t:UserSettings.All}\">\n            <c:LabelSeparator Text=\"{DynamicResource S.Options.Shortcuts.Global}\"/>\n            <Grid Margin=\"10,3,5,3\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"80\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Global.ScreenRecorder}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"RecorderKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding RecorderShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ModifierKeys=\"{Binding RecorderModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Globals_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Global.ScreenRecorder.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Global.WebcamRecorder}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"WebcamKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding WebcamRecorderShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ModifierKeys=\"{Binding WebcamRecorderModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Globals_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Global.WebcamRecorder.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"2\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Global.BoardRecorder}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"BoardKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding BoardRecorderShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ModifierKeys=\"{Binding BoardRecorderModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Globals_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Global.BoardRecorder.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"3\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Global.OpenEditor}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"EditorKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding EditorShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ModifierKeys=\"{Binding EditorModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Globals_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"3\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Global.OpenEditor.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"4\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Global.OpenOptions}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"OptionsKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding OptionsShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ModifierKeys=\"{Binding OptionsModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Globals_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"4\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Global.OpenOptions.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"5\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Global.Exit}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"ExitKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding ExitShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" ModifierKeys=\"{Binding ExitModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Globals_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"5\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Global.Exit.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n            </Grid>\n\n            <c:LabelSeparator Text=\"{DynamicResource S.Options.Shortcuts.Recorders}\"/>\n            <Grid Margin=\"10,3,5,3\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"80\"/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Recorders.StartPause}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"StartKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding StartPauseShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          ModifierKeys=\"{Binding StartPauseModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Recorders_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Recorders.StartPause.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"1\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Recorders.Stop}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"StopKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding StopShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          ModifierKeys=\"{Binding StopModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Recorders_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Recorders.Stop.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"2\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Recorders.Discard}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"DiscardKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding DiscardShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                          ModifierKeys=\"{Binding DiscardModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Recorders_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"2\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Recorders.Discard.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"3\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Recorders.Follow}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"FollowKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          MainKey=\"{Binding FollowShortcut, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                          ModifierKeys=\"{Binding FollowModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                          KeyChanged=\"Recorders_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"3\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Recorders.Follow.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n\n                <Label Grid.Row=\"4\" Grid.Column=\"0\" Content=\"{DynamicResource S.Options.Shortcuts.Recorders.DisableFollow}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"5,4\" VerticalAlignment=\"Center\"/>\n                <c:KeyBox Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"DisableFollowKeyBox\" Height=\"23\" Margin=\"3\" VerticalAlignment=\"Center\" \n                          ModifierKeys=\"{Binding DisableFollowModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" OnlyModifiers=\"True\"\n                          KeyChanged=\"Recorders_OnKeyChanged\"/>\n                <TextBlock Grid.Row=\"4\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Shortcuts.Recorders.DisableFollow.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n            </Grid>\n        </StackPanel>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/ShortcutsSettings.xaml.cs",
    "content": "using ScreenToGif.Controls;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class ShortcutsSettings : Page\n{\n    public ShortcutsSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void ShortcutsSettings_Loaded(object sender, RoutedEventArgs e)\n    {\n        Global.IgnoreHotKeys = true;\n    }\n\n    private void Globals_OnKeyChanged(object sender, KeyChangedEventArgs e)\n    {\n        Recorders_OnKeyChanged(sender, e);\n\n        if (e.Cancel)\n            return;\n\n        //Unregister old shortcut.\n        HotKeyCollection.Default.Remove(e.PreviousModifiers, e.PreviousKey);\n\n        //Registers all shortcuts and updates the input gesture text.\n        App.RegisterShortcuts();\n    }\n\n    private void Recorders_OnKeyChanged(object sender, KeyChangedEventArgs e)\n    {\n        if (sender is not KeyBox box)\n            return;\n\n        var list = new List<Tuple<Key, ModifierKeys>>\n        {\n            new(UserSettings.All.RecorderShortcut, UserSettings.All.RecorderModifiers),\n            new(UserSettings.All.BoardRecorderShortcut, UserSettings.All.BoardRecorderModifiers),\n            new(UserSettings.All.WebcamRecorderShortcut, UserSettings.All.WebcamRecorderModifiers),\n            new(UserSettings.All.EditorShortcut, UserSettings.All.EditorModifiers),\n            new(UserSettings.All.OptionsShortcut, UserSettings.All.OptionsModifiers),\n            new(UserSettings.All.ExitShortcut, UserSettings.All.ExitModifiers),\n            new(UserSettings.All.StartPauseShortcut, UserSettings.All.StartPauseModifiers),\n            new(UserSettings.All.StopShortcut, UserSettings.All.StopModifiers),\n            new(UserSettings.All.DiscardShortcut, UserSettings.All.DiscardModifiers)\n        };\n\n        //If this new shortcut is already in use.\n        if (box.MainKey != Key.None && list.Count(c => c.Item1 == box.MainKey && c.Item2 == box.ModifierKeys) > 1)\n        {\n            box.MainKey = e.PreviousKey;\n            box.ModifierKeys = e.PreviousModifiers;\n            e.Cancel = true;\n        }\n    }\n    \n    private void ShortcutsSettings_Unloaded(object sender, RoutedEventArgs e)\n    {\n        Global.IgnoreHotKeys = false;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/StorageSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.StorageSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"StorageSettings\" Loaded=\"StorageSettings_Loaded\">\n\n    <Page.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.CheckCache}\" CanExecute=\"Cache_CanExecute\" Executed=\"CheckCache_Execute\"/>\n        <CommandBinding Command=\"{StaticResource Command.ClearCache}\" CanExecute=\"Cache_CanExecute\" Executed=\"ClearCache_Execute\"/>\n        <CommandBinding Command=\"{StaticResource Command.BrowseCache}\" CanExecute=\"BrowseCache_CanExecute\" Executed=\"BrowseCache_Execute\"/>\n        <CommandBinding Command=\"{StaticResource Command.BrowseLogs}\" CanExecute=\"BrowseLogs_CanExecute\" Executed=\"BrowseLogs_Execute\"/>\n\n        <CommandBinding Command=\"{StaticResource Command.RemoveAppDataSettings}\" CanExecute=\"RemoveAppDataSettings_CanExecute\" Executed=\"RemoveAppDataSettings_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.OpenAppDataSettings}\" CanExecute=\"RemoveAppDataSettings_CanExecute\" Executed=\"OpenAppDataSettings_Execute\"/>\n\n        <CommandBinding Command=\"{StaticResource Command.CreateLocalSettings}\" CanExecute=\"CreateLocalSettings_CanExecute\" Executed=\"CreateLocalSettings_Execute\"/>\n        <CommandBinding Command=\"{StaticResource Command.OpenLocalSettings}\" CanExecute=\"RemoveLocalSettings_CanExecute\" Executed=\"OpenLocalSettings_Execute\"/>\n        <CommandBinding Command=\"{StaticResource Command.RemoveLocalSettings}\" CanExecute=\"RemoveLocalSettings_CanExecute\" Executed=\"RemoveLocalSettings_Execute\"/>\n    </Page.CommandBindings>\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\n        <Grid x:Name=\"TempPanel\" DataContext=\"{x:Static t:UserSettings.All}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Expander Grid.Row=\"0\" Header=\"{DynamicResource S.Options.Storage.Status}\" IsExpanded=\"True\">\n                <Grid Margin=\"10,0,5,10\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Storage.Status.Volume}\" Padding=\"0\" Margin=\"5,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" \n                               Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"VolumeTextBlock\" Text=\"New Volume (C:)\" Padding=\"0\" Margin=\"0,0,5,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" \n                               Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"FreeSpaceTextBlock\" Text=\"{DynamicResource S.Options.Storage.Status.FreeSpace}\" Padding=\"0\" Margin=\"5,0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Right\"\n                               TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                    <c:ExtendedProgressBar Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"StatusProgressBar\" Height=\"20\" Value=\"50\" Maximum=\"100\" Margin=\"3\" State=\"Info\" ShowPercentage=\"True\"/>\n\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"3\" x:Name=\"CheckCacheButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Repeat}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                      ToolTip=\"{DynamicResource S.Options.Storage.Status.Check}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{StaticResource Command.CheckCache}\"/>\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"4\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Delete.Folder}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                      ToolTip=\"{DynamicResource S.Options.Storage.Status.Clear}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{StaticResource Command.ClearCache}\"/>\n\n                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"LowSpaceTextBlock\" Text=\"{DynamicResource S.Options.Storage.Status.LowSpace}\" Padding=\"0\" Margin=\"5,3\" \n                               VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Brush.ProgressBar.Danger}\" Visibility=\"Collapsed\"/>\n\n                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"FilesTextBlock\" Padding=\"0\" Margin=\"5,3\" Visibility=\"Collapsed\"\n                               VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\">\n                        <Run x:Name=\"FoldersRun\" Text=\"100 folders\"/>\n                        <Run Text=\"•\"/>\n                        <Run x:Name=\"FilesRun\" Text=\"300 files\"/>\n                        <Run Text=\"•\"/>\n                        <Run x:Name=\"UsedSpaceRun\" Text=\"10 GB in use\"/>\n                    </TextBlock>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Options.Storage.Paths}\" IsExpanded=\"True\">\n                <Grid Margin=\"10,0,5,0\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition Width=\"30\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Storage.Paths.Cache}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,5,0\" VerticalAlignment=\"Center\"/>\n                    <c:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CacheTextBox\" Margin=\"0,3\" Text=\"{Binding TemporaryFolder, Source={x:Static t:UserSettings.All}, UpdateSourceTrigger=PropertyChanged}\" \n                                       IsEnabled=\"{Binding ElementName=CheckCacheButton, Path=IsEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" LostFocus=\"CacheTextBox_LostFocus\"/>\n\n                    <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"2\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Open}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                      ToolTip=\"{DynamicResource S.Options.Storage.Paths.Cache.Choose}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Click=\"ChooseCachePath_Click\"/>\n                    <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"3\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Forward}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                      ToolTip=\"{DynamicResource S.Options.Storage.Paths.Browse}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{StaticResource Command.BrowseCache}\"/>\n\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Storage.Paths.Logs}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"2,0,5,0\" VerticalAlignment=\"Center\"/>\n                    <c:ExtendedTextBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"0,3\" Text=\"{Binding LogsFolder, Source={x:Static t:UserSettings.All}}\"/>\n\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"2\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Open}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                      ToolTip=\"{DynamicResource S.Options.Storage.Paths.Logs.Choose}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Click=\"ChooseLogsPath_Click\"/>\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"3\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Forward}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                      ToolTip=\"{DynamicResource S.Options.Storage.Paths.Browse}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\" Command=\"{StaticResource Command.BrowseLogs}\"/>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Options.Storage.Settings}\" IsExpanded=\"True\">\n                <Grid Margin=\"10,0,0,0\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Storage.AppDataPath}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"3\"/>\n                    <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"AppDataPathTextBlock\" Text=\"...\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"3\" TextWrapping=\"Wrap\" FontStyle=\"Italic\"/>\n\n                    <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"3\" x:Name=\"OpenAppDataButton\" ToolTip=\"{DynamicResource S.Options.Storage.OpenSettingsFolder}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                      Icon=\"{StaticResource Vector.Forward}\" Padding=\"3\" ContentWidth=\"18\" ContentHeight=\"14\" Command=\"{StaticResource Command.OpenAppDataSettings}\"/>\n\n                    <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"4\" x:Name=\"RemoveAppDataButton\" ToolTip=\"{DynamicResource S.Options.Storage.RemoveSettings}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                      Icon=\"{StaticResource Vector.Remove}\" Padding=\"3\" ContentWidth=\"18\" ContentHeight=\"14\" Command=\"{StaticResource Command.RemoveAppDataSettings}\"/>\n\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Storage.LocalPath}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"3\"/>\n                    <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"LocalPathTextBlock\" Text=\"...\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Padding=\"3\" TextWrapping=\"Wrap\" FontStyle=\"Italic\"/>\n\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"CreateLocalButton\" ToolTip=\"{DynamicResource S.Options.Storage.CreateSettings}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                      Icon=\"{StaticResource Vector.Add}\" Padding=\"3\" ContentHeight=\"18\" ContentWidth=\"14\" Command=\"{StaticResource Command.CreateLocalSettings}\"/>\n\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"3\" x:Name=\"OpenLocalButton\" ToolTip=\"{DynamicResource S.Options.Storage.OpenSettingsFolder}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                      Icon=\"{StaticResource Vector.Forward}\" Padding=\"3\" ContentWidth=\"18\" ContentHeight=\"14\" Command=\"{StaticResource Command.OpenLocalSettings}\"/>\n\n                    <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"4\" x:Name=\"RemoveLocalButton\" ToolTip=\"{DynamicResource S.Options.Storage.RemoveSettings}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                      Icon=\"{StaticResource Vector.Remove}\" Padding=\"3\" ContentWidth=\"18\" ContentHeight=\"14\" Command=\"{StaticResource Command.RemoveLocalSettings}\"/>\n\n                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"5\" Text=\"{DynamicResource S.Options.Storage.SettingsInfo}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                               TextWrapping=\"Wrap\" Padding=\"4,2\" Margin=\"0,10,0,0\"/>\n                </Grid>\n            </Expander>\n\n            <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Options.Other}\" IsExpanded=\"True\">\n                <StackPanel>\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Storage.DeleteEverything}\" Margin=\"10,3,5,3\"\n                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=DeleteCacheWhenClosing, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Storage.AskDeleteEverything}\" Margin=\"30,3,5,3\"\n                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=AskDeleteCacheWhenClosing, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                        Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=DeleteCacheWhenClosing, Converter={StaticResource Bool2Visibility}}\"/>\n\n                    <c:ExtendedCheckBox Text=\"{DynamicResource S.Options.Storage.AutomaticRemoval}\" Margin=\"10,3,5,3\"\n                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=AutomaticCleanUp, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                        ToolTip=\"{DynamicResource S.Options.Storage.AutomaticRemoval.Info}\"/>\n\n                    <WrapPanel Margin=\"30,3,5,3\" Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=AutomaticCleanUp, Converter={StaticResource Bool2Visibility}}\">\n                        <c:IntegerUpDown Minimum=\"1\" Maximum=\"30\" MinWidth=\"50\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=AutomaticCleanUpDays, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <TextBlock Text=\"{DynamicResource S.Options.Storage.AutomaticRemovalDays.Info}\" Padding=\"0\" Margin=\"5,0,0,0\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </WrapPanel>\n                </StackPanel>\n            </Expander>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/StorageSettings.xaml.cs",
    "content": "using ScreenToGif.Controls;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class StorageSettings : Page\n{\n    /// <summary>\n    /// Used to decide if a size check is necessary, when a new path is detected.\n    /// </summary>\n    private string _previousPath = \"\";\n\n    /// <summary>\n    /// True when the cache folder is being checked.\n    /// </summary>\n    private bool _isBusy;\n\n    /// <summary>\n    /// The Path of the cache folder.\n    /// </summary>\n    private List<DirectoryInfo> _folderList = [];\n\n    /// <summary>\n    /// The file count of the cache folder.\n    /// </summary>\n    private int _fileCount;\n\n    /// <summary>\n    /// The size in bytes of the cache folder.\n    /// </summary>\n    private long _cacheSize;\n    \n    public StorageSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void StorageSettings_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (TempPanel.Visibility != Visibility.Visible)\n            return;\n\n        _previousPath = UserSettings.All.TemporaryFolderResolved;\n\n        CheckSpace();\n\n        #region Settings\n\n        //Paths.\n        AppDataPathTextBlock.Text = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\"), \"Settings.xaml\");\n        LocalPathTextBlock.Text = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\");\n\n        //Remove all text decorations (Strikethrough).\n        AppDataPathTextBlock.TextDecorations.Clear();\n        LocalPathTextBlock.TextDecorations.Clear();\n\n        //Clear the tooltips.\n        AppDataPathTextBlock.ClearValue(ToolTipProperty);\n        LocalPathTextBlock.ClearValue(ToolTipProperty);\n\n        //AppData.\n        if (!File.Exists(AppDataPathTextBlock.Text))\n        {\n            AppDataPathTextBlock.TextDecorations.Add(new TextDecoration(TextDecorationLocation.Strikethrough, new Pen(Brushes.DarkSlateGray, 1),\n                0, TextDecorationUnit.FontRecommended, TextDecorationUnit.FontRecommended));\n\n            AppDataPathTextBlock.SetResourceReference(ToolTipProperty, \"S.Options.Storage.NotExists\");\n        }\n\n        //Local.\n        if (!File.Exists(LocalPathTextBlock.Text))\n        {\n            LocalPathTextBlock.TextDecorations.Add(new TextDecoration(TextDecorationLocation.Strikethrough, new Pen(Brushes.DarkSlateGray, 1),\n                0, TextDecorationUnit.FontRecommended, TextDecorationUnit.FontRecommended));\n\n            LocalPathTextBlock.SetResourceReference(ToolTipProperty, \"S.Options.Storage.NotExists\");\n        }\n\n        #endregion\n    }\n    \n    private void Cache_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && !string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolder) && !_isBusy;\n    }\n\n    private void BrowseCache_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && !string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolder) && Directory.Exists(UserSettings.All.TemporaryFolderResolved) && !_isBusy;\n    }\n\n    private void BrowseLogs_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && !string.IsNullOrWhiteSpace(UserSettings.All.LogsFolder) && Directory.Exists(UserSettings.All.LogsFolder);\n    }\n\n    private void CreateLocalSettings_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && !File.Exists(LocalPathTextBlock.Text);\n    }\n\n    private void RemoveLocalSettings_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && File.Exists(LocalPathTextBlock.Text);\n    }\n\n    private void RemoveAppDataSettings_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && File.Exists(AppDataPathTextBlock.Text);\n    }\n\n\n    private void CheckCache_Execute(object sender, RoutedEventArgs e)\n    {\n        CheckSpace();\n    }\n\n    private async void ClearCache_Execute(object sender, RoutedEventArgs e)\n    {\n        _isBusy = true;\n        StatusProgressBar.State = ExtendedProgressBar.ProgressState.Primary;\n        StatusProgressBar.IsIndeterminate = true;\n        FilesTextBlock.Visibility = Visibility.Collapsed;\n\n        try\n        {\n            var parent = PathHelper.AdjustPath(UserSettings.All.TemporaryFolderResolved);\n            var path = Path.Combine(parent, \"ScreenToGif\", \"Recording\");\n\n            if (!Directory.Exists(path))\n                return;\n\n            //Force to be 1 day or more.\n            UserSettings.All.AutomaticCleanUpDays = UserSettings.All.AutomaticCleanUpDays > 0 ? UserSettings.All.AutomaticCleanUpDays : 5;\n\n            //Asks if the user wants to remove all files or just the old ones.\n            if (!CacheDialog.Ask(true, out var ignoreRecent))\n                return;\n\n            _folderList = await Task.Factory.StartNew(() => Directory.GetDirectories(path, \"*\", SearchOption.TopDirectoryOnly).Select(x => new DirectoryInfo(x)).ToList());\n\n            if (ignoreRecent)\n                _folderList = await Task.Factory.StartNew(() => _folderList.Where(w => (DateTime.Now - w.CreationTime).Days > UserSettings.All.AutomaticCleanUpDays).ToList());\n\n            foreach (var folder in _folderList.Where(folder => !MutexList.IsInUse(folder.Name)))\n                Directory.Delete(folder.FullName, true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while cleaning the cache folder.\");\n        }\n        finally\n        {\n            App.MainViewModel.CheckDiskSpace();\n            CheckSpace(true);\n        }\n    }\n\n    private void ChooseCachePath_Click(object sender, RoutedEventArgs e)\n    {\n        var path = UserSettings.All.TemporaryFolderResolved;\n\n        if (UserSettings.All.TemporaryFolderResolved.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n            path = \"\";\n\n        //It's only a relative path if not null/empty and there's no root folder declared.\n        var isRelative = !string.IsNullOrWhiteSpace(path) && !Path.IsPathRooted(path);\n        var notAlt = !string.IsNullOrWhiteSpace(path) && UserSettings.All.TemporaryFolderResolved.Contains(Path.DirectorySeparatorChar);\n\n        path = PathHelper.AdjustPath(path);\n\n        var initial = Directory.Exists(path) ? path : Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);\n\n        var folderDialog = new FolderSelector();\n\n        if (!string.IsNullOrWhiteSpace(initial))\n            folderDialog.SelectedPath = initial;\n\n        if (!folderDialog.ShowDialog())\n            return;\n\n        //Converts to a relative path again.\n        if (isRelative && !string.IsNullOrWhiteSpace(folderDialog.SelectedPath))\n        {\n            var selected = new Uri(folderDialog.SelectedPath);\n            var baseFolder = new Uri(AppDomain.CurrentDomain.BaseDirectory);\n            var relativeFolder = selected.AbsolutePath.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar) == baseFolder.AbsolutePath.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar) ?\n                \".\" : Uri.UnescapeDataString(baseFolder.MakeRelativeUri(selected).ToString());\n\n            //This app even returns you the correct slashes/backslashes.\n            UserSettings.All.TemporaryFolder = notAlt ? relativeFolder.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar) :\n                relativeFolder.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);\n        }\n        else\n        {\n            UserSettings.All.TemporaryFolder = folderDialog.SelectedPath;\n        }\n\n        _previousPath = UserSettings.All.TemporaryFolderResolved;\n        CheckSpace();\n    }\n\n    private void CacheTextBox_LostFocus(object sender, RoutedEventArgs e)\n    {\n        if (_previousPath == UserSettings.All.TemporaryFolderResolved)\n            return;\n\n        _previousPath = UserSettings.All.TemporaryFolderResolved;\n        CheckSpace();\n    }\n\n    private void BrowseCache_Execute(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(UserSettings.All.TemporaryFolderResolved);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to browse the cache folder.\");\n        }\n    }\n\n    private void ChooseLogsPath_Click(object sender, RoutedEventArgs e)\n    {\n        var path = UserSettings.All.LogsFolder;\n\n        if (UserSettings.All.LogsFolder.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n            path = \"\";\n\n        //It's only a relative path if not null/empty and there's no root folder declared.\n        var isRelative = !string.IsNullOrWhiteSpace(path) && !Path.IsPathRooted(path);\n        var notAlt = !string.IsNullOrWhiteSpace(path) && UserSettings.All.LogsFolder.Contains(Path.DirectorySeparatorChar);\n\n        path = PathHelper.AdjustPath(path);\n\n        var initial = Directory.Exists(path) ? path : Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);\n\n        var folderDialog = new FolderSelector();\n\n        if (!string.IsNullOrWhiteSpace(initial))\n            folderDialog.SelectedPath = initial;\n\n        if (!folderDialog.ShowDialog())\n            return;\n\n        //Converts to a relative path again.\n        if (isRelative && !string.IsNullOrWhiteSpace(folderDialog.SelectedPath))\n        {\n            var selected = new Uri(folderDialog.SelectedPath);\n            var baseFolder = new Uri(AppDomain.CurrentDomain.BaseDirectory);\n            var relativeFolder = selected.AbsolutePath.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar) == baseFolder.AbsolutePath.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar) ?\n                \".\" : Uri.UnescapeDataString(baseFolder.MakeRelativeUri(selected).ToString());\n\n            //This app even returns you the correct slashes/backslashes.\n            UserSettings.All.LogsFolder = notAlt ? relativeFolder.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar) :\n                relativeFolder.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);\n        }\n        else\n        {\n            UserSettings.All.LogsFolder = folderDialog.SelectedPath;\n        }\n    }\n\n    private void BrowseLogs_Execute(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(UserSettings.All.LogsFolder);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while trying to browse the logs folder.\");\n        }\n    }\n\n\n    private void OpenAppDataSettings_Execute(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            if (Keyboard.Modifiers == ModifierKeys.Control)\n                ProcessHelper.StartWithShell(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\", \"Settings.xaml\"));\n            else\n                Process.Start(\"explorer.exe\", $\"/select,\\\"{Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\", \"Settings.xaml\")}\\\"\");\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Open AppData Settings Folder\", \"Impossible to open where the AppData settings is located\", ex.Message);\n        }\n    }\n\n    private void RemoveAppDataSettings_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            UserSettings.RemoveAppDataSettings();\n\n            AppDataPathTextBlock.TextDecorations.Add(new TextDecoration(TextDecorationLocation.Strikethrough,\n                new Pen(Brushes.DarkSlateGray, 1), 0, TextDecorationUnit.FontRecommended, TextDecorationUnit.FontRecommended));\n\n            AppDataPathTextBlock.SetResourceReference(ToolTipProperty, \"S.Options.Storage.NotExists\");\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Remove AppData Settings\", \"Impossible to remove AppData settings\", ex.Message);\n        }\n    }\n\n    private void CreateLocalSettings_Execute(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            UserSettings.CreateLocalSettings();\n\n            LocalPathTextBlock.TextDecorations.Clear();\n            LocalPathTextBlock.ClearValue(ToolTipProperty);\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Create Local Settings\", \"Impossible to create local settings\", ex.Message);\n        }\n    }\n\n    private void OpenLocalSettings_Execute(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            if (Keyboard.Modifiers == ModifierKeys.Control)\n                ProcessHelper.StartWithShell(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\"));\n            else\n                Process.Start(\"explorer.exe\", $\"/select,\\\"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\")}\\\"\");\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Open AppData Local Folder\", \"Impossible to open where the Local settings file is located\", ex.Message);\n        }\n    }\n\n    private void RemoveLocalSettings_Execute(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            UserSettings.RemoveLocalSettings();\n\n            LocalPathTextBlock.TextDecorations.Add(new TextDecoration(TextDecorationLocation.Strikethrough,\n                new Pen(Brushes.DarkSlateGray, 1), 0, TextDecorationUnit.FontRecommended, TextDecorationUnit.FontRecommended));\n\n            LocalPathTextBlock.SetResourceReference(ToolTipProperty, \"S.Options.Storage.NotExists\");\n        }\n        catch (Exception ex)\n        {\n            Dialog.Ok(\"Remove Local Settings\", \"Impossible to remove local settings\", ex.Message);\n        }\n    }\n\n\n    private async void CheckSpace(bool force = false)\n    {\n        if (_isBusy && !force)\n            return;\n\n        _isBusy = true;\n        StatusProgressBar.State = ExtendedProgressBar.ProgressState.Primary;\n        StatusProgressBar.IsIndeterminate = true;\n        FilesTextBlock.Visibility = Visibility.Collapsed;\n\n        #region Status\n\n        var path = PathHelper.AdjustPath(UserSettings.All.TemporaryFolderResolved);\n        var drive = DriveInfo.GetDrives().FirstOrDefault(w => w.RootDirectory.FullName == Path.GetPathRoot(path));\n\n        if (drive != null)\n        {\n            VolumeTextBlock.Text = $\"{drive.VolumeLabel} ({drive.Name.TrimEnd(Path.DirectorySeparatorChar).TrimEnd(Path.AltDirectorySeparatorChar)})\".TrimStart();\n            FreeSpaceTextBlock.Text = LocalizationHelper.GetWithFormat(\"S.Options.Storage.Status.FreeSpace\", \"{0} free of {1}\", Humanizer.BytesToString(drive.TotalFreeSpace), Humanizer.BytesToString(drive.TotalSize));\n            StatusProgressBar.Value = 100 - ((double)drive.AvailableFreeSpace / drive.TotalSize * 100);\n            StatusProgressBar.State = StatusProgressBar.Value < 90 ? ExtendedProgressBar.ProgressState.Info : ExtendedProgressBar.ProgressState.Danger;\n            LowSpaceTextBlock.Visibility = drive.AvailableFreeSpace > 2_000_000_000 ? Visibility.Collapsed : Visibility.Visible; //2 GB.\n        }\n        else\n        {\n            VolumeTextBlock.Text = Path.GetPathRoot(path);\n            FreeSpaceTextBlock.Text = LocalizationHelper.Get(\"S.Options.Storage.Status.Error\");\n            StatusProgressBar.Value = 0;\n            LowSpaceTextBlock.Visibility = Visibility.Collapsed;\n        }\n\n        #endregion\n\n        //Calculates the quantity of files and folders.\n        await Task.Run(CheckDrive);\n\n        try\n        {\n            App.MainViewModel.CheckDiskSpace();\n\n            FilesRun.Text = _fileCount == 0 ? LocalizationHelper.Get(\"S.Options.Storage.Status.Files.None\") :\n                LocalizationHelper.GetWithFormat(\"S.Options.Storage.Status.Files.\" + (_fileCount > 1 ? \"Plural\" : \"Singular\"), \"{0} files\", _fileCount);\n            FoldersRun.Text = _folderList.Count == 0 ? LocalizationHelper.Get(\"S.Options.Storage.Status.Folders.None\") :\n                LocalizationHelper.GetWithFormat(\"S.Options.Storage.Status.Folders.\" + (_folderList.Count > 1 ? \"Plural\" : \"Singular\"), \"{0} folders\", _folderList.Count);\n            UsedSpaceRun.Text = LocalizationHelper.GetWithFormat(\"S.Options.Storage.Status.InUse\", \"{0} in use\", Humanizer.BytesToString(_cacheSize));\n            FilesTextBlock.Visibility = Visibility.Visible;\n            StatusProgressBar.IsIndeterminate = false;\n        }\n        catch (Exception)\n        { }\n        finally\n        {\n            _isBusy = false;\n        }\n    }\n\n    private void CheckDrive()\n    {\n        _folderList = [];\n\n        var path = PathHelper.AdjustPath(UserSettings.All.TemporaryFolderResolved);\n        var cache = Path.Combine(path, \"ScreenToGif\", \"Recording\");\n\n        if (!Directory.Exists(cache))\n        {\n            _folderList = [];\n            _fileCount = 0;\n            _cacheSize = 0;\n            return;\n        }\n\n        _folderList = Directory.GetDirectories(cache).Select(x => new DirectoryInfo(x)).ToList();\n        _fileCount = _folderList.Sum(folder => Directory.EnumerateFiles(folder.FullName).Count());\n        _cacheSize = _folderList.Sum(s => s.EnumerateFiles(\"*.*\", SearchOption.AllDirectories).Sum(fi => fi.Length));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/TasksSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.TasksSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"TasksSettings\">\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid x:Name=\"TasksPanel\" DataContext=\"{x:Static t:UserSettings.All}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Grid.CommandBindings>\n                <CommandBinding Command=\"{StaticResource Command.MoveUp}\" CanExecute=\"MoveUp_CanExecute\" Executed=\"MoveUp_Executed\"/>\n                <CommandBinding Command=\"{StaticResource Command.MoveDown}\" CanExecute=\"MoveDown_CanExecute\" Executed=\"MoveDown_Executed\"/>\n                <CommandBinding Command=\"{StaticResource Command.Add}\" CanExecute=\"Add_CanExecute\" Executed=\"Add_Executed\"/>\n                <CommandBinding x:Name=\"EditCommandBinding\" Command=\"{StaticResource Command.Edit}\" CanExecute=\"Remove_CanExecute\" Executed=\"Edit_Executed\"/>\n                <CommandBinding Command=\"{StaticResource Command.Remove}\" CanExecute=\"Remove_CanExecute\" Executed=\"Remove_Executed\"/>\n            </Grid.CommandBindings>\n\n            <c:LabelSeparator Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Tasks.List}\"/>\n            <DataGrid Grid.Row=\"1\" Grid.Column=\"0\" Grid.RowSpan=\"6\" x:Name=\"TasksDataGrid\" Margin=\"10,5,5,5\" MinHeight=\"60\" RowHeight=\"23\" SelectionMode=\"Single\" SelectionUnit=\"FullRow\" CanUserSortColumns=\"False\"\n                      MouseDoubleClick=\"TasksDataGrid_MouseDoubleClick\" PreviewKeyDown=\"TasksDataGrid_PreviewKeyDown\">\n                <DataGrid.Columns>\n                    <DataGridTemplateColumn Header=\"{DynamicResource S.Options.Tasks.List.Enabled}\" Width=\"Auto\" MinWidth=\"50\">\n                        <DataGridTemplateColumn.CellTemplate>\n                            <DataTemplate>\n                                <c:ExtendedCheckBox IsChecked=\"{Binding IsEnabled, UpdateSourceTrigger=PropertyChanged}\" Focusable=\"False\" Margin=\"0,2,0,0\" Padding=\"0\"\n                                                    Content=\"{x:Null}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                            </DataTemplate>\n                        </DataGridTemplateColumn.CellTemplate>\n                    </DataGridTemplateColumn>\n\n                    <DataGridTextColumn Header=\"{DynamicResource S.Options.Tasks.List.Task}\" Width=\"Auto\" MinWidth=\"110\" IsReadOnly=\"True\" Binding=\"{Binding Kind, UpdateSourceTrigger=PropertyChanged}\"/>\n                    <DataGridTextColumn Header=\"{DynamicResource S.Options.Tasks.List.Details}\" Width=\"*\" IsReadOnly=\"True\" Binding=\"{Binding Details, UpdateSourceTrigger=PropertyChanged}\"/>\n                </DataGrid.Columns>\n            </DataGrid>\n\n            <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"UpButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Arrow.Blue.Top}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.MoveUp}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"DownButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Arrow.Blue.Bottom}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.MoveDown}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"AddButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Add}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Add}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"EditButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Pen}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Edit}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"RemoveButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Remove}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Remove}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <TextBlock Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Options.Tasks.Info}\" Padding=\"0\" Margin=\"3\" HorizontalAlignment=\"Center\" TextWrapping=\"Wrap\" \n                       Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/TasksSettings.xaml.cs",
    "content": "using ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.Tasks;\nusing ScreenToGif.Windows.Other;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class TasksSettings : Page\n{\n    /// <summary>\n    /// List of tasks.\n    /// </summary>\n    private ObservableCollection<BaseTaskViewModel> _effectList;\n\n    public TasksSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void TasksPanel_Loaded(object sender, RoutedEventArgs e)\n    {\n        var list = UserSettings.All.AutomatedTasksList?.Cast<BaseTaskViewModel>().ToList() ?? [];\n\n        TasksDataGrid.ItemsSource = _effectList = new ObservableCollection<BaseTaskViewModel>(list);\n    }\n\n    private void MoveUp_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = TasksPanel.IsVisible && TasksDataGrid.SelectedIndex > 0;\n    }\n\n    private void MoveDown_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = TasksPanel.IsVisible && TasksDataGrid.SelectedIndex > -1 && TasksDataGrid.SelectedIndex < TasksDataGrid.Items.Count - 1;\n    }\n\n    private void Remove_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = TasksPanel.IsVisible && TasksDataGrid.SelectedIndex != -1;\n    }\n\n    private void Add_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = TasksPanel.IsVisible;\n    }\n\n    private void MoveUp_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var selectedIndex = TasksDataGrid.SelectedIndex;\n        var selected = _effectList[selectedIndex];\n\n        _effectList.RemoveAt(selectedIndex);\n        _effectList.Insert(selectedIndex - 1, selected);\n        TasksDataGrid.SelectedItem = selected;\n\n        UserSettings.All.AutomatedTasksList = new ArrayList(_effectList.ToArray());\n    }\n\n    private void MoveDown_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var selectedIndex = TasksDataGrid.SelectedIndex;\n        var selected = _effectList[selectedIndex];\n\n        _effectList.RemoveAt(selectedIndex);\n        _effectList.Insert(selectedIndex + 1, selected);\n        TasksDataGrid.SelectedItem = selected;\n\n        UserSettings.All.AutomatedTasksList = new ArrayList(_effectList.ToArray());\n    }\n\n    private void Add_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var eff = new AutomatedTask();\n        var result = eff.ShowDialog();\n\n        if (result != true)\n            return;\n\n        _effectList.Add(eff.CurrentTask);\n        UserSettings.All.AutomatedTasksList = new ArrayList(_effectList.ToArray());\n    }\n\n    private void Edit_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var index = TasksDataGrid.SelectedIndex;\n        var selected = _effectList[TasksDataGrid.SelectedIndex].ShallowCopy();\n\n        var eff = new AutomatedTask { CurrentTask = selected, IsEditing = true };\n        var result = eff.ShowDialog();\n\n        if (result != true)\n            return;\n\n        _effectList[TasksDataGrid.SelectedIndex] = eff.CurrentTask;\n        TasksDataGrid.Items.Refresh();\n        TasksDataGrid.SelectedIndex = index;\n\n        UserSettings.All.AutomatedTasksList = new ArrayList(_effectList.ToArray());\n    }\n\n    private void Remove_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var index = TasksDataGrid.SelectedIndex;\n        _effectList.RemoveAt(TasksDataGrid.SelectedIndex);\n\n        //Automatically selects the closest item from the position of the one that was removed.\n        TasksDataGrid.SelectedIndex = _effectList.Count == 0 ? -1 : _effectList.Count <= index ? _effectList.Count - 1 : index;\n\n        UserSettings.All.AutomatedTasksList = new ArrayList(_effectList.ToArray());\n    }\n\n    private void TasksDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)\n    {\n        if (EditCommandBinding.Command.CanExecute(sender))\n            EditCommandBinding.Command.Execute(sender);\n    }\n\n    private void TasksDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key == Key.Enter && EditCommandBinding.Command.CanExecute(sender))\n        {\n            EditCommandBinding.Command.Execute(sender);\n            e.Handled = true;\n        }\n\n        if (e.Key == Key.Space)\n        {\n            if (TasksDataGrid.SelectedItem is not BaseTaskViewModel selected)\n                return;\n\n            selected.IsEnabled = !selected.IsEnabled;\n            e.Handled = true;\n\n            //UserSettings.All.AutomatedTasksList = new ArrayList(_effectList.ToArray());\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Views/Settings/UploadSettings.xaml",
    "content": "<Page x:Class=\"ScreenToGif.Views.Settings.UploadSettings\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n      xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n      xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n      Title=\"UploadSettings\" Loaded=\"UploadSettings_Loaded\" Unloaded=\"UploadSettings_Unloaded\">\n\n    <ScrollViewer VerticalScrollBarVisibility=\"Auto\" Focusable=\"False\" IsTabStop=\"False\">\n        <Grid x:Name=\"CloudGrid\" DataContext=\"{x:Static t:UserSettings.All}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n            </Grid.RowDefinitions>\n\n            <Grid.CommandBindings>\n                <CommandBinding Command=\"{StaticResource Command.Add}\" CanExecute=\"AddUpload_CanExecute\" Executed=\"AddUpload_Executed\"/>\n                <CommandBinding x:Name=\"EditUploadCommandBinding\" Command=\"{StaticResource Command.Edit}\" CanExecute=\"Upload_CanExecute\" Executed=\"EditUpload_Executed\"/>\n                <CommandBinding Command=\"{StaticResource Command.Remove}\" CanExecute=\"Upload_CanExecute\" Executed=\"RemoveUpload_Executed\"/>\n                <CommandBinding Command=\"{StaticResource Command.ViewHistory}\" CanExecute=\"Upload_CanExecute\" Executed=\"HistoryUpload_Executed\"/>\n            </Grid.CommandBindings>\n\n            <c:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n            <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Options.Upload.Proxy}\" IsExpanded=\"True\">\n                <DockPanel>\n                    <Grid DockPanel.Dock=\"Top\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\" MinWidth=\"160\" MaxWidth=\"280\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"90\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Text=\"{DynamicResource S.Options.Upload.Proxy.Mode}\" VerticalAlignment=\"Center\" Margin=\"5\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <ComboBox Grid.Column=\"1\" Margin=\"3\" VerticalContentAlignment=\"Center\" SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProxyMode}\">\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.Upload.Proxy.Mode.Disabled}\" Tag=\"{x:Static e:ProxyTypes.Disabled}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.Upload.Proxy.Mode.Manual}\" Tag=\"{x:Static e:ProxyTypes.Manual}\"/>\n                            <ComboBoxItem Content=\"{DynamicResource S.Options.Upload.Proxy.Mode.System}\" Tag=\"{x:Static e:ProxyTypes.System}\"/>\n                        </ComboBox>\n\n                        <TextBlock Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Upload.Proxy.Host}\" VerticalAlignment=\"Center\" Margin=\"10,5,5,5\" Visibility=\"{Binding ElementName=ProxyHostTextBox, Path=Visibility}\"\n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <c:ExtendedTextBox Grid.Column=\"3\" x:Name=\"ProxyHostTextBox\" Margin=\"5,3\" VerticalContentAlignment=\"Center\" TextWrapping=\"Wrap\"\n                                           Text=\"{Binding ProxyHost, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                           Visibility=\"{Binding ProxyMode, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:ProxyTypes.Manual}}\"/>\n\n                        <TextBlock Grid.Column=\"4\" Text=\"{DynamicResource S.Options.Upload.Proxy.Port}\" VerticalAlignment=\"Center\" Margin=\"10,5,5,5\" Visibility=\"{Binding ElementName=ProxyHostTextBox, Path=Visibility}\"\n                                   Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <c:IntegerUpDown Grid.Column=\"5\" Margin=\"5,3\" Maximum=\"65535\" Value=\"{Binding ProxyPort, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                         Visibility=\"{Binding ElementName=ProxyHostTextBox, Path=Visibility}\"/>\n\n                        <TextBlock Grid.Column=\"2\" Grid.ColumnSpan=\"5\" Margin=\"5,3\" Text=\"{DynamicResource S.Options.Upload.Proxy.Mode.System.Info}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\"\n                                   Visibility=\"{Binding ProxyMode, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:ProxyTypes.System}}\" \n                                   TextWrapping=\"Wrap\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"/>\n                    </Grid>\n\n                    <Grid DockPanel.Dock=\"Bottom\" Visibility=\"{Binding ElementName=ProxyHostTextBox, Path=Visibility}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\" MinWidth=\"140\" MaxWidth=\"200\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\" MinWidth=\"140\" MaxWidth=\"200\"/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Options.Upload.Proxy.User}\" VerticalAlignment=\"Center\" Margin=\"5\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <c:ExtendedTextBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"5,3\" VerticalContentAlignment=\"Center\" TextWrapping=\"Wrap\"\n                                           Text=\"{Binding ProxyUsername, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.Options.Upload.Proxy.Password}\" VerticalAlignment=\"Center\" Margin=\"10,5,5,5\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                        <PasswordBox Grid.Row=\"0\" Grid.Column=\"3\" x:Name=\"ProxyPasswordBox\" Margin=\"5,3\" VerticalContentAlignment=\"Center\"/>\n                    </Grid>\n                </DockPanel>\n            </Expander>\n\n            <c:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Options.Upload.Presets}\"/>\n            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"*\"/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <DataGrid Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"5\" x:Name=\"UploadDataGrid\" Margin=\"5\" MinHeight=\"60\" SelectionMode=\"Single\" SelectionUnit=\"FullRow\" CanUserSortColumns=\"False\"\n                          MouseDoubleClick=\"UploadDataGrid_MouseDoubleClick\" PreviewKeyDown=\"UploadDataGrid_PreviewKeyDown\">\n                    <DataGrid.Columns>\n                        <DataGridTemplateColumn Header=\"{DynamicResource S.Options.Upload.Presets.Enabled}\" Width=\"Auto\" MinWidth=\"50\">\n                            <DataGridTemplateColumn.CellTemplate>\n                                <DataTemplate>\n                                    <c:ExtendedCheckBox IsChecked=\"{Binding IsEnabled, UpdateSourceTrigger=PropertyChanged}\" Focusable=\"False\" Margin=\"0,2,0,0\" Padding=\"0\"\n                                                        Content=\"{x:Null}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n                                </DataTemplate>\n                            </DataGridTemplateColumn.CellTemplate>\n                        </DataGridTemplateColumn>\n\n                        <DataGridTextColumn Header=\"{DynamicResource S.Options.Upload.Presets.Service}\" Width=\"Auto\" MinWidth=\"110\" IsReadOnly=\"True\" Binding=\"{Binding Type, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <DataGridTextColumn Header=\"{DynamicResource S.Options.Upload.Presets.Title}\" Width=\"*\" IsReadOnly=\"True\" Binding=\"{Binding Title, UpdateSourceTrigger=PropertyChanged}\"/>\n                        <DataGridTextColumn Header=\"{DynamicResource S.Options.Upload.Presets.Description}\" Width=\"*\" IsReadOnly=\"True\" Binding=\"{Binding Description, UpdateSourceTrigger=PropertyChanged}\"/>\n                    </DataGrid.Columns>\n                </DataGrid>\n\n                <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"AddPresetButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Add}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                                  Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Add}\"\n                                  ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                  ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n                <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"EditPresetButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Pen}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                                  Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Edit}\"\n                                  ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                  ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n                <c:ExtendedButton Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"RemovePresetButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Remove}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                                  Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Remove}\"\n                                  ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                  ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n                <c:ExtendedButton Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"HistoryPresetButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Clock}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                                  Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.ViewHistory}\"\n                                  ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                  ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n            </Grid>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "ScreenToGif/Views/Settings/UploadSettings.xaml.cs",
    "content": "using ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.ExportPresets;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Collections;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Views.Settings;\n\npublic partial class UploadSettings : Page\n{\n    /// <summary>\n    /// List of upload presets.\n    /// </summary>\n    private ObservableCollection<UploadPreset> _uploadList;\n\n    public UploadSettings()\n    {\n        InitializeComponent();\n    }\n\n    private void UploadSettings_Loaded(object sender, RoutedEventArgs e)\n    {\n        var list = UserSettings.All.UploadPresets?.Cast<UploadPreset>().ToList() ?? [];\n\n        UploadDataGrid.ItemsSource = _uploadList = new ObservableCollection<UploadPreset>(list);\n\n        try\n        {\n            if (!string.IsNullOrWhiteSpace(UserSettings.All.ProxyPassword))\n                ProxyPasswordBox.Password = WebHelper.Unprotect(UserSettings.All.ProxyPassword);\n        }\n        catch (Exception ex)\n        {\n            StatusBand.Warning(\"It was not possible to correctly load your proxy password. This usually happens when sharing the app settings with different computers.\");\n            LogWriter.Log(ex, \"Unprotect data\");\n        }\n    }\n    \n    private void AddUpload_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = CloudGrid.IsVisible;\n    }\n\n    private void Upload_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = CloudGrid.IsVisible && UploadDataGrid.SelectedIndex != -1;\n    }\n\n    private void AddUpload_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var upload = new Upload();\n        var result = upload.ShowDialog();\n\n        if (result != true)\n            return;\n\n        _uploadList.Add(upload.CurrentPreset);\n\n        UserSettings.All.UploadPresets = new ArrayList(_uploadList.ToArray());\n    }\n\n    private void EditUpload_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var index = UploadDataGrid.SelectedIndex;\n        var current = _uploadList[UploadDataGrid.SelectedIndex];\n        var selected = current.ShallowCopy();\n\n        var preset = new Upload { CurrentPreset = selected, IsEditing = true };\n        var result = preset.ShowDialog();\n\n        if (result != true)\n            return;\n\n        _uploadList[UploadDataGrid.SelectedIndex] = preset.CurrentPreset;\n        UploadDataGrid.Items.Refresh();\n        UploadDataGrid.SelectedIndex = index;\n\n        //Update the upload preset in all export presets.\n        if (current.Title != preset.CurrentPreset.Title)\n        {\n            foreach (var exportPreset in UserSettings.All.ExportPresets.OfType<ExportPreset>().Where(w => w.UploadService == current.Title))\n                exportPreset.UploadService = preset.CurrentPreset.Title;\n        }\n\n        UserSettings.All.UploadPresets = new ArrayList(_uploadList.ToArray());\n    }\n\n    private void RemoveUpload_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var index = UploadDataGrid.SelectedIndex;\n\n        //Ask if the user really wants to remove the preset.\n        if (index < 0 || !Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Upload.Ask.Delete.Title\"), LocalizationHelper.Get(\"S.SaveAs.Upload.Ask.Delete.Instruction\"),\n                LocalizationHelper.Get(\"S.SaveAs.Upload.Ask.Delete.Message\")))\n            return;\n\n        var selected = _uploadList[UploadDataGrid.SelectedIndex];\n        _uploadList.RemoveAt(UploadDataGrid.SelectedIndex);\n\n        //Automatically selects the closest item from the position of the one that was removed.\n        UploadDataGrid.SelectedIndex = _uploadList.Count == 0 ? -1 : _uploadList.Count <= index ? _uploadList.Count - 1 : index;\n\n        UserSettings.All.UploadPresets = new ArrayList(_uploadList.ToArray());\n\n        //Remove the upload preset from all export presets.\n        foreach (var exportPreset in UserSettings.All.ExportPresets.OfType<ExportPreset>().Where(w => w.UploadService == selected.Title))\n            exportPreset.UploadService = null;\n    }\n\n    private void HistoryUpload_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var history = new UploadHistory\n        {\n            CurrentPreset = _uploadList[UploadDataGrid.SelectedIndex]\n        };\n        history.ShowDialog();\n    }\n\n    private void UploadDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)\n    {\n        if (EditUploadCommandBinding.Command.CanExecute(sender))\n            EditUploadCommandBinding.Command.Execute(sender);\n    }\n\n    private void UploadDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key == Key.Enter && EditUploadCommandBinding.Command.CanExecute(sender))\n        {\n            EditUploadCommandBinding.Command.Execute(sender);\n            e.Handled = true;\n        }\n\n        if (e.Key == Key.Space)\n        {\n            if (UploadDataGrid.SelectedItem is not UploadPreset selected)\n                return;\n\n            selected.IsEnabled = !selected.IsEnabled;\n            e.Handled = true;\n        }\n    }\n\n    private void UploadSettings_Unloaded(object sender, RoutedEventArgs e)\n    {\n        if (!string.IsNullOrWhiteSpace(ProxyPasswordBox.Password))\n            UserSettings.All.ProxyPassword = WebHelper.Protect(ProxyPasswordBox.Password);\n    }\n}\n"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/ControlStreaming.cs",
    "content": "#region License\n\n    /*\n        Adapted work from:\n\n        DirectShowLib - Provide access to DirectShow interfaces via .NET\n        Copyright (C) 2007\n        http://sourceforge.net/projects/directshownet/\n        This library is free software; you can redistribute it and/or\n        modify it under the terms of the GNU Lesser General Public\n        License as published by the Free Software Foundation; either\n        version 2.1 of the License, or (at your option) any later version.\n        This library is distributed in the hope that it will be useful,\n        but WITHOUT ANY WARRANTY; without even the implied warranty of\n        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n        Lesser General Public License for more details.\n        You should have received a copy of the GNU Lesser General Public\n        License along with this library; if not, write to the Free Software\n        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n    */\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class ControlStreaming\n{\n    /// <summary>\n    /// From FILTER_STATE\n    /// </summary>\n    public enum FilterState\n    {\n        Stopped,\n        Paused,\n        Running\n    }\n\n    /// <summary>\n    /// From WS_* defines\n    /// </summary>\n    [Flags]\n    public enum WindowStyle\n    {\n        Overlapped = 0x00000000,\n        Popup = unchecked((int)0x80000000), // enum can't be uint for VB\n        Child = 0x40000000,\n        Minimize = 0x20000000,\n        Visible = 0x10000000,\n        Disabled = 0x08000000,\n        ClipSiblings = 0x04000000,\n        ClipChildren = 0x02000000,\n        Maximize = 0x01000000,\n        Caption = 0x00C00000,\n        Border = 0x00800000,\n        DlgFrame = 0x00400000,\n        VScroll = 0x00200000,\n        HScroll = 0x00100000,\n        SysMenu = 0x00080000,\n        ThickFrame = 0x00040000,\n        Group = 0x00020000,\n        TabStop = 0x00010000,\n        MinimizeBox = 0x00020000,\n        MaximizeBox = 0x00010000\n    }\n\n    /// <summary>\n    /// From #define OATRUE/OAFALSE\n    /// </summary>\n    public enum OABool\n    {\n        False = 0,\n        True = -1 // bools in .NET use 1, not -1\n    }\n\n    /// <summary>\n    /// From WS_EX_* defines\n    /// </summary>\n    [Flags]\n    public enum WindowStyleEx\n    {\n        DlgModalFrame = 0x00000001,\n        NoParentNotify = 0x00000004,\n        Topmost = 0x00000008,\n        AcceptFiles = 0x00000010,\n        Transparent = 0x00000020,\n        MDIChild = 0x00000040,\n        ToolWindow = 0x00000080,\n        WindowEdge = 0x00000100,\n        ClientEdge = 0x00000200,\n        ContextHelp = 0x00000400,\n        Right = 0x00001000,\n        Left = 0x00000000,\n        RTLReading = 0x00002000,\n        LTRReading = 0x00000000,\n        LeftScrollBar = 0x00004000,\n        RightScrollBar = 0x00000000,\n        ControlParent = 0x00010000,\n        StaticEdge = 0x00020000,\n        APPWindow = 0x00040000,\n        Layered = 0x00080000,\n        NoInheritLayout = 0x00100000,\n        LayoutRTL = 0x00400000,\n        Composited = 0x02000000,\n        NoActivate = 0x08000000\n    }\n\n    /// <summary>\n    /// From SW_* defines\n    /// </summary>\n    public enum WindowState\n    {\n        Hide = 0,\n        Normal,\n        ShowMinimized,\n        ShowMaximized,\n        ShowNoActivate,\n        Show,\n        Minimize,\n        ShowMinNoActive,\n        ShowNA,\n        Restore,\n        ShowDefault,\n        ForceMinimize\n    }\n\n\n    [ComVisible(true), ComImport, Guid(\"56a868b1-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsDual)]\n    public interface IMediaControl\n    {\n        [PreserveSig]\n        int Run();\n\n        [PreserveSig]\n        int Pause();\n\n        [PreserveSig]\n        int Stop();\n\n        [PreserveSig]\n        int GetState([In] int msTimeout, [Out] out FilterState pfs);\n\n        [PreserveSig]\n        int RenderFile([In, MarshalAs(UnmanagedType.BStr)] string strFilename);\n\n        [PreserveSig, Obsolete(\"Automation interface, for pre-.NET VB.  Use IGraphBuilder::AddSourceFilter instead\", false)]\n        int AddSourceFilter([In]string strFilename, [Out, MarshalAs(UnmanagedType.IDispatch)] out object ppUnk);\n\n        [PreserveSig, Obsolete(\"Automation interface, for pre-.NET VB.  Use IFilterGraph::EnumFilters instead\", false)]\n        int get_FilterCollection([Out, MarshalAs(UnmanagedType.IDispatch)] out object ppUnk);\n\n        [PreserveSig, Obsolete(\"Automation interface, for pre-.NET VB.  Use IFilterMapper2::EnumMatchingFilters instead\", false)]\n        int get_RegFilterCollection([Out, MarshalAs(UnmanagedType.IDispatch)] out object ppUnk);\n\n        [PreserveSig]\n        int StopWhenReady();\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a868b4-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsDual)]\n    public interface IVideoWindow\n    {\n        [PreserveSig]\n        int put_Caption([In, MarshalAs(UnmanagedType.BStr)] string caption);\n\n        [PreserveSig]\n        int get_Caption([Out, MarshalAs(UnmanagedType.BStr)] out string caption);\n\n        [PreserveSig]\n        int put_WindowStyle([In] WindowStyle windowStyle);\n\n        [PreserveSig]\n        int get_WindowStyle([Out] out WindowStyle windowStyle);\n\n        [PreserveSig]\n        int put_WindowStyleEx([In] WindowStyleEx windowStyleEx);\n\n        [PreserveSig]\n        int get_WindowStyleEx([Out] out WindowStyleEx windowStyleEx);\n\n        [PreserveSig]\n        int put_AutoShow([In] OABool autoShow);\n\n        [PreserveSig]\n        int get_AutoShow([Out] out OABool autoShow);\n\n        [PreserveSig]\n        int put_WindowState([In] WindowState windowState);\n\n        [PreserveSig]\n        int get_WindowState([Out] out WindowState windowState);\n\n        [PreserveSig]\n        int put_BackgroundPalette([In] OABool backgroundPalette);\n\n        [PreserveSig]\n        int get_BackgroundPalette([Out] out OABool backgroundPalette);\n\n        [PreserveSig]\n        int put_Visible([In] OABool visible);\n\n        [PreserveSig]\n        int get_Visible([Out] out OABool visible);\n\n        [PreserveSig]\n        int put_Left([In] int left);\n\n        [PreserveSig]\n        int get_Left([Out] out int left);\n\n        [PreserveSig]\n        int put_Width([In] int width);\n\n        [PreserveSig]\n        int get_Width([Out] out int width);\n\n        [PreserveSig]\n        int put_Top([In] int top);\n\n        [PreserveSig]\n        int get_Top([Out] out int top);\n\n        [PreserveSig]\n        int put_Height([In] int height);\n\n        [PreserveSig]\n        int get_Height([Out] out int height);\n\n        [PreserveSig]\n        int put_Owner([In] IntPtr owner);\n\n        [PreserveSig]\n        int get_Owner([Out] out IntPtr owner);\n\n        [PreserveSig]\n        int put_MessageDrain([In] IntPtr drain);\n\n        [PreserveSig]\n        int get_MessageDrain([Out] out IntPtr drain);\n\n        // Use ColorTranslator to break out RGB\n        [PreserveSig]\n        int get_BorderColor([Out] out int color);\n\n        // Use ColorTranslator to break out RGB\n        [PreserveSig]\n        int put_BorderColor([In] int color);\n\n        [PreserveSig]\n        int get_FullScreenMode([Out] out OABool fullScreenMode);\n\n        [PreserveSig]\n        int put_FullScreenMode([In] OABool fullScreenMode);\n\n        [PreserveSig]\n        int SetWindowForeground([In] OABool focus);\n\n        [PreserveSig]\n        int NotifyOwnerMessage([In] IntPtr hwnd, [In] int msg, [In] IntPtr wParam, [In] IntPtr lParam);\n\n        [PreserveSig]\n        int SetWindowPosition([In] int left, [In] int top, [In] int width, [In] int height);\n\n        [PreserveSig]\n        int GetWindowPosition([Out] out int left, [Out] out int top, [Out] out int width, [Out] out int height);\n\n        [PreserveSig]\n        int GetMinIdealImageSize([Out] out int width, [Out] out int height);\n\n        [PreserveSig]\n        int GetMaxIdealImageSize([Out] out int width, [Out] out int height);\n\n        [PreserveSig]\n        int GetRestorePosition([Out] out int left, [Out] out int top, [Out] out int width, [Out] out int height);\n\n        [PreserveSig]\n        int HideCursor([In] OABool hideCursor);\n\n        [PreserveSig]\n        int IsCursorHidden([Out] out OABool hideCursor);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/CoreStreaming.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Security;\nusing System.Text;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class CoreStreaming\n{\n    [ComVisible(true), ComImport, Guid(\"56a86891-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IPin\n    {\n        [PreserveSig]\n        int Connect([In] IPin pReceivePin, [In, MarshalAs(UnmanagedType.LPStruct)] AmMediaType pmt);\n\n        [PreserveSig]\n        int ReceiveConnection([In] IPin pReceivePin, [In, MarshalAs(UnmanagedType.LPStruct)] AmMediaType pmt);\n\n        [PreserveSig]\n        int Disconnect();\n\n        [PreserveSig]\n        int ConnectedTo([Out] out IPin ppPin);\n\n        /// <summary>\n        /// Release returned parameter with DsUtils.FreeAMMediaType\n        /// </summary>\n        [PreserveSig]\n        int ConnectionMediaType([Out, MarshalAs(UnmanagedType.LPStruct)] AmMediaType pmt);\n\n        /// <summary>\n        /// Release returned parameter with DsUtils.FreePinInfo\n        /// </summary>\n        [PreserveSig]\n        int QueryPinInfo([Out] out PinInfo pInfo);\n\n        [PreserveSig]\n        int QueryDirection(out PinDirection pPinDir);\n\n        [PreserveSig]\n        int QueryId([Out, MarshalAs(UnmanagedType.LPWStr)] out string id);\n\n        [PreserveSig]\n        int QueryAccept([In, MarshalAs(UnmanagedType.LPStruct)] AmMediaType pmt);\n\n        [PreserveSig]\n        int EnumMediaTypes([Out] out IEnumMediaTypes ppEnum);\n\n        [PreserveSig]\n        int QueryInternalConnections([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] IPin[] ppPins, [In, Out] ref int nPin);\n\n        [PreserveSig]\n        int EndOfStream();\n\n        [PreserveSig]\n        int BeginFlush();\n\n        [PreserveSig]\n        int EndFlush();\n\n        [PreserveSig]\n        int NewSegment([In] long tStart, [In] long tStop, [In] double dRate);\n    }\n\n    [ComImport, System.Security.SuppressUnmanagedCodeSecurity, Guid(\"89c31040-846b-11ce-97d3-00aa0055595a\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IEnumMediaTypes\n    {\n        [PreserveSig]\n        int Next([In] int cMediaTypes, [In, Out, MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(EMTMarshaler), SizeParamIndex = 0)] AmMediaType[] ppMediaTypes, [In] IntPtr pcFetched);\n\n        [PreserveSig]\n        int Skip([In] int cMediaTypes);\n\n        [PreserveSig]\n        int Reset();\n\n        [PreserveSig]\n        int Clone([Out] out IEnumMediaTypes ppEnum);\n    }\n\n    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]\n    public struct PinInfo \n    {\n        public IBaseFilter filter;\n        public PinDirection dir;\n\n        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\n        public string name;\n    }\n\n    public enum PinDirection\n    {\n        Input,\n        Output\n    }\n\n    [ComImport, System.Security.SuppressUnmanagedCodeSecurity, Guid(\"0000010c-0000-0000-C000-000000000046\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IPersist\n    {\n        [PreserveSig]\n        int GetClassID([Out] out Guid pClassID);\n    }\n\n    [ComImport, System.Security.SuppressUnmanagedCodeSecurity, Guid(\"56a86899-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IMediaFilter : IPersist\n    {\n        #region IPersist Methods\n\n        [PreserveSig]\n        new int GetClassID([Out] out Guid pClassID);\n\n        #endregion\n\n        [PreserveSig]\n        int Stop();\n\n        [PreserveSig]\n        int Pause();\n\n        [PreserveSig]\n        int Run([In] long tStart);\n\n        [PreserveSig]\n        int GetState([In] int dwMilliSecsTimeout, [Out] out ControlStreaming.FilterState filtState);\n\n        [PreserveSig]\n        int SetSyncSource([In] IReferenceClock pClock);\n\n        [PreserveSig]\n        int GetSyncSource([Out] out IReferenceClock pClock);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a86895-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IBaseFilter : IMediaFilter\n    {\n        #region IPersist Methods\n            \n        [PreserveSig]\n        new int GetClassID([Out] out Guid pClassID);\n\n        #endregion\n\n        #region IMediaFilter Methods\n\n        [PreserveSig]\n        new int Stop();\n\n        [PreserveSig]\n        new int Pause();\n\n        [PreserveSig]\n        new int Run(long tStart);\n\n        [PreserveSig]\n        new int GetState([In] int dwMilliSecsTimeout, [Out] out ControlStreaming.FilterState filtState);\n\n        [PreserveSig]\n        new int SetSyncSource([In] IReferenceClock pClock);\n\n        [PreserveSig]\n        new int GetSyncSource([Out] out IReferenceClock pClock);\n\n        #endregion\n\n        [PreserveSig]\n        int EnumPins([Out] out IEnumPins ppEnum);\n\n        [PreserveSig]\n        int FindPin([In, MarshalAs(UnmanagedType.LPWStr)] string Id, [Out] out IPin ppPin);\n\n        [PreserveSig]\n        int QueryFilterInfo([Out] FilterInfo pInfo);\n\n        [PreserveSig]\n        int JoinFilterGraph([In] IFilterGraph pGraph, [In, MarshalAs(UnmanagedType.LPWStr)] string pName);\n\n        [PreserveSig]\n        int QueryVendorInfo([Out, MarshalAs(UnmanagedType.LPWStr)] out string pVendorInfo);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a86897-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IReferenceClock\n    {\n        [PreserveSig]\n        int GetTime([Out] out long pTime);\n\n        [PreserveSig]\n        int AdviseTime([In] long baseTime, [In] long streamTime, [In] IntPtr hEvent, [Out] out int pdwAdviseCookie);\n\n        [PreserveSig]\n        int AdvisePeriodic([In] long startTime, [In] long periodTime, [In] IntPtr hSemaphore, [Out] out int pdwAdviseCookie);\n\n        [PreserveSig]\n        int Unadvise([In] int dwAdviseCookie);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a86892-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IEnumPins\n    {\n        [PreserveSig]\n        int Next([In] int cPins, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] IPin[] ppPins, [Out] out int pcFetched);\n\n        [PreserveSig]\n        int Skip([In] int cPins);\n\n        void Reset();\n            \n        void Clone([Out] out IEnumPins ppEnum);\n    }\n\n    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]\n    public class FilterInfo\n    {\n        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\n        public string achName;\n\n        [MarshalAs(UnmanagedType.IUnknown)]\n        public object pUnk;\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a8689f-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IFilterGraph\n    {\n        [PreserveSig]\n        int AddFilter([In] IBaseFilter pFilter, [In, MarshalAs(UnmanagedType.LPWStr)] string pName);\n\n        [PreserveSig]\n        int RemoveFilter([In] IBaseFilter pFilter);\n\n        [PreserveSig]\n        int EnumFilters([Out] out IEnumFilters ppEnum);\n\n        [PreserveSig]\n        int FindFilterByName([In, MarshalAs(UnmanagedType.LPWStr)] string pName, [Out] out IBaseFilter ppFilter);\n\n        [PreserveSig]\n        int ConnectDirect([In] IPin ppinOut, [In] IPin ppinIn, [In, MarshalAs(UnmanagedType.LPStruct)] AmMediaType pmt);\n\n        [PreserveSig]\n        int Reconnect([In] IPin ppin);\n\n        [PreserveSig]\n        int Disconnect([In] IPin ppin);\n\n        [PreserveSig]\n        int SetDefaultSyncSource();\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a86893-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IEnumFilters\n    {\n        [PreserveSig]\n        int Next([In] uint cFilters, out IBaseFilter x, [Out] out uint pcFetched);\n\n        [PreserveSig]\n        int Skip([In] int cFilters);\n\n        void Reset();\n            \n        void Clone([Out] out IEnumFilters ppEnum);\n    }\n\n    /// <summary>\n    /// From AM_MEDIA_TYPE - When you are done with an instance of this class,\n    /// it should be released with FreeAMMediaType() to avoid leaking\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential), ComVisible(false)]\n    public class AmMediaType\n    {\n        public Guid majorType;\n\n        public Guid subType;\n            \n        [MarshalAs(UnmanagedType.Bool)]\n            \n        public bool fixedSizeSamples;\n            \n        [MarshalAs(UnmanagedType.Bool)]\n        public bool temporalCompression;\n            \n        public int sampleSize;\n            \n        public Guid formatType;\n            \n        public IntPtr unkPtr;\n            \n        public int formatSize;\n            \n        public IntPtr formatPtr;\n    }\n\n    [ComVisible(true), ComImport, Guid(\"56a8689a-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IMediaSample\n    {\n        [PreserveSig]\n        int GetPointer([Out] out IntPtr ppBuffer);\n\n        [PreserveSig]\n        int GetSize();\n\n        [PreserveSig]\n        int GetTime([Out] out long pTimeStart, [Out] out long pTimeEnd);\n\n        [PreserveSig]\n        int SetTime([In, MarshalAs(UnmanagedType.LPStruct)] Util.DsOptInt64 pTimeStart, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsOptInt64 pTimeEnd);\n\n        [PreserveSig]\n        int IsSyncPoint();\n\n        [PreserveSig]\n        int SetSyncPoint([In, MarshalAs(UnmanagedType.Bool)] bool bIsSyncPoint);\n\n        [PreserveSig]\n        int IsPreroll();\n\n        [PreserveSig]\n        int SetPreroll([In, MarshalAs(UnmanagedType.Bool)] bool bIsPreroll);\n\n        [PreserveSig]\n        int GetActualDataLength();\n\n        [PreserveSig]\n        int SetActualDataLength([In] int len);\n\n        /// <summary>\n        /// Returned object must be released with DsUtils.FreeAMMediaType()\n        /// </summary>\n        [PreserveSig]\n        int GetMediaType([Out, MarshalAs(UnmanagedType.LPStruct)] out AmMediaType ppMediaType);\n\n        [PreserveSig]\n        int SetMediaType([In, MarshalAs(UnmanagedType.LPStruct)] AmMediaType pMediaType);\n\n        [PreserveSig]\n        int IsDiscontinuity();\n\n        [PreserveSig]\n        int SetDiscontinuity([In, MarshalAs(UnmanagedType.Bool)] bool bDiscontinuity);\n\n        [PreserveSig]\n        int GetMediaTime([Out] out long pTimeStart, [Out] out long pTimeEnd);\n\n        [PreserveSig]\n        int SetMediaTime([In, MarshalAs(UnmanagedType.LPStruct)] Util.DsOptInt64 pTimeStart, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsOptInt64 pTimeEnd);\n    }\n\n    [ComVisible(false)]\n    public class DsHlp\n    {\n        public const int OATRUE = -1;\n        public const int OAFALSE = 0;\n\n        [DllImport(\"quartz.dll\", CharSet = CharSet.Unicode, ExactSpelling = true, EntryPoint = \"AMGetErrorTextW\"), SuppressUnmanagedCodeSecurity]\n        private static extern int AMGetErrorText(int hr, StringBuilder buf, int max);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/Devices.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Runtime.InteropServices.ComTypes;\nusing System.Security;\nusing System.Text;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\n/// <summary>\n/// CLSID_SystemDeviceEnum\n/// </summary>\n[ComImport, Guid(\"62BE5D10-60EB-11d0-BD3B-00A0C911CE86\")]\npublic class CreateDevEnum\n{ }\n\n[ComVisible(false)]\npublic class DsDevice : IDisposable\n{\n    private string _name;\n\n    public string Name => _name ?? (_name = GetPropBagValue(\"FriendlyName\"));\n\n    public IMoniker Moniker { get; set; }\n\n\n    public DsDevice(IMoniker mon)\n    {\n        Moniker = mon;\n        _name = null;\n    }\n\n\n    /// <summary>\n    /// Returns a unique identifier for a device.\n    /// </summary>\n    public string DevicePath\n    {\n        get\n        {\n            string s = null;\n\n            try\n            {\n                Moniker.GetDisplayName(null, null, out s);\n            }\n            catch\n            { }\n\n            return s;\n        }\n    }\n\n    /// <summary>\n    /// Returns the ClassID for a device.\n    /// </summary>\n    public Guid ClassID\n    {\n        get\n        {\n            Moniker.GetClassID(out var g);\n\n            return g;\n        }\n    }\n\n    /// <summary>\n    /// Returns an array of DsDevices of type devcat.\n    /// </summary>\n    /// <param name=\"cat\">Any one of FilterCategory</param>\n    public static DsDevice[] GetDevicesOfCat(Guid cat)\n    {\n        //Use arrayList to build the return list since it is easily resizable.\n        DsDevice[] devret;\n        var devs = new ArrayList();\n\n        var enumDev = (ICreateDevEnum) new CreateDevEnum();\n        var hr = enumDev.CreateClassEnumerator(cat, out var enumMon, 0);\n        DsError.ThrowExceptionForHR(hr);\n\n        //CreateClassEnumerator returns null for enumMon if there are no entries.\n        if (hr != 1)\n        {\n            try\n            {\n                try\n                {\n                    var mon = new IMoniker[1];\n\n                    while (enumMon.Next(1, mon, IntPtr.Zero) == 0)\n                    {\n                        try\n                        {\n                            //The devs array now owns this object. Don't release it if we are going to be successfully returning the devret array.\n                            devs.Add(new DsDevice(mon[0]));\n                        }\n                        catch\n                        {\n                            Marshal.ReleaseComObject(mon[0]);\n                            throw;\n                        }\n                    }\n                }\n                finally\n                {\n                    Marshal.ReleaseComObject(enumMon);\n                }\n\n                // Copy the ArrayList to the DsDevice[].\n                devret = new DsDevice[devs.Count];\n                devs.CopyTo(devret);\n            }\n            catch\n            {\n                foreach (DsDevice d in devs)\n                    d.Dispose();\n\n                throw;\n            }\n        }\n        else\n        {\n            devret = new DsDevice[0];\n        }\n\n        return devret;\n    }\n\n    /// <summary>\n    /// Get a specific PropertyBag value from a moniker\n    /// </summary>\n    /// <param name=\"sPropName\">The name of the value to retrieve</param>\n    /// <returns>String or null on error</returns>\n    public string GetPropBagValue(string sPropName)\n    {\n        string ret;\n        object bagObj = null;\n\n        try\n        {\n            var bagId = typeof(IPropertyBag).GUID;\n            Moniker.BindToStorage(null, null, ref bagId, out bagObj);\n\n            var bag = (IPropertyBag)bagObj;\n\n            var hr = bag.Read(sPropName, out object val, null);\n            DsError.ThrowExceptionForHR(hr);\n\n            ret = val as string;\n        }\n        catch\n        {\n            ret = null;\n        }\n        finally\n        {\n            if (bagObj != null)\n                Marshal.ReleaseComObject(bagObj);\n        }\n\n        return ret;\n    }\n\n    public void Dispose()\n    {\n        if (Moniker != null)\n            Marshal.ReleaseComObject(Moniker);\n\n        Moniker = null;\n    }\n}\n\npublic static class DsError\n{\n    [DllImport(\"quartz.dll\", CharSet = CharSet.Unicode, ExactSpelling = true, EntryPoint = \"AMGetErrorTextW\"), SuppressUnmanagedCodeSecurity]\n    public static extern int AMGetErrorText(int hr, StringBuilder buf, int max);\n\n    /// <summary>\n    /// If hr has a \"failed\" status code (E_*), throw an exception.  Note that status\n    /// messages (S_*) are not considered failure codes.  If DirectShow error text\n    /// is available, it is used to build the exception, otherwise a generic com error\n    /// is thrown.\n    /// </summary>\n    /// <param name=\"hr\">The HRESULT to check</param>\n    public static void ThrowExceptionForHR(int hr)\n    {\n        // If a severe error has occurred\n        if (hr >= 0)\n            return;\n\n        var s = GetErrorText(hr);\n\n        //If a string is returned, build a com error from it\n        if (s != null)\n            throw new COMException(s, hr);\n\n        //No string, just use standard com error.\n        Marshal.ThrowExceptionForHR(hr);\n    }\n\n    /// <summary>\n    /// Returns a string describing a DS error.  Works for both error codes (values < 0) and Status codes (values >= 0)\n    /// </summary>\n    /// <param name=\"hr\">HRESULT for which to get description</param>\n    /// <returns>The string, or null if no error text can be found</returns>\n    public static string GetErrorText(int hr)\n    {\n        const int maxErrorTextLen = 160;\n\n        // Make a buffer to hold the string\n        var buf = new StringBuilder(maxErrorTextLen, maxErrorTextLen);\n\n        // If a string is returned, build a com error from it\n        if (AMGetErrorText(hr, buf, maxErrorTextLen) > 0)\n            return buf.ToString();\n\n        return null;\n    }\n}\n\n/// <summary>\n/// From CDEF_CLASS_* defines\n/// </summary>\n[Flags]\npublic enum CDef\n{\n    None = 0,\n    ClassDefault = 0x0001,\n    BypassClassManager = 0x0002,\n    ClassLegacy = 0x0004,\n    MeritAboveDoNotUse = 0x0008,\n    DevmonCMGRDevice = 0x0010,\n    DevmonDMO = 0x0020,\n    DevmonPNPDevice = 0x0040,\n    DevmonFilter = 0x0080,\n    DevmonSelectiveMask = 0x00f0\n}\n\n[ComVisible(true), ComImport, Guid(\"29840822-5B84-11D0-BD3B-00A0C911CE86\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\npublic interface ICreateDevEnum\n{\n    [PreserveSig]\n    int CreateClassEnumerator([In, MarshalAs(UnmanagedType.LPStruct)] Guid pType, [Out] out IEnumMoniker ppEnumMoniker, [In] CDef dwFlags);\n}\n\n[ComVisible(true), ComImport, Guid(\"55272A00-42CB-11CE-8135-00AA004BB851\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\npublic interface IPropertyBag\n{\n    [PreserveSig]\n    int Read([In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, [Out, MarshalAs(UnmanagedType.Struct)] out object pVar, [In] IErrorLog pErrorLog);\n\n    [PreserveSig]\n    int Write([In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, [In, MarshalAs(UnmanagedType.Struct)] ref object pVar);\n}\n\n[ComImport, SuppressUnmanagedCodeSecurity, Guid(\"3127CA40-446E-11CE-8135-00AA004BB851\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\npublic interface IErrorLog\n{\n    [PreserveSig]\n    int AddError([In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, [In] System.Runtime.InteropServices.ComTypes.EXCEPINFO pExcepInfo);\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/EditStreaming.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class EditStreaming\n{\n    [ComVisible(true), ComImport, Guid(\"6B652FFF-11FE-4fce-92AD-0266B5D7C78F\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface ISampleGrabber\n    {\n        [PreserveSig]\n        int SetOneShot([In, MarshalAs(UnmanagedType.Bool)] bool oneShot);\n\n        [PreserveSig]\n        int SetMediaType([In, MarshalAs(UnmanagedType.LPStruct)] CoreStreaming.AmMediaType pmt);\n\n        [PreserveSig]\n        int GetConnectedMediaType([Out, MarshalAs(UnmanagedType.LPStruct)] CoreStreaming.AmMediaType pmt);\n\n        [PreserveSig]\n        int SetBufferSamples([In, MarshalAs(UnmanagedType.Bool)] bool bufferThem);\n\n        [PreserveSig]\n        int GetCurrentBuffer(ref int pBufferSize, IntPtr pBuffer);\n\n        [PreserveSig]\n        int GetCurrentSample(out CoreStreaming.IMediaSample ppSample);\n\n        [PreserveSig]\n        int SetCallback(ISampleGrabberCB pCallback, int whichMethodToCallback);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"0579154A-2B53-4994-B0D0-E773148EFF85\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface ISampleGrabberCB\n    {\n        /// <summary>\n        /// When called, callee must release pSample\n        /// </summary>\n        [PreserveSig]\n        int SampleCB(double sampleTime, CoreStreaming.IMediaSample pSample);\n\n        [PreserveSig]\n        int BufferCB(double sampleTime, IntPtr pBuffer, int bufferLen);\n    }\n\n    /// <summary>\n    /// From AMINTERLACE_*\n    /// </summary>\n    [Flags]\n    public enum AMInterlace\n    {\n        None = 0,\n        IsInterlaced = 0x00000001,\n        OneFieldPerSample = 0x00000002,\n        Field1First = 0x00000004,\n        Unused = 0x00000008,\n        FieldPatternMask = 0x00000030,\n        FieldPatField1Only = 0x00000000,\n        FieldPatField2Only = 0x00000010,\n        FieldPatBothRegular = 0x00000020,\n        FieldPatBothIrregular = 0x00000030,\n        DisplayModeMask = 0x000000c0,\n        DisplayModeBobOnly = 0x00000000,\n        DisplayModeWeaveOnly = 0x00000040,\n        DisplayModeBobOrWeave = 0x00000080,\n    }\n\n    /// <summary>\n    /// From AMCOPYPROTECT_*\n    /// </summary>\n    public enum AMCopyProtect\n    {\n        None = 0,\n        RestrictDuplication = 0x00000001\n    }\n\n    /// <summary>\n    /// From AMCONTROL_*\n    /// </summary>\n    [Flags]\n    public enum AMControl\n    {\n        None = 0,\n        Used = 0x00000001,\n        PadTo4x3 = 0x00000002,\n        PadTo16x9 = 0x00000004,\n    }\n\n    [StructLayout(LayoutKind.Sequential), ComVisible(false)]\n    public class VideoInfoHeader\n    {\n        public Util.DsRect SrcRect;\n        public Util.DsRect TargetRect;\n        public int BitRate;\n        public int BitErrorRate;\n        public long AvgTimePerFrame;\n        public Util.BitmapInfoHeader BmiHeader;\n    }\n\n    [StructLayout(LayoutKind.Sequential), ComVisible(false)]\n    public class VideoInfoHeader2\n    {\n        public Util.DsRect SrcRect;\n        public Util.DsRect TargetRect;\n        public int BitRate;\n        public int BitErrorRate;\n        public long AvgTimePerFrame;\n        public AMInterlace InterlaceFlags;\n        public AMCopyProtect CopyProtectFlags;\n        public int PictAspectRatioX;\n        public int PictAspectRatioY;\n        public AMControl ControlFlags;\n        public int Reserved2;\n        public Util.BitmapInfoHeader BmiHeader;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/ExtendStreaming.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class ExtendStreaming\n{\n    [ComVisible(true), ComImport, Guid(\"56a868a9-0ad4-11ce-b03a-0020af0ba770\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IGraphBuilder : CoreStreaming.IFilterGraph\n    {\n        #region \"IFilterGraph Methods\"\n\n        [PreserveSig]\n        new int AddFilter([In] CoreStreaming.IBaseFilter pFilter, [In, MarshalAs(UnmanagedType.LPWStr)] string pName);\n\n        [PreserveSig]\n        new int RemoveFilter([In] CoreStreaming.IBaseFilter pFilter);\n\n        [PreserveSig]\n        new int EnumFilters([Out] out CoreStreaming.IEnumFilters ppEnum);\n\n        [PreserveSig]\n        new int FindFilterByName([In, MarshalAs(UnmanagedType.LPWStr)] string pName, [Out] out CoreStreaming.IBaseFilter ppFilter);\n\n        [PreserveSig]\n        new int ConnectDirect([In] CoreStreaming.IPin ppinOut, [In] CoreStreaming.IPin ppinIn, [In, MarshalAs(UnmanagedType.LPStruct)] CoreStreaming.AmMediaType pmt);\n\n        [PreserveSig]\n        new int Reconnect([In] CoreStreaming.IPin ppin);\n\n        [PreserveSig]\n        new int Disconnect([In] CoreStreaming.IPin ppin);\n\n        [PreserveSig]\n        new int SetDefaultSyncSource();\n\n        #endregion\n\n        [PreserveSig]\n        int Connect([In] CoreStreaming.IPin ppinOut, [In] CoreStreaming.IPin ppinIn);\n\n        [PreserveSig]\n        int Render([In] CoreStreaming.IPin ppinOut);\n\n        [PreserveSig]\n        int RenderFile([In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrFile, [In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrPlayList);\n\n        [PreserveSig]\n        int AddSourceFilter([In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrFileName, [In, MarshalAs(UnmanagedType.LPWStr)] string lpcwstrFilterName, [Out] out CoreStreaming.IBaseFilter ppFilter);\n\n        [PreserveSig]\n        int SetLogFile(IntPtr hFile);\n\n        [PreserveSig]\n        int Abort();\n\n        [PreserveSig]\n        int ShouldOperationContinue();\n    }\n\n    [ComVisible(true), ComImport, Guid(\"93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface ICaptureGraphBuilder2\n    {\n        [PreserveSig]\n        int SetFiltergraph([In] IGraphBuilder pfg);\n\n        [PreserveSig]\n        int GetFiltergraph([Out] out IGraphBuilder ppfg);\n\n        [PreserveSig]\n        int SetOutputFileName([In, MarshalAs(UnmanagedType.LPStruct)] Guid pType, [In, MarshalAs(UnmanagedType.LPWStr)] string lpstrFile, [Out] out CoreStreaming.IBaseFilter ppbf, [Out] out IFileSinkFilter ppSink);\n\n        [PreserveSig]\n        int FindInterface([In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid pCategory, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid pType, [In] CoreStreaming.IBaseFilter pbf, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, [Out, MarshalAs(UnmanagedType.IUnknown)] out object ppint);\n\n        [PreserveSig]\n        int RenderStream([In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid PinCategory, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid MediaType, [In, MarshalAs(UnmanagedType.IUnknown)] object pSource, [In] CoreStreaming.IBaseFilter pfCompressor, [In] CoreStreaming.IBaseFilter pfRenderer);\n\n        [PreserveSig]\n        int ControlStream([In, MarshalAs(UnmanagedType.LPStruct)] Guid pCategory, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid pType, [In, MarshalAs(UnmanagedType.Interface)] CoreStreaming.IBaseFilter pFilter, [In] Util.DsLong pstart, [In] Util.DsLong pstop, [In] short wStartCookie, [In] short wStopCookie);\n\n        [PreserveSig]\n        int AllocCapFile([In, MarshalAs(UnmanagedType.LPWStr)] string lpstrFile, [In] long dwlSize);\n\n        [PreserveSig]\n        int CopyCaptureFile([In, MarshalAs(UnmanagedType.LPWStr)] string lpwstrOld, [In, MarshalAs(UnmanagedType.LPWStr)] string lpwstrNew, [In, MarshalAs(UnmanagedType.Bool)] int fAllowEscAbort, [In] IAMCopyCaptureFileProgress pFilter);\n\n        [PreserveSig]\n        int FindPin([In, MarshalAs(UnmanagedType.IUnknown)] object pSource, [In] CoreStreaming.PinDirection pindir, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid pCategory, [In, MarshalAs(UnmanagedType.LPStruct)] Util.DsGuid mediaType, [In, MarshalAs(UnmanagedType.Bool)] bool fUnconnected, [In] int num, [Out, MarshalAs(UnmanagedType.Interface)] out CoreStreaming.IPin ppPin);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"a2104830-7c70-11cf-8bce-00aa00a3f1a6\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IFileSinkFilter\n    {\n        [PreserveSig]\n        int SetFileName([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [In, MarshalAs(UnmanagedType.LPStruct)] CoreStreaming.AmMediaType pmt);\n\n        [PreserveSig]\n        int GetCurFile([Out, MarshalAs(UnmanagedType.LPWStr)] out string pszFileName, [Out, MarshalAs(UnmanagedType.LPStruct)] CoreStreaming.AmMediaType pmt);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"670d1d20-a068-11d0-b3f0-00aa003761c5\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IAMCopyCaptureFileProgress\n    {\n        [PreserveSig]\n        int Progress(int iProgress);\n    }\n\n    [ComVisible(true), ComImport, Guid(\"C6E13340-30AC-11d0-A18C-00A0C9118956\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\n    public interface IAMStreamConfig\n    {\n        [PreserveSig]\n        int SetFormat([In, MarshalAs(UnmanagedType.LPStruct)] CoreStreaming.AmMediaType pmt);\n\n        [PreserveSig]\n        int GetFormat([Out] out IntPtr pmt);\n\n        [PreserveSig]\n        int GetNumberOfCapabilities(out int piCount, out int piSize);\n\n        [PreserveSig]\n        int GetStreamCaps([In] int iIndex, [Out] out CoreStreaming.AmMediaType pmt, [In] IntPtr pSCC);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/Marshaller.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\ninternal abstract class DsMarshaler : ICustomMarshaler\n{\n    #region Data Members\n\n    //The cookie isn't currently being used.\n    protected string ManagedCookie;\n\n    //The managed object passed in to MarshalManagedToNative, and modified in MarshalNativeToManaged\n    protected object ManagedObj;\n\n    #endregion\n\n    //The constructor. This is called from GetInstance (below).\n    protected DsMarshaler(string cookie)\n    {\n        //If we get a cookie, save it.\n        ManagedCookie = cookie;\n    }\n\n    //Called just before invoking the COM method.  The returned IntPtr is what goes on the stack\n    //for the COM call. The input arg is the parameter that was passed to the method.\n    public virtual IntPtr MarshalManagedToNative(object managedObj)\n    {\n        //Save off the passed-in value. Safe since we just checked the type.\n        ManagedObj = managedObj;\n\n        //Create an appropriately sized buffer, blank it, and send it to the marshaler to make the COM call with.\n        var iSize = GetNativeDataSize() + 3;\n        var p = Marshal.AllocCoTaskMem(iSize);\n\n        for (var x = 0; x < iSize / 4; x++)\n            Marshal.WriteInt32(p, x * 4, 0);\n\n        return p;\n    }\n\n    // Called just after invoking the COM method.  The IntPtr is the same one that just got returned\n    // from MarshalManagedToNative.  The return value is unused.\n    public virtual object MarshalNativeToManaged(IntPtr pNativeData)\n    {\n        return ManagedObj;\n    }\n\n    // Release the (now unused) buffer\n    public virtual void CleanUpNativeData(IntPtr pNativeData)\n    {\n        if (pNativeData != IntPtr.Zero)\n            Marshal.FreeCoTaskMem(pNativeData);\n    }\n\n    // Release the (now unused) managed object\n    public virtual void CleanUpManagedData(object managedObj)\n    {\n        ManagedObj = null;\n    }\n\n    // This routine is (apparently) never called by the marshaler.  However it can be useful.\n    public abstract int GetNativeDataSize();\n\n    // GetInstance is called by the marshaler in preparation to doing custom marshaling.  The (optional)\n    // cookie is the value specified in MarshalCookie=\"asdf\", or \"\" is none is specified.\n\n    // It is commented out in this abstract class, but MUST be implemented in derived classes\n    //public static ICustomMarshaler GetInstance(string cookie)\n}\n\ninternal class EMTMarshaler : DsMarshaler\n{\n    public EMTMarshaler(string cookie) : base(cookie)\n    { }\n\n    // Called just after invoking the COM method.  The IntPtr is the same one that just got returned\n    // from MarshalManagedToNative.  The return value is unused.\n    public override object MarshalNativeToManaged(IntPtr pNativeData)\n    {\n        var emt = ManagedObj as CoreStreaming.AmMediaType[];\n\n        for (var x = 0; x < emt.Length; x++)\n        {\n            //Copy in the value, and advance the pointer.\n            var p = Marshal.ReadIntPtr(pNativeData, x * IntPtr.Size);\n\n            if (p != IntPtr.Zero)\n                emt[x] = (CoreStreaming.AmMediaType)Marshal.PtrToStructure(p, typeof(CoreStreaming.AmMediaType));\n            else\n                emt[x] = null;\n        }\n\n        return null;\n    }\n\n    //The number of bytes to marshal out.\n    public override int GetNativeDataSize()\n    {\n        //Get the array size.\n        var i = ((Array)ManagedObj).Length;\n\n        //Multiply that times the size of a pointer.\n        return i * IntPtr.Size;\n    }\n\n    //This method is called by interop to create the custom marshaler.  The (optional)\n    //cookie is the value specified in MarshalCookie=\"asdf\", or \"\" is none is specified.\n    public static ICustomMarshaler GetInstance(string cookie)\n    {\n        return new EMTMarshaler(cookie);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/Util.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class Util\n{\n    [StructLayout(LayoutKind.Sequential), ComVisible(false)]\n    public class DsOptInt64\n    {\n        public DsOptInt64(long value)\n        {\n            Value = value;\n        }\n\n        public long Value;\n    }\n\n    [StructLayout(LayoutKind.Sequential), ComVisible(false)]\n    public struct DsRect\n    {\n        public int Left;\n        public int Top;\n        public int Right;\n        public int Bottom;\n    }\n\n    [StructLayout(LayoutKind.Sequential, Pack = 2), ComVisible(false)]\n    public struct BitmapInfoHeader\n    {\n        public int Size;\n        public int Width;\n        public int Height;\n        public short Planes;\n        public short BitCount;\n        public int Compression;\n        public int ImageSize;\n        public int XPelsPerMeter;\n        public int YPelsPerMeter;\n        public int ClrUsed;\n        public int ClrImportant;\n    }\n\n    /// <summary>\n    /// Free the nested structures and release any COM objects within an AMMediaType struct.\n    /// </summary>\n    public static void FreeAMMediaType(CoreStreaming.AmMediaType mediaType)\n    {\n        if (mediaType.formatSize != 0)\n            Marshal.FreeCoTaskMem(mediaType.formatPtr);\n        if (mediaType.unkPtr != IntPtr.Zero)\n            Marshal.Release(mediaType.unkPtr);\n\n        mediaType.formatSize = 0;\n        mediaType.formatPtr = IntPtr.Zero;\n        mediaType.unkPtr = IntPtr.Zero;\n    }\n\n    /// <summary>\n    /// DsLong is a wrapper class around a <see cref=\"System.Int64\"/> value type.\n    /// </summary>\n    /// <remarks>\n    /// This class is necessary to enable null parameters passing.\n    /// </remarks>\n    [StructLayout(LayoutKind.Sequential)]\n    public class DsLong\n    {\n        private readonly long _value;\n\n        /// <summary>\n        /// Constructor\n        /// Initialize a new instance of DsLong with the Value parameter\n        /// </summary>\n        /// <param name=\"value\">Value to assign to this new instance</param>\n        public DsLong(long value)\n        {\n            _value = value;\n        }\n\n        /// <summary>\n        /// Get a string representation of this DsLong Instance.\n        /// </summary>\n        /// <returns>A string representing this instance</returns>\n        public override string ToString()\n        {\n            return _value.ToString();\n        }\n\n        public override int GetHashCode()\n        {\n            return _value.GetHashCode();\n        }\n\n        /// <summary>\n        /// Define implicit cast between DsLong and System.Int64 for languages supporting this feature.\n        /// VB.Net doesn't support implicit cast. <see cref=\"DsLong.ToInt64\"/> for similar functionality.\n        /// <code>\n        ///   // Define a new DsLong instance\n        ///   DsLong dsL = new DsLong(9876543210);\n        ///   // Do implicit cast between DsLong and Int64\n        ///   long l = dsL;\n        ///\n        ///   Console.WriteLine(l.ToString());\n        /// </code>\n        /// </summary>\n        /// <param name=\"value\">DsLong to be cast</param>\n        /// <returns>A casted System.Int64</returns>\n        public static implicit operator long(DsLong value)\n        {\n            return value._value;\n        }\n\n        /// <summary>\n        /// Define implicit cast between System.Int64 and DsLong for languages supporting this feature.\n        /// VB.Net doesn't support implicit cast.\n        /// <code>\n        ///   // Define a new Int64 instance\n        ///   long l = 9876543210;\n        ///   // Do implicit cast between Int64 and DsLong\n        ///   DsLong dsl = l;\n        ///\n        ///   Console.WriteLine(dsl.ToString());\n        /// </code>\n        /// </summary>\n        /// <param name=\"value\">System.Int64 to be cast</param>\n        /// <returns>A casted DsLong</returns>\n        public static implicit operator DsLong(long value)\n        {\n            return new DsLong(value);\n        }\n\n        /// <summary>\n        /// Get the System.Int64 equivalent to this DsLong instance.\n        /// </summary>\n        /// <returns>A System.Int64</returns>\n        public long ToInt64()\n        {\n            return _value;\n        }\n\n        /// <summary>\n        /// Get a new DsLong instance for a given System.Int64\n        /// </summary>\n        /// <param name=\"value\">The System.Int64 to wrap into a DsLong</param>\n        /// <returns>A new instance of DsLong</returns>\n        public static DsLong FromInt64(long value)\n        {\n            return new DsLong(value);\n        }\n    }\n\n    /// <summary>\n    /// DsGuid is a wrapper class around a System.Guid value type.\n    /// </summary>\n    /// <remarks>\n    /// This class is necessary to enable null parameters passing.\n    /// </remarks>\n    [StructLayout(LayoutKind.Explicit)]\n    public class DsGuid\n    {\n        [FieldOffset(0)]\n        private Guid guid;\n\n        public static readonly DsGuid Empty = Guid.Empty;\n\n        /// <summary>\n        /// Empty constructor.\n        /// Initialize it with System.Guid.Empty\n        /// </summary>\n        public DsGuid()\n        {\n            guid = Guid.Empty;\n        }\n\n        /// <summary>\n        /// Constructor.\n        /// Initialize this instance with a given System.Guid string representation.\n        /// </summary>\n        /// <param name=\"g\">A valid System.Guid as string</param>\n        public DsGuid(string g)\n        {\n            guid = new Guid(g);\n        }\n\n        /// <summary>\n        /// Constructor.\n        /// Initialize this instance with a given System.Guid.\n        /// </summary>\n        /// <param name=\"g\">A System.Guid value type</param>\n        public DsGuid(Guid g)\n        {\n            guid = g;\n        }\n\n        /// <summary>\n        /// Get a string representation of this DsGuid Instance.\n        /// </summary>\n        /// <returns>A string representing this instance</returns>\n        public override string ToString()\n        {\n            return guid.ToString();\n        }\n\n        /// <summary>\n        /// Get a string representation of this DsGuid Instance with a specific format.\n        /// </summary>\n        /// <param name=\"format\"><see cref=\"System.Guid.ToString\"/> for a description of the format parameter.</param>\n        /// <returns>A string representing this instance according to the format parameter</returns>\n        public string ToString(string format)\n        {\n            return guid.ToString(format);\n        }\n\n        public override int GetHashCode()\n        {\n            return guid.GetHashCode();\n        }\n\n        /// <summary>\n        /// Define implicit cast between DsGuid and System.Guid for languages supporting this feature.\n        /// VB.Net doesn't support implicit cast. <see cref=\"DsGuid.ToGuid\"/> for similar functionality.\n        /// <code>\n        ///   // Define a new DsGuid instance\n        ///   DsGuid dsG = new DsGuid(\"{33D57EBF-7C9D-435e-A15E-D300B52FBD91}\");\n        ///   // Do implicit cast between DsGuid and Guid\n        ///   Guid g = dsG;\n        ///\n        ///   Console.WriteLine(g.ToString());\n        /// </code>\n        /// </summary>\n        /// <param name=\"g\">DsGuid to be cast</param>\n        /// <returns>A casted System.Guid</returns>\n        public static implicit operator Guid(DsGuid g)\n        {\n            return g.guid;\n        }\n\n        /// <summary>\n        /// Define implicit cast between System.Guid and DsGuid for languages supporting this feature.\n        /// VB.Net doesn't support implicit cast. <see cref=\"DsGuid.FromGuid\"/> for similar functionality.\n        /// <code>\n        ///   // Define a new Guid instance\n        ///   Guid g = new Guid(\"{B9364217-366E-45f8-AA2D-B0ED9E7D932D}\");\n        ///   // Do implicit cast between Guid and DsGuid\n        ///   DsGuid dsG = g;\n        ///\n        ///   Console.WriteLine(dsG.ToString());\n        /// </code>\n        /// </summary>\n        /// <param name=\"g\">System.Guid to be cast</param>\n        /// <returns>A casted DsGuid</returns>\n        public static implicit operator DsGuid(Guid g)\n        {\n            return new DsGuid(g);\n        }\n\n        /// <summary>\n        /// Get the System.Guid equivalent to this DsGuid instance.\n        /// </summary>\n        /// <returns>A System.Guid</returns>\n        public Guid ToGuid()\n        {\n            return guid;\n        }\n\n        /// <summary>\n        /// Get a new DsGuid instance for a given System.Guid\n        /// </summary>\n        /// <param name=\"g\">The System.Guid to wrap into a DsGuid</param>\n        /// <returns>A new instance of DsGuid</returns>\n        public static DsGuid FromGuid(Guid g)\n        {\n            return new DsGuid(g);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/Uuid.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class Uuid\n{\n    /// <summary>\n    /// uuids.h\n    /// CLSID_*\n    /// </summary>\n    [ComVisible(false)]\n    public class FilterCategory\n    {\n        /// <summary> CLSID_AudioInputDeviceCategory, audio capture category </summary>\n        public static readonly Guid AudioInputDevice = new Guid(0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86);\n\n        /// <summary> CLSID_VideoInputDeviceCategory, video capture category </summary>\n        public static readonly Guid VideoInputDevice = new Guid(0x860BB310, 0x5D01, 0x11d0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);\n\n        /// <summary> CLSID_VideoCompressorCategory, video compressor category </summary>\n        public static readonly Guid VideoCompressorCategory = new Guid(0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x0, 0xa0, 0xc9, 0x11, 0xce, 0x86);\n\n        /// <summary> CLSID_AudioCompressorCategory, audio compressor category </summary>\n        public static readonly Guid AudioCompressorCategory = new Guid(0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x0, 0xa0, 0xc9, 0x11, 0xce, 0x86);\n\n        ///<summary> CLSID_LegacyAmFilterCategory, legacy filters </summary>\n        public static readonly Guid LegacyAmFilterCategory = new Guid(0x083863F1, 0x70DE, 0x11d0, 0xBD, 0x40, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);\n    }\n\n    /// <summary>\n    /// uuids.h\n    /// CLSID_*\n    /// </summary>\n    [ComVisible(false)]\n    public class Clsid\n    {\n        /// <summary> CLSID_SystemDeviceEnum for ICreateDevEnum </summary>\n        public static readonly Guid SystemDeviceEnum = new Guid(0x62BE5D10, 0x60EB, 0x11d0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86);\n\n        /// <summary> CLSID_FilterGraph, filter Graph </summary>\n        public static readonly Guid FilterGraph = new Guid(0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> CLSID_CaptureGraphBuilder2, new Capture graph building </summary>\n        public static readonly Guid CaptureGraphBuilder2 = new Guid(0xBF87B6E1, 0x8C27, 0x11d0, 0xB3, 0xF0, 0x0, 0xAA, 0x00, 0x37, 0x61, 0xC5);\n\n        /// <summary> CLSID_SampleGrabber, Sample Grabber filter </summary>\n        public static readonly Guid SampleGrabber = new Guid(0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37);\n\n        /// <summary> CLSID_DvdGraphBuilder, DVD graph builder </summary>\n        public static readonly Guid DvdGraphBuilder = new Guid(0xFCC152B7, 0xF372, 0x11d0, 0x8E, 0x00, 0x00, 0xC0, 0x4F, 0xD7, 0xC0, 0x8B);\n\n        /// <summary> CLSID_StreamBufferSink, stream buffer sink </summary>\n        public static readonly Guid StreamBufferSink = new Guid(\"2db47ae5-cf39-43c2-b4d6-0cd8d90946f4\");\n\n        /// <summary> CLSID_StreamBufferSource, stream buffer sink </summary>\n        public static readonly Guid StreamBufferSource = new Guid(\"c9f5fe02-f851-4eb5-99ee-ad602af1e619\");\n\n        /// <summary> CLSID_VideoMixingRenderer, video mixing renderer 7 </summary>\n        public static readonly Guid VideoMixingRenderer = new Guid(0xB87BEB7B, 0x8D29, 0x423f, 0xAE, 0x4D, 0x65, 0x82, 0xC1, 0x01, 0x75, 0xAC);\n\n        /// <summary> CLSID_VideoMixingRenderer9, video mixing renderer 9 </summary>\n        public static readonly Guid VideoMixingRenderer9 = new Guid(0x51b4abf3, 0x748f, 0x4e3b, 0xa2, 0x76, 0xc8, 0x28, 0x33, 0x0e, 0x92, 0x6a);\n\n        /// <summary> CLSID_VideoRendererDefault, default vmr renderer </summary>\n        public static readonly Guid VideoRendererDefault = new Guid(0x6BC1CFFA, 0x8FC1, 0x4261, 0xAC, 0x22, 0xCF, 0xB4, 0xCC, 0x38, 0xDB, 0x50);\n\n        /// <summary> CLSID_AviSplitter, split an AVI stream into separate video and audio streams </summary>\n        public static readonly Guid AviSplitter = new Guid(0x1b544c20, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x0, 0xaa, 0x00, 0x44, 0xb5, 0x1e);\n\n        /// <summary> CLSID_SmartTee, create a preview stream when device only provides a capture stream. </summary>\n        public static readonly Guid SmartTee = new Guid(0xcc58e280, 0x8aa1, 0x11d1, 0xb3, 0xf1, 0x0, 0xaa, 0x0, 0x37, 0x61, 0xc5);\n    }\n\n    /// <summary>\n    /// MEDIATYPE_*\n    /// </summary>\n    [ComVisible(false)]\n    public class MediaType\n    {\n        /// <summary> MEDIATYPE_Video 'vids' </summary>\n        public static readonly Guid Video = new Guid(0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIATYPE_Interleaved 'iavs' </summary>\n        public static readonly Guid Interleaved = new Guid(0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIATYPE_Audio 'auds' </summary>\n        public static readonly Guid Audio = new Guid(0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIATYPE_Text 'txts' </summary>\n        public static readonly Guid Text = new Guid(0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIATYPE_Stream </summary>\n        public static readonly Guid Stream = new Guid(0xe436eb83, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n    }\n\n    /// <summary>\n    /// MEDIASUBTYPE_*\n    /// </summary>\n    [ComVisible(false)]\n    public class MediaSubType\n    {\n        /// <summary> MEDIASUBTYPE_YUYV 'YUYV' </summary>\n        public static readonly Guid YUYV = new Guid(0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIASUBTYPE_IYUV 'IYUV' </summary>\n        public static readonly Guid IYUV = new Guid(0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIASUBTYPE_DVSD 'DVSD' </summary>\n        public static readonly Guid DVSD = new Guid(0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);\n\n        /// <summary> MEDIASUBTYPE_RGB1 'RGB1' </summary>\n        public static readonly Guid RGB1 = new Guid(0xe436eb78, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_RGB4 'RGB4' </summary>\n        public static readonly Guid RGB4 = new Guid(0xe436eb79, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_RGB8 'RGB8' </summary>\n        public static readonly Guid RGB8 = new Guid(0xe436eb7a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_RGB565 'RGB565' </summary>\n        public static readonly Guid RGB565 = new Guid(0xe436eb7b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_RGB555 'RGB555' </summary>\n        public static readonly Guid RGB555 = new Guid(0xe436eb7c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_RGB24 'RGB24' </summary>\n        public static readonly Guid RGB24 = new Guid(0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_RGB32 'RGB32' </summary>\n        public static readonly Guid RGB32 = new Guid(0xe436eb7e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n\n        /// <summary> MEDIASUBTYPE_Avi </summary>\n        public static readonly Guid Avi = new Guid(0xe436eb88, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n        /// <summary> MEDIASUBTYPE_Asf </summary>\n        public static readonly Guid Asf = new Guid(0x3db80f90, 0x9412, 0x11d1, 0xad, 0xed, 0x0, 0x0, 0xf8, 0x75, 0x4b, 0x99);\n    }\n\n    /// <summary>\n    /// FORMAT_*\n    /// </summary>\n    [ComVisible(false)]\n    public class FormatType\n    {\n        /// <summary> FORMAT_None </summary>\n        public static readonly Guid None = new Guid(0x0F6417D6, 0xc318, 0x11d0, 0xa4, 0x3f, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96);\n\n        /// <summary> FORMAT_VideoInfo </summary>\n        public static readonly Guid VideoInfo = new Guid(0x05589f80, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a);\n\n        /// <summary> FORMAT_VideoInfo2 </summary>\n        public static readonly Guid VideoInfo2 = new Guid(0xf72a76A0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);\n\n        /// <summary> FORMAT_WaveFormatEx </summary>\n        public static readonly Guid WaveEx = new Guid(0x05589f81, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a);\n\n        /// <summary> FORMAT_MPEGVideo </summary>\n        public static readonly Guid MpegVideo = new Guid(0x05589f82, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a);\n\n        /// <summary> FORMAT_MPEGStreams </summary>\n        public static readonly Guid MpegStreams = new Guid(0x05589f83, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a);\n\n        /// <summary> FORMAT_DvInfo </summary>\n        public static readonly Guid DvInfo = new Guid(0x05589f84, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a);\n    }\n\n    /// <summary>\n    /// PIN_CATEGORY_*\n    /// </summary>\n    [ComVisible(false)]\n    public class PinCategory\n    {\n        /// <summary> PIN_CATEGORY_CAPTURE </summary>\n        public static readonly Guid Capture = new Guid(0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);\n\n        /// <summary> PIN_CATEGORY_PREVIEW </summary>\n        public static readonly Guid Preview = new Guid(0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectShow/WorkAround.cs",
    "content": "#region License\n\n/*\n    Adapted work from:\n\n    DirectShowLib - Provide access to DirectShow interfaces via .NET\n    Copyright (C) 2007\n    http://sourceforge.net/projects/directshownet/\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n#endregion\n\nusing System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Webcam.DirectShow;\n\npublic class Workaround\n{\n    /*\n    works:\n        CoCreateInstance( CLSID_CaptureGraphBuilder2, ..., IID_ICaptureGraphBuilder2, ...);\n    doesn't (E_NOTIMPL):\n        CoCreateInstance( CLSID_CaptureGraphBuilder2, ..., IID_IUnknown, ...);\n    thus .NET 'Activator.CreateInstance' fails\n    */\n\n    [MethodImpl(MethodImplOptions.InternalCall)]\n    internal static extern object InternalWrapIUnknownWithComObject(IntPtr i);\n\n    public static object CreateDsInstance(ref Guid clsid, ref Guid riid)\n    {\n        var hr = CoCreateInstance(ref clsid, IntPtr.Zero, CLSCTX.Inproc, ref riid, out var ptrIf);\n\n        if (hr != 0 || ptrIf == IntPtr.Zero)\n            Marshal.ThrowExceptionForHR(hr);\n\n        var iu = new Guid(\"00000000-0000-0000-C000-000000000046\");\n        hr = Marshal.QueryInterface(ptrIf, ref iu, out _);\n\n        var ooo = InternalWrapIUnknownWithComObject(ptrIf); //System.Runtime.Remoting.Services.EnterpriseServicesHelper.WrapIUnknownWithComObject(ptrIf);\n        var ct = Marshal.Release(ptrIf);\n        return ooo;\n    }\n\n    [DllImport(\"ole32.dll\")]\n    private static extern int CoCreateInstance(ref Guid clsid, IntPtr pUnkOuter, CLSCTX dwClsContext, ref Guid iid, out IntPtr ptrIf);\n}\n\n[Flags]\ninternal enum CLSCTX\n{\n    Inproc = 0x03,\n    Server = 0x15,\n    All = 0x17,\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectX/CaptureWebcam.cs",
    "content": "#region License\n\n// ------------------------------------------------------------------\n// Adapted work from DirectX.Capture\n// https://www.codeproject.com/articles/3566/directx-capture-class-library\n// http://creativecommons.org/licenses/publicdomain/\n// -----------------------------------------------------------------\n\n#endregion\n\nusing System;\nusing System.Drawing;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Interop;\nusing ScreenToGif.Webcam.DirectShow;\n\nnamespace ScreenToGif.Webcam.DirectX;\n\n/// <summary>\n/// Gets the video output of a webcam or other video device.\n/// </summary>\npublic class CaptureWebcam : EditStreaming.ISampleGrabberCB, IDisposable\n{\n    #region Properties\n\n    /// <summary>\n    ///  The video capture device filter. Read-only. To use a different\n    ///  device, dispose of the current Capture instance and create a new\n    ///  instance with the desired device.\n    /// </summary>\n    public Filter VideoDevice { get; private set; }\n\n    /// <summary>\n    ///  The control that will host the preview window.\n    /// </summary>\n    public ContentControl PreviewWindow { get; set; }\n\n    /// <summary>\n    /// The Height of the video feed.\n    /// </summary>\n    public int Height\n    {\n        get\n        {\n            if (_videoInfoHeader != null)\n                return _videoInfoHeader.BmiHeader.Height;\n\n            return -1;\n        }\n    }\n\n    /// <summary>\n    /// The Width of the video feed.\n    /// </summary>\n    public int Width\n    {\n        get\n        {\n            if (_videoInfoHeader != null)\n                return _videoInfoHeader.BmiHeader.Width;\n\n            return -1;\n        }\n    }\n\n    /// <summary>\n    /// The Scale of the video feed.\n    /// </summary>\n    public double Scale { get; set; }\n\n    #endregion\n\n    #region Enum\n\n    /// <summary>\n    /// Possible states of the internal filter graph.\n    /// </summary>\n    protected enum GraphState\n    {\n        /// <summary>\n        /// No filter graph at all.\n        /// </summary>\n        Null,\n        /// <summary>\n        /// Filter graph created with device filters added.\n        /// </summary>\n        Created,\n\n        /// <summary>\n        /// Filter complete built, ready to run (possibly previewing).\n        /// </summary>\n        Rendered,\n\n        /// <summary>\n        /// Recording is live.\n        /// </summary>\n        Live\n    }\n\n    #endregion\n\n    #region Variables\n\n    /// <summary>\n    /// When graphState==Rendered, have we rendered the preview stream?\n    /// </summary>\n    protected bool IsPreviewRendered = false;\n\n    /// <summary>\n    /// Do we need the preview stream rendered (VideoDevice and PreviewWindow != null)\n    /// </summary>\n    protected bool WantPreviewRendered = false;\n\n    ///// <summary>\n    ///// List of physical video sources\n    ///// </summary>\n    //protected SourceCollection videoSources = null;\n\n    /// <summary>\n    /// State of the internal filter graph.\n    /// </summary>\n    protected GraphState ActualGraphState = GraphState.Null;\n\n    /// <summary>\n    /// DShow Filter: Graph builder.\n    /// </summary>\n    protected ExtendStreaming.IGraphBuilder GraphBuilder;\n\n    /// <summary>\n    /// DShow Filter: building graphs for capturing video.\n    /// </summary>\n    protected ExtendStreaming.ICaptureGraphBuilder2 CaptureGraphBuilder = null;\n\n    /// <summary>\n    /// DShow Filter: selected video device.\n    /// </summary>\n    protected CoreStreaming.IBaseFilter VideoDeviceFilter = null;\n\n    /// <summary>\n    /// DShow Filter: configure frame rate, size.\n    /// </summary>\n    protected ExtendStreaming.IAMStreamConfig VideoStreamConfig = null;\n\n    /// <summary>\n    /// DShow Filter: Start/Stop the filter graph -> copy of graphBuilder.\n    /// </summary>\n    protected ControlStreaming.IMediaControl MediaControl;\n\n    /// <summary>\n    /// DShow Filter: Control preview window -> copy of graphBuilder.\n    /// </summary>\n    protected ControlStreaming.IVideoWindow VideoWindow;\n\n    /// <summary>\n    /// DShow Filter: selected video compressor.\n    /// </summary>\n    protected CoreStreaming.IBaseFilter VideoCompressorFilter = null;\n\n    /// <summary>\n    /// Property Backer: Video compression filter.\n    /// </summary>\n    protected Filter VideoCompressor = null;\n\n    /// <summary>\n    /// Grabber filter interface.\n    /// </summary>\n    private CoreStreaming.IBaseFilter _baseGrabFlt;\n\n    private byte[] _savedArray;\n\n    protected EditStreaming.ISampleGrabber SampGrabber = null;\n    private EditStreaming.VideoInfoHeader _videoInfoHeader;\n\n    #endregion\n\n    /// <summary>\n    /// Default constructor of the Capture class.\n    /// </summary>\n    /// <param name=\"videoDevice\">The video device to be the source.</param>\n    /// <exception cref=\"ArgumentException\">If no video device is provided.</exception>\n    public CaptureWebcam(Filter videoDevice)\n    {\n        VideoDevice = videoDevice ?? throw new ArgumentException(\"The videoDevice parameter must be set to a valid Filter.\\n\");\n\n        CreateGraph();\n    }\n\n    #region Public Methods\n\n    /// <summary>\n    /// Starts the video preview from the video source.\n    /// </summary>\n    public void StartPreview()\n    {\n        DerenderGraph();\n\n        WantPreviewRendered = (PreviewWindow != null) && (VideoDevice != null);\n\n        RenderGraph();\n        StartPreviewIfNeeded();\n    }\n\n    /// <summary>\n    /// Stops the video previewing.\n    /// </summary>\n    public void StopPreview()\n    {\n        DerenderGraph();\n\n        WantPreviewRendered = false;\n\n        RenderGraph();\n        StartPreviewIfNeeded();\n    }\n\n    /// <summary>\n    /// Closes and cleans the video previewing.\n    /// </summary>\n    public void Dispose()\n    {\n        WantPreviewRendered = false;\n\n        try { DestroyGraph(); }\n        catch { }\n    }\n\n    #endregion\n\n    #region Protected Methods\n\n    /// <summary>\n    ///  Create a new filter graph and add filters (devices, compressors, misc),\n    ///  but leave the filters unconnected. Call RenderGraph()\n    ///  to connect the filters.\n    /// </summary>\n    protected void CreateGraph()\n    {\n        //Skip if already created\n        if ((int)ActualGraphState < (int)GraphState.Created)\n        {\n            //Make a new filter graph.\n            GraphBuilder = (ExtendStreaming.IGraphBuilder)Activator.CreateInstance(Type.GetTypeFromCLSID(Uuid.Clsid.FilterGraph, true));\n\n            //Get the Capture Graph Builder.\n            var clsid = Uuid.Clsid.CaptureGraphBuilder2;\n            var riid = typeof(ExtendStreaming.ICaptureGraphBuilder2).GUID;\n            CaptureGraphBuilder = (ExtendStreaming.ICaptureGraphBuilder2)Activator.CreateInstance(Type.GetTypeFromCLSID(clsid, true));\n\n            //Link the CaptureGraphBuilder to the filter graph\n            var hr = CaptureGraphBuilder.SetFiltergraph(GraphBuilder);\n\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            var comType = Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber);\n\n            if (comType == null)\n                throw new Exception(\"DirectShow SampleGrabber not installed/registered!\");\n\n            var comObj = Activator.CreateInstance(comType);\n            SampGrabber = (EditStreaming.ISampleGrabber)comObj; comObj = null;\n\n            _baseGrabFlt = (CoreStreaming.IBaseFilter) SampGrabber;\n\n            var media = new CoreStreaming.AmMediaType();\n\n            //Get the video device and add it to the filter graph\n            if (VideoDevice != null)\n            {\n                VideoDeviceFilter = (CoreStreaming.IBaseFilter)Marshal.BindToMoniker(VideoDevice.MonikerString);\n\n                hr = GraphBuilder.AddFilter(VideoDeviceFilter, \"Video Capture Device\");\n\n                if (hr < 0)\n                    Marshal.ThrowExceptionForHR(hr);\n\n                media.majorType = Uuid.MediaType.Video;\n                media.subType = Uuid.MediaSubType.RGB32;//RGB24;\n                media.formatType = Uuid.FormatType.VideoInfo;\n                media.temporalCompression = true; //New\n\n                hr = SampGrabber.SetMediaType(media);\n\n                if (hr < 0)\n                    Marshal.ThrowExceptionForHR(hr);\n\n                hr = GraphBuilder.AddFilter(_baseGrabFlt, \"Grabber\");\n\n                if (hr < 0)\n                    Marshal.ThrowExceptionForHR(hr);\n            }\n\n            // Retrieve the stream control interface for the video device\n            // FindInterface will also add any required filters\n            // (WDM devices in particular may need additional\n            // upstream filters to function).\n\n            // Try looking for an interleaved media type\n            object o;\n            var cat = Uuid.PinCategory.Capture;\n            var med = Uuid.MediaType.Interleaved;\n            var iid = typeof(ExtendStreaming.IAMStreamConfig).GUID;\n            hr = CaptureGraphBuilder.FindInterface(cat, med, VideoDeviceFilter, iid, out o);\n\n            if (hr != 0)\n            {\n                // If not found, try looking for a video media type\n                med = Uuid.MediaType.Video;\n                hr = CaptureGraphBuilder.FindInterface(cat, med, VideoDeviceFilter, iid, out o);\n\n                if (hr != 0)\n                    o = null;\n            }\n\n            VideoStreamConfig = o as ExtendStreaming.IAMStreamConfig;\n\n            // Retrieve the media control interface (for starting/stopping graph)\n            MediaControl = (ControlStreaming.IMediaControl)GraphBuilder;\n\n            // Reload any video crossbars\n            //if (videoSources != null) videoSources.Dispose(); videoSources = null;\n\n            _videoInfoHeader = (EditStreaming.VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(EditStreaming.VideoInfoHeader));\n            Marshal.FreeCoTaskMem(media.formatPtr); media.formatPtr = IntPtr.Zero;\n\n            hr = SampGrabber.SetBufferSamples(false);\n            if (hr == 0)\n                hr = SampGrabber.SetOneShot(false);\n            if (hr == 0)\n                hr = SampGrabber.SetCallback(null, 0);\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n        }\n\n        //Update the state now that we are done.\n        ActualGraphState = GraphState.Created;\n    }\n\n    /// <summary>\n    ///  Disconnect and remove all filters except the device\n    ///  and compressor filters. This is the opposite of\n    ///  renderGraph(). Some properties such as FrameRate\n    ///  can only be set when the device output pins are not\n    ///  connected.\n    /// </summary>\n    protected void DerenderGraph()\n    {\n        // Stop the graph if it is running (ignore errors)\n        MediaControl?.Stop();\n\n        // Free the preview window (ignore errors)\n        if (VideoWindow != null)\n        {\n            VideoWindow.put_Visible(CoreStreaming.DsHlp.OAFALSE);\n            VideoWindow.put_Owner(IntPtr.Zero);\n            VideoWindow = null;\n        }\n\n        // Remove the Resize event handler\n        if (PreviewWindow != null)\n            PreviewWindow.SizeChanged -= OnPreviewWindowResize;\n\n        if ((int)ActualGraphState >= (int)GraphState.Rendered)\n        {\n            // Update the state\n            ActualGraphState = GraphState.Created;\n            IsPreviewRendered = false;\n\n            // Disconnect all filters downstream of the video and audio devices. If we have a compressor\n            // then disconnect it, but don't remove it\n            if (VideoDeviceFilter != null)\n                RemoveDownstream(VideoDeviceFilter, VideoCompressor == null);\n        }\n    }\n\n    /// <summary>\n    ///  Removes all filters downstream from a filter from the graph.\n    ///  This is called only by DerenderGraph() to remove everything\n    ///  from the graph except the devices and compressors. The parameter\n    ///  \"removeFirstFilter\" is used to keep a compressor (that should\n    ///  be immediately downstream of the device) if one is begin used.\n    /// </summary>\n    protected void RemoveDownstream(CoreStreaming.IBaseFilter filter, bool removeFirstFilter)\n    {\n        // Get a pin enumerator off the filter\n        var hr = filter.EnumPins(out var pinEnum);\n\n        if (pinEnum == null)\n            return;\n\n        pinEnum.Reset();\n\n        if (hr != 0)\n            return;\n\n        //Loop through each pin.\n        var pins = new CoreStreaming.IPin[1];\n\n        do\n        {\n            // Get the next pin\n            hr = pinEnum.Next(1, pins, out _);\n\n            if (hr != 0 || pins[0] == null)\n                continue;\n\n            //Get the pin it is connected to\n            pins[0].ConnectedTo(out var pinTo);\n\n            if (pinTo != null)\n            {\n                // Is this an input pin?\n                hr = pinTo.QueryPinInfo(out var info);\n\n                if (hr == 0 && (info.dir == CoreStreaming.PinDirection.Input))\n                {\n                    // Recurse down this branch\n                    RemoveDownstream(info.filter, true);\n\n                    // Disconnect\n                    GraphBuilder.Disconnect(pinTo);\n                    GraphBuilder.Disconnect(pins[0]);\n\n                    // Remove this filter\n                    // but don't remove the video or audio compressors\n                    if (info.filter != VideoCompressorFilter)\n                        GraphBuilder.RemoveFilter(info.filter);\n                }\n\n                Marshal.ReleaseComObject(info.filter);\n                Marshal.ReleaseComObject(pinTo);\n            }\n\n            Marshal.ReleaseComObject(pins[0]);\n        } while (hr == 0);\n\n        Marshal.ReleaseComObject(pinEnum);\n    }\n\n    /// <summary>\n    ///  Connects the filters of a previously created graph\n    ///  (created by CreateGraph()). Once rendered the graph\n    ///  is ready to be used. This method may also destroy\n    ///  streams if we have streams we no longer want.\n    /// </summary>\n    protected void RenderGraph()\n    {\n        var didSomething = false;\n\n        // Stop the graph\n        MediaControl?.Stop();\n\n        // Create the graph if needed (group should already be created)\n        CreateGraph();\n\n        // Derender the graph if we have a capture or preview stream\n        // that we no longer want. We can't derender the capture and\n        // preview streams separately.\n        // Notice the second case will leave a capture stream intact\n        // even if we no longer want it. This allows the user that is\n        // not using the preview to Stop() and Start() without\n        // rerendering the graph.\n        if (!WantPreviewRendered && IsPreviewRendered)\n            DerenderGraph();\n\n        // Render preview stream (only if necessary)\n        if (WantPreviewRendered && !IsPreviewRendered)\n        {\n            //Render preview (video -> renderer)\n            var cat = Uuid.PinCategory.Preview;\n            var med = Uuid.MediaType.Video;\n\n            var hr = CaptureGraphBuilder.RenderStream(cat, med, VideoDeviceFilter, _baseGrabFlt, null);\n\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            //Get the IVideoWindow interface\n            VideoWindow = (ControlStreaming.IVideoWindow) GraphBuilder;\n\n            // Set the video window to be a child of the main window\n            var source = PresentationSource.FromVisual(PreviewWindow) as HwndSource;\n            hr = VideoWindow.put_Owner(source.Handle);\n\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            //Set video window style\n            hr = VideoWindow.put_WindowStyle(ControlStreaming.WindowStyle.Child | ControlStreaming.WindowStyle.ClipChildren | ControlStreaming.WindowStyle.ClipSiblings);\n\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            //Position video window in client rect of owner window\n            PreviewWindow.SizeChanged += OnPreviewWindowResize;\n            OnPreviewWindowResize(this, null);\n\n            //Make the video window visible, now that it is properly positioned.\n            hr = VideoWindow.put_Visible(ControlStreaming.OABool.True);\n\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            IsPreviewRendered = true;\n            didSomething = true;\n\n            var media = new CoreStreaming.AmMediaType();\n            hr = SampGrabber.GetConnectedMediaType(media);\n\n            if (hr < 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            if (media.formatType != Uuid.FormatType.VideoInfo || media.formatPtr == IntPtr.Zero)\n                throw new NotSupportedException(\"Unknown Grabber Media Format\");\n\n            _videoInfoHeader = (EditStreaming.VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(EditStreaming.VideoInfoHeader));\n\n            Marshal.FreeCoTaskMem(media.formatPtr);\n            media.formatPtr = IntPtr.Zero;\n        }\n\n        if (didSomething)\n            ActualGraphState = GraphState.Rendered;\n    }\n\n    /// <summary>\n    ///  Setup and start the preview window if the user has\n    ///  requested it (by setting PreviewWindow).\n    /// </summary>\n    protected void StartPreviewIfNeeded()\n    {\n        // Render preview\n        if (WantPreviewRendered && IsPreviewRendered)\n        {\n            // Run the graph (ignore errors)\n            // We can run the entire graph because the capture\n            // stream should not be rendered (and that is enforced\n            // in the if statement above)\n            MediaControl.Run();\n        }\n    }\n\n    /// <summary> Resize the preview when the PreviewWindow is resized </summary>\n    protected void OnPreviewWindowResize(object sender, EventArgs e)\n    {\n        // Position video window in client rect of owner window.\n        VideoWindow?.SetWindowPosition(0, 0,\n            (int)(PreviewWindow.ActualWidth * Scale),\n            (int)(PreviewWindow.ActualHeight * Scale)); //-70\n    }\n\n    /// <summary>\n    ///  Completely tear down a filter graph and\n    ///  release all associated resources.\n    /// </summary>\n    protected void DestroyGraph()\n    {\n        // Derender the graph\n        // This will stop the graph and release preview window.\n        // It also destroys half of the graph which is unnecessary but harmless here (ignore errors).\n        try { DerenderGraph(); }\n        catch { }\n\n        // Update the state after derender because it\n        // depends on correct status. But we also want to\n        // update the state as early as possible in case of error.\n        ActualGraphState = GraphState.Null;\n        IsPreviewRendered = false;\n\n        // Remove filters from the graph\n        // This should be unnecessary but the Nvidia WDM video driver cannot be used by this application\n        // again unless we remove it. Ideally, we should simply enumerate all the filters in the graph and remove them (ignore errors).\n        if (GraphBuilder != null)\n        {\n            if (VideoCompressorFilter != null)\n                GraphBuilder.RemoveFilter(VideoCompressorFilter);\n            if (VideoDeviceFilter != null)\n                GraphBuilder.RemoveFilter(VideoDeviceFilter);\n\n            // Cleanup\n            Marshal.ReleaseComObject(GraphBuilder); GraphBuilder = null;\n        }\n\n        if (CaptureGraphBuilder != null)\n            Marshal.ReleaseComObject(CaptureGraphBuilder); CaptureGraphBuilder = null;\n        if (VideoDeviceFilter != null)\n            Marshal.ReleaseComObject(VideoDeviceFilter); VideoDeviceFilter = null;\n        if (VideoCompressorFilter != null)\n            Marshal.ReleaseComObject(VideoCompressorFilter); VideoCompressorFilter = null;\n\n        // These are copies of graphBuilder\n        MediaControl = null;\n        VideoWindow = null;\n\n        // For unmanaged objects we haven't released explicitly\n        GC.Collect();\n    }\n\n    #endregion\n\n    #region SampleGrabber\n\n    /// <summary>\n    /// Capture frame event delegate.\n    /// </summary>\n    /// <param name=\"bitmap\">Returns a Bitmap image from the webcam.</param>\n    public delegate void CaptureFrame(Bitmap bitmap);\n\n    /// <summary>\n    /// Capture frame event.\n    /// </summary>\n    public event CaptureFrame CaptureFrameEvent;\n\n    public int SampleCB(double sampleTime, CoreStreaming.IMediaSample pSample)\n    {\n        return 0;\n    }\n\n    public int BufferCB(double sampleTime, IntPtr pBuffer, int bufferLen)\n    {\n        if (CaptureFrameEvent == null)\n            return 1;\n\n        var width = _videoInfoHeader.BmiHeader.Width;\n        var height = _videoInfoHeader.BmiHeader.Height;\n\n        var stride = width * 3;\n\n        Marshal.Copy(pBuffer, _savedArray, 0, bufferLen);\n\n        var handle = GCHandle.Alloc(_savedArray, GCHandleType.Pinned);\n        var scan0 = (int)handle.AddrOfPinnedObject();\n        //scan0 += (height - 1) * stride;\n        scan0 += height * stride;\n\n        var b = new Bitmap(width, height, -stride, System.Drawing.Imaging.PixelFormat.Format24bppRgb, (IntPtr)scan0);\n        handle.Free();\n\n        CaptureFrameEvent?.Invoke(b);\n\n        return 0;\n    }\n\n    /// <summary>\n    /// Prepares the capture of frames.\n    /// </summary>\n    public void PrepareCapture()\n    {\n        var size = _videoInfoHeader.BmiHeader.ImageSize;\n\n        if (_savedArray == null)\n        {\n            if (size < 1000 || size > 16000000)\n                return;\n\n            _savedArray = new byte[size + 64000];\n        }\n\n        SampGrabber.SetBufferSamples(false);\n    }\n\n    /// <summary>\n    /// Gets the current frame from the buffer.\n    /// </summary>\n    /// <returns>The Bitmap of the frame.</returns>\n    public Bitmap GetFrame()\n    {\n        //TODO: Verify any possible leaks.\n\n        //Asks for the buffer size.\n        var bufferSize = 0;\n        SampGrabber.GetCurrentBuffer(ref bufferSize, IntPtr.Zero);\n\n        //Allocs the byte array.\n        var handleObj = GCHandle.Alloc(_savedArray, GCHandleType.Pinned);\n\n        //Gets the address of the pinned object.\n        var address = handleObj.AddrOfPinnedObject();\n\n        //Puts the buffer inside the byte array.\n        SampGrabber.GetCurrentBuffer(ref bufferSize, address);\n\n        //Image size.\n        var width = _videoInfoHeader.BmiHeader.Width;\n        var height = _videoInfoHeader.BmiHeader.Height;\n\n        var stride = width * 3;\n        //address += (height - 1) * stride;\n        address += height * stride;\n\n        var bitmap = new Bitmap(width, height, -stride, System.Drawing.Imaging.PixelFormat.Format24bppRgb, address);\n        handleObj.Free();\n\n        return bitmap;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectX/Filter.cs",
    "content": "#region License\n\n// ------------------------------------------------------------------\n// Adapted work from DirectX.Capture\n// https://www.codeproject.com/articles/3566/directx-capture-class-library\n// http://creativecommons.org/licenses/publicdomain/\n// -----------------------------------------------------------------\n\n#endregion\n\nusing System;\nusing System.Runtime.InteropServices;\nusing System.Runtime.InteropServices.ComTypes;\nusing ScreenToGif.Webcam.DirectShow;\n\nnamespace ScreenToGif.Webcam.DirectX;\n\n/// <summary>\n///  Represents a DirectShow filter (e.g. video capture device, compression codec).\n/// </summary>\n/// <remarks>\n///  To save a chosen filer for later recall save the MonikerString property on the filter: \n///  <code><div style=\"background-color:whitesmoke;\"> string savedMonikerString = myFilter.MonikerString; </div></code>\n///  \n///  To recall the filter create a new Filter class and pass the string to the constructor: \n///  <code><div style=\"background-color:whitesmoke;\"> Filter mySelectedFilter = new Filter(savedMonikerString); </div></code>\n/// </remarks>\npublic class Filter : IComparable\n{\n    /// <summary>\n    /// Human-readable name of the filter.\n    /// </summary>\n    public string Name;\n\n    /// <summary>\n    /// Unique string referencing this filter. This string can be used to recreate this filter.\n    /// </summary>\n    public string MonikerString;\n\n    /// <summary>\n    /// Create a new filter from its moniker string.\n    /// </summary>\n    public Filter(string monikerString)\n    {\n        Name = GetName(monikerString);\n        MonikerString = monikerString;\n    }\n\n    /// <summary>\n    /// Create a new filter from its moniker.\n    /// </summary>\n    internal Filter(IMoniker moniker)\n    {\n        Name = GetName(moniker);\n        MonikerString = GetMonikerString(moniker);\n    }\n\n    /// <summary>\n    /// Retrieve the a moniker's display name (i.e. it's unique string).\n    /// </summary>\n    protected string GetMonikerString(IMoniker moniker)\n    {\n        moniker.GetDisplayName(null, null, out var s);\n        return s;\n    }\n\n    /// <summary>\n    /// Retrieve the human-readable name of the filter\n    /// </summary>\n    protected string GetName(IMoniker moniker)\n    {\n        object bagObj = null;\n\n        try\n        {\n            var bagId = typeof(IPropertyBag).GUID;\n            moniker.BindToStorage(null, null, ref bagId, out bagObj);\n                \n            var bag = (IPropertyBag)bagObj;\n            var hr = bag.Read(\"FriendlyName\", out var val, null);\n\n            if (hr != 0)\n                Marshal.ThrowExceptionForHR(hr);\n\n            var ret = val as string;\n\n            if (string.IsNullOrEmpty(ret))\n                throw new NotImplementedException(\"Device FriendlyName\");\n\n            return ret;\n        }\n        catch (Exception)\n        {\n            return \"\";\n        }\n        finally\n        {\n            if (bagObj != null)\n                Marshal.ReleaseComObject(bagObj); bagObj = null;\n        }\n    }\n\n    /// <summary>\n    /// Get a moniker's human-readable name based on a moniker string.\n    /// </summary>\n    protected string GetName(string monikerString)\n    {\n        IMoniker parser = null;\n        IMoniker moniker = null;\n\n        try\n        {\n            parser = GetAnyMoniker();\n            parser.ParseDisplayName(null, null, monikerString, out _, out moniker);\n            return GetName(parser);\n        }\n        finally\n        {\n            if (parser != null)\n                Marshal.ReleaseComObject(parser);\n\n            if (moniker != null)\n                Marshal.ReleaseComObject(moniker);\n        }\n    }\n\n    /// <summary>\n    ///  This method gets a UCOMIMoniker object.\n    /// \n    ///  HACK: The only way to create a UCOMIMoniker from a moniker \n    ///  string is to use UCOMIMoniker.ParseDisplayName(). So I \n    ///  need ANY UCOMIMoniker object so that I can call \n    ///  ParseDisplayName(). Does anyone have a better solution?\n    /// \n    ///  This assumes there is at least one video compressor filter\n    ///  installed on the system.\n    /// </summary>\n    protected IMoniker GetAnyMoniker()\n    {\n        var category = Uuid.FilterCategory.VideoCompressorCategory;\n        object comObj = null;\n        IEnumMoniker enumMon = null;\n        var mon = new IMoniker[1];\n\n        try\n        {\n            //Get the system device enumerator.\n            var srvType = Type.GetTypeFromCLSID(Uuid.Clsid.SystemDeviceEnum);\n\n            if (srvType == null)\n                throw new NotImplementedException(\"System Device Enumerator\");\n\n            comObj = Activator.CreateInstance(srvType);\n            var enumDev = (ICreateDevEnum)comObj;\n\n            //Create an enumerator to find filters in category\n            var hr = enumDev.CreateClassEnumerator(category, out enumMon, 0);\n\n            if (hr != 0)\n                throw new NotSupportedException(\"No devices of the category\");\n\n            //Get first filter.\n            var f = IntPtr.Zero;\n            hr = enumMon.Next(1, mon, f);\n\n            if (hr != 0)\n                mon[0] = null;\n\n            return mon[0];\n        }\n        finally\n        {\n            if (enumMon != null)\n                Marshal.ReleaseComObject(enumMon);\n                \n            if (comObj != null)\n                Marshal.ReleaseComObject(comObj);\n        }\n    }\n\n    /// <summary>\n    ///  Compares the current instance with another object of the same type.\n    /// </summary>\n    public int CompareTo(object obj)\n    {\n        if (obj == null)\n            return 1;\n        var f = (Filter)obj;\n\n        return string.Compare(Name, f.Name, StringComparison.Ordinal);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectX/FilterCollection.cs",
    "content": "#region License\n\n// ------------------------------------------------------------------\n// Adapted work from DirectX.Capture\n// https://www.codeproject.com/articles/3566/directx-capture-class-library\n// http://creativecommons.org/licenses/publicdomain/\n// -----------------------------------------------------------------\n\n#endregion\n\nusing System;\nusing System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Runtime.InteropServices.ComTypes;\nusing ScreenToGif.Webcam.DirectShow;\n\nnamespace ScreenToGif.Webcam.DirectX;\n\n/// <summary>\n///\t A collection of Filter objects (DirectShow filters).\n///\t This is used by the <see cref=\"Capture\"/> class to provide\n///\t lists of capture devices and compression filters. This class cannot be created directly.\n/// </summary>\npublic class FilterCollection : CollectionBase\n{\n    /// <summary> \n    /// Populate the collection with a list of filters from a particular category. \n    /// </summary>\n    internal FilterCollection(Guid category)\n    {\n        GetFilters(category);\n    }\n\n    /// <summary> \n    /// Populate the InnerList with a list of filters from a particular category \n    /// </summary>\n    protected void GetFilters(Guid category)\n    {\n        object comObj = null;\n        IEnumMoniker enumMon = null;\n        var mon = new IMoniker[1];\n\n        try\n        {\n            //Get the system device enumerator\n            var srvType = Type.GetTypeFromCLSID(Uuid.Clsid.SystemDeviceEnum);\n                \n            if (srvType == null)\n                throw new NotImplementedException(\"System Device Enumerator\");\n\n            comObj = Activator.CreateInstance(srvType);\n            var enumDev = (ICreateDevEnum)comObj;\n\n            //Create an enumerator to find filters in category\n            var hr = enumDev.CreateClassEnumerator(category, out enumMon, 0);\n\n            if (hr != 0)\n                return; //throw new NotSupportedException(\"No devices of the category\");\n                \n            //Loop through the enumerator.\n            var f = IntPtr.Zero;\n\n            do\n            {\n                //Next filter.\n                hr = enumMon.Next(1, mon, f);\n\n                if (hr != 0 || mon[0] == null)\n                    break;\n\n                //Add the filter.\n                var filter = new Filter(mon[0]);\n                InnerList.Add(filter);\n\n                //Release resources.\n                Marshal.ReleaseComObject(mon[0]);\n                mon[0] = null;\n            } while (true);\n\n            //Sort.\n            InnerList.Sort();\n        }\n        finally\n        {\n            if (mon[0] != null)\n                Marshal.ReleaseComObject(mon[0]);\n                \n            if (enumMon != null)\n                Marshal.ReleaseComObject(enumMon);\n\n            if (comObj != null)\n                Marshal.ReleaseComObject(comObj);\n        }\n    }\n\n    /// <summary> \n    /// Get the filter at the specified index. \n    /// </summary>\n    public Filter this[int index] => (Filter) (InnerList.Count > 0 ? InnerList[index] : null);\n}"
  },
  {
    "path": "ScreenToGif/Webcam/DirectX/Filters.cs",
    "content": "#region License\n\n// ------------------------------------------------------------------\n// Adapted work from DirectX.Capture\n// https://www.codeproject.com/articles/3566/directx-capture-class-library\n// http://creativecommons.org/licenses/publicdomain/\n// -----------------------------------------------------------------\n\n#endregion\n\nusing ScreenToGif.Webcam.DirectShow;\n\nnamespace ScreenToGif.Webcam.DirectX;\n\n/// <summary>\n/// Provides collections of devices and compression codecs installed on the system. \n/// </summary>\n/// <example>\n/// Devices and compression codecs are implemented in DirectShow as filters, see the <see cref=\"Filter\"/> class for more information.\n/// To list the available video devices:\n/// <code>\n/// <div style=\"background-color:whitesmoke;\">\n///   Filters filters = new Filters();\n///   foreach ( Filter f in filters.VideoInputDevices )\n///   {\n///\t\t Debug.WriteLine( f.Name );\n///   }\n/// </div>\n/// </code>\n/// <seealso cref=\"Filter\"/>\n/// </example>\npublic class Filters\n{\n    /// <summary> \n    /// Collection of available video capture devices. \n    /// </summary>\n    public FilterCollection VideoInputDevices = new FilterCollection(Uuid.FilterCategory.VideoInputDevice);\n\n    ///// <summary> \n    ///// Collection of available audio capture devices. \n    ///// </summary>\n    //public FilterCollection AudioInputDevices = new FilterCollection(Uuid.FilterCategory.AudioInputDevice);\n\n    /// <summary> \n    /// Collection of available video compressors. \n    /// </summary>\n    public FilterCollection VideoCompressors = new FilterCollection(Uuid.FilterCategory.VideoCompressorCategory);\n\n    ///// <summary> \n    ///// Collection of available audio compressors. \n    ///// </summary>\n    //public FilterCollection AudioCompressors = new FilterCollection(Uuid.FilterCategory.AudioCompressorCategory); \n}"
  },
  {
    "path": "ScreenToGif/Windows/Board.xaml",
    "content": "<n:LightWindow x:Class=\"ScreenToGif.Windows.Board\"\n               xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n               xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n               xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n               xmlns:u2=\"clr-namespace:ScreenToGif.Util;assembly=ScreenToGif.Util\"\n               xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n               xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n               xmlns:v=\"clr-namespace:ScreenToGif.ViewModel;assembly=ScreenToGif.ViewModel\"\n               x:Name=\"BoardLightWindow\" Title=\"{DynamicResource S.Board.Title}\" ResizeMode=\"NoResize\" Topmost=\"True\" WindowStartupLocation=\"CenterScreen\" \n               Width=\"{Binding BoardWidth, Source={x:Static t:UserSettings.All}, Mode=TwoWay}\" Height=\"{Binding BoardHeight, Source={x:Static t:UserSettings.All},  Mode=TwoWay}\"\n               IsThin=\"{Binding RecorderThinMode, Source={x:Static t:UserSettings.All}}\" Icon=\"../Resources/Logo.ico\" \n               AllowsTransparency=\"True\" WindowStyle=\"None\" SnapsToDevicePixels=\"True\" UseLayoutRounding=\"True\" \n               SizeChanged=\"LightWindow_SizeChanged\" Loaded=\"Board_Loaded\" KeyDown=\"Board_KeyDown\" \n               KeyUp=\"Board_KeyUp\" Deactivated=\"Board_Deactivated\" Closing=\"LightWindow_Closing\">\n\n    <n:LightWindow.Resources>\n        <Storyboard x:Key=\"ShowDiscardStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\" >\n                <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"(Button.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideDiscardStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\" >\n                <DiscreteBooleanKeyFrame Value=\"False\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"(Button.Opacity)\" \n                             From=\"{Binding ElementName=DiscardButton,Path=Opacity}\" To=\"0\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <c:KeysToString x:Key=\"KeysToStringConverter\"/>\n        <c:InvertedBoolToVisibility x:Key=\"InvertedBoolToVisibility\"/>\n        <c:IntToString x:Key=\"IntToStringConverter\"/>\n    </n:LightWindow.Resources>\n\n    <n:LightWindow.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Options}\" CanExecute=\"Options_CanExecute\" Executed=\"Options_Executed\"/>\n    </n:LightWindow.CommandBindings>\n\n    <n:LightWindow.DataContext>\n        <v:BoardRecorderViewModel/>\n    </n:LightWindow.DataContext>\n\n    <Grid Name=\"MainGrid\" Background=\"{DynamicResource Panel.Background}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <!--Top-->\n        <Grid Grid.Row=\"0\" MinHeight=\"30\" MouseLeftButtonDown=\"Grid_MouseLeftButtonDown\" Background=\"{DynamicResource Panel.Background}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Grid Grid.Column=\"1\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" Icon=\"{StaticResource Vector.Pen}\" IsChecked=\"{Binding IsInkMode, Mode=TwoWay}\"\n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0,5\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       ToolTip=\"{DynamicResource S.FreeDrawing.Pen}\" ToolTipService.Placement=\"Top\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"1\" Icon=\"{StaticResource Vector.Eraser}\" IsChecked=\"{Binding IsEraserMode, Mode=TwoWay}\"\n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0,5\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       ToolTip=\"{DynamicResource S.FreeDrawing.Eraser}\" ToolTipService.Placement=\"Top\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"2\" Icon=\"{StaticResource Vector.Select}\" IsChecked=\"{Binding IsSelectionMode, Mode=TwoWay}\"\n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0,5\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       ToolTip=\"{DynamicResource S.FreeDrawing.Select}\" ToolTipService.Placement=\"Top\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"3\" Icon=\"{StaticResource Vector.StrokeEraser}\" IsChecked=\"{Binding IsStrokeEraserMode, Mode=TwoWay}\"\n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0,5\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       ToolTip=\"{DynamicResource S.FreeDrawing.StrokeEraser}\" ToolTipService.Placement=\"Top\"/>\n            </Grid>\n\n            <Grid Grid.Column=\"2\" Visibility=\"{Binding BrushSettingsVisibility, Mode=OneWay}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <Separator Grid.Column=\"0\" Width=\"1\" Margin=\"0,1,10,1\"/>\n\n                <n:ColorBox Grid.Column=\"1\" Width=\"40\" MinWidth=\"40\" Margin=\"5,2\" SelectedColor=\"{Binding BrushColor, Mode=TwoWay}\"/>\n\n                <n:IntegerUpDown Grid.Column=\"2\" Minimum=\"1\" Maximum=\"100\" Margin=\"2,2\" MinWidth=\"50\" \n                                 Value=\"{Binding BrushWidth, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Recorder.Width}\"\n                                 ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <n:IntegerUpDown Grid.Column=\"3\" Minimum=\"1\" Maximum=\"100\" Margin=\"2,2\" MinWidth=\"50\" \n                                 Value=\"{Binding BrushHeight, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Recorder.Height}\"\n                                 ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"4\" Icon=\"{StaticResource Vector.Ellipse}\" \n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       IsChecked=\"{Binding StylusTipEllipse, Mode=TwoWay}\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"5\" Icon=\"{StaticResource Vector.Rectangle}\" \n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       IsChecked=\"{Binding StylusTipRectangle, Mode=TwoWay}\"/>\n\n                <Grid Grid.Column=\"6\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition/>\n                        <RowDefinition/>\n                    </Grid.RowDefinitions>\n\n                    <n:ExtendedCheckBox Grid.Row=\"0\" Text=\"{DynamicResource S.FreeDrawing.FitToCurve}\" Cursor=\"Hand\" Padding=\"0\" Margin=\"3,0,0,0\" VerticalAlignment=\"Center\"\n                                        IsChecked=\"{Binding FitToCurve, Mode=TwoWay}\" FontSize=\"11\" IsSmall=\"True\"/>\n\n                    <n:ExtendedCheckBox Grid.Row=\"1\" Text=\"{DynamicResource S.FreeDrawing.Highlighter}\" Cursor=\"Hand\" Padding=\"0\" Margin=\"3,0,0,0\" VerticalAlignment=\"Center\"\n                                        IsChecked=\"{Binding IsHighlighter, Mode=TwoWay}\" FontSize=\"11\" IsSmall=\"True\"/>\n                </Grid>\n            </Grid>\n\n            <Grid Grid.Column=\"3\" Visibility=\"{Binding EraserBrushSettingsVisibility, Mode=OneWay}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <Separator Grid.Column=\"0\" Width=\"1\" Margin=\"0,1,10,1\"/>\n\n                <n:IntegerUpDown Grid.Column=\"2\"  Minimum=\"1\" Maximum=\"100\" Margin=\"2,2\" MinWidth=\"50\" \n                                 Value=\"{Binding EraserBrushWidth, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Recorder.Width}\"\n                                 ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <n:IntegerUpDown Grid.Column=\"3\" Minimum=\"1\" Maximum=\"100\" Margin=\"2,2\" MinWidth=\"50\" \n                                 Value=\"{Binding EraserBrushHeight, Mode=TwoWay}\" ToolTip=\"{DynamicResource S.Recorder.Height}\"\n                                 ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"4\" Icon=\"{StaticResource Vector.Ellipse}\" \n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       IsChecked=\"{Binding EraserStylusTipEllipse, Mode=TwoWay}\"/>\n\n                <n:ExtendedRadioButton Grid.Column=\"5\" Icon=\"{StaticResource Vector.Rectangle}\" \n                                       Cursor=\"Hand\" ContentWidth=\"20\" Padding=\"0\" Style=\"{StaticResource Style.ImageRadioButton.NoText}\"\n                                       IsChecked=\"{Binding EraserStylusTipRectangle, Mode=TwoWay}\"/>\n            </Grid>\n        </Grid>\n\n        <!--Background=\"{StaticResource Checker.DrawingBrush}\"-->\n        <!--Background=\"{StaticResource Background.Lines}\"-->\n        <Border Grid.Row=\"1\" BorderThickness=\"1\" BorderBrush=\"{DynamicResource Element.Border.Light}\">\n            <Border x:Name=\"MainBorder\">\n                <n:InkCanvasExtended x:Name=\"MainInkCanvas\" EditingMode=\"{Binding EditingMode, Mode=TwoWay}\" DefaultDrawingAttributes=\"{Binding DrawingAttributes, Mode=OneWay}\"\n                                     EraserShapeDependency=\"{Binding EraserShape, Mode=OneWay}\" Cursor=\"{Binding Cursor, Mode=OneWay}\" ForceCursor=\"{Binding ForceCursor, Mode=OneWay}\"\n                                     PreviewMouseDown=\"MainInkCanvas_OnPreviewMouseDown\" PreviewMouseUp=\"MainInkCanvas_OnPreviewMouseUp\"/>\n            </Border>\n        </Border>\n\n        <Grid Grid.Row=\"2\" x:Name=\"LowerGrid\" Height=\"31\" Background=\"{DynamicResource Panel.Background}\" KeyboardNavigation.TabNavigation=\"Cycle\" MouseLeftButtonDown=\"Grid_MouseLeftButtonDown\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Grid Grid.Column=\"0\" Visibility=\"{Binding RecorderThinMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource Bool2Visibility}}\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\"  x:Name=\"CloseButton\" Icon=\"{StaticResource Vector.Close}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                  ContentHeight=\"10\" ContentWidth=\"10\" Padding=\"4,1\" TabIndex=\"1\" Click=\"CloseButton_Click\"/>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CaptionText\" Text=\"{Binding Title, ElementName=BoardLightWindow}\" FontFamily=\"{DynamicResource FontFamilyNormal}\" FontSize=\"12\"\n                           FontWeight=\"Regular\" Margin=\"5,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"FrameCountTextBlock\" Text=\"{Binding FrameCount, ElementName=BoardLightWindow, Converter={StaticResource IntToStringConverter}}\" \n                           FontFamily=\"{DynamicResource FontFamilyNormal}\" FontSize=\"12\" FontWeight=\"Regular\" Margin=\"5,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n            </Grid>\n\n            <StackPanel Grid.Column=\"1\" x:Name=\"ControlStackPanel\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\" ScrollViewer.VerticalScrollBarVisibility=\"Disabled\" >\n                <n:ExtendedButton x:Name=\"OptionsButton\" Icon=\"{StaticResource Vector.Options}\" Style=\"{StaticResource Style.Button.NoText}\" \n                                  ContentWidth=\"20\" ContentHeight=\"20\" Command=\"{StaticResource Command.Options}\" Padding=\"3\" TabIndex=\"0\">\n                    <n:ExtendedButton.ToolTip>\n                        <ToolTip HorizontalOffset=\"-5\" Placement=\"Bottom\" Content=\"{DynamicResource S.StartUp.Options}\"/>\n                    </n:ExtendedButton.ToolTip>\n                </n:ExtendedButton>\n\n                <Separator Width=\"1\" Margin=\"5,3\"/>\n\n                <Viewbox Stretch=\"UniformToFill\" ClipToBounds=\"True\" Focusable=\"False\" Visibility=\"{Binding RecorderThinMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource InvertedBoolToVisibility}}\">\n                    <Grid MaxHeight=\"30\" MaxWidth=\"30\" Opacity=\"{DynamicResource Element.Opacity}\">\n                        <n:CircularProgressBar StrokeThickness=\"1\" Percentage=\"100\" SegmentColor=\"Gray\" Radius=\"12\"/>\n                        <n:CircularProgressBar StrokeThickness=\"10\" Percentage=\"100\" SegmentColor=\"#FFF0F1F1\" Radius=\"5\" />\n\n                        <n:CircularProgressBar StrokeThickness=\"1\" Value=\"{Binding ElementName=FpsNumericUpDown, Path=Value, Mode=OneWay}\" \n                                               IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"12\"/>\n                        <n:CircularProgressBar StrokeThickness=\"10\" Value=\"{Binding ElementName=FpsNumericUpDown, Path=Value, Mode=OneWay}\" \n                                               IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"5\" />\n                    </Grid>\n\n                    <Viewbox.ToolTip>\n                        <ToolTip HorizontalOffset=\"-5\" Placement=\"Bottom\" Content=\"{DynamicResource S.Recorder.Fps.Range}\"/>\n                    </Viewbox.ToolTip>\n                </Viewbox>\n\n                <n:IntegerUpDown x:Name=\"FpsNumericUpDown\" Margin=\"1,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"60\" TabIndex=\"1\"\n                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=LatestFps, Mode=TwoWay}\" MinWidth=\"45\">\n                    <n:IntegerUpDown.ToolTip>\n                        <ToolTip HorizontalOffset=\"-5\" Placement=\"Bottom\" Content=\"{DynamicResource S.Recorder.Fps}\"/>\n                    </n:IntegerUpDown.ToolTip>\n                </n:IntegerUpDown>\n\n                <TextBlock Text=\"fps\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyNormal}\" Margin=\"1,0,0,0\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                <Separator Width=\"1\" Margin=\"5,3\"/>\n\n                <n:IntegerBox x:Name=\"WidthIntegerBox\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BoardWidth, Mode=TwoWay}\"\n                              Offset=\"{x:Static u2:Constants.HorizontalBoardOffset}\" Minimum=\"100\" Maximum=\"3000\" TabIndex=\"2\" Height=\"Auto\" Padding=\"4,0\" Margin=\"1,3\"\n                              ToolTip=\"{DynamicResource S.Recorder.Width}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <TextBlock Text=\"×\" FontSize=\"16\" FontFamily=\"Segoe Script\" Margin=\"1\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                <n:IntegerBox x:Name=\"HeightIntegerBox\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BoardHeight, Mode=TwoWay}\"\n                              Offset=\"{x:Static u2:Constants.VerticalBoardOffset}\" Minimum=\"100\" Maximum=\"3000\" TabIndex=\"3\" Height=\"Auto\" Padding=\"4,0\" Margin=\"1,3\"\n                              ToolTip=\"{DynamicResource S.Recorder.Height}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <TextBlock Text=\"px\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyNormal}\" Margin=\"1,0,0,0\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                <Separator Width=\"1\" Margin=\"3,2\"/>\n\n                <n:ExtendedButton x:Name=\"DiscardButton\" Text=\"{DynamicResource S.Recorder.Discard}\" Icon=\"{StaticResource Vector.Remove}\" Visibility=\"Collapsed\" \n                                  ContentWidth=\"16\" ContentHeight=\"16\" TabIndex=\"4\" MinWidth=\"{Binding RelativeSource={RelativeSource Mode=Self}, Path=ActualHeight}\"\n                                  Style=\"{StaticResource Style.Button.Horizontal}\" Click=\"DiscardButton_Click\"/>\n\n                <n:ExtendedToggleButton x:Name=\"AutoRecordToggleButton\" Text=\"{DynamicResource S.Board.AutoRecord}\" IsChecked=\"True\" Icon=\"{StaticResource Vector.Record}\" \n                                        ContentHeight=\"16\" ContentWidth=\"16\" Style=\"{StaticResource Style.ToggleButton.NoBorder}\" TabIndex=\"5\" TextWrapping=\"NoWrap\" \n                                        KeyGesture=\"{DynamicResource S.Board.CtrlHold}\" ToolTip=\"{DynamicResource S.Board.AutoRecordToolTip}\" ToolTipService.Placement=\"Bottom\"/>\n\n                <n:ExtendedButton x:Name=\"StopButton\" Text=\"{DynamicResource S.Recorder.Stop}\" Icon=\"{StaticResource Vector.Stop}\"\n                                  Style=\"{StaticResource Style.Button.Horizontal}\" TabIndex=\"5\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                  KeyGesture=\"{Binding Source={x:Static t:UserSettings.All}, Path=StopShortcut, Converter={StaticResource KeysToStringConverter}}\" \n                                  Click=\"StopButton_Click\"/>\n            </StackPanel>\n        </Grid>\n    </Grid>\n</n:LightWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Board.xaml.cs",
    "content": "using System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media.Animation;\nusing System.Windows.Media.Imaging;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.ImageUtil;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Windows.Other;\nusing KeyEventArgs = System.Windows.Input.KeyEventArgs;\nusing Timer = System.Windows.Forms.Timer;\n\nnamespace ScreenToGif.Windows;\n\n/// <summary>\n/// Board recorder, a \"record as you draw\" feature.\n/// </summary>\npublic partial class Board\n{\n    #region Variables\n\n    /// <summary>\n    /// The DPI of the current screen.\n    /// </summary>\n    private double _dpi = 96d;\n\n    private bool _isCtrlDown = false;\n\n    #region Timer\n\n    private Timer _capture = new Timer();\n\n    #endregion\n\n    #endregion\n\n    public Board()\n    {\n        InitializeComponent();\n\n        _capture.Tick += Normal_Elapsed;\n    }\n\n    private void Board_Loaded(object sender, RoutedEventArgs e)\n    {\n        _dpi = this.Dpi();\n\n        WidthIntegerBox.Scale = _dpi / 96d;\n        HeightIntegerBox.Scale = _dpi / 96d;\n        \n        Arguments.ClearAutomationArgs();\n    }\n\n    #region Record Async\n\n    /// <summary>\n    /// Saves the Bitmap to the disk.\n    /// </summary>\n    /// <param name=\"fileName\">The final filename of the Bitmap.</param>\n    /// <param name=\"bitmap\">The Bitmap to save in the disk.</param>\n    private void AddFrames(string fileName, BitmapSource bitmap)\n    {\n        //var mutexLock = new Mutex(false, bitmap.GetHashCode().ToString());\n        //mutexLock.WaitOne();\n\n        using (var stream = new FileStream(fileName, FileMode.Create))\n        {\n            var encoder = new PngBitmapEncoder();\n            encoder.Frames.Add(BitmapFrame.Create(bitmap));\n            encoder.Save(stream);\n            stream.Flush();\n            stream.Close();\n        }\n\n        //GC.Collect(1);\n        //mutexLock.ReleaseMutex();\n    }\n\n    #endregion\n\n    #region Discard Async\n\n    private void Discard()\n    {\n        try\n        {\n            #region Remove all the files\n\n            if (Project == null)\n                return;\n\n            foreach (var frame in Project.Frames)\n            {\n                try\n                {\n                    File.Delete(frame.Path);\n                }\n                catch (Exception)\n                { }\n            }\n\n            try\n            {\n                Directory.Delete(Project.FullPath, true);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Delete Temp Path\");\n            }\n\n            #endregion\n\n            Project.Frames.Clear();\n        }\n        catch (IOException io)\n        {\n            LogWriter.Log(io, \"Error while trying to Discard the Recording\");\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Discard Error\", \"Error while trying to discard the recording\", ex.Message));\n            LogWriter.Log(ex, \"Error while trying to Discard the Recording\");\n        }\n    }\n\n    #endregion\n\n    /// <summary>\n    /// Method that starts or pauses the recording\n    /// </summary>\n    private void RecordPause()\n    {\n        switch (Stage)\n        {\n            case RecorderStages.Stopped:\n            {\n                _capture = new Timer { Interval = 1000 / FpsNumericUpDown.Value };\n\n                Project?.Clear();\n                Project = new ProjectInfo().CreateProjectFolder(ProjectByType.BoardRecorder);\n\n                HeightIntegerBox.IsEnabled = false;\n                WidthIntegerBox.IsEnabled = false;\n                FpsNumericUpDown.IsEnabled = false;\n\n                IsRecording = true;\n                Topmost = true;\n\n                FrameRate.Start(_capture.Interval);\n                \n                _capture.Tick += Normal_Elapsed;\n                _capture.Start();\n\n                Stage = RecorderStages.Recording;\n\n                AutoFitButtons();\n\n                break;\n            }\n\n            case RecorderStages.Recording:\n            {\n                Stage = RecorderStages.Paused;\n                Title = LocalizationHelper.Get(\"S.Recorder.Paused\");\n\n                AutoFitButtons();\n\n                _capture.Stop();\n\n                FrameRate.Stop();\n                break;\n            }\n\n            case RecorderStages.Paused:\n            {\n                Stage = RecorderStages.Recording;\n                Title = LocalizationHelper.Get(\"S.Board.Title\");\n\n                AutoFitButtons();\n\n                FrameRate.Start(_capture.Interval);\n\n                _capture.Start();\n                break;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Stops the recording or the Pre-Start countdown.\n    /// </summary>\n    private void Stop()\n    {\n        try\n        {\n            FrameCount = 0;\n\n            _capture.Stop();\n            FrameRate.Stop();\n\n            if (Stage != RecorderStages.Stopped && Stage != RecorderStages.PreStarting && Project.Any)\n            {\n                Close();\n            }\n            else if (Stage is RecorderStages.PreStarting && !Project.Any)\n            {\n                Stage = RecorderStages.Stopped;\n\n                //Enables the controls that are disabled while recording;\n                FpsNumericUpDown.IsEnabled = true;\n                HeightIntegerBox.IsEnabled = true;\n                WidthIntegerBox.IsEnabled = true;\n\n                IsRecording = false;\n                Topmost = true;\n\n                Title = LocalizationHelper.Get(\"S.Board.Title\") + \" ■\";\n\n                AutoFitButtons();\n            }\n        }\n        catch (NullReferenceException nll)\n        {\n            ErrorDialog.Ok(LocalizationHelper.Get(\"S.Board.Title\"), \"Error while stopping\", nll.Message, nll);\n            LogWriter.Log(nll, \"NullPointer on the Stop function\");\n        }\n        catch (Exception ex)\n        {\n            ErrorDialog.Ok(LocalizationHelper.Get(\"S.Board.Title\"), \"Error while stopping\", ex.Message, ex);\n            LogWriter.Log(ex, \"Error on the Stop function\");\n        }\n    }\n\n    /// <summary>\n    /// Changes the way that the Record and Stop buttons are shown.\n    /// </summary>\n    private void AutoFitButtons()\n    {\n        if (LowerGrid.ActualWidth < 250)\n        {\n            StopButton.Style = (Style)FindResource(\"Style.Button.NoText\");\n\n            MinimizeVisibility = Visibility.Collapsed;\n        }\n        else\n        {\n            StopButton.Style = (Style)FindResource(\"Style.Button.Horizontal\");\n\n            MinimizeVisibility = Visibility.Visible;\n        }\n    }\n\n    private void Normal_Elapsed(object sender, EventArgs e)\n    {\n        var fileName = $\"{Project.FullPath}{FrameCount}.png\";\n\n        //TODO: GetRender fails to create useful image when the control has decimals values as size.\n\n        var render = MainBorder.GetRender(_dpi); //TODO: Too heavy! Maybe just save the strokes? like layers?\n\n        Project.Frames.Add(new FrameInfo(fileName, FrameRate.GetMilliseconds()));\n\n        ThreadPool.QueueUserWorkItem(delegate { AddFrames(fileName, render); });\n\n        FrameCount++;\n    }\n\n    private void LightWindow_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        AutoFitButtons();\n    }\n\n    private async void DiscardButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (UserSettings.All.NotifyRecordingDiscard && !Dialog.Ask(LocalizationHelper.Get(\"S.Recorder.Discard.Title\"),\n                LocalizationHelper.Get(\"S.Recorder.Discard.Instruction\"), LocalizationHelper.Get(\"S.Recorder.Discard.Message\"), false))\n            return;\n\n        _capture.Stop();\n        FrameRate.Stop();\n        FrameCount = 0;\n        Stage = RecorderStages.Stopped;\n\n        MainGrid.IsEnabled = false;\n        Cursor = Cursors.AppStarting;\n\n        await Task.Run(Discard);\n\n        //Enables the controls that are disabled while recording;\n        FpsNumericUpDown.IsEnabled = true;\n        HeightIntegerBox.IsEnabled = true;\n        WidthIntegerBox.IsEnabled = true;\n        MainGrid.IsEnabled = true;\n\n        Cursor = Cursors.Arrow;\n        IsRecording = false;\n\n        DiscardButton.BeginStoryboard(FindResource(\"HideDiscardStoryboard\") as Storyboard, HandoffBehavior.Compose);\n\n        //Removes the current drawings.\n        MainInkCanvas.Strokes.Clear();\n\n        Title = LocalizationHelper.Get(\"S.Board.Title\");\n\n        AutoFitButtons();\n    }\n\n    private void StopButton_Click(object sender, RoutedEventArgs e)\n    {\n        Stop();\n    }\n\n    private void Options_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = Stage != RecorderStages.Recording && Stage != RecorderStages.PreStarting;\n    }\n\n    private void Options_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        Topmost = false;\n\n        var options = new Options();\n        options.ShowDialog(); //TODO: If recording started, maybe disable some properties.\n\n        Topmost = true;\n    }\n\n    private void CloseButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n    \n    private void Board_KeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key.ToString().Equals(UserSettings.All.StopShortcut.ToString()))\n            StopButton_Click(null, null);\n\n        if (e.Key is Key.LeftCtrl or Key.RightCtrl && !_isCtrlDown)\n        {\n            AutoRecordToggleButton.IsChecked = !(AutoRecordToggleButton.IsChecked ?? true);\n            _isCtrlDown = true;\n        }\n    }\n\n    private void Board_KeyUp(object sender, KeyEventArgs e)\n    {\n        if (e.Key is Key.LeftCtrl or Key.RightCtrl)\n        {\n            AutoRecordToggleButton.IsChecked = !(AutoRecordToggleButton.IsChecked ?? true);\n            _isCtrlDown = false;\n        }\n    }\n\n    private void MainInkCanvas_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Stage is RecorderStages.Stopped or RecorderStages.Paused && AutoRecordToggleButton.IsChecked == true)\n            RecordPause();\n\n        if (DiscardButton.Visibility == Visibility.Collapsed)\n            DiscardButton.BeginStoryboard(FindResource(\"ShowDiscardStoryboard\") as Storyboard, HandoffBehavior.Compose);\n    }\n\n    private void MainInkCanvas_OnPreviewMouseUp(object sender, MouseButtonEventArgs e)\n    {\n        if (Stage == RecorderStages.Recording)\n            RecordPause();\n    }\n\n    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Mouse.LeftButton == MouseButtonState.Pressed)\n            DragMove();\n    }\n\n    private void Board_Deactivated(object sender, EventArgs e)\n    {\n        if (_isCtrlDown)\n        {\n            AutoRecordToggleButton.IsChecked = !(AutoRecordToggleButton.IsChecked ?? true);\n            _isCtrlDown = false;\n        }\n    }\n\n    private void LightWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        //Save Settings\n        UserSettings.Save();\n\n        if (Stage != RecorderStages.Stopped)\n        {\n            _capture.Stop();\n            _capture.Dispose();\n        }\n\n        GC.Collect();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Editor.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Editor\" \n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:cm=\"clr-namespace:System.ComponentModel;assembly=WindowsBase\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:l=\"clr-namespace:ScreenToGif.Windows\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n            xmlns:gl=\"clr-namespace:System.Globalization;assembly=mscorlib\"\n            xmlns:h=\"clr-namespace:ScreenToGif.Controls.Shapes\" \n            xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n            xmlns:o=\"clr-namespace:ScreenToGif.UserControls\"\n            xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n            xmlns:v=\"clr-namespace:ScreenToGif.ViewModel;assembly=ScreenToGif.ViewModel\"\n            x:Name=\"EditorWindow\" Title=\"{DynamicResource S.Editor.Title}\" MinHeight=\"500\" MinWidth=\"700\"\n            Background=\"{DynamicResource Panel.Background.Level3}\" UseLayoutRounding=\"True\" Icon=\"/Resources/Logo.ico\"\n            FocusManager.FocusedElement=\"{Binding RelativeSource={x:Static RelativeSource.Self}, Mode=OneTime}\"\n            Loaded=\"Window_Loaded\" Closing=\"Window_Closing\" Activated=\"Window_Activated\" KeyUp=\"Window_KeyUp\" \n            DpiChanged=\"Window_DpiChanged\" Deactivated=\"Window_Deactivated\">\n\n    <Window.Resources>\n        <c:DoubleToInt x:Key=\"DoubleToIntConverter\"/>\n        <c:InvertedBool x:Key=\"InvertedBoolConverter\"/>\n        <c:InvertedVisibility x:Key=\"InvertedVisibilityConverter\"/>\n        <c:MaximumValue x:Key=\"MaximumValueConverter\"/>\n        <c:DoubleTimesAHundredToInt x:Key=\"DoubleTimesAHundredToIntConverter\"/>\n        <c:UriToBitmap x:Key=\"UriToBitmapConverter\"/>\n        <c:PathToFilename x:Key=\"PathToFilenameConverter\"/>\n        <c:DoubleToThickness x:Key=\"DoubleToThicknessConverter\"/>\n        <c:SelectionToEditingMode x:Key=\"SelectionToEditingModeConverter\"/>\n        <c:SelectionToDrawingAttributes x:Key=\"SelectionToDrawingAttributesConverter\"/>\n        <c:SelectionToStylusShape x:Key=\"SelectionToStylusShapeConverter\"/>\n        <c:StylusTipToBool x:Key=\"StylusTipToBoolConverter\"/>\n        <c:FontToSupportedGliph x:Key=\"FontToSupportedGliphConverter\"/>\n        <c:FormatConverter x:Key=\"FormatConverter\"/>\n        <c:BoolAndToVisibility x:Key=\"BoolAndToVisibility\"/>\n        <c:IntToBool x:Key=\"IntToBool\"/>\n        <c:BoolAndOrOrToVisibility x:Key=\"BoolAndOrOrToVisibility\"/>\n\n        <Storyboard x:Key=\"ShowPanelStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\">\n                <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.MinWidth)\" From=\"{Binding ElementName=ActionGrid,Path=ActualWidth}\" To=\"280\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.Width)\" From=\"{Binding ElementName=ActionGrid,Path=ActualWidth}\" To=\"280\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=ActionGrid,Path=Opacity}\" To=\"1\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"ShowExtendedPanelStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\">\n                <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.MinWidth)\" From=\"{Binding ElementName=ActionGrid,Path=ActualWidth}\" To=\"320\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.Width)\" From=\"{Binding ElementName=ActionGrid,Path=ActualWidth}\" To=\"320\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=ActionGrid,Path=Opacity}\" To=\"1\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HidePanelStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\">\n                <DiscreteBooleanKeyFrame Value=\"False\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.MinWidth)\" From=\"{Binding ElementName=ActionGrid,Path=ActualWidth}\" To=\"0\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.Width)\" From=\"{Binding ElementName=ActionGrid,Path=ActualWidth}\" To=\"0\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\"/>\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n            <DoubleAnimation Storyboard.TargetName=\"ActionGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=ActionGrid,Path=Opacity}\" To=\"0\" Duration=\"0:0:0.75\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideWelcomeBorderStoryboard\">\n            <DoubleAnimation Storyboard.TargetName=\"WelcomeGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=WelcomeGrid,Path=Opacity}\" To=\"0\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WelcomeGrid\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:1\" >\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:1\"/>\n            </ObjectAnimationUsingKeyFrames>\n        </Storyboard>\n\n        <Storyboard x:Key=\"ShowWelcomeBorderStoryboard\">\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WelcomeGrid\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\" >\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"WelcomeGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideOverlayGridStoryboard\">\n            <DoubleAnimation Storyboard.TargetName=\"OverlayGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=OverlayGrid,Path=Opacity}\" To=\"0\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OverlayGrid\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:1\" >\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:1\"/>\n            </ObjectAnimationUsingKeyFrames>\n        </Storyboard>\n\n        <Storyboard x:Key=\"ShowOverlayGridStoryboard\">\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OverlayGrid\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\" >\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"OverlayGrid\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"ShowHintStoryboard\">\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\" >\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" Duration=\"0:0:1.5\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n\n            <DoubleAnimation Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Opacity\" From=\"{Binding ElementName=HintStackPanel,Path=Opacity}\" To=\"0\" BeginTime=\"0:0:7\" Duration=\"0:0:3\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Visibility\" BeginTime=\"0:0:7\" Duration=\"0:0:3\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:3\"/>\n            </ObjectAnimationUsingKeyFrames>\n        </Storyboard>\n\n        <Storyboard x:Key=\"ShowPermanentHintStoryboard\">\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\" >\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" Duration=\"0:0:1.5\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideHintStoryboard\">\n            <DoubleAnimation Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"(Grid.Opacity)\" From=\"{Binding ElementName=HintStackPanel,Path=Opacity}\" To=\"0\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HintStackPanel\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:1\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:1\"/>\n            </ObjectAnimationUsingKeyFrames>\n        </Storyboard>\n\n        <CollectionViewSource x:Key=\"MyFonts\" x:Shared=\"False\" \n                              Source=\"{Binding Source={x:Static Fonts.SystemFontFamilies}, Converter={StaticResource FontToSupportedGliphConverter}}\">\n            <CollectionViewSource.SortDescriptions>\n                <cm:SortDescription PropertyName=\"Source\"/>\n            </CollectionViewSource.SortDescriptions>\n        </CollectionViewSource>\n\n        <DataTemplate x:Key=\"FontTemplate\">\n            <!--x:Shared=\"False\"-->\n            <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                <TextBlock FontFamily=\"{Binding .}\" FontSize=\"16\" Text=\"{Binding .}\" ToolTip=\"{Binding Path=.Source}\"/>\n            </VirtualizingStackPanel>\n        </DataTemplate>\n    </Window.Resources>\n\n    <Window.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.NewRecording}\" CanExecute=\"NewRecording_CanExecute\" Executed=\"NewRecording_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.NewWebcamRecording}\" CanExecute=\"NewRecording_CanExecute\" Executed=\"NewWebcamRecording_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.NewBoardRecording}\" CanExecute=\"NewRecording_CanExecute\" Executed=\"NewBoardRecording_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.NewAnimation}\" CanExecute=\"NewProject_CanExecute\" Executed=\"NewProject_Executed\"/>\n\n        <!--Insert-->\n        <CommandBinding Command=\"{StaticResource Command.InsertRecording}\" CanExecute=\"Insert_CanExecute\" Executed=\"InsertRecording_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.InsertWebcamRecording}\" CanExecute=\"Insert_CanExecute\" Executed=\"InsertWebcamRecording_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.InsertBoardRecording}\" CanExecute=\"Insert_CanExecute\" Executed=\"InsertBoardRecording_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.InsertFromMedia}\" CanExecute=\"InsertFromMedia_CanExecute\" Executed=\"InsertFromMedia_Executed\"/>\n\n        <!--File-->\n        <CommandBinding Command=\"{StaticResource Command.SaveAs}\" CanExecute=\"File_CanExecute\" Executed=\"SaveAs_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Load}\" CanExecute=\"NewProject_CanExecute\" Executed=\"Load_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.LoadRecent}\" CanExecute=\"NewProject_CanExecute\" Executed=\"LoadRecent_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.DiscardProject}\" CanExecute=\"File_CanExecute\" Executed=\"DiscardProject_Executed\"/>\n\n        <!--Action Stack-->\n        <CommandBinding Command=\"{StaticResource Command.Undo}\" CanExecute=\"Undo_CanExecute\" Executed=\"Undo_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Reset}\" CanExecute=\"Reset_CanExecute\" Executed=\"Reset_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Redo}\" CanExecute=\"Redo_CanExecute\" Executed=\"Redo_Executed\"/>\n\n        <!--Clipboard-->\n        <CommandBinding Command=\"{StaticResource Command.Cut}\" CanExecute=\"ClipBoard_CanExecute\" Executed=\"Cut_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Copy}\" CanExecute=\"ClipBoard_CanExecute\" Executed=\"Copy_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Paste}\" CanExecute=\"Paste_CanExecute\" Executed=\"Paste_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.ExploreClipboard}\" CanExecute=\"ClipBoardSelection_CanExecute\" Executed=\"ExploreClipBoard_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.RemoveClipboardEntry}\" CanExecute=\"ClipBoardSelection_CanExecute\" Executed=\"RemoveClipboard_Executed\"/>\n\n        <!--Zoom-->\n        <CommandBinding Command=\"{StaticResource Command.Zoom100}\" CanExecute=\"Zoom_CanExecute\" Executed=\"Zoom100_Executed\"/>\n        <CommandBinding x:Name=\"SizeToContentCommand\" Command=\"{StaticResource Command.SizeToContent}\" CanExecute=\"Zoom_CanExecute\" Executed=\"SizeToContent_Executed\"/>\n        <CommandBinding x:Name=\"FitImageCommand\" Command=\"{StaticResource Command.FitImage}\" CanExecute=\"Zoom_CanExecute\" Executed=\"FitImage_Executed\"/>\n\n        <!--Select-->\n        <CommandBinding Command=\"{StaticResource Command.SelectAll}\" CanExecute=\"Selection_CanExecute\" Executed=\"SelectAll_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.GoTo}\" CanExecute=\"Selection_CanExecute\" Executed=\"GoTo_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.InverseSelection}\" CanExecute=\"Selection_CanExecute\" Executed=\"InverseSelection_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Unselect}\" CanExecute=\"Image_CanExecute\" Executed=\"DeselectAll_Executed\"/>\n\n        <!--Playback-->\n        <CommandBinding Command=\"{StaticResource Command.FirstFrame}\" CanExecute=\"Playback_CanExecute\" Executed=\"FirstFrame_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.PreviousFrame}\" CanExecute=\"Playback_CanExecute\" Executed=\"PreviousFrame_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Play}\" CanExecute=\"Playback_CanExecute\" Executed=\"Play_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.NextFrame}\" CanExecute=\"Playback_CanExecute\" Executed=\"NextFrame_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.LastFrame}\" CanExecute=\"Playback_CanExecute\" Executed=\"LastFrame_Executed\"/>\n\n        <!--Frames-->\n        <CommandBinding Command=\"{StaticResource Command.Delete}\" CanExecute=\"Delete_CanExecute\" Executed=\"Delete_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.DeletePrevious}\" CanExecute=\"DeletePrevious_CanExecute\" Executed=\"DeletePrevious_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.DeleteNext}\" CanExecute=\"DeleteNext_CanExecute\" Executed=\"DeleteNext_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.RemoveDuplicates}\" CanExecute=\"RemoveDuplicates_CanExecute\" Executed=\"RemoveDuplicates_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Reduce}\" CanExecute=\"Reduce_CanExecute\" Executed=\"Reduce_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.SmoothLoop}\" CanExecute=\"RemoveDuplicates_CanExecute\" Executed=\"SmoothLoop_Executed\"/>\n\n        <!--Reordering-->\n        <CommandBinding Command=\"{StaticResource Command.Reverse}\" CanExecute=\"Reordering_CanExecute\" Executed=\"Reverse_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Yoyo}\" CanExecute=\"Reordering_CanExecute\" Executed=\"Yoyo_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.MoveLeft}\" CanExecute=\"Reordering_CanExecute\" Executed=\"MoveLeft_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.MoveRight}\" CanExecute=\"Reordering_CanExecute\" Executed=\"MoveRight_Executed\"/>\n\n        <!--Delay (Duration)-->\n        <CommandBinding Command=\"{StaticResource Command.OverrideDelay}\" CanExecute=\"Image_CanExecute\" Executed=\"OverrideDelay_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.IncreaseDecreaseDelay}\" CanExecute=\"Image_CanExecute\" Executed=\"IncreaseDecreaseDelay_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.ScaleDelay}\" CanExecute=\"Image_CanExecute\" Executed=\"ScaleDelay_Executed\"/>\n\n        <!--Image-->\n        <CommandBinding Command=\"{StaticResource Command.Resize}\" CanExecute=\"Image_CanExecute\" Executed=\"Resize_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Crop}\" CanExecute=\"Image_CanExecute\" Executed=\"Crop_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.FlipRotate}\" CanExecute=\"Image_CanExecute\" Executed=\"FlipRotate_Executed\"/>\n\n        <CommandBinding Command=\"{StaticResource Command.Caption}\" CanExecute=\"Image_CanExecute\" Executed=\"Caption_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.FreeText}\" CanExecute=\"Image_CanExecute\" Executed=\"FreeText_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.TitleFrame}\" CanExecute=\"Image_CanExecute\" Executed=\"TitleFrame_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.KeyStrokes}\" CanExecute=\"Image_CanExecute\" Executed=\"KeyStrokes_Executed\"/>\n\n        <CommandBinding Command=\"{StaticResource Command.FreeDrawing}\" CanExecute=\"Image_CanExecute\" Executed=\"FreeDrawing_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Shapes}\" CanExecute=\"Image_CanExecute\" Executed=\"Shapes_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.MouseEvents}\" CanExecute=\"Image_CanExecute\" Executed=\"MouseEvents_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Watermark}\" CanExecute=\"Image_CanExecute\" Executed=\"Watermark_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Border}\" CanExecute=\"Image_CanExecute\" Executed=\"Border_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Shadow}\" CanExecute=\"Image_CanExecute\" Executed=\"Shadow_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Obfuscate}\" CanExecute=\"Image_CanExecute\" Executed=\"Obfuscate_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Cinemagraph}\" CanExecute=\"Image_CanExecute\" Executed=\"Cinemagraph_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Progress}\" CanExecute=\"Image_CanExecute\" Executed=\"Progress_Executed\"/>\n\n        <!--Transitions-->\n        <CommandBinding Command=\"{StaticResource Command.Fade}\" CanExecute=\"Transition_CanExecute\" Executed=\"Fade_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Slide}\" CanExecute=\"Transition_CanExecute\" Executed=\"Slide_Executed\"/>\n\n        <!--Apply and Cancel-->\n        <CommandBinding x:Name=\"OkCommandBinding2\" Command=\"{StaticResource Command.Ok}\" CanExecute=\"PanelAction_CanExecute\" Executed=\"Ok_Executed\"/>\n        <CommandBinding x:Name=\"CancelCommandBinding\" Command=\"{StaticResource Command.Cancel}\" CanExecute=\"PanelAction_CanExecute\" Executed=\"Cancel_Executed\"/>\n\n        <!--Frame list-->\n        <CommandBinding Command=\"{StaticResource Command.OpenImage}\" CanExecute=\"ListFramesSelection_CanExecute\" Executed=\"OpenImage_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.ExploreFolder}\" CanExecute=\"ListFramesSelection_CanExecute\" Executed=\"ExploreFolder_Executed\"/>\n    </Window.CommandBindings>\n\n    <Window.DataContext>\n        <v:EditorViewModel/>\n    </Window.DataContext>\n\n    <Window.TaskbarItemInfo>\n        <TaskbarItemInfo Description=\"{DynamicResource S.Editor.Title}\">\n            <!--<TaskbarItemInfo.ThumbButtonInfos>\n                <ThumbButtonInfoCollection>\n                    <ThumbButtonInfo x:Name=\"NewRecordingThumbInfo\" Command=\"u:Commands.NewRecording\" DismissWhenClicked=\"True\" \n                                     Description=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureTextConverter}}\" \n                                     CommandTarget=\"{Binding ElementName=NewRecordingButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage>\n                                <DrawingImage.Drawing>\n                                    <GeometryDrawing>\n                                        <GeometryDrawing.Geometry>\n                                            <RectangleGeometry Rect=\"0,0,20,20\"/>\n                                        </GeometryDrawing.Geometry>\n                                        <GeometryDrawing.Brush>\n                                            <VisualBrush Visual=\"{StaticResource Vector.Record.New}\" Stretch=\"Uniform\"/>\n                                        </GeometryDrawing.Brush>\n                                    </GeometryDrawing>\n                                </DrawingImage.Drawing>\n                            </DrawingImage>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"NewWebcamRecordingThumbInfo\" Command=\"u:Commands.NewWebcamRecording\" DismissWhenClicked=\"True\" \n                                     Description=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureTextConverter}}\" \n                                     CommandTarget=\"{Binding ElementName=NewWebcamRecordingButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage>\n                                <DrawingImage.Drawing>\n                                    <GeometryDrawing>\n                                        <GeometryDrawing.Geometry>\n                                            <RectangleGeometry Rect=\"0,0,20,20\"/>\n                                        </GeometryDrawing.Geometry>\n                                        <GeometryDrawing.Brush>\n                                            <VisualBrush Visual=\"{StaticResource Vector.Camera.New}\" Stretch=\"Uniform\"/>\n                                        </GeometryDrawing.Brush>\n                                    </GeometryDrawing>\n                                </DrawingImage.Drawing>\n                            </DrawingImage>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"NewBoardRecordingThumbInfo\" Command=\"u:Commands.NewBoardRecording\" DismissWhenClicked=\"True\" \n                                     Description=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureTextConverter}}\" \n                                     CommandTarget=\"{Binding ElementName=NewBoardRecordingButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage>\n                                <DrawingImage.Drawing>\n                                    <GeometryDrawing>\n                                        <GeometryDrawing.Geometry>\n                                            <RectangleGeometry Rect=\"0,0,20,20\"/>\n                                        </GeometryDrawing.Geometry>\n                                        <GeometryDrawing.Brush>\n                                            <VisualBrush Visual=\"{StaticResource Vector.Board.New}\" Stretch=\"Uniform\"/>\n                                        </GeometryDrawing.Brush>\n                                    </GeometryDrawing>\n                                </DrawingImage.Drawing>\n                            </DrawingImage>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"NewFromMediaProjectThumbInfo\" Command=\"u:Commands.NewFromMediaProject\" DismissWhenClicked=\"True\" \n                                     Description=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureTextConverter}}\" \n                                     CommandTarget=\"{Binding ElementName=OpenMediaProjectButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage>\n                                <DrawingImage.Drawing>\n                                    <GeometryDrawing>\n                                        <GeometryDrawing.Geometry>\n                                            <RectangleGeometry Rect=\"0,0,20,20\"/>\n                                        </GeometryDrawing.Geometry>\n                                        <GeometryDrawing.Brush>\n                                            <VisualBrush Visual=\"{StaticResource Vector.Open}\" Stretch=\"Uniform\"/>\n                                        </GeometryDrawing.Brush>\n                                    </GeometryDrawing>\n                                </DrawingImage.Drawing>\n                            </DrawingImage>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo Visibility=\"Hidden\"/>\n\n                    <ThumbButtonInfo x:Name=\"DiscardThumbInfo\" Command=\"u:Commands.DiscardProject\" DismissWhenClicked=\"True\" \n                                     Description=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureTextConverter}}\" \n                                     CommandTarget=\"{Binding ElementName=DiscardProjectButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage>\n                                <DrawingImage.Drawing>\n                                    <GeometryDrawing>\n                                        <GeometryDrawing.Geometry>\n                                            <RectangleGeometry Rect=\"0,0,20,20\"/>\n                                        </GeometryDrawing.Geometry>\n                                        <GeometryDrawing.Brush>\n                                            <VisualBrush Visual=\"{StaticResource Vector.Remove}\" Stretch=\"Uniform\"/>\n                                        </GeometryDrawing.Brush>\n                                    </GeometryDrawing>\n                                </DrawingImage.Drawing>\n                            </DrawingImage>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n                </ThumbButtonInfoCollection>\n            </TaskbarItemInfo.ThumbButtonInfos>-->\n        </TaskbarItemInfo>\n    </Window.TaskbarItemInfo>\n\n    <Grid x:Name=\"MainGrid\" >\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"20\"/>\n        </Grid.RowDefinitions>\n\n        <n:HideableTabControl Grid.Row=\"0\" x:Name=\"RibbonTabControl\" Effect=\"{StaticResource Shadow.Border.Tiny}\" FontSize=\"13\" IsTabStop=\"False\" Focusable=\"False\"\n                              OptionsCommand=\"{Binding Source={StaticResource AppViewModel}, Path=OpenOptions}\" FeedbackCommand=\"{Binding Source={StaticResource AppViewModel}, Path=OpenFeedback}\"\n                              TroubleshootCommand=\"{Binding Source={StaticResource AppViewModel}, Path=OpenTroubleshoot}\" HelpCommand=\"{Binding Source={StaticResource AppViewModel}, Path=OpenHelp}\"\n                              DataContext=\"{Binding ElementName=FrameListView, Path=SelectedItem}\">\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.File}\" Icon=\"{StaticResource Vector.Save}\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\" Effect=\"{StaticResource Shadow.Invariant}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.ColumnSpan=\"4\" Grid.Row=\"1\" Content=\"{DynamicResource S.Editor.File.New}\" \n\t\t\t\t\t\t\t   HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t\t   FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"NewRecordingButton\" Text=\"{DynamicResource S.Editor.File.New.Recording}\" Icon=\"{StaticResource Vector.Record.New}\" \n\t\t\t\t\t\t\t              MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.NewRecording}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"NewWebcamRecordingButton\" Text=\"{DynamicResource S.Editor.File.New.Webcam}\" Icon=\"{StaticResource Vector.Camera.New}\" \n\t\t\t\t\t\t\t              MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.NewWebcamRecording}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"2\" Grid.Row=\"0\" x:Name=\"NewBoardRecordingButton\" Text=\"{DynamicResource S.Editor.File.New.Board}\" Icon=\"{StaticResource Vector.Board.New}\" \n\t\t\t\t\t\t\t              MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.NewBoardRecording}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"3\" Grid.Row=\"0\" x:Name=\"NewAnimationButton\" Text=\"{DynamicResource S.Editor.File.Blank}\" Icon=\"{StaticResource Vector.File.New}\" \n\t\t\t\t\t\t\t              MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.NewAnimation}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"2\" Margin=\"0,1,0,0\" IsEnabled=\"{Binding FilledList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:Editor}}}\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.ColumnSpan=\"4\" Grid.Row=\"1\" Content=\"{DynamicResource S.Editor.File.Insert}\" \n\t\t\t\t\t\t\t   HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t\t   FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"InsertRecordingButton\" Text=\"{DynamicResource S.Editor.File.Insert.Recording}\" Icon=\"{StaticResource Vector.Record.Add}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.InsertRecording}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"InsertWebcamRecordingButton\" Text=\"{DynamicResource S.Editor.File.Insert.Webcam}\" Icon=\"{StaticResource Vector.Camera.Add}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.InsertWebcamRecording}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"2\" Grid.Row=\"0\" x:Name=\"InsertBoardRecordingButton\" Text=\"{DynamicResource S.Editor.File.Insert.Board}\" Icon=\"{StaticResource Vector.Board.Add}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.InsertBoardRecording}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"3\" Grid.Row=\"0\" x:Name=\"InsertImageButton\" Text=\"{DynamicResource S.Editor.File.Insert.Media}\" Icon=\"{StaticResource Vector.Open}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.InsertFromMedia}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"3\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"4\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.ColumnSpan=\"4\" Grid.Row=\"1\" Content=\"{DynamicResource S.Editor.File}\" \n\t\t\t\t\t\t\t   HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t\t   FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"SaveButton\" Text=\"{DynamicResource S.Editor.File.Save}\" Icon=\"{StaticResource Vector.Save}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.SaveAs}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                          IsEnabled=\"{Binding FilledList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:Editor}}}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"LoadButton\" Text=\"{DynamicResource S.Editor.File.Load}\" Icon=\"{StaticResource Vector.Open}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.Load}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"2\" Grid.Row=\"0\" x:Name=\"RecentButton\" Text=\"{DynamicResource S.Editor.File.LoadRecent}\" Icon=\"{StaticResource Vector.Project}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.LoadRecent}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"3\" Grid.Row=\"0\" x:Name=\"DiscardProjectButton\" Text=\"{DynamicResource S.Editor.File.Discard}\" Icon=\"{StaticResource Vector.Remove}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.DiscardProject}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                          IsEnabled=\"{Binding FilledList, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type l:Editor}}}\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"5\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n                </Grid>\n            </n:AwareTabItem>\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.Home}\" Icon=\"{StaticResource Vector.Editor}\" IsSelected=\"True\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <!--Action Stack-->\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" Content=\"{DynamicResource S.Editor.Home.ActionStack}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton x:Name=\"UndoButton\" Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Editor.Home.Undo}\" Icon=\"{StaticResource Vector.Undo}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Undo}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"1\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"ResetButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Home.Reset}\" Icon=\"{StaticResource Vector.Repeat}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Reset}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"RedoButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Home.Redo}\" Icon=\"{StaticResource Vector.Redo}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Redo}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <!--Clipboard-->\n                    <Grid Grid.Column=\"2\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Grid Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition />\n                                <ColumnDefinition Width=\"Auto\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Label Grid.Column=\"0\" Content=\"{DynamicResource S.Editor.Home.Clipboard}\" \n\t\t\t\t\t\t           HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t           FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"ShowClipboardButton\" Icon=\"{StaticResource Vector.Launcher}\"\n\t\t\t\t\t\t                      Margin=\"0,0,-2,-2\" MinWidth=\"10\" Padding=\"5,0\" ContentHeight=\"8\" ContentWidth=\"8\" Style=\"{StaticResource Style.Button.NoText}\" \n                                              ToolTip=\"{DynamicResource S.Editor.Home.Clipboard.Show}\" ToolTipService.Placement=\"Bottom\" Click=\"ShowClipboardButton_Click\" />\n                        </Grid>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"PasteButton\" Text=\"{DynamicResource S.Editor.Home.Paste}\" Icon=\"{StaticResource Vector.Paste}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Paste}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"1\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"CopyButton\" Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Editor.Home.Copy}\" Icon=\"{StaticResource Vector.Copy}\"\n\t\t\t\t\t\t                      Padding=\"2\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Copy}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"CutButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Home.Cut}\" Icon=\"{StaticResource Vector.Cut}\"\n\t\t\t\t\t\t                      Padding=\"2\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Cut}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"3\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <!--Zoom-->\n                    <Grid Grid.Column=\"4\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Grid.Row=\"1\" Content=\"{DynamicResource S.Editor.Home.Zoom}\" \n\t\t\t\t\t\t\t   HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t\t   FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"Zoom100Button\" Text=\"100%\" Icon=\"{StaticResource Vector.Fit}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Zoom100}\" \n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"FitOnContentButton\" Text=\"{DynamicResource S.Editor.Home.SizeToContent}\" Icon=\"{StaticResource Vector.SizeToContent}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.SizeToContent}\" \n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Column=\"2\" Grid.Row=\"0\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <StackPanel Grid.Row=\"0\" Orientation=\"Horizontal\" Margin=\"0,5\" IsEnabled=\"{Binding ElementName=Zoom100Button, Path=IsEnabled}\">\n                                <Grid Background=\"{StaticResource Vector.Zoom}\" Width=\"22\" Height=\"22\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <n:IntegerUpDown x:Name=\"ZoomNumericUpDown\" Minimum=\"5\" Maximum=\"500\" Margin=\"5,0,0,0\" MinWidth=\"60\"\n                                                 Value=\"{Binding Zoom, Converter={StaticResource IntToDecimalConverter}, ElementName=ZoomBoxControl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                <TextBlock Text=\"%\" VerticalAlignment=\"Center\" Padding=\"3,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                            </StackPanel>\n\n                            <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"1\" x:Name=\"FitButton\" Text=\"{DynamicResource S.Editor.Home.FitImage}\" Icon=\"{StaticResource Vector.PictureFit}\" \n\t\t\t\t\t\t\t                  Padding=\"3\" MinWidth=\"60\" ContentWidth=\"30\" ContentHeight=\"25\" VerticalContentAlignment=\"Center\"\n\t\t\t\t\t\t\t                  Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.FitImage}\" \n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"5\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <!--Select-->\n                    <Grid Grid.Column=\"6\" Margin=\"0,1,0,0\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <Label Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"SelectLabel\" Content=\"{DynamicResource S.Editor.Home.Select}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"SelectAllButton\" Text=\"{DynamicResource S.Editor.Home.SelectAll}\" Icon=\"{StaticResource Vector.Cursor}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.SelectAll}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"GoToButton\" Text=\"{DynamicResource S.Editor.Home.GoTo}\" Icon=\"{StaticResource Vector.Forward}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.GoTo}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"2\" Margin=\"0,1,0,0\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"InverseSelectionButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Home.Inverse}\" Icon=\"{StaticResource Vector.InverseSelection}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.InverseSelection}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"DeselectButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Home.Deselect}\" Icon=\"{StaticResource Vector.Unselect}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Unselect}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"7\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n                </Grid>\n            </n:AwareTabItem>\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.Playback}\" Icon=\"{StaticResource Vector.Play}\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\" Effect=\"{StaticResource Shadow.Invariant}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.ColumnSpan=\"5\" Grid.Row=\"1\" Content=\"{DynamicResource S.Editor.Playback.Playback}\" \n\t\t\t\t\t\t\t   HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t\t   FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"FirstButton\" Text=\"{DynamicResource S.Editor.Playback.First}\" Icon=\"{StaticResource Vector.First.Green}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"38\" Command=\"{StaticResource Command.FirstFrame}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedRepeatButton Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"PreviousButton\" Text=\"{DynamicResource S.Editor.Playback.Previous}\" Icon=\"{StaticResource Vector.Previous.Green}\" \n                                                ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.PreviousFrame}\" Style=\"{StaticResource Style.RepeatButton.Vertical}\"\n                                                ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\"\n                                                ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"2\" Grid.Row=\"0\" x:Name=\"PlayButton\" Text=\"{DynamicResource S.Editor.Playback.Play}\" Icon=\"{StaticResource Vector.Play}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.Play}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedRepeatButton Grid.Column=\"3\" Grid.Row=\"0\" x:Name=\"NextButton\" Text=\"{DynamicResource S.Editor.Playback.Next}\" Icon=\"{StaticResource Vector.Next.Green}\" \n                                                ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.NextFrame}\" Style=\"{StaticResource Style.RepeatButton.Vertical}\"\n                                                ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                                ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"4\" Grid.Row=\"0\" x:Name=\"LastButton\" Text=\"{DynamicResource S.Editor.Playback.Last}\" Icon=\"{StaticResource Vector.Last.Green}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"38\" Command=\"{StaticResource Command.LastFrame}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"2\" Margin=\"0,1,0,0\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"2\" Content=\"{DynamicResource S.Editor.PlaybackOptions.Header}\" \n\t\t\t\t\t\t\t   HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t\t   FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedCheckBox Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"LoopedPlaybackCheckBox\" Text=\"{DynamicResource S.Editor.PlaybackOptions.Loop}\" \n                                            IsChecked=\"{Binding LoopedPlayback, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                            Margin=\"5,3\" ToolTip=\"{DynamicResource S.Editor.PlaybackOptions.Loop.Info}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedCheckBox Grid.Column=\"0\" Grid.Row=\"1\" Text=\"{DynamicResource S.Options.Editor.General.DropFramesDuringPreviewIfBehind}\"\n                                            IsChecked=\"{Binding DropFramesDuringPreviewIfBehind, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                             Margin=\"5,3\" ToolTip=\"{DynamicResource S.Options.Editor.General.DropFramesDuringPreviewIfBehind.Tooltip}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"3\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" Margin=\"3,2\"/>\n                </Grid>\n            </n:AwareTabItem>\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.Edit}\" Icon=\"{StaticResource Vector.Pen}\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"5\" Content=\"{DynamicResource S.Editor.Edit.Frames}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"DeleteButton\" Text=\"{DynamicResource S.Editor.Edit.Delete}\" Icon=\"{StaticResource Vector.RemoveImage}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Delete}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"DeleteDuplicatesButton\" Text=\"{DynamicResource S.Editor.Edit.Frames.Duplicates}\" Icon=\"{StaticResource Vector.RemoveImage}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.RemoveDuplicates}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"ReduceButton\" Text=\"{DynamicResource S.Editor.Edit.Frames.Reduce}\" Icon=\"{StaticResource Vector.RemoveImage}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Reduce}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"3\" x:Name=\"SmoothLoopButton\" Text=\"{DynamicResource S.Editor.Edit.Frames.SmoothLoop}\" Icon=\"{StaticResource Vector.Repeat}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.SmoothLoop}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"4\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"DeleteBeforeButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Edit.DeletePrevious}\" Icon=\"{StaticResource Vector.Delete.Before}\"\n\t\t\t\t\t\t                      Padding=\"3\" MinWidth=\"60\" ContentHeight=\"30\" ContentWidth=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.DeletePrevious}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"DeleteAfterButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Edit.DeleteNext}\" Icon=\"{StaticResource Vector.Delete.After}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentHeight=\"30\" ContentWidth=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.DeleteNext}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"2\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"3\" Content=\"{DynamicResource S.Editor.Edit.Reordering}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"0\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"ReverseOrderButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Edit.Reverse}\" Icon=\"{StaticResource Vector.Invert}\"\n\t\t\t\t\t\t                      Padding=\"3\" ContentHeight=\"30\" ContentWidth=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Reverse}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"YoyoOrderButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Edit.Yoyo}\" Icon=\"{StaticResource Vector.Yoyo}\"\n\t\t\t\t\t\t                      Padding=\"3\" ContentHeight=\"30\" ContentWidth=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Yoyo}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n\n                        <n:ExtendedButton x:Name=\"MoveLeftButton\" Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Editor.Edit.MoveLeft}\" Icon=\"{StaticResource Vector.MoveLeft}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.MoveLeft}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton x:Name=\"MoveRightButton\" Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.Editor.Edit.MoveRight}\" Icon=\"{StaticResource Vector.MoveRight}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.MoveRight}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"3\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"4\" Margin=\"0,1,0,0\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"3\" Content=\"{DynamicResource S.Editor.Edit.Delay}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"0\" Grid.Row=\"0\" x:Name=\"OverrideDelayButton\" Text=\"{DynamicResource S.Editor.Edit.Delay.Override}\" Icon=\"{StaticResource Vector.OverrideDelay}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.OverrideDelay}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"1\" Grid.Row=\"0\" x:Name=\"ChangeDelayButton\" Text=\"{DynamicResource S.Editor.Edit.Delay.IncreaseDecrease}\" Icon=\"{StaticResource Vector.IncreaseDecreaseDelay}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.IncreaseDecreaseDelay}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Column=\"2\" Grid.Row=\"0\" x:Name=\"ScaleDelayButton\" Text=\"{DynamicResource S.Editor.Edit.Delay.Scale}\" Icon=\"{StaticResource Vector.ScaleDelay}\" \n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.ScaleDelay}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"5\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n                </Grid>\n            </n:AwareTabItem>\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.Image}\" Icon=\"{StaticResource Vector.Image}\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" Content=\"{DynamicResource S.Editor.Image.SizePosition}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton x:Name=\"ResizeButton\" Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Editor.Image.Resize}\" Icon=\"{StaticResource Vector.Resize}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Resize}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"1\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"CropButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Image.Crop}\" Icon=\"{StaticResource Vector.Crop}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.Crop}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"FlipRotateButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Image.FlipRotate}\" Icon=\"{StaticResource Vector.FlipHorizontal}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Style=\"{StaticResource Style.Button.Horizontal}\" Command=\"{StaticResource Command.FlipRotate}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"2\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"3\" Content=\"{DynamicResource S.Editor.Image.Text}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton x:Name=\"CaptionButton\" Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Editor.Image.Caption}\" Icon=\"{StaticResource Vector.Caption}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"28\" Command=\"{StaticResource Command.Caption}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton x:Name=\"KeypressButton\" Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Editor.Image.KeyStrokes}\" Icon=\"{StaticResource Vector.Keyboard}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.KeyStrokes}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"2\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"FreeTextButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Image.FreeText}\" Icon=\"{StaticResource Vector.FreeText}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Command=\"{StaticResource Command.FreeText}\" Style=\"{StaticResource Style.Button.Horizontal}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"TitleFrameButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Image.TitleFrame}\" Icon=\"{StaticResource Vector.TitleFrame}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Command=\"{StaticResource Command.TitleFrame}\" Style=\"{StaticResource Style.Button.Horizontal}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"3\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"4\" Margin=\"0,1,0,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"8\" Content=\"{DynamicResource S.Editor.Image.Overlay}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton x:Name=\"FreeDrawButton\" Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Editor.Image.FreeDrawing}\" Icon=\"{StaticResource Vector.FreeDrawing}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.FreeDrawing}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton x:Name=\"ShapesButton\" Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Editor.Image.Shape}\" Icon=\"{StaticResource Vector.Ellipse}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.Shapes}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"ProgressButton\" Text=\"{DynamicResource S.Editor.Image.Progress}\" Icon=\"{StaticResource Vector.Progress}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.Progress}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"3\" Text=\"{DynamicResource S.Editor.Image.MouseEvents}\" Icon=\"{StaticResource Vector.Cursor}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.MouseEvents}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"4\" x:Name=\"BorderButton\" Text=\"{DynamicResource S.Editor.Image.Border}\" Icon=\"{StaticResource Vector.Border}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.Border}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"5\" x:Name=\"ShadowButton\" Text=\"{DynamicResource S.Editor.Image.Shadow}\" Icon=\"{StaticResource Vector.Shadow}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.Shadow}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"6\" x:Name=\"ObfuscateButton\" Text=\"{DynamicResource S.Editor.Image.Obfuscate}\" Icon=\"{StaticResource Vector.Obfuscate}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Command=\"{StaticResource Command.Obfuscate}\" Style=\"{StaticResource Style.Button.Vertical}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <Grid Grid.Row=\"0\" Grid.Column=\"7\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition/>\n                                <RowDefinition/>\n                            </Grid.RowDefinitions>\n\n                            <n:ExtendedButton x:Name=\"WatermarkButton\" Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Image.Watermark}\" Icon=\"{StaticResource Vector.Watermark}\"\n                                              Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Command=\"{StaticResource Command.Watermark}\" Style=\"{StaticResource Style.Button.Horizontal}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                            <n:ExtendedButton x:Name=\"CinemagraphButton\" Grid.Row=\"1\" Text=\"{DynamicResource S.Editor.Image.Cinemagraph}\" Icon=\"{StaticResource Vector.Cinemagraph}\"\n\t\t\t\t\t\t                      Padding=\"3\" MinWidth=\"60\" ContentWidth=\"25\" ContentHeight=\"25\" Command=\"{StaticResource Command.Cinemagraph}\" Style=\"{StaticResource Style.Button.Horizontal}\"\n                                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                        </Grid>\n                    </Grid>\n\n                    <Separator Grid.Column=\"5\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" Margin=\"3,2\"/>\n                </Grid>\n            </n:AwareTabItem>\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.Transitions}\" Icon=\"{StaticResource Vector.Fade}\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition/>\n                            <ColumnDefinition/>\n                        </Grid.ColumnDefinitions>\n\n                        <Label Grid.Row=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"StylesLabel\" Content=\"{DynamicResource S.Editor.Transitions.Styles}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\"  Grid.Column=\"0\" x:Name=\"FadeTransitionButton\" Text=\"{DynamicResource S.Editor.Transitions.Fade}\" Icon=\"{StaticResource Vector.Fade}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Fade}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                        <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"SlideTransitionButton\" Text=\"{DynamicResource S.Editor.Transitions.Slide}\" Icon=\"{StaticResource Vector.Slide}\"\n                                          MinWidth=\"55\" ContentHeight=\"28\" ContentWidth=\"32\" Style=\"{StaticResource Style.Button.Vertical}\" Command=\"{StaticResource Command.Slide}\"\n                                          ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                          ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n                </Grid>\n            </n:AwareTabItem>\n\n            <n:AwareTabItem Header=\"{DynamicResource S.Editor.Statistics}\" Icon=\"{StaticResource Vector.Info}\">\n                <Grid Height=\"94\" Margin=\"2\" Background=\"{DynamicResource Panel.Background.Level2}\" Effect=\"{StaticResource Shadow.Invariant}\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"7\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Grid.Column=\"0\" Margin=\"0,1,0,0\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"18\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"20\"/>\n                            <ColumnDefinition Width=\"18\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"20\"/>\n                            <ColumnDefinition Width=\"18\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"4\" Grid.ColumnSpan=\"8\" Content=\"{DynamicResource S.Editor.Statistics.General}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <Border Grid.Row=\"0\" Grid.Column=\"0\" Background=\"{StaticResource Vector.Number}\" Height=\"18\" Width=\"18\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.Editor.Statistics.FrameCount}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Text=\"{Binding ElementName=FrameListView, Path=Items.Count}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n                        <Border Grid.Row=\"2\" Grid.Column=\"0\" Background=\"{StaticResource Vector.Clock}\" Height=\"18\" Width=\"18\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"1\" Text=\"{DynamicResource S.Editor.Statistics.TotalDuration}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"1\" Text=\"{Binding ElementName=EditorWindow, Path=TotalDuration, StringFormat='{}{0:mm\\\\:ss\\\\.fff} m'}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n                        <Border Grid.Row=\"0\" Grid.Column=\"3\" Background=\"{StaticResource Vector.WidthHeight}\" Height=\"18\" Width=\"18\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"{DynamicResource S.Editor.Statistics.FrameSize}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"4\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Header}\">\n                            <TextBlock.Text>\n                                <MultiBinding StringFormat=\"{}{0:0.#} × {1:0.#}\">\n                                    <Binding ElementName=\"EditorWindow\" Path=\"FrameSize.Width\" Mode=\"OneWay\"/>\n                                    <Binding ElementName=\"EditorWindow\" Path=\"FrameSize.Height\" Mode=\"OneWay\"/>\n                                </MultiBinding>\n                            </TextBlock.Text>\n                        </TextBlock>\n\n                        <Border Grid.Row=\"2\" Grid.Column=\"3\" Background=\"{StaticResource Vector.Clock}\" Height=\"18\" Width=\"18\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"4\" Text=\"{DynamicResource S.Editor.Statistics.CurrentTime}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Margin=\"5,0\" \n                                   Foreground=\"{DynamicResource Element.Foreground}\" ToolTip=\"{DynamicResource S.Editor.Statistics.CurrentTime.Info}\"/>\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"4\" Text=\"{Binding ElementName=EditorWindow, Path=CurrentTime, StringFormat='{}{0:mm\\\\:ss\\\\.fff} m'}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Header}\" ToolTip=\"{DynamicResource S.Editor.Statistics.CurrentTime.Info}\"/>\n\n                        <Border Grid.Row=\"0\" Grid.Column=\"6\" Background=\"{StaticResource Vector.Fit}\" Height=\"18\" Width=\"18\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"7\" Text=\"{DynamicResource S.Editor.Statistics.FrameDpi}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"7\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Header}\">\n                            <TextBlock.Text>\n                                <MultiBinding StringFormat=\"{}{0} DPI / {1} %\">\n                                    <Binding ElementName=\"EditorWindow\" Path=\"FrameDpi\" Mode=\"OneWay\"/>\n                                    <Binding ElementName=\"EditorWindow\" Path=\"FrameScale\" Mode=\"OneWay\"/>\n                                </MultiBinding>\n                            </TextBlock.Text>\n                        </TextBlock>\n\n                        <Border Grid.Row=\"2\" Grid.Column=\"6\" Background=\"{StaticResource Vector.Delay}\" Height=\"18\" Width=\"18\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"7\" Text=\"{DynamicResource S.Editor.Statistics.AverageDuration}\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"7\" Text=\"{Binding ElementName=EditorWindow, Path=AverageDelay, StringFormat=0.# ms}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" \n                                   Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n                    </Grid>\n\n                    <Separator Grid.Column=\"1\" Grid.Row=\"0\" Width=\"1\" Height=\"Auto\" HorizontalAlignment=\"Left\" Margin=\"3,2\"/>\n\n                    <Grid Grid.Column=\"2\" Margin=\"0,1,0,0\" MinWidth=\"150\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition/>\n                            <RowDefinition Height=\"16\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Label Grid.Column=\"0\" Grid.Row=\"1\" Grid.ColumnSpan=\"2\" Content=\"{DynamicResource S.Editor.Statistics.SelectedFrame}\" \n\t\t\t\t\t\t       HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n\t\t\t\t\t\t       FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                        <Viewbox Grid.Row=\"0\" Grid.Column=\"0\">\n                            <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\">\n                                <n:CircularProgressBar StrokeThickness=\"2\" Percentage=\"100\" SegmentColor=\"Gray\" Radius=\"24\"/>\n                                <n:CircularProgressBar StrokeThickness=\"2\" Maximum=\"10010\" Minimum=\"10\" Value=\"{Binding Delay, UpdateSourceTrigger=PropertyChanged}\" SegmentColor=\"#FFE28A73\" Radius=\"24\"/>\n                                <n:CircularProgressBar StrokeThickness=\"22\" Percentage=\"100\" SegmentColor=\"#FFF0F1F1\" Radius=\"10\" />\n                                <n:CircularProgressBar StrokeThickness=\"22\" Maximum=\"10010\" Minimum=\"10\" Value=\"{Binding Delay, UpdateSourceTrigger=PropertyChanged}\" SegmentColor=\"#FFE28A73\" Radius=\"10\" />\n                            </Grid>\n                        </Viewbox>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Header}\">\n                            <TextBlock.Text>\n                                <MultiBinding StringFormat=\"{}{0} ms\">\n                                    <Binding Path=\"Delay\" Mode=\"OneWay\" FallbackValue=\"0\" UpdateSourceTrigger=\"PropertyChanged\"/>\n                                </MultiBinding>\n                            </TextBlock.Text>\n                        </TextBlock>\n                    </Grid>\n                </Grid>\n            </n:AwareTabItem>\n        </n:HideableTabControl>\n\n        <!--Hack for the extended title bar-->\n        <Grid Grid.Row=\"1\" Grid.RowSpan=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\"/>\n\n        <!--Middle of the Window-->\n        <Grid Grid.Row=\"1\" x:Name=\"MiddleGrid\" Background=\"{StaticResource Checker.DrawingBrush}\" IsEnabled=\"{Binding Path=IsLoading, ElementName=EditorWindow, Converter={StaticResource InvertedBoolConverter}}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:StatusList Grid.Row=\"0\" x:Name=\"StatusList\"/>\n\n            <!--Overlay behind the image-->\n            <ScrollViewer Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"BehindScrollViewer\" VerticalScrollBarVisibility=\"Hidden\" HorizontalScrollBarVisibility=\"Hidden\" Visibility=\"{Binding Path=Visibility, ElementName=OverlayGrid}\">\n                <Grid x:Name=\"BehindGrid\" Opacity=\"{Binding ElementName=OverlayGrid, Path=Opacity, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\">\n                    <!--Border-->\n                    <Grid x:Name=\"BorderPreviewGrid\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                          Visibility=\"{Binding ElementName=BorderGrid, Path=Visibility}\" Background=\"White\">\n                        <Border x:Name=\"BorderBehindOverlayBorder\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                                MinWidth=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                                MinHeight=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                                BorderBrush=\"{Binding ElementName=BorderColorBox, Path=SelectedBrush}\">\n                            <Border.BorderThickness>\n                                <MultiBinding Converter=\"{StaticResource DoubleToThicknessConverter}\" ConverterParameter=\"-\">\n                                    <Binding ElementName=\"BorderLeftThicknessNumericUpDown\" Path=\"Value\"/>\n                                    <Binding ElementName=\"BorderTopThicknessNumericUpDown\" Path=\"Value\"/>\n                                    <Binding ElementName=\"BorderRightThicknessNumericUpDown\" Path=\"Value\"/>\n                                    <Binding ElementName=\"BorderBottomThicknessNumericUpDown\" Path=\"Value\"/>\n                                </MultiBinding>\n                            </Border.BorderThickness>\n                        </Border>\n                    </Grid>\n\n                    <!--Shadow Previewer-->\n                    <Grid x:Name=\"ShadowPreviewGrid\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                          Visibility=\"{Binding ElementName=ShadowGrid, Path=Visibility}\"\n                          Background=\"{Binding ElementName=ShadowBackgroundColorBox, Path=SelectedBrush, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\">\n                        <Grid x:Name=\"ShadowInternalGrid\" Background=\"White\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\n                              Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                              Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\">\n                            <Grid.Effect>\n                                <DropShadowEffect Color=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowColor, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" \n                                                  BlurRadius=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowBlurRadius, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                  Direction=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowDirection, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                  Opacity=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowOpacity, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                  ShadowDepth=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowDepth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                            </Grid.Effect>\n                        </Grid>\n                    </Grid>\n                </Grid>\n            </ScrollViewer>\n\n            <n:ZoomBox Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"ZoomBoxControl\" Background=\"Transparent\" ClipToBounds=\"True\" Focusable=\"False\" IsTabStop=\"False\"\n                       AllowDrop=\"True\" Drop=\"Control_Drop\" DragEnter=\"Control_DragEnter\" MouseLeftButtonUp=\"ZoomBoxControl_MouseLeftButtonUp\" PreviewMouseWheel=\"ZoomBox_MouseWheel\">\n                <n:ZoomBox.ContextMenu>\n                    <ContextMenu>\n                        <n:ExtendedMenuItem x:Name=\"PlayMenuItem\" Header=\"{DynamicResource S.Editor.Playback.Play}\" Icon=\"{StaticResource Vector.Play}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.Play}\"\n                                            InputGestureText=\"{DynamicResource S.Keys.Space}\"/>\n                        <Separator/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Editor.Home.Undo}\" Icon=\"{StaticResource Vector.Undo}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.Undo}\"/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Editor.Home.Redo}\" Icon=\"{StaticResource Vector.Redo}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.Redo}\"/>\n                        <Separator/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.SaveAs}\" Icon=\"{StaticResource Vector.Gif}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.SaveAs}\"/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Recorder.Discard}\" Icon=\"{StaticResource Vector.Remove}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.DiscardProject}\"/>\n                        <Separator/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.RemoveFrames}\" Icon=\"{StaticResource Vector.RemoveImage}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.Delete}\"/>\n                    </ContextMenu>\n                </n:ZoomBox.ContextMenu>\n            </n:ZoomBox>\n\n            <!--Overlay on top of the image-->\n            <ScrollViewer Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"MainScrollViewer\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\" \n                          PreviewMouseWheel=\"ZoomBox_MouseWheel\" Visibility=\"{Binding Path=Visibility, ElementName=OverlayGrid}\">\n                <Grid x:Name=\"OverlayGrid\" Visibility=\"Collapsed\" Opacity=\"0\">\n\n                    <Label x:Name=\"OverlayLabel\" Content=\"{DynamicResource S.Preview}\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" \n                           FontSize=\"16\" FontWeight=\"Light\" Foreground=\"#FF347E4B\" Effect=\"{StaticResource Shadow.Border.Small}\"/>\n\n                    <AdornerDecorator Visibility=\"{Binding ElementName=CropGrid, Path=Visibility}\">\n                        <Grid x:Name=\"CropAreaGrid\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                              Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                              Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                              Visibility=\"{Binding ElementName=CropGrid, Path=Visibility}\"/>\n                    </AdornerDecorator>\n\n                    <Grid x:Name=\"CaptionOverlayGrid\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\"\n                          Visibility=\"{Binding ElementName=CaptionGrid, Path=Visibility}\">\n                        <n:TextPath x:Name=\"CaptionOverlayLabel\" FontFamily=\"{Binding ElementName=CaptionFontComboBox, Path=SelectedItem}\" \n                                    FontStyle=\"{Binding ElementName=CaptionFontStyleComboBox, Path=SelectedValue}\"\n                                    FontWeight=\"{Binding ElementName=CaptionFontWeightComboBox, Path=SelectedValue}\"\n                                    FontSize=\"{Binding ElementName=CaptionFontSizeNumericUpDown, Path=Value}\"\n                                    Fill=\"{Binding ElementName=CaptionFontColorBox, Path=SelectedBrush}\"\n                                    Stroke=\"{Binding ElementName=CaptionOutlineColorBox, Path=SelectedBrush}\"\n                                    StrokeThickness=\"{Binding ElementName=CaptionOutlineThicknessNumericUpDown, Path=Value}\"\n                                    VerticalAlignment=\"{Binding ElementName=CaptionVerticalAligmentComboBox, Path=SelectedValue}\"\n                                    HorizontalAlignment=\"{Binding ElementName=CaptionHorizontalAligmentComboBox, Path=SelectedValue}\"\n                                    Margin=\"{Binding ElementName=CaptionMarginNumericUpDown, Path=Value}\"\n                                    Text=\"{Binding ElementName=CaptionTextBox, Path=Text}\"/>\n                    </Grid>\n\n                    <n:MoveResizeControl x:Name=\"FreeTextOverlayControl\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\"\n                                         Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\"\n                                         Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                                         Visibility=\"{Binding ElementName=FreeTextGrid, Path=Visibility}\">\n                        <TextBlock x:Name=\"FreeTextTextBlock\" Padding=\"0\"\n                                   Text=\"{Binding ElementName=FreeTextTextBox, Path=Text}\" \n                                   TextAlignment=\"{Binding ElementName=FreeTextTextAlignmentComboBox, Path=SelectedValue}\" \n                                   TextDecorations=\"{Binding ElementName=FreeTextTextDecorationComboBox, Path=SelectedValue}\"\n                                   FontFamily=\"{Binding ElementName=FreeTextFontComboBox, Path=SelectedItem}\" \n                                   FontStyle=\"{Binding ElementName=FreeTextFontStyleComboBox, Path=SelectedValue}\"\n                                   FontWeight=\"{Binding ElementName=FreeTextFontWeightComboBox, Path=SelectedValue}\"\n                                   FontSize=\"{Binding ElementName=FreeTextFontSizeNumericUpDown, Path=Value}\"\n                                   Foreground=\"{Binding ElementName=FreeTextFontColorBox, Path=SelectedBrush}\"\n                                   Background=\"{Binding ElementName=FreeTextBackgroundColorBox, Path=SelectedBrush}\">\n\n                            <TextBlock.Resources>\n                                <c:DoubleToBool x:Key=\"DoubleToBool\"/>\n                                <DropShadowEffect x:Key=\"DropShadowEffect\" \n                                                  Color=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowColor, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" \n                                                  BlurRadius=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowBlurRadius, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" \n                                                  Direction=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowDirection, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" \n                                                  Opacity=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowOpacity, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" \n                                                  ShadowDepth=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowDepth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" />\n                            </TextBlock.Resources>\n\n                            <TextBlock.Style>\n                                <Style>\n                                    <Style.Triggers>\n                                        <DataTrigger Binding=\"{Binding ElementName=FreeTextTextAlignmentComboBox, Path=SelectedValue}\" Value=\"Justify\">\n                                            <Setter Property=\"TextBlock.TextWrapping\" Value=\"Wrap\"/>\n                                            <Setter Property=\"TextBlock.Width\" Value=\"{Binding ElementName=FreeTextWidthNumericUpDown, Path=Value}\"/>\n                                        </DataTrigger>\n\n                                        <DataTrigger Binding=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowOpacity, Converter={StaticResource DoubleToBool}, ConverterParameter=0, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\" Value=\"False\">\n                                            <Setter Property=\"TextBlock.Effect\" Value=\"{StaticResource DropShadowEffect}\"/>\n                                        </DataTrigger>\n                                    </Style.Triggers>\n\n                                    <Style.Setters>\n                                        <Setter Property=\"TextBlock.TextWrapping\" Value=\"NoWrap\"/>\n                                        <Setter Property=\"TextBlock.Width\" Value=\"Auto\"/>\n                                        <Setter Property=\"TextBlock.Effect\" Value=\"{x:Null}\"/>\n                                    </Style.Setters>\n                                </Style>\n                            </TextBlock.Style>\n                        </TextBlock>\n                    </n:MoveResizeControl>\n\n                    <Grid x:Name=\"TitleFrameOverlayGrid\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\"\n                          Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                          Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                          Visibility=\"{Binding ElementName=TitleFrameGrid, Path=Visibility}\" \n                          Background=\"{Binding ElementName=TitleFrameBackgroundColorBox, Path=SelectedBrush}\">\n                        <TextBlock x:Name=\"TitleFrameTextBlock\" Padding=\"0\"\n                                   Text=\"{Binding ElementName=TitleFrameTextBox, Path=Text}\" \n                                   FontFamily=\"{Binding ElementName=TitleFrameFontComboBox, Path=SelectedItem}\" \n                                   FontStyle=\"{Binding ElementName=TitleFrameFontStyleComboBox, Path=SelectedValue}\"\n                                   FontWeight=\"{Binding ElementName=TitleFrameFontWeightComboBox, Path=SelectedValue}\"\n                                   FontSize=\"{Binding ElementName=TitleFrameFontSizeNumericUpDown, Path=Value}\"\n                                   Foreground=\"{Binding ElementName=TitleFrameFontColorBox, Path=SelectedBrush}\"\n                                   VerticalAlignment=\"{Binding ElementName=TitleFrameVerticalAligmentComboBox, Path=SelectedValue}\"\n                                   HorizontalAlignment=\"{Binding ElementName=TitleFrameHorizontalAligmentComboBox, Path=SelectedValue}\"\n                                   Margin=\"{Binding ElementName=TitleFrameMarginNumericUpDown, Path=Value}\"/>\n                    </Grid>\n\n                    <Grid x:Name=\"KeyStrokesOverlayGrid\" ClipToBounds=\"True\"\n                          Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                          Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\"\n                          Visibility=\"{Binding ElementName=KeyStrokesGrid, Path=Visibility}\">\n                        <Grid x:Name=\"KeyStrokesInternalGrid\" HorizontalAlignment=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesHorizontalAligment}\" \n                              VerticalAlignment=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesVerticalAligment}\"\n                              Background=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesBackgroundColor, Converter={StaticResource ColorToBrush}}\"\n                              Margin=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesMargin}\"\n                              MinHeight=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesMinHeight}\">\n                            <n:TextPath x:Name=\"KeyStrokesLabel\" Text=\"Control + C\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                                        FontFamily=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontFamily}\" \n                                        FontStyle=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontStyle}\"\n                                        FontWeight=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontWeight}\"\n                                        FontSize=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontSize}\"\n                                        Fill=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontColor, Converter={StaticResource ColorToBrush}}\"\n                                        Stroke=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesOutlineColor, Converter={StaticResource ColorToBrush}}\"\n                                        StrokeThickness=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesOutlineThickness}\"\n                                        Margin=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesPadding}\"/>\n                        </Grid>\n                    </Grid>\n\n                    <n:InkCanvasExtended x:Name=\"FreeDrawingInkCanvas\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\"\n                                         Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" MinWidth=\"10\" \n                                         Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\" MinHeight=\"10\"\n                                         Visibility=\"{Binding ElementName=FreeDrawingGrid, Path=Visibility}\" Background=\"Transparent\"\n                                         EditingMode=\"{Binding FreeDrawingEditingMode, Mode=TwoWay}\" DefaultDrawingAttributes=\"{Binding FreeDrawingDrawingAttributes, Mode=OneWay}\"\n                                         EraserShapeDependency=\"{Binding FreeDrawingEraserShape, Mode=OneWay}\" Cursor=\"{Binding FreeDrawingCursor, Mode=OneWay}\" ForceCursor=\"{Binding FreeDrawingForceCursor, Mode=OneWay}\"\n                                         PreviewKeyDown=\"InkCanvas_PreviewKeyDown\"/>\n\n                    <n:DrawingCanvas x:Name=\"ShapeDrawingCanvas\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\" DrawingMode=\"Shape\"\n                                     Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" MinWidth=\"10\" CurrentShape=\"Arrow\"\n                                     Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\" MinHeight=\"10\"\n                                     Visibility=\"{Binding ElementName=ShapesGrid, Path=Visibility}\" Background=\"Transparent\"/>\n\n                    <n:MoveResizeControl x:Name=\"WatermarkOverlayCanvas\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\" CanResize=\"True\"\n                                         Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                                         Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                                         Visibility=\"{Binding ElementName=WatermarkGrid, Path=Visibility}\"\n                                         Top=\"{Binding ElementName=TopWatermarkDoubleUpDown, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}\"\n                                         Left=\"{Binding ElementName=LeftWatermarkDoubleUpDown, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}\"\n                                         ContentScale=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkSize}\">\n                        <Image x:Name=\"WatermarkImage\" Stretch=\"Fill\" RenderTransformOrigin=\"0.5,0.5\"\n                               Source=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkFilePath, Converter={StaticResource UriToBitmapConverter}}\"\n                               Opacity=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkOpacity}\"/>\n                    </n:MoveResizeControl>\n\n                    <Border x:Name=\"BorderPositiveOverlayBorder\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                            Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                            Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                            BorderBrush=\"{Binding ElementName=BorderColorBox, Path=SelectedBrush}\"\n                            Visibility=\"{Binding ElementName=BorderGrid, Path=Visibility}\">\n                        <Border.BorderThickness>\n                            <MultiBinding Converter=\"{StaticResource DoubleToThicknessConverter}\" ConverterParameter=\"+\">\n                                <Binding ElementName=\"BorderLeftThicknessNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"BorderTopThicknessNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"BorderRightThicknessNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"BorderBottomThicknessNumericUpDown\" Path=\"Value\"/>\n                            </MultiBinding>\n                        </Border.BorderThickness>\n\n                        <!--<Border.CornerRadius>\n                            <MultiBinding Converter=\"{StaticResource DoubleToRadiusConverter}\">\n                                <Binding ElementName=\"BorderLeftRadiusNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"BorderTopRadiusNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"BorderRightRadiusNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"BorderBottomRadiusNumericUpDown\" Path=\"Value\"/>\n                            </MultiBinding>\n                        </Border.CornerRadius>-->\n                    </Border>\n\n                    <n:SelectControlOld x:Name=\"ObfuscateOverlaySelectControl\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                                     Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" \n                                     Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\"\n                                     Visibility=\"{Binding ElementName=ObfuscateGrid, Path=Visibility}\" EmbeddedMode=\"True\"/>\n\n                    <Grid x:Name=\"ProgressOverlayGrid\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\"\n                          Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" MinWidth=\"10\" \n                          Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\" MinHeight=\"10\"\n                          Visibility=\"{Binding ElementName=ProgressGrid, Path=Visibility}\" Background=\"Transparent\">\n\n                        <Grid Visibility=\"{Binding ProgressType, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:ProgressTypes.Bar}}\">\n                            <Rectangle Name=\"ProgressHorizontalRectangle\" Height=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressThickness}\"\n                                       Visibility=\"{Binding ProgressOrientation, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static Orientation.Horizontal}}\"\n                                       Fill=\"{Binding ProgressColor, Source={x:Static t:UserSettings.All}, Converter={StaticResourceExtension ColorToBrush}}\" \n                                       VerticalAlignment=\"{Binding ProgressVerticalAligment, Source={x:Static t:UserSettings.All}}\" \n                                       HorizontalAlignment=\"{Binding ProgressHorizontalAligment, Source={x:Static t:UserSettings.All}}\"/>\n\n                            <Rectangle Name=\"ProgressVerticalRectangle\" Width=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressThickness}\"\n                                       Visibility=\"{Binding ProgressOrientation, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static Orientation.Vertical}}\"\n                                       Fill=\"{Binding ProgressColor, Source={x:Static t:UserSettings.All}, Converter={StaticResourceExtension ColorToBrush}}\" \n                                       VerticalAlignment=\"{Binding ProgressVerticalAligment, Source={x:Static t:UserSettings.All}}\" \n                                       HorizontalAlignment=\"{Binding ProgressHorizontalAligment, Source={x:Static t:UserSettings.All}}\"/>\n                        </Grid>\n\n                        <TextBlock Name=\"ProgressHorizontalTextBlock\" Padding=\"2,0\" \n                                   Background=\"{Binding ProgressColor, Source={x:Static t:UserSettings.All}, Converter={StaticResourceExtension ColorToBrush}}\" \n                                   Foreground=\"{Binding ProgressFontColor, Source={x:Static t:UserSettings.All}, Converter={StaticResourceExtension ColorToBrush}}\" \n                                   VerticalAlignment=\"{Binding ProgressVerticalAligment, Source={x:Static t:UserSettings.All}}\" \n                                   HorizontalAlignment=\"{Binding ProgressHorizontalAligment, Source={x:Static t:UserSettings.All}}\"\n                                   Visibility=\"{Binding ProgressType, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToVisibility}, ConverterParameter={x:Static e:ProgressTypes.Text}}\"\n                                   FontFamily=\"{Binding ElementName=ProgressFontComboBox, Path=SelectedItem}\" \n                                   FontStyle=\"{Binding ElementName=ProgressFontStyleComboBox, Path=SelectedValue}\"\n                                   FontWeight=\"{Binding ElementName=ProgressFontWeightComboBox, Path=SelectedValue}\"\n                                   FontSize=\"{Binding ElementName=ProgressFontSizeNumericUpDown, Path=Value}\"/>\n                    </Grid>\n\n                    <n:InkCanvasExtended x:Name=\"CinemagraphInkCanvas\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ClipToBounds=\"True\"\n                                         Width=\"{Binding ElementName=CaptionOverlayGrid, Path=Width, FallbackValue=0}\" MinWidth=\"10\" \n                                         Height=\"{Binding ElementName=CaptionOverlayGrid, Path=Height, FallbackValue=0}\" MinHeight=\"10\"\n                                         Visibility=\"{Binding ElementName=CinemagraphGrid, Path=Visibility}\" Background=\"Transparent\"\n                                         PreviewKeyDown=\"InkCanvas_PreviewKeyDown\">\n\n                        <n:InkCanvasExtended.EditingMode>\n                            <MultiBinding Converter=\"{StaticResource SelectionToEditingModeConverter}\">\n                                <Binding ElementName=\"PenMode2RadioButton\" Path=\"IsChecked\"/>\n                                <Binding ElementName=\"EraserMode2RadioButton\" Path=\"IsChecked\"/>\n                                <Binding ElementName=\"SelectorMode2RadioButton\" Path=\"IsChecked\"/>\n                            </MultiBinding>\n                        </n:InkCanvasExtended.EditingMode>\n\n                        <n:InkCanvasExtended.DefaultDrawingAttributes>\n                            <MultiBinding Converter=\"{StaticResource SelectionToDrawingAttributesConverter}\">\n                                <Binding ElementName=\"CinemagraphHeightNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"CinemagraphWidthNumericUpDown\" Path=\"Value\"/>\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CinemagraphColor\"/>\n                                <Binding ElementName=\"FitToCurve2CheckBox\" Path=\"IsChecked\"/>\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CinemagraphIsHighlighter\"/>\n                                <Binding ElementName=\"Rectangle2RadioButton\" Path=\"IsChecked\"/>\n                            </MultiBinding>\n                        </n:InkCanvasExtended.DefaultDrawingAttributes>\n\n                        <n:InkCanvasExtended.EraserShapeDependency>\n                            <MultiBinding Converter=\"{StaticResource SelectionToStylusShapeConverter}\">\n                                <Binding ElementName=\"CinemagraphEraserWidthNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"CinemagraphEraserHeightNumericUpDown\" Path=\"Value\"/>\n                                <Binding ElementName=\"RectangleEraser2RadioButton\" Path=\"IsChecked\"/>\n                            </MultiBinding>\n                        </n:InkCanvasExtended.EraserShapeDependency>\n                    </n:InkCanvasExtended>\n                </Grid>\n            </ScrollViewer>\n\n            <Grid Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"WelcomeGrid\" Background=\"{DynamicResource Panel.Background.Level3}\" Visibility=\"Visible\" AllowDrop=\"True\" Drop=\"Control_Drop\" DragEnter=\"Control_DragEnter\">\n                <Grid.ContextMenu>\n                    <ContextMenu>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.NewRecording}\" Icon=\"{StaticResource Vector.Record.New}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.NewRecording}\"/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.NewWebcamRecording}\" Icon=\"{StaticResource Vector.Camera.New}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.NewWebcamRecording}\"/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.NewBoardRecording}\" Icon=\"{StaticResource Vector.Board.New}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.NewBoardRecording}\"/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.NewBlankAnimation}\" Icon=\"{StaticResource Vector.File.New}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.NewAnimation}\"/>\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Context.NewFromMediaProject}\" Icon=\"{StaticResource Vector.Open}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.Load}\"/>\n                    </ContextMenu>\n                </Grid.ContextMenu>\n\n                <StackPanel HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                    <TextBlock FontSize=\"28\" Foreground=\"{DynamicResource Element.Foreground.Gray192}\" FontFamily=\"{DynamicResource FontFamilyLight}\" HorizontalAlignment=\"Center\" Effect=\"{StaticResource Shadow.Background.Tiny}\"\n                               Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=VersionText, StringFormat=ScreenToGif {0}}\"/>\n\n                    <Separator Height=\"1\"/>\n\n                    <TextBlock x:Name=\"WelcomeTextBlock\" FontSize=\"16\" Foreground=\"{DynamicResource Element.Foreground.Gray192}\" FontFamily=\"{DynamicResource FontFamilyLight}\" HorizontalAlignment=\"Center\" \n                               TextWrapping=\"Wrap\" Effect=\"{StaticResource Shadow.Background.Tiny}\"/>\n\n                    <!--<TextBlock FontSize=\"16\" FontFamily=\"{DynamicResource FontFamilyLight}\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray192}\" Effect=\"{StaticResource Shadow.Border.Small}\">\n                        <Hyperlink Command=\"{StaticResource Command.LoadRecent}\" Cursor=\"Hand\" TextDecorations=\"{x:Null}\">\n                            <Run>Open recent projects...</Run>\n                        </Hyperlink>\n                    </TextBlock>-->\n\n                    <TextBlock x:Name=\"SymbolTextBlock\" Text=\":D\" Foreground=\"{DynamicResource Element.Foreground.Gray208}\" FontSize=\"40\" FontFamily=\"{DynamicResource FontFamilyLight}\"\n                               TextWrapping=\"WrapWithOverflow\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Effect=\"{StaticResource Shadow.Background.Tiny}\"/>\n\n                    <!--New update available-->\n                    <StackPanel x:Name=\"UpdateStackPanel\" HorizontalAlignment=\"Center\" Margin=\"0,30,0,0\" Visibility=\"Collapsed\">\n                        <Separator Height=\"1\"/>\n\n                        <TextBlock FontSize=\"18\" FontFamily=\"{DynamicResource FontFamilyLight}\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray192}\" \n                                   Effect=\"{StaticResource Shadow.Background.Tiny}\" Margin=\"3\" ToolTip=\"{DynamicResource S.Editor.UpdateAvailable.Info}\">\n                            <Hyperlink Command=\"{Binding Source={StaticResource AppViewModel}, Path=PromptUpdate}\" Cursor=\"Hand\" TextDecorations=\"{x:Null}\">\n                                <Run Text=\"{DynamicResource S.Editor.UpdateAvailable}\"/>\n                            </Hyperlink>\n                        </TextBlock>\n\n                        <TextBlock FontSize=\"14\" Foreground=\"{DynamicResource Element.Foreground.Gray192}\" FontFamily=\"{DynamicResource FontFamilyLight}\" \n                                   Effect=\"{StaticResource Shadow.Background.Tiny}\" HorizontalAlignment=\"Center\" TextAlignment=\"Center\">\n                            <Run Text=\"{DynamicResource S.Updater.Version}\" FontSize=\"18\"/>\n                            <Run Name=\"UpdateVersionRun\" Text=\"2.22\" FontSize=\"18\"/>\n                            <LineBreak/>\n                            <Run Name=\"UpdateSizeRun\" Text=\"800 KB\" FontSize=\"16\"/>\n                        </TextBlock>\n                    </StackPanel>\n                </StackPanel>\n            </Grid>\n\n            <Grid Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" x:Name=\"ActionGrid\" Width=\"0\" Background=\"{DynamicResource Panel.Background.Level2}\" Effect=\"{StaticResource Shadow.Border}\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"30\"/>\n                    <RowDefinition Height=\"*\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n\n                <!--Title-->\n                <Grid Grid.Row=\"0\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"30\"/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition Width=\"30\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Border Grid.Column=\"0\" x:Name=\"ActionIconBorder\" Margin=\"5,3,0,3\" Width=\"20\" Height=\"20\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                    <TextBlock Grid.Column=\"1\" x:Name=\"ActionTitleTextBlock\" Text=\"Title\" Padding=\"5,0,0,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                    <n:ExtendedButton Grid.Column=\"2\" x:Name=\"HideButton\" Icon=\"{DynamicResource Vector.Close}\" ContentHeight=\"16\" ContentWidth=\"16\" HorizontalContentAlignment=\"Center\" \n                                      HorizontalAlignment=\"Center\" Style=\"{DynamicResource Style.Button.NoText}\" MinWidth=\"30\" Command=\"{StaticResource Command.Cancel}\"\n                                      ToolTip=\"{DynamicResource S.Action.Hide}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n                </Grid>\n\n                <!--Content-->\n                <ScrollViewer Grid.Row=\"1\" x:Name=\"ActionScrollViewer\" VerticalScrollBarVisibility=\"Auto\">\n                    <Grid x:Name=\"ActionInternalGrid\">\n                        <ContentControl x:Name=\"CustomContentControl\" Visibility=\"Collapsed\" Focusable=\"False\" IsTabStop=\"False\"/>\n\n                        <Grid x:Name=\"NewGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Size}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.ImportVideo.Width}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"NewImageWidthNumericUpDown\" Minimum=\"10\" Maximum=\"2000\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=NewAnimationWidth, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.ImportVideo.Height}\" VerticalAlignment=\"Center\" Padding=\"0\"  Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"NewImageHeightNumericUpDown\" Minimum=\"10\" Maximum=\"2000\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=NewAnimationHeight, Mode=TwoWay}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Background}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Color}\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" SelectedColor=\"{Binding NewAnimationColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"5,3\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"LoadRecentGrid\" Visibility=\"Collapsed\" Height=\"{Binding ElementName=ActionScrollViewer, Path=ActualHeight, FallbackValue=100}\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"*\"/>\n                            </Grid.RowDefinitions>\n\n                            <!--Two buttons modes: thumbnail, flat list-->\n                            <!--Save mode-->\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Recent.Projects}\" Margin=\"5,0\" Padding=\"0,5\"/>\n                            <DataGrid Grid.Row=\"1\" x:Name=\"RecentDataGrid\" Margin=\"10,5,5,5\" MinHeight=\"60\" SelectionMode=\"Single\" SelectionUnit=\"FullRow\" \n                                      MouseDoubleClick=\"RecentDataGrid_MouseDoubleClick\" PreviewKeyDown=\"RecentDataGrid_PreviewKeyDown\">\n                                <DataGrid.Columns>\n                                    <DataGridTextColumn Header=\"{DynamicResource S.Recent.Date}\" Width=\"*\" IsReadOnly=\"True\" Binding=\"{Binding Path=CreationDate, UpdateSourceTrigger=PropertyChanged, StringFormat='{}{0:G}', ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}\"/>\n                                    <DataGridTextColumn Header=\"{DynamicResource S.Recent.Frames}\" Width=\"100\" IsReadOnly=\"True\" Binding=\"{Binding Path=Frames.Count, UpdateSourceTrigger=PropertyChanged}\"/>\n                                </DataGrid.Columns>\n                            </DataGrid>\n                        </Grid>\n\n                        <Grid x:Name=\"ClipboardGrid\" Visibility=\"Collapsed\" Height=\"{Binding ElementName=ActionScrollViewer, Path=ActualHeight, FallbackValue=100}\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"*\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Clipboard.Entries}\"/>\n                            <ListBox Grid.Row=\"1\" x:Name=\"ClipboardListBox\" Margin=\"10,5,5,5\" MinHeight=\"60\" VerticalAlignment=\"Stretch\" ScrollViewer.HorizontalScrollBarVisibility=\"Disabled\">\n                                <ListBox.Resources>\n                                    <ContextMenu x:Key=\"ClipboardContextMenu\">\n                                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Clipboard.Entry}\" Icon=\"{StaticResource Vector.Paste}\" ContentHeight=\"16\" ContentWidth=\"16\" IsHitTestVisible=\"False\"/>\n                                        <Separator/>\n                                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Clipboard.Explore}\" Icon=\"{StaticResource Vector.Open}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.ExploreClipboard}\"/>\n                                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Clipboard.Remove}\" Icon=\"{StaticResource Vector.Remove}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.RemoveClipboardEntry}\"/>\n                                    </ContextMenu>\n                                </ListBox.Resources>\n\n                                <ListBox.ItemContainerStyle>\n                                    <Style TargetType=\"ListBoxItem\">\n                                        <Setter Property=\"ContextMenu\" Value=\"{StaticResource ClipboardContextMenu}\"/>\n                                    </Style>\n                                </ListBox.ItemContainerStyle>\n                            </ListBox>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Clipboard.Behavior}\"/>\n                            <RadioButton Grid.Row=\"3\" x:Name=\"PasteBeforeRadioButton\" Content=\"{DynamicResource S.Clipboard.Before}\" Margin=\"10,5,5,5\" \n                                         IsChecked=\"{Binding PasteBehavior, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:PasteBehaviors.BeforeSelected}}\"/>\n                            <RadioButton Grid.Row=\"4\" x:Name=\"PasteAfterRadioButton\" Content=\"{DynamicResource S.Clipboard.After}\" Margin=\"10,5,5,5\"\n                                         IsChecked=\"{Binding PasteBehavior, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:PasteBehaviors.AfterSelected}}\"/>\n                        </Grid>\n\n                        <o:ResizePanel x:Name=\"ResizePanel\" Visibility=\"Collapsed\"/>\n                        \n                        <Grid x:Name=\"CropGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Preview}\"/>\n                            <Image Grid.Row=\"1\" x:Name=\"CropImage\" Height=\"120\" Stretch=\"Uniform\" Margin=\"10,5,5,5\" Effect=\"{StaticResource Shadow.Border.Large}\"/>\n                            <TextBlock Grid.Row=\"2\" x:Name=\"CropSizeTextBlock\" Text=\"0 × 0\" HorizontalAlignment=\"Center\" Padding=\"2\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                            <n:LabelSeparator Grid.Row=\"3\" Text=\"{DynamicResource S.Crop.Points}\"/>\n                            <Grid Grid.Row=\"4\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Top}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TopCropNumericUpDown\" Minimum=\"0\" Margin=\"10,3\" MinWidth=\"70\"\n                                                 ValueChanged=\"CropIntegerUpDown_ValueChanged\">\n                                    <n:IntegerUpDown.Maximum>\n                                        <MultiBinding Converter=\"{StaticResource MaximumValueConverter}\" Mode=\"OneWay\">\n                                            <Binding RelativeSource=\"{RelativeSource Mode=Self}\" Path=\"Minimum\" FallbackValue=\"0\"/>\n                                            <Binding ElementName=\"BottomCropNumericUpDown\" Path=\"Value\" />\n                                            <Binding ElementName=\"BottomCropNumericUpDown\" Path=\"Minimum\" FallbackValue=\"0\"/>\n                                        </MultiBinding>\n                                    </n:IntegerUpDown.Maximum>\n                                </n:IntegerUpDown>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Left}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"LeftCropNumericUpDown\" Minimum=\"0\" Margin=\"10,3\" MinWidth=\"70\"\n                                                 ValueChanged=\"CropIntegerUpDown_ValueChanged\">\n                                    <n:IntegerUpDown.Maximum>\n                                        <MultiBinding Converter=\"{StaticResource MaximumValueConverter}\" Mode=\"OneWay\">\n                                            <Binding RelativeSource=\"{RelativeSource Mode=Self}\" Path=\"Minimum\" FallbackValue=\"0\"/>\n                                            <Binding ElementName=\"RightCropNumericUpDown\" Path=\"Value\" />\n                                            <Binding ElementName=\"RightCropNumericUpDown\" Path=\"Minimum\" FallbackValue=\"0\"/>\n                                        </MultiBinding>\n                                    </n:IntegerUpDown.Maximum>\n                                </n:IntegerUpDown>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Bottom}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"BottomCropNumericUpDown\" Minimum=\"10\" Margin=\"10,3\" \n                                                 MinWidth=\"70\" ValueChanged=\"CropIntegerUpDown_ValueChanged\">\n                                    <n:IntegerUpDown.Maximum>\n                                        <MultiBinding Converter=\"{StaticResource MaximumValueConverter}\">\n                                            <Binding RelativeSource=\"{RelativeSource Mode=Self}\" Path=\"Minimum\" FallbackValue=\"0\"/>\n                                            <Binding ElementName=\"CropAreaGrid\" Path=\"Height\" FallbackValue=\"0\"/>\n                                            <!--<Binding ElementName=\"TopCropNumericUpDown\" Path=\"Value\" FallbackValue=\"0\"/>-->\n                                        </MultiBinding>\n                                    </n:IntegerUpDown.Maximum>\n                                </n:IntegerUpDown>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Right}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"RightCropNumericUpDown\" Minimum=\"10\" Margin=\"10,3\" \n                                                 MinWidth=\"70\" ValueChanged=\"CropIntegerUpDown_ValueChanged\">\n                                    <n:IntegerUpDown.Maximum>\n                                        <MultiBinding Converter=\"{StaticResource MaximumValueConverter}\" Mode=\"OneWay\">\n                                            <Binding RelativeSource=\"{RelativeSource Mode=Self}\" Path=\"Minimum\" FallbackValue=\"0\"/>\n                                            <Binding ElementName=\"CropAreaGrid\" Path=\"Width\" FallbackValue=\"0\"/>\n                                            <!--<Binding ElementName=\"LeftCropNumericUpDown\" Path=\"Value\" FallbackValue=\"0\"/>-->\n                                        </MultiBinding>\n                                    </n:IntegerUpDown.Maximum>\n                                </n:IntegerUpDown>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"FlipRotateGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Editor.Image.FlipRotate}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0\" HorizontalAlignment=\"Center\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" x:Name=\"FlipHorizontalRadioButton\" Text=\"{DynamicResource S.FlipRotate.FlipHorizontal}\"\n                                                       Icon=\"{StaticResource Vector.FlipHorizontal}\" Cursor=\"Hand\" ContentWidth=\"25\" ContentHeight=\"25\" Padding=\"0,5\"\n                                                       IsChecked=\"True\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"1\" x:Name=\"FlipVerticalRadioButton\" Text=\"{DynamicResource S.FlipRotate.FlipVertical}\"\n                                                       Icon=\"{StaticResource Vector.FlipVertical}\" Cursor=\"Hand\" ContentWidth=\"25\" ContentHeight=\"25\" Padding=\"0,5\"/>\n\n\n                                <n:ExtendedRadioButton Grid.Row=\"2\" x:Name=\"RotateLeftRadioButton\" Text=\"{DynamicResource S.FlipRotate.RotateLeft}\"\n                                                       Icon=\"{StaticResource Vector.RotateLeft90}\" Cursor=\"Hand\" ContentWidth=\"25\" ContentHeight=\"25\" Padding=\"0,5\"/>\n\n\n                                <n:ExtendedRadioButton Grid.Row=\"3\" x:Name=\"RotateRightRadioButton\" Text=\"{DynamicResource S.FlipRotate.RotateRight}\"\n                                                       Icon=\"{StaticResource Vector.RotateRight90}\" Cursor=\"Hand\" ContentWidth=\"25\" ContentHeight=\"25\" Padding=\"0,5\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"CaptionGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Caption.Text}\"/>\n                            <n:ExtendedTextBox Grid.Row=\"1\" x:Name=\"CaptionTextBox\" Margin=\"10,5,5,5\" AcceptsReturn=\"True\" AcceptsTab=\"True\"\n                                               Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionText}\"/>\n\n                            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsCaptionFontGroupExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CaptionFontComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                                              ItemTemplate=\"{DynamicResource FontTemplate}\" SelectedItem=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionFontFamily}\">\n                                        <ComboBox.ItemsSource>\n                                            <Binding Source=\"{StaticResource MyFonts}\"/>\n                                        </ComboBox.ItemsSource>\n\n                                        <ComboBox.ItemsPanel>\n                                            <ItemsPanelTemplate>\n                                                <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                                            </ItemsPanelTemplate>\n                                        </ComboBox.ItemsPanel>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"CaptionFontStyleComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontStyle\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionFontStyle}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                                        <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                                        <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"CaptionFontWeightComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontWeight\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionFontWeight}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\" />\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                                        <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                                        <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                                        <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                                        <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                                        <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                                        <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                                        <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                                        <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                                        <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                                        <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                                        <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                                        <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                                        <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                                        <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                                        <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"CaptionFontSizeNumericUpDown\" Minimum=\"10\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionFontSize, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"CaptionFontColorBox\" Margin=\"10,5\"\n                                                SelectedColor=\"{Binding CaptionFontColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                </Grid>\n                            </Expander>\n\n                            <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Caption.Outline}\" IsExpanded=\"{Binding IsCaptionOutlineGroupExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CaptionOutlineThicknessNumericUpDown\" Minimum=\"0\" Maximum=\"20\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionOutlineThickness, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"CaptionOutlineColorBox\" Margin=\"10,5\"\n                                                SelectedColor=\"{Binding CaptionOutlineColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                </Grid>\n                            </Expander>\n\n                            <Expander Grid.Row=\"4\" Header=\"{DynamicResource S.Caption.Layout}\" IsExpanded=\"{Binding IsCaptionLayoutGroupExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Vertical}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CaptionVerticalAligmentComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"110\"\n                                              SelectedValuePath=\"VerticalAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionVerticalAligment, Mode=TwoWay}\">\n\n                                        <TextBlock VerticalAlignment=\"Top\" Text=\"{DynamicResource S.VerticalAlignment.Top}\"/>\n                                        <TextBlock VerticalAlignment=\"Center\" Text=\"{DynamicResource S.VerticalAlignment.Center}\"/>\n                                        <TextBlock VerticalAlignment=\"Bottom\" Text=\"{DynamicResource S.VerticalAlignment.Bottom}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Horizontal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"CaptionHorizontalAligmentComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"110\" \n                                              SelectedValuePath=\"HorizontalAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionHorizontalAligment, Mode=TwoWay}\">\n\n                                        <TextBlock HorizontalAlignment=\"Left\" Text=\"{DynamicResource S.HorizontalAlignment.Left}\"/>\n                                        <TextBlock HorizontalAlignment=\"Center\" Text=\"{DynamicResource S.HorizontalAlignment.Center}\"/>\n                                        <TextBlock HorizontalAlignment=\"Right\" Text=\"{DynamicResource S.HorizontalAlignment.Right}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Margin}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"CaptionMarginNumericUpDown\" Minimum=\"-100\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptionMargin, Mode=TwoWay}\"/>\n                                </Grid>\n                            </Expander>\n                        </Grid>\n\n                        <Grid x:Name=\"FreeTextGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Caption.Text}\"/>\n                            <n:ExtendedTextBox Grid.Row=\"1\" x:Name=\"FreeTextTextBox\"  Margin=\"10,5,5,5\" AcceptsReturn=\"True\" AcceptsTab=\"True\"\n                                               Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextText, Mode=TwoWay}\"\n                                               TextChanged=\"FreeTextTextBox_TextChanged\"/>\n\n                            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsFreeTextFontGroupExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FreeTextFontComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                                              ItemTemplate=\"{DynamicResource FontTemplate}\" \n                                              SelectedItem=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextFontFamily, Mode=TwoWay}\">\n                                        <ComboBox.ItemsSource>\n                                            <Binding Source=\"{StaticResource MyFonts}\" />\n                                        </ComboBox.ItemsSource>\n\n                                        <ComboBox.ItemsPanel>\n                                            <ItemsPanelTemplate>\n                                                <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                                            </ItemsPanelTemplate>\n                                        </ComboBox.ItemsPanel>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"FreeTextFontStyleComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontStyle\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextFontStyle, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                                        <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                                        <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"FreeTextFontWeightComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontWeight\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextFontWeight, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                                        <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                                        <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                                        <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                                        <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                                        <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                                        <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                                        <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                                        <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                                        <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                                        <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                                        <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                                        <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                                        <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                                        <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                                        <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"FreeTextFontSizeNumericUpDown\" Minimum=\"10\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextFontSize, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"FreeTextFontColorBox\" Margin=\"10,5\"\n                                                SelectedColor=\"{Binding FreeTextFontColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                    <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.BackgroundColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"FreeTextBackgroundColorBox\" Margin=\"10,5\"\n                                                SelectedColor=\"{Binding FreeTextBackgroundColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                    <TextBlock Grid.Row=\"6\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.TextDecoration}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"6\" Grid.Column=\"1\" x:Name=\"FreeTextTextDecorationComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextTextDecoration, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock TextDecorations=\"{Binding TextDecorations}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock TextDecorations=\"None\" Tag=\"None\" Text=\"{DynamicResource S.TextDecorations.None}\"/>\n                                        <TextBlock TextDecorations=\"Underline\" Tag=\"Underline\" Text=\"{DynamicResource S.TextDecorations.Underline}\"/>\n                                        <TextBlock TextDecorations=\"Strikethrough\" Tag=\"Strikethrough\" Text=\"{DynamicResource S.TextDecorations.Strikethrough}\"/>\n                                        <TextBlock TextDecorations=\"OverLine\" Tag=\"OverLine\" Text=\"{DynamicResource S.TextDecorations.OverLine}\"/>\n                                        <TextBlock TextDecorations=\"Baseline\" Tag=\"Baseline\" Text=\"{DynamicResource S.TextDecorations.Baseline}\"/>\n                                    </ComboBox>\n                                </Grid>\n                            </Expander>\n\n                            <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Editor.Image.Shadow}\" IsExpanded=\"{Binding Source={x:Static t:UserSettings.All}, Path=IsFreeTextShadowGroupExpanded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n                                    <Grid.Resources>\n                                        <c:PercentageToOpacity x:Key=\"PercentageToOpacity\"/>\n                                    </Grid.Resources>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.ShadowColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"10,5\" AllowTransparency=\"False\" SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.BlurRadius}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:DoubleUpDown Grid.Row=\"1\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowBlurRadius, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.Direction}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:DoubleUpDown Grid.Row=\"2\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"360\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowDirection, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Watermark.Opacity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:DoubleUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowOpacity, Converter={StaticResource PercentageToOpacity}, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.Depth}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:DoubleUpDown Grid.Row=\"4\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextShadowDepth, Mode=TwoWay}\"/>\n                                </Grid>\n                            </Expander>\n\n                            <n:LabelSeparator Grid.Row=\"4\" Text=\"{DynamicResource S.Caption.Layout}\"/>\n                            <Grid Grid.Row=\"5\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Left}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FreeTextPositionXNumericUpDown\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding ElementName=FreeTextOverlayControl, Path=Left, Converter={StaticResource DoubleToIntConverter}, Mode=TwoWay, FallbackValue=0}\"\n                                                 Maximum=\"{Binding ElementName=FreeTextOverlayControl, Path=ActualWidth, FallbackValue=1000}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Top}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"FreeTextPositionYNumericUpDown\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding ElementName=FreeTextOverlayControl, Path=Top, Converter={StaticResource DoubleToIntConverter}, Mode=TwoWay, FallbackValue=0}\"\n                                                 Maximum=\"{Binding ElementName=FreeTextOverlayControl, Path=ActualHeight, FallbackValue=1000}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.TextAlignment}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"FreeTextTextAlignmentComboBox\" Margin=\"10,5\" MinWidth=\"70\"\n                                              SelectedValuePath=\"TextAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=FreeTextTextAlignment, Mode=TwoWay}\">\n                                    <ComboBox.ItemTemplate>\n                                        <DataTemplate>\n                                            <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                            </VirtualizingStackPanel>\n                                        </DataTemplate>\n                                    </ComboBox.ItemTemplate>\n\n                                    <TextBlock TextAlignment=\"Left\" Text=\"{DynamicResource S.TextAlignment.Left}\"/>\n                                    <TextBlock TextAlignment=\"Center\" Text=\"{DynamicResource S.TextAlignment.Center}\"/>\n                                    <TextBlock TextAlignment=\"Right\" Text=\"{DynamicResource S.TextAlignment.Right}\"/>\n                                    <TextBlock TextAlignment=\"Justify\" Text=\"{DynamicResource S.TextAlignment.Justify}\"/>\n                                </ComboBox>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"FreeTextWidthNumericUpDown\" Margin=\"10,5\" MinWidth=\"70\">\n                                    <n:IntegerUpDown.Style>\n                                        <Style>\n                                            <Style.Triggers>\n                                                <DataTrigger Binding=\"{Binding ElementName=FreeTextTextAlignmentComboBox, Path=SelectedValue}\" Value=\"Justify\">\n                                                    <Setter Property=\"n:IntegerUpDown.IsEnabled\" Value=\"True\"/>\n                                                    <Setter Property=\"n:IntegerUpDown.Value\" Value=\"{Binding ElementName=FreeTextTextBlock, Path=ActualWidth, FallbackValue=0}\"/>\n                                                </DataTrigger>\n                                            </Style.Triggers>\n                                            <Style.Setters>\n                                                <Setter Property=\"n:IntegerUpDown.IsEnabled\" Value=\"False\"/>\n                                                <Setter Property=\"n:IntegerUpDown.Value\" Value=\"{Binding ElementName=FreeTextTextBlock, Path=ActualWidth, FallbackValue=0}\"/>\n                                            </Style.Setters>\n                                        </Style>\n                                    </n:IntegerUpDown.Style>\n                                </n:IntegerUpDown>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"TitleFrameGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Caption.Text}\"/>\n                            <n:ExtendedTextBox Grid.Row=\"1\" x:Name=\"TitleFrameTextBox\" Margin=\"10,5,5,5\" AcceptsReturn=\"True\" AcceptsTab=\"True\"\n                                               Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameText, Mode=TwoWay}\"/>\n\n                            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsTitleFrameFontGroupExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TitleFrameFontComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                                              ItemTemplate=\"{DynamicResource FontTemplate}\" SelectedItem=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameFontFamily, Mode=TwoWay}\">\n                                        <ComboBox.ItemsSource>\n                                            <Binding Source=\"{StaticResource MyFonts}\" />\n                                        </ComboBox.ItemsSource>\n                                        <ComboBox.ItemsPanel>\n                                            <ItemsPanelTemplate>\n                                                <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                                            </ItemsPanelTemplate>\n                                        </ComboBox.ItemsPanel>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"TitleFrameFontStyleComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontStyle\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameFontStyle, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                                        <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                                        <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"TitleFrameFontWeightComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontWeight\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameFontWeight, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\" />\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                                        <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                                        <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                                        <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                                        <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                                        <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                                        <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                                        <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                                        <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                                        <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                                        <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                                        <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                                        <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                                        <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                                        <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                                        <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"TitleFrameFontSizeNumericUpDown\" Minimum=\"5\" Maximum=\"200\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameFontSize, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"TitleFrameFontColorBox\" Margin=\"10,5\"\n                                                SelectedColor=\"{Binding TitleFrameFontColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" />\n                                </Grid>\n                            </Expander>\n\n                            <n:LabelSeparator Grid.Row=\"3\" Text=\"{DynamicResource S.Delay}\"/>\n                            <Grid Grid.Row=\"4\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Column=\"0\" Text=\"{DynamicResource S.DelayMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"TitleFrameDelayIntegerUpDown\" Minimum=\"10\" Maximum=\"25500\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameDelay, Mode=TwoWay}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"5\" Text=\"{DynamicResource S.Caption.Layout}\"/>\n                            <Grid Grid.Row=\"6\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Vertical}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TitleFrameVerticalAligmentComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\"\n                                          SelectedValuePath=\"VerticalAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameVerticalAligment, Mode=TwoWay}\">\n\n                                    <TextBlock VerticalAlignment=\"Top\" Text=\"{DynamicResource S.VerticalAlignment.Top}\"/>\n                                    <TextBlock VerticalAlignment=\"Center\" Text=\"{DynamicResource S.VerticalAlignment.Center}\"/>\n                                    <TextBlock VerticalAlignment=\"Bottom\" Text=\"{DynamicResource S.VerticalAlignment.Bottom}\"/>\n                                </ComboBox>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Horizontal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"TitleFrameHorizontalAligmentComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" \n                                          SelectedValuePath=\"HorizontalAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameHorizontalAligment, Mode=TwoWay}\">\n\n                                    <TextBlock HorizontalAlignment=\"Left\" Text=\"{DynamicResource S.HorizontalAlignment.Left}\"/>\n                                    <TextBlock HorizontalAlignment=\"Center\" Text=\"{DynamicResource S.HorizontalAlignment.Center}\"/>\n                                    <TextBlock HorizontalAlignment=\"Right\" Text=\"{DynamicResource S.HorizontalAlignment.Right}\"/>\n                                </ComboBox>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Margin}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"TitleFrameMarginNumericUpDown\" Minimum=\"-100\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=TitleFrameMargin, Mode=TwoWay}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"7\" Text=\"{DynamicResource S.Background}\"/>\n                            <Grid Grid.Row=\"8\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TitleFrameBackgroundColorBox\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding TitleFrameBackgroundColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"KeyStrokesGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <Expander Grid.Row=\"0\" Header=\"{DynamicResource S.KeyStrokes.Keys}\" IsExpanded=\"{Binding IsKeyStrokesKeysExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Edit}\" Icon=\"{StaticResource Vector.Pen}\"\n                                                      Margin=\"0,3\" ContentWidth=\"16\" ContentHeight=\"16\" HorizontalAlignment=\"Center\" Padding=\"5\" Click=\"EditKeyStrokesButton_Click\"/>\n\n                                    <n:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.IgnoreModifiers}\" Margin=\"0,5\"\n                                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesIgnoreNonModifiers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                        ToolTip=\"{DynamicResource S.KeyStrokes.IgnoreModifiers.Info}\"/>\n\n                                    <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.IgnoreInjected}\" Margin=\"0,5\"\n                                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesIgnoreInjected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                        ToolTip=\"{DynamicResource S.KeyStrokes.IgnoreInjected.Info}\"/>\n\n                                    <n:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Translate}\" Margin=\"0,5\"\n                                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesTranslate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                        ToolTip=\"{DynamicResource S.KeyStrokes.Translate.Info}\"/>\n\n                                    <n:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Extend}\" Margin=\"0,5\"\n                                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesExtended, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                    <StackPanel Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Orientation=\"Horizontal\" Margin=\"10,0,0,0\" \n                                                Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesExtended, Converter={StaticResource Bool2Visibility}}\">\n                                        <TextBlock Text=\"{DynamicResource S.KeyStrokes.By}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                        <n:IntegerUpDown Minimum=\"10\" Maximum=\"1000\" Margin=\"5\" MinWidth=\"70\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesDelay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                    </StackPanel>\n\n                                    <n:ExtendedCheckBox Grid.Row=\"6\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.KeyStrokes.Earlier}\" Margin=\"0,5\"\n                                                        IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesEarlier, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                    <StackPanel Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Orientation=\"Horizontal\" Margin=\"10,0,0,0\" \n                                                Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesEarlier, Converter={StaticResource Bool2Visibility}}\">\n                                        <TextBlock Text=\"{DynamicResource S.KeyStrokes.By}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                        <n:IntegerUpDown Minimum=\"10\" Maximum=\"1000\" Margin=\"5\" MinWidth=\"70\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesEarlierBy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                    </StackPanel>\n\n                                    <TextBlock Grid.Row=\"8\" Grid.Column=\"0\" Text=\"{DynamicResource S.KeyStrokes.Separator}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ExtendedTextBox Grid.Row=\"8\" Grid.Column=\"1\" Margin=\"5,3\" MinWidth=\"70\"\n                                                       Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesSeparator, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                </Grid>\n                            </Expander>\n\n                            <Expander Grid.Row=\"1\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsKeyStrokesFontExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                                              ItemTemplate=\"{DynamicResource FontTemplate}\" SelectedItem=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontFamily}\">\n                                        <ComboBox.ItemsSource>\n                                            <Binding Source=\"{StaticResource MyFonts}\"/>\n                                        </ComboBox.ItemsSource>\n\n                                        <ComboBox.ItemsPanel>\n                                            <ItemsPanelTemplate>\n                                                <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                                            </ItemsPanelTemplate>\n                                        </ComboBox.ItemsPanel>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" SelectedValuePath=\"FontStyle\" \n                                              SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontStyle}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                                        <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                                        <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" SelectedValuePath=\"FontWeight\" \n                                              SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontWeight}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\" />\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                                        <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                                        <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                                        <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                                        <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                                        <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                                        <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                                        <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                                        <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                                        <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                                        <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                                        <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                                        <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                                        <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                                        <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                                        <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"10\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontSize, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" SelectedColor=\"{Binding KeyStrokesFontColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n                                </Grid>\n                            </Expander>\n\n                            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Outline}\" IsExpanded=\"{Binding IsKeyStrokesOutlineExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"*\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"20\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesOutlineThickness, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" SelectedColor=\"{Binding KeyStrokesOutlineColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Background}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"2\" Grid.Column=\"1\" SelectedColor=\"{Binding KeyStrokesBackgroundColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n                                </Grid>\n                            </Expander>\n\n                            <Expander Grid.Row=\"3\" Header=\"{DynamicResource S.Caption.Layout}\" IsExpanded=\"{Binding IsKeyStrokesLayoutExpanded, Source={x:Static t:UserSettings.All}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Vertical}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" SelectedValuePath=\"VerticalAlignment\" \n                                              SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesVerticalAligment, Mode=TwoWay}\">\n\n                                        <TextBlock VerticalAlignment=\"Top\" Text=\"{DynamicResource S.VerticalAlignment.Top}\"/>\n                                        <TextBlock VerticalAlignment=\"Center\" Text=\"{DynamicResource S.VerticalAlignment.Center}\"/>\n                                        <TextBlock VerticalAlignment=\"Bottom\" Text=\"{DynamicResource S.VerticalAlignment.Bottom}\"/>\n                                        <TextBlock VerticalAlignment=\"Stretch\" Text=\"{DynamicResource S.Alignment.Stretch}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Horizontal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" SelectedValuePath=\"HorizontalAlignment\" \n                                              SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesHorizontalAligment, Mode=TwoWay}\">\n\n                                        <TextBlock HorizontalAlignment=\"Left\" Text=\"{DynamicResource S.HorizontalAlignment.Left}\"/>\n                                        <TextBlock HorizontalAlignment=\"Center\" Text=\"{DynamicResource S.HorizontalAlignment.Center}\"/>\n                                        <TextBlock HorizontalAlignment=\"Right\" Text=\"{DynamicResource S.HorizontalAlignment.Right}\"/>\n                                        <TextBlock HorizontalAlignment=\"Stretch\" Text=\"{DynamicResource S.Alignment.Stretch}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Margin}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" Minimum=\"-100\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesMargin, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Padding}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesPadding, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.MinHeight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"4\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesMinHeight, Mode=TwoWay}\"/>\n                                </Grid>\n                            </Expander>\n                        </Grid>\n\n                        <Grid x:Name=\"FreeDrawingGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.FreeDrawing.Mode}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"*\"/>\n                                    <RowDefinition Height=\"*\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" Icon=\"{StaticResource Vector.Pen}\" IsChecked=\"{Binding FreeDrawingIsInkMode, Mode=TwoWay}\"\n                                                       Text=\"{DynamicResource S.FreeDrawing.Pen}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" Icon=\"{StaticResource Vector.Eraser}\" IsChecked=\"{Binding FreeDrawingIsEraserMode, Mode=TwoWay}\"\n                                                       Text=\"{DynamicResource S.FreeDrawing.Eraser}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"1\" Grid.Column=\"0\" Icon=\"{StaticResource Vector.Select}\" IsChecked=\"{Binding FreeDrawingIsSelectionMode, Mode=TwoWay}\"\n                                                       Text=\"{DynamicResource S.FreeDrawing.Select}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                                <n:ExtendedRadioButton Grid.Row=\"1\" Grid.Column=\"1\" Icon=\"{StaticResource Vector.StrokeEraser}\" IsChecked=\"{Binding FreeDrawingIsStrokeEraserMode, Mode=TwoWay}\"\n                                                       Text=\"{DynamicResource S.FreeDrawing.StrokeEraser}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.FreeDrawing.Pen}\" Visibility=\"{Binding FreeDrawingBrushSettingsVisibility, Mode=OneWay}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\" Visibility=\"{Binding FreeDrawingBrushSettingsVisibility, Mode=OneWay}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FreeDrawingWidthNumericUpDown\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding FreeDrawingBrushWidth, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"FreeDrawingHeightNumericUpDown\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding FreeDrawingBrushHeight, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"FreeDrawingColorBox\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding FreeDrawingBrushColor, Mode=TwoWay}\" />\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Tip}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Grid Grid.Row=\"3\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" Icon=\"{StaticResource Vector.Rectangle}\" IsChecked=\"{Binding FreeDrawingStylusTipRectangle, Mode=TwoWay}\"\n                                                           Text=\"{DynamicResource S.FreeDrawing.Rectangle}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3,3\" Padding=\"3\"/>\n\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" Icon=\"{StaticResource Vector.Ellipse}\" IsChecked=\"{Binding FreeDrawingStylusTipEllipse, Mode=TwoWay}\"\n                                                           Text=\"{DynamicResource S.FreeDrawing.Ellipse}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,3\" Padding=\"3\"/>\n                                </Grid>\n\n                                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Other}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ExtendedCheckBox Grid.Row=\"4\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.FreeDrawing.Highlighter}\" Margin=\"5\"\n                                                    IsChecked=\"{Binding FreeDrawingIsHighlighter, Mode=TwoWay}\"/>\n\n                                <n:ExtendedCheckBox Grid.Row=\"5\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.FreeDrawing.FitToCurve}\" Margin=\"5\"\n                                                    IsChecked=\"{Binding FreeDrawingFitToCurve, Mode=TwoWay}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"4\" Text=\"{DynamicResource S.FreeDrawing.Eraser}\" Visibility=\"{Binding FreeDrawingEraserBrushSettingsVisibility, Mode=OneWay}\"/>\n                            <Grid Grid.Row=\"5\" Margin=\"10,0,0,0\" Visibility=\"{Binding FreeDrawingEraserBrushSettingsVisibility, Mode=OneWay}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding FreeDrawingEraserBrushWidth, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding FreeDrawingEraserBrushHeight, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Tip}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Grid Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" Icon=\"{StaticResource Vector.Rectangle}\" \n                                                           Text=\"{DynamicResource S.FreeDrawing.Rectangle}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3,3\" Padding=\"3\"\n                                                           IsChecked=\"{Binding FreeDrawingEraserStylusTipRectangle, Mode=TwoWay}\"/>\n\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" Icon=\"{StaticResource Vector.Ellipse}\" \n                                                           Text=\"{DynamicResource S.FreeDrawing.Ellipse}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,3\" Padding=\"3\"\n                                                           IsChecked=\"{Binding FreeDrawingEraserStylusTipEllipse, Mode=TwoWay}\"/>\n                                </Grid>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"ShapesGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.FreeDrawing.Mode}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"*\"/>\n                                    <RowDefinition Height=\"*\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"AddModeRadioButton\" Icon=\"{StaticResource Vector.Add}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"  \n                                                       Text=\"{DynamicResource S.Shapes.Mode.Insert}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" IsChecked=\"True\" Checked=\"ShapeModes_Checked\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"SelectModeRadioButton\" Icon=\"{StaticResource Vector.Select}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\" \n                                                       Text=\"{DynamicResource S.FreeDrawing.Select}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Checked=\"ShapeModes_Checked\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Shapes.Shapes}\" Visibility=\"{Binding ElementName=AddModeRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,5,0\" Visibility=\"{Binding ElementName=AddModeRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                                <ListBox x:Name=\"ShapesListBox\" SelectedIndex=\"0\" SelectionChanged=\"ShapeType_SelectionChanged\">\n                                    <ListBox.ItemsPanel>\n                                        <ItemsPanelTemplate>\n                                            <WrapPanel/>\n                                        </ItemsPanelTemplate>\n                                    </ListBox.ItemsPanel>\n\n                                    <Rectangle Width=\"25\" Height=\"20\" Stroke=\"{DynamicResource Element.Glyph}\" Fill=\"{DynamicResource Element.Background}\"/>\n                                    <Ellipse Width=\"25\" Height=\"20\" Stroke=\"{DynamicResource Element.Glyph}\" Fill=\"{DynamicResource Element.Background}\"/>\n                                    <h:Triangle Width=\"25\" Height=\"20\" Stroke=\"{DynamicResource Element.Glyph}\" Fill=\"{DynamicResource Element.Background}\"/>\n                                    <h:Arrow Width=\"25\" Height=\"20\" Stroke=\"{DynamicResource Element.Glyph}\" Fill=\"{DynamicResource Element.Background}\" X1=\"1\" Y1=\"1\" X2=\"10\" Y2=\"10\"/>\n                                </ListBox>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"4\" Text=\"{DynamicResource S.Caption.Outline}\"/>\n                            <Grid Grid.Row=\"5\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ShapeOutlineDoubleUpDown\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShapesThickness, Mode=TwoWay}\" UpdateOnInput=\"True\" ValueChanged=\"ShapeProperties_Changed\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ShapeOutlineColorBox\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding ShapesOutlineColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                            ColorChanged=\"ShapeProperties_Changed\"/>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shapes.Shapes.Radius}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ShapeRadiusDoubleUpDown\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShapesRadius, Mode=TwoWay}\" UpdateOnInput=\"True\" ValueChanged=\"ShapeProperties_Changed\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"6\" Text=\"{DynamicResource S.Shapes.Fill}\"/>\n                            <Grid Grid.Row=\"7\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ShapesFillColorBox\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding ShapesFillColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                                            ColorChanged=\"ShapeProperties_Changed\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"MouseEventsGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <!--Format(rectangle, circle, perforated circle), edit clicks? -->\n                                <!--Cursor highlight option, always on-->\n\n                                <!--<TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\"/>\n                                <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10,5\" MinWidth=\"100\" SelectedValuePath=\"FontStyle\" \n                                          SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=KeyStrokesFontStyle}\">\n                                    <ComboBox.ItemTemplate>\n                                        <DataTemplate>\n                                            <Grid>\n                                                <Grid.ColumnDefinitions>\n                                                    <ColumnDefinition Width=\"20\"/>\n                                                    <ColumnDefinition/>\n                                                </Grid.ColumnDefinitions>\n                                                \n                                                <Viewbox Margin=\"2\">\n                                                    <ContentPresenter Content=\"{Binding Tag}\"/>\n                                                </Viewbox>\n\n                                                <TextBlock Grid.Column=\"1\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                            </Grid>\n                                        </DataTemplate>\n                                    </ComboBox.ItemTemplate>\n\n                                    <TextBlock Text=\"Ellipse\" Tag=\"{StaticResource Vector.Ellipse}\"/>\n                                    <TextBlock Text=\"Rectangle\" Tag=\"{StaticResource Vector.Rectangle}\"/>\n                                </ComboBox>-->\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseHighlight.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"MouseHighlightColor\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=MouseHighlightColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.Left}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"LeftButtonClickColor\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=LeftMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.Middle}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"MiddleButtonClickColor\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=MiddleMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.Right}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"RightButtonClickColor\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=RightMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.FirstExtra}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"FirstExtraButtonClickColor\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=FirstExtraMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"6\" Grid.Column=\"0\" Text=\"{DynamicResource S.MouseClicks.Color.SecondExtra}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"6\" Grid.Column=\"1\" x:Name=\"SecondExtraButtonClickColor\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=SecondExtraMouseButtonClicksColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"7\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"7\" Grid.Column=\"1\" x:Name=\"ClickWidthDoubleUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\"\n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=MouseEventsWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"8\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"8\" Grid.Column=\"1\" x:Name=\"ClickHeightDoubleUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\"\n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=MouseEventsHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                            </Grid>\n\n                            <!--<n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Preview}\"/>\n                            <Grid Grid.Row=\"3\" x:Name=\"PreviewGrid\" Margin=\"10,5\">\n                                <Viewbox x:Name=\"PreviewViewBox\" Child=\"{StaticResource Vector.Cursor}\" Height=\"20\" Width=\"20\" Stretch=\"Uniform\">\n                                    <Viewbox.Margin>\n                                        <MultiBinding Converter=\"{StaticResource DoubleToThicknessConverter}\">\n                                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"MouseEventsWidth\"/>\n                                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"MouseEventsHeight\"/>\n                                        </MultiBinding>\n                                    </Viewbox.Margin>\n                                </Viewbox>\n\n                                <Ellipse Fill=\"{Binding ElementName=MouseBackgroundColor, Path=SelectedBrush, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                         Width=\"{Binding Source={x:Static t:UserSettings.All}, Path=MouseEventsWidth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                         Height=\"{Binding Source={x:Static t:UserSettings.All}, Path=MouseEventsHeight, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"\n                                         HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Stretch=\"None\"/>\n                            </Grid>-->\n                        </Grid>\n\n                        <Grid x:Name=\"WatermarkGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Watermark.Image}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\" MinHeight=\"35\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Label Grid.Row=\"0\" Grid.Column=\"0\" Content=\"{DynamicResource S.Watermark.File}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ImagePathLabel\" Margin=\"3\" Padding=\"0\" FontStyle=\"Italic\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"\n                                           Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkFilePath, Converter={StaticResource PathToFilenameConverter}}\" TextWrapping=\"WrapWithOverflow\"\n                                           ToolTip=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkFilePath}\" ToolTipService.Placement=\"Top\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                                <n:ExtendedButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"SelectWatermarkButton\" Text=\"{DynamicResource S.FreeDrawing.Select}\" \n                                                  HorizontalAlignment=\"Right\" Icon=\"{StaticResource Vector.Image}\" ContentWidth=\"20\" ContentHeight=\"20\"\n                                                  Margin=\"5,3\" MinWidth=\"70\" Padding=\"2,5\" Click=\"SelectWatermark_Click\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Watermark.Opacity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"OpacityWatermarkNumericUpDown\"  \n                                                 Minimum=\"1\" Maximum=\"100\" Margin=\"5\" Width=\"70\" HorizontalAlignment=\"Left\"\n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkOpacity, \n                                                 Converter={StaticResource DoubleTimesAHundredToIntConverter}, Mode=TwoWay, FallbackValue=70}\"/>\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"%\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.ImportVideo.Scale}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"SizeWatermarkNumericUpDown\" \n                                                 Minimum=\"1\" Maximum=\"200\" Margin=\"5\" Width=\"70\" HorizontalAlignment=\"Left\"\n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=WatermarkSize, \n                                                 Converter={StaticResource DoubleTimesAHundredToIntConverter}, Mode=TwoWay, FallbackValue=100}\"/>\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"%\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"3\" Text=\"{DynamicResource S.Crop.Points}\"/>\n                            <Grid Grid.Row=\"4\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Top}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"TopWatermarkDoubleUpDown\" Minimum=\"-999\" Margin=\"10,3\" MinWidth=\"70\"\n                                                Maximum=\"{Binding ElementName=EditorWindow, Path=FrameSize.Height, FallbackValue=1000, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Crop.Left}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"LeftWatermarkDoubleUpDown\" Minimum=\"-999\" Margin=\"10,3\" MinWidth=\"70\"\n                                                Maximum=\"{Binding ElementName=EditorWindow, Path=FrameSize.Width, FallbackValue=1000, UpdateSourceTrigger=PropertyChanged}\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"BorderGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <!--<RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>-->\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"BorderColorBox\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding BorderColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Grid Grid.Row=\"1\" Grid.Column=\"1\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition/>\n                                        <RowDefinition/>\n                                        <RowDefinition/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Grid Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" HorizontalAlignment=\"Center\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition/>\n                                            <ColumnDefinition/>\n                                        </Grid.ColumnDefinitions>\n\n                                        <Border Grid.Column=\"0\" Background=\"{StaticResource Vector.Arrow.Blue.Top}\" Width=\"15\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                        <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"BorderTopThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"50\" Margin=\"3,5\" Width=\"55\" \n                                                         Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderTopThickness, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n                                    </Grid>\n\n                                    <Border Grid.Row=\"1\" Grid.Column=\"0\" Background=\"{StaticResource Vector.Arrow.Blue.Left}\" Width=\"15\" Height=\"15\" Margin=\"5,0,0,0\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"BorderLeftThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"50\" Margin=\"3,5\" Width=\"55\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderLeftThickness, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n\n                                    <Border Grid.Row=\"1\" Grid.Column=\"3\" Background=\"{StaticResource Vector.Arrow.Blue.Right}\" Width=\"15\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"BorderRightThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"50\" Margin=\"3,5\" Width=\"55\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderRightThickness, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n\n                                    <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" HorizontalAlignment=\"Center\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition/>\n                                            <ColumnDefinition/>\n                                        </Grid.ColumnDefinitions>\n\n                                        <Border Grid.Column=\"0\" Background=\"{StaticResource Vector.Arrow.Blue.Bottom}\" Width=\"15\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                        <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"BorderBottomThicknessNumericUpDown\" Minimum=\"-500\" Maximum=\"50\" Margin=\"3,5\" Width=\"55\" \n                                                         Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderBottomThickness, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n                                    </Grid>\n                                </Grid>\n\n                                <!--<TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.BackgroundColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"BorderBackgroundColorBox\" Margin=\"10,5\"\n                                            SelectedColor=\"{Binding BorderBackgroundColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                                \n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Border.CornerRadius}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Grid Grid.Row=\"3\" Grid.Column=\"1\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition/>\n                                        <RowDefinition/>\n                                        <RowDefinition/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <Grid Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" HorizontalAlignment=\"Center\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition/>\n                                            <ColumnDefinition/>\n                                        </Grid.ColumnDefinitions>\n\n                                        <Viewbox Grid.Column=\"0\" Child=\"{StaticResource Vector.Arrow.Blue.Top}\" MaxWidth=\"15\" MaxHeight=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                        <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"BorderTopRadiusNumericUpDown\" Minimum=\"0\" Maximum=\"1000\" Margin=\"3,5\" Width=\"55\" \n                                                         Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderTopRadius, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n                                    </Grid>\n\n                                    <Viewbox Grid.Row=\"1\" Grid.Column=\"0\" Child=\"{StaticResource Vector.Arrow.Blue.Left}\" MaxWidth=\"15\" MaxHeight=\"15\" Margin=\"5,0,0,0\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"BorderLeftRadiusNumericUpDown\" Minimum=\"0\" Maximum=\"1000\" Margin=\"3,5\" Width=\"55\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderLeftRadius, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n\n                                    <Viewbox Grid.Row=\"1\" Grid.Column=\"3\" Child=\"{StaticResource Vector.Arrow.Blue.Right}\" MaxWidth=\"15\" MaxHeight=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"BorderRightRadiusNumericUpDown\" Minimum=\"0\" Maximum=\"1000\" Margin=\"3,5\" Width=\"55\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderRightRadius, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n\n                                    <Grid Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"4\" HorizontalAlignment=\"Center\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition/>\n                                            <ColumnDefinition/>\n                                        </Grid.ColumnDefinitions>\n\n                                        <Viewbox Grid.Column=\"0\" Child=\"{StaticResource Vector.Arrow.Blue.Bottom}\" MaxWidth=\"15\" MaxHeight=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                        <n:IntegerUpDown Grid.Column=\"1\" x:Name=\"BorderBottomRadiusNumericUpDown\" Minimum=\"0\" Maximum=\"1000\" Margin=\"3,5\" Width=\"55\" \n                                                         Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BorderBottomRadius, Mode=TwoWay}\" ValueChanged=\"BorderProperties_ValueChanged\"/>\n                                    </Grid>\n                                </Grid>-->\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Border.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"ShadowGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n                            <Grid.Resources>\n                                <c:PercentageToOpacity x:Key=\"PercentageToOpacity\"/>\n                            </Grid.Resources>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.ShadowColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ShadowColorBox\" Margin=\"10,5\" AllowTransparency=\"False\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.BackgroundColor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ShadowBackgroundColorBox\" Margin=\"10,5\" AllowTransparency=\"False\"\n                                            SelectedColor=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowBackgroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.BlurRadius}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"2\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowBlurRadius, Mode=TwoWay}\"\n                                                ValueChanged=\"ShadowProperties_ValueChanged\"/>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.Direction}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"3\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"360\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowDirection, Mode=TwoWay}\"\n                                                ValueChanged=\"ShadowProperties_ValueChanged\"/>\n\n                                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Watermark.Opacity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"4\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" StepValue=\"0.5\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowOpacity, Converter={StaticResource PercentageToOpacity}, Mode=TwoWay}\" ValueChanged=\"ShadowProperties_ValueChanged\"/>\n\n                                <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shadow.Depth}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"5\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" StepValue=\"0.5\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ShadowDepth, Mode=TwoWay}\"\n                                                ValueChanged=\"ShadowProperties_ValueChanged\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"ObfuscateGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Progress.Type}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"PixelationRadioButton\" Icon=\"{StaticResource Vector.Pixelate}\" Text=\"{DynamicResource S.Obfuscate.Type.Pixelate}\" \n                                                       IsChecked=\"{Binding ObfuscationMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, \n                                                       ConverterParameter={x:Static e:ObfuscationModes.Pixelation}}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"BlurRadioButton\" Icon=\"{StaticResource Vector.Blur}\" Text=\"{StaticResource S.Obfuscate.Type.Blur}\"\n                                                       IsChecked=\"{Binding ObfuscationMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, \n                                                       ConverterParameter={x:Static e:ObfuscationModes.Blur}}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"DarkenRadioButton\" Icon=\"{StaticResource Vector.Darken}\" Text=\"{StaticResource S.Obfuscate.Type.Darken}\"\n                                                       IsChecked=\"{Binding ObfuscationMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, \n                                                       ConverterParameter={x:Static e:ObfuscationModes.Darken}}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"LightenRadioButton\" Icon=\"{StaticResource Vector.Lighten}\" Text=\"{StaticResource S.Obfuscate.Type.Lighten}\"\n                                                       IsChecked=\"{Binding ObfuscationMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, \n                                                       ConverterParameter={x:Static e:ObfuscationModes.Lighten}}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Obfuscate.Options}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Obfuscate.PixelSize}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding ElementName=PixelSizeIntegerUpDown, Path=Visibility}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"PixelSizeIntegerUpDown\" Minimum=\"2\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=PixelSize, Mode=TwoWay}\"\n                                                 Visibility=\"{Binding ElementName=PixelationRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Obfuscate.BlurLevel}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding ElementName=BlurSizeIntegerUpDown, Path=Visibility}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"BlurSizeIntegerUpDown\" Minimum=\"2\" Maximum=\"5\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=BlurLevel, Mode=TwoWay}\"\n                                                 Visibility=\"{Binding ElementName=BlurRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Obfuscate.DarkenLevel}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding ElementName=DarknessDoubleUpDown, Path=Visibility}\"/>\n                                <n:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"DarknessDoubleUpDown\" Minimum=\"2\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=DarkenLevel, Mode=TwoWay}\"\n                                                Visibility=\"{Binding ElementName=DarkenRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Obfuscate.LightenLevel}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding ElementName=LightnessDoubleUpDown, Path=Visibility}\"/>\n                                <n:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"LightnessDoubleUpDown\" Minimum=\"2\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=LightenLevel, Mode=TwoWay}\"\n                                                Visibility=\"{Binding ElementName=LightenRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n\n                                <n:ExtendedCheckBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"UseMedianCheckBox\" Text=\"{DynamicResource S.Obfuscate.UseAverage}\"\n                                                    IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=UseMedian}\" Margin=\"3,5\"\n                                                    Visibility=\"{Binding ElementName=PixelationRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n                                <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.Obfuscate.Invert}\"\n                                                    IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=ObfuscationInvertedSelection}\" Margin=\"3,5\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"4\" Text=\"{DynamicResource S.Obfuscate.Smoothness}\"/>\n                            <Grid Grid.Row=\"5\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Shapes.Shapes.Radius}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ObfuscationSmoothnessRadius, Mode=TwoWay}\"/>\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"px\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Watermark.Opacity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"1\" Grid.Column=\"1\" Minimum=\"0\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ObfuscationSmoothnessOpacity, Mode=TwoWay}\"/>\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" Text=\"%\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"6\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Obfuscate.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"\n                                           Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=ObfuscationInvertedSelection, Converter={StaticResource InvertedBoolToVisibility}}\"/>\n\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Obfuscate.Info2}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\" \n                                           Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=ObfuscationInvertedSelection, Converter={StaticResource Bool2Visibility}}\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"ProgressGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"23\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"23\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"23\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Progress.Type}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Column=\"0\" x:Name=\"BarRadioButton\" Icon=\"{StaticResource Vector.Progress}\" Text=\"{DynamicResource S.Progress.Type.Bar}\" \n                                                       IsChecked=\"{Binding ProgressType, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, \n                                                       ConverterParameter={x:Static e:ProgressTypes.Bar}}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Column=\"1\" x:Name=\"TextRadioButton\" Icon=\"{StaticResource Vector.FreeText}\" Text=\"{StaticResource S.Progress.Type.Text}\"\n                                                       IsChecked=\"{Binding ProgressType, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, \n                                                       ConverterParameter={x:Static e:ProgressTypes.Text}}\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                            </Grid>\n\n                            <Expander Grid.Row=\"2\" Header=\"{DynamicResource S.Caption.Font}\" IsExpanded=\"{Binding IsProgressFontGroupExpanded, Source={x:Static t:UserSettings.All}}\"\n                                      Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\">\n                                <Grid Margin=\"10,0,0,0\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                        <RowDefinition Height=\"Auto\"/>\n                                    </Grid.RowDefinitions>\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                        <ColumnDefinition Width=\"Auto\"/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Family}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ProgressFontComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                                              ItemTemplate=\"{DynamicResource FontTemplate}\" SelectedItem=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressFontFamily, Mode=TwoWay}\">\n                                        <ComboBox.ItemsSource>\n                                            <Binding Source=\"{StaticResource MyFonts}\" />\n                                        </ComboBox.ItemsSource>\n\n                                        <ComboBox.ItemsPanel>\n                                            <ItemsPanelTemplate>\n                                                <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing=\"True\" VirtualizingStackPanel.VirtualizationMode=\"Recycling\"/>\n                                            </ItemsPanelTemplate>\n                                        </ComboBox.ItemsPanel>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Style}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ProgressFontStyleComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontStyle\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressFontStyle, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontStyle=\"{Binding FontStyle}\" FontSize=\"14\" Text=\"{Binding Text}\"/>\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontStyle=\"Normal\" Text=\"{DynamicResource S.FontStyles.Normal}\"/>\n                                        <TextBlock FontStyle=\"Italic\" Text=\"{DynamicResource S.FontStyles.Italic}\"/>\n                                        <TextBlock FontStyle=\"Oblique\" Text=\"{DynamicResource S.FontStyles.Oblique}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Weight}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"ProgressFontWeightComboBox\" Margin=\"10,5\" MinWidth=\"100\"\n                                              SelectedValuePath=\"FontWeight\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressFontWeight, Mode=TwoWay}\">\n                                        <ComboBox.ItemTemplate>\n                                            <DataTemplate>\n                                                <VirtualizingStackPanel IsVirtualizing=\"True\" VirtualizationMode=\"Recycling\" ScrollViewer.IsDeferredScrollingEnabled=\"True\">\n                                                    <TextBlock FontWeight=\"{Binding FontWeight}\" FontSize=\"14\" Text=\"{Binding Text}\" />\n                                                </VirtualizingStackPanel>\n                                            </DataTemplate>\n                                        </ComboBox.ItemTemplate>\n\n                                        <TextBlock FontWeight=\"UltraLight\" Text=\"{DynamicResource S.FontWeights.UltraLight}\"/>\n                                        <TextBlock FontWeight=\"ExtraLight\" Text=\"{DynamicResource S.FontWeights.ExtraLight}\"/>\n                                        <TextBlock FontWeight=\"Light\" Text=\"{DynamicResource S.FontWeights.Light}\"/>\n                                        <TextBlock FontWeight=\"Thin\" Text=\"{DynamicResource S.FontWeights.Thin}\"/>\n                                        <TextBlock FontWeight=\"Normal\" Text=\"{DynamicResource S.FontWeights.Normal}\"/>\n                                        <TextBlock FontWeight=\"Regular\" Text=\"{DynamicResource S.FontWeights.Regular}\"/>\n                                        <TextBlock FontWeight=\"Medium\" Text=\"{DynamicResource S.FontWeights.Medium}\"/>\n                                        <TextBlock FontWeight=\"SemiBold\" Text=\"{DynamicResource S.FontWeights.SemiBold}\"/>\n                                        <TextBlock FontWeight=\"DemiBold\" Text=\"{DynamicResource S.FontWeights.DemiBold}\"/>\n                                        <TextBlock FontWeight=\"Bold\" Text=\"{DynamicResource S.FontWeights.Bold}\"/>\n                                        <TextBlock FontWeight=\"Black\" Text=\"{DynamicResource S.FontWeights.Black}\"/>\n                                        <TextBlock FontWeight=\"Heavy\" Text=\"{DynamicResource S.FontWeights.Heavy}\"/>\n                                        <TextBlock FontWeight=\"ExtraBold\" Text=\"{DynamicResource S.FontWeights.ExtraBold}\"/>\n                                        <TextBlock FontWeight=\"ExtraBlack\" Text=\"{DynamicResource S.FontWeights.ExtraBlack}\"/>\n                                        <TextBlock FontWeight=\"UltraBold\" Text=\"{DynamicResource S.FontWeights.UltraBold}\"/>\n                                        <TextBlock FontWeight=\"UltraBlack\" Text=\"{DynamicResource S.FontWeights.UltraBlack}\"/>\n                                    </ComboBox>\n\n                                    <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Size}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ProgressFontSizeNumericUpDown\" Minimum=\"10\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                                     Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressFontSize, Mode=TwoWay}\"/>\n\n                                    <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                    <n:ColorBox Grid.Row=\"4\" Grid.Column=\"1\" SelectedColor=\"{Binding ProgressFontColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n                                </Grid>\n                            </Expander>\n\n                            <n:LabelSeparator Grid.Row=\"3\" Text=\"{DynamicResource S.Border.Appearance}\"/>\n                            <Grid Grid.Row=\"4\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" SelectedColor=\"{Binding ProgressColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Progress.Precision}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n                                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ProgressPrecisionComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" IsEditable=\"True\"\n                                          SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressPrecision, Mode=TwoWay}\"\n                                          Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\"\n                                          SelectionChanged=\"ProgressPrecisionComboBox_SelectionChanged\">\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Minutes}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Seconds}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Milliseconds}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Percentage}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Count}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.Custom}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Progress.Precision.DateOfRecording}\"/>\n                                </ComboBox>\n\n                                <n:ExtendedCheckBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Progress.Precision.ShowTotal}\" Margin=\"10,5,5,5\"\n                                                    IsChecked=\"{Binding ProgressShowTotal, Source={x:Static t:UserSettings.All}, Mode=TwoWay}\"\n                                                    Visibility=\"{Binding IsChecked, ElementName=TextRadioButton, Converter={StaticResource Bool2Visibility}}\"\n                                                    CheckedChanged=\"ExtendedCheckBox_CheckedChanged\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" x:Name=\"ProgressFormatTextBlock\" Text=\"{DynamicResource S.Progress.Format}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\">\n                                    <TextBlock.Visibility>\n                                        <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                                            <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"5\"/>\n                                            <Binding ElementName=\"TextRadioButton\" Path=\"IsChecked\"/>\n                                        </MultiBinding>\n                                    </TextBlock.Visibility>\n                                </TextBlock>\n                                <n:ExtendedTextBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"CustomProgressTextBox\" Margin=\"10,5\"\n                                                   Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressFormat, Mode=TwoWay}\"\n                                                   Visibility=\"{Binding ElementName=ProgressFormatTextBlock, Path=Visibility}\" TextChanged=\"CustomProgressTextBox_TextChanged\">\n                                    <n:ExtendedTextBox.ToolTip>\n                                        <n:HeaderedTooltip Header=\"{DynamicResource S.Progress.Format.Header}\" StaysOpen=\"True\">\n                                            <Run Text=\"{DynamicResource S.Progress.Format.Milliseconds}\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"{DynamicResource S.Progress.Format.Seconds}\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"{DynamicResource S.Progress.Format.Minutes}\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"{DynamicResource S.Progress.Format.Percentage}\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"{DynamicResource S.Progress.Format.FrameNumber}\"/>\n                                            <LineBreak/>\n                                            <LineBreak/>\n                                            <Run Text=\"{DynamicResource S.Progress.Format.Totals}\" FontWeight=\"SemiBold\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"@ms, @s, @m, @p, @f\"/>\n                                            <LineBreak/>\n                                            <LineBreak/>\n                                            <Run Text=\"{DynamicResource S.Progress.Format.Examples}\" FontWeight=\"SemiBold\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"'$s/@s s' = 2/10 s\"/>\n                                            <LineBreak/>\n                                            <Run Text=\"'$p/@p%' = 25/100%\"/>\n                                        </n:HeaderedTooltip>\n                                    </n:ExtendedTextBox.ToolTip>\n                                </n:ExtendedTextBox>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" x:Name=\"ProgressStartNumberTextBlock\" Text=\"{DynamicResource S.Progress.Precision.StartNumber}\" VerticalAlignment=\"Center\" \n                                           Foreground=\"{DynamicResource Element.Foreground.Medium}\">\n                                    <TextBlock.Visibility>\n                                        <MultiBinding Converter=\"{StaticResource BoolAndOrOrToVisibility}\">\n                                            <Binding ElementName=\"TextRadioButton\" Path=\"IsChecked\"/>\n                                            <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"4\"/>\n                                            <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"5\"/>\n                                        </MultiBinding>\n                                    </TextBlock.Visibility>\n                                </TextBlock>\n                                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ProgressStartNumberIntegerUpDown\" Minimum=\"0\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressStartNumber, Mode=TwoWay}\"\n                                                 Visibility=\"{Binding ElementName=ProgressStartNumberTextBlock, Path=Visibility}\" ToolTip=\"{DynamicResource S.Progress.Precision.StartNumber.ToolTip}\"\n                                                 ValueChanged=\"ExtendedCheckBox_CheckedChanged\"/>\n\n                                <TextBlock Grid.Row=\"4\" Grid.Column=\"0\" x:Name=\"ProgressDateFormatTextBlock\" Text=\"{DynamicResource S.Progress.Format}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\">\n                                    <TextBlock.Visibility>\n                                        <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                                            <Binding ElementName=\"ProgressPrecisionComboBox\" Path=\"SelectedIndex\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"6\"/>\n                                            <Binding ElementName=\"TextRadioButton\" Path=\"IsChecked\"/>\n                                        </MultiBinding>\n                                    </TextBlock.Visibility>\n                                </TextBlock>\n                                <n:ExtendedTextBox Grid.Row=\"4\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"CustomProgressDateTextBox\" Margin=\"10,5\"\n                                                   Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressDateFormat, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                   Visibility=\"{Binding ElementName=ProgressDateFormatTextBlock, Path=Visibility}\" ToolTip=\"{DynamicResource S.Progress.Format.Date}\" \n                                                   TextChanged=\"CustomProgressTextBox_TextChanged\"/>\n\n                                <TextBlock Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" ToolTip=\"docs.microsoft.com\"\n                                           Visibility=\"{Binding ElementName=ProgressDateFormatTextBlock, Path=Visibility}\">\n\n                                    <Hyperlink NavigateUri=\"https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                        <Run Text=\"{DynamicResource S.Progress.Format.Date.Standard}\"/>\n                                    </Hyperlink>\n                                    <Run Text=\"/\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                                    <Hyperlink NavigateUri=\"https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\" RequestNavigate=\"Hyperlink_RequestNavigate\">\n                                        <Run Text=\"{DynamicResource  S.Progress.Format.Date.Custom}\"/>\n                                    </Hyperlink>\n                                </TextBlock>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Thickness}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n                                <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"ProgressThicknessNumericUpDown\" Minimum=\"1\" Maximum=\"30\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding ProgressThickness, Source={x:Static t:UserSettings.All}, Mode=TwoWay}\"\n                                                 Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"5\" Text=\"{DynamicResource S.Caption.Layout}\"/>\n                            <Grid Grid.Row=\"6\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Vertical}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ProgressVerticalComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\"\n                                          SelectedValuePath=\"VerticalAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressVerticalAligment, Mode=TwoWay}\">\n\n                                    <TextBlock VerticalAlignment=\"Top\" Text=\"{DynamicResource S.VerticalAlignment.Top}\"/>\n                                    <TextBlock VerticalAlignment=\"Center\" Text=\"{DynamicResource S.VerticalAlignment.Center}\"/>\n                                    <TextBlock VerticalAlignment=\"Bottom\" Text=\"{DynamicResource S.VerticalAlignment.Bottom}\"/>\n                                </ComboBox>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Horizontal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ProgressHorizontalComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"150\" \n                                          SelectedValuePath=\"HorizontalAlignment\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressHorizontalAligment, Mode=TwoWay}\">\n\n                                    <TextBlock HorizontalAlignment=\"Left\" Text=\"{DynamicResource S.HorizontalAlignment.Left}\"/>\n                                    <TextBlock HorizontalAlignment=\"Center\" Text=\"{DynamicResource S.HorizontalAlignment.Center}\"/>\n                                    <TextBlock HorizontalAlignment=\"Right\" Text=\"{DynamicResource S.HorizontalAlignment.Right}\"/>\n                                </ComboBox>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Progress.Orientation}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\"/>\n                                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"ProgressOrientationComboBox\" Margin=\"10,5\" MinWidth=\"100\" MaxWidth=\"110\" \n                                          SelectedValuePath=\"Tag\" SelectedValue=\"{Binding Source={x:Static t:UserSettings.All}, Path=ProgressOrientation, Mode=TwoWay}\"\n                                          Visibility=\"{Binding IsChecked, ElementName=BarRadioButton, Converter={StaticResource Bool2Visibility}}\">\n\n                                    <TextBlock Text=\"{DynamicResource S.Orientation.Horizontal}\">\n                                        <TextBlock.Tag>\n                                            <x:Static Member=\"Orientation.Horizontal\"/>\n                                        </TextBlock.Tag>\n                                    </TextBlock>\n\n                                    <TextBlock Text=\"{DynamicResource S.Orientation.Vertical}\">\n                                        <TextBlock.Tag>\n                                            <x:Static Member=\"Orientation.Vertical\"/>\n                                        </TextBlock.Tag>\n                                    </TextBlock>\n                                </ComboBox>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"CinemagraphGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.FreeDrawing.Mode}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"*\"/>\n                                    <RowDefinition Height=\"*\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"PenMode2RadioButton\" Icon=\"{StaticResource Vector.Pen}\" \n                                                       Text=\"{DynamicResource S.FreeDrawing.Pen}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\" IsChecked=\"True\"/>\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"EraserMode2RadioButton\" Icon=\"{StaticResource Vector.Eraser}\" \n                                                       Text=\"{DynamicResource S.FreeDrawing.Eraser}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"SelectorMode2RadioButton\" Icon=\"{StaticResource Vector.Select}\" \n                                                       Text=\"{DynamicResource S.FreeDrawing.Select}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                                <n:ExtendedRadioButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"EraserStrokeMode2RadioButton\" Icon=\"{StaticResource Vector.StrokeEraser}\" \n                                                       Text=\"{DynamicResource S.FreeDrawing.StrokeEraser}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.FreeDrawing.Pen}\" Visibility=\"{Binding ElementName=PenMode2RadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\" \n                                  Visibility=\"{Binding ElementName=PenMode2RadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CinemagraphWidthNumericUpDown\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CinemagraphPenWidth, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"CinemagraphHeightNumericUpDown\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CinemagraphPenHeight, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Tip}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Grid Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"Rectangle2RadioButton\" Icon=\"{StaticResource Vector.Rectangle}\" \n                                                           Text=\"{DynamicResource S.FreeDrawing.Rectangle}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3,3\" Padding=\"3\"\n                                                           IsChecked=\"{Binding CinemagraphStylusTip, Source={x:Static t:UserSettings.All}, \n                                                           Converter={StaticResource StylusTipToBoolConverter}, ConverterParameter=Rectangle}\"/>\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"Ellipse2RadioButton\" Icon=\"{StaticResource Vector.Ellipse}\" \n                                                           Text=\"{DynamicResource S.FreeDrawing.Ellipse}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,3\" Padding=\"3\"\n                                                           IsChecked=\"{Binding CinemagraphStylusTip, Source={x:Static t:UserSettings.All}, \n                                                           Converter={StaticResource StylusTipToBoolConverter}, ConverterParameter=Ellipse}\"/>\n                                </Grid>\n\n                                <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Other}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" x:Name=\"FitToCurve2CheckBox\" Text=\"{DynamicResource S.FreeDrawing.FitToCurve}\" Margin=\"5\"\n                                                    IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=CinemagraphFitToCurve, Mode=TwoWay}\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.FreeDrawing.Eraser}\" Visibility=\"{Binding ElementName=EraserMode2RadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\"\n                                  Visibility=\"{Binding ElementName=EraserMode2RadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CinemagraphEraserWidthNumericUpDown\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CinemagraphEraserWidth, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"CinemagraphEraserHeightNumericUpDown\" Minimum=\"1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"70\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=CinemagraphEraserHeight, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.FreeDrawing.Tip}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <Grid Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition/>\n                                        <ColumnDefinition/>\n                                    </Grid.ColumnDefinitions>\n\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"RectangleEraser2RadioButton\" Icon=\"{StaticResource Vector.Rectangle}\" \n                                                           Text=\"{DynamicResource S.FreeDrawing.Rectangle}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3,3\" Padding=\"3\"\n                                                           IsChecked=\"{Binding CinemagraphEraserStylusTip, Source={x:Static t:UserSettings.All}, \n                                                           Converter={StaticResource StylusTipToBoolConverter}, ConverterParameter=Rectangle}\"/>\n                                    <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ElipseEraser2RadioButton\" Icon=\"{StaticResource Vector.Ellipse}\" \n                                                           Text=\"{DynamicResource S.FreeDrawing.Ellipse}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,3\" Padding=\"3\"\n                                                           IsChecked=\"{Binding CinemagraphEraserStylusTip, Source={x:Static t:UserSettings.All}, \n                                                           Converter={StaticResource StylusTipToBoolConverter}, ConverterParameter=Ellipse}\"/>\n                                </Grid>\n                            </Grid>\n\n                            <Grid Grid.Row=\"4\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Cinemagraph.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"OverrideDelayGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Delay.NewValue}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.DelayMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"NewDelayIntegerUpDown\" Minimum=\"10\" Maximum=\"25500\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=OverrideDelay, Mode=TwoWay}\"/>\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"ms\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Delay.Override.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"IncreaseDecreaseDelayGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Delay.DecreaseIncrease}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.ValueMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"IncreaseDecreaseDelayIntegerUpDown\" Minimum=\"-10000\" Maximum=\"10000\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=IncrementDecrementDelay, Mode=TwoWay}\"/>\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"ms\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Delay.IncreaseDecrease.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"ScaleDelayGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Delay.Scale}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.ScaleValue}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ScaleDelayIntegerUpDown\" Minimum=\"1\" Maximum=\"1000\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ScaleDelay, Mode=TwoWay}\"/>\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"%\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Left\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Delay.Scale.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"FadeGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Transitions.FadeTo}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"FadeToFrameRadioButton\" Icon=\"{StaticResource Vector.Image}\" \n                                                       IsChecked=\"{Binding FadeToType, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:FadeModes.NextFrame}}\"\n                                                       Text=\"{DynamicResource S.Transitions.FadeTo.Frame}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n\n                                <n:ExtendedRadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FadeToColorRadioButton\" Icon=\"{StaticResource Vector.Colors}\" \n                                                       IsChecked=\"{Binding FadeToType, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:FadeModes.Color}}\"\n                                                       Text=\"{DynamicResource S.Transitions.FadeTo.Color}\" Cursor=\"Hand\" ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"0,2\" Padding=\"2\" MinHeight=\"30\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Transitions.Color}\" Visibility=\"{Binding ElementName=FadeToColorRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\" Visibility=\"{Binding ElementName=FadeToColorRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Caption.Color}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:ColorBox Grid.Row=\"0\" Grid.Column=\"1\" SelectedColor=\"{Binding FadeToColor, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" Margin=\"10,5\"/>\n                            </Grid>\n\n                            <n:LabelSeparator Grid.Row=\"4\" Text=\"{DynamicResource S.Transitions.Length}\"/>\n                            <Slider Grid.Row=\"5\" Grid.Column=\"0\" x:Name=\"FadeSlider\" Margin=\"10,5,5,5\" Minimum=\"1\" Maximum=\"25\" \n                                    AutoToolTipPlacement=\"TopLeft\" SmallChange=\"1\" IsSnapToTickEnabled=\"True\"\n                                    Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FadeTransitionLength, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                            <n:LabelSeparator Grid.Row=\"6\" Text=\"{DynamicResource S.Transitions.Delay}\"/>\n                            <Grid Grid.Row=\"7\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.DelayMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FadeDelayIntegerUpDown\" Minimum=\"10\" Maximum=\"25500\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=FadeTransitionDelay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"8\" Margin=\"5,3\" DataContext=\"{Binding ElementName=FrameListView, Path=SelectedItem}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Image Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"TransitionImage\"\n                                       Source=\"{Binding Path=ImageSource, Converter={StaticResource UriToBitmapConverter}}\" Stretch=\"Uniform\"\n                                       Effect=\"{StaticResource Shadow.Border.Large}\">\n                                    <Image.Style>\n                                        <Style TargetType=\"FrameworkElement\">\n                                            <Style.Triggers>\n                                                <DataTrigger Binding=\"{Binding ElementName=FadeGrid, Path=Visibility}\" Value=\"Visible\">\n                                                    <Setter Property=\"DataContext\" Value=\"{Binding ElementName=ZoomBoxControl}\"/>\n                                                </DataTrigger>\n                                            </Style.Triggers>\n\n                                            <Style.Setters>\n                                                <Setter Property=\"DataContext\" Value=\"{x:Null}\"/>\n                                            </Style.Setters>\n                                        </Style>\n                                    </Image.Style>\n                                </Image>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{Binding ElementName=FadeSlider, Path=Value, StringFormat='{} {0}x'}\" \n                                           FontSize=\"16\" Padding=\"2,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" VerticalAlignment=\"Center\"/>\n\n                                <Border Grid.Row=\"1\" Grid.Column=\"1\" Background=\"{StaticResource Vector.Arrow.Blue.Right}\" Width=\"13\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                                <Border Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" BorderThickness=\"0\" \n                                        Background=\"{Binding FadeToColor, Source={x:Static t:UserSettings.All}, Converter={StaticResourceExtension ColorToBrush}}\"\n                                        Width=\"{Binding ElementName=TransitionImage, Path=ActualWidth, Mode=OneWay}\" Height=\"{Binding ElementName=TransitionImage, Path=ActualHeight, Mode=OneWay}\"\n                                        Effect=\"{StaticResource Shadow.Border.Large}\" Visibility=\"{Binding ElementName=FadeToColorRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" Text=\"{DynamicResource S.Transitions.FadeTo.Frame}\"\n                                           VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           Visibility=\"{Binding ElementName=FadeToFrameRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"9\" Grid.Column=\"0\" Margin=\"10,10,5,0\"\n                                  Visibility=\"{Binding ElementName=FadeToFrameRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Transitions.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"SlideGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Transitions.Length}\"/>\n                            <Slider Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"SlideSlider\" Minimum=\"1\" Maximum=\"20\" \n                                    AutoToolTipPlacement=\"TopLeft\" SmallChange=\"1\" IsSnapToTickEnabled=\"True\" Margin=\"10,5,5,5\"/>\n\n                            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Transitions.Delay}\"/>\n                            <Grid Grid.Row=\"3\" Margin=\"10,0,0,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.DelayMs}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"SlideDelayIntegerUpDown\" Minimum=\"10\" Maximum=\"25500\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=SlideTransitionDelay, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"4\" Margin=\"5,3\" DataContext=\"{Binding ElementName=FrameListView, Path=SelectedItem}\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Image Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"TransitionImage2\"\n                                       Source=\"{Binding Path=ImageSource, Converter={StaticResource UriToBitmapConverter}}\" Stretch=\"Uniform\"\n                                       Effect=\"{StaticResource Shadow.Border.Large}\">\n                                    <Image.Style>\n                                        <Style TargetType=\"FrameworkElement\">\n                                            <Style.Triggers>\n                                                <DataTrigger Binding=\"{Binding ElementName=SlideGrid, Path=Visibility}\" Value=\"Visible\">\n                                                    <Setter Property=\"DataContext\" Value=\"{Binding ElementName=ZoomBoxControl}\"/>\n                                                </DataTrigger>\n                                            </Style.Triggers>\n\n                                            <Style.Setters>\n                                                <Setter Property=\"DataContext\" Value=\"{x:Null}\"/>\n                                            </Style.Setters>\n                                        </Style>\n                                    </Image.Style>\n                                </Image>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{Binding ElementName=SlideSlider, Path=Value, StringFormat='{} {0}x'}\" \n                                           FontSize=\"16\" Padding=\"2,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" VerticalAlignment=\"Center\"/>\n\n                                <Border Grid.Row=\"1\" Grid.Column=\"1\" Background=\"{StaticResource Vector.Arrow.Blue.Right}\" Width=\"13\" Height=\"15\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                                <Border Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" BorderThickness=\"0\" \n                                        Width=\"{Binding ElementName=TransitionImage, Path=ActualWidth, Mode=OneWay}\" Height=\"{Binding ElementName=TransitionImage, Path=ActualHeight, Mode=OneWay}\"\n                                        Effect=\"{StaticResource Shadow.Border.Large}\" Visibility=\"{Binding ElementName=FadeToColorRadioButton, Path=IsChecked, Converter={StaticResource Bool2Visibility}}\"/>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" Text=\"{DynamicResource S.Transitions.FadeTo.Frame}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"\n                                           VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\n                            </Grid>\n\n                            <!--<Grid Grid.Row=\"2\" Visibility=\"Visible\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <n:ExtendedRadioButton Grid.Column=\"0\" x:Name=\"FromRightRadioButton\" Icon=\"{StaticResource Vector.Info}\" \n                                                       Cursor=\"Hand\" MaxSize=\"20\" Margin=\"0,3\" Padding=\"0,5\" IsChecked=\"True\"/>\n\n                                <n:ExtendedRadioButton Grid.Column=\"1\" x:Name=\"FromTopRadioButton\" Icon=\"{StaticResource Vector.Info}\" \n                                                       Cursor=\"Hand\" MaxSize=\"20\" Margin=\"0,3\" Padding=\"0,5\"/>\n\n                                <n:ExtendedRadioButton Grid.Column=\"2\" x:Name=\"FromLeftRadioButton\" Icon=\"{StaticResource Vector.Info}\" \n                                                       Cursor=\"Hand\" MaxSize=\"20\" Margin=\"0,3\" Padding=\"0,5\"/>\n\n                                <n:ExtendedRadioButton Grid.Column=\"3\" x:Name=\"FromBottomRadioButton\" Icon=\"{StaticResource Vector.Info}\" \n                                                       Cursor=\"Hand\" MaxSize=\"20\" Margin=\"0,3\" Padding=\"0,5\"/>\n                            </Grid>-->\n\n                            <Grid Grid.Row=\"5\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Transitions.Info}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\"\n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"ReduceGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Reduce.Header}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.Reduce.Factor}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"ReduceFactorIntegerUpDown\" Minimum=\"1\" Maximum=\"20\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ReduceFactor, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.Reduce.Count}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"ReduceCountIntegerUpDown\" Minimum=\"1\" Maximum=\"20\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=ReduceCount, Mode=TwoWay}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.Reduce.Delay}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10,5\" \n                                          SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=ReduceDelay, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                                    <ComboBoxItem Content=\"{DynamicResource S.Reduce.Delay.NoAdjustment}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Reduce.Delay.Previous}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.Reduce.Delay.Evenly}\"/>\n                                </ComboBox>\n\n                                <n:ExtendedCheckBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Text=\"{DynamicResource S.Reduce.ApplyToAll}\" Margin=\"0,5\"\n                                                    IsChecked=\"{Binding Source={x:Static t:UserSettings.All}, Path=ReduceApplyToAll, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                                    ToolTip=\"{DynamicResource S.Reduce.ApplyToAll.Info}\"/>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" x:Name=\"ReduceTextBlock\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" Tag=\"{DynamicResource S.Reduce.Info}\"\n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\">\n                                    <TextBlock.Text>\n                                        <MultiBinding Converter=\"{StaticResource FormatConverter}\">\n                                            <Binding ElementName=\"ReduceTextBlock\" Path=\"Tag\"/>\n                                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"ReduceCount\"/>\n                                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"ReduceFactor\"/>\n                                        </MultiBinding>\n                                    </TextBlock.Text>\n                                </TextBlock>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"RemoveDuplicatesGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.RemoveDuplicates.Header}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.RemoveDuplicates.Similarity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"DuplicatesSimilarityDoubleUpDown\" Minimum=\"0.1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=DuplicatesSimilarity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.RemoveDuplicates.Removal}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"1\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10,5\" \n                                          SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=DuplicatesRemoval, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                                    <ComboBoxItem Content=\"{DynamicResource S.RemoveDuplicates.Removal.First}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.RemoveDuplicates.Removal.Last}\"/>\n                                </ComboBox>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.RemoveDuplicates.Delay}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10,5\" \n                                          SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=DuplicatesDelay, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                                    <ComboBoxItem Content=\"{DynamicResource S.RemoveDuplicates.Delay.NoAdjustment}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.RemoveDuplicates.Delay.Average}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.RemoveDuplicates.Delay.Sum}\"/>\n                                </ComboBox>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" x:Name=\"DuplicatesTextBlock\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" Tag=\"{DynamicResource S.RemoveDuplicates.Info}\"\n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\">\n                                    <TextBlock.Text>\n                                        <MultiBinding Converter=\"{StaticResource FormatConverter}\">\n                                            <Binding ElementName=\"DuplicatesTextBlock\" Path=\"Tag\"/>\n                                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"DuplicatesSimilarity\"/>\n                                        </MultiBinding>\n                                    </TextBlock.Text>\n                                </TextBlock>\n                            </Grid>\n                        </Grid>\n\n                        <Grid x:Name=\"SmoothLoopGrid\" Visibility=\"Collapsed\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"27\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.SmoothLoop.Header}\"/>\n                            <Grid Grid.Row=\"1\" Margin=\"10,0,0,0\">\n                                <Grid.RowDefinitions>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                    <RowDefinition Height=\"Auto\"/>\n                                </Grid.RowDefinitions>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.RemoveDuplicates.Similarity}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:DoubleUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"SmoothLoopSimilarityDoubleUpDown\" Minimum=\"0.1\" Maximum=\"100\" Margin=\"10,5\" MinWidth=\"80\" \n                                                Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=SmoothLoopSimilarity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"1\" Grid.Column=\"0\" Text=\"{DynamicResource S.SmoothLoop.StartThreshold}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"SmoothLoopThresholdDoubleUpDown\" Minimum=\"1\" Margin=\"10,5\" MinWidth=\"80\" \n                                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=SmoothLoopStartThreshold, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                                <TextBlock Grid.Row=\"2\" Grid.Column=\"0\" Text=\"{DynamicResource S.SmoothLoop.From}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                                <ComboBox Grid.Row=\"2\" Grid.Column=\"1\" Grid.ColumnSpan=\"2\" Margin=\"10,5\" \n                                          SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=SmoothLoopFrom, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\n                                    <ComboBoxItem Content=\"{DynamicResource S.SmoothLoop.From.Last}\"/>\n                                    <ComboBoxItem Content=\"{DynamicResource S.SmoothLoop.From.First}\"/>\n                                </ComboBox>\n                            </Grid>\n\n                            <Grid Grid.Row=\"2\" Grid.Column=\"0\" Margin=\"10,10,5,0\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition/>\n                                </Grid.ColumnDefinitions>\n\n                                <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                <TextBlock Grid.Column=\"1\" x:Name=\"SmoothLoopTextBlock\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" Tag=\"{DynamicResource S.SmoothLoop.Info}\"\n                                           FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\">\n                                    <TextBlock.Text>\n                                        <MultiBinding Converter=\"{StaticResource FormatConverter}\">\n                                            <Binding ElementName=\"SmoothLoopTextBlock\" Path=\"Tag\"/>\n                                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"SmoothLoopSimilarity\"/>\n                                        </MultiBinding>\n                                    </TextBlock.Text>\n                                </TextBlock>\n                            </Grid>\n                        </Grid>\n                    </Grid>\n                </ScrollViewer>\n\n                <!--Apply/Save or Cancel-->\n                <Grid Grid.Row=\"2\" x:Name=\"ActionLowerGrid\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"44\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <n:ExtendedButton Grid.Column=\"0\" x:Name=\"ApplyButton\" Text=\"{DynamicResource S.Action.Apply}\" Padding=\"2,0\" MinWidth=\"90\" KeyGesture=\"Alt + E / Enter\"\n                                      FontSize=\"13\" Margin=\"5\" ContentHeight=\"22\" Icon=\"{StaticResource Vector.Ok}\" Command=\"{StaticResource Command.Ok}\"/>\n\n                    <n:ExtendedButton Grid.Column=\"1\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Action.Cancel}\" Padding=\"2,0\" MinWidth=\"90\" KeyGesture=\"Esc\"\n                                      FontSize=\"13\" Margin=\"5\" ContentHeight=\"22\" Icon=\"{StaticResource Vector.Cancel}\" Command=\"{StaticResource Command.Cancel}\"/>\n                </Grid>\n            </Grid>\n        </Grid>\n\n        <!--Lower part of the Window-->\n        <ListView Grid.Row=\"2\" x:Name=\"FrameListView\" BorderThickness=\"0,1,0,0\" IsTabStop=\"False\" Focusable=\"False\" Style=\"{StaticResource Style.ListView.Frames}\"\n                  ItemsSource=\"{Binding Path=DataContext.Frames, ElementName=EditorWindow}\" IsEnabled=\"{Binding Path=IsLoading, ElementName=EditorWindow, Converter={StaticResource InvertedBoolConverter}}\"\n                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=HasItems, Converter={StaticResource Bool2Visibility}}\"\n                  SelectionChanged=\"FrameListView_SelectionChanged\" PreviewKeyDown=\"FrameListView_PreviewKeyDown\"\n                  SelectedIndex=\"{Binding CurrentIndex, Mode=OneWayToSource}\">\n\n            <ListView.Resources>\n                <ContextMenu x:Key=\"FrameListContextMenu\">\n                    <n:ExtendedMenuItem Header=\"{DynamicResource S.Editor.List.OpenImage}\" Icon=\"{StaticResource Vector.Image}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.OpenImage}\"/>\n                    <n:ExtendedMenuItem Header=\"{DynamicResource S.Editor.List.ExploreFolder}\" Icon=\"{StaticResource Vector.Open}\" ContentHeight=\"16\" ContentWidth=\"16\" Command=\"{StaticResource Command.ExploreFolder}\"/>\n                </ContextMenu>\n            </ListView.Resources>\n\n            <ListView.ItemContainerStyle>\n                <Style TargetType=\"ListBoxItem\">\n                    <EventSetter Event=\"PreviewMouseLeftButtonDown\" Handler=\"Item_PreviewMouseLeftButtonDown\"/>\n                    <Setter Property=\"ContextMenu\" Value=\"{StaticResource FrameListContextMenu}\"/>\n                    <Setter Property=\"BorderThickness\" Value=\"1\"/>\n\n                    <Setter Property=\"Template\">\n                        <Setter.Value>\n                            <ControlTemplate TargetType=\"ListViewItem\">\n                                <Border x:Name=\"Border\" Background=\"{TemplateBinding Background}\" BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                        BorderThickness=\"{TemplateBinding BorderThickness}\" CornerRadius=\"4\" SnapsToDevicePixels=\"True\">\n                                    <ContentPresenter HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Margin=\"1\"/>\n                                </Border>\n\n                                <ControlTemplate.Triggers>\n                                    <MultiTrigger>\n                                        <MultiTrigger.Conditions>\n                                            <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                                        </MultiTrigger.Conditions>\n\n                                        <Setter Property=\"Background\" TargetName=\"Border\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                                        <Setter Property=\"BorderBrush\" TargetName=\"Border\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                                    </MultiTrigger>\n\n                                    <MultiTrigger>\n                                        <MultiTrigger.Conditions>\n                                            <Condition Property=\"Selector.IsSelectionActive\" Value=\"False\"/>\n                                            <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                        </MultiTrigger.Conditions>\n\n                                        <Setter Property=\"Background\" TargetName=\"Border\" Value=\"{DynamicResource Item.SelectedInactive.Background}\"/>\n                                        <Setter Property=\"BorderBrush\" TargetName=\"Border\" Value=\"{DynamicResource Item.SelectedInactive.Border}\"/>\n                                    </MultiTrigger>\n\n                                    <MultiTrigger>\n                                        <MultiTrigger.Conditions>\n                                            <Condition Property=\"Selector.IsSelectionActive\" Value=\"True\"/>\n                                            <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                        </MultiTrigger.Conditions>\n\n                                        <Setter Property=\"Background\" TargetName=\"Border\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                                        <Setter Property=\"BorderBrush\" TargetName=\"Border\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n                                    </MultiTrigger>\n\n                                    <Trigger Property=\"IsEnabled\" Value=\"False\">\n                                        <Setter Property=\"Opacity\" Value=\"0.7\"/>\n                                    </Trigger>\n                                </ControlTemplate.Triggers>\n                            </ControlTemplate>\n                        </Setter.Value>\n                    </Setter>\n\n                </Style>\n            </ListView.ItemContainerStyle>\n        </ListView>\n\n        <!--Status bar-->\n        <Border Grid.Row=\"3\" x:Name=\"LowerGrid\" Height=\"20\">\n            <Grid x:Name=\"LowerStatusBar\" Height=\"20\" Background=\"{DynamicResource Panel.Background.Level3}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"7\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"5\"/>\n                    <ColumnDefinition Width=\"200\"/>\n                </Grid.ColumnDefinitions>\n\n                <Grid x:Name=\"StatusGrid\" Grid.Column=\"0\" Visibility=\"Collapsed\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Label Grid.Column=\"0\" x:Name=\"StatusLabel\" Content=\"Status\" Padding=\"0\" VerticalContentAlignment=\"Center\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n                    <ProgressBar Grid.Column=\"1\" x:Name=\"StatusProgressBar\" Height=\"8\" Width=\"200\" Margin=\"2,0\" VerticalAlignment=\"Center\"/>\n                    <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelLoadingButton\" Width=\"25\" Icon=\"{StaticResource Vector.Cancel}\" Style=\"{StaticResource Style.Button.NoText}\" ContentWidth=\"15\" ContentHeight=\"15\"\n                                      ToolTip=\"{DynamicResource S.Editor.CancelDiscard}\" Visibility=\"{Binding ElementName=EditorWindow, Path=IsCancelable, Converter={StaticResource Bool2Visibility}}\" \n                                      Click=\"CancelLoadingButton_Click\"/>\n                </Grid>\n\n                <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"3,2\"/>\n\n                <StackPanel Grid.Column=\"2\" x:Name=\"HintStackPanel\" Orientation=\"Horizontal\" VerticalAlignment=\"Stretch\" HorizontalAlignment=\"Center\" Visibility=\"Collapsed\" ToolTip=\"{Binding ElementName=HintTextBlock, Path=Text}\">\n                    <Border Background=\"{StaticResource Vector.Info}\" Height=\"14\" Width=\"14\" Margin=\"0,0,8,0\" VerticalAlignment=\"Center\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                    <TextBlock x:Name=\"HintTextBlock\" Foreground=\"{DynamicResource Element.Foreground.Hint}\" FontSize=\"13\" VerticalAlignment=\"Center\" Margin=\"0,-1,0,0\" TextTrimming=\"CharacterEllipsis\" TextDecorations=\"{x:Null}\"/>\n                </StackPanel>\n\n                <Separator Grid.Column=\"3\" Width=\"1\" Margin=\"1,2\" Visibility=\"{Binding ElementName=WelcomeGrid, Path=Visibility, Converter={StaticResource InvertedVisibilityConverter}, ConverterParameter=0}\"/>\n\n                <StackPanel Grid.Column=\"4\" Orientation=\"Horizontal\" Visibility=\"{Binding ElementName=WelcomeGrid, Path=Visibility, Converter={StaticResource InvertedVisibilityConverter}, ConverterParameter=0}\"\n                            IsEnabled=\"{Binding ElementName=Zoom100Button, Path=IsEnabled}\" ToolTip=\"{DynamicResource S.Editor.Home.Zoom}\">\n                    <Border Background=\"{StaticResource Vector.Zoom}\" Height=\"16\" Width=\"16\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                    <n:IntegerUpDown Margin=\"1\" Minimum=\"5\" Maximum=\"500\" Style=\"{StaticResource IntegerUpDown.Minimal}\"\n                                     Value=\"{Binding Zoom, Converter={StaticResource IntToDecimalConverter}, ElementName=ZoomBoxControl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n                    <TextBlock Text=\"%\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n                </StackPanel>\n\n                <Separator Grid.Column=\"5\" Width=\"1\" Margin=\"1,2\" Visibility=\"{Binding ElementName=WelcomeGrid, Path=Visibility, Converter={StaticResource InvertedVisibilityConverter}, ConverterParameter=0}\"/>\n\n                <Grid Grid.Column=\"6\" x:Name=\"InfoGrid\" Visibility=\"{Binding ElementName=WelcomeGrid, Path=Visibility, Converter={StaticResource InvertedVisibilityConverter}, ConverterParameter=0}\"\n                      ToolTip=\"{DynamicResource S.Editor.FrameNumbersInfo}\" ToolTipService.Placement=\"Bottom\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Label Grid.Column=\"0\" Content=\"{Binding ElementName=FrameListView, Path=Items.Count}\" Padding=\"0\" VerticalContentAlignment=\"Center\" \n                           FontSize=\"14\" Foreground=\"#FF00A000\" Margin=\"3,0,3,0\"/>\n                    <Label Grid.Column=\"1\" Content=\"{Binding ElementName=FrameListView, Path=SelectedItems.Count}\" Padding=\"0\" VerticalContentAlignment=\"Center\" \n                           FontSize=\"14\" Foreground=\"#FFC80000\" Margin=\"3,0,3,0\"/>\n                    <Label Grid.Column=\"2\" Content=\"{Binding ElementName=FrameListView, Path=SelectedIndex}\" Padding=\"0\" VerticalContentAlignment=\"Center\" \n                           FontSize=\"14\" Foreground=\"#FF0064C8\" Margin=\"3,0,3,0\"/>\n                </Grid>\n\n                <Separator Grid.Column=\"7\" Width=\"1\" Margin=\"1,2\"/>\n\n                <Grid Grid.Column=\"8\" x:Name=\"CommandGrid\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"40\"/>\n                        <ColumnDefinition Width=\"40\"/>\n                        <ColumnDefinition Width=\"40\"/>\n                        <ColumnDefinition Width=\"40\"/>\n                        <ColumnDefinition Width=\"40\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <n:ExtendedButton Grid.Column=\"0\" x:Name=\"FirstRepeatButton\" Icon=\"{StaticResource Vector.First.Green}\" ContentWidth=\"20\" ContentHeight=\"12\"\n                                      Width=\"40\" Text=\"\" Style=\"{StaticResource Style.Button.NoText}\" Command=\"{StaticResource Command.FirstFrame}\"\n                                      ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                      ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    <n:ExtendedRepeatButton Grid.Column=\"1\" x:Name=\"PreviousRepeatButton\" Icon=\"{StaticResource Vector.Previous.Green}\" ContentWidth=\"17\" ContentHeight=\"17\"\n                                            Width=\"40\" Style=\"{StaticResource Style.RepeatButton.NoText}\" Command=\"{StaticResource Command.PreviousFrame}\"\n                                            ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                            ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                    <n:ExtendedButton Grid.Column=\"2\" x:Name=\"PlayPauseButton\" Icon=\"{StaticResource Vector.Play}\" ContentWidth=\"15\" ContentHeight=\"15\"\n                                      Width=\"40\" Style=\"{StaticResource Style.Button.NoText}\" Command=\"{StaticResource Command.Play}\"\n                                      ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                      ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                    <n:ExtendedRepeatButton Grid.Column=\"3\" x:Name=\"NextRepeatButton\" Icon=\"{StaticResource Vector.Next.Green}\" ContentWidth=\"17\" ContentHeight=\"17\"\n                                            Width=\"40\" Style=\"{StaticResource Style.RepeatButton.NoText}\" Command=\"{StaticResource Command.NextFrame}\"\n                                            ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                            ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                    <n:ExtendedButton Grid.Column=\"4\" x:Name=\"LastRepeatButton\" Icon=\"{StaticResource Vector.Last.Green}\" ContentWidth=\"20\" ContentHeight=\"12\"\n                                      Width=\"40\" Style=\"{StaticResource Style.Button.NoText}\" Command=\"{StaticResource Command.LastFrame}\"\n                                      ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                                      ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n                </Grid>\n            </Grid>\n        </Border>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Editor.xaml.cs",
    "content": "using Microsoft.Win32;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.ImageUtil;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.UserControls;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Codification.Apng;\nusing ScreenToGif.Util.Codification.Gif.Decoder;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Helpers;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.ViewModel.ExportPresets;\nusing ScreenToGif.ViewModel.ExportPresets.Image;\nusing ScreenToGif.ViewModel.ExportPresets.Other;\nusing ScreenToGif.ViewModel.Tasks;\nusing ScreenToGif.Windows.Other;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.Immutable;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing System.Windows.Media.Effects;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shell;\nusing System.Windows.Threading;\nusing Color = System.Windows.Media.Color;\nusing Cursors = System.Windows.Input.Cursors;\nusing DataFormats = System.Windows.DataFormats;\nusing DragDropEffects = System.Windows.DragDropEffects;\nusing DragEventArgs = System.Windows.DragEventArgs;\nusing Encoder = ScreenToGif.Windows.Other.Encoder;\nusing KeyEventArgs = System.Windows.Input.KeyEventArgs;\nusing ListViewItem = System.Windows.Controls.ListViewItem;\nusing OpenFileDialog = Microsoft.Win32.OpenFileDialog;\nusing Size = System.Windows.Size;\nusing VideoSource = ScreenToGif.Windows.Other.VideoSource;\n\nnamespace ScreenToGif.Windows\n{\n    public partial class Editor : INotification, IEncoding\n    {\n        #region Properties\n\n        public static readonly DependencyProperty FilledListProperty = DependencyProperty.Register(nameof(FilledList), typeof(bool), typeof(Editor), new FrameworkPropertyMetadata(false));\n        public static readonly DependencyProperty NotPreviewingProperty = DependencyProperty.Register(nameof(NotPreviewing), typeof(bool), typeof(Editor), new FrameworkPropertyMetadata(true));\n        public static readonly DependencyProperty IsLoadingProperty = DependencyProperty.Register(nameof(IsLoading), typeof(bool), typeof(Editor), new FrameworkPropertyMetadata(false));\n        public static readonly DependencyProperty TotalDurationProperty = DependencyProperty.Register(nameof(TotalDuration), typeof(TimeSpan), typeof(Editor));\n        public static readonly DependencyProperty CurrentTimeProperty = DependencyProperty.Register(nameof(CurrentTime), typeof(TimeSpan), typeof(Editor));\n        public static readonly DependencyProperty FrameSizeProperty = DependencyProperty.Register(nameof(FrameSize), typeof(Size), typeof(Editor));\n        public static readonly DependencyProperty FrameScaleProperty = DependencyProperty.Register(nameof(FrameScale), typeof(int), typeof(Editor));\n        public static readonly DependencyProperty AverageDelayProperty = DependencyProperty.Register(nameof(AverageDelay), typeof(double), typeof(Editor));\n        public static readonly DependencyProperty FrameDpiProperty = DependencyProperty.Register(nameof(FrameDpi), typeof(double), typeof(Editor));\n        public static readonly DependencyProperty IsCancelableProperty = DependencyProperty.Register(nameof(IsCancelable), typeof(bool), typeof(Editor), new FrameworkPropertyMetadata(false));\n        public static readonly DependencyProperty HasImprecisePlaybackProperty = DependencyProperty.Register(nameof(HasImprecisePlayback), typeof(bool), typeof(Editor), new FrameworkPropertyMetadata(false));\n\n        /// <summary>\n        /// True if there is a value inside the list of frames.\n        /// </summary>\n        public bool FilledList\n        {\n            get => (bool)GetValue(FilledListProperty);\n            set => SetValue(FilledListProperty, value);\n        }\n\n        /// <summary>\n        /// True if not in preview mode.\n        /// </summary>\n        public bool NotPreviewing\n        {\n            get => (bool)GetValue(NotPreviewingProperty);\n            set => SetValue(NotPreviewingProperty, value);\n        }\n\n        /// <summary>\n        /// True if loading frames.\n        /// </summary>\n        public bool IsLoading\n        {\n            get => (bool)GetValue(IsLoadingProperty);\n            set => SetValue(IsLoadingProperty, value);\n        }\n\n        /// <summary>\n        /// The total duration of the animation. Used by the statistics tab.\n        /// </summary>\n        private TimeSpan TotalDuration\n        {\n            get => (TimeSpan)GetValue(TotalDurationProperty);\n            set => SetValue(TotalDurationProperty, value);\n        }\n\n        /// <summary>\n        /// The cumulative duration of the animation. Used by the statistics tab.\n        /// </summary>\n        private TimeSpan CurrentTime\n        {\n            get => (TimeSpan)GetValue(CurrentTimeProperty);\n            set => SetValue(CurrentTimeProperty, value);\n        }\n\n        /// <summary>\n        /// The size of the frames. Used by the statistics tab.\n        /// </summary>\n        private Size FrameSize\n        {\n            get => (Size)GetValue(FrameSizeProperty);\n            set => SetValue(FrameSizeProperty, value);\n        }\n\n        /// <summary>\n        /// The scale of the frames in %. Used by the statistics tab.\n        /// </summary>\n        private int FrameScale\n        {\n            get => (int)GetValue(FrameScaleProperty);\n            set => SetValue(FrameScaleProperty, value);\n        }\n\n        /// <summary>\n        /// The average delay of the animation. Used by the statistics tab.\n        /// </summary>\n        private double AverageDelay\n        {\n            get => (double)GetValue(AverageDelayProperty);\n            set => SetValue(AverageDelayProperty, value);\n        }\n\n        /// <summary>\n        /// The DPI of the frames. Used by the statistics tab.\n        /// </summary>\n        private double FrameDpi\n        {\n            get => (double)GetValue(FrameDpiProperty);\n            set => SetValue(FrameDpiProperty, value);\n        }\n\n        /// <summary>\n        /// True if the current recording being loaded can be cancelled.\n        /// </summary>\n        public bool IsCancelable\n        {\n            get => (bool)GetValue(IsCancelableProperty);\n            set => SetValue(IsCancelableProperty, value);\n        }\n\n        /// <summary>\n        /// True if the system can't play back the animation at the correct speed.\n        /// </summary>\n        public bool HasImprecisePlayback\n        {\n            get => (bool)GetValue(HasImprecisePlaybackProperty);\n            set => SetValue(HasImprecisePlaybackProperty, value);\n        }\n\n        #endregion\n\n        #region Variables\n\n        /// <summary>\n        /// The current project.\n        /// </summary>\n        public ProjectInfo Project { get; set; }\n\n        /// <summary>\n        /// Last selected frame index. Used to track users last selection and decide which frame to show.\n        /// </summary>\n        private int LastSelected { get; set; } = -1;\n\n        /// <summary>\n        /// True if the user was selecting frames using the FirstFrame/Previous/Next/LastFrame commands or the scroll wheel.\n        /// </summary>\n        private bool WasChangingSelection { get; set; }\n\n        /// <summary>\n        /// True if the user was previewing the recording.\n        /// </summary>\n        private bool WasPreviewing { get; set; }\n\n        /// <summary>\n        /// True if the PC is sleeping.\n        /// </summary>\n        private bool Slept { get; set; }\n\n        /// <summary>\n        /// True if this is the encoder window.\n        /// </summary>\n        public bool IsEncoderWindow { get; } = false;\n\n        private readonly EditorViewModel _viewModel;\n\n        private CancellationTokenSource _previewToken;\n\n        private Action<object, RoutedEventArgs> _applyAction = null;\n\n        private bool _abortLoading;\n\n        /// <summary>\n        /// Lock used to prevent firing multiple times (at the same time) both the Activated/Deactivated events.\n        /// </summary>\n        public static readonly object ActivateLock = new();\n\n        #endregion\n\n        public Editor()\n        {\n            InitializeComponent();\n\n            _viewModel = DataContext as EditorViewModel;\n        }\n\n        #region Main Events\n\n        private async void Window_Loaded(object sender, RoutedEventArgs e)\n        {\n            SystemEvents.PowerModeChanged += System_PowerModeChanged;\n            SystemEvents.DisplaySettingsChanged += System_DisplaySettingsChanged;\n            SystemParameters.StaticPropertyChanged += SystemParameters_StaticPropertyChanged;\n\n            #region Adjust the position\n\n            //Tries to adjust the position/size of the window, centers on screen otherwise.\n            if (!UpdatePositioning())\n                WindowStartupLocation = WindowStartupLocation.CenterScreen;\n\n            #endregion\n\n            ScrollSynchronizer.SetScrollGroup(ZoomBoxControl.GetScrollViewer(), \"Canvas\");\n            ScrollSynchronizer.SetScrollGroup(MainScrollViewer, \"Canvas\");\n            ScrollSynchronizer.SetScrollGroup(BehindScrollViewer, \"Canvas\");\n\n            DisplayUpdatePromoter();\n\n            #region Load\n\n            if (Project != null)\n            {\n                ShowProgress(LocalizationHelper.Get(\"S.Editor.Preparing\"), Project.Frames.Count, true);\n\n                Cursor = Cursors.AppStarting;\n                IsLoading = true;\n                IsCancelable = true;\n\n                ActionStack.Project = Project;\n\n                var result = await Task.Run(Load);\n                LoadCallback(result);\n\n                return;\n            }\n\n            #endregion\n\n            //Open with...\n            LoadFromArguments();\n            Arguments.ClearAutomationArgs();\n\n            RibbonTabControl.SelectedIndex = 0;\n\n            WelcomeTextBlock.Text = LocalizationHelper.Get(Humanizer.WelcomeInfo());\n            SymbolTextBlock.Text = Humanizer.Welcome();\n        }\n\n        private void Window_Activated(object sender, EventArgs e)\n        {\n            lock (ActivateLock)\n            {\n                RibbonTabControl.UpdateVisual();\n\n                //Returns the preview if it was playing before the deactivation of the window.\n                if (WasPreviewing)\n                {\n                    WasPreviewing = false;\n                    PlayPause();\n                }\n            }\n        }\n\n        private void Window_Deactivated(object sender, EventArgs e)\n        {\n            if (!IsLoaded)\n                return;\n\n            lock (ActivateLock)\n            {\n                try\n                {\n                    //Debug.WriteLine(\"Deactivated\");\n                    RibbonTabControl.UpdateVisual(false);\n\n                    //Pauses the recording preview.\n                    if (_previewToken != null)\n                    {\n                        WasPreviewing = true;\n                        Pause();\n                    }\n                }\n                catch (Exception ex)\n                {\n                    LogWriter.Log(ex, \"Exception when losing focus on window.\");\n                }\n            }\n        }\n\n        private void Window_KeyUp(object sender, KeyEventArgs e)\n        {\n            if (e.SystemKey == Key.LeftAlt)\n                e.Handled = true;\n        }\n\n        private void Window_DpiChanged(object sender, DpiChangedEventArgs e)\n        {\n            if (Math.Abs(e.NewDpi.PixelsPerInchX - e.OldDpi.PixelsPerInchX) < 0.01)\n                return;\n\n            ZoomBoxControl.RefreshImage();\n\n            if (e.OriginalSource is not Image)\n                Cancel_Executed(sender, null);\n        }\n\n        private void Window_Closing(object sender, CancelEventArgs e)\n        {\n            //TODO: What if there's any processing happening? I need to try to stop.\n\n            Pause();\n            ClosePanel();\n\n            if (Project != null && Project.Any)\n            {\n                Project.Persist();\n\n                if (UserSettings.All.NotifyWhileClosingEditor && !Dialog.Ask(LocalizationHelper.Get(\"S.Editor.Exiting.Title\"), LocalizationHelper.Get(\"S.Editor.Exiting.Instruction\"),\n                        LocalizationHelper.Get(UserSettings.All.AutomaticCleanUp ? \"S.Editor.Exiting.Message2\" : \"S.Editor.Exiting.Message\")))\n                {\n                    e.Cancel = true;\n                    return;\n                }\n\n                Project.Clear();\n\n                //Remove the ActionStack.\n                ActionStack.Clear();\n            }\n\n            //Manually get the position/size of the window, so it's possible opening multiple instances.\n            UserSettings.All.EditorTop = Top;\n            UserSettings.All.EditorLeft = Left;\n            UserSettings.All.EditorWidth = Width;\n            UserSettings.All.EditorHeight = Height;\n            UserSettings.All.EditorWindowState = WindowState;\n            UserSettings.Save();\n\n            Encoder.TryClose();\n\n            SystemEvents.PowerModeChanged -= System_PowerModeChanged;\n            SystemEvents.DisplaySettingsChanged -= System_DisplaySettingsChanged;\n            SystemParameters.StaticPropertyChanged -= SystemParameters_StaticPropertyChanged;\n        }\n\n\n        private void ZoomBox_MouseWheel(object sender, MouseWheelEventArgs e)\n        {\n            if (Keyboard.Modifiers == ModifierKeys.Control || Keyboard.Modifiers == ModifierKeys.Shift || Keyboard.Modifiers == ModifierKeys.Alt)\n            {\n                #region Translate the Element (Scroll)\n\n                if (sender.GetType() == typeof(ScrollViewer))\n                {\n                    switch (Keyboard.Modifiers)\n                    {\n                        case ModifierKeys.Alt:\n\n                            var verDelta = e.Delta > 0 ? -10.5 : 10.5;\n                            MainScrollViewer.ScrollToVerticalOffset(MainScrollViewer.VerticalOffset + verDelta);\n\n                            break;\n                        case ModifierKeys.Shift:\n\n                            var horDelta = e.Delta > 0 ? -10.5 : 10.5;\n                            MainScrollViewer.ScrollToHorizontalOffset(MainScrollViewer.HorizontalOffset + horDelta);\n\n                            break;\n                    }\n\n                    return;\n                }\n\n                #endregion\n\n                e.Handled = false;\n                return;\n            }\n\n            WasChangingSelection = true;\n\n            if (e.Delta > 0)\n            {\n                if (FrameListView.SelectedIndex == -1 || FrameListView.SelectedIndex == _viewModel.Frames.Count - 1)\n                {\n                    FrameListView.SelectedIndex = 0;\n                    return;\n                }\n\n                //Show next frame.\n                FrameListView.SelectedIndex++;\n            }\n            else\n            {\n                if (FrameListView.SelectedIndex == -1 || FrameListView.SelectedIndex == 0)\n                {\n                    FrameListView.SelectedIndex = _viewModel.Frames.Count - 1;\n                    return;\n                }\n\n                //Show previous frame.\n                FrameListView.SelectedIndex--;\n            }\n        }\n\n        private void ZoomBoxControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n        {\n            //Perhaps ignore when the mouse up happened because of a drag?\n            if (_previewToken != null || !NotPreviewing)\n                (FindResource(\"Command.Play\") as RoutedUICommand)?.Execute(null, this);\n        }\n\n        private void System_PowerModeChanged(object sender, PowerModeChangedEventArgs e)\n        {\n            if (e.Mode == PowerModes.Suspend)\n            {\n                Slept = true;\n                Pause();\n                GC.Collect();\n                return;\n            }\n\n            Slept = false;\n        }\n\n        private void System_DisplaySettingsChanged(object sender, EventArgs e)\n        {\n            UpdatePositioning(false);\n        }\n\n        private void SystemParameters_StaticPropertyChanged(object sender, PropertyChangedEventArgs e)\n        {\n            if (Slept)\n                return;\n\n            //If the window color changes, update the tabs style.\n            if (e.PropertyName == \"WindowGlassColor\")\n                RibbonTabControl.UpdateVisual(IsActive);\n        }\n\n        #endregion\n\n        #region Frame Selection\n\n        private void FrameListView_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            #region If nothing selected\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                UpdateOtherStatistics();\n                ZoomBoxControl.ImageSource = null;\n                return;\n            }\n\n            #endregion\n\n            if (LastSelected == -1 || _previewToken != null || WasChangingSelection || LastSelected >= _viewModel.Frames.Count || (e.AddedItems.Count > 0 && e.RemovedItems.Count > 0))\n                LastSelected = FrameListView.SelectedIndex;\n\n            FrameViewModel current;\n\n            if (_previewToken != null || WasChangingSelection)\n            {\n                current = _viewModel.Frames[FrameListView.SelectedIndex];\n            }\n            else\n            {\n                //TODO: Test with other key shortcuts, because Ctrl + Z/Y was breaking this code.\n\n                //current = _viewModel.Frames.GetItemAt(LastSelected) as FrameListBoxItem;\n                if (Keyboard.FocusedElement is ListViewItem focused && focused.IsVisible && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) || Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))\n                    current = FrameListView.ItemContainerGenerator.ItemFromContainer(focused) as FrameViewModel;\n                else\n                    current = _viewModel.Frames.FirstOrDefault(x => FrameListView.ItemContainerGenerator.ContainerFromItem(x) is ListViewItem container && (container.IsFocused || container.IsSelected));\n            }\n\n            //If there's no focused item.\n            if (current == null)\n            {\n                if (_viewModel.Frames.Count - 1 > LastSelected)\n                    FrameListView.SelectedIndex = LastSelected;\n                else\n                    FrameListView.SelectedIndex = LastSelected = _viewModel.Frames.Count - 1;\n\n                if (FrameListView.SelectedIndex > -1)\n                    current = _viewModel.Frames[FrameListView.SelectedIndex];\n            }\n\n            if (current != null)\n            {\n                var index = _viewModel.Frames.IndexOf(current);\n\n                if (index > -1 && Project.Frames.Count > index)\n                {\n                    ZoomBoxControl.ImageSource = Project.Frames[index].Path;\n                    FrameListView.ScrollIntoView(current);\n                }\n\n                if (FrameListView.ItemContainerGenerator.ContainerFromIndex(index) is ListViewItem container)\n                {\n                    if (!container.IsFocused && _previewToken == null)// && !WasChangingSelection)\n                        container.Focus();\n                }\n            }\n\n            if (_previewToken == null)\n                UpdateOtherStatistics();\n\n            WasChangingSelection = false;\n        }\n\n        private void Item_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n        {\n            if (sender is not FrameViewModel item) // && !WasChangingSelection)\n                return;\n\n            LastSelected = item.Number;\n\n            if (FrameListView.ItemContainerGenerator.ContainerFromItem(item) is ListViewItem container)\n                Keyboard.Focus(container);\n        }\n\n        #endregion\n\n\n        #region File Tab\n\n        #region New/Open\n\n        private void NewRecording_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = !IsLoading && !e.Handled && Application.Current.Windows.OfType<Window>().All(a => !(a is BaseRecorder));\n        }\n\n        private void NewProject_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = !IsLoading && !e.Handled;\n        }\n\n        private void NewRecording_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n            WindowState = WindowState.Minimized;\n            ShowInTaskbar = false;\n            Encoder.Minimize();\n            ClosePanel(removeEvent: true);\n\n            App.MainViewModel.OpenRecorder.Execute(this);\n        }\n\n        private void NewWebcamRecording_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n            ClosePanel(removeEvent: true);\n\n            App.MainViewModel.OpenWebcamRecorder.Execute(this);\n        }\n\n        private void NewBoardRecording_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n            ClosePanel(removeEvent: true);\n\n            App.MainViewModel.OpenBoardRecorder.Execute(this);\n        }\n\n        private void NewProject_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.NewAnimation, LocalizationHelper.Get(\"S.Editor.File.Blank\", true), \"Vector.File.New\", ApplyNewProjectButton_Click);\n        }\n\n        private void ApplyNewProjectButton_Click(object sender, RoutedEventArgs e)\n        {\n            Pause();\n\n            //Start new project.\n            var project = new ProjectInfo().CreateProjectFolder(ProjectByType.Editor);\n\n            var fileName = Path.Combine(project.FullPath, \"0.png\");\n\n            #region Create and Save Image\n\n            using (var stream = new FileStream(fileName, FileMode.Create))\n            {\n                var bitmapSource = ImageMethods.CreateEmtpyBitmapSource(UserSettings.All.NewAnimationColor, UserSettings.All.NewAnimationWidth, UserSettings.All.NewAnimationHeight, this.Dpi(), PixelFormats.Indexed1);\n\n                if (bitmapSource.Format != PixelFormats.Bgra32 && bitmapSource.Format != PixelFormats.Bgr32)\n                    bitmapSource = new FormatConvertedBitmap(bitmapSource, PixelFormats.Bgra32, null, 0);\n\n                var bitmapFrame = BitmapFrame.Create(bitmapSource);\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(bitmapFrame);\n                encoder.Save(stream);\n                stream.Flush();\n                stream.Close();\n            }\n\n            GC.Collect();\n\n            #endregion\n\n            ClosePanel();\n\n            project.Frames = [new FrameInfo(fileName, 66)];\n\n            LoadProject(project);\n            ShowHint(\"S.Hint.NewAnimation\");\n        }\n\n        public void RecorderCallback(ProjectInfo project)\n        {\n            Activate();\n\n            if (project?.Any == true)\n            {\n                LoadProject(project);\n                ShowHint(\"S.Hint.NewRecording\");\n            }\n\n            Encoder.Restore();\n            ShowInTaskbar = true;\n            WindowState = WindowState == WindowState.Minimized ? WindowState.Normal : WindowState;\n        }\n\n        #endregion\n\n        #region Insert\n\n        private void Insert_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = Project != null && Project.Frames.Count > 0 && FrameListView.SelectedIndex != -1 && !IsLoading && !e.Handled && Application.Current.Windows.OfType<Window>().All(a => !(a is BaseRecorder));\n        }\n\n        private void InsertFromMedia_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = Project != null && Project.Frames.Count > 0 && FrameListView.SelectedIndex != -1 && !IsLoading && !e.Handled;\n        }\n\n        private async void InsertRecording_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n            WindowState = WindowState.Minimized;\n            Encoder.Minimize();\n\n            if (UserSettings.All.NewRecorder)\n            {\n                var recorder = new NewRecorder();\n                recorder.Closed += async (o, args) =>\n                {\n                    await InsertAfterRecording(recorder);\n                };\n                recorder.ShowDialog();\n            }\n            else\n            {\n                var recorder = new Recorder();\n                recorder.ShowDialog();\n\n                await InsertAfterRecording(recorder);\n            }\n        }\n\n        private async Task InsertAfterRecording(BaseScreenRecorder recorder)\n        {\n            var project = recorder.Project;\n\n            if (project == null || recorder.Project?.Frames == null || !recorder.Project.Any)\n            {\n                GC.Collect();\n\n                Encoder.Restore();\n                WindowState = WindowState.Normal;\n                return;\n            }\n\n            var insert = new Insert(Project.Frames.CopyList(), project.Frames, FrameListView.SelectedIndex) { Owner = this };\n            var result = insert.ShowDialog();\n\n            if (result.HasValue && result.Value)\n            {\n                Project.Frames = insert.CurrentList;\n                await LoadSelectedStarter(0);\n            }\n\n            Encoder.Restore();\n            WindowState = WindowState.Normal;\n        }\n\n        private async void InsertWebcamRecording_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n\n            var recorder = new Webcam();\n            recorder.ShowDialog();\n\n            #region If recording cancelled\n\n            if (recorder.Project?.Frames == null || !recorder.Project.Any)\n            {\n                GC.Collect();\n\n                return;\n            }\n\n            #endregion\n\n            #region Insert\n\n            var insert = new Insert(Project.Frames.CopyList(), recorder.Project.Frames, FrameListView.SelectedIndex) { Owner = this };\n\n            var result = insert.ShowDialog();\n\n            if (result.HasValue && result.Value)\n            {\n                Project.Frames = insert.CurrentList;\n                await LoadSelectedStarter(0);\n            }\n\n            #endregion\n        }\n\n        private async void InsertBoardRecording_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n\n            var recorder = new Board();\n            recorder.ShowDialog();\n\n            #region If recording cancelled\n\n            if (recorder.Project?.Frames == null || !recorder.Project.Any)\n            {\n                GC.Collect();\n\n                return;\n            }\n\n            #endregion\n\n            #region Insert\n\n            var insert = new Insert(Project.Frames.CopyList(), recorder.Project.Frames, FrameListView.SelectedIndex) { Owner = this };\n\n            var result = insert.ShowDialog();\n\n            if (result.HasValue && result.Value)\n            {\n                Project.Frames = insert.CurrentList;\n                await LoadSelectedStarter(0);\n            }\n\n            #endregion\n        }\n\n        private async void InsertFromMedia_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n\n            var ofd = new OpenFileDialog\n            {\n                Multiselect = true,\n                AddExtension = true,\n                CheckFileExists = true,\n                Title = LocalizationHelper.Get(\"S.Editor.File.OpenMedia\"),\n                Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.All\")} (*.apng, *.avi, *.bmp, *.gif, *.jpg, *.jpeg, *.mkv, *.mp4, *.png, *.webp, *.webm, *.wmv)|*.apng;*.avi;*.bmp;*.gif;*.jpg;*.jpeg;*.mkv;*.mp4;*.png;*.webp;*.webm;*.wmv|\" +\n                         $\"{LocalizationHelper.Get(\"S.Editor.File.Image\")} (*.apng, *.bmp, *.gif, *.jpg, *.jpeg, *.png)|*.apng;*.bmp;*.gif;*.jpg;*.jpeg;*.png|\" +\n                         $\"{LocalizationHelper.Get(\"S.Editor.File.Video\")} (*.avi, *.mkv, *.mp4, *.webp, *.webm, *.wmv)|*.avi;*.mkv;*.mp4;*.webp;*.webm;*.wmv\",\n            };\n\n            var result = ofd.ShowDialog();\n\n            #region Validation\n\n            var extensionList = ofd.FileNames.Select(Path.GetExtension).ToList();\n\n            var media = new[] { \"apng\", \"avi\", \"bmp\", \"gif\", \"jpg\", \"jpeg\", \"mkv\", \"mp4\", \"png\", \"webp\", \"webm\", \"wmv\" };\n\n            var projectCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && (x.Equals(\"stg\") || x.Equals(\"zip\")));\n            var mediaCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && media.Contains(x));\n\n            if (projectCount != 0 && mediaCount != 0)\n            {\n                Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.Editor.InvalidLoadingFiles\")));\n                return;\n            }\n\n            #endregion\n\n            if (result.HasValue && result.Value)\n            {\n                var done = await InsertImportFrom(ofd.FileNames.ToList());\n\n                if (!done)\n                {\n                    Cursor = Cursors.Arrow;\n                    IsLoading = false;\n                    HideProgress();\n\n                    ClosePanel(removeEvent: true);\n\n                    FrameListView.Focus();\n                    CommandManager.InvalidateRequerySuggested();\n                }\n            }\n        }\n\n        #endregion\n\n        #region File\n\n        private void File_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = Project != null && Project.Any && !IsLoading && !e.Handled;\n        }\n\n        private void SaveAs_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            ShowPanel(PanelTypes.SaveAs, LocalizationHelper.Get(\"S.Editor.File.Save\", true), \"Vector.Save\", SaveAsButton_Click);\n        }\n\n        private async void SaveAsButton_Click(object sender, RoutedEventArgs e)\n        {\n            StatusList.Remove(StatusType.Warning);\n\n            try\n            {\n                if (CustomContentControl.Content is not ExportPanel panel)\n                    return;\n\n                //Lock UI.\n                IsLoading = true;\n\n                if (!await panel.IsValid())\n                    return;\n\n                var preset = panel.GetPreset();\n\n                //Set some transient properties.\n                var size = Project.Frames[0].Path.SizeOf();\n                preset.Width = size.Width;\n                preset.Height = size.Height;\n                preset.Scale = this.Scale();\n\n                if (await Task.Run(() => SaveAsync(preset)))\n                    ClosePanel();\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Error while exporting\");\n                StatusList.Error(ex.Message, StatusReasons.InvalidState); //TODO: Put a proper message and localize it.\n            }\n            finally\n            {\n                //Workaround for not disabling the CanExecute of the panel.\n                _applyAction = SaveAsButton_Click;\n\n                //Return state of UI.\n                Cursor = Cursors.Arrow;\n                IsLoading = false;\n\n                HideProgress();\n\n                CommandManager.InvalidateRequerySuggested();\n            }\n        }\n\n\n        private async void Load_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n\n            var ofd = new OpenFileDialog\n            {\n                Multiselect = true,\n                AddExtension = true,\n                CheckFileExists = true,\n                Title = LocalizationHelper.Get(\"S.Editor.File.OpenMediaProject\"),\n                Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.All\")} (*.apng, *.avi, *.avif, *.bmp, *.gif, *.jpg, *.jpeg, *.mkv, *.mp4, *.png, *.stg, *.webp, *.webm, *.wmv, *.zip)|*.apng;*.avi;*.avif;*.bmp;*.gif;*.jpg;*.jpeg;*.mkv;*.mp4;*.png;*.stg;*.webp;*.webm;*.wmv;*.zip|\" +\n                         $\"{LocalizationHelper.Get(\"S.Editor.File.Image\")} (*.apng, *.avif, *.bmp, *.gif, *.jpg, *.jpeg, *.png)|*.apng;*.avif;*.bmp;*.gif;*.jpg;*.jpeg;*.png|\" +\n                         $\"{LocalizationHelper.Get(\"S.Editor.File.Video\")} (*.avi, *.mkv, *.mp4, *.webp, *.webm, *.wmv)|*.avi;*.mkv;*.mp4;*.webp;*.webm;*.wmv|\" +\n                         $\"{LocalizationHelper.Get(\"S.Editor.File.Project\")} (*.stg, *.zip) |*.stg;*.zip\",\n            };\n\n            var result = ofd.ShowDialog();\n\n            #region Validation\n\n            var extensionList = ofd.FileNames.Select(s => Path.GetExtension(s).ToLowerInvariant()).ToList();\n\n            var media = new[] { \"apng\", \"avi\", \"avif\", \"bmp\", \"gif\", \"jpg\", \"jpeg\", \"mkv\", \"mp4\", \"png\", \"webp\", \"webm\", \"wmv\" };\n\n            var projectCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && (x.Equals(\".stg\") || x.Equals(\".zip\")));\n            var mediaCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && media.Contains(x));\n\n            if (projectCount != 0 && mediaCount != 0)\n            {\n                Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.Editor.InvalidLoadingFiles\")));\n                return;\n            }\n\n            #endregion\n\n            if (result.HasValue && result.Value)\n            {\n                await Task.Run(() => ImportFrom(ofd.FileNames.ToList()));\n\n                CommandManager.InvalidateRequerySuggested();\n            }\n        }\n\n        private void LoadRecent_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n\n            ShowPanel(PanelTypes.LoadRecent, LocalizationHelper.Get(\"S.Editor.File.LoadRecent\", true), \"Vector.Project\", LoadRecentButton_Click);\n        }\n\n        private void RecentDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)\n        {\n            LoadRecentButton_Click(sender, e);\n        }\n\n        private void RecentDataGrid_PreviewKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.Key is Key.Return or Key.Enter)\n            {\n                LoadRecentButton_Click(sender, e);\n                e.Handled = true;\n            }\n        }\n\n        private void LoadRecentButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (RecentDataGrid.SelectedIndex < 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Recent.Warning.NoSelection\"));\n                return;\n            }\n\n            try\n            {\n                if (RecentDataGrid.SelectedItem is not ProjectInfo project)\n                    throw new Exception(\"Nothing selected\");\n\n                if (Project != null && Project.RelativePath == project.RelativePath)\n                {\n                    StatusList.Warning(LocalizationHelper.Get(\"S.Recent.Warning.SameProject\"));\n                    return;\n                }\n\n                if (MutexList.IsInUse(project.RelativePath))\n                {\n                    StatusList.Warning(LocalizationHelper.Get(\"S.Recent.Warning.AnotherEditor\"));\n                    return;\n                }\n\n                LoadProject(project, true, false, true);\n            }\n            catch (Exception ex)\n            {\n                ErrorDialog.Ok(\"ScreenToGif\", \"Error while trying to load\", ex.Message, ex);\n                return;\n            }\n\n            _applyAction = null;\n\n            ClosePanel();\n        }\n\n        private void DiscardProject_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Discard(UserSettings.All.NotifyProjectDiscard);\n        }\n\n        #endregion\n\n        #endregion\n\n        #region Home Tab\n\n        #region Action Stack\n\n        private void Undo_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = ActionStack.CanUndo() && !IsLoading && !e.Handled;\n        }\n\n        private void Reset_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = ActionStack.CanReset() && !IsLoading && !e.Handled;\n        }\n\n        private void Redo_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = ActionStack.CanRedo() && !IsLoading && !e.Handled;\n        }\n\n        private void Undo_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ClosePanel();\n\n            Project.Frames = ActionStack.Undo(Project.Frames.CopyList());\n            LoadProject(Project, false, false);\n\n            ShowHint(\"S.Hint.Undo\");\n        }\n\n        private void Reset_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ClosePanel();\n\n            Project.Frames = ActionStack.Reset(Project.Frames.CopyList());\n            LoadProject(Project, false, false);\n\n            ShowHint(\"S.Hint.Reset\");\n        }\n\n        private void Redo_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ClosePanel();\n\n            Project.Frames = ActionStack.Redo(Project.Frames.CopyList());\n            LoadProject(Project, false, false);\n\n            ShowHint(\"S.Hint.Redo\");\n        }\n\n        #endregion\n\n        #region ClipBoard\n\n        private void ClipBoard_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView != null && FrameListView.SelectedItem != null && !IsLoading && !e.Handled;\n        }\n\n        private void Cut_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n            Pause();\n\n            #region Validation\n\n            if (FrameListView.SelectedItems.Count == _viewModel.Frames.Count)\n            {\n                Dialog.Ok(FindResource(\"S.Editor.Clipboard.InvalidCut.Title\").ToString(),\n                    FindResource(\"S.Editor.Clipboard.InvalidCut.Instruction\").ToString(),\n                    FindResource(\"S.Editor.Clipboard.InvalidCut.Message\").ToString(), Icons.Info);\n                return;\n            }\n\n            #endregion\n\n            var index = FrameListView.SelectedItems.OfType<FrameViewModel>().OrderBy(x => x.Number).First().Number;\n\n            ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, SelectedFramesIndex());\n\n            var selected = FrameListView.SelectedItems.OfType<FrameViewModel>().ToList();\n            var list = selected.Select(item => Project.Frames[item.Number]).ToList();\n\n            FrameListView.SelectedIndex = -1;\n\n            if (!Util.Clipboard.Cut(list))\n            {\n                Dialog.Ok(\"Clipboard Exception\", \"Impossible to cut selected frames.\",\n                    \"Something wrong happened, please report this issue (by sending the exception log).\");\n\n                Undo_Executed(null, null);\n\n                return;\n            }\n\n            selected.OrderByDescending(x => x.Number).ToList().ForEach(x => Project.Frames.RemoveAt(x.Number));\n            selected.OrderByDescending(x => x.Number).ToList().ForEach(x => _viewModel.Frames.Remove(x));\n\n            AdjustFrameNumbers(index);\n            SelectNear(index);\n\n            #region Item\n\n            var imageItem = new ExtendedListBoxItem\n            {\n                Author = DateTime.Now.ToString(\"HH:mm:ss\", CultureInfo.CurrentUICulture)\n            };\n\n            if (selected.Count > 1)\n            {\n                imageItem.Tag = $\"{LocalizationHelper.Get(\"S.ImportVideo.Frames\")} {string.Join(\", \", selected.Select(x => x.Number))}\";\n                imageItem.Icon = FindResource(\"Vector.ImageStack\") as Brush;\n                imageItem.Content = $\"{list.Count} Images\";\n            }\n            else\n            {\n                imageItem.Tag = $\"{LocalizationHelper.Get(\"S.Editor.List.Frame\")} {selected[0].Number}\";\n                imageItem.Icon = FindResource(\"Vector.Image\") as Brush;\n                imageItem.Content = $\"{list.Count} Image\";\n            }\n\n            #endregion\n\n            ClipboardListBox.Items.Add(imageItem);\n            ClipboardListBox.SelectedIndex = ClipboardListBox.Items.Count - 1;\n\n            ShowHint(\"S.Hint.Cut\", false, selected.Count);\n\n            ShowPanel(PanelTypes.Clipboard, LocalizationHelper.Get(\"S.Editor.Home.Clipboard\", true), \"Vector.Paste\");\n        }\n\n        private void Copy_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            var selected = FrameListView.SelectedItems.OfType<FrameViewModel>().ToList();\n            var list = selected.Select(item => Project.Frames[item.Number]).ToList();\n\n            if (!Util.Clipboard.Copy(list))\n            {\n                Dialog.Ok(\"Clipboard Exception\", \"Impossible to copy selected frames.\",\n                    \"Something wrong happened, please report this issue (by sending the exception log).\");\n                return;\n            }\n\n            #region Item\n\n            var imageItem = new ExtendedListBoxItem\n            {\n                Author = DateTime.Now.ToString(\"HH:mm:ss\", CultureInfo.CurrentUICulture)\n            };\n\n            if (list.Count > 1)\n            {\n                imageItem.Tag = $\"{LocalizationHelper.Get(\"S.ImportVideo.Frames\")} {string.Join(\", \", selected.Select(x => x.Number))}\";\n                imageItem.Icon = FindResource(\"Vector.ImageStack\") as Brush;\n                imageItem.Content = LocalizationHelper.GetWithFormat(\"S.Clipboard.Entry.Images\", \"{0} images\", list.Count);\n            }\n            else\n            {\n                imageItem.Tag = $\"{LocalizationHelper.Get(\"S.Editor.List.Frame\")} {selected[0].Number}\";\n                imageItem.Icon = FindResource(\"Vector.Image\") as Brush;\n                imageItem.Content = LocalizationHelper.GetWithFormat(\"S.Clipboard.Entry.Image\", \"{0} image\", list.Count);\n            }\n\n            #endregion\n\n            ClipboardListBox.Items.Add(imageItem);\n            ClipboardListBox.SelectedIndex = ClipboardListBox.Items.Count - 1;\n\n            ShowHint(\"S.Hint.Copy\", false, selected.Count);\n\n            ShowPanel(PanelTypes.Clipboard, LocalizationHelper.Get(\"S.Editor.Home.Clipboard\", true), \"Vector.Paste\");\n        }\n\n        private void Paste_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView?.SelectedItem != null && Util.Clipboard.Items.Count > 0 && ClipboardListBox.SelectedItem != null;\n        }\n\n        private async void Paste_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            var index = FrameListView.SelectedItems.OfType<FrameViewModel>().Last().Number;\n            index = PasteBeforeRadioButton.IsChecked.HasValue && PasteBeforeRadioButton.IsChecked.Value ? index : index + 1;\n\n            var clipData = Util.Clipboard.Paste(Project.FullPath, ClipboardListBox.SelectedIndex, ClipboardListBox.SelectedIndex);\n\n            ActionStack.SaveState(ActionStack.EditAction.Add, index, clipData.Count);\n\n            Project.Frames.InsertRange(index, clipData);\n\n            ClosePanel();\n\n            await LoadSelectedStarter(index, Project.Frames.Count - 1);\n\n            ShowHint(\"S.Hint.Paste\", false, clipData.Count);\n        }\n\n        private void ShowClipboardButton_Click(object sender, RoutedEventArgs e)\n        {\n            ShowPanel(PanelTypes.Clipboard, LocalizationHelper.Get(\"S.Editor.Home.Clipboard\", true), \"Vector.Paste\");\n        }\n\n\n        private void ClipBoardSelection_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = ClipboardListBox.SelectedItem != null && !IsLoading;\n        }\n\n        private void ExploreClipBoard_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            try\n            {\n                var selected = Util.Clipboard.Items[ClipboardListBox.SelectedIndex];\n\n                ProcessHelper.StartWithShell(Path.GetDirectoryName(selected[0].Path));\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to browse the clipboard folder\");\n                Dialog.Ok(Title, \"Impossible to browse the clipboard folder\", ex.Message);\n            }\n        }\n\n        private void RemoveClipboard_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Util.Clipboard.Remove(ClipboardListBox.SelectedIndex);\n            ClipboardListBox.Items.RemoveAt(ClipboardListBox.SelectedIndex);\n        }\n\n        #endregion\n\n        #region Zoom\n\n        private void Zoom_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = Project != null && Project.Any && !IsLoading && !OverlayGrid.IsVisible && FrameListView.SelectedIndex != -1;\n        }\n\n        private void Zoom100_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            ZoomBoxControl.Zoom = 1.0;\n            ZoomBoxControl.SaveCurrentZoom();\n\n            ShowHint(\"S.Hint.Zoom\", false, 100);\n        }\n\n        private void SizeToContent_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            WindowState = WindowState.Normal;\n            ZoomBoxControl.UpdateLayout();\n\n            var size = ZoomBoxControl.GetElementSize(true);\n\n            //Tried to get the size again.\n            if (size.Width < 2)\n                size = Project.Frames[0].Path.NonScaledSize();\n\n            //If failed again, abort.\n            if (size.Width < 2)\n                return;\n\n            var scale = this.Scale();\n\n            var borderHeight = ActualHeight - MainGrid.ActualHeight;\n            var borderWidth = ActualWidth - MainGrid.ActualWidth;\n\n            //Bug: I need to take into consideration that the RibbonTabControl.ActualHeight can change, because the tab headers can occupy 2 rows.\n            var width = (size.Width * ZoomBoxControl.Zoom / ZoomBoxControl.ScaleDiff + 60) + borderWidth;\n            var height = (size.Height * ZoomBoxControl.Zoom / ZoomBoxControl.ScaleDiff + (RibbonTabControl.ActualHeight + FrameListView.ActualHeight + LowerGrid.ActualHeight)) + borderHeight;\n\n            //If image is too small, size to the minimum size.\n            if (width < 770)\n                width = 770;\n\n            if (height < 575)\n                height = 575;\n\n            var screen = MonitorHelper.AllMonitorsScaled(scale).FirstOrDefault(x => x.Bounds.Contains(new Point(Left, Top))) ??\n                         MonitorHelper.AllMonitorsScaled(scale).FirstOrDefault(x => x.IsPrimary);\n\n            if (screen != null)\n            {\n                //If the resulting size is too big, fit the window on the available working area.\n                if (screen.WorkingArea.Width < width)\n                    width = screen.WorkingArea.Width;\n\n                if (screen.WorkingArea.Height < height)\n                    height = screen.WorkingArea.Height;\n\n                //If the window overflows, put back in place.\n                if (Left + width > screen.WorkingArea.Right)\n                    Left = screen.WorkingArea.Right - width;\n\n                if (Top + height > screen.WorkingArea.Bottom)\n                    Top = screen.WorkingArea.Bottom - height;\n            }\n\n            Width = width;\n            Height = height;\n        }\n\n        private void FitImage_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            //Reset the zoom, to get the actual image size.\n            ZoomBoxControl.Zoom = 1;\n            ZoomBoxControl.UpdateLayout();\n\n            var size = ZoomBoxControl.GetElementSize();\n\n            if (size.Width < 2)\n                size = Project.Frames[0].Path.ScaledSize();\n\n            #region Calculate the Zoom\n\n            var zoomHeight = 1D;\n            var zoomWidth = 1D;\n\n            if (size.Width > ZoomBoxControl.ActualWidth)\n                zoomWidth = ZoomBoxControl.ActualWidth / size.Width;// * this.Scale();\n\n            if (size.Height > ZoomBoxControl.ActualHeight)\n                zoomHeight = ZoomBoxControl.ActualHeight / size.Height;// * this.Scale();\n\n            #endregion\n\n            #region Apply the zoom\n\n            if (zoomHeight > 0 && zoomHeight < zoomWidth)\n                ZoomBoxControl.Zoom = zoomHeight;\n            else if (zoomWidth > 0 && zoomWidth < zoomHeight)\n                ZoomBoxControl.Zoom = zoomWidth;\n            else\n                ZoomBoxControl.Zoom = 1;\n\n            ZoomBoxControl.SaveCurrentZoom();\n\n            #endregion\n\n            ShowHint(\"S.Hint.Zoom\", false, Convert.ToInt32(ZoomBoxControl.Zoom * 100));\n\n            GC.Collect(1);\n        }\n\n        #endregion\n\n        #region Select\n\n        private void Selection_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = !IsLoading && FrameListView != null && FrameListView.HasItems;\n        }\n\n        private void SelectAll_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            FrameListView.UnselectAll();\n            FrameListView.SelectAll();\n\n            ShowHint(\"S.Hint.SelectAll\");\n        }\n\n        private void GoTo_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            var go = new GoTo(Project.Frames.Count - 1) { Owner = this };\n            var result = go.ShowDialog();\n\n            if (!result.HasValue || !result.Value)\n                return;\n\n            WasChangingSelection = true;\n            FrameListView.SelectedIndex = go.Selected;\n\n            ShowHint(\"S.Hint.SelectSingle\", false, go.Selected);\n        }\n\n        private void InverseSelection_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            foreach (var item in _viewModel.Frames)\n            {\n                if (FrameListView.ItemContainerGenerator.ContainerFromItem(item) is ListViewItem element)\n                    element.IsSelected = !element.IsSelected;\n            }\n\n            ShowHint(\"S.Hint.SelectInverse\");\n        }\n\n        private void DeselectAll_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ClosePanel();\n\n            FrameListView.SelectedIndex = -1;\n\n            ShowHint(\"S.Hint.Deselect\");\n        }\n\n        #endregion\n\n        #endregion\n\n        #region Playback Tab\n\n        private void Playback_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = Project != null && Project.Frames.Count > 1 && !IsLoading;\n        }\n\n        private void FirstFrame_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            WasChangingSelection = true;\n            FrameListView.SelectedIndex = 0;\n        }\n\n        private void PreviousFrame_Executed(object sender, EventArgs e)\n        {\n            Pause();\n\n            WasChangingSelection = true;\n\n            if (FrameListView.SelectedIndex is -1 or 0)\n            {\n                if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))\n                    return;\n\n                FrameListView.SelectedIndex = _viewModel.Frames.Count - 1;\n                return;\n            }\n\n            //Show previous frame.\n            //Control = 5\n            //Alt = 10\n            //Control + Alt = 20\n            if (e != null && (Keyboard.Modifiers & (ModifierKeys.Alt | ModifierKeys.Control)) == (ModifierKeys.Alt | ModifierKeys.Control))\n                FrameListView.SelectedIndex = Math.Max(0, FrameListView.SelectedIndex - 20);\n            else if (e != null && (Keyboard.Modifiers & ModifierKeys.Control) != 0)\n                FrameListView.SelectedIndex = Math.Max(0, FrameListView.SelectedIndex - 5);\n            else if (e != null && (Keyboard.Modifiers & ModifierKeys.Alt) != 0)\n                FrameListView.SelectedIndex = Math.Max(0, FrameListView.SelectedIndex - 10);\n            else\n                FrameListView.SelectedIndex--;\n        }\n\n        private void Play_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            PlayPause();\n        }\n\n        private void NextFrame_Executed(object sender, EventArgs e)\n        {\n            Pause();\n\n            WasChangingSelection = true;\n\n            if (FrameListView.SelectedIndex == -1 || FrameListView.SelectedIndex == _viewModel.Frames.Count - 1)\n            {\n                if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))\n                    return;\n\n                FrameListView.SelectedIndex = 0;\n                return;\n            }\n\n            //Show next frame.\n            //Control = 5\n            //Alt = 10\n            //Control + Alt = 20\n            if (e != null && (Keyboard.Modifiers & (ModifierKeys.Alt | ModifierKeys.Control)) == (ModifierKeys.Alt | ModifierKeys.Control))\n                FrameListView.SelectedIndex = Math.Min(_viewModel.Frames.Count - 1, FrameListView.SelectedIndex + 20);\n            else if (e != null && (Keyboard.Modifiers & ModifierKeys.Control) != 0)\n                FrameListView.SelectedIndex = Math.Min(_viewModel.Frames.Count - 1, FrameListView.SelectedIndex + 5);\n            else if (e != null && (Keyboard.Modifiers & ModifierKeys.Alt) != 0)\n                FrameListView.SelectedIndex = Math.Min(_viewModel.Frames.Count - 1, FrameListView.SelectedIndex + 10);\n            else\n                FrameListView.SelectedIndex++;\n        }\n\n        private void LastFrame_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            WasChangingSelection = true;\n            FrameListView.SelectedIndex = _viewModel.Frames.Count - 1;\n        }\n\n        #endregion\n\n        #region Edit Tab\n\n        #region Frames\n\n        private void Delete_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView?.SelectedItem != null && !IsLoading;\n        }\n\n        private void DeletePrevious_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView?.SelectedItem != null && !IsLoading &&\n                FrameListView.SelectedItems.OfType<FrameViewModel>().Min(s => s.Number) > 0;\n        }\n\n        private void DeleteNext_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView?.SelectedItem != null && !IsLoading &&\n                FrameListView.SelectedItems.OfType<FrameViewModel>().Max(s => s.Number) < _viewModel.Frames.Count - 1;\n        }\n\n        private void Reduce_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView != null && !IsLoading && _viewModel.Frames.Count > 5;\n        }\n\n        private void RemoveDuplicates_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView != null && !IsLoading && _viewModel.Frames.Count > 1;\n        }\n\n        private void Delete_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            try\n            {\n                #region Validation\n\n                if (Project.Frames.Count == FrameListView.SelectedItems.Count)\n                {\n                    //If the user wants to delete all frames, discard the project.\n                    if (!UserSettings.All.NotifyProjectDiscard ||\n                        Dialog.Ask(LocalizationHelper.Get(\"S.Editor.DeleteAll.Title\"), LocalizationHelper.Get(\"S.Editor.DeleteAll.Instruction\"), LocalizationHelper.Get(\"S.Editor.DeleteAll.Message\"), false))\n                        Discard(false);\n\n                    return;\n                }\n\n                if (UserSettings.All.NotifyFrameDeletion)\n                {\n                    if (!Dialog.Ask(LocalizationHelper.Get(\"S.Editor.DeleteFrames.Title\"), LocalizationHelper.Get(\"S.Editor.DeleteFrames.Instruction\"),\n                        string.Format(LocalizationHelper.Get(\"S.Editor.DeleteFrames.Message\"), FrameListView.SelectedItems.Count)))\n                        return;\n                }\n\n                #endregion\n\n                var selected = FrameListView.SelectedItems.OfType<FrameViewModel>().ToList();\n                var selectedOrdered = selected.OrderByDescending(x => x.Number).ToList();\n                var list = selectedOrdered.Select(item => Project.Frames[item.Number]).ToList();\n\n                ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, SelectedFramesIndex());\n\n                FrameListView.SelectedItem = null;\n\n                list.ForEach(x => File.Delete(x.Path));\n                selectedOrdered.ForEach(x => Project.Frames.RemoveAt(x.Number));\n                selectedOrdered.ForEach(x => _viewModel.Frames.Remove(x));\n\n                AdjustFrameNumbers(selectedOrdered.Last().Number);\n\n                SelectNear(selectedOrdered.Last().Number);\n\n                Project.Persist();\n                UpdateStatistics();\n                ShowHint(\"S.Hint.DeleteFrames\", false, selected.Count);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Error While Trying to Delete Frames\");\n\n                ErrorDialog.Ok(LocalizationHelper.Get(\"S.Editor.Title\"), \"Error while trying to delete frames\", ex.Message, ex);\n            }\n        }\n\n        private void DeletePrevious_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            var firstFrame = FrameListView.SelectedItems.OfType<FrameViewModel>().Min(x => x.Number);\n\n            if (UserSettings.All.NotifyFrameDeletion)\n            {\n                if (!Dialog.Ask(LocalizationHelper.Get(\"S.Editor.DeleteFrames.Title\"), LocalizationHelper.Get(\"S.Editor.DeleteFrames.Instruction\"),\n                    string.Format(LocalizationHelper.Get(\"S.Editor.DeleteFrames.Message\"), firstFrame)))\n                    return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, Util.Other.ListOfIndexesOld(0, firstFrame - 1));\n\n            for (var index = firstFrame - 1; index >= 0; index--)\n                DeleteFrame(index);\n\n            AdjustFrameNumbers(0);\n            SelectNear(0);\n\n            Project.Persist();\n            UpdateStatistics();\n            ShowHint(\"S.Hint.DeleteFrames\", false, firstFrame);\n        }\n\n        private void DeleteNext_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            var lastFrame = FrameListView.SelectedItems.OfType<FrameViewModel>().Max(m => m.Number);\n            var count = _viewModel.Frames.Count - lastFrame - 1;\n\n            if (UserSettings.All.NotifyFrameDeletion)\n            {\n                if (!Dialog.Ask(LocalizationHelper.Get(\"S.Editor.DeleteFrames.Title\"), LocalizationHelper.Get(\"S.Editor.DeleteFrames.Instruction\"),\n                    string.Format(LocalizationHelper.Get(\"S.Editor.DeleteFrames.Message\"), count)))\n                    return;\n            }\n\n            var countList = _viewModel.Frames.Count - 1;\n\n            ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, Util.Other.ListOfIndexes(lastFrame + 1, count));\n\n            //From the end to the start.\n            for (var i = countList; i > lastFrame; i--)\n                DeleteFrame(i);\n\n            SelectNear(lastFrame);\n\n            Project.Persist();\n            UpdateStatistics();\n            ShowHint(\"S.Hint.DeleteFrames\", false, count);\n        }\n\n        private void RemoveDuplicates_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.RemoveDuplicates, LocalizationHelper.Get(\"S.Editor.Edit.Frames.Duplicates\", true), \"Vector.RemoveImage\", ApplyRemoveDuplicatesCountButton_Click);\n        }\n\n        private async void ApplyRemoveDuplicatesCountButton_Click(object sender, RoutedEventArgs e)\n        {\n            Cursor = Cursors.AppStarting;\n\n            var index = await Task.Run(() => RemoveDuplicatesAsync((decimal)UserSettings.All.DuplicatesSimilarity, UserSettings.All.DuplicatesRemoval, UserSettings.All.DuplicatesDelay));\n\n            for (var i = _viewModel.Frames.Count - 1; i >= Project.Frames.Count; i--)\n                _viewModel.Frames.RemoveAt(i);\n\n            SelectNear(LastSelected);\n            await Task.Run(() => Project.Persist());\n\n            await LoadSelectedStarter(index, Project.Frames.Count - 1);\n\n            ShowHint(\"S.Hint.Duplicates\");\n\n            ClosePanel();\n        }\n\n        private void Reduce_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.ReduceFrames, LocalizationHelper.Get(\"S.Editor.Edit.Frames.Reduce\", true), \"Vector.RemoveImage\", ApplyReduceFrameCountButton_Click);\n        }\n\n        private async void ApplyReduceFrameCountButton_Click(object sender, RoutedEventArgs e)\n        {\n            var selected = UserSettings.All.ReduceApplyToAll ? Util.Other.ListOfIndexes(0, Project.Frames.Count - 1) : SelectedFramesIndex();\n\n            if (selected.Count == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Reduce.Warning.NoSelection\"));\n                return;\n            }\n\n            //Detects if there's any non-consecutive frames selected.\n            if (!selected.All(v => selected.Contains(v + 1) || v == selected.Last()))\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Reduce.Warning.NonConsecutive\"));\n                return;\n            }\n\n            if (selected.Count <= UserSettings.All.ReduceFactor)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Reduce.Warning.SmallerThanFactor\"));\n                return;\n            }\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => ReduceFrameCount(selected, UserSettings.All.ReduceFactor, UserSettings.All.ReduceCount, UserSettings.All.ReduceDelay));\n\n            for (var i = _viewModel.Frames.Count - 1; i >= Project.Frames.Count; i--)\n                _viewModel.Frames.RemoveAt(i);\n\n            SelectNear(LastSelected);\n            await Task.Run(() => Project.Persist());\n\n            //TODO: Load from the start.\n            await LoadSelectedStarter(ReduceFactorIntegerUpDown.Value - 1, Project.Frames.Count - 1);\n\n            ShowHint(\"S.Hint.Reduce\");\n\n            ClosePanel();\n        }\n\n        private void SmoothLoop_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.SmoothLoop, LocalizationHelper.Get(\"S.Editor.Edit.Frames.SmoothLoop\", true), \"Vector.Repeat\", ApplySmoothLoopButton_Click);\n        }\n\n        private async void ApplySmoothLoopButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (UserSettings.All.SmoothLoopStartThreshold > Project.Frames.Count - 1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.SmoothLoop.Warning.Threshold\"));\n                return;\n            }\n\n            Cursor = Cursors.AppStarting;\n            var initialCount = Project.Frames.Count;\n\n            var index = await Task.Run(() => SmoothLoopAsync((decimal)UserSettings.All.SmoothLoopSimilarity, UserSettings.All.SmoothLoopStartThreshold, UserSettings.All.SmoothLoopFrom));\n\n            //If nothing changed, it means that no frame was removed.\n            if (Project.Frames.Count == initialCount)\n            {\n                //The reason could be for no loop found or loop already smooth.\n                if (index == Project.Frames.Count - 1)\n                    StatusList.Info(LocalizationHelper.Get(\"S.SmoothLoop.Warning.AlreadySmoothLoop\"));\n                else\n                    StatusList.Warning(LocalizationHelper.Get(\"S.SmoothLoop.Warning.NoLoopFound\"));\n\n                //Workaround for not disabling the CanExecute of the panel.\n                _applyAction = ApplySmoothLoopButton_Click;\n\n                //Return state of UI.\n                Cursor = Cursors.Arrow;\n                IsLoading = false;\n\n                HideProgress();\n\n                CommandManager.InvalidateRequerySuggested();\n                return;\n            }\n\n            for (var i = _viewModel.Frames.Count - 1; i >= Project.Frames.Count; i--)\n                _viewModel.Frames.RemoveAt(i);\n\n            SelectNear(LastSelected);\n            await Task.Run(() => Project.Persist());\n\n            await LoadSelectedStarter(index, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n        #endregion\n\n        #region Reordering\n\n        private void Reordering_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView?.SelectedItem != null && !IsLoading && _viewModel.Frames.Count > 1;\n        }\n\n        private async void Reverse_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            ActionStack.SaveState(ActionStack.EditAction.Reorder, Project.Frames.CopyList());\n\n            Project.Frames.Reverse();\n            await LoadSelectedStarter(0);\n\n            ShowHint(\"S.Hint.Reverse\");\n        }\n\n        private async void Yoyo_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            ActionStack.SaveState(ActionStack.EditAction.Add, Project.Frames.Count, Project.Frames.Count);\n\n            Project.Frames = Util.Other.Yoyo(Project.Frames);\n            await LoadSelectedStarter(0);\n\n            ShowHint(\"S.Hint.Yoyo\");\n        }\n\n        private void MoveLeft_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n\n            Pause();\n            ActionStack.SaveState(ActionStack.EditAction.Reorder, Project.Frames.CopyList());\n\n            var selection = FrameListView.SelectedItems.OfType<FrameViewModel>().Select(s =>\n            {\n                var index = _viewModel.Frames.IndexOf(s);\n                return (Current: s, CurrentIndex: index, NextIndex: index > 0 ? index - 1 : _viewModel.Frames.Count - 1);\n            }).ToList();\n\n            //Reorder the frames.\n            foreach (var item in selection.OrderBy(o => o.CurrentIndex))\n            {\n                if (_viewModel.Frames.IndexOf(item.Current) == item.NextIndex)\n                    continue;\n\n                _viewModel.Frames.Move(item.CurrentIndex, item.NextIndex);\n                Project.Frames.Move(item.CurrentIndex, item.NextIndex);\n            }\n\n            //Since each frame has a number, upon reordering the numbers must be updated.\n            AdjustFrameNumbers(selection.Select(s => Math.Min(s.CurrentIndex, s.NextIndex)).Min());\n\n            FocusOnSelectedFrames();\n            ShowHint(\"S.Hint.MoveLeft\");\n        }\n\n        private void MoveRight_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            e.Handled = true;\n\n            Pause();\n            ActionStack.SaveState(ActionStack.EditAction.Reorder, Project.Frames.CopyList());\n\n            var selection = FrameListView.SelectedItems.OfType<FrameViewModel>().Select(s =>\n            {\n                var index = _viewModel.Frames.IndexOf(s);\n                return (Current: s, CurrentIndex: index, NextIndex: index < _viewModel.Frames.Count - 1 ? index + 1 : 0);\n            }).ToList();\n\n            //Reorder the frames.\n            foreach (var item in selection.OrderByDescending(o => o.CurrentIndex))\n            {\n                if (_viewModel.Frames.IndexOf(item.Current) == item.NextIndex)\n                    continue;\n\n                _viewModel.Frames.Move(item.CurrentIndex, item.NextIndex);\n                Project.Frames.Move(item.CurrentIndex, item.NextIndex);\n            }\n\n            //Since each frame has a number, upon reordering the numbers must be updated.\n            AdjustFrameNumbers(selection.Select(s => Math.Min(s.CurrentIndex, s.NextIndex)).Min());\n\n            FocusOnSelectedFrames();\n            ShowHint(\"S.Hint.MoveRight\");\n        }\n\n        #endregion\n\n        #region Delay (Duration)\n\n        private void OverrideDelay_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.OverrideDelay, LocalizationHelper.Get(\"S.Editor.Edit.Delay.Override\", true), \"Vector.OverrideDelay\", ApplyOverrideDelayButton_Click);\n        }\n\n        private async void ApplyOverrideDelayButton_Click(object sender, RoutedEventArgs e)\n        {\n            ActionStack.SaveState(ActionStack.EditAction.Properties, Project.Frames, SelectedFramesIndex());\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => DelayAsync(DelayViewModel.FromSettings(DelayUpdateModes.Override), false, false));\n\n            Cursor = Cursors.Arrow;\n\n            UpdateStatistics();\n            HideProgress();\n            IsLoading = false;\n\n            ShowHint(\"S.Hint.Delay\");\n\n            CommandManager.InvalidateRequerySuggested();\n            SetFocusOnCurrentFrame();\n\n            ClosePanel();\n        }\n\n\n        private void IncreaseDecreaseDelay_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.IncreaseDecreaseDelay, LocalizationHelper.Get(\"S.Editor.Edit.Delay.IncreaseDecrease\", true), \"Vector.IncreaseDecreaseDelay\", ApplyIncreaseDecreaseDelayButtonClick);\n        }\n\n        private async void ApplyIncreaseDecreaseDelayButtonClick(object sender, RoutedEventArgs e)\n        {\n            if (IncreaseDecreaseDelayIntegerUpDown.Value == 0)\n            {\n                ClosePanel();\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.Properties, Project.Frames, SelectedFramesIndex());\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => DelayAsync(DelayViewModel.FromSettings(DelayUpdateModes.IncreaseDecrease), false, false));\n\n            Cursor = Cursors.Arrow;\n\n            UpdateStatistics();\n            HideProgress();\n            IsLoading = false;\n\n            ShowHint(\"S.Hint.Delay\");\n\n            CommandManager.InvalidateRequerySuggested();\n            SetFocusOnCurrentFrame();\n\n            ClosePanel();\n        }\n\n        private void ScaleDelay_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.ScaleDelay, LocalizationHelper.Get(\"S.Editor.Edit.Delay.Scale\", true), \"Vector.ScaleDelay\", ApplyScaleDelayButtonClick);\n        }\n\n        private async void ApplyScaleDelayButtonClick(object sender, RoutedEventArgs e)\n        {\n            if (ScaleDelayIntegerUpDown.Value == 0 || ScaleDelayIntegerUpDown.Value == 100)\n            {\n                ClosePanel();\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.Properties, Project.Frames, SelectedFramesIndex());\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => DelayAsync(DelayViewModel.FromSettings(DelayUpdateModes.Scale), false, false));\n\n            Cursor = Cursors.Arrow;\n\n            UpdateStatistics();\n            HideProgress();\n            IsLoading = false;\n\n            ShowHint(\"S.Hint.Delay\");\n\n            CommandManager.InvalidateRequerySuggested();\n            SetFocusOnCurrentFrame();\n\n            ClosePanel();\n        }\n\n        #endregion\n\n        #endregion\n\n        #region Image Tab\n\n        private void Image_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView?.SelectedItem != null && !IsLoading;\n        }\n\n        #region Size and Position\n\n        private void Resize_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            ShowPanel(PanelTypes.Resize, LocalizationHelper.Get(\"S.Editor.Image.Resize\", true), \"Vector.Resize\", ApplyResizeButton_Click);\n        }\n\n        private async void ApplyResizeButton_Click(object sender, RoutedEventArgs e)\n        {\n            Pause();\n\n            //Checks with the non scaled size.\n            var size = Project.Frames[0].Path.ScaledSize();\n            var settings = ResizePanel.DataContext as ResizeViewModel;\n\n            if (settings == null || Math.Abs(size.Width - settings.Width) < 0.1 && Math.Abs(size.Height - settings.Height) < 0.1 && (int)Math.Round(Project.Frames[0].Path.DpiOf()) == (int)Math.Round(settings.Dpi))\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Resize.Warning\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => Resize(settings.Width, settings.Height, settings.Dpi, settings.ScalingMode));\n\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n\n            ShowHint(\"S.Hint.Resize\");\n        }\n\n\n        private void Crop_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Crop, LocalizationHelper.Get(\"S.Editor.Image.Crop\", true), \"Vector.Crop\", ApplyCropButton_Click);\n        }\n\n        private CroppingAdorner _cropAdorner;\n        private FrameworkElement _currentElement = null;\n        private bool _resizing = false;\n\n        private void AddCropToElement(FrameworkElement fel)\n        {\n            if (_currentElement != null)\n                RemoveCropElements();\n\n            var rcInterior = new Rect((int)(fel.Width * 0.2), (int)(fel.Height * 0.2), (int)(fel.Width * 0.6), (int)(fel.Height * 0.6));\n\n            var aly = AdornerLayer.GetAdornerLayer(fel);\n            _cropAdorner = new CroppingAdorner(fel, rcInterior);\n            aly.Add(_cropAdorner);\n\n            _cropAdorner.CropChanged += CropChanged;\n            _currentElement = fel;\n\n            _cropAdorner.Fill = new SolidColorBrush(Color.FromArgb(110, 0, 0, 0));\n            RefreshCropImage();\n        }\n\n        private void RemoveCropElements()\n        {\n            var aly = AdornerLayer.GetAdornerLayer(_currentElement);\n            aly.Remove(_cropAdorner);\n\n            _currentElement = null;\n            _cropAdorner.CropChanged -= CropChanged;\n            _cropAdorner = null;\n        }\n\n        private void CropChanged(object sender, RoutedEventArgs rea)\n        {\n            RefreshCropImage();\n\n            _resizing = true;\n\n            TopCropNumericUpDown.Value = (int)_cropAdorner.ClipRectangle.Top;\n            LeftCropNumericUpDown.Value = (int)_cropAdorner.ClipRectangle.Left;\n            BottomCropNumericUpDown.Value = (int)_cropAdorner.ClipRectangle.Bottom;\n            RightCropNumericUpDown.Value = (int)_cropAdorner.ClipRectangle.Right;\n\n            var scale = this.Scale();\n            CropSizeTextBlock.Text = $\"{(int)Math.Round(_cropAdorner.ClipRectangle.Width * scale)} × {(int)Math.Round(_cropAdorner.ClipRectangle.Height * scale)}\";\n\n            _resizing = false;\n        }\n\n        private void RefreshCropImage()\n        {\n            if (_cropAdorner == null || Math.Abs(ZoomBoxControl.Zoom - 1) > 0) return;\n\n            try\n            {\n                var rect = new Int32Rect((int)(_cropAdorner.ClipRectangle.X * ZoomBoxControl.ScaleDiff),\n                    (int)(_cropAdorner.ClipRectangle.Y * ZoomBoxControl.ScaleDiff),\n                    (int)(_cropAdorner.ClipRectangle.Width * ZoomBoxControl.ScaleDiff),\n                    (int)(_cropAdorner.ClipRectangle.Height * ZoomBoxControl.ScaleDiff));\n\n                if (rect.HasArea)\n                    CropImage.Source = (ZoomBoxControl.ImageSource ?? Project.Frames[LastSelected].Path).CropFrom(rect);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Crop preview\", _cropAdorner.ClipRectangle + \" => \" + FrameSize);\n            }\n        }\n\n        private void CropIntegerUpDown_ValueChanged(object sender, RoutedEventArgs e)\n        {\n            if (_cropAdorner == null)\n                return;\n\n            if (_resizing)\n                return;\n\n            var top = TopCropNumericUpDown.Value;\n            var left = LeftCropNumericUpDown.Value;\n            var bottom = BottomCropNumericUpDown.Value;\n            var right = RightCropNumericUpDown.Value;\n\n            _cropAdorner.ClipRectangle = new Rect(new Point(left, top), new Point(right, bottom));\n        }\n\n        private async void ApplyCropButton_Click(object sender, RoutedEventArgs e)\n        {\n            Pause();\n            RefreshCropImage();\n\n            var rect = new Int32Rect((int)Math.Round(_cropAdorner.ClipRectangle.X * ZoomBoxControl.ScaleDiff, MidpointRounding.AwayFromZero),\n                (int)Math.Round(_cropAdorner.ClipRectangle.Y * ZoomBoxControl.ScaleDiff, MidpointRounding.AwayFromZero),\n                (int)Math.Round(_cropAdorner.ClipRectangle.Width * ZoomBoxControl.ScaleDiff),\n                (int)Math.Round(_cropAdorner.ClipRectangle.Height * ZoomBoxControl.ScaleDiff));\n\n            if (!rect.HasArea)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Crop.Warning\"));\n                return;\n            }\n\n            if (rect.Width < 10 || rect.Height < 10)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Crop.Warning.Bigger\"));\n                return;\n            }\n\n            if (CropImage.Source == null)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Crop.Warning\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => Crop(rect));\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            RemoveCropElements();\n            ClosePanel();\n\n            ShowHint(\"S.Hint.Crop\");\n        }\n\n\n        private void FlipRotate_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.FlipRotate, LocalizationHelper.Get(\"S.Editor.Image.FlipRotate\", true), \"Vector.FlipHorizontal\", ApplyFlipRotateButton_Click);\n        }\n\n        private async void ApplyFlipRotateButton_Click(object sender, RoutedEventArgs e)\n        {\n            Pause();\n\n            Cursor = Cursors.AppStarting;\n\n            var type = FlipHorizontalRadioButton.IsChecked == true\n                ? FlipRotateType.FlipHorizontal : FlipVerticalRadioButton.IsChecked == true\n                ? FlipRotateType.FlipVertical : RotateLeftRadioButton.IsChecked == true ?\n                  FlipRotateType.RotateLeft90 : FlipRotateType.RotateRight90;\n\n            //If it's a rotate operation, the entire list of frames will be altered.\n            var selectedIndexes = type == FlipRotateType.RotateLeft90 || type == FlipRotateType.RotateRight90\n                ? Util.Other.ListOfIndexes(0, Project.Frames.Count)\n                : SelectedFramesIndex();\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, selectedIndexes);\n\n            await Task.Run(() => FlipRotate(type));\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n\n            ShowHint(\"S.Hint.FlipRotate\");\n        }\n\n        #endregion\n\n        #region Text\n\n        private void Caption_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Caption, LocalizationHelper.Get(\"S.Editor.Image.Caption\", true), \"Vector.Caption\", ApplyCaptionButton_Click);\n        }\n\n        private async void ApplyCaptionButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (CaptionTextBox.Text.Trim().Length == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Caption.WarningNoText\"));\n                return;\n            }\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Caption.WarningSelection\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            var render = CaptionOverlayGrid.GetScaledRender(ZoomBoxControl.ScaleDiff, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            Cursor = Cursors.AppStarting;\n\n            var selected = await Task.Run(() => OverlayAsync(render, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void FreeText_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.FreeText, LocalizationHelper.Get(\"S.Editor.Image.FreeText\", true), \"Vector.FreeText\", ApplyFreeTextButton_Click);\n        }\n\n        private void FreeTextTextBox_TextChanged(object sender, TextChangedEventArgs e)\n        {\n            if (!IsLoaded)\n                return;\n\n            //TODO: This event is not fired when the entire text is deleted.\n\n            FreeTextOverlayControl.AdjustContent();\n        }\n\n        private async void ApplyFreeTextButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (FreeTextTextBox.Text.Length == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Caption.WarningNoText\"));\n                return;\n            }\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.FreeText.WarningSelection\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            FreeTextOverlayControl.CanMove = false;\n\n            var render = FreeTextOverlayControl.GetScaledRender(ZoomBoxControl.ScaleDiff, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            FreeTextOverlayControl.CanMove = true;\n\n            Cursor = Cursors.AppStarting;\n\n            var selected = await Task.Run(() => OverlayAsync(render, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void TitleFrame_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.TitleFrame, LocalizationHelper.Get(\"S.Editor.Image.TitleFrame\", true), \"Vector.TitleFrame\", ApplyTitleFrameButton_Click);\n        }\n\n        private async void ApplyTitleFrameButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.TitleFrame.WarningSelection\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.Add, FrameListView.SelectedIndex, 1);\n\n            var render = TitleFrameOverlayGrid.GetScaledRender(ZoomBoxControl.ScaleDiff, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            Cursor = Cursors.AppStarting;\n\n            var index = FrameListView.SelectedIndex;\n            var dpi = ZoomBoxControl.ImageDpi;\n            var selected = await Task.Run(() => TitleFrame(render, index, dpi));\n\n            await LoadSelectedStarter(selected, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n\n        private void KeyStrokes_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.KeyStrokes, LocalizationHelper.Get(\"S.Editor.Image.KeyStrokes\", true), \"Vector.Keyboard\", ApplyKeyStrokesButton_Click);\n        }\n\n        private void EditKeyStrokesButton_Click(object sender, RoutedEventArgs e)\n        {\n            var keyStrokes = new KeyStrokes\n            {\n                InternalList = new ObservableCollection<FrameInfo>(Project.Frames.CopyList())\n            };\n\n            var result = keyStrokes.ShowDialog();\n\n            if (!result.HasValue || !result.Value)\n                return;\n\n            ActionStack.SaveState(ActionStack.EditAction.Properties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            for (var i = 0; i < keyStrokes.InternalList.Count; i++)\n                Project.Frames[i].KeyList = new List<IKeyGesture>(keyStrokes.InternalList[i].KeyList);\n        }\n\n        private async void ApplyKeyStrokesButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (!Project.Frames.Any(x => x.KeyList != null && x.KeyList.Any()))\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.KeyStrokes.Warning.None\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => KeyStrokesAsync(KeyStrokesViewModel.FromSettings()));\n\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n        #endregion\n\n        #region Overlay\n\n        private void FreeDrawing_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.FreeDrawing, LocalizationHelper.Get(\"S.Editor.Image.FreeDrawing\", true), \"Vector.FreeDrawing\", ApplyFreeDrawingButton_Click);\n        }\n\n        private async void ApplyFreeDrawingButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (FreeDrawingInkCanvas.Strokes.Count == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.FreeDrawing.Warning.NoDrawing\"));\n                return;\n            }\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.FreeDrawing.WarningSelection\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            var render = FreeDrawingInkCanvas.GetScaledRender(ZoomBoxControl.ScaleDiff, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            Cursor = Cursors.AppStarting;\n\n            FreeDrawingInkCanvas.Strokes.Clear();\n\n            var selected = await Task.Run(() => OverlayAsync(render, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void Shapes_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Shapes, LocalizationHelper.Get(\"S.Editor.Image.Shape\", true), \"Vector.Ellipse\", ApplyShapesButton_Click);\n        }\n\n        private void ShapeModes_Checked(object sender, RoutedEventArgs e)\n        {\n            ShapeDrawingCanvas.DrawingMode = AddModeRadioButton.IsChecked == true ? DrawingCanvas.DrawingModes.Shape : DrawingCanvas.DrawingModes.Select;\n        }\n\n        private void ShapeType_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            if (!(sender is ListBox listBox))\n                return;\n\n            switch (listBox.SelectedIndex)\n            {\n                case 0:\n                    ShapeDrawingCanvas.CurrentShape = DrawingCanvas.Shapes.Rectangle;\n                    break;\n                case 1:\n                    ShapeDrawingCanvas.CurrentShape = DrawingCanvas.Shapes.Ellipse;\n                    break;\n                case 2:\n                    ShapeDrawingCanvas.CurrentShape = DrawingCanvas.Shapes.Triangle;\n                    break;\n                case 3:\n                    ShapeDrawingCanvas.CurrentShape = DrawingCanvas.Shapes.Arrow;\n                    break;\n            }\n        }\n\n        private void ShapeProperties_Changed(object sender, RoutedEventArgs e)\n        {\n            if (!IsLoaded)\n                return;\n\n            ShapeDrawingCanvas.StrokeThickness = ShapeOutlineDoubleUpDown.Value;\n            ShapeDrawingCanvas.Stroke = ShapeOutlineColorBox.SelectedBrush;\n            ShapeDrawingCanvas.Radius = ShapeRadiusDoubleUpDown.Value;\n            ShapeDrawingCanvas.Fill = ShapesFillColorBox.SelectedBrush;\n        }\n\n        private async void ApplyShapesButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (ShapeDrawingCanvas.ShapesCount == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.FreeDrawing.Warning.NoDrawing\"));\n                return;\n            }\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.FreeDrawing.WarningSelection\"));\n                return;\n            }\n\n            ShapeDrawingCanvas.DeselectAll();\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            var render = ShapeDrawingCanvas.GetScaledRender(ZoomBoxControl.ScaleDiff, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            Cursor = Cursors.AppStarting;\n\n            ShapeDrawingCanvas.RemoveAllShapes();\n\n            var selected = await Task.Run(() => OverlayAsync(render, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void MouseEvents_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.MouseEvents, LocalizationHelper.Get(\"S.Editor.Image.MouseEvents\", true), \"Vector.Cursor\", ApplyMouseEventsButton_Click);\n        }\n\n        private async void ApplyMouseEventsButton_Click(object sender, RoutedEventArgs e)\n        {\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => MouseEventsAsync(MouseEventsViewModel.FromSettings()));\n\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n\n        private void Watermark_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Watermark, LocalizationHelper.Get(\"S.Editor.Image.Watermark\", true), \"Vector.Watermark\", ApplyWatermarkButton_Click);\n\n            TopWatermarkDoubleUpDown.Scale = LeftWatermarkDoubleUpDown.Scale = this.Scale();\n            TopWatermarkDoubleUpDown.Value = UserSettings.All.WatermarkTop;\n            LeftWatermarkDoubleUpDown.Value = UserSettings.All.WatermarkLeft;\n\n            if (string.IsNullOrEmpty(UserSettings.All.WatermarkFilePath))\n            {\n                if (TopWatermarkDoubleUpDown.Value < 0)\n                    TopWatermarkDoubleUpDown.Value = 0;\n\n                if (LeftWatermarkDoubleUpDown.Value < 0)\n                    LeftWatermarkDoubleUpDown.Value = 0;\n            }\n        }\n\n        private void SelectWatermark_Click(object sender, RoutedEventArgs e)\n        {\n            var ofd = new OpenFileDialog\n            {\n                AddExtension = true,\n                CheckFileExists = true,\n                Title = LocalizationHelper.Get(\"S.Watermark.Select\", true),\n                Filter = $\"{LocalizationHelper.Get(\"S.Editor.File.Image\")} (*.bmp, *.jpg, *.jpeg, *.png)|*.bmp;*.jpg;*.jpeg;*.png\",\n            };\n\n            var result = ofd.ShowDialog();\n\n            if (!result.HasValue || !result.Value)\n                return;\n\n            UserSettings.All.WatermarkFilePath = ofd.FileName;\n            UserSettings.All.WatermarkSize = 1;\n\n            WatermarkOverlayCanvas.AdjustContent();\n        }\n\n        private async void ApplyWatermarkButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (string.IsNullOrEmpty(UserSettings.All.WatermarkFilePath) || !File.Exists(UserSettings.All.WatermarkFilePath))\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Watermark.WarningNoImage\"));\n                return;\n            }\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Watermark.WarningSelection\"));\n                return;\n            }\n\n            UserSettings.All.WatermarkTop = TopWatermarkDoubleUpDown.Value;\n            UserSettings.All.WatermarkLeft = LeftWatermarkDoubleUpDown.Value;\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            WatermarkOverlayCanvas.CanMove = false;\n            WatermarkOverlayCanvas.CanResize = false;\n\n            var render = WatermarkOverlayCanvas.GetScaledRender(ZoomBoxControl.ScaleDiff, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            WatermarkOverlayCanvas.CanMove = true;\n            WatermarkOverlayCanvas.CanResize = true;\n\n            #region Remove adorners\n\n            var adornerLayer = AdornerLayer.GetAdornerLayer(WatermarkImage);\n\n            //Remove all the adorners.\n            foreach (var adorner in (adornerLayer.GetAdorners(WatermarkImage) ?? new Adorner[0]).OfType<ResizingAdorner>())\n            {\n                adorner.Destroy();\n                adornerLayer.Remove(adorner);\n            }\n\n            #endregion\n\n            Cursor = Cursors.AppStarting;\n\n            var selected = await Task.Run(() => OverlayAsync(render, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void Border_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Border, LocalizationHelper.Get(\"S.Editor.Image.Border\", true), \"Vector.Border\", ApplyBorderButton_Click);\n        }\n\n        private void BorderProperties_ValueChanged(object sender, RoutedEventArgs e)\n        {\n            try\n            {\n                if (CaptionOverlayGrid.Width < 0)\n                    return;\n\n                //Measure the border size.\n                var left = Math.Min(0, UserSettings.All.BorderLeftThickness);\n                var top = Math.Min(0, UserSettings.All.BorderTopThickness);\n                var right = Math.Min(0, UserSettings.All.BorderRightThickness);\n                var bottom = Math.Min(0, UserSettings.All.BorderBottomThickness);\n                var width = CaptionOverlayGrid.Width + Math.Abs(left) + +Math.Abs(right);\n                var height = CaptionOverlayGrid.Height + Math.Abs(top) + Math.Abs(bottom);\n\n                BorderBehindOverlayBorder.Width = width;\n                BorderBehindOverlayBorder.Height = height;\n                BorderPreviewGrid.Margin = new Thickness(left, top, right, bottom);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Error while trying to measure dropshadow size.\");\n            }\n        }\n\n        private async void ApplyBorderButton_Click(object sender, RoutedEventArgs e)\n        {\n            var model = BorderViewModel.FromSettings(true);\n\n            if (Math.Abs(model.LeftThickness) < 0.001 && Math.Abs(model.TopThickness) < 0.001 && Math.Abs(model.RightThickness) < 0.001 && Math.Abs(model.BottomThickness) < 0.001)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Border.WarningThickness\"));\n                return;\n            }\n\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Border.WarningSelection\"));\n                return;\n            }\n\n            if (model.LeftThickness < 0 || model.TopThickness < 0 || model.RightThickness < 0 || model.BottomThickness < 0)\n                ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n            else\n                ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => BorderAsync(model));\n\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n\n        private void Shadow_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Shadow, LocalizationHelper.Get(\"S.Editor.Image.Shadow\", true), \"Vector.Shadow\", ApplyShadowButton_Click);\n        }\n\n        private void ShadowProperties_ValueChanged(object sender, RoutedEventArgs e)\n        {\n            try\n            {\n                if (CaptionOverlayGrid.Width < 0)\n                    return;\n\n                //Converts the direction in degrees to radians.\n                var radians = Math.PI / 180.0 * UserSettings.All.ShadowDirection;\n                var offsetX = UserSettings.All.ShadowDepth * Math.Cos(radians);\n                var offsetY = UserSettings.All.ShadowDepth * Math.Sin(radians);\n\n                //Each side can have a different offset based on the direction of the shadow.\n                var offsetLeft = offsetX < 0 ? offsetX * -1 : 0;\n                var offsetTop = offsetY > 0 ? offsetY : 0;\n                var offsetRight = offsetX > 0 ? offsetX : 0;\n                var offsetBottom = offsetY < 0 ? offsetY * -1 : 0;\n\n                //Measure drop shadow space.\n                var marginLeft = offsetLeft > 0 ? offsetLeft + UserSettings.All.ShadowBlurRadius / 2d : Math.Max(UserSettings.All.ShadowBlurRadius / 2d - offsetLeft, 0); //- offsetX\n                var marginTop = offsetTop > 0 ? offsetTop + UserSettings.All.ShadowBlurRadius / 2d : Math.Max(UserSettings.All.ShadowBlurRadius / 2d - offsetTop, 0); //- offsetY\n                var marginRight = offsetRight > 0 ? offsetRight + UserSettings.All.ShadowBlurRadius / 2d : Math.Max(UserSettings.All.ShadowBlurRadius / 2d + offsetRight, 0); //+ offsetX\n                var marginBottom = offsetBottom > 0 ? offsetBottom + UserSettings.All.ShadowBlurRadius / 2d : Math.Max(UserSettings.All.ShadowBlurRadius / 2d + offsetBottom, 0); //+ offsetY\n\n                ShadowPreviewGrid.Width = marginLeft + CaptionOverlayGrid.Width + marginRight;\n                ShadowPreviewGrid.Height = Math.Round(marginTop + CaptionOverlayGrid.Height + marginBottom, 0);\n\n                ShadowPreviewGrid.Margin = new Thickness(marginRight - marginLeft, marginBottom - marginTop, 0, 0);\n                ShadowInternalGrid.Margin = new Thickness(marginLeft, marginTop, marginRight, marginBottom);\n\n                ShadowInternalGrid.InvalidateVisual();\n                ShadowPreviewGrid.InvalidateVisual();\n                ShadowInternalGrid.InvalidateProperty(EffectProperty);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Error while trying to measure dropshadow size for the previewer.\");\n            }\n        }\n\n        private async void ApplyShadowButton_Click(object sender, RoutedEventArgs e)\n        {\n            var model = ShadowViewModel.FromSettings();\n\n            if (Math.Abs(model.Depth) < 0.1 && Math.Abs(model.BlurRadius) < 0.1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Shadow.Warning.Behind\"));\n                return;\n            }\n\n            if (Math.Abs(model.Opacity) < 0.1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Shadow.Warning.Invisible\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            Cursor = Cursors.AppStarting;\n\n            await Task.Run(() => ShadowAsync(model));\n\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n\n        private void Obfuscate_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Obfuscate, LocalizationHelper.Get(\"S.Editor.Image.Obfuscate\", true), \"Vector.Obfuscate\", ApplyObfuscateButton_Click);\n        }\n\n        private async void ApplyObfuscateButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (ObfuscateOverlaySelectControl.Selected.IsEmpty)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Obfuscate.Warning\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, SelectedFramesIndex());\n\n            Cursor = Cursors.AppStarting;\n\n            var region = ObfuscateOverlaySelectControl.Selected;\n            var scale = this.Scale();\n            var selected = await Task.Run(() => ObfuscateAsync(region, scale, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void Cinemagraph_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Cinemagraph, LocalizationHelper.Get(\"S.Editor.Image.Cinemagraph\", true), \"Vector.Cinemagraph\", ApplyCinemagraphButton_Click);\n        }\n\n        private async void ApplyCinemagraphButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (CinemagraphInkCanvas.Strokes.Count == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Cinemagraph.WarningNoDrawing\"));\n                return;\n            }\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            #region Get the Strokes and Clip the Image\n\n            var image = Project.Frames[0].Path.SourceFrom();\n            var rectangle = new RectangleGeometry(new Rect(new Point(0, 0), new Size(image.PixelWidth, image.PixelHeight)));\n            var geometry = Geometry.Empty;\n\n            foreach (var stroke in CinemagraphInkCanvas.Strokes)\n                geometry = Geometry.Combine(geometry, stroke.GetGeometry(), GeometryCombineMode.Union, null);\n\n            geometry = Geometry.Combine(geometry, rectangle, GeometryCombineMode.Xor, null);\n\n            //Since the geometry is bound to the screen, it needs to be scaled to follow the image scale.\n            geometry.Transform = new ScaleTransform(this.Scale() / ZoomBoxControl.ImageScale, this.Scale() / ZoomBoxControl.ImageScale);\n\n            var clippedImage = new Image\n            {\n                Source = image,\n                Clip = geometry\n            };\n\n            clippedImage.Measure(new Size(image.Width, image.Height));\n            clippedImage.Arrange(new Rect(clippedImage.DesiredSize));\n\n            //The ScaleDiff (ScreenScale / ImageScale) must be calculated as if the screen has 96DPI, since the clippedImage is not being attached to any visual.\n            //var imageRender = clippedImage.GetScaledRender(1 / ZoomBoxControl.ImageScale, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n            var imageRender = clippedImage.GetScaledRender(1, ZoomBoxControl.ImageDpi, ZoomBoxControl.GetImageSize());\n\n            #endregion\n\n            Cursor = Cursors.AppStarting;\n\n            var selected = await Task.Run(() => OverlayAsync(imageRender, false));\n\n            ShowHint(\"S.Hint.Overlay\");\n\n            await LoadSelectedStarter(selected.Min(), selected.Max());\n\n            ClosePanel();\n        }\n\n\n        private void Progress_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n\n            var size = Project.Frames[0].Path.ScaledSize();\n            ProgressHorizontalRectangle.Width = size.Width / 2;\n            ProgressVerticalRectangle.Height = size.Height / 2;\n\n            ShowPanel(PanelTypes.Progress, LocalizationHelper.Get(\"S.Editor.Image.Progress\", true), \"Vector.Progress\", ApplyProgressButton_Click);\n        }\n\n        private void ProgressPrecisionComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            if (!IsLoaded || !ProgressGrid.IsVisible || TextRadioButton.IsChecked == false)\n                return;\n\n            ChangeProgressTextToCurrent();\n        }\n\n        private void ExtendedCheckBox_CheckedChanged(object sender, RoutedEventArgs e)\n        {\n            if (!IsLoaded || !ProgressGrid.IsVisible || TextRadioButton.IsChecked == false)\n                return;\n\n            ChangeProgressTextToCurrent();\n        }\n\n        private void CustomProgressTextBox_TextChanged(object sender, TextChangedEventArgs e)\n        {\n            if (!IsLoaded || !ProgressGrid.IsVisible || TextRadioButton.IsChecked == false)\n                return;\n\n            ChangeProgressTextToCurrent();\n        }\n\n        private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)\n        {\n            try\n            {\n                ProcessHelper.StartWithShell(e.Uri.AbsoluteUri);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, $\"Error while trying to navigate to a given URI: '{e?.Uri?.AbsoluteUri}'.\");\n            }\n        }\n\n        private async void ApplyProgressButton_Click(object sender, RoutedEventArgs e)\n        {\n            Cursor = Cursors.AppStarting;\n\n            ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, Project.Frames, Util.Other.ListOfIndexes(0, Project.Frames.Count));\n\n            await Task.Run(() => ProgressAsync(ProgressViewModel.FromSettings()));\n\n            await LoadSelectedStarter(0, Project.Frames.Count - 1);\n\n            ClosePanel();\n        }\n\n        #endregion\n\n        #endregion\n\n        #region Transitions Tab\n\n        private void Transition_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = Project != null && FrameListView?.SelectedItems != null && !IsLoading && FrameListView.SelectedIndex != -1;\n        }\n\n        private void Fade_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Fade, LocalizationHelper.Get(\"S.Editor.Fade.Title\", true), \"Vector.Fade\", ApplyFadeButtonButton_Click);\n        }\n\n        private async void ApplyFadeButtonButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Fade.WarningSelection\"));\n                return;\n            }\n\n            if (UserSettings.All.FadeToType == FadeModes.Color && UserSettings.All.FadeToColor.A == 0)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Fade.WarningColor\"));\n                return;\n            }\n\n            Cursor = Cursors.AppStarting;\n\n            ActionStack.SaveState(ActionStack.EditAction.Add, FrameListView.SelectedIndex + 1, (int)FadeSlider.Value);\n\n            var index = FrameListView.SelectedIndex;\n            var value = (int)FadeSlider.Value;\n            var selected = await Task.Run(() => Fade(index, value, null));\n\n            await LoadSelectedStarter(selected, Project.Frames.Count - 1);\n\n            ShowHint(\"S.Hint.Transition\");\n\n            ClosePanel();\n        }\n\n\n        private void Slide_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            Pause();\n            ShowPanel(PanelTypes.Slide, LocalizationHelper.Get(\"S.Editor.Slide.Title\", true), \"Vector.Slide\", ApplySlideButtonButton_Click);\n        }\n\n        private async void ApplySlideButtonButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (FrameListView.SelectedIndex == -1)\n            {\n                StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Slide.WarningSelection\"));\n                return;\n            }\n\n            Cursor = Cursors.AppStarting;\n\n            ActionStack.SaveState(ActionStack.EditAction.Add, FrameListView.SelectedIndex + 1, (int)SlideSlider.Value);\n\n            var index = FrameListView.SelectedIndex;\n            var value = (int)SlideSlider.Value;\n            var selected = await Task.Run(() => Slide(index, value, SlideFromType.Right));\n\n            await LoadSelectedStarter(selected, Project.Frames.Count - 1);\n\n            ShowHint(\"S.Hint.Transition\");\n\n            ClosePanel();\n        }\n\n        #endregion\n\n\n        #region Other Events\n\n        #region Panel\n\n        private void PanelAction_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            if (!IsLoaded)\n                return;\n\n            e.CanExecute = _applyAction != null || ClipboardGrid.IsVisible || LoadRecentGrid.IsVisible;// && ActionGrid.Width > 50 && ActionLowerGrid.IsVisible;\n        }\n\n        private void Ok_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            ApplyButton.Focus();\n\n            _applyAction?.Invoke(sender, e);\n\n            //If the StatusBand started displaying the message, it means that the action failed.\n            if (!StatusList.Children.OfType<StatusBand>().Any(a => a.Starting))\n                _applyAction = null;\n        }\n\n        private void Cancel_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            _applyAction = null;\n\n            ClosePanel(true);\n        }\n\n        #endregion\n\n        #region Frame ListView\n\n        private void ListFramesSelection_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n        {\n            e.CanExecute = FrameListView.SelectedIndex != -1 && !IsLoading;\n        }\n\n        private void OpenImage_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            try\n            {\n                ProcessHelper.StartWithShell(Project.Frames[FrameListView.SelectedIndex].Path);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Open Image\");\n                Dialog.Ok(\"Open Image\", \"Impossible to open image.\", ex.Message);\n            }\n        }\n\n        private void ExploreFolder_Executed(object sender, ExecutedRoutedEventArgs e)\n        {\n            try\n            {\n                Process.Start(\"explorer.exe\", $\"/select,\\\"{Project.Frames[FrameListView.SelectedIndex].Path}\\\"\");\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Open Image Folder\");\n                Dialog.Ok(\"Open Image\", \"Impossible to open the image folder.\", ex.Message);\n            }\n        }\n\n        private void FrameListView_PreviewKeyDown(object sender, KeyEventArgs e)\n        {\n            var key = Keyboard.Modifiers == ModifierKeys.Alt ? e.SystemKey : e.Key;\n\n            switch (key)\n            {\n                case Key.Space:\n                {\n                    if (PlayButton.IsEnabled)\n                        PlayPause();\n\n                    //Avoids the selection of the frame by using the Space key.\n                    e.Handled = true;\n                    break;\n                }\n\n                case Key.Right:\n                {\n                    if ((Keyboard.Modifiers & ModifierKeys.Alt) == 0 && (Keyboard.Modifiers & (ModifierKeys.Alt | ModifierKeys.Control)) == 0)\n                    {\n                        NextFrame_Executed(sender, null);\n                        e.Handled = true;\n                    }\n                    else if (Keyboard.Modifiers.HasFlag(ModifierKeys.Alt | ModifierKeys.Control))\n                    {\n                        MoveRightButton.Command.Execute(null);\n                        e.Handled = true;\n                    }\n                    else if (Keyboard.Modifiers.HasFlag(ModifierKeys.Alt))\n                    {\n                        DeleteAfterButton.Command.Execute(null);\n                        e.Handled = true;\n                    }\n\n                    break;\n                }\n\n                case Key.PageDown:\n                {\n                    NextFrame_Executed(sender, EventArgs.Empty);\n                    e.Handled = true;\n                    break;\n                }\n                \n                case Key.Left:\n                {\n                    if ((Keyboard.Modifiers & ModifierKeys.Alt) == 0 && (Keyboard.Modifiers & (ModifierKeys.Alt | ModifierKeys.Control)) == 0)\n                    {\n                        PreviousFrame_Executed(sender, null);\n                        e.Handled = true;\n                    }\n                    else if (Keyboard.Modifiers.HasFlag(ModifierKeys.Alt | ModifierKeys.Control))\n                    {\n                        MoveLeftButton.Command.Execute(null);\n                        e.Handled = true;\n                    }\n                    else if (Keyboard.Modifiers.HasFlag(ModifierKeys.Alt))\n                    {\n                        DeleteBeforeButton.Command.Execute(null);\n                        e.Handled = true;\n                    }\n\n                    break;\n                }\n\n                case Key.PageUp:\n                {\n                    PreviousFrame_Executed(sender, EventArgs.Empty);\n                    e.Handled = true;\n                    break;\n                }\n\n                case Key.Home:\n                {\n                    FirstFrame_Executed(sender, null);\n                    e.Handled = true;\n                    break;\n                }\n\n                case Key.End:\n                {\n                    LastFrame_Executed(sender, null);\n                    e.Handled = true;\n                    break;\n                }\n            }\n        }\n\n        #endregion\n\n        private void PreviewLoop(int selectedIndex)\n        {\n            using (var resolution = new TimerResolution(1))\n            {\n                if (!resolution.SuccessfullySetTargetResolution)\n                {\n                    LogWriter.Log($\"Imprecise timer resolution... Target: {resolution.TargetResolution}, Current: {resolution.CurrentResolution}\");\n                    Dispatcher.Invoke(() => HasImprecisePlayback = true);\n                }\n\n                #region Preview loop\n\n                var sw = new Stopwatch();\n\n                while (_previewToken != null && !_previewToken.IsCancellationRequested)\n                {\n                    sw.Restart();\n\n                    long frameDelay = Project.Frames[selectedIndex].Delay;\n\n                    // Change active frame\n                    Dispatcher.Invoke(() => FrameListView.SelectedIndex = selectedIndex);\n\n                    // Wait for application UI to render changes (there is no point in ordering change of next frame if the previous one is not displayed yet)\n                    // Loaded priority could be used but input can become laggy\n                    Dispatcher.Invoke(() => { }, DispatcherPriority.Background);\n\n                    var pass = 0;\n                    do\n                    {\n                        pass++;\n\n                        if (Project.Frames.Count - 1 == selectedIndex)\n                        {\n                            //If the playback should not loop, it will stop at the latest frame.\n                            if (!UserSettings.All.LoopedPlayback)\n                            {\n                                // This will ensure that latest frame will be shown if drops frames behind is enabled\n                                if (UserSettings.All.DropFramesDuringPreviewIfBehind && pass > 1)\n                                    break;\n\n                                Dispatcher.Invoke(Pause);\n                                return;\n                            }\n\n                            selectedIndex = 0;\n                        }\n                        else\n                        {\n                            selectedIndex++;\n                        }\n\n                        if (!UserSettings.All.DropFramesDuringPreviewIfBehind)\n                            break;\n\n                        if (pass >= 2)\n                            frameDelay += Project.Frames[selectedIndex].Delay;\n                    }\n                    while (sw.ElapsedMilliseconds >= frameDelay);\n\n                    if (Project.Frames[selectedIndex].Delay == 0)\n                        Project.Frames[selectedIndex].Delay = 10;\n\n                    //Wait rest of actual frame delay time\n                    if (sw.ElapsedMilliseconds >= frameDelay)\n                        continue;\n\n                    while (sw.Elapsed.TotalMilliseconds < frameDelay)\n                        Thread.Sleep(1);\n\n                    //SpinWait.SpinUntil(() => sw.ElapsedMilliseconds >= frameDelay);\n                }\n\n                sw.Stop();\n\n                #endregion\n            }\n        }\n\n        private void Control_DragEnter(object sender, DragEventArgs e)\n        {\n            Pause();\n\n            e.Effects = e.Data.GetDataPresent(DataFormats.FileDrop)\n                ? DragDropEffects.Copy\n                : DragDropEffects.None;\n        }\n\n        private async void Control_Drop(object sender, DragEventArgs e)\n        {\n            Pause();\n\n            if (e.Data.GetData(DataFormats.FileDrop) is not string[] fileNames || fileNames.Length == 0)\n                return;\n\n            #region Validation\n\n            var extensionList = fileNames.Select(s => Path.GetExtension(s).ToLowerInvariant()).ToList();\n\n            var media = new[] { \".jpg\", \".jpeg\", \".gif\", \".bmp\", \".png\", \".avi\", \".mp4\", \".wmv\" };\n\n            var projectCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && (x.Equals(\".stg\") || x.Equals(\".zip\")));\n            var mediaCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && media.Contains(Path.GetExtension(x)));\n\n            if (projectCount != 0 && mediaCount != 0)\n            {\n                Dialog.Ok(LocalizationHelper.Get(\"S.Editor.DragDrop.Invalid.Title\"),\n                    LocalizationHelper.Get(\"S.Editor.DragDrop.MultipleFiles.Instruction\"),\n                    LocalizationHelper.Get(\"S.Editor.DragDrop.MultipleFiles.Message\"), Icons.Warning);\n                return;\n            }\n\n            if (mediaCount == 0 && projectCount == 0)\n            {\n                Dialog.Ok(LocalizationHelper.Get(\"S.Editor.DragDrop.Invalid.Title\"),\n                    LocalizationHelper.Get(\"S.Editor.DragDrop.Invalid.Instruction\"),\n                    LocalizationHelper.Get(\"S.Editor.DragDrop.Invalid.Message\"), Icons.Warning);\n                return;\n            }\n\n            //if (projectCount > 0)\n            //{\n            //    Dialog.Ok(LocalizationHelper.Get(\"S.Editor.DragDrop.Invalid.Title\"),\n            //        LocalizationHelper.Get(\"S.Editor.DragDrop.InvalidProject.Instruction\"),\n            //        LocalizationHelper.Get(\"S.Editor.DragDrop.InvalidProject.Message\"), Dialog.Icons.Warning);\n            //    return;\n            //}\n\n            #endregion\n\n            #region Importing options\n\n            //If inserted into new recording or forced into new one.\n            if (Project == null || !Project.Any || e.KeyStates == DragDropKeyStates.ControlKey || projectCount > 0)\n                await Task.Run(() => ImportFrom(fileNames.ToList()));\n            else\n                await InsertImportFrom(fileNames.ToList());\n\n            #endregion\n\n            ClosePanel(removeEvent: true);\n            CommandManager.InvalidateRequerySuggested();\n            GC.Collect();\n        }\n\n        private void CancelLoadingButton_Click(object sender, RoutedEventArgs e)\n        {\n            _abortLoading = true;\n            CancelLoadingButton.IsEnabled = false;\n        }\n\n        private void InkCanvas_PreviewKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.Key != Key.Escape || sender is not InkCanvas canvas)\n                return;\n\n            //This event only exists because the InkPanel eats the Esc key used in Commands.\n            //if something is not selected, run the command to close the panel.\n            if (canvas.ActiveEditingMode != InkCanvasEditingMode.Select && canvas.GetSelectedStrokes().Any())\n                CancelCommandBinding.Command.Execute(null);\n        }\n\n        #endregion\n\n        #region Methods\n\n        #region Load\n\n        internal async void LoadFromArguments()\n        {\n            if (Arguments.FileNames.Count < 1)\n                return;\n\n            #region Validation\n\n            var extensionList = Arguments.FileNames.Select(Path.GetExtension).ToList();\n\n            var media = new[] { \"avif\", \"jpg\", \"jpeg\", \"gif\", \"bmp\", \"png\", \"apng\", \"avi\", \"mkv\", \"mp4\", \"webp\", \"webm\", \"wmv\" };\n\n            var projectCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && (x.Equals(\"stg\") || x.Equals(\"zip\")));\n            var mediaCount = extensionList.Count(x => !string.IsNullOrEmpty(x) && media.Contains(x));\n\n            //TODO: Later I need to implement another validation for multiple video files.\n\n            if (projectCount != 0 && mediaCount != 0)\n            {\n                Dispatcher.Invoke(() => StatusList.Warning(FindResource(\"S.Editor.InvalidLoadingFiles\").ToString()));\n                return;\n            }\n\n            if (projectCount > 0)\n            {\n                Dispatcher.Invoke(() => StatusList.Warning(FindResource(\"S.Editor.InvalidLoadingProjects\").ToString()));\n                return;\n            }\n\n            #endregion\n\n            await Task.Run(() => ImportFrom(Arguments.FileNames.ToImmutableList()));\n\n            ClosePanel(removeEvent: true);\n            CommandManager.InvalidateRequerySuggested();\n            GC.Collect();\n        }\n\n        #region Async Loading\n\n        /// <summary>\n        /// Loads the new frames and clears the old ones.\n        /// </summary>\n        /// <param name=\"newProject\">The project to load.</param>\n        /// <param name=\"isNew\">True if this is a new project.</param>\n        /// <param name=\"clear\">True if it should clear the current list of frames.</param>\n        /// <param name=\"createFlag\">True if it should create a flag for single use, a mutex.</param>\n        internal async void LoadProject(ProjectInfo newProject, bool isNew = true, bool clear = true, bool createFlag = false)\n        {\n            Cursor = Cursors.AppStarting;\n            IsLoading = true;\n\n            _viewModel.Frames.Clear();\n            ZoomBoxControl.Zoom = 1;\n\n            #region Discard\n\n            if (clear || isNew)\n            {\n                //Clear clipboard data.\n                ClipboardListBox.Items.Clear();\n                Util.Clipboard.Items?.Clear();\n            }\n\n            //TODO: Settings to choose if the project will be discarded.\n            if (clear && Project != null && Project.Any)\n            {\n                Project.Persist();\n\n                if (!UserSettings.All.NotifyProjectDiscard || Dialog.Ask(LocalizationHelper.Get(\"S.Editor.DiscardProject.Title\"), LocalizationHelper.Get(\"S.Editor.DiscardPreviousProject.Instruction\"),\n                        LocalizationHelper.Get(\"S.Editor.DiscardPreviousProject.Message\"), false))\n                {\n                    await Task.Run(() => Discard(Project));\n                    FilledList = false;\n                    FrameListView.SelectionChanged += FrameListView_SelectionChanged;\n\n                    Project = newProject;\n\n                    ActionStack.Clear();\n                    ActionStack.Project = Project;\n\n                    LoadCallback(await Task.Run(Load));\n\n                    GC.Collect();\n                    return;\n                }\n\n                Project.Clear();\n                ActionStack.Clear();\n            }\n\n            #endregion\n\n            if (isNew)\n            {\n                if (!clear) //Already clears the project above if flag 'clear' is true.\n                    Project?.Clear();\n\n                Project = newProject;\n\n                if (createFlag)\n                    Project.CreateMutex();\n\n                ActionStack.Clear();\n                ActionStack.Project = Project;\n            }\n\n            var result = await Task.Run(Load);\n            LoadCallback(result);\n        }\n\n        private bool Load()\n        {\n            try\n            {\n                Dispatcher.Invoke(() =>\n                {\n                    IsCancelable = true;\n                });\n\n                if (!Project.IsNew)\n                    Project.Persist();\n\n                var corruptedList = new List<FrameInfo>();\n                var count = 0;\n\n                #region Get images from cache\n\n                if (File.Exists(Project.CachePath))\n                {\n                    ShowProgress(LocalizationHelper.Get(\"S.Editor.RetrievingFromCache\"), Project.Frames.Count);\n\n                    using (var fileStream = new FileStream(Project.CachePath, FileMode.Open, FileAccess.Read, FileShare.Read))\n                    {\n                        using (var deflateStream = new DeflateStream(fileStream, CompressionMode.Decompress))\n                        {\n                            var number = 0;\n\n                            for (var index = 0; index < Project.Frames.Count; index++)\n                            {\n                                var frame = Project.Frames[index];\n\n                                if (_abortLoading)\n                                    return false;\n\n                                Dispatcher.Invoke(() => { UpdateProgress(number++); });\n                                BitmapSource source;\n\n                                try\n                                {\n                                    var array = deflateStream.ReadBytesUntilFull((int)frame.DataLength);\n\n                                    if (Project.BitDepth == 24)\n                                    {\n                                        //24 bits: ((Project.Width * 24 + 31) / 32) * 4\n                                        source = BitmapSource.Create(Project.Width, Project.Height, Project.Dpi, Project.Dpi, PixelFormats.Bgr24, null, array, ((Project.Width * 24 + 31) / 32) * 4);\n                                        source = new FormatConvertedBitmap(source, PixelFormats.Bgra32, null, 0);\n                                    }\n                                    else\n                                    {\n                                        //32 bits: 4 * Project.Width\n                                        source = BitmapSource.Create(Project.Width, Project.Height, Project.Dpi, Project.Dpi, PixelFormats.Bgra32, null, array, 4 * Project.Width);\n                                    }\n                                }\n                                catch (EndOfStreamException d)\n                                {\n                                    LogWriter.Log(d, \"It was not possible to read more bytes from the frame cache, since it reached the end\");\n                                    break;\n                                }\n\n                                using (var stream = new FileStream(frame.Path, FileMode.Create))\n                                {\n                                    var encoder = new PngBitmapEncoder();\n                                    encoder.Frames.Add(BitmapFrame.Create(source));\n                                    encoder.Save(stream);\n                                    stream.Close();\n                                }\n                            }\n\n                            GC.Collect();\n                        }\n                    }\n\n                    File.Delete(Project.CachePath);\n                }\n\n                #endregion\n\n                ShowProgress(LocalizationHelper.Get(\"S.Editor.LoadingFrames\"), Project.Frames.Count);\n\n                #region Check if there's any missing frames (and remove them)\n\n                var processedFrame = 0;\n\n                foreach (var frame in Project.Frames)\n                {\n                    if (_abortLoading)\n                        break;\n\n                    if (!File.Exists(frame.Path))\n                        corruptedList.Add(frame);\n\n                    UpdateProgress(processedFrame++);\n                }\n\n                if (_abortLoading)\n                    return false;\n\n                //Remove the corrupted frames.\n                foreach (var frame in corruptedList)\n                    Project.Frames.Remove(frame);\n\n                if (Project.Frames.Count == 0)\n                {\n                    Dispatcher.InvokeAsync(() =>\n                    {\n                        Dialog.Ok(LocalizationHelper.Get(\"S.Editor.LoadingFrames\"), LocalizationHelper.Get(\"S.Editor.LoadingFrames.ProjectCorrupted.Instruction\"),\n                            LocalizationHelper.Get(\"S.Editor.LoadingFrames.ProjectCorrupted.Message\"));\n                    });\n                    return false;\n                }\n\n                #endregion\n\n                //If the project was never loaded inside the editor. Projects created with any version older than 2.14 won't enter here.\n                if (Project.IsNew)\n                {\n                    Project.IsNew = false;\n                    Project.Persist();\n\n                    //Get enabled tasks.\n                    var tasks = UserSettings.All.AutomatedTasksList?.Cast<BaseTaskViewModel>().Where(w => w != null && w.IsEnabled).ToList() ?? new List<BaseTaskViewModel>();\n\n                    if (tasks.Any())\n                    {\n                        #region Initialize the previewer\n\n                        Dispatcher.Invoke(() =>\n                        {\n                            ZoomBoxControl.LoadFromPath(Project.Frames[0].Path);\n\n                            OverlayGrid.Visibility = Visibility.Visible;\n                            OverlayGrid.Opacity = 1;\n                            OverlayGrid.UpdateLayout();\n\n                            var size = ZoomBoxControl.GetElementSize();\n\n                            CaptionOverlayGrid.Width = size.Width;\n                            CaptionOverlayGrid.Height = size.Height;\n                            CaptionOverlayGrid.UpdateLayout();\n                        });\n\n                        #endregion\n\n                        foreach (var task in tasks)\n                        {\n                            if (_abortLoading)\n                            {\n                                Dispatcher.Invoke(() =>\n                                {\n                                    ZoomBoxControl.ImageSource = null;\n\n                                    OverlayGrid.Visibility = Visibility.Collapsed;\n                                    OverlayGrid.Opacity = 0;\n                                });\n\n                                return false;\n                            }\n\n                            try\n                            {\n                                switch (task.TaskType)\n                                {\n                                    case TaskTypes.MouseEvents:\n                                    {\n                                        if (Project.CreatedBy == ProjectByType.ScreenRecorder)\n                                            MouseEventsAsync(task as MouseEventsViewModel ?? MouseEventsViewModel.FromSettings());\n\n                                        break;\n                                    }\n\n                                    case TaskTypes.KeyStrokes:\n                                    {\n                                        if (Project.CreatedBy == ProjectByType.ScreenRecorder)\n                                            KeyStrokesAsync(task as KeyStrokesViewModel ?? KeyStrokesViewModel.FromSettings());\n\n                                        break;\n                                    }\n\n                                    case TaskTypes.Delay:\n                                    {\n                                        if (Project.CreatedBy != ProjectByType.Editor && Project.CreatedBy != ProjectByType.Unknown)\n                                            DelayAsync(task as DelayViewModel ?? DelayViewModel.FromSettings(), true, true);\n\n                                        break;\n                                    }\n\n                                    case TaskTypes.Progress:\n                                    {\n                                        if (Project.CreatedBy != ProjectByType.Editor && Project.CreatedBy != ProjectByType.Unknown)\n                                            ProgressAsync(task as ProgressViewModel ?? ProgressViewModel.FromSettings());\n\n                                        break;\n                                    }\n\n                                    case TaskTypes.Border:\n                                    {\n                                        if (Project.CreatedBy != ProjectByType.Editor && Project.CreatedBy != ProjectByType.Unknown)\n                                            BorderAsync(task as BorderViewModel ?? BorderViewModel.FromSettings());\n\n                                        break;\n                                    }\n\n                                    case TaskTypes.Shadow:\n                                    {\n                                        if (Project.CreatedBy != ProjectByType.Editor && Project.CreatedBy != ProjectByType.Unknown)\n                                            ShadowAsync(task as ShadowViewModel ?? ShadowViewModel.FromSettings());\n\n                                        break;\n                                    }\n                                }\n                            }\n                            catch (Exception e)\n                            {\n                                LogWriter.Log(e, \"Error while applying automatic task\");\n                                Dispatcher.Invoke(() => { ExceptionDialog.Ok(e, \"ScreenToGif\", \"Error while executing a task\", e.Message); });\n                            }\n                        }\n\n                        #region Reset the previewer state\n\n                        Dispatcher.Invoke(() =>\n                        {\n                            ZoomBoxControl.ImageSource = null;\n\n                            OverlayGrid.Visibility = Visibility.Collapsed;\n                            OverlayGrid.Opacity = 0;\n                        });\n\n                        #endregion\n                    }\n                }\n\n                #region Load frames into the ListView\n\n                Dispatcher.Invoke(() => _viewModel.Frames.Clear());\n\n                foreach (var frame in Project.Frames)\n                {\n                    if (_abortLoading)\n                        break;\n\n                    frame.Index = count++;\n\n                    Dispatcher.Invoke(() =>\n                    {\n                        var item = new FrameViewModel\n                        {\n                            Number = frame.Index,\n                            Image = frame.Path,\n                            Delay = frame.Delay\n                        };\n\n                        _viewModel.Frames.Add(item);\n\n                        UpdateProgress(item.Number);\n                    });\n                }\n\n                if (_abortLoading)\n                    return false;\n\n                if (corruptedList.Any())\n                {\n                    Dispatcher.InvokeAsync(() =>\n                    {\n                        Dialog.Ok(LocalizationHelper.Get(\"S.Editor.LoadingFrames\"), LocalizationHelper.Get(\"S.Editor.LoadingFrames.FramesCorrupted.Instruction\"),\n                            LocalizationHelper.Get(\"S.Editor.LoadingFrames.FramesCorrupted.Message\"));\n                    });\n                }\n\n                #endregion\n\n                return true;\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Error in loading frames\");\n                Dispatcher.Invoke(() => ErrorDialog.Ok(Title, \"Error loading frames\", \"It was not possible to load all the frames.\", ex));\n\n                return false;\n            }\n            finally\n            {\n                _abortLoading = false;\n            }\n        }\n\n        private async void LoadCallback(bool result)\n        {\n            Cursor = Cursors.Arrow;\n            IsLoading = false;\n            IsCancelable = false;\n\n            if (Project.Any)\n                FilledList = true;\n\n            if (!result)\n            {\n                CancelLoadingButton.IsEnabled = true; //TODO: Is this right?\n\n                await Task.Run(() => Discard(Project));\n\n                WelcomeGrid.BeginStoryboard(this.FindStoryboard(\"ShowWelcomeBorderStoryboard\"), HandoffBehavior.Compose);\n\n                FilledList = false;\n                IsLoading = false;\n\n                WelcomeTextBlock.Text = LocalizationHelper.Get(Humanizer.WelcomeInfo());\n                SymbolTextBlock.Text = Humanizer.Welcome();\n\n                UpdateStatistics();\n\n                FrameListView.SelectionChanged += FrameListView_SelectionChanged;\n\n                CommandManager.InvalidateRequerySuggested();\n\n                return;\n            }\n\n            FrameListView.SelectedIndex = -1;\n            FrameListView.SelectedIndex = 0; //TODO: Get the latest selected frame if it's the same project.\n            ZoomBoxControl.PixelSize = Project.Frames[0].Path.ScaledSize();\n            ZoomBoxControl.ImageScale = Project.Frames[0].Path.ScaleOf();\n            ZoomBoxControl.RefreshImage();\n\n            //ListBoxSelector.SetIsEnabled(FrameListView, true);\n            //new ListBoxSelector(FrameListView);\n\n            HideProgress();\n            UpdateStatistics();\n\n            WelcomeGrid.BeginStoryboard(this.FindStoryboard(\"HideWelcomeBorderStoryboard\"), HandoffBehavior.Compose);\n\n            CommandManager.InvalidateRequerySuggested();\n\n            SetFocusOnCurrentFrame();\n\n            //Adjust the window size based on the frame size.\n            if (UserSettings.All.AutomaticallySizeOnContent && SizeToContentCommand.Command != null && SizeToContentCommand.Command.CanExecute(null))\n                SizeToContentCommand.Command.Execute(null);\n\n            //Adjust the frame zoom based on the window size.\n            if (UserSettings.All.AutomaticallyFitImage && FitImageCommand.Command != null && FitImageCommand.Command.CanExecute(null))\n                FitImageCommand.Command.Execute(null);\n        }\n\n        #endregion\n\n        #region Async Selective Loading\n\n        private async Task LoadSelectedStarter(int start, int? end = null)\n        {\n            Cursor = Cursors.AppStarting;\n            IsLoading = true;\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.UpdatingFrames\"), Project.Frames.Count, true);\n\n            //Persists the project to the disk.\n            await Task.Run(() => Project.Persist());\n\n            await Task.Run(() => LoadSelected(start, end));\n\n            //Adjust the UI.\n            Cursor = Cursors.Arrow;\n            HideProgress();\n\n            if (LastSelected != -1)\n            {\n                ZoomBoxControl.ImageSource = null;\n\n                var valid = Project.ValidIndex(LastSelected);\n\n                if (valid > -1)\n                {\n                    ZoomBoxControl.ImageSource = Project.Frames[valid].Path;\n                    ZoomBoxControl.PixelSize = Project.Frames[0].Path.ScaledSize();\n                    ZoomBoxControl.ImageScale = Project.Frames[0].Path.ScaleOf();\n                    ZoomBoxControl.RefreshImage();\n                    FrameListView.ScrollIntoView(_viewModel.Frames[valid]);\n                }\n            }\n\n            UpdateStatistics();\n\n            IsLoading = false;\n            CommandManager.InvalidateRequerySuggested();\n\n            SetFocusOnCurrentFrame();\n        }\n\n        private bool LoadSelected(int start, int? end)\n        {\n            end ??= Project.Frames.Count - 1;\n            UpdateProgress(0);\n\n            try\n            {\n                //Perhaps there's no need for part of this anymore, since there's a working virtualization now.\n                Dispatcher.Invoke(() =>\n                {\n                    //For each changed frame.\n                    for (var index = start; index <= end; index++)\n                    {\n                        //Check if within limits.\n                        if (index <= _viewModel.Frames.Count - 1)\n                        {\n                            #region Edit the existing frame\n\n                            var frame = _viewModel.Frames[index];\n                            frame.Number = index;\n                            frame.Delay = Project.Frames[index].Delay;\n                            frame.Image = null; //To update the image.\n                            frame.Image = Project.Frames[index].Path;\n\n                            Project.Frames[index].Index = index;\n\n                            #endregion\n                        }\n                        else\n                        {\n                            #region Create another frame\n\n                            _viewModel.Frames.Add(new FrameViewModel\n                            {\n                                Number = index,\n                                Image = Project.Frames[index].Path,\n                                Delay = Project.Frames[index].Delay\n                            });\n\n                            Project.Frames[index].Index = index;\n\n                            #endregion\n                        }\n\n                        UpdateProgress(index);\n                    }\n                });\n\n                if (Project.Frames.Count > 0)\n                    Dispatcher.Invoke(() => { FilledList = true; });\n\n                return true;\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Frame Loading Error\");\n                return false;\n            }\n        }\n\n        #endregion\n\n        #region Async Import\n\n        private List<FrameInfo> InsertInternal(string fileName, string pathTemp, ref Size previousSize, ref double previousDpi, ref bool warn, ref bool warnSize)\n        {\n            List<FrameInfo> listFrames;\n\n            try\n            {\n                switch (fileName.Split('.').Last().ToLowerInvariant())\n                {\n                    case \"stg\":\n                    case \"zip\":\n                    {\n                        listFrames = ImportFromProject(fileName, pathTemp);\n                        break;\n                    }\n\n                    case \"gif\":\n                    {\n                        listFrames = ImportFromGif(fileName, pathTemp);\n                        break;\n                    }\n\n                    case \"avi\":\n                    case \"avif\":\n                    case \"mkv\":\n                    case \"mp4\":\n                    case \"wmv\":\n                    case \"webp\":\n                    case \"webm\":\n                    {\n                        listFrames = ImportFromVideo(fileName, pathTemp);\n                        break;\n                    }\n\n                    case \"apng\":\n                    case \"png\":\n                    {\n                        listFrames = ImportFromPng(fileName, pathTemp, ref previousSize, ref previousDpi, ref warn, ref warnSize);\n                        break;\n                    }\n\n                    default:\n                    {\n                        listFrames = ImportFromImage(fileName, pathTemp, ref previousSize, ref previousDpi, ref warn, ref warnSize);\n                        break;\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Import error\");\n\n                return [];\n            }\n\n            return listFrames;\n        }\n\n        private bool ImportFrom(IList<string> fileList)\n        {\n            #region Disable UI\n\n            Dispatcher.Invoke(() =>\n            {\n                Cursor = Cursors.AppStarting;\n                IsLoading = true;\n            });\n\n            #endregion\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.PreparingImport\"), fileList.Count, false);\n\n            var project = new ProjectInfo().CreateProjectFolder(ProjectByType.Editor);\n            var currentDpi = 0D;\n            var currentSize = Size.Empty;\n            var wasWarned = false;\n            var wasWarnedSized = false;\n\n            //Adds each image to a list.\n            var addedSoFar = 0;\n            foreach (var file in fileList)\n            {\n                if (Dispatcher.HasShutdownStarted)\n                    return false;\n\n                var warn = false;\n                var warnSize = false;\n                var frame = InsertInternal(file, project.FullPath, ref currentSize, ref currentDpi, ref warn, ref warnSize);\n\n                //Size and DPI validations.\n                if (warnSize && !wasWarnedSized)\n                {\n                    wasWarnedSized = true;\n                    Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Warning.DifferentSize\")));\n                    continue;\n                }\n\n                if (warn && !wasWarned)\n                {\n                    wasWarned = true;\n                    Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Warning.DifferentDpi\")));\n                    continue;\n                }\n\n                if (frame != null)\n                    project.Frames.AddRange(frame);\n\n                UpdateProgress(addedSoFar++);\n            }\n\n            if (project.Frames.Count == 0)\n            {\n                if (Dispatcher.HasShutdownStarted)\n                    return false;\n\n                Dispatcher.Invoke(() =>\n                {\n                    Cursor = Cursors.Arrow;\n                    IsLoading = false;\n\n                    if (project.Any)\n                        FilledList = true;\n\n                    HideProgress();\n\n                    CommandManager.InvalidateRequerySuggested();\n                    SetFocusOnCurrentFrame();\n                });\n\n                return false;\n            }\n\n            Dispatcher.Invoke(() => LoadProject(project));\n\n            return true;\n        }\n\n        private async Task<bool> InsertImportFrom(List<string> fileList)\n        {\n            #region Disable UI\n\n            Dispatcher.Invoke(() =>\n            {\n                Cursor = Cursors.AppStarting;\n                IsLoading = true;\n            });\n\n            #endregion\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.PreparingImport\"), 100);\n\n            var project = new ProjectInfo().CreateProjectFolder(ProjectByType.Editor);\n            var currentDpi = 0D;\n            var currentSize = Size.Empty;\n            var wasWarned = false;\n            var wasWarnedSized = false;\n\n            //Adds each image to a list.\n            foreach (var file in fileList)\n            {\n                if (Dispatcher.HasShutdownStarted)\n                    return false;\n\n                var warn = false;\n                var warnSize = false;\n                var frame = InsertInternal(file, project.FullPath, ref currentSize, ref currentDpi, ref warn, ref warnSize);\n\n                //Size and DPI validations.\n                if (warnSize && !wasWarnedSized)\n                {\n                    wasWarnedSized = true;\n                    Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Warning.DifferentSize\")));\n                    continue;\n                }\n\n                if (warn && !wasWarned)\n                {\n                    wasWarned = true;\n                    Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.Editor.Warning.DifferentDpi\")));\n                    continue;\n                }\n\n                if (frame != null)\n                    project.Frames.AddRange(frame);\n            }\n\n            if (!project.Any)\n            {\n                project.ReleaseMutex();\n\n                Dispatcher.Invoke(() =>\n                {\n                    Cursor = Cursors.Arrow;\n                    IsLoading = false;\n                });\n\n                return false;\n            }\n\n            var list = Dispatcher.Invoke(() =>\n            {\n                #region Insert\n\n                var insert = new Insert(Project.Frames, project.Frames, FrameListView.SelectedIndex) { Owner = this };\n                var result = insert.ShowDialog();\n\n                if (result.HasValue && result.Value)\n                    return insert.CurrentList;\n\n                return null;\n\n                #endregion\n            });\n\n            project.ReleaseMutex();\n\n            if (list != null)\n            {\n                ActionStack.SaveState(ActionStack.EditAction.Add, FrameListView.SelectedIndex, project.Frames.Count);\n\n                Dispatcher.Invoke(() => Project.Frames = list);\n\n                await LoadSelectedStarter(FrameListView.SelectedIndex, Project.Frames.Count - 1); //Check\n\n                return true;\n            }\n\n            #region Enabled the UI\n\n            Dispatcher.Invoke(() =>\n            {\n                HideProgress();\n\n                if (LastSelected != -1)\n                {\n                    ZoomBoxControl.ImageSource = null;\n                    ZoomBoxControl.ImageSource = Project.Frames[LastSelected].Path;\n\n                    FrameListView.ScrollIntoView(_viewModel.Frames[LastSelected]);\n                }\n\n                Cursor = Cursors.Arrow;\n                IsLoading = false;\n            });\n\n            #endregion\n\n            return false;\n        }\n\n        #endregion\n\n        private List<FrameInfo> ImportFromProject(string source, string pathTemp)\n        {\n            try\n            {\n                //Extract to the folder of the newly created project.\n                ZipFile.ExtractToDirectory(source, pathTemp);\n\n                List<FrameInfo> list;\n\n                if (File.Exists(Path.Combine(pathTemp, \"Project.json\")))\n                {\n                    //Read as text.\n                    var json = File.ReadAllText(Path.Combine(pathTemp, \"Project.json\"));\n\n                    using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))\n                    {\n                        var ser = new DataContractJsonSerializer(typeof(ProjectInfo));\n                        var project = ser.ReadObject(ms) as ProjectInfo;\n\n                        list = project?.Frames;\n                    }\n                }\n                else\n                {\n                    if (File.Exists(Path.Combine(pathTemp, \"List.sb\")))\n                        throw new Exception(\"Project not compatible with this version\");\n\n                    throw new FileNotFoundException(\"Impossible to open project.\", \"List.sb\");\n                }\n\n                //Shows the ProgressBar\n                ShowProgress(LocalizationHelper.Get(\"S.Editor.ImportingFrames\"), list?.Count ?? 0);\n\n                var count = 0;\n                foreach (var frame in list ?? [])\n                {\n                    //Change the file path to the current one.\n                    frame.Path = Path.Combine(pathTemp, Path.GetFileName(frame.Path));\n\n                    count++;\n                    UpdateProgress(count);\n                }\n\n                return list;\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Importing project\");\n                Dispatcher.Invoke(() => Dialog.Ok(\"ScreenToGif\", \"Impossible to load project\", ex.Message));\n\n                return [];\n            }\n        }\n\n        private List<FrameInfo> ImportFromGif(string source, string pathTemp)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ImportingFrames\"), 50, true);\n\n            var listFrames = new List<FrameInfo>();\n\n            var decoder = ImageMethods.GetDecoder(source, out var gifMetadata) as GifBitmapDecoder;\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ImportingFrames\"), decoder?.Frames?.Count ?? 0);\n\n            if (decoder == null || decoder?.Frames.Count <= 0)\n                return listFrames;\n\n            var fullSize = ImageMethods.GetFullSize(decoder, gifMetadata);\n            var index = 0;\n\n            BitmapSource baseFrame = null;\n            foreach (var rawFrame in decoder.Frames)\n            {\n                var metadata = ImageMethods.GetFrameMetadata(decoder, gifMetadata, index);\n\n                var bitmapSource = ImageMethods.MakeFrame(fullSize, rawFrame, metadata, baseFrame, 96D);\n\n                #region Disposal Method\n\n                switch (metadata.DisposalMethod)\n                {\n                    case FrameDisposalMethod.None:\n                    case FrameDisposalMethod.DoNotDispose:\n                        baseFrame = bitmapSource;\n                        break;\n                    case FrameDisposalMethod.RestoreBackground:\n                        baseFrame = ImageMethods.IsFullFrame(metadata, fullSize) ? null : ImageMethods.ClearArea(bitmapSource, metadata, 96D);\n                        break;\n                    case FrameDisposalMethod.RestorePrevious:\n                        //Reuse same base frame.\n                        break;\n                }\n\n                #endregion\n\n                #region Each Frame\n\n                var fileName = Path.Combine(pathTemp, $\"{index} {DateTime.Now:hh-mm-ss-ffff}.png\");\n\n                using (var stream = new FileStream(fileName, FileMode.Create))\n                {\n                    var encoder = new PngBitmapEncoder();\n                    encoder.Frames.Add(BitmapFrame.Create(bitmapSource));\n                    encoder.Save(stream);\n                    stream.Close();\n                }\n\n                //It should not throw a overflow exception because of the maximum value for the milliseconds.\n                var frame = new FrameInfo(fileName, (int)metadata.Delay.TotalMilliseconds);\n                listFrames.Add(frame);\n\n                UpdateProgress(index);\n\n                GC.Collect(1);\n\n                #endregion\n\n                index++;\n            }\n\n            return listFrames;\n        }\n\n        private List<FrameInfo> ImportFromPng(string source, string pathTemp, ref Size previousSize, ref double previousDpi, ref bool warn, ref bool warnSize)\n        {\n            using var stream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read);\n\n            var apng = new Apng(stream);\n            var success = apng.ReadFrames();\n\n            if (!success)\n                return ImportFromImage(source, pathTemp, ref previousSize, ref previousDpi, ref warn, ref warnSize);\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ImportingFrames\"), 50, true);\n\n            var fullSize = new System.Drawing.Size((int)apng.Ihdr.Width, (int)apng.Ihdr.Height);\n            var list = new List<FrameInfo>();\n\n            BitmapSource baseFrame = null;\n            for (var index = 0; index < apng.Actl.NumFrames; index++)\n            {\n                var metadata = apng.GetFrame(index);\n                var rawFrame = metadata.ImageData.SourceFrom();\n\n                var bitmapSource = Apng.MakeFrame(fullSize, rawFrame, metadata, baseFrame);\n\n                #region Disposal Method\n\n                switch (metadata.DisposeOp)\n                {\n                    case Apng.DisposeOps.None: //No disposal is done on this frame before rendering the next; the contents of the output buffer are left as is.\n                        baseFrame = bitmapSource;\n                        break;\n                    case Apng.DisposeOps.Background: //The frame's region of the output buffer is to be cleared to fully transparent black before rendering the next frame.\n                        baseFrame = baseFrame == null || Apng.IsFullFrame(metadata, fullSize) ? null : Apng.ClearArea(baseFrame, metadata);\n                        break;\n                    case Apng.DisposeOps.Previous: //The frame's region of the output buffer is to be reverted to the previous contents before rendering the next frame.\n                        //Reuse same base frame.\n                        break;\n                }\n\n                #endregion\n\n                #region Each Frame\n\n                var fileName = Path.Combine(pathTemp, $\"{index} {DateTime.Now:hh-mm-ss-ffff}.png\");\n\n                //TODO: Do I need to verify the DPI of the image?\n\n                using (var output = new FileStream(fileName, FileMode.Create))\n                {\n                    var encoder = new PngBitmapEncoder();\n                    encoder.Frames.Add(BitmapFrame.Create(bitmapSource));\n                    encoder.Save(output);\n                    stream.Close();\n                }\n\n                list.Add(new FrameInfo(fileName, metadata.Delay));\n\n                UpdateProgress(index);\n\n                GC.Collect(1);\n\n                #endregion\n            }\n\n            return list;\n        }\n\n        private List<FrameInfo> ImportFromImage(string source, string pathTemp, ref Size previousSize, ref double previousDpi, ref bool warn, ref bool warnSize)\n        {\n            var fileName = Path.Combine(pathTemp, $\"{0} {DateTime.Now:hh-mm-ss-ffff}.png\");\n\n            #region Save the Image to the Recording Folder\n\n            BitmapSource bitmap = new BitmapImage(new Uri(source));\n\n            //Don't let it import multiple images with different DPI's.\n            if (previousDpi > 0 && Math.Abs(previousDpi - bitmap.DpiX) > 0.09)\n            {\n                warn = true;\n                return null;\n            }\n\n            if (!previousSize.IsEmpty && (bitmap.PixelHeight != (int)previousSize.Height || bitmap.PixelWidth != (int)previousSize.Width))\n            {\n                warnSize = true;\n                return null;\n            }\n\n            if (Math.Abs(previousDpi) < 0.01)\n                previousDpi = bitmap.DpiX;\n\n            if (bitmap.PixelHeight != (int)previousSize.Height || bitmap.PixelWidth != (int)previousSize.Width)\n                previousSize = new Size(bitmap.PixelWidth, bitmap.PixelHeight);\n\n            if (bitmap.Format != PixelFormats.Bgr32 && bitmap.Format != PixelFormats.Bgr32 || !source.EndsWith(\"png\"))\n            {\n                bitmap = new FormatConvertedBitmap(bitmap, PixelFormats.Bgra32, null, 0);\n\n                using var stream = new FileStream(fileName, FileMode.Create);\n\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bitmap));\n                encoder.Save(stream);\n                stream.Close();\n            }\n            else\n            {\n                File.Copy(source, fileName);\n            }\n            \n            GC.Collect();\n\n            #endregion\n\n            return [new(fileName, 66)];\n        }\n\n        private List<FrameInfo> ImportFromVideo(string source, string pathTemp)\n        {\n            //Get frames from video.\n            return Dispatcher?.Invoke(() =>\n            {\n                var vid = new VideoSource\n                {\n                    RootFolder = pathTemp,\n                    VideoPath = source,\n                    Owner = this\n                };\n                var result = vid.ShowDialog();\n\n                return result.HasValue && result.Value ? vid.Frames : null;\n            });\n        }\n\n        #endregion\n\n        #region Playback\n\n        private void PlayPause()\n        {\n            lock (UserSettings.Lock)\n            {\n                if (_previewToken != null || !NotPreviewing)\n                {\n                    if (_previewToken != null)\n                    {\n                        _previewToken.Cancel();\n                        _previewToken.Dispose();\n                        _previewToken = null;\n                    }\n\n                    NotPreviewing = true;\n                    PlayButton.Text = LocalizationHelper.Get(\"S.Editor.Playback.Play\");\n                    PlayButton.Icon = FindResource(\"Vector.Play\") as Brush;\n                    PlayPauseButton.Icon = FindResource(\"Vector.Play\") as Brush;\n\n                    PlayMenuItem.Header = LocalizationHelper.Get(\"S.Editor.Playback.Play\");\n                    PlayMenuItem.Icon = FindResource(\"Vector.Play\") as Brush;\n\n                    SetFocusOnCurrentFrame();\n                    UpdateOtherStatistics();\n                }\n                else\n                {\n                    NotPreviewing = false;\n                    PlayButton.Text = LocalizationHelper.Get(\"S.Editor.Playback.Pause\");\n                    PlayButton.Icon = FindResource(\"Vector.Pause\") as Brush;\n                    PlayPauseButton.Icon = FindResource(\"Vector.Pause\") as Brush;\n\n                    PlayMenuItem.Header = LocalizationHelper.Get(\"S.Editor.Playback.Pause\");\n                    PlayMenuItem.Icon = FindResource(\"Vector.Pause\") as Brush;\n\n                    #region Starts playing the next frame\n\n                    if (Project.Frames.Count - 1 == FrameListView.SelectedIndex)\n                        FrameListView.SelectedIndex = 0;\n                    else\n                        FrameListView.SelectedIndex++;\n\n                    #endregion\n\n                    if (Project.Frames[FrameListView.SelectedIndex].Delay == 0)\n                        Project.Frames[FrameListView.SelectedIndex].Delay = 10;\n\n                    _previewToken = new CancellationTokenSource();\n                    var selectedIndex = FrameListView.SelectedIndex;\n\n                    Task.Run(() => PreviewLoop(selectedIndex), _previewToken.Token);\n                }\n            }\n        }\n\n        private void Pause()\n        {\n            lock (UserSettings.Lock)\n            {\n                if (_previewToken == null && NotPreviewing)\n                    return;\n\n                if (_previewToken != null)\n                {\n                    _previewToken.Cancel();\n                    _previewToken.Dispose();\n                    _previewToken = null;\n                }\n\n                NotPreviewing = true;\n                PlayButton.Text = LocalizationHelper.Get(\"S.Editor.Playback.Play\");\n                PlayButton.Icon = FindResource(\"Vector.Play\") as Brush;\n                PlayPauseButton.Icon = FindResource(\"Vector.Play\") as Brush;\n\n                PlayMenuItem.Header = LocalizationHelper.Get(\"S.Editor.Playback.Play\");\n                PlayMenuItem.Icon = FindResource(\"Vector.Play\") as Brush;\n            }\n\n            SetFocusOnCurrentFrame();\n            UpdateOtherStatistics();\n        }\n\n        #endregion\n\n        #region UI\n\n        #region Progress\n\n        private void ShowProgress(string description, int maximum, bool isIndeterminate = false)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                StatusLabel.Content = description;\n                StatusProgressBar.Maximum = maximum;\n                StatusProgressBar.Value = 0;\n                StatusProgressBar.IsIndeterminate = isIndeterminate;\n                StatusGrid.Visibility = Visibility.Visible;\n\n                TaskbarItemInfo.ProgressState = isIndeterminate ? TaskbarItemProgressState.Indeterminate : TaskbarItemProgressState.Normal;\n                TaskbarItemInfo.ProgressValue = 0;\n            }, DispatcherPriority.Loaded);\n        }\n\n        private void UpdateProgress(int value)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal;\n                TaskbarItemInfo.ProgressValue = MathExtensions.CrossMultiplication(StatusProgressBar.Maximum, value, null) / 100d;\n\n                StatusProgressBar.IsIndeterminate = false;\n                StatusProgressBar.Value = value;\n            });\n        }\n\n        private void HideProgress()\n        {\n            Dispatcher.Invoke(() =>\n            {\n                StatusGrid.Visibility = Visibility.Collapsed;\n                TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None;\n            });\n        }\n\n        #endregion\n\n        private void SelectNear(int index)\n        {\n            if (_viewModel.Frames.Count - 1 < index)\n            {\n                SelectFrame(_viewModel.Frames.Count - 1, true);\n                return;\n            }\n\n            SelectFrame(index, true);\n        }\n\n        private void SelectFrame(int index, bool focus)\n        {\n            var forceScroll = FrameListView.SelectedIndex == index;\n\n            WasChangingSelection = true;\n            FrameListView.SelectedIndex = index;\n\n            if (focus)\n            {\n                FrameListView.Focus();\n\n                if (forceScroll)\n                {\n                    FrameListView.ScrollIntoView(_viewModel.Frames[FrameListView.SelectedIndex]);\n\n                    SetFocusOnCurrentFrame();\n                }\n            }\n        }\n\n        private void AdjustFrameNumbers(int startIndex)\n        {\n            for (var index = startIndex; index < _viewModel.Frames.Count; index++)\n            {\n                Project.Frames[index].Index = index;\n                _viewModel.Frames[index].Number = index;\n            }\n        }\n\n        private void FocusOnSelectedFrames()\n        {\n            FrameListView.Focus();\n\n            var item = FrameListView.SelectedItems.OfType<FrameViewModel>().FirstOrDefault();\n\n            if (item != null)\n                FrameListView.ScrollIntoView(item);\n\n            SetFocusOnCurrentFrame();\n        }\n\n        private async void ShowPanel(PanelTypes type, string title, string vector, Action<object, RoutedEventArgs> apply = null)\n        {\n            var focusFirstVisibleChild = true;\n\n            HideAllVisibleGrids();\n\n            #region Overlay\n\n            ZoomBoxControl.SaveCurrentZoom();\n\n            if (Project != null && Project.Any && type < 0)\n            {\n                ZoomBoxControl.Zoom = 1.0;\n                var size = ZoomBoxControl.GetElementSize();\n\n                CaptionOverlayGrid.Width = size.Width;\n                CaptionOverlayGrid.Height = size.Height;\n            }\n\n            #endregion\n\n            #region Commons\n\n            ActionTitleTextBlock.Text = title;\n            ActionIconBorder.Background = FindResource(vector) as Brush;\n\n            if (apply != null)\n            {\n                ApplyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Action.Apply\");\n                ApplyButton.Icon = FindResource(\"Vector.Ok\") as Brush;\n                _applyAction = apply;\n\n                ActionLowerGrid.Visibility = Visibility.Visible;\n            }\n            else\n            {\n                ActionLowerGrid.Visibility = Visibility.Collapsed;\n            }\n\n            #endregion\n\n            #region Type\n\n            switch (type)\n            {\n                case PanelTypes.NewAnimation:\n                    NewGrid.Visibility = Visibility.Visible;\n                    break;\n                case PanelTypes.SaveAs:\n                    ApplyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Action.Save\");\n                    ApplyButton.Icon = FindResource(\"Vector.Save\") as Brush;\n\n                    //WARNING: Temporary!!!\n                    var grid = new ExportPanel();\n                    grid.Save += (sender, args) =>\n                    {\n                        SaveAs_Executed(null, null);\n                    };\n                    grid.Validated += (sender, args) =>\n                    {\n                        StatusList.Warning(LocalizationHelper.Get(args.MessageKey), args.Reason, args.Action);\n                    };\n                    grid.ValidationRemoved += (sender, args) =>\n                    {\n                        StatusList.Remove(StatusType.Warning, args.Reason);\n                    };\n\n                    var frameCountBinding = new Binding();\n                    frameCountBinding.ElementName = \"FrameListView\";\n                    frameCountBinding.Path = new PropertyPath(\"Items.Count\");\n                    frameCountBinding.Mode = BindingMode.OneWay;\n                    frameCountBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;\n                    BindingOperations.SetBinding(grid, ExportPanel.FrameCountProperty, frameCountBinding);\n\n                    var durationBinding = new Binding();\n                    durationBinding.ElementName = \"EditorWindow\";\n                    durationBinding.Path = new PropertyPath(\"TotalDuration\");\n                    durationBinding.Mode = BindingMode.OneWay;\n                    durationBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;\n                    BindingOperations.SetBinding(grid, ExportPanel.TotalTimeProperty, durationBinding);\n\n                    var selectionCountBinding = new Binding();\n                    selectionCountBinding.ElementName = \"FrameListView\";\n                    selectionCountBinding.Path = new PropertyPath(\"SelectedItems.Count\");\n                    selectionCountBinding.Mode = BindingMode.OneWay;\n                    selectionCountBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;\n                    BindingOperations.SetBinding(grid, ExportPanel.SelectionCountProperty, selectionCountBinding);\n\n                    var currentFrameBinding = new Binding\n                    {\n                        Path = new PropertyPath(nameof(EditorViewModel.CurrentFrame)),\n                        Mode = BindingMode.OneWay,\n                        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,\n                    };\n                    BindingOperations.SetBinding(grid, ExportPanel.CurrentFrameProperty, currentFrameBinding);\n\n                    CustomContentControl.Content = grid;\n                    CustomContentControl.Visibility = Visibility.Visible;\n\n                    focusFirstVisibleChild = false;\n                    break;\n                case PanelTypes.LoadRecent:\n                    ApplyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Action.Open\");\n                    ApplyButton.Icon = FindResource(\"Vector.Open\") as Brush;\n                    LoadRecentGrid.Visibility = Visibility.Visible;\n\n                    //Load list.\n                    await Task.Run(LoadRecentAsync);\n\n                    Cursor = Cursors.Arrow;\n                    IsLoading = false;\n\n                    HideProgress();\n                    CommandManager.InvalidateRequerySuggested();\n\n                    break;\n                case PanelTypes.Clipboard:\n                    ClipboardGrid.Visibility = Visibility.Visible;\n                    break;\n                case PanelTypes.Resize:\n                {\n                    var image = Project.Frames[0].Path.SourceFrom();\n\n                    ResizePanel.DataContext = ResizeViewModel.FromSettings(image.PixelWidth, image.PixelHeight, image.DpiX);\n                    ResizePanel.Visibility = Visibility.Visible;\n\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n\n                    break;\n                }\n\n                case PanelTypes.FlipRotate:\n                    FlipRotateGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.FlipRotate2\", true);\n                    break;\n                case PanelTypes.Crop:\n\n                    #region Crop\n\n                    CropGrid.Visibility = Visibility.Visible;\n\n                    AddCropToElement(CropAreaGrid);\n\n                    BottomCropNumericUpDown.Scale = TopCropNumericUpDown.Scale = RightCropNumericUpDown.Scale = LeftCropNumericUpDown.Scale = this.Scale();\n\n                    BottomCropNumericUpDown.Value = (int)(CaptionOverlayGrid.Height - (CaptionOverlayGrid.Height * .1));\n                    TopCropNumericUpDown.Value = (int)(CaptionOverlayGrid.Height * .1);\n\n                    RightCropNumericUpDown.Value = (int)(CaptionOverlayGrid.Width - (CaptionOverlayGrid.Width * .1));\n                    LeftCropNumericUpDown.Value = (int)(CaptionOverlayGrid.Width * .1);\n\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n\n                    #endregion\n\n                    break;\n                case PanelTypes.Caption:\n                    CaptionGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.FreeText:\n                    FreeTextGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.TitleFrame:\n                    TitleFrameGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.TitleFrame2\", true);\n                    break;\n                case PanelTypes.KeyStrokes:\n                    KeyStrokesLabel.Text = \"Ctrl + C\";\n                    KeyStrokesGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n                    break;\n                case PanelTypes.FreeDrawing:\n                    FreeDrawingGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.Shapes:\n                    ShapesGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n\n                    ShapeProperties_Changed(this, null);\n                    ShapeType_SelectionChanged(ShapesListBox, null);\n                    break;\n                case PanelTypes.Watermark:\n\n                    #region Watermark\n\n                    //#region Arrange\n\n                    //if (UserSettings.All.WatermarkLeft < 0)\n                    //    UserSettings.All.WatermarkLeft = 10;\n\n                    //if (UserSettings.All.WatermarkLeft + 10 > CaptionOverlayGrid.Width)\n                    //    UserSettings.All.WatermarkLeft = 10;\n\n                    //if (UserSettings.All.WatermarkTop < 0)\n                    //    UserSettings.All.WatermarkTop = 10;\n\n                    //if (UserSettings.All.WatermarkTop + 10 > CaptionOverlayGrid.Height)\n                    //    UserSettings.All.WatermarkTop = 10;\n\n                    //#endregion\n\n                    WatermarkGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n\n                    #endregion\n\n                    break;\n                case PanelTypes.Border:\n                    BorderProperties_ValueChanged(null, null);\n                    BorderGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelectedOrAll\", true);\n                    break;\n                case PanelTypes.Obfuscate:\n                    ObfuscateOverlaySelectControl.Scale = this.Scale();\n                    ObfuscateOverlaySelectControl.Retry();\n                    ObfuscateGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.Progress:\n                    ProgressGrid.Visibility = Visibility.Visible;\n                    ChangeProgressTextToCurrent();\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n                    break;\n                case PanelTypes.Shadow:\n                    ShadowProperties_ValueChanged(null, null);\n                    ShadowGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n                    break;\n                case PanelTypes.OverrideDelay:\n                    OverrideDelayGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.IncreaseDecreaseDelay:\n                    IncreaseDecreaseDelayGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.ScaleDelay:\n                    ScaleDelayGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelected\", true);\n                    break;\n                case PanelTypes.Cinemagraph:\n                    CinemagraphGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.Cinemagraph\", true);\n                    break;\n                case PanelTypes.Fade:\n                    FadeGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Transitions.Info\", true);\n                    break;\n                case PanelTypes.Slide:\n                    SlideGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Transitions.Info\", true);\n                    break;\n                case PanelTypes.ReduceFrames:\n                    ReduceGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplySelectedOrAll\", true);\n                    break;\n                case PanelTypes.RemoveDuplicates:\n                    RemoveDuplicatesGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n                    break;\n                case PanelTypes.MouseEvents:\n                    MouseEventsGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n                    break;\n                case PanelTypes.SmoothLoop:\n                    SmoothLoopGrid.Visibility = Visibility.Visible;\n                    ShowHint(\"S.Hint.ApplyAll\", true);\n                    break;\n            }\n\n            #endregion\n\n            #region Focus\n\n            if (focusFirstVisibleChild)\n            {\n                var visible = ActionInternalGrid.Children.OfType<Grid>().FirstOrDefault(x => x.Visibility == Visibility.Visible);\n\n                if (visible != null)\n                {\n                    visible.Focus();\n                    visible.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n                }\n            }\n\n            #endregion\n\n            #region Animate\n\n            if (type is PanelTypes.SaveAs or PanelTypes.LoadRecent && ActionGrid.Width < 300)\n                ActionGrid.BeginStoryboard(this.FindStoryboard(\"ShowExtendedPanelStoryboard\"), HandoffBehavior.Compose);\n            else if (type != PanelTypes.SaveAs && type != PanelTypes.LoadRecent && ActionGrid.Width is < 5 or > 280)\n                ActionGrid.BeginStoryboard(this.FindStoryboard(\"ShowPanelStoryboard\"), HandoffBehavior.Compose);\n\n            #endregion\n\n            #region Overlay Grid\n\n            if (OverlayGrid.Opacity < 1 && type < 0)\n                OverlayGrid.BeginStoryboard(this.FindStoryboard(\"ShowOverlayGridStoryboard\"), HandoffBehavior.Compose);\n            else if (OverlayGrid.Opacity > 0 && type > 0)\n                OverlayGrid.BeginStoryboard(this.FindStoryboard(\"HideOverlayGridStoryboard\"), HandoffBehavior.Compose);\n\n            #endregion\n\n            CommandManager.InvalidateRequerySuggested();\n        }\n\n        private void HideAllVisibleGrids()\n        {\n            foreach (var child in ActionInternalGrid.Children.OfType<FrameworkElement>().Where(x => x.Visibility == Visibility.Visible))\n            {\n                child.Visibility = Visibility.Collapsed;\n\n                //Persist the latest settings if the panel has any to be saved.\n                if (child.DataContext is IPersistent per)\n                    per.Persist();\n            }\n\n            CustomContentControl.Content = null;\n\n            ShapeDrawingCanvas.DeselectAll();\n        }\n\n        private void ClosePanel(bool isCancel = false, bool removeEvent = false)\n        {\n            StatusList.Remove(StatusType.Warning);\n\n            if (ActionGrid.ActualWidth > 0)\n                ZoomBoxControl.RestoreSavedZoom();\n\n            HideHint();\n\n            if (isCancel)\n                SetFocusOnCurrentFrame();\n\n            if (removeEvent)\n                _applyAction = null;\n\n            BeginStoryboard(this.FindStoryboard(\"HidePanelStoryboard\"), HandoffBehavior.Compose);\n            BeginStoryboard(this.FindStoryboard(\"HideOverlayGridStoryboard\"), HandoffBehavior.Compose);\n\n            HideAllVisibleGrids();\n        }\n\n        private List<int> SelectedFramesIndex()\n        {\n            return FrameListView.SelectedItems.OfType<FrameViewModel>().Select(x => _viewModel.Frames.IndexOf(x)).OrderBy(y => y).ToList();\n        }\n\n        private bool UpdatePositioning(bool onLoad = true)\n        {\n            //TODO: When the DPI changes, these values are still from the latest dpi.\n            var top = onLoad ? UserSettings.All.EditorTop : Top;\n            var left = onLoad ? UserSettings.All.EditorLeft : Left;\n            var width = onLoad ? UserSettings.All.EditorWidth : Width;\n            var height = onLoad ? UserSettings.All.EditorHeight : Height;\n            var state = onLoad ? UserSettings.All.EditorWindowState : WindowState;\n\n            //If the position was never set, let it center on screen.\n            if (double.IsNaN(top) && double.IsNaN(left))\n                return false;\n\n            //The catch here is to get the closest monitor from current Top/Left point.\n            var monitors = MonitorHelper.AllMonitorsScaled(this.Scale());\n            var closest = monitors.FirstOrDefault(x => x.Bounds.Contains(new Point((int)left, (int)top))) ?? monitors.FirstOrDefault(x => x.IsPrimary);\n\n            if (closest == null)\n                return false;\n\n            //Too much to the Left.\n            if (closest.WorkingArea.Left > left + width - 100)\n                left = closest.WorkingArea.Left;\n\n            //Too much to the top.\n            if (closest.WorkingArea.Top > top + height - 100)\n                top = closest.WorkingArea.Top;\n\n            //Too much to the right.\n            if (closest.WorkingArea.Right < left + 100)\n                left = closest.WorkingArea.Right - width;\n\n            //Too much to the bottom.\n            if (closest.WorkingArea.Bottom < top + 100)\n                top = closest.WorkingArea.Bottom - height;\n\n            if (top > int.MaxValue || top < int.MinValue || left > int.MaxValue || left < int.MinValue || width > int.MaxValue || width < 0 || height > int.MaxValue || height < 0)\n            {\n                var desc = $\"On load: {onLoad}\\nScale: {this.Scale()}\\n\\n\" +\n                           $\"Screen: {closest.AdapterName}\\nBounds: {closest.Bounds}\\n\\nTopLeft: {top}x{left}\\nWidthHeight: {width}x{height}\\n\\n\" +\n                           $\"TopLeft Settings: {UserSettings.All.EditorTop}x{UserSettings.All.EditorLeft}\\nWidthHeight Settings: {UserSettings.All.EditorWidth}x{UserSettings.All.EditorHeight}\";\n                LogWriter.Log(\"Wrong Editor window sizing\", desc);\n                return false;\n            }\n\n            //To eliminate the flicker of moving the window to the correct screen, hide and then show it again.\n            if (onLoad)\n                Opacity = 0;\n\n            //First move the window to the final monitor, so that the UI scale can be adjusted.\n            this.MoveToScreen(closest);\n\n            Top = top;\n            Left = left;\n            Width = width;\n            Height = height;\n            WindowState = state;\n\n            if (onLoad)\n                Opacity = 1;\n\n            return true;\n        }\n\n        #endregion\n\n        #region Other\n\n        public void NotificationUpdated()\n        {\n            RibbonTabControl.UpdateNotifications();\n        }\n\n        public EncoderListViewItem EncodingAdded(int id)\n        {\n            return RibbonTabControl.AddEncoding(id, IsActive);\n        }\n\n        public void EncodingUpdated(int? id = null, bool onlyStatus = false)\n        {\n            RibbonTabControl.UpdateEncoding(id, onlyStatus);\n        }\n\n        public EncoderListViewItem EncodingRemoved(int id)\n        {\n            return RibbonTabControl.RemoveEncoding(id);\n        }\n\n\n        /// <summary>\n        /// If there's an update available, it will adjust the UI to warn the user about it.\n        /// It does not control the notification list, that's separated.\n        /// </summary>\n        private void DisplayUpdatePromoter()\n        {\n            if (Global.UpdateAvailable == null)\n            {\n                UpdateStackPanel.Visibility = Visibility.Collapsed;\n                return;\n            }\n\n            UpdateVersionRun.Text = $\"{Global.UpdateAvailable.Version}\";\n            UpdateSizeRun.Text = Global.UpdateAvailable.InstallerSize > 0 ? Humanizer.BytesToString(Global.UpdateAvailable.InstallerSize) : \"\";\n            UpdateStackPanel.Visibility = Visibility.Visible;\n        }\n\n        private async void Discard(bool notify = true)\n        {\n            Pause();\n\n            if (notify && !Dialog.Ask(LocalizationHelper.Get(\"S.Editor.DiscardProject.Title\"), LocalizationHelper.Get(\"S.Editor.DiscardProject.Instruction\"), LocalizationHelper.Get(\"S.Editor.DiscardProject.Message\"), false))\n                return;\n\n            #region Prepare UI\n\n            ClosePanel();\n\n            FrameListView.SelectedIndex = -1;\n            FrameListView.SelectionChanged -= FrameListView_SelectionChanged;\n\n            _viewModel.Frames.Clear();\n            ClipboardListBox.Items.Clear();\n            Util.Clipboard.Items.Clear();\n            ZoomBoxControl.Clear();\n\n            #endregion\n\n            if (Project == null || !Project.Any)\n                return;\n\n            await Task.Run(() => Discard(Project));\n\n            WelcomeGrid.BeginStoryboard(this.FindStoryboard(\"ShowWelcomeBorderStoryboard\"), HandoffBehavior.Compose);\n\n            FilledList = false;\n            IsLoading = false;\n\n            WelcomeTextBlock.Text = LocalizationHelper.Get(Humanizer.WelcomeInfo());\n            SymbolTextBlock.Text = Humanizer.Welcome();\n\n            UpdateStatistics();\n\n            FrameListView.SelectionChanged += FrameListView_SelectionChanged;\n\n            CommandManager.InvalidateRequerySuggested();\n        }\n\n        private void DeleteFrame(int index)\n        {\n            //Delete the File from the disk.\n            File.Delete(Project.Frames[index].Path);\n\n            //Remove from the list.\n            Project.Frames.RemoveAt(index);\n            _viewModel.Frames.RemoveAt(index);\n        }\n\n        private List<FrameInfo> SelectedFrames()\n        {\n            var selectedIndexList = Dispatcher.Invoke(SelectedFramesIndex);\n            return Project.Frames.Where(x => selectedIndexList.Contains(Project.Frames.IndexOf(x))).ToList();\n        }\n\n        private void UpdateStatistics()\n        {\n            TotalDuration = TimeSpan.FromMilliseconds(Project.Frames.Sum(x => x.Delay));\n            FrameSize = Project.Frames.Count > 0 ? Project.Frames[0].Path.ScaledSize() : new Size(0, 0);\n            FrameScale = Project.Frames.Count > 0 ? Convert.ToInt32(Project.Frames[0].Path.DpiOf() / 96d * 100d) : 0;\n            AverageDelay = Project.Frames.Count > 0 ? Project.Frames.Average(x => x.Delay) : 0;\n            FrameDpi = Project.Frames.Count > 0 ? Math.Round(Project.Frames[0].Path.DpiOf(), 0) : 0d;\n        }\n\n        private void UpdateOtherStatistics()\n        {\n            if (FrameListView.SelectedIndex > -1 && FrameListView.SelectedIndex < Project.Frames.Count)\n                CurrentTime = TimeSpan.FromMilliseconds(Project.Frames.Take(FrameListView.SelectedIndex + 1).Sum(x => x.Delay));\n            else\n                CurrentTime = TimeSpan.Zero;\n        }\n\n        private void ShowHint(string hint, bool isPermanent = false, params object[] values)\n        {\n            if (HintTextBlock.Visibility == Visibility.Visible)\n                BeginStoryboard(this.FindStoryboard(\"HideHintStoryboard\"), HandoffBehavior.Compose);\n\n            HintTextBlock.Text = values.Length == 0 ? LocalizationHelper.Get(hint) : LocalizationHelper.GetWithFormat(hint, values);\n\n            BeginStoryboard(this.FindStoryboard(isPermanent ? \"ShowPermanentHintStoryboard\" : \"ShowHintStoryboard\"), HandoffBehavior.Compose);\n        }\n\n        private void HideHint()\n        {\n            if (HintTextBlock.Visibility == Visibility.Visible)\n                BeginStoryboard(this.FindStoryboard(\"HideHintStoryboard\"), HandoffBehavior.Compose);\n        }\n\n        private void SetFocusOnCurrentFrame()\n        {\n            FrameListView.Focus();\n\n            if (FrameListView.SelectedItem is not FrameViewModel current)\n                return;\n\n            if (FrameListView.ItemContainerGenerator.ContainerFromItem(current) is ListViewItem container)\n            {\n                Keyboard.Focus(container);\n                container.Focus();\n            }\n        }\n\n        private string GetProgressText(int precision, bool showTotal, string format, string dateFormat, int startNumber, long cumulative, long total, int current)\n        {\n            try\n            {\n                switch (precision)\n                {\n                    case 0: //Minutes\n                        return showTotal ? TimeSpan.FromMilliseconds(cumulative).ToString(@\"m\\:ss\") + \"/\" + TimeSpan.FromMilliseconds(total).ToString(@\"m\\:ss\") : TimeSpan.FromMilliseconds(cumulative).ToString(@\"m\\:ss\");\n                    case 1: //Seconds\n                        return showTotal ? (int)TimeSpan.FromMilliseconds(cumulative).TotalSeconds + \"/\" + TimeSpan.FromMilliseconds(total).TotalSeconds + \" s\" : (int)TimeSpan.FromMilliseconds(cumulative).TotalSeconds + \" s\";\n                    case 2: //Milliseconds\n                        return showTotal ? cumulative + \"/\" + total + \" ms\" : cumulative + \" ms\";\n                    case 3: //Percentage\n                        var count = (double)Project.Frames.Count;\n                        return (current / count * 100).ToString(\"##0.#\", CultureInfo.CurrentUICulture) + (showTotal ? \"/100%\" : \" %\");\n                    case 4: //Frame number\n                        return showTotal ? (startNumber + current - 1) + \"/\" + (startNumber + Project.Frames.Count - 1) : current.ToString();\n                    case 5: //Custom\n                        return format\n                            .Replace(\"$ms\", cumulative.ToString())\n                            .Replace(\"$s\", ((int)TimeSpan.FromMilliseconds(cumulative).TotalSeconds).ToString())\n                            .Replace(\"$m\", TimeSpan.FromMilliseconds(cumulative).ToString())\n                            .Replace(\"$p\", (current / (double)Project.Frames.Count * 100).ToString(\"##0.#\", CultureInfo.CurrentUICulture))\n                            .Replace(\"$f\", (startNumber + current - 1).ToString())\n                            .Replace(\"@ms\", total.ToString())\n                            .Replace(\"@s\", ((int)TimeSpan.FromMilliseconds(total).TotalSeconds).ToString())\n                            .Replace(\"@m\", TimeSpan.FromMilliseconds(total).ToString(@\"m\\:ss\"))\n                            .Replace(\"@p\", \"100\")\n                            .Replace(\"@f\", (startNumber + Project.Frames.Count - 1).ToString());\n                    case 6: //Actual date/time\n                        return showTotal ? $\"{Project.CreationDate.AddMilliseconds(cumulative).ToString(dateFormat)} -> {Project.CreationDate.AddMilliseconds(total).ToString(dateFormat)}\"\n                            : Project.CreationDate.AddMilliseconds(cumulative).ToString(dateFormat);\n                    default:\n                        return \"???\";\n                }\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"Invalid progress format.\");\n                return \"???\";\n            }\n        }\n\n        private void ChangeProgressTextToCurrent()\n        {\n            var total = Project.Frames.Sum(y => y.Delay);\n            var cumulative = 0L;\n\n            for (var j = 0; j < FrameListView.SelectedIndex; j++)\n                cumulative += Project.Frames[j].Delay;\n\n            ProgressHorizontalTextBlock.Text = GetProgressText(UserSettings.All.ProgressPrecision, UserSettings.All.ProgressShowTotal, UserSettings.All.ProgressFormat, UserSettings.All.ProgressDateFormat,\n                UserSettings.All.ProgressStartNumber, cumulative, total, FrameListView.SelectedIndex + 1);\n        }\n\n        #endregion\n\n        #endregion\n\n\n        #region Async\n\n        private void LoadRecentAsync()\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Recent.Searching\"), 100, true);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            #region Enumerate recent projects\n\n            var list = new List<ProjectInfo>();\n\n            try\n            {\n                Dispatcher.Invoke(() => RecentDataGrid.ItemsSource = null);\n\n                var path = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Recording\");\n\n                if (!Directory.Exists(path))\n                {\n                    Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => RecentDataGrid.ItemsSource = null));\n                    return;\n                }\n\n                var folderList = Directory.GetDirectories(path).Select(x => new DirectoryInfo(x)).ToList();\n\n                foreach (var folder in folderList)\n                {\n                    var file = Path.Combine(folder.FullName, \"Project.json\");\n\n                    if (!File.Exists(file))\n                        continue;\n\n                    var json = File.ReadAllText(file);\n\n                    using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))\n                    {\n                        var ser = new DataContractJsonSerializer(typeof(ProjectInfo));\n\n                        //Ignore empty projects.\n                        if (ser.ReadObject(ms) is not ProjectInfo project || project.Frames.Count == 0 || !project.Frames.Any(x => File.Exists(x.Path)))\n                            continue;\n\n                        list.Add(project);\n                    }\n                }\n\n                //Waits the animation to complete before filling the grid.\n                Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>\n                {\n                    RecentDataGrid.ItemsSource = list;\n\n                    if (RecentDataGrid.Items.Count > 0)\n                    {\n                        RecentDataGrid.Sort(ListSortDirection.Descending, \"CreationDate\");\n                        RecentDataGrid.FocusOnFirstCell();\n                    }\n                }));\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Loading list of recent\");\n\n                Dispatcher.Invoke(() => ErrorDialog.Ok(\"ScreenToGif\", \"Error while enumerating recent projects\", ex.Message, ex));\n            }\n\n            #endregion\n        }\n\n        private bool SaveAsync(ExportPreset preset)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.PreparingSaving\"), 1, true);\n\n            #region Filter out frames\n\n            var indexes = new List<int>();\n\n            if (preset.ExportPartially)\n            {\n                switch (preset.PartialExport)\n                {\n                    case PartialExportModes.FrameExpression:\n                    {\n                        var blocks = preset.PartialExportFrameExpression.Split([','], StringSplitOptions.RemoveEmptyEntries);\n                        \n                        foreach (var block in blocks)\n                        {\n                            //Frame range.\n                            if (block.Contains('-'))\n                            {\n                                var subs = block.Split(['-'], StringSplitOptions.RemoveEmptyEntries);\n\n                                if (!int.TryParse(subs[0], out var start) || !int.TryParse(subs[1], out var end))\n                                    continue;\n\n                                if (start == end)\n                                {\n                                    //Single frame.\n                                    indexes.Add(start);\n                                }\n                                else if (start < end)\n                                {\n                                    //Normal range.\n                                    for (var i = start; i <= end; i++)\n                                        indexes.Add(i);\n                                }\n                                else\n                                {\n                                    //Reversed range.\n                                    for (var i = start; i >= end; i--)\n                                        indexes.Add(i);\n                                }\n                            }\n                            else\n                            {\n                                if (int.TryParse(block, out var number))\n                                    indexes.Add(number);\n                            }\n                        }\n\n                        break;\n                    }\n\n                    case PartialExportModes.FrameRange:\n                    {\n                        //UI already validates range.\n                        indexes = Enumerable.Range(preset.PartialExportFrameStart, preset.PartialExportFrameEnd - preset.PartialExportFrameStart).ToList();\n                        break;\n                    }\n\n                    case PartialExportModes.TimeRange:\n                    {\n                        var span = TimeSpan.Zero;\n\n                        //Playback mode.\n                        if (preset.PartialExportTimeStart < preset.PartialExportTimeEnd)\n                        {\n                            //Normal playback.\n                            for (var i = 0; i < Project.Frames.Count; i++)\n                            {\n                                if (span >= preset.PartialExportTimeStart && span <= preset.PartialExportTimeEnd)\n                                    indexes.Add(i);\n\n                                if (span > preset.PartialExportTimeEnd)\n                                    break;\n\n                                span = span.Add(TimeSpan.FromMilliseconds(Project.Frames[i].Delay));\n                            }\n                        }\n                        else\n                        {\n                            //Reversed playback.\n                            span = TimeSpan.FromMilliseconds(Project.Frames.Sum(s => s.Delay));\n\n                            for (var i = Project.Frames.Count - 1; i >= 0; i--)\n                            {\n                                if (span >= preset.PartialExportTimeEnd && span <= preset.PartialExportTimeStart)\n                                    indexes.Add(i);\n\n                                if (span > preset.PartialExportTimeStart)\n                                    break;\n\n                                span = span.Subtract(TimeSpan.FromMilliseconds(Project.Frames[i].Delay));\n                            }\n                        }\n\n                        break;\n                    }\n\n                    case PartialExportModes.Selection:\n                    {\n                        indexes = Dispatcher.Invoke(SelectedFramesIndex);\n                        break;\n                    }\n                }\n            }\n\n            #endregion\n\n            #region Last minute validation\n\n            //Validates each file name when saving multiple images (if more than one image, that will not be zipped).\n            if (preset is ImagePreset { ZipFiles: false })\n            {\n                if (preset.OverwriteMode != OverwriteModes.Allow)\n                {\n                    var output = Path.Combine(preset.OutputFolder, preset.ResolvedFilename);\n                    var padSize = (Project.Frames.Count - 1).ToString().Length;\n\n                    //With or without exporting it partially.\n                    var any = preset.ExportPartially ? indexes.Any(a => File.Exists($\"{output} {(a + \"\").PadLeft(padSize, '0')}\" + preset.Extension)) :\n                        Project.Frames.Any(a => File.Exists($\"{output} {(a.Index + \"\").PadLeft(padSize, '0')}\" + preset.Extension));\n\n                    if (any)\n                    {\n                        if (preset.OverwriteMode == OverwriteModes.Prompt)\n                        {\n                            if (Dispatcher.Invoke(() => !Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Dialogs.Overwrite.Title\"), LocalizationHelper.Get(\"S.SaveAs.Dialogs.OverwriteMultiple.Instruction\"),\n                                LocalizationHelper.Get(\"S.SaveAs.Dialogs.OverwriteMultiple.Message\"))))\n                            {\n                                Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.SaveAs.Warning.Overwrite\")));\n                                return false;\n                            }\n                        }\n                        else\n                        {\n                            Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.SaveAs.Warning.Overwrite\")));\n                            return false;\n                        }\n                    }\n                }\n\n                if (indexes.Count > 1 && !Dispatcher.Invoke(() => Dialog.Ask(LocalizationHelper.Get(\"S.SaveAs.Dialogs.Multiple.Title\"),\n                    LocalizationHelper.Get(\"S.SaveAs.Dialogs.Multiple.Instruction\"), LocalizationHelper.GetWithFormat(\"S.SaveAs.Dialogs.Multiple.Message\", indexes.Count))))\n                {\n                    Dispatcher.Invoke(() => StatusList.Warning(LocalizationHelper.Get(\"S.SaveAs.Warning.Canceled\")));\n                    return false;\n                }\n            }\n\n            #endregion\n\n            //Copy the frames, so it can be manipulated without problem.\n            var copied = Project.CopyToExport(indexes, preset.Type == ExportFormats.Stg, preset.Type == ExportFormats.Gif && preset.Encoder == EncoderTypes.ScreenToGif);\n\n            EncodingManager.StartEncoding(copied, preset);\n\n            if (preset.ExportAsProjectToo)\n            {\n                var copiedAux = Project.CopyToExport(indexes, true);\n\n                //Get default project encoder settings.\n                var projectPreset = (UserSettings.All.ExportPresets.OfType<StgPreset>().FirstOrDefault(f => f.IsSelectedForEncoder) ?? UserSettings.All.ExportPresets.OfType<StgPreset>().FirstOrDefault() ?? StgPreset.Default).ShallowCopy();\n                projectPreset.OutputFolder = preset.OutputFolder;\n                projectPreset.OutputFilename = preset.OutputFilename;\n                projectPreset.ResolvedFilename = preset.ResolvedFilename;\n                projectPreset.ExportPartially = false;\n                projectPreset.PickLocation = true;\n                projectPreset.UploadFile = false;\n                projectPreset.SaveToClipboard = false;\n                projectPreset.ExecuteCustomCommands = false;\n\n                EncodingManager.StartEncoding(copiedAux, projectPreset);\n            }\n\n            return true;\n        }\n\n        private void Discard(ProjectInfo project)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.DiscardingFrames\"), project.Frames.Count);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            try\n            {\n                var count = 0;\n                foreach (var frame in project.Frames)\n                {\n                    File.Delete(frame.Path);\n\n                    UpdateProgress(count++);\n                }\n\n                var folderList = Directory.EnumerateDirectories(project.FullPath).ToList();\n\n                ShowProgress(LocalizationHelper.Get(\"S.Editor.DiscardingFolders\"), folderList.Count);\n\n                count = 0;\n                foreach (var folder in folderList)\n                {\n                    if (!folder.Contains(\"Encode \"))\n                        Directory.Delete(folder, true);\n\n                    UpdateProgress(count++);\n                }\n\n                //Deletes the JSON file.\n                if (File.Exists(project.ProjectPath))\n                    File.Delete(project.ProjectPath);\n            }\n            catch (IOException io)\n            {\n                LogWriter.Log(io, \"Error while trying to Discard the Project\");\n            }\n            catch (Exception ex)\n            {\n                Dispatcher.Invoke(() => Dialog.Ok(\"Discard Error\", \"Error while trying to discard the project\", ex.Message));\n                LogWriter.Log(ex, \"Error while trying to Discard the Project\");\n            }\n\n            ActionStack.Clear();\n            project.Clear();\n\n            HideProgress();\n        }\n\n        private void Resize(int width, int height, double dpi, BitmapScalingMode scalingQuality)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ResizingFrames\"), Project.Frames.Count);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            var count = 0;\n            foreach (var frame in Project.Frames)\n            {\n                var png = new PngBitmapEncoder();\n                png.Frames.Add(ImageMethods.ResizeImage((BitmapImage)frame.Path.SourceFrom(), width, height, 0, dpi, scalingQuality));\n\n                using (Stream stm = File.OpenWrite(frame.Path))\n                    png.Save(stm);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        private void Crop(Int32Rect rect)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.CroppingFrames\"), Project.Frames.Count);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            var count = 0;\n            foreach (var frame in Project.Frames)\n            {\n                var png = new PngBitmapEncoder();\n                png.Frames.Add(BitmapFrame.Create(frame.Path.CropFrom(rect)));\n\n                using (Stream stm = File.OpenWrite(frame.Path))\n                    png.Save(stm);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        private void ProgressAsync(ProgressViewModel model)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), Project.Frames.Count);\n\n            var total = Project.Frames.Sum(y => y.Delay);\n            var thickness = model.Thickness * ZoomBoxControl.ScaleDiff;\n            var fontSize = model.FontSize * ZoomBoxControl.ScaleDiff;\n\n            var count = 1;\n            var cumulative = 0L;\n\n            foreach (var frame in Project.Frames)\n            {\n                if (_abortLoading)\n                    return;\n\n                var image = frame.Path.SourceFrom();\n\n                var drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    drawingContext.DrawImage(image, new Rect(0, 0, image.Width, image.Height));\n\n                    //TODO: Test with high dpi.\n                    if (model.Type == ProgressTypes.Bar)\n                    {\n                        #region Bar\n\n                        if (model.Orientation == Orientation.Horizontal)\n                        {\n                            //Width changes (Current/Total * Available size), Height is thickness.\n                            var width = count / (double)Project.Frames.Count * image.Width; //* image.Width instead?\n                            var left = model.HorizontalAlignment == HorizontalAlignment.Left ? 0 :\n                                model.HorizontalAlignment == HorizontalAlignment.Right ? image.Width - width :\n                                (image.Width - width) / 2d;\n                            var top = model.VerticalAlignment == VerticalAlignment.Top ? 0 :\n                                model.VerticalAlignment == VerticalAlignment.Bottom ? image.Height - thickness :\n                                (image.Height - thickness) / 2d;\n\n                            drawingContext.DrawRectangle(new SolidColorBrush(model.Color), null, new Rect(Math.Round(left, 0), Math.Round(top, 0), Math.Round(width, 0), thickness));\n                        }\n                        else\n                        {\n                            //Height changes (Current/Total * Available size), Width is thickness.\n                            var height = count / (double)Project.Frames.Count * image.Height;\n                            var left = model.HorizontalAlignment == HorizontalAlignment.Left ? 0 :\n                                model.HorizontalAlignment == HorizontalAlignment.Right ? image.Width - thickness :\n                                (image.Width - thickness) / 2d;\n                            var top = model.VerticalAlignment == VerticalAlignment.Top ? 0 :\n                                model.VerticalAlignment == VerticalAlignment.Bottom ? image.Height - height :\n                                (image.Height - height) / 2d;\n\n                            drawingContext.DrawRectangle(new SolidColorBrush(model.Color), null, new Rect(Math.Round(left, 0), Math.Round(top, 0), thickness, Math.Round(height, 0)));\n                        }\n\n                        #endregion\n                    }\n                    else\n                    {\n                        #region Text\n\n                        if (count > 0)\n                            cumulative += Project.Frames[count - 1].Delay;\n\n                        //Calculate size.\n                        var text = GetProgressText(model.Precision, model.ShowTotal, model.Format, model.DateFormat, model.StartNumber, cumulative, total, count); //FrameListView.SelectedIndex\n                        var formatted = new FormattedText(text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight,\n                            new Typeface(model.FontFamily, model.FontStyle, model.FontWeight, default), fontSize, new SolidColorBrush(model.FontColor),\n                            null, TextFormattingMode.Ideal);\n\n                        var width = formatted.Width + 4; //2px padding for both sides.\n                        var height = formatted.Height;\n                        var left = model.HorizontalAlignment == HorizontalAlignment.Left ? 0 :\n                            model.HorizontalAlignment == HorizontalAlignment.Right ? image.Width - width :\n                            (image.Width - width) / 2d;\n                        var top = model.VerticalAlignment == VerticalAlignment.Top ? 0 :\n                            model.VerticalAlignment == VerticalAlignment.Bottom ? image.Height - height :\n                            (image.Height - height) / 2d;\n\n                        //Draw background rectangle and the text.\n                        drawingContext.DrawRectangle(new SolidColorBrush(model.Color), null, new Rect(Math.Round(left, 0), Math.Round(top, 0), Math.Round(width, 0), Math.Round(height, 0)));\n                        drawingContext.DrawText(formatted, new Point(Math.Round(left + 2, 0), Math.Round(top, 0)));\n\n                        #endregion\n                    }\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(image.PixelWidth, image.PixelHeight, image.DpiX, image.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                UpdateProgress((count++) - 1);\n            }\n        }\n\n        private List<int> OverlayAsync(RenderTargetBitmap render, bool forAll = false)\n        {\n            var frameList = forAll ? Project.Frames : SelectedFrames();\n            var selectedList = Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n\n                return forAll ? Project.Frames.Select(x => Project.Frames.IndexOf(x)).ToList() : SelectedFramesIndex();\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), frameList.Count);\n\n            var count = 0;\n            foreach (var frame in frameList)\n            {\n                var image = frame.Path.SourceFrom();\n\n                var drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    drawingContext.DrawImage(image, new Rect(0, 0, image.Width, image.Height));\n                    drawingContext.DrawImage(render, new Rect(0, 0, render.Width, render.Height));\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(image.PixelWidth, image.PixelHeight, image.DpiX, image.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                UpdateProgress(count++);\n            }\n\n            return selectedList;\n        }\n\n        private int TitleFrame(RenderTargetBitmap render, int selected, double dpi)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.CreatingTitleFrame\"), 1, true);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            #region Save Image\n\n            var name = Path.GetFileNameWithoutExtension(Project.Frames[selected].Path);\n            var folder = Path.GetDirectoryName(Project.Frames[selected].Path);\n            var fileName = Path.Combine(folder, $\"{name} TF {DateTime.Now:hh-mm-ss}.png\");\n\n            var encoder = new PngBitmapEncoder();\n            encoder.Frames.Add(BitmapFrame.Create(render));\n\n            //Saves the image into a file using the encoder.\n            using (Stream stream = File.Create(fileName))\n                encoder.Save(stream);\n\n            GC.Collect();\n\n            #endregion\n\n            //Adds to the List\n            Project.Frames.Insert(selected, new FrameInfo(fileName, UserSettings.All.TitleFrameDelay));\n\n            return selected;\n        }\n\n        private void KeyStrokesAsync(KeyStrokesViewModel model)\n        {\n            Dispatcher?.Invoke(() =>\n            {\n                IsLoading = true;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), Project.Frames.Count);\n\n            var auxList = Project.Frames.CopyList();\n\n            #region Make the keystrokes start earlier\n\n            if (model.KeyStrokesEarlier)\n            {\n                //Checks if there is a key stroke that needs to be shown earlier, into the previous frames.\n                for (var outer = 0; outer < auxList.Count; outer++)\n                {\n                    //For each frame, check if any other key pressed later wants to be shown on this frame.\n\n                    var amount = 0;\n\n                    //If it's the last item of the list.\n                    //if (outer == auxList.Count - 1 && amount <= model.KeyStrokesEarlierBy)\n                    //    auxList[outer].KeyList.InsertRange(auxList[outer].KeyList.Count, auxList[0].KeyList);\n\n                    //Check next items.\n                    for (var inner = outer + 1; inner < auxList.Count - 1; inner++)\n                    {\n                        //For each frame, check if a next frame needs to show their key strokes.\n                        amount += auxList[inner].Delay;\n\n                        //If next item bleeds into this frame, insert on the list.\n                        if (inner < auxList.Count - 1 && auxList[inner + 1].Delay <= model.KeyStrokesEarlierBy)\n                            auxList[outer].KeyList.InsertRange(auxList[outer].KeyList.Count, auxList[inner].KeyList);\n\n                        //Stops veryfying the previous frames if the delay sum is greater than the maximum.\n                        if (amount >= model.KeyStrokesEarlierBy)\n                            break;\n                    }\n                }\n            }\n\n            #endregion\n\n            #region Expand the keystrokes\n\n            if (model.KeyStrokesExtended)\n            {\n                //Checks from the end to the start, if there is a key stroke that needs to 'bleed'/'delayed' into the next frames.\n                //I need to check from the end to the start so the keystrokes stays in position.\n                for (var outer = auxList.Count - 1; outer > 0; outer--)\n                {\n                    var amount = 0;\n\n                    if (outer == 1 && amount <= model.KeyStrokesDelay)\n                    {\n                        var listA = auxList[0].KeyList.TakeWhile((_, i) => !auxList[0].KeyList.Skip(i).SequenceEqual(auxList[1].KeyList.Take(auxList[0].KeyList.Count - i))).Concat(auxList[1].KeyList);\n\n                        auxList[1].KeyList = new List<IKeyGesture>(listA);\n                    }\n\n                    //Check previous items.\n                    for (var inner = outer - 1; inner >= 0; inner--)\n                    {\n                        //For each frame, check if a previous frame needs to show their key strokes.\n                        amount += auxList[inner].Delay;\n\n                        //If previous item bleeds into this frame, insert on the list.\n                        if (inner > 0 && auxList[inner - 1].Delay <= model.KeyStrokesDelay)\n                        {\n                            var listA = auxList[inner].KeyList.TakeWhile((_, i) => !auxList[inner].KeyList.Skip(i).SequenceEqual(auxList[outer].KeyList.Take(auxList[inner].KeyList.Count - i))).Concat(auxList[outer].KeyList);\n\n                            auxList[outer].KeyList = new List<IKeyGesture>(listA);\n                        }\n\n                        //Stops veryfying the previous frames if the delay sum is greater than the maximum.\n                        if (amount >= model.KeyStrokesDelay)\n                            break;\n                    }\n                }\n            }\n\n            #endregion\n\n            //Pen used for drawing the outline of the text shape.\n            var pen = new Pen(new SolidColorBrush(model.KeyStrokesOutlineColor), model.KeyStrokesOutlineThickness)\n            {\n                DashCap = PenLineCap.Round,\n                EndLineCap = PenLineCap.Round,\n                LineJoin = PenLineJoin.Round,\n                StartLineCap = PenLineCap.Round\n            };\n\n            var count = 0;\n            foreach (var frame in auxList)\n            {\n                if (_abortLoading)\n                    return;\n\n                if (!frame.KeyList.Any())\n                {\n                    UpdateProgress(count++);\n                    continue;\n                }\n\n                #region Removes any duplicated modifier key\n\n                var keyList = new List<IKeyGesture>();\n                for (var i = 0; i < frame.KeyList.Count; i++)\n                {\n                    if (model.KeyStrokesIgnoreInjected && frame.KeyList[i].IsInjected)\n                        continue;\n\n                    //Ignore Control, Shift, Alt and Windows keys if not acting as modifiers.\n                    if (model.KeyStrokesIgnoreNonModifiers && frame.KeyList[i].Key is >= Key.LeftShift and <= Key.RightAlt or Key.LWin or Key.RWin)\n                        continue;\n\n                    //If there's another key ahead on the same frame.\n                    if (frame.KeyList.Count > i + 1)\n                    {\n                        //If this frame being added will be repeated next, ignore.\n                        if (frame.KeyList[i + 1].Key == frame.KeyList[i].Key && frame.KeyList[i + 1].Modifiers == frame.KeyList[i].Modifiers)\n                            continue;\n\n                        //TODO: If there's a key between the current key and the one that is repeated, they are going to be shown.\n\n                        //If this frame being added will be repeated within the next key presses as a modifier, ignore.\n                        if (frame.KeyList[i].Key is Key.LeftCtrl or Key.RightCtrl && (frame.KeyList[i + 1].Modifiers & ModifierKeys.Control) != 0)\n                            continue;\n\n                        if (frame.KeyList[i].Key is Key.LeftShift or Key.RightShift && (frame.KeyList[i + 1].Modifiers & ModifierKeys.Shift) != 0)\n                            continue;\n\n                        if (frame.KeyList[i].Key is Key.LeftAlt or Key.RightAlt && (frame.KeyList[i + 1].Modifiers & ModifierKeys.Alt) != 0)\n                            continue;\n\n                        if (frame.KeyList[i].Key is Key.LWin or Key.RWin && (frame.KeyList[i + 1].Modifiers & ModifierKeys.Windows) != 0)\n                            continue;\n                    }\n\n                    //Removes the previous modifier key, if a combination is next to it: \"LeftCtrl Control + A\" will be \"Control + A\". (This checks if the next modifier is not present as a current key).\n                    if (i + 1 > frame.KeyList.Count - 1 || !(frame.KeyList[i].Key != Key.Left && frame.KeyList[i].Key != Key.Right && frame.KeyList[i + 1].Modifiers.ToString().Contains(frame.KeyList[i].Key.ToString().Remove(\"Left\", \"Right\").Replace(\"Ctrl\", \"Control\").TrimStart('L').TrimStart('R'))))\n                        keyList.Add(frame.KeyList[i]);\n                }\n\n                if (keyList.Count == 0)\n                {\n                    UpdateProgress(count++);\n                    continue;\n                }\n\n                #endregion\n\n                #region Prepare the text\n\n                var translateKeys = UserSettings.All.KeyStrokesTranslate;\n\n                var text = keyList.Select(x => \"\" + KeyHelper.GetSelectKeyText(x.Key, x.Modifiers, x.IsUppercase, false, translateKeys)).Aggregate((p, n) => p + model.KeyStrokesSeparator + n);\n\n                if (string.IsNullOrEmpty(text))\n                {\n                    UpdateProgress(count++);\n                    continue;\n                }\n\n                #endregion\n\n                var image = frame.Path.SourceFrom();\n\n                #region Check if margins and paddings are set properly\n\n                if (image.Width - (model.KeyStrokesPadding + model.KeyStrokesMargin) * 2 <= 0 || image.Height - (model.KeyStrokesPadding + model.KeyStrokesMargin) * 2 <= 0)\n                {\n                    UpdateProgress(count++);\n                    continue;\n                }\n\n                #endregion\n\n                var drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    //The FormattedText class helps in transforming the text to a shape.\n                    var formatted = new FormattedText(text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight,\n                        new Typeface(model.KeyStrokesFontFamily, model.KeyStrokesFontStyle, model.KeyStrokesFontWeight, default), model.KeyStrokesFontSize,\n                        new SolidColorBrush(model.KeyStrokesFontColor), null, TextFormattingMode.Ideal)\n                    {\n                        MaxTextWidth = image.Width - (model.KeyStrokesPadding + model.KeyStrokesMargin) * 2,\n                        MaxTextHeight = image.Height - (model.KeyStrokesPadding + model.KeyStrokesMargin) * 2,\n                    };\n\n                    //TODO: Test with high dpi.\n\n                    var geometry = formatted.BuildGeometry(new Point(0.5, 0.5));\n                    var bounds = geometry.GetRenderBounds(pen);\n\n                    var widthText = bounds.Width + model.KeyStrokesPadding * 2;\n                    var heightText = bounds.Height + model.KeyStrokesPadding * 2 + 1; //Why 1?\n\n                    var leftText =\n                        model.KeyStrokesHorizontalAlignment == HorizontalAlignment.Left ? model.KeyStrokesMargin - bounds.X :\n                        model.KeyStrokesHorizontalAlignment == HorizontalAlignment.Right ? image.Width - widthText - bounds.X - model.KeyStrokesMargin :\n                        (image.Width - widthText - bounds.X) / 2d;\n\n                    var topText =\n                        model.KeyStrokesVerticalAlignment == VerticalAlignment.Top ? model.KeyStrokesMargin - bounds.Y :\n                        model.KeyStrokesVerticalAlignment == VerticalAlignment.Bottom ? image.Height - heightText - bounds.Y - model.KeyStrokesMargin :\n                        (image.Height - heightText) / 2d - bounds.Y;\n\n                    var widthRectangle = model.KeyStrokesHorizontalAlignment == HorizontalAlignment.Stretch ? image.Width - model.KeyStrokesMargin * 2 : widthText;\n                    var heightRectangle = model.KeyStrokesVerticalAlignment == VerticalAlignment.Stretch ? image.Height - model.KeyStrokesMargin * 2 : Math.Max(heightText, model.KeyStrokesMinHeight);\n\n                    //Center text when setting minimum height.\n                    var minHeightAdjustment = model.KeyStrokesMinHeight > heightText && model.KeyStrokesVerticalAlignment != VerticalAlignment.Center && model.KeyStrokesVerticalAlignment != VerticalAlignment.Stretch ?\n                        ((model.KeyStrokesMinHeight - heightText) / 2d) * (model.KeyStrokesVerticalAlignment == VerticalAlignment.Bottom ? -1 : 1) : 0;\n\n                    var minHeightAdjustmentRectangle = model.KeyStrokesMinHeight > heightText && model.KeyStrokesVerticalAlignment == VerticalAlignment.Center ? ((model.KeyStrokesMinHeight - heightText) / 2d) : 0;\n\n                    var leftRectangle =\n                        model.KeyStrokesHorizontalAlignment == HorizontalAlignment.Stretch ? model.KeyStrokesMargin :\n                        leftText + bounds.X < model.KeyStrokesMargin ? model.KeyStrokesMargin : leftText + bounds.X;\n\n                    var topRectangle =\n                        model.KeyStrokesVerticalAlignment == VerticalAlignment.Stretch || model.KeyStrokesVerticalAlignment == VerticalAlignment.Top ? model.KeyStrokesMargin :\n                        model.KeyStrokesVerticalAlignment == VerticalAlignment.Bottom ? image.Height - heightRectangle - model.KeyStrokesMargin :\n                        topText + bounds.Y < model.KeyStrokesMargin ? model.KeyStrokesMargin : topText + bounds.Y - minHeightAdjustmentRectangle;\n\n                    geometry.Transform = new TranslateTransform(Math.Round(leftText + model.KeyStrokesPadding, 0), Math.Round(topText + model.KeyStrokesPadding + minHeightAdjustment, 0));\n\n                    //Draws everything in order, the image, the rectangle and the text.\n                    drawingContext.DrawImage(image, new Rect(0, 0, image.Width, image.Height));\n                    drawingContext.DrawRectangle(new SolidColorBrush(model.KeyStrokesBackgroundColor), null, new Rect(Math.Round(leftRectangle, 0), Math.Round(topRectangle, 0), Math.Round(widthRectangle, 0), Math.Round(heightRectangle, 0)));\n\n                    //This code will draw the outline outside the text.\n                    if (UserSettings.All.DrawOutlineOutside)\n                    {\n                        drawingContext.DrawGeometry(null, pen, geometry);\n                        drawingContext.DrawGeometry(new SolidColorBrush(model.KeyStrokesFontColor), null, geometry);\n                    }\n                    else\n                        drawingContext.DrawGeometry(new SolidColorBrush(model.KeyStrokesFontColor), pen, geometry);\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(image.PixelWidth, image.PixelHeight, image.DpiX, image.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                GC.WaitForPendingFinalizers();\n                GC.Collect(1);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        private void BorderAsync(BorderViewModel model)\n        {\n            Dispatcher?.Invoke(() =>\n            {\n                IsLoading = true;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), Project.Frames.Count);\n\n            //If the borders are negative or this was called by an automatic task, select all frames.\n            var frames = model.LeftThickness < 0 || model.TopThickness < 0 || model.RightThickness < 0 || model.BottomThickness < 0 || !model.IsManual ? Project.Frames : SelectedFrames();\n            var scale = Math.Round(ZoomBoxControl.ImageDpi / 96d, 2); //ZoomBoxControl.ImageScale;\n\n            //Since there could be a difference in the DPI of the UI vs the one from the image, I need to adjust the scale of the thickness.\n            var leftThick = model.LeftThickness * ZoomBoxControl.ScaleDiff;\n            var topThick = model.TopThickness * ZoomBoxControl.ScaleDiff;\n            var rightThick = model.RightThickness * ZoomBoxControl.ScaleDiff;\n            var bottomThick = model.BottomThickness * ZoomBoxControl.ScaleDiff;\n\n            var count = 0;\n            foreach (var frame in frames)\n            {\n                if (_abortLoading)\n                    return;\n\n                var image = frame.Path.SourceFrom();\n                var drawingVisual = new DrawingVisual();\n\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    #region Draws the white rectangle behind with full size\n\n                    var marginHorizontal = Math.Abs((int)Math.Min(leftThick, 0) + Math.Min(rightThick, 0)); //Left and right negative margins as a positive number.\n                    var marginVertical = Math.Abs((int)Math.Min(topThick, 0) + Math.Min(bottomThick, 0)); //Top and bottom negative margins as a positive number.\n\n                    drawingContext.DrawRectangle(Brushes.White, null, new Rect(0, 0, image.Width + marginHorizontal, image.Height + marginVertical));\n\n                    #endregion\n\n                    #region Draws the image with the top-left margin\n\n                    var marginLeft = (int)Math.Abs(Math.Min(leftThick, 0)); //Left negative margin as a positive number.\n                    var marginTop = (int)Math.Abs(Math.Min(topThick, 0)); //Right negative margin as a positive number.\n\n                    drawingContext.DrawImage(image, new Rect(marginLeft, marginTop, image.Width, image.Height));\n\n                    #endregion\n\n                    #region Draws the 4 lines\n\n                    //The lines are centrally aligned, so they must be drawn at thickness / 2.\n                    var brush = new SolidColorBrush(model.Color);\n\n                    var height = image.Height + marginVertical;\n                    var width = image.Width + marginLeft - (rightThick > 0 ? rightThick : 0); //image.Width + width / 2d - trueRight / 2d\n\n                    //Left border.\n                    var xLeft = Math.Abs(leftThick) / 2d;\n                    drawingContext.DrawLine(new Pen(brush, Math.Abs(leftThick)), new Point(xLeft, 0), new Point(xLeft, height));\n\n                    //Right border.\n                    var xRight = (leftThick < 0 ? leftThick * -1 : 0) + image.Width + (Math.Abs(rightThick) / 2d * (rightThick < 0 ? 1 : -1));\n                    drawingContext.DrawLine(new Pen(brush, Math.Abs(rightThick)), new Point(xRight, 0), new Point(xRight, height));\n\n                    //Top border.\n                    var xTop = Math.Abs(leftThick);\n                    var yTop = Math.Abs(topThick) / 2d;\n                    drawingContext.DrawLine(new Pen(brush, Math.Abs(topThick)), new Point(xTop, yTop), new Point(width, yTop));\n\n                    //Bottom border.\n                    var yBottom = (topThick < 0 ? topThick * -1 : 0) + image.Height + (Math.Abs(bottomThick) / 2d * (bottomThick < 0 ? 1 : -1));\n                    drawingContext.DrawLine(new Pen(brush, Math.Abs(bottomThick)), new Point(xTop, yBottom), new Point(width, yBottom));\n\n                    #endregion\n                }\n\n                var frameHeight = image.PixelHeight + (int)(Math.Round((topThick < 0 ? Math.Abs(topThick) : 0) + (bottomThick < 0 ? Math.Abs(bottomThick) : 0), 0) * scale);\n                var frameWidth = image.PixelWidth + (int)(Math.Round((leftThick < 0 ? Math.Abs(leftThick) : 0) + (rightThick < 0 ? Math.Abs(rightThick) : 0), 0) * scale);\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(frameWidth, frameHeight, image.DpiX, image.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        private void ShadowAsync(ShadowViewModel model)\n        {\n            Dispatcher?.Invoke(() =>\n            {\n                IsLoading = true;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), Project.Frames.Count);\n\n            var scale = Math.Round(ZoomBoxControl.ImageDpi / 96d, 2); //ZoomBoxControl.ImageScale;\n            var blur = model.BlurRadius * ZoomBoxControl.ScaleDiff;\n            var depth = model.Depth * ZoomBoxControl.ScaleDiff;\n\n            var count = 0;\n            foreach (var frame in Project.Frames)\n            {\n                if (_abortLoading)\n                    return;\n\n                var image = frame.Path.SourceFrom();\n                var drawingVisual = new DrawingVisual();\n\n                //Sizes:\n                var frameHeight = 0;\n                var frameWidth = 0;\n\n                drawingVisual.Effect = new DropShadowEffect\n                {\n                    Color = model.Color,\n                    BlurRadius = model.BlurRadius * ZoomBoxControl.ScaleDiff,\n                    Opacity = model.Opacity,\n                    Direction = model.Direction,\n                    ShadowDepth = model.Depth * ZoomBoxControl.ScaleDiff,\n                    RenderingBias = RenderingBias.Quality\n                };\n\n                //Draws image with shadow.\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    //https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Sin_Cos_Tan_Cot_unit_circle.svg/1154px-Sin_Cos_Tan_Cot_unit_circle.svg.png\n                    //The cosine of the direction gives the offset of the X axis based on the Width/2 of the point where the circle line crosses the line coming from the center of the circle.\n                    //The sine of the direction gives the offset of the Y axis based on the Height/2 of the point where the circle line crosses the line coming from the center of the circle.\n\n                    //• Cosine:\n                    //Negative: to the left.\n                    //Positive: to the right.\n                    //• Sine:\n                    //Positive: to the top.\n                    //Negative: to the bottom.\n\n                    //<- 180°, 3.14rad\n                    //L: Blur + Depth\n                    //T: Blur\n                    //R: Math.Max(Blur - Depth, 0) //If the depth is lower than the blur radius, a bit of shadow will appear at the side.\n                    //B: Blur\n\n                    //-> 0°, 0rad\n                    //L: Math.Max(Blur - Depth, 0) //If the depth is lower than the blur radius, a bit of shadow will appear at the side.\n                    //T: Blur\n                    //R: Blur + Depth\n                    //B: Blur\n\n                    //^> 45°, 0.78rad\n                    //L: Math.Max(Blur - Depth * ratio, 0) //If the depth is lower than the blur radius, a bit of shadow will appear at the side.\n                    //T: Blur + Depth * ratio\n                    //R: Blur + Depth * ratio\n                    //B: Math.Max(Blur - Depth * ratio, 0) //If the depth is lower than the blur radius, a bit of shadow will appear at the side.\n\n                    //Converts the direction in degrees to radians.\n                    var radians = Math.PI / 180.0 * model.Direction;\n                    var offsetX = depth * Math.Cos(radians);\n                    var offsetY = depth * Math.Sin(radians);\n\n                    var offsetLeft = offsetX < 0 ? offsetX * -1 : 0;\n                    var offsetTop = offsetY > 0 ? offsetY : 0;\n                    var offsetRight = offsetX > 0 ? offsetX : 0;\n                    var offsetBottom = offsetY < 0 ? offsetY * -1 : 0;\n\n                    //Measure drop shadow space.\n                    var marginLeft = offsetLeft > 0 ? offsetLeft + blur / 2d : Math.Max(blur / 2d - offsetLeft, 0); //- offsetX\n                    var marginTop = offsetTop > 0 ? offsetTop + blur / 2d : Math.Max(blur / 2d - offsetTop, 0); //- offsetY\n                    var marginRight = offsetRight > 0 ? offsetRight + blur / 2d : Math.Max(blur / 2d - offsetRight, 0); //+ offsetX\n                    var marginBottom = offsetBottom > 0 ? offsetBottom + blur / 2d : Math.Max(blur / 2d - offsetBottom, 0); //+ offsetY\n\n                    drawingContext.DrawImage(image, new Rect((int)marginLeft, (int)marginTop, image.Width, image.Height));\n\n                    frameHeight = (int)((marginTop + image.Height + marginBottom) * scale);\n                    frameWidth = (int)((marginLeft + image.Width + marginRight) * scale);\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var innerBmp = new RenderTargetBitmap(frameWidth, frameHeight, ZoomBoxControl.ImageDpi, ZoomBoxControl.ImageDpi, PixelFormats.Pbgra32);\n                innerBmp.Render(drawingVisual);\n\n                //Draws background and rendered image on top.\n                drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    //Draws the background of the image.\n                    drawingContext.DrawRectangle(new SolidColorBrush(model.BackgroundColor), null, new Rect(0, 0, innerBmp.Width, innerBmp.Height));\n\n                    //Image, already with the shadow.\n                    drawingContext.DrawImage(innerBmp, new Rect(0, 0, innerBmp.Width, innerBmp.Height));\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(frameWidth, frameHeight, image.DpiX, image.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        private void FlipRotate(FlipRotateType type)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingFlipRotate\"), Project.Frames.Count);\n\n            var frameList = type is FlipRotateType.RotateLeft90 or FlipRotateType.RotateRight90 ? Project.Frames : SelectedFrames();\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            var count = 0;\n            foreach (var frame in frameList)\n            {\n                var image = frame.Path.SourceFrom();\n\n                Transform transform = null;\n\n                switch (type)\n                {\n                    case FlipRotateType.FlipVertical:\n                        transform = new ScaleTransform(1, -1, 0.5, 0.5);\n                        break;\n                    case FlipRotateType.FlipHorizontal:\n                        transform = new ScaleTransform(-1, 1, 0.5, 0.5);\n                        break;\n                    case FlipRotateType.RotateLeft90:\n                        transform = new RotateTransform(-90, 0.5, 0.5);\n                        break;\n                    case FlipRotateType.RotateRight90:\n                        transform = new RotateTransform(90, 0.5, 0.5);\n                        break;\n                    default:\n                        transform = new ScaleTransform(1, 1, 0.5, 0.5);\n                        break;\n                }\n\n                var transBitmap = new TransformedBitmap(image, transform);\n\n                // Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(transBitmap));\n\n                // Saves the image into a file using the encoder\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        private void ReduceFrameCount(List<int> selection, int factor, int removeCount, ReduceDelayModes mode)\n        {\n            var removeList = new List<int>();\n\n            //Gets the list of frames to be removed.\n            for (var i = selection.Min() + factor - 1; i < selection.Min() + selection.Count - 1; i += factor + removeCount)\n                removeList.AddRange(Util.Other.ListOfIndexes(i + 1, removeCount));\n\n            //Only allow removing frames within the possible range.\n            removeList = removeList.Where(x => x < Project.Frames.Count).ToList();\n\n            var alterList = mode == ReduceDelayModes.Evenly ? Util.Other.ListOfIndexes(0, Project.Frames.Count).Where(w => !removeList.Contains(w)).ToList() :\n                mode == ReduceDelayModes.Previous ? (from item in removeList where item - 1 >= 0 select item - 1).ToList() : //.Union(removeList)\n                new List<int>(); //No other frame will be altered if the delay is not adjusted.\n\n            if (alterList.Any())\n                ActionStack.SaveState(ActionStack.EditAction.RemoveAndAlter, Project.Frames, removeList, alterList);\n            else\n                ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, removeList);\n\n            var delayRemoved = 0;\n            for (var i = removeList.Count - 1; i >= 0; i--)\n            {\n                var removeIndex = removeList[i];\n\n                if (mode != ReduceDelayModes.DontAdjust)\n                {\n                    if (mode == ReduceDelayModes.Previous || factor == 1)\n                    {\n                        //Simply stacks the delay of the removed frames to the previous frame;\n                        Project.Frames[removeIndex - 1].Delay += Project.Frames[removeIndex].Delay;\n                    }\n                    else if (mode == ReduceDelayModes.Evenly)\n                    {\n                        if (i == removeList.Count - 1 || removeList[i] + 1 == removeList[i + 1])\n                        {\n                            //Store the delay of the frames being removed.\n                            delayRemoved += Project.Frames[removeIndex].Delay;\n                        }\n                        else\n                        {\n                            if (delayRemoved > 0)\n                            {\n                                //Calculate the size of the remaining section (this is the factor, the number of frames not being removed in each section).\n                                var size = removeList[i + 1] - removeList[i] - 1;\n\n                                //Spread evenly the accumulated delay among the remaining frames.\n                                for (var r = removeList[i + 1] - 1; r > removeList[i]; r--)\n                                    Project.Frames[r].Delay += delayRemoved / size; //Some information may be lost due to rounding.\n                            }\n\n                            //Start again the accumulation for this block of frames being removed.\n                            delayRemoved = Project.Frames[removeIndex].Delay;\n                        }\n                    }\n                }\n\n                File.Delete(Project.Frames[removeIndex].Path);\n                Project.Frames.RemoveAt(removeIndex);\n            }\n        }\n\n        private int RemoveDuplicatesAsync(decimal similarity, DuplicatesRemovalModes removal, DuplicatesDelayModes delay)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n                Cursor = Cursors.AppStarting;\n            });\n\n            var removeList = new List<int>();\n            var alterList = new List<int>();\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.AnalyzingDuplicates\"), Project.Frames.Count - 1);\n\n            var similarFramePairs = Enumerable.Range(0, Project.Frames.Count - 1)\n                .Select(i => { UpdateProgress(i + 1); return i; })\n                .Select(i => (First: Project.Frames[i], Last: Project.Frames[i + 1]))\n                .AsParallel()\n                .Where(t => ImageMethods.CalculateDifference(t.First, t.Last) >= similarity);\n\n            foreach (var (firstFrame, lastFrame) in similarFramePairs)\n            {\n                switch (removal)\n                {\n                    case DuplicatesRemovalModes.First:\n                        removeList.Add(firstFrame.Index);\n                        alterList.Add(lastFrame.Index);\n                        break;\n                    case DuplicatesRemovalModes.Last:\n                        alterList.Add(firstFrame.Index);\n                        removeList.Add(lastFrame.Index);\n                        break;\n                    default:\n                        throw new ArgumentOutOfRangeException(nameof(removal));\n                }\n            }\n\n            if (removeList.Count == 0)\n            {\n                //TODO: Nothing being removed. I need to warn the user.\n                return Project.Frames.Count;\n            }\n\n            // ActionStack assumes the list is sorted.\n            removeList.Sort();\n            alterList.Sort();\n\n            var count = 0;\n            if (delay != DuplicatesDelayModes.DontAdjust)\n            {\n                ShowProgress(LocalizationHelper.Get(\"S.Editor.AdjustingDuplicatesDelay\"), removeList.Count);\n\n                //Gets the list of frames that will be altered (if the delay will be adjusted).\n                var mode = removal == DuplicatesRemovalModes.First ? 1 : -1;\n\n                ActionStack.SaveState(ActionStack.EditAction.RemoveAndAlter, Project.Frames, removeList, alterList);\n\n                if (removal == DuplicatesRemovalModes.Last)\n                {\n                    for (var i = alterList.Count - 1; i >= 0; i--)\n                    {\n                        var index = alterList[i];\n\n                        //Sum or average of the delays.\n                        if (delay == DuplicatesDelayModes.Sum)\n                            Project.Frames[index].Delay += Project.Frames[index - mode].Delay;\n                        else\n                            Project.Frames[index].Delay = (Project.Frames[index - mode].Delay + Project.Frames[index].Delay) / 2;\n\n                        UpdateProgress(count++);\n                    }\n                }\n                else\n                {\n                    foreach (var index in alterList)\n                    {\n                        //Sum or average of the delays.\n                        if (delay == DuplicatesDelayModes.Sum)\n                            Project.Frames[index].Delay += Project.Frames[index - mode].Delay;\n                        else\n                            Project.Frames[index].Delay = (Project.Frames[index - mode].Delay + Project.Frames[index].Delay) / 2;\n\n                        UpdateProgress(count++);\n                    }\n                }\n            }\n            else\n            {\n                ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, removeList);\n            }\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.DiscardingDuplicates\"), removeList.Count);\n\n            var removeFrames = removeList.Select(i => Project.Frames[i]).ToArray();\n\n            foreach (var frame in removeFrames)\n            {\n                File.Delete(frame.Path);\n                Project.Frames.Remove(frame);\n\n                UpdateProgress(count++);\n            }\n\n            //Gets the minimum index being altered.\n            return alterList.Concat(removeList).Min();\n        }\n\n        private int SmoothLoopAsync(decimal similarity, int threshold, SmoothLoopFromModes from)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n                Cursor = Cursors.AppStarting;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.FindingLoop\"), Project.Frames.Count - threshold);\n\n            var start = from == SmoothLoopFromModes.Start ? threshold : Project.Frames.Count - 1;\n            var end = from == SmoothLoopFromModes.Start ? Project.Frames.Count - 1 : threshold;\n            var step = from == SmoothLoopFromModes.Start ? 1 : -1;\n\n            var found = -1;\n            var count = 0;\n            var max = Math.Abs(start - end) + 1;\n\n            while (count < max)\n            {\n                UpdateProgress(count++);\n\n                if (ImageMethods.CalculateDifference(Project.Frames[0], Project.Frames[start]) >= similarity)\n                {\n                    found = start;\n                    break;\n                }\n\n                start += step;\n            }\n\n            if (found == -1 || found == threshold - 1 || found == Project.Frames.Count - 1)\n                return found;\n\n            var removeList = Project.Frames.GetRange(found + 1, Project.Frames.Count - 1 - found).Select(s => s.Index).ToList();\n\n            ActionStack.SaveState(ActionStack.EditAction.Remove, Project.Frames, removeList);\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.DiscardingLoop\"), removeList.Count);\n\n            var removeFrames = removeList.Select(i => Project.Frames[i]).ToArray();\n            count = 0;\n\n            foreach (var frame in removeFrames)\n            {\n                File.Delete(frame.Path);\n                Project.Frames.Remove(frame);\n\n                UpdateProgress(count++);\n            }\n\n            return Project.Frames.Count - 1;\n        }\n\n        private void DelayAsync(DelayViewModel model, bool forAll = false, bool ignoreUi = false)\n        {\n            var frameList = forAll ? Project.Frames : SelectedFrames();\n\n            Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n                Cursor = Cursors.AppStarting;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ChangingDelay\"), frameList.Count);\n\n            var count = 0;\n            foreach (var frameInfo in frameList)\n            {\n                if (_abortLoading)\n                    return;\n\n                switch (model.Type)\n                {\n                    case DelayUpdateModes.Override:\n                    {\n                        frameInfo.Delay = model.NewDelay;\n                        break;\n                    }\n                    case DelayUpdateModes.IncreaseDecrease:\n                    {\n                        frameInfo.Delay += model.IncreaseDecreaseDelay;\n\n                        if (frameInfo.Delay < 10)\n                            frameInfo.Delay = 10;\n                        break;\n                    }\n                    default:\n                    {\n                        frameInfo.Delay = (int)Math.Round(frameInfo.Delay * model.Percent / 100m, 0);\n\n                        if (frameInfo.Delay < 10)\n                            frameInfo.Delay = 10;\n                        break;\n                    }\n                }\n\n                #region Update UI\n\n                if (!ignoreUi)\n                {\n                    var index = Project.Frames.IndexOf(frameInfo);\n                    Dispatcher.Invoke(() => _viewModel.Frames[index].Delay = frameInfo.Delay);\n                }\n\n                #endregion\n\n                UpdateProgress(count++);\n            }\n\n            Project.Persist();\n        }\n\n        private int Fade(int selected, int frameCount, object optional)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingTransition\"), Project.Frames.Count - selected + frameCount);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            //Calculate opacity increment. When fading to a color, it will add a frame with a 100% opacity at the end.\n            var increment = 1F / (frameCount + (UserSettings.All.FadeToType == FadeModes.NextFrame ? 1 : 0));\n            var previousName = Path.GetFileNameWithoutExtension(Project.Frames[selected].Path);\n            var previousFolder = Path.GetDirectoryName(Project.Frames[selected].Path);\n\n            #region Images\n\n            var previousImage = Project.Frames[selected].Path.SourceFrom();\n            var nextImage = UserSettings.All.FadeToType == FadeModes.NextFrame ? Project.Frames[Project.Frames.Count - 1 == selected ? 0 : selected + 1].Path.SourceFrom() :\n                ImageMethods.CreateEmtpyBitmapSource(UserSettings.All.FadeToColor, previousImage.PixelWidth, previousImage.PixelHeight, previousImage.DpiX, PixelFormats.Indexed1);\n\n            var nextBrush = new ImageBrush\n            {\n                ImageSource = nextImage,\n                Stretch = Stretch.Uniform,\n                TileMode = TileMode.None,\n                Opacity = increment,\n                AlignmentX = AlignmentX.Center,\n                AlignmentY = AlignmentY.Center\n            };\n\n            #endregion\n\n            #region Creates and Save each Transition Frame\n\n            for (var index = 0; index < frameCount; index++)\n            {\n                var drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    drawingContext.DrawImage(previousImage, new Rect(0, 0, previousImage.Width, previousImage.Height));\n                    drawingContext.DrawRectangle(nextBrush, null, new Rect(0, 0, nextImage.Width, nextImage.Height));\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(previousImage.PixelWidth, previousImage.PixelHeight, previousImage.DpiX, previousImage.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Increase the opacity for the next frame.\n                nextBrush.Opacity += increment;\n\n                //TODO: Fix filenaming.\n                //TODO: This transition doesn't preserve any other frame info, such as keys pressed and mouse clicks.\n                var fileName = Path.Combine(previousFolder, $\"{previousName} T {index} {DateTime.Now:hh-mm-ss fff}.png\");\n                Project.Frames.Insert(selected + index + 1, new FrameInfo(fileName, UserSettings.All.FadeTransitionDelay));\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(fileName))\n                    encoder.Save(stream);\n\n                UpdateProgress(index);\n            }\n\n            #endregion\n\n            return selected;\n        }\n\n        private int Slide(int selected, int frameCount, object optional)\n        {\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingTransition\"), Project.Frames.Count - selected + frameCount);\n\n            Dispatcher.Invoke(() => IsLoading = true);\n\n            var previousName = Path.GetFileNameWithoutExtension(Project.Frames[selected].Path);\n            var previousFolder = Path.GetDirectoryName(Project.Frames[selected].Path);\n\n            #region Images\n\n            var previousImage = Project.Frames[selected].Path.SourceFrom();\n            var nextImage = Project.Frames[(Project.Frames.Count - 1) == selected ? 0 : selected + 1].Path.SourceFrom();\n\n            var nextBrush = new ImageBrush\n            {\n                ImageSource = nextImage,\n                Stretch = Stretch.Uniform,\n                TileMode = TileMode.None,\n                AlignmentX = AlignmentX.Center,\n                AlignmentY = AlignmentY.Center\n            };\n\n            #endregion\n\n            //Calculate Translate Transform increment.\n            var increment = previousImage.Width / (frameCount + 1);\n            var transf = increment;\n\n            //Calculate the Opacity increment.\n            var alphaIncrement = 1F / (frameCount + 1);\n            nextBrush.Opacity = alphaIncrement;\n\n            #region Creates and Save each Transition Frame\n\n            for (var index = 0; index < frameCount; index++)\n            {\n                var drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    drawingContext.DrawImage(previousImage, new Rect(0, 0, previousImage.Width, previousImage.Height));\n                    drawingContext.DrawRectangle(nextBrush, null, new Rect(previousImage.Width - transf, 0, nextImage.Width, nextImage.Height));\n                }\n\n                // Converts the Visual (DrawingVisual) into a BitmapSource\n                var bmp = new RenderTargetBitmap(previousImage.PixelWidth, previousImage.PixelHeight, previousImage.DpiX, previousImage.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Increase the translation and opacity for the next frame.\n                transf += increment;\n                nextBrush.Opacity += alphaIncrement;\n\n                //TODO: Fix filenaming.\n                //TODO: This transition doesn't preserve any other frame info, such as keys pressed and mouse clicks.\n                var fileName = Path.Combine(previousFolder, $\"{previousName} T {index} {DateTime.Now:hh-mm-ss fff}.png\");\n                Project.Frames.Insert(selected + index + 1, new FrameInfo(fileName, UserSettings.All.FadeTransitionDelay));\n\n                // Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                // Saves the image into a file using the encoder\n                using (Stream stream = File.Create(fileName))\n                    encoder.Save(stream);\n\n                UpdateProgress(index);\n            }\n\n            #endregion\n\n            return selected;\n        }\n\n        private List<int> ObfuscateAsync(Rect rect, double screenScale, bool forAll = false)\n        {\n            var frameList = forAll ? Project.Frames : SelectedFrames();\n            var selectedList = Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n\n                return forAll ? Project.Frames.Select(x => Project.Frames.IndexOf(x)).ToList() : SelectedFramesIndex();\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), frameList.Count);\n\n            var size = frameList[0].Path.ScaledSize();\n\n            rect = rect.Scale(screenScale).Limit(size.Width, size.Height);\n\n            var count = 0;\n            foreach (var frame in frameList)\n            {\n                var image = frame.Path.SourceFrom();\n                BitmapSource render;\n\n                switch (UserSettings.All.ObfuscationMode)\n                {\n                    case ObfuscationModes.Blur:\n                    {\n                        render = ImageMethods.Blur(image, (int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height,\n                            UserSettings.All.BlurLevel, UserSettings.All.ObfuscationSmoothnessOpacity, UserSettings.All.ObfuscationSmoothnessRadius, UserSettings.All.ObfuscationInvertedSelection);\n                        break;\n                    }\n                    case ObfuscationModes.Darken:\n                    {\n                        render = ImageMethods.Lightness(image, (int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height, true,\n                            UserSettings.All.DarkenLevel, UserSettings.All.ObfuscationSmoothnessOpacity, UserSettings.All.ObfuscationSmoothnessRadius, UserSettings.All.ObfuscationInvertedSelection);\n                        break;\n                    }\n                    case ObfuscationModes.Lighten:\n                    {\n                        render = ImageMethods.Lightness(image, (int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height, false,\n                            UserSettings.All.LightenLevel, UserSettings.All.ObfuscationSmoothnessOpacity, UserSettings.All.ObfuscationSmoothnessRadius, UserSettings.All.ObfuscationInvertedSelection);\n                        break;\n                    }\n                    default:\n                    {\n                        render = ImageMethods.Pixelate(image, (int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height,\n                            UserSettings.All.PixelSize, UserSettings.All.ObfuscationSmoothnessOpacity, UserSettings.All.ObfuscationSmoothnessRadius, UserSettings.All.UseMedian, UserSettings.All.ObfuscationInvertedSelection);\n                        break;\n                    }\n                }\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(render));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                UpdateProgress(count++);\n            }\n\n            return selectedList;\n        }\n\n        private void MouseEventsAsync(MouseEventsViewModel model)\n        {\n            Dispatcher.Invoke(() =>\n            {\n                IsLoading = true;\n            });\n\n            ShowProgress(LocalizationHelper.Get(\"S.Editor.ApplyingOverlay\"), Project.Frames.Count);\n\n            var auxList = Project.Frames.CopyList();\n\n            // Initialize brushes.\n            var brushesByMouseButton = new Dictionary<MouseButtons, SolidColorBrush>();\n\n            if (model.HighlightForegroundColor.A != 0)\n            {\n                var highlightSolidBrush = new SolidColorBrush(model.HighlightForegroundColor);\n                highlightSolidBrush.Freeze();\n                brushesByMouseButton.Add(MouseButtons.None, highlightSolidBrush);\n            }\n\n            if (model.LeftButtonForegroundColor.A != 0)\n            {\n                var leftClickSolidColorBrush = new SolidColorBrush(model.LeftButtonForegroundColor);\n                leftClickSolidColorBrush.Freeze();\n                brushesByMouseButton.Add(MouseButtons.Left, leftClickSolidColorBrush);\n            }\n\n            if (model.RightButtonForegroundColor.A != 0)\n            {\n                var rightClickSolidColorBrush = new SolidColorBrush(model.RightButtonForegroundColor);\n                rightClickSolidColorBrush.Freeze();\n                brushesByMouseButton.Add(MouseButtons.Right, rightClickSolidColorBrush);\n            }\n\n            if (model.MiddleButtonForegroundColor.A != 0)\n            {\n                var middleClickSolidColorBrush = new SolidColorBrush(model.MiddleButtonForegroundColor);\n                middleClickSolidColorBrush.Freeze();\n                brushesByMouseButton.Add(MouseButtons.Middle, middleClickSolidColorBrush);\n            }\n\n            if (model.FirstExtraButtonForegroundColor.A != 0)\n            {\n                var brush = new SolidColorBrush(model.FirstExtraButtonForegroundColor);\n                brush.Freeze();\n                brushesByMouseButton.Add(MouseButtons.FirstExtra, brush);\n            }\n\n            if (model.SecondExtraButtonForegroundColor.A != 0)\n            {\n                var brush = new SolidColorBrush(model.SecondExtraButtonForegroundColor);\n                brush.Freeze();\n                brushesByMouseButton.Add(MouseButtons.SecondExtra, brush);\n            }\n\n            var count = 0;\n            foreach (var frame in auxList)\n            {\n                if (_abortLoading)\n                    return;\n\n                if (frame.ButtonClicked == MouseButtons.None || frame.CursorX == int.MinValue)\n                {\n                    UpdateProgress(count++);\n                }\n\n                if (!brushesByMouseButton.TryGetValue(frame.ButtonClicked, out var brush))\n                {\n                    continue;\n                }\n\n                var image = frame.Path.SourceFrom();\n                var scale = Math.Round(image.DpiX / 96d, 2);\n                var drawingVisual = new DrawingVisual();\n                using (var drawingContext = drawingVisual.RenderOpen())\n                {\n                    drawingContext.DrawImage(image, new Rect(0, 0, image.Width, image.Height));\n                    drawingContext.DrawEllipse(brush, null, new Point(frame.CursorX / scale, frame.CursorY / scale), model.Width, model.Height);\n                }\n\n                //Converts the Visual (DrawingVisual) into a BitmapSource.\n                var bmp = new RenderTargetBitmap(image.PixelWidth, image.PixelHeight, image.DpiX, image.DpiY, PixelFormats.Pbgra32);\n                bmp.Render(drawingVisual);\n\n                //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                //Saves the image into a file using the encoder.\n                using (Stream stream = File.Create(frame.Path))\n                    encoder.Save(stream);\n\n                GC.WaitForPendingFinalizers();\n                GC.Collect(1);\n\n                UpdateProgress(count++);\n            }\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/NewRecorder.xaml",
    "content": "<n:BaseScreenRecorder x:Class=\"ScreenToGif.Windows.NewRecorder\"\n                      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                      xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n                      xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n                      xmlns:cx=\"clr-namespace:ScreenToGif.Util.Converters\"\n                      xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n                      xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n                      x:Name=\"RecorderWindow\" Title=\"ScreenToGif\" SnapsToDevicePixels=\"True\" UseLayoutRounding=\"True\" AllowsTransparency=\"False\"\n                      WindowStyle=\"None\" Topmost=\"True\" Icon=\"../Resources/Logo.ico\" SizeToContent=\"WidthAndHeight\" ResizeMode=\"CanMinimize\" MinWidth=\"220\"\n                      FocusManager.FocusedElement=\"{Binding RelativeSource={x:Static RelativeSource.Self}, Mode=OneTime}\" WindowStartupLocation=\"Manual\"\n                      Loaded=\"Window_Loaded\" Activated=\"Window_Activated\" KeyDown=\"Window_KeyDown\" StateChanged=\"Window_StateChanged\" Closing=\"Window_Closing\">\n\n    <n:BaseRecorder.TaskbarItemInfo>\n        <TaskbarItemInfo>\n            <TaskbarItemInfo.ThumbButtonInfos>\n                <ThumbButtonInfoCollection>\n                    <ThumbButtonInfo x:Name=\"RecordThumbInfo\" Command=\"{Binding RecordCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Record}\" CommandTarget=\"{Binding ElementName=RecordButton}\"\n                                     Visibility=\"{Binding ElementName=RecordButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Record}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"SnapThumbInfo\" Command=\"{Binding SnapCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Snap}\" CommandTarget=\"{Binding ElementName=SnapButton}\"\n                                     Visibility=\"{Binding ElementName=SnapButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Camera.Add}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"PauseThumbInfo\" Command=\"{Binding PauseCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Pause}\" CommandTarget=\"{Binding ElementName=PauseButton}\"\n                                     Visibility=\"{Binding ElementName=PauseButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Pause}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"StopLargeThumbInfo\" Command=\"{Binding StopLargeCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Stop}\" CommandTarget=\"{Binding ElementName=StopLargeButton}\"\n                                     Visibility=\"{Binding ElementName=StopLargeButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Stop}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"StopThumbInfo\" Command=\"{Binding StopCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Stop}\" CommandTarget=\"{Binding ElementName=StopSmallButton}\"\n                                     Visibility=\"{Binding ElementName=StopSmallButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Stop}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo Visibility=\"Hidden\"/>\n\n                    <ThumbButtonInfo x:Name=\"DiscardThumbInfo\" Command=\"{Binding DiscardCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Discard}\" CommandTarget=\"{Binding ElementName=DiscardButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Remove}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n                </ThumbButtonInfoCollection>\n            </TaskbarItemInfo.ThumbButtonInfos>\n        </TaskbarItemInfo>\n    </n:BaseRecorder.TaskbarItemInfo>\n\n    <Border Background=\"{DynamicResource Panel.Background}\" BorderThickness=\"1\" BorderBrush=\"{DynamicResource Element.Border.Light}\">\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"30\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Grid.Resources>\n                <cx:CommandToKeyGesture x:Key=\"CommandToKeyGesture\"/>\n                <cx:KeyGestureToString x:Key=\"KeyGestureToString\"/>\n                <c:BoolOrToVisibility x:Key=\"BoolOrToVisibility\"/>\n                <c:BoolAndToVisibility x:Key=\"BoolAndToVisibility\"/>\n                <c:BoolOr x:Key=\"BoolOr\"/>\n                <c:IntToBool x:Key=\"IntToBool\"/>\n            </Grid.Resources>\n\n            <Grid Grid.Row=\"0\" x:Name=\"HeaderGrid\" Background=\"{DynamicResource Panel.Background}\" MouseLeftButtonDown=\"HeaderGrid_MouseLeftButtonDown\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"30\"/>\n                    <ColumnDefinition Width=\"30\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Column=\"0\" Text=\"{Binding ElementName=RecorderWindow, Path=Title, FallbackValue=ScreenToGif}\" Margin=\"5,0,3,0\"\n                           VerticalAlignment=\"Center\" FontSize=\"16\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n                <!--<TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"5\">\n                    <Run Text=\"{Binding ElementName=RecorderWindow, Path=Left, StringFormat={}{0}}\"/>\n                    <Run Text=\"x\"/>\n                    <Run Text=\"{Binding ElementName=RecorderWindow, Path=Top, StringFormat={}{0}}\"/>\n                </TextBlock>-->\n                \n                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.Recorder.ClickOrPress}\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" Margin=\"5\" \n                           Foreground=\"{DynamicResource Element.Foreground.Gray112}\">\n                    <TextBlock.Visibility>\n                        <MultiBinding Converter=\"{StaticResource BoolAndToVisibility}\">\n                            <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.Interaction}\"/>\n                            <Binding ElementName=\"RecorderWindow\" Path=\"FrameCount\" Converter=\"{StaticResource IntToBool}\" ConverterParameter=\"0\"/>\n                        </MultiBinding>\n                    </TextBlock.Visibility>\n                </TextBlock>\n\n                <n:DisplayTimer Grid.Column=\"2\" x:Name=\"DisplayTimer\" Margin=\"5\" CornerRadius=\"3\" Padding=\"5,0\" CapturedCount=\"{Binding ElementName=RecorderWindow, Path=FrameCount}\"\n                                IsImpreciseCapture=\"{Binding ElementName=RecorderWindow, Path=HasImpreciseCapture}\"/>\n\n                <Grid Grid.Column=\"3\" Background=\"{StaticResource Vector.Cursor}\" Margin=\"3,5\" ToolTip=\"{DynamicResource S.Recorder.CursorFollowing}\" Width=\"16\"\n                      Visibility=\"{Binding ElementName=RecorderWindow, Path=IsFollowing, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <n:ExtendedButton Grid.Column=\"4\" x:Name=\"MinimizeButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Minimize}\" \n                                  Width=\"30\" Padding=\"6\" ContentHeight=\"14\" ContentWidth=\"14\" UseLayoutRounding=\"True\" Click=\"MinimizeButton_Click\"/>\n                <n:ExtendedButton Grid.Column=\"5\" x:Name=\"CloseButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{DynamicResource Vector.Close}\" \n                                  Width=\"30\" Padding=\"6\" ContentHeight=\"14\" ContentWidth=\"14\" UseLayoutRounding=\"True\" Command=\"{Binding CloseCommand}\"/>\n            </Grid>\n\n            \n            <Grid Grid.Row=\"1\" x:Name=\"RecordControlsGrid\" MinWidth=\"250\" Height=\"64\" \n                  Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=RecorderCompactMode, Converter={StaticResource InvertedBoolToVisibility}, FallbackValue={x:Static Visibility.Visible}}\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <!--Options-->\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" ContentHeight=\"24\" ContentWidth=\"24\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.StartUp.Options}\" Icon=\"{StaticResource Vector.Options}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                  Command=\"{Binding OptionsCommand}\" KeyGesture=\"{Binding OptionsCommand, Converter={StaticResource CommandToKeyGesture}}\"/>\n\n                <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" Width=\"1\" Margin=\"3,2\"/>\n\n                <!--Framerate-->\n                <Grid Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" MinWidth=\"100\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition/>\n                        <RowDefinition/>\n                    </Grid.RowDefinitions>\n\n                    <Grid Grid.Row=\"0\" x:Name=\"FrequencyGrid\">\n                        <Grid.Visibility>\n                            <MultiBinding Converter=\"{StaticResource BoolOrToVisibility}\">\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.PerHour}\"/>\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.PerMinute}\"/>\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.PerSecond}\"/>\n                            </MultiBinding>\n                        </Grid.Visibility>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Viewbox Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"FrequencyViewbox\" Stretch=\"Uniform\" ClipToBounds=\"True\" Focusable=\"False\" Opacity=\"{DynamicResource Element.Opacity}\"\n                                 ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\" ToolTip=\"{DynamicResource S.Recorder.Fps.Range}\">\n\n                            <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" FlowDirection=\"LeftToRight\" Margin=\"-4\">\n                                <n:CircularProgressBar StrokeThickness=\"2\" Percentage=\"100\" SegmentColor=\"Gray\" Radius=\"24\" IsTabStop=\"False\"/>\n                                <n:CircularProgressBar StrokeThickness=\"22\" Percentage=\"100\" SegmentColor=\"#FFF0F1F1\" Radius=\"10\" IsTabStop=\"False\"/>\n\n                                <n:CircularProgressBar StrokeThickness=\"2\" Value=\"{Binding ElementName=FrequencyIntegerUpDown, Path=Value, Mode=OneWay}\" \n                                                       IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"24\" IsTabStop=\"False\"/>\n                                <n:CircularProgressBar StrokeThickness=\"22\" Value=\"{Binding ElementName=FrequencyIntegerUpDown, Path=Value, Mode=OneWay}\" \n                                                       IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"10\" IsTabStop=\"False\"/>\n                            </Grid>\n                        </Viewbox>\n\n                        <n:IntegerUpDown Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"FrequencyIntegerUpDown\" Margin=\"1,3\" MinWidth=\"45\"\n                                         StepValue=\"1\" Minimum=\"1\" Maximum=\"60\" Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=LatestFps, Mode=TwoWay}\" \n                                         ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\" ToolTip=\"{DynamicResource S.Recorder.Fps}\"/>\n\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"FrequencyTextBlock\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" FontSize=\"12\" Margin=\"1,0,0,0\" VerticalAlignment=\"Center\" \n                                   Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground}\" ToolTip=\"{Binding ElementName=FrequencyIntegerUpDown, Path=ToolTip}\"/>\n                    </Grid>\n\n                    <TextBlock Grid.Row=\"0\" Text=\"…\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\">\n                        <TextBlock.Visibility>\n                            <MultiBinding Converter=\"{StaticResource BoolOrToVisibility}\">\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.Manual}\"/>\n                                <Binding Source=\"{x:Static t:UserSettings.All}\" Path=\"CaptureFrequency\" Converter=\"{StaticResource EnumToBool}\" ConverterParameter=\"{x:Static e:CaptureFrequencies.Interaction}\"/>\n                            </MultiBinding>\n                        </TextBlock.Visibility>\n                    </TextBlock>\n\n                    <n:SplitButton Grid.Row=\"1\" Grid.Column=\"0\" ContentHeight=\"20\" Padding=\"3\"\n                                   Style=\"{StaticResource Style.SplitButton.NoBorder}\" IsEnabled=\"{Binding ElementName=FrequencyIntegerUpDown, Path=IsEnabled, Mode=OneWay}\"\n                                   SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=CaptureFrequency, Converter={StaticResource EnumToInt}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                   ToolTip=\"{DynamicResource S.Recorder.SwitchFrequency}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                   Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"Switch\">\n                        \n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency}\" IsHitTestVisible=\"False\" Icon=\"{StaticResource Vector.Record}\" ContentHeight=\"16\" ContentWidth=\"16\" Tag=\"I\"/>\n\n                        <Separator Height=\"1\" Margin=\"3,2\"/>\n\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Manual}\" Tag=\"S.Options.Recorder.Frequency.Manual\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Camera}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                         IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Manual}, UpdateSourceTrigger=PropertyChanged}\" \n                                         IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                         Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.Manual}\"/>\n\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Interaction}\" Tag=\"S.Options.Recorder.Frequency.Interaction\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Cursor}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                         IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Interaction}, UpdateSourceTrigger=PropertyChanged}\" \n                                         IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                         Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.Interaction}\"/>\n                        \n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Second}\" Tag=\"S.Options.Recorder.Frequency.Second\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                         IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerSecond}, UpdateSourceTrigger=PropertyChanged}\" \n                                         IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                         Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerSecond}\"/>\n\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Minute}\" Tag=\"S.Options.Recorder.Frequency.Minute\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay.Minute}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                         IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerMinute}, UpdateSourceTrigger=PropertyChanged}\" \n                                         IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                         Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerMinute}\"/>\n\n                        <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Hour}\" Tag=\"S.Options.Recorder.Frequency.Hour\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay.Hour}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                         IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerHour}, UpdateSourceTrigger=PropertyChanged}\" \n                                         IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                         Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerHour}\"/>\n                    </n:SplitButton>\n                </Grid>\n\n                <Separator Grid.Row=\"0\" Grid.Column=\"3\" Grid.RowSpan=\"2\" Width=\"1\" Margin=\"3,2\"/>\n\n                <!--Region Selection-->\n                <Grid Grid.Row=\"0\" Grid.Column=\"4\" Grid.RowSpan=\"2\" x:Name=\"RegionGrid\" MinWidth=\"110\">\n                    <Grid.IsEnabled>\n                        <MultiBinding Converter=\"{StaticResource BoolOr}\" ConverterParameter=\"0\">\n                            <Binding ElementName=\"StopLargeButton\" Path=\"IsEnabled\"/>\n                            <Binding ElementName=\"StopSmallButton\" Path=\"IsEnabled\"/>\n                            <Binding ElementName=\"PauseButton\" Path=\"IsEnabled\"/>\n                        </MultiBinding>\n                    </Grid.IsEnabled>\n                    \n                    <Grid.RowDefinitions>\n                        <RowDefinition/>\n                        <RowDefinition/>\n                    </Grid.RowDefinitions>\n\n                    <!--Area/Window/Screen-->\n                    <Grid x:Name=\"SizeGrid\" Visibility=\"Collapsed\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <n:IntegerBox Grid.Column=\"0\" x:Name=\"WidthIntegerBox\" Value=\"{Binding RegionWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" HorizontalContentAlignment=\"Center\"\n                                      Offset=\"2\" Minimum=\"25\" Maximum=\"4096\" Height=\"Auto\" Padding=\"4,0\" Margin=\"1,3\"\n                                      ToolTip=\"{DynamicResource S.Recorder.Width}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                      PropagateWheelEvent=\"True\" ValueChanged=\"SizeIntegerBox_ValueChanged\" MouseWheel=\"SizeIntegerBox_MouseWheel\"/>\n\n                        <TextBlock Grid.Column=\"1\" Text=\"×\" FontSize=\"16\" FontFamily=\"Segoe Script\" Margin=\"1\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                        <n:IntegerBox Grid.Column=\"2\" x:Name=\"HeightIntegerBox\" Value=\"{Binding RegionHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" HorizontalContentAlignment=\"Center\"\n                                      Offset=\"2\" Minimum=\"25\" Maximum=\"4096\" Height=\"Auto\" Padding=\"4,0\" Margin=\"1,3\"\n                                      ToolTip=\"{DynamicResource S.Recorder.Height}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                      PropagateWheelEvent=\"True\" ValueChanged=\"SizeIntegerBox_ValueChanged\" MouseWheel=\"SizeIntegerBox_MouseWheel\"/>\n\n                        <TextBlock Grid.Column=\"3\" Text=\"px\" FontSize=\"12\" Margin=\"1,0,0,0\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                    </Grid>\n\n                    <TextBlock Grid.Row=\"0\" x:Name=\"SizeTextBlock\" Text=\"...\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                               Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n\n                    <n:SplitButton Grid.Row=\"1\" ContentHeight=\"20\" Padding=\"3\" Style=\"{StaticResource Style.SplitButton.NoBorder}\"\n                                   SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=RecorderModeIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                                   Foreground=\"{Binding Source={x:Static t:UserSettings.All}, Path=RecorderForeground, Mode=TwoWay, Converter={StaticResource ColorToBrush}}\">\n                        <n:ExtendedMenuItem Icon=\"{StaticResource Vector.Crop}\" Header=\"{DynamicResource S.Recorder.Area.Select}\" Tag=\"S.Recorder.Area\" ContentHeight=\"16\" ContentWidth=\"16\" Click=\"RegionButton_Click\"/>\n                        <n:ExtendedMenuItem Icon=\"{StaticResource Vector.Application}\" Header=\"{DynamicResource S.Recorder.Window.Select}\" Tag=\"S.Recorder.Window\" ContentHeight=\"16\" ContentWidth=\"16\" Click=\"WindowButton_Click\"/>\n                        <n:ExtendedMenuItem Icon=\"{StaticResource Vector.Monitor}\" Header=\"{DynamicResource S.Recorder.Screen.Select}\" Tag=\"S.Recorder.Screen\" ContentHeight=\"16\" ContentWidth=\"16\" Click=\"FullScreenButton_Click\"/>\n                    </n:SplitButton>\n                </Grid>\n\n                <Separator Grid.Row=\"0\" Grid.Column=\"5\" Grid.RowSpan=\"2\" Width=\"1\" Margin=\"3,2\"/>\n\n                <!--Snap-->\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"6\" Grid.RowSpan=\"2\" x:Name=\"SnapButton\" ContentHeight=\"24\" ContentWidth=\"24\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.Recorder.Snap}\" Icon=\"{StaticResource Vector.Camera.Add}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                  Command=\"{Binding SnapCommand}\" KeyGesture=\"{Binding RecordKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Record-->\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"6\" Grid.RowSpan=\"2\" x:Name=\"RecordButton\" ContentHeight=\"24\" ContentWidth=\"24\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.Recorder.Record}\" Icon=\"{StaticResource Vector.Record}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                  Command=\"{Binding RecordCommand}\" KeyGesture=\"{Binding RecordKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Pause-->\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"6\" Grid.RowSpan=\"2\" x:Name=\"PauseButton\" ContentHeight=\"24\" ContentWidth=\"24\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.Recorder.Pause}\" Icon=\"{StaticResource Vector.Pause}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                  Command=\"{Binding PauseCommand}\" KeyGesture=\"{Binding RecordKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Discard-->\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"7\" x:Name=\"DiscardButton\" ContentHeight=\"16\" ContentWidth=\"16\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.Recorder.Discard}\" Icon=\"{StaticResource Vector.Remove}\" Style=\"{StaticResource Style.Button.Horizontal}\" \n                                  Command=\"{Binding DiscardCommand}\" KeyGesture=\"{Binding DiscardKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n\n                <!--Stop (when recording)-->\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"7\" Grid.RowSpan=\"2\" x:Name=\"StopLargeButton\" ContentHeight=\"24\" ContentWidth=\"24\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.Recorder.Stop}\" Icon=\"{StaticResource Vector.Stop}\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                  Command=\"{Binding StopLargeCommand}\" KeyGesture=\"{Binding StopKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n\n                <!--Stop (when paused/manual capture)-->\n                <n:ExtendedButton Grid.Row=\"1\" Grid.Column=\"7\" x:Name=\"StopSmallButton\" ContentHeight=\"16\" ContentWidth=\"16\" MinWidth=\"65\"\n                                  Text=\"{DynamicResource S.Recorder.Stop}\" Icon=\"{StaticResource Vector.Stop}\" Style=\"{StaticResource Style.Button.Horizontal}\" \n                                  Command=\"{Binding StopCommand}\" KeyGesture=\"{Binding StopKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n            </Grid>\n\n            <Grid Grid.Row=\"1\" Height=\"32\" MinWidth=\"100\" IsEnabled=\"{Binding ElementName=RecordControlsGrid, Path=IsEnabled, Mode=OneWay}\"\n                  Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=RecorderCompactMode, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"26\"/>\n                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"32\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"50\"/>\n                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"26\"/>\n                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"26\"/>\n                    <ColumnDefinition Width=\"Auto\" MaxWidth=\"26\"/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OptionsButton\" Icon=\"{DynamicResource Vector.Options}\" Margin=\"0\" Padding=\"3\" \n                                  Style=\"{DynamicResource Style.Button.NoText}\" ContentHeight=\"22\" ContentWidth=\"22\" Command=\"{Binding OptionsCommand}\"\n                                  ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\" ToolTip=\"{DynamicResource S.StartUp.Options}\"/>\n\n                <Viewbox Grid.Column=\"2\" Stretch=\"UniformToFill\" ClipToBounds=\"True\" Focusable=\"False\" Opacity=\"{DynamicResource Element.Opacity}\"\n                         ToolTip=\"{Binding ElementName=FrequencyViewbox, Path=ToolTip, Mode=OneWay}\" ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\"\n                         Visibility=\"{Binding ElementName=FrequencyGrid, Path=Visibility, Mode=OneWay, FallbackValue={x:Static Visibility.Visible}}\">\n\n                    <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" FlowDirection=\"LeftToRight\" Margin=\"-4\">\n                        <n:CircularProgressBar StrokeThickness=\"2\" Percentage=\"100\" SegmentColor=\"Gray\" Radius=\"24\" IsTabStop=\"False\"/>\n                        <n:CircularProgressBar StrokeThickness=\"22\" Percentage=\"100\" SegmentColor=\"#FFF0F1F1\" Radius=\"10\" IsTabStop=\"False\"/>\n\n                        <n:CircularProgressBar StrokeThickness=\"2\" Value=\"{Binding ElementName=FrequencyIntegerUpDown, Path=Value, Mode=OneWay}\" \n                                               IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"24\" IsTabStop=\"False\"/>\n                        <n:CircularProgressBar StrokeThickness=\"22\" Value=\"{Binding ElementName=FrequencyIntegerUpDown, Path=Value, Mode=OneWay}\" \n                                               IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"10\" IsTabStop=\"False\"/>\n                    </Grid>\n                </Viewbox>\n\n                <n:IntegerUpDown Grid.Column=\"3\" Margin=\"1,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"60\" MinWidth=\"45\"\n                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=LatestFps, Mode=TwoWay}\" IsEnabled=\"{Binding ElementName=FrequencyIntegerUpDown, Path=IsEnabled, Mode=OneWay}\"\n                                 ToolTip=\"{Binding ElementName=FrequencyIntegerUpDown, Path=ToolTip, Mode=OneWay}\" ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\"\n                                 Visibility=\"{Binding ElementName=FrequencyGrid, Path=Visibility, Mode=OneWay}\"/>\n\n                <n:ExtendedButton Grid.Column=\"4\" Style=\"{StaticResource Style.Button.Horizontal.NoImage}\" Margin=\"1,0,0,0\" VerticalContentAlignment=\"Center\" Padding=\"0\"\n                                  UseLayoutRounding=\"True\" Text=\"{Binding ElementName=FrequencyTextBlock, Path=Text, Mode=OneWay}\" FontSize=\"12\" TextWrapping=\"NoWrap\"\n                                  ToolTip=\"{DynamicResource S.Recorder.SwitchFrequency}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                  Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"Switch\">\n                    <n:ExtendedButton.ContextMenu>\n                        <ContextMenu IsOpen=\"False\">\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency}\" IsHitTestVisible=\"False\" Icon=\"{StaticResource Vector.Record}\" ContentHeight=\"16\" ContentWidth=\"16\"/>\n                            <Separator/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Manual}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Camera}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Manual}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.Manual}\"/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Interaction}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Cursor}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Interaction}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.Interaction}\"/>\n                            \n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Second}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerSecond}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerSecond}\"/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Minute}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay.Minute}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerMinute}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\"\n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerMinute}\"/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Hour}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay.Hour}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerHour}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerHour}\"/>\n                        </ContextMenu>\n                    </n:ExtendedButton.ContextMenu>\n                </n:ExtendedButton>\n\n                <Separator Grid.Column=\"5\" Width=\"1\" Margin=\"5,2\" HorizontalAlignment=\"Left\"/>\n\n                <n:SplitButton Grid.Column=\"6\" x:Name=\"ReselectSplitButton\" Style=\"{StaticResource Style.SplitButton.NoBorder.NoText}\" ContentHeight=\"20\" Padding=\"3\"\n                               SelectedIndex=\"{Binding Source={x:Static t:UserSettings.All}, Path=RecorderModeIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                               Foreground=\"{Binding Source={x:Static t:UserSettings.All}, Path=RecorderForeground, Mode=TwoWay, Converter={StaticResource ColorToBrush}}\"\n                               Visibility=\"{Binding ElementName=RegionGrid, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\">\n                    <n:ExtendedMenuItem Icon=\"{StaticResource Vector.Crop}\" Header=\"{DynamicResource S.Recorder.Area}\" ContentHeight=\"16\" ContentWidth=\"16\" Click=\"RegionButton_Click\"/>\n                    <n:ExtendedMenuItem Icon=\"{StaticResource Vector.Application}\" Header=\"{DynamicResource S.Recorder.Window}\" ContentHeight=\"16\" ContentWidth=\"16\" Click=\"WindowButton_Click\"/>\n                    <n:ExtendedMenuItem Icon=\"{StaticResource Vector.Monitor}\" Header=\"{DynamicResource S.Recorder.Screen}\" ContentHeight=\"16\" ContentWidth=\"16\" Click=\"FullScreenButton_Click\"/>\n                </n:SplitButton>\n\n                <!--Discard-->\n                <n:ExtendedButton Grid.Column=\"7\" Icon=\"{DynamicResource Vector.Remove}\" ContentHeight=\"20\" ContentWidth=\"20\" Padding=\"3\"\n                                  Style=\"{StaticResource Style.Button.NoText}\" Command=\"{Binding DiscardCommand}\" KeyGesture=\"{Binding DiscardCommand, Converter={StaticResource CommandToKeyGesture}}\" \n                                  ToolTip=\"{DynamicResource S.Recorder.Discard}\" Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Snap-->\n                <n:ExtendedButton Grid.Column=\"8\" Icon=\"{StaticResource Vector.Camera.Add}\" ContentHeight=\"20\" ContentWidth=\"20\" Padding=\"3\"\n                                  Style=\"{StaticResource Style.Button.NoText}\" Command=\"{Binding SnapCommand}\" KeyGesture=\"{Binding SnapCommand, Converter={StaticResource CommandToKeyGesture}}\" \n                                  ToolTip=\"{DynamicResource S.Recorder.Snap}\" Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Record-->\n                <n:ExtendedButton Grid.Column=\"8\" Icon=\"{StaticResource Vector.Record}\" ContentHeight=\"20\" ContentWidth=\"20\" Padding=\"3\" \n                                  Style=\"{StaticResource Style.Button.NoText}\" Command=\"{Binding RecordCommand}\" KeyGesture=\"{Binding RecordCommand, Converter={StaticResource CommandToKeyGesture}}\" \n                                  ToolTip=\"{DynamicResource S.Recorder.Record}\" Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Pause-->\n                <n:ExtendedButton Grid.Column=\"8\" Icon=\"{StaticResource Vector.Pause}\" ContentHeight=\"20\" ContentWidth=\"20\" Padding=\"3\" \n                                  Style=\"{StaticResource Style.Button.NoText}\" Command=\"{Binding PauseCommand}\" KeyGesture=\"{Binding PauseCommand, Converter={StaticResource CommandToKeyGesture}}\" \n                                  ToolTip=\"{DynamicResource S.Recorder.Pause}\" Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Stop-->\n                <n:ExtendedButton Grid.Column=\"9\" Icon=\"{DynamicResource Vector.Stop}\" ContentHeight=\"20\" ContentWidth=\"20\" Padding=\"3\"\n                                  Style=\"{StaticResource Style.Button.NoText}\" Command=\"{Binding StopCommand}\" KeyGesture=\"{Binding StopCommand, Converter={StaticResource CommandToKeyGesture}}\" \n                                  ToolTip=\"{DynamicResource S.Recorder.Stop}\" Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n            </Grid>\n        </Grid>\n    </Border>\n</n:BaseScreenRecorder>"
  },
  {
    "path": "ScreenToGif/Windows/NewRecorder.xaml.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Forms;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing Microsoft.Win32;\nusing ScreenToGif.Capture;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Domain.Exceptions;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Helpers;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.Windows.Other;\nusing Cursors = System.Windows.Input.Cursors;\nusing KeyEventArgs = System.Windows.Input.KeyEventArgs;\nusing MouseButtons = ScreenToGif.Domain.Enums.MouseButtons;\nusing Point = System.Windows.Point;\nusing Size = System.Windows.Size;\n\nnamespace ScreenToGif.Windows;\n\npublic partial class NewRecorder\n{\n    #region Variables\n\n    private static readonly object Lock = new object();\n\n    /// <summary>\n    /// The view model of the recorder.\n    /// </summary>\n    private readonly ScreenRecorderViewModel _viewModel;\n\n    /// <summary>\n    /// Keyboard and mouse hooks helper.\n    /// </summary>\n    private readonly InputHook _actHook;\n\n    /// <summary>\n    /// This is the helper class which brings the screen area selection.\n    /// </summary>\n    private readonly RegionSelection _regionSelection = new RegionSelection();\n\n    /// <summary>\n    /// The amount of seconds of the pre start delay, plus 1 (1+1=2);\n    /// </summary>\n    private int _preStartCount = 1;\n\n    private readonly Timer _preStartTimer = new Timer();\n    private readonly Timer _followTimer = new Timer();\n    private readonly Timer _showBorderTimer = new Timer();\n    private readonly Timer _limitTimer = new Timer();\n\n    #region Mouse cursor follow up\n\n    /// <summary>\n    /// The previous position of the cursor in the X axis.\n    /// </summary>\n    private int _prevPosX = 0;\n\n    /// <summary>\n    /// The previous position of the cursor in the Y axis.\n    /// </summary>\n    private int _prevPosY = 0;\n\n    /// <summary>\n    /// The latest position of the cursor in the X axis.\n    /// </summary>\n    private int _posX = 0;\n\n    /// <summary>\n    /// The latest position of the cursor in the Y axis.\n    /// </summary>\n    private int _posY = 0;\n\n    /// <summary>\n    /// The offset in pixels. Used for moving the recorder around the X axis.\n    /// </summary>\n    private double _offsetX = 0;\n\n    /// <summary>\n    /// The offset in pixels. Used for moving the recorder around the Y axis.\n    /// </summary>\n    private double _offsetY = 0;\n\n    #endregion\n\n    #endregion\n\n    #region Dependency Properties\n\n    public static readonly DependencyProperty IsRecordingProperty = DependencyProperty.Register(nameof(IsRecording), typeof(bool), typeof(NewRecorder), new PropertyMetadata(false));\n    public static readonly DependencyProperty IsFollowingProperty = DependencyProperty.Register(nameof(IsFollowing), typeof(bool), typeof(NewRecorder), new PropertyMetadata(false, IsFollowing_PropertyChanged));\n\n    #endregion\n\n    #region Properties\n\n    public bool IsRecording\n    {\n        get => (bool)GetValue(IsRecordingProperty);\n        set => SetValue(IsRecordingProperty, value);\n    }\n\n    public bool IsFollowing\n    {\n        get => (bool)GetValue(IsFollowingProperty);\n        set => SetValue(IsFollowingProperty, value);\n    }\n\n    /// <summary>\n    /// Get the selected region in screen coordinates.\n    /// Scales the region selection to the DPI/Scale of the screen where the capture selection is located.\n    /// Also, takes into account the 1px border of the selection rectangle.\n    /// </summary>\n    public Rect CaptureRegion => _viewModel != null && _viewModel.Region.IsEmpty != true ? _viewModel.Region.Scale(_regionSelection.Scale).Offset(MathExtensions.RoundUpValue(_regionSelection.Scale)) : Rect.Empty;\n    //public Rect CaptureRegion => _viewModel != null && _viewModel.Region.IsEmpty != true ? _viewModel.Region.Offset(1).Scale(_regionSelection.Scale) : Rect.Empty;\n\n    #endregion\n\n\n    public NewRecorder()\n    {\n        InitializeComponent();\n\n        _preStartTimer.Tick += PreStart_Elapsed;\n        _preStartTimer.Interval = 1000;\n\n        #region Global hook\n\n        try\n        {\n            _actHook = new InputHook(true, true); //true for the mouse, true for the keyboard.\n            _actHook.KeyDown += KeyHookTarget;\n            _actHook.OnMouseActivity += MouseHookTarget;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to initialize the user activity hook.\");\n        }\n\n        #endregion\n\n        #region Model and commands\n\n        DataContext = _viewModel = new ScreenRecorderViewModel();\n\n        RegisterCommands();\n\n        #endregion\n\n        #region Focus scope explanation\n\n        //Since I'm using Commands inside a ContextMenu, I need to set logical focus in order for it to work.\n        //FocusManager.FocusedElement=\"{Binding RelativeSource={x:Static RelativeSource.Self}, Mode=OneTime}\"\n        //https://www.wpftutorial.net/RoutedCommandsInContextMenu.html\n\n        #endregion\n\n        _regionSelection.PositionChanged += RegionSelection_PositionChanged;\n        _regionSelection.DragStarted += RegionSelection_DragStarted;\n        _regionSelection.DragEnded += RegionSelection_DragEnded;\n\n        SystemEvents.PowerModeChanged += System_PowerModeChanged;\n        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;\n    }\n\n\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        #region Timers\n\n        _showBorderTimer.Interval = 500;\n        _showBorderTimer.Tick += ShowBorderTimer_Tick;\n\n        _followTimer.Tick += FollowTimer_Tick;\n\n        #endregion\n\n        DetectCaptureFrequency();\n\n        _viewModel.IsDirectMode = UserSettings.All.UseDesktopDuplication;\n        _viewModel.Monitors = MonitorHelper.AllMonitorsGranular();\n\n        await UpdatePositioning(true);\n\n        if (UserSettings.All.CursorFollowing)\n            Follow();\n        else\n        {\n            await Task.Delay(TimeSpan.FromMilliseconds(500));\n\n            CommandManager.InvalidateRequerySuggested();\n            MoveCommandPanel();\n        }\n\n        //Automation arguments were passed by command line.\n        if (Arguments.Open)\n        {\n            if (Arguments.FrequencyType.HasValue)\n            {\n                UserSettings.All.CaptureFrequency = Arguments.FrequencyType.Value;\n                UserSettings.All.LatestFps = Arguments.Frequency;\n                DetectCaptureFrequency();\n\n                Arguments.FrequencyType = null;\n            }\n\n            if (Arguments.StartCapture && UserSettings.All.CaptureFrequency >= CaptureFrequencies.PerSecond)\n            {\n                if (Arguments.Limit > TimeSpan.Zero)\n                {\n                    _limitTimer.Tick += Limit_Elapsed;\n                    _limitTimer.Interval = (int) Math.Min(int.MaxValue, Arguments.Limit.TotalMilliseconds);\n                }\n\n                await Record();\n            }\n            else\n            {\n                Arguments.ClearAutomationArgs();\n            }\n        }\n    }\n\n    private void Window_Activated(object sender, EventArgs e)\n    {\n        lock (Lock)\n        {\n            if (_regionSelection.IsEnabled && _regionSelection.WindowState == WindowState.Minimized)\n                _regionSelection.WindowState = WindowState.Normal;\n\n            IsFollowing = UserSettings.All.CursorFollowing;\n\n            if (!IsFollowing || UserSettings.All.FollowShortcut != Key.None)\n                return;\n\n            UserSettings.All.CursorFollowing = IsFollowing = false;\n\n            Dialog.Ok(LocalizationHelper.Get(\"S.StartUp.Recorder\"), LocalizationHelper.Get(\"S.Options.Warning.Follow.Header\"),\n                LocalizationHelper.Get(\"S.Options.Warning.Follow.Message\"), Icons.Warning);\n        }\n    }\n\n    private void Window_KeyDown(object sender, KeyEventArgs e)\n    {\n        var step = (Keyboard.Modifiers & ModifierKeys.Alt) != 0 ? 5 : 1;\n        var key = e.Key == Key.System ? e.SystemKey : e.Key;\n\n        //TODO: Remove.\n        if (key == Key.Tab)\n        {\n            Console.WriteLine($\"Current Element: {(Keyboard.FocusedElement as FrameworkElement)?.Name}, {Keyboard.FocusedElement}\");\n        }\n\n        if (Stage == RecorderStages.Stopped)\n        {\n            //Control + Shift: Expand both ways.\n            if ((Keyboard.Modifiers & ModifierKeys.Control) != 0 && (Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n            {\n                switch (key)\n                {\n                    case Key.Up:\n                        ResizeWindow(0, -step, 0, step);\n                        e.Handled = true;\n                        break;\n                    case Key.Down:\n                        ResizeWindow(0, step, 0, -step);\n                        e.Handled = true;\n                        break;\n                    case Key.Left:\n                        ResizeWindow(step, 0, -step, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Right:\n                        ResizeWindow(-step, 0, step, 0);\n                        e.Handled = true;\n                        break;\n                }\n\n                return;\n            }\n\n            //If the Shift key is pressed, the sizing mode is enabled (bottom right).\n            if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n            {\n                switch (key)\n                {\n                    case Key.Left:\n                        ResizeWindow(0, 0, -step, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Up:\n                        ResizeWindow(0, 0, 0, -step);\n                        e.Handled = true;\n                        break;\n                    case Key.Right:\n                        ResizeWindow(0, 0, step, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Down:\n                        ResizeWindow(0, 0, 0, step);\n                        e.Handled = true;\n                        break;\n                }\n\n                return;\n            }\n\n            //If the Control key is pressed, the sizing mode is enabled (top left).\n            if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)\n            {\n                switch (key)\n                {\n                    case Key.Left:\n                        ResizeWindow(-step, 0, 0, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Up:\n                        ResizeWindow(0, -step, 0, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Right:\n                        ResizeWindow(step, 0, 0, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Down:\n                        ResizeWindow(0, step, 0, 0);\n                        e.Handled = true;\n                        break;\n                }\n\n                return;\n            }\n        }\n\n        //If no other key is pressed, move the region.\n        switch (key)\n        {\n            case Key.Left:\n                MoveWindow(step, 0, 0, 0);\n                e.Handled = true;\n                break;\n            case Key.Up:\n                MoveWindow(0, step, 0, 0);\n                e.Handled = true;\n                break;\n            case Key.Right:\n                MoveWindow(0, 0, step, 0);\n                e.Handled = true;\n                break;\n            case Key.Down:\n                MoveWindow(0, 0, 0, step);\n                e.Handled = true;\n                break;\n        }\n    }\n\n    private void Window_StateChanged(object sender, EventArgs e)\n    {\n        if (WindowState == WindowState.Minimized)\n            return;\n\n        if (Stage == RecorderStages.Recording && IsRegionIntersected())\n        {\n            Pause();\n\n            Topmost = true;\n        }\n\n        DisplaySelection();\n        ForceUpdate();\n    }\n\n    private void HeaderGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Mouse.LeftButton == MouseButtonState.Pressed)\n            DragMove();\n    }\n\n    private void RegionSelection_PositionChanged(object sender, RoutedEventArgs e)\n    {\n        DetectMonitorChanges();\n\n        WidthIntegerBox.IgnoreValueChanged = true;\n        HeightIntegerBox.IgnoreValueChanged = true;\n\n        UserSettings.All.SelectedRegionScale = _regionSelection.Scale;\n        UserSettings.All.SelectedRegion = _viewModel.Region = _regionSelection.Rect;\n\n        WidthIntegerBox.IgnoreValueChanged = false;\n        HeightIntegerBox.IgnoreValueChanged = false;\n\n        WidthIntegerBox.Scale = _regionSelection.Scale;\n        HeightIntegerBox.Scale = _regionSelection.Scale;\n\n        if (Capture != null)\n        {\n            Capture.Left = (int)CaptureRegion.Left;\n            Capture.Top = (int)CaptureRegion.Top;\n        }\n    }\n\n    private void RegionSelection_DragStarted(object sender, RoutedEventArgs e)\n    {\n        Hide();\n    }\n\n    private void RegionSelection_DragEnded(object sender, RoutedEventArgs e)\n    {\n        DetectMonitorChanges();\n        MoveCommandPanel();\n        Show();\n    }\n\n    private void System_PowerModeChanged(object sender, PowerModeChangedEventArgs e)\n    {\n        if (e.Mode == PowerModes.Suspend)\n        {\n            if (Stage == RecorderStages.Recording)\n                _viewModel.PauseCommand.Execute(sender, null);\n            else if (Stage == RecorderStages.PreStarting)\n                _viewModel.StopCommand.Execute(sender, null);\n\n            GC.Collect();\n        }\n    }\n\n    private async void SystemEvents_DisplaySettingsChanged(object sender, EventArgs eventArgs)\n    {\n        if (_viewModel != null)\n            _viewModel.Monitors = MonitorHelper.AllMonitorsGranular();\n\n        await UpdatePositioning();\n\n        if (WindowState == WindowState.Minimized && _regionSelection != null)\n            _regionSelection.WindowState = WindowState.Minimized;\n    }\n\n    private void SizeIntegerBox_ValueChanged(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        MoveCommandPanel();\n        DisplaySelection();\n    }\n\n    private void SizeIntegerBox_MouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        var relativePoint = e.GetPosition(WidthIntegerBox);\n        var screenPoint = WidthIntegerBox.PointToScreen(new Point(0, 0));\n        var scale = this.Scale();\n\n        User32.SetCursorPos((int)(screenPoint.X + relativePoint.X * scale), (int)(screenPoint.Y + relativePoint.Y * scale));\n    }\n\n    private static void IsFollowing_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n    {\n        if (d is not NewRecorder rec)\n            return;\n\n        rec.Follow();\n    }\n\n    private void MinimizeButton_Click(object sender, RoutedEventArgs e)\n    {\n        _regionSelection.Hide();\n\n        WindowState = WindowState.Minimized;\n    }\n\n    private async void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        //Close the selecting rectangle.\n        _regionSelection.Close();\n\n        //Save Settings\n        UserSettings.All.SelectedRegion = _viewModel?.Region ?? UserSettings.All.SelectedRegion;\n        UserSettings.All.SelectedRegionScale = _viewModel?.CurrentMonitor?.Scale ?? UserSettings.All.SelectedRegionScale;\n        UserSettings.Save();\n\n        #region Remove Hooks\n\n        try\n        {\n            if (_actHook != null)\n            {\n                _actHook.OnMouseActivity -= MouseHookTarget;\n                _actHook.KeyDown -= KeyHookTarget;\n                _actHook.Stop(); //Stop the user activity watcher.\n            }\n        }\n        catch (Exception) { }\n\n        #endregion\n\n        SystemEvents.PowerModeChanged -= System_PowerModeChanged;\n        SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged;\n\n        #region Stops the timers\n\n        if (Stage != RecorderStages.Stopped)\n        {\n            _preStartTimer.Stop();\n            _preStartTimer.Dispose();\n\n            await StopCapture();\n        }\n\n        GarbageTimer?.Stop();\n        _followTimer?.Stop();\n        _limitTimer?.Stop();\n\n        #endregion\n\n        //Clean all capture resources.\n        if (Capture != null)\n            await Capture.DisposeAsync();\n\n        GC.Collect();\n    }\n\n\n    private async void RegionButton_Click(object sender, RoutedEventArgs e)\n    {\n        await PickRegion(ModeType.Region);\n    }\n\n    private async void WindowButton_Click(object sender, RoutedEventArgs e)\n    {\n        await PickRegion(ModeType.Window);\n    }\n\n    private async void FullScreenButton_Click(object sender, RoutedEventArgs e)\n    {\n        await PickRegion(ModeType.Fullscreen);\n    }\n\n\n    /// <summary>\n    /// KeyHook event method. This fires when the user press a key.\n    /// When using commands when the current window has no focus, pass an IInputElement as the target to make it work.\n    /// </summary>\n    private async void KeyHookTarget(object sender, CustomKeyEventArgs e)\n    {\n        if (RegionSelectHelper.IsSelecting || Stage == RecorderStages.Discarding)\n            return;\n\n        //Capture when an user interactions happens.\n        if (Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction && !IsKeyboardFocusWithin)\n            await Snap();\n\n        //Record/snap or pause.\n        if (Keyboard.Modifiers.HasFlag(UserSettings.All.StartPauseModifiers) && e.Key == UserSettings.All.StartPauseShortcut)\n        {\n            if (UserSettings.All.CaptureFrequency == CaptureFrequencies.Manual)\n            {\n                _viewModel.SnapCommand.Execute(null, this);\n                return;\n            }\n\n            if (Stage == RecorderStages.Recording)\n                _viewModel.PauseCommand.Execute(null, this);\n            else\n            {\n                if (_viewModel.Region.IsEmpty && WindowState == WindowState.Minimized)\n                    WindowState = WindowState.Normal;\n\n                _viewModel.RecordCommand.Execute(null, this);\n            }\n\n            return;\n        }\n\n        if (Keyboard.Modifiers.HasFlag(UserSettings.All.StopModifiers) && e.Key == UserSettings.All.StopShortcut && (Stage == RecorderStages.Recording || Stage == RecorderStages.Paused || Stage == RecorderStages.PreStarting))\n            await Stop();\n        else if (Keyboard.Modifiers.HasFlag(UserSettings.All.DiscardModifiers) && e.Key == UserSettings.All.DiscardShortcut)\n            _viewModel.DiscardCommand.Execute(null, this);\n        else if (Keyboard.Modifiers.HasFlag(UserSettings.All.FollowModifiers) && e.Key == UserSettings.All.FollowShortcut)\n            UserSettings.All.CursorFollowing = IsFollowing = !IsFollowing;\n        else\n            KeyList.Add(new SimpleKeyGesture(e.Key, Keyboard.Modifiers, e.IsUppercase, e.IsInjected));\n    }\n\n    /// <summary>\n    /// MouseHook event method, detects the mouse clicks.\n    /// </summary>\n    private async void MouseHookTarget(object sender, SimpleMouseGesture args)\n    {\n        try\n        {\n            if (RegionSelectHelper.IsSelecting || Stage == RecorderStages.Discarding)\n                return;\n\n            //In the future, store each mouse event, with a timestamp, independently of the capture.\n            if (args.LeftButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.Left;\n            else if (args.RightButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.Right;\n            else if (args.MiddleButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.Middle;\n            else if (args.FirstExtraButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.FirstExtra;\n            else if (args.SecondExtraButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.SecondExtra;\n            else\n                RecordClicked = MouseButtons.None;\n\n            _posX = (int)Math.Round(args.PosX / _regionSelection.Scale, MidpointRounding.AwayFromZero);\n            _posY = (int)Math.Round(args.PosY / _regionSelection.Scale, MidpointRounding.AwayFromZero);\n\n            if (Stage == RecorderStages.Recording && args.IsInteraction && UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction)\n            {\n                var controlHit = VisualTreeHelper.HitTest(this, Mouse.GetPosition(this));\n                var selectionHit = _regionSelection.IsVisible && _regionSelection.Opacity > 0 ? VisualTreeHelper.HitTest(_regionSelection, Mouse.GetPosition(_regionSelection)) : null;\n\n                if (controlHit == null && selectionHit == null)\n                    await Snap();\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Error in mouse hook target.\");\n        }\n    }\n\n\n    #region Timers\n\n    private void PreStart_Elapsed(object sender, EventArgs e)\n    {\n        if (_preStartCount >= 1)\n        {\n            Title = \"ScreenToGif - \" + LocalizationHelper.Get(\"S.Recorder.PreStarting\");\n            DisplayTimer.SetElapsed(-_preStartCount);\n            Splash.SetTime(-_preStartCount);\n            _preStartCount--;\n            return;\n        }\n\n        _preStartTimer.Stop();\n\n        if (Splash.IsBeingDisplayed())\n            Splash.Dismiss();\n\n        if (IsRegionIntersected())\n            WindowState = WindowState.Minimized;\n\n        Title = \"ScreenToGif\";\n        IsRecording = true;\n\n        StartCapture();\n\n        if (Arguments.StartCapture && Arguments.Limit > TimeSpan.Zero)\n            _limitTimer.Start();\n\n        Stage = RecorderStages.Recording;\n    }\n\n    private void FollowTimer_Tick(object sender, EventArgs e)\n    {\n        if (_viewModel.Region.IsEmpty || _prevPosX == _posX && _prevPosY == _posY || Stage == RecorderStages.Paused || Stage == RecorderStages.Stopped || Stage == RecorderStages.Discarding ||\n            (Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers == UserSettings.All.DisableFollowModifiers))\n            return;\n\n        _prevPosX = _posX;\n        _prevPosY = _posY;\n\n        //Only move to the left if 'Mouse.X < Rect.L' and only move to the right if 'Mouse.X > Rect.R'\n        _offsetX = _posX - UserSettings.All.FollowBuffer < _viewModel.Region.X ? _posX - _viewModel.Region.X - UserSettings.All.FollowBuffer :\n            _posX + UserSettings.All.FollowBuffer > _viewModel.Region.Right ? _posX - _viewModel.Region.Right + UserSettings.All.FollowBuffer : 0;\n\n        _offsetY = _posY - UserSettings.All.FollowBuffer < _viewModel.Region.Y ? _posY - _viewModel.Region.Y - UserSettings.All.FollowBuffer :\n            _posY + UserSettings.All.FollowBuffer > _viewModel.Region.Bottom ? _posY - _viewModel.Region.Bottom + UserSettings.All.FollowBuffer : 0;\n\n        //Hide the UI when moving.\n        if (_posX - UserSettings.All.FollowBuffer - UserSettings.All.FollowBufferInvisible < _viewModel.Region.X || _posX + UserSettings.All.FollowBuffer + UserSettings.All.FollowBufferInvisible > _viewModel.Region.Right ||\n            _posY - UserSettings.All.FollowBuffer - UserSettings.All.FollowBufferInvisible < _viewModel.Region.Y || _posY + UserSettings.All.FollowBuffer + UserSettings.All.FollowBufferInvisible > _viewModel.Region.Bottom)\n        {\n            _showBorderTimer.Stop();\n\n            Visibility = Visibility.Hidden;\n            _regionSelection.Hide();\n\n            _showBorderTimer.Start();\n        }\n\n        //Limit to the current screen (only if in DirectX mode).\n        //_viewModel.Region = new Rect(new Point((_viewModel.Region.X + _offsetX).Clamp(_viewModel.MaximumBounds.Left - 1, _viewModel.MaximumBounds.Width - _viewModel.Region.Width + 1),\n        //    (_viewModel.Region.Y + _offsetY).Clamp(_viewModel.MaximumBounds.Top - 1, _viewModel.MaximumBounds.Height - _viewModel.Region.Height + 1)), _viewModel.Region.Size);\n\n        //Limit to the current screen.\n        _viewModel.Region = new Rect(new Point((_viewModel.Region.X + _offsetX).Clamp(_viewModel.CurrentMonitor.Bounds.Left - 1, _viewModel.CurrentMonitor.Bounds.Width - _viewModel.Region.Width + 1),\n            (_viewModel.Region.Y + _offsetY).Clamp(_viewModel.CurrentMonitor.Bounds.Top - 1, _viewModel.CurrentMonitor.Bounds.Height - _viewModel.Region.Height + 1)), _viewModel.Region.Size);\n\n        //Tell the capture helper that the position changed.\n        if (Capture == null)\n            return;\n\n        Capture.Left = (int)CaptureRegion.Left;\n        Capture.Top = (int)CaptureRegion.Top;\n    }\n\n    private void ShowBorderTimer_Tick(object sender, EventArgs e)\n    {\n        _showBorderTimer.Stop();\n\n        DetectMonitorChanges();\n        DisplaySelection();\n        MoveCommandPanel();\n\n        Visibility = Visibility.Visible;\n    }\n\n    private async void Limit_Elapsed(object sender, EventArgs e)\n    {\n        _limitTimer.Stop();\n\n        if (!IsLoaded || (Stage != RecorderStages.Recording && Stage == RecorderStages.PreStarting))\n            return;\n\n        await Stop();\n    }\n\n    #endregion\n\n    #region Methods\n\n    internal void MoveToMainScreen()\n    {\n        var main = _viewModel.Monitors.FirstOrDefault(f => f.IsPrimary) ?? _viewModel.Monitors.FirstOrDefault();\n\n        if (main == null)\n            return;\n\n        //If there's no selection, simply move the command panel to the main screen.\n        if (_viewModel.Region.IsEmpty)\n        {\n            MovePanelTo(main, main.WorkingArea.Left + main.WorkingArea.Width / 2 - RecorderWindow.ActualWidth / 2, main.WorkingArea.Top + main.WorkingArea.Height / 2 - RecorderWindow.ActualHeight / 2);\n            return;\n        }\n\n        //This code it's kind of broken. It's not taking into consideration the relative position of the window on the secondary monitor.\n        //It will move the window to the primary monitor, but it won't keep the same axis.\n\n        var diff = _regionSelection.Scale / main.Scale;\n        var left = _viewModel.Region.Left / diff;\n        var top = _viewModel.Region.Top / diff;\n\n        if (main.Bounds.Top > top)\n            top = main.Bounds.Top;\n\n        if (main.Bounds.Left > left)\n            left = main.Bounds.Left;\n\n        if (main.Bounds.Bottom < top + _viewModel.Region.Height * diff)\n            top = main.Bounds.Bottom - _viewModel.Region.Height * diff;\n\n        if (main.Bounds.Right < left + _viewModel.Region.Width * diff)\n            left = main.Bounds.Right - _viewModel.Region.Width * diff;\n\n        UserSettings.All.SelectedRegion = _viewModel.Region = new Rect(new Point(left, top), _viewModel.Region.Size);\n        UserSettings.All.SelectedRegionScale = main.Scale;\n\n        DisplaySelection(_regionSelection.Mode, main);\n        MoveCommandPanel();\n    }\n\n    private async Task UpdatePositioning(bool startup = false)\n    {\n        if (!startup)\n        {\n            #region When the recorder was already opened\n\n            //When in selection mode, cancel selection.\n            if (RegionSelectHelper.IsSelecting)\n                RegionSelectHelper.Abort();\n\n            switch (Stage)\n            {\n                case RecorderStages.PreStarting:\n                {\n                    await Stop();\n                    break;\n                }\n                case RecorderStages.Recording:\n                {\n                    if (UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual)\n                        Pause();\n\n                    break;\n                }\n            }\n\n            //Move region to the closest available screen.\n            MoveToClosestScreen();\n\n            #endregion\n        }\n        else\n        {\n            #region The user can opt out of the using the previous position and size\n\n            if (!UserSettings.All.RecorderRememberPosition && !UserSettings.All.SelectedRegion.IsEmpty)\n            {\n                if (!UserSettings.All.RecorderRememberSize)\n                {\n                    UserSettings.All.SelectedRegion = Rect.Empty;\n                }\n                else\n                {\n                    var main = _viewModel.Monitors.FirstOrDefault(f => f.IsPrimary) ?? _viewModel.Monitors.FirstOrDefault();\n\n                    if (main != null)\n                    {\n                        //Center the selection on the main screen.\n                        var left = main.Bounds.Left + main.Bounds.Width / 2d - UserSettings.All.SelectedRegion.Width / 2d;\n                        var top = main.Bounds.Top + main.Bounds.Height / 2d - UserSettings.All.SelectedRegion.Height / 2d;\n\n                        UserSettings.All.SelectedRegion = new Rect(new Point(left, top), UserSettings.All.SelectedRegion.Size);\n                        UserSettings.All.SelectedRegionScale = main.Scale;\n                    }\n                    else\n                    {\n                        //If it was not possible to detect the primary screen, simply clear the selection.\n                        UserSettings.All.SelectedRegion = Rect.Empty;\n                        UserSettings.All.SelectedRegionScale = 1;\n                    }\n                }\n            }\n\n            #endregion\n\n            //Command line arguments were sent.\n            if (Arguments.Region != Rect.Empty)\n            {\n                UserSettings.All.SelectedRegion = Arguments.Region;\n                Arguments.Region = Rect.Empty;\n            }\n\n            #region Previously selected region\n\n            //If a region was previously selected.\n            if (!UserSettings.All.SelectedRegion.IsEmpty)\n            {\n                //Check if the previous selection can be positioned inside a screen.\n                var monitor = _viewModel.Monitors.FirstOrDefault(f => f.NativeBounds.Contains(UserSettings.All.SelectedRegion.Scale(UserSettings.All.SelectedRegionScale)));\n\n                if (monitor != null)\n                {\n                    _viewModel.CurrentMonitor = monitor;\n                    _viewModel.Region = UserSettings.All.SelectedRegion;\n                    UserSettings.All.SelectedRegionScale = monitor.Scale;\n                }\n                else\n                {\n                    //Fullscreen selection.\n                    monitor = _viewModel.Monitors.FirstOrDefault(f => f.Bounds == UserSettings.All.SelectedRegion.Offset(1));\n\n                    if (monitor != null)\n                    {\n                        _viewModel.CurrentMonitor = monitor;\n                        _viewModel.Region = UserSettings.All.SelectedRegion;\n                        UserSettings.All.SelectedRegionScale = monitor.Scale;\n                    }\n                }\n            }\n\n            #endregion\n        }\n\n        //Change the scale of the sizing controls.\n        WidthIntegerBox.Scale = UserSettings.All.SelectedRegionScale;\n        HeightIntegerBox.Scale = UserSettings.All.SelectedRegionScale;\n\n        #region Adjust the position of the main controls\n\n        if (_viewModel.Region.IsEmpty)\n        {\n            #region Center on screen\n\n            var screen = _viewModel.Monitors.FirstOrDefault(x => x.Bounds.Contains(CursorHelper.GetMousePosition(1, Left, Top))) ?? _viewModel.Monitors.FirstOrDefault(x => x.IsPrimary) ?? _viewModel.Monitors.FirstOrDefault();\n\n            if (screen == null)\n                throw new Exception(\"It was not possible to get a list of known screens.\");\n\n            MovePanelTo(screen, screen.WorkingArea.Left + screen.WorkingArea.Width / 2 - RecorderWindow.ActualWidth / 2, screen.WorkingArea.Top + screen.WorkingArea.Height / 2 - RecorderWindow.ActualHeight / 2);\n\n            #endregion\n        }\n        else\n        {\n            MoveCommandPanel();\n            DisplaySelection((ModeType) UserSettings.All.RecorderModeIndex);\n        }\n\n        #endregion\n    }\n\n    private void ForceUpdate()\n    {\n        InvalidateMeasure();\n        InvalidateArrange();\n        Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        Arrange(new Rect(DesiredSize));\n    }\n\n    private void RegisterCommands()\n    {\n        CommandBindings.Clear();\n        CommandBindings.AddRange(new CommandBindingCollection\n        {\n            new CommandBinding(_viewModel.CloseCommand, (_, _) => Close(),\n                (_, args) => args.CanExecute = Stage == RecorderStages.Stopped || (UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction && (Project == null || !Project.Any))),\n\n            new CommandBinding(_viewModel.OptionsCommand, ShowOptions,\n                (_, args) => args.CanExecute = (Stage != RecorderStages.Recording || UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction) && Stage != RecorderStages.PreStarting),\n\n            new CommandBinding(_viewModel.SwitchFrequencyCommand, SwitchFrequency,\n                (_, args) =>\n                {\n                    if (args.Parameter != null && !args.Parameter.Equals(\"Switch\"))\n                    {\n                        args.CanExecute = true;\n                        return;\n                    }\n\n                    args.CanExecute = ((Stage != RecorderStages.Recording || Project == null) || UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction) && Stage != RecorderStages.PreStarting;\n                }),\n\n            new CommandBinding(_viewModel.RecordCommand, async (_, _) => await Record(),\n                (_, args) => args.CanExecute = Stage is RecorderStages.Stopped or RecorderStages.Paused && UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual),\n\n            new CommandBinding(_viewModel.PauseCommand, (_, _) => Pause(),\n                (_, args) => args.CanExecute = Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual),\n\n            new CommandBinding(_viewModel.SnapCommand, async (_, _) => await Snap(),\n                (_, args) => args.CanExecute = Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency == CaptureFrequencies.Manual),\n\n            new CommandBinding(_viewModel.StopLargeCommand, async (_, _) => await Stop(),\n                (_, args) => args.CanExecute = (Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual && UserSettings.All.CaptureFrequency != CaptureFrequencies.Interaction &&\n                    !UserSettings.All.RecorderDisplayDiscard) || Stage == RecorderStages.PreStarting),\n\n            new CommandBinding(_viewModel.StopCommand, async (_, _) => await Stop(),\n                (_, args) =>\n                {\n                    if (UserSettings.All.RecorderCompactMode)\n                    {\n                        args.CanExecute = Stage == RecorderStages.Recording && ((UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual && UserSettings.All.CaptureFrequency != CaptureFrequencies.Interaction &&\n                            !UserSettings.All.RecorderDisplayDiscard) || FrameCount > 0) || Stage is RecorderStages.Paused or RecorderStages.PreStarting;\n                        return;\n                    }\n\n                    args.CanExecute = (Stage == RecorderStages.Recording && (UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction || UserSettings.All.RecorderDisplayDiscard) && FrameCount > 0) ||\n                        (Stage == RecorderStages.Paused && FrameCount > 0);\n                }),\n\n            new CommandBinding(_viewModel.DiscardCommand, async (_, _) => await Discard(),\n                (_, args) => args.CanExecute = (Stage == RecorderStages.Paused && FrameCount > 0) || (Stage == RecorderStages.Recording && (UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction ||\n                    UserSettings.All.RecorderDisplayDiscard) && FrameCount > 0))});\n\n        _viewModel.RefreshKeyGestures();\n    }\n\n    private void ShowOptions(object sender, ExecutedRoutedEventArgs e)\n    {\n        Topmost = false;\n        _regionSelection.Topmost = false;\n\n        var options = new Options(Options.RecorderIndex);\n        options.ShowDialog();\n\n        DetectCaptureFrequency();\n        RegisterCommands();\n        DisplaySelection();\n        MoveCommandPanel();\n\n        //If not recording (or recording in manual/interactive mode, but with no frames captured yet), adjust the maximum bounds for the recorder.\n        if (Stage == RecorderStages.Stopped || ((UserSettings.All.CaptureFrequency == CaptureFrequencies.Manual || UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction) && Stage == RecorderStages.Recording && FrameCount == 0))\n            _viewModel.IsDirectMode = UserSettings.All.UseDesktopDuplication;\n\n        Topmost = true;\n        _regionSelection.Topmost = true;\n    }\n\n    internal async Task Record()\n    {\n        try\n        {\n            switch (Stage)\n            {\n                case RecorderStages.Stopped:\n                {\n                    #region If region not yet selected\n\n                    if (_viewModel.Region.IsEmpty)\n                    {\n                        await PickRegion((ModeType) ReselectSplitButton.SelectedIndex, true);\n\n                        if (_viewModel.Region.IsEmpty)\n                            return;\n                    }\n\n                    #endregion\n\n                    #region If interaction mode\n\n                    if (UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction)\n                    {\n                        Stage = RecorderStages.Recording;\n                        SetTaskbarButtonOverlay();\n                        Hide();\n                        return;\n                    }\n\n                    #endregion\n\n                    #region To record\n\n                    Project = new ProjectInfo().CreateProjectFolder(ProjectByType.ScreenRecorder);\n\n                    KeyList.Clear();\n                    FrameCount = 0;\n\n                    await PrepareCapture();\n\n                    FrequencyIntegerUpDown.IsEnabled = false;\n\n                    _regionSelection.HideGuidelines();\n                    IsRecording = true;\n                    Topmost = true;\n\n                    //Tries to move the command panel away from the recording area.\n                    MoveCommandPanel(true);\n\n                    //Detects a possible intersection of capture region and capture controls.\n                    var isIntersecting = IsRegionIntersected();\n\n                    if (isIntersecting)\n                    {\n                        Topmost = false;\n                        Splash.Display(LocalizationHelper.GetWithFormat(\"S.Recorder.Splash.Title\", \"Press {0} to stop the recording\", KeyHelper.GetSelectKeyText(UserSettings.All.StopShortcut, UserSettings.All.StopModifiers)),\n                            LocalizationHelper.GetWithFormat(\"S.Recorder.Splash.Subtitle\", \"The recorder window will be minimized,&#10;restore it or press {0} to pause the capture\", KeyHelper.GetSelectKeyText(UserSettings.All.StartPauseShortcut, UserSettings.All.StartPauseModifiers)));\n                        Splash.SetTime(-UserSettings.All.PreStartValue);\n                    }\n\n                    #region Start\n\n                    if (isIntersecting || UserSettings.All.UsePreStart)\n                    {\n                        Stage = RecorderStages.PreStarting;\n\n                        Title = \"ScreenToGif - \" + LocalizationHelper.Get(\"S.Recorder.PreStarting\");\n                        DisplayTimer.SetElapsed(-UserSettings.All.PreStartValue);\n\n                        _preStartCount = UserSettings.All.PreStartValue - 1;\n                        _preStartTimer.Start();\n                        return;\n                    }\n\n                    Hide();\n                    StartCapture();\n\n                    Stage = RecorderStages.Recording;\n                    SetTaskbarButtonOverlay();\n\n                    if (Arguments.StartCapture && Arguments.Limit > TimeSpan.Zero)\n                        _limitTimer.Start();\n\n                    #endregion\n\n                    #endregion\n\n                    break;\n                }\n\n                case RecorderStages.Paused:\n                {\n                    #region To record again\n\n                    Stage = RecorderStages.Recording;\n                    Title = \"ScreenToGif\";\n                    _regionSelection.HideGuidelines();\n                    SetTaskbarButtonOverlay();\n\n                    //Tries to move the command panel away from the recording area.\n                    MoveCommandPanel(true);\n\n                    //If it's interaction mode, the capture is done via Snap().\n                    if (UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction)\n                        return;\n\n                    await PrepareCapture(false);\n\n                    //Detects a possible intersection of capture region and capture controls.\n                    if (IsRegionIntersected())\n                        WindowState = WindowState.Minimized;\n\n                    FrequencyIntegerUpDown.IsEnabled = false;\n\n                    StartCapture();\n\n                    #endregion\n\n                    break;\n                }\n            }\n        }\n        catch (GraphicsConfigurationException g)\n        {\n            LogWriter.Log(g, \"Impossible to start the recording due to wrong graphics adapter.\");\n            GraphicsConfigurationDialog.Ok(g, _viewModel.CurrentMonitor);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to start the recording.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.StartPauseNotPossible\"), e.Message, e);\n        }\n        finally\n        {\n            Arguments.ClearAutomationArgs();\n\n            //Wait a bit, then refresh the commands. Some of the commands are dependent of the FrameCount property.\n            await Task.Delay(TimeSpan.FromMilliseconds(200));\n\n            CommandManager.InvalidateRequerySuggested();\n            AdjustForWidthChange();\n        }\n    }\n\n    private async Task Snap()\n    {\n        var snapTriggerDelay = GetTriggerDelay();\n\n        if (snapTriggerDelay != 0)\n            await Task.Delay(snapTriggerDelay);\n\n        #region If region not yet selected\n\n        if (_viewModel.Region.IsEmpty)\n        {\n            await PickRegion((ModeType)ReselectSplitButton.SelectedIndex, true);\n\n            if (_viewModel.Region.IsEmpty)\n                return;\n        }\n\n        #endregion\n\n        _regionSelection.HideGuidelines();\n\n        if (Project == null || Project.Frames.Count == 0)\n        {\n            try\n            {\n                Project = new ProjectInfo().CreateProjectFolder(ProjectByType.ScreenRecorder);\n\n                await PrepareCapture();\n\n                KeyList.Clear();\n                IsRecording = true;\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to start the screencasting.\");\n                ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible\"), ex.Message, ex);\n                return;\n            }\n        }\n\n        #region Take the screenshot\n\n        try\n        {\n            var limit = 0;\n            do\n            {\n                FrameCount = await Capture.ManualCaptureAsync(new FrameInfo(RecordClicked, KeyList), UserSettings.All.ShowCursor);\n\n                if (limit > 5)\n                    throw new Exception(\"Impossible to capture the manual screenshot.\");\n\n                limit++;\n            }\n            while (FrameCount == 0);\n\n            KeyList.Clear();\n\n            //Displays that a frame was manually captured.\n            DisplayTimer.ManuallyCapturedCount++;\n            CommandManager.InvalidateRequerySuggested();\n        }\n        catch (GraphicsConfigurationException g)\n        {\n            IsRecording = false;\n\n            LogWriter.Log(g, \"Impossible to take a snap due to wrong graphics adapter.\");\n            GraphicsConfigurationDialog.Ok(g, _viewModel.CurrentMonitor);\n        }\n        catch (Exception e)\n        {\n            IsRecording = false;\n\n            LogWriter.Log(e, \"Impossible to capture the manual screenshot.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible\"), LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible.Info\"), e);\n        }\n\n        #endregion\n    }\n\n    internal void Pause()\n    {\n        try\n        {\n            if (Stage != RecorderStages.Recording || UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction)\n                return;\n\n            Stage = RecorderStages.Paused;\n            Title = \"ScreenToGif\";\n\n            _limitTimer.Stop();\n            PauseCapture();\n\n            FrequencyIntegerUpDown.IsEnabled = true;\n            _regionSelection.DisplayGuidelines();\n            SetTaskbarButtonOverlay();\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to pause the recording.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.StartPauseNotPossible\"), e.Message, e);\n        }\n    }\n\n    private async Task Stop()\n    {\n        try\n        {\n            RecordControlsGrid.IsEnabled = false;\n            Title = \"ScreenToGif - \" + LocalizationHelper.Get(\"S.Recorder.Stopping\");\n            Cursor = Cursors.AppStarting;\n\n            _limitTimer.Stop();\n            await StopCapture();\n\n            if (Stage is RecorderStages.Recording or RecorderStages.Paused && Project?.Any == true)\n            {\n                #region Finishes if it's recording and it has any frames\n\n                await Task.Delay(100);\n\n                Close();\n                return;\n\n                #endregion\n            }\n\n            #region Stops if it is not recording, or has no frames\n\n            //Stop the pre-start timer to kill pre-start warming up.\n            if (Stage == RecorderStages.PreStarting)\n                _preStartTimer.Stop();\n\n            Splash.Dismiss();\n            Stage = RecorderStages.Stopped;\n\n            //Enables the controls that are disabled while recording;\n            FrequencyIntegerUpDown.IsEnabled = true;\n            IsRecording = false;\n            Topmost = true;\n\n            _regionSelection.DisplayGuidelines();\n            SetTaskbarButtonOverlay();\n\n            #endregion\n        }\n        catch (NullReferenceException nll)\n        {\n            LogWriter.Log(nll, \"NullPointer on the Stop function\");\n\n            ErrorDialog.Ok(\"ScreenToGif\", \"Error while stopping\", nll.Message, nll);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error on the Stop function\");\n\n            ErrorDialog.Ok(\"ScreenToGif\", \"Error while stopping\", ex.Message, ex);\n        }\n        finally\n        {\n            if (IsLoaded)\n            {\n                Title = \"ScreenToGif\";\n                Cursor = Cursors.Arrow;\n                RecordControlsGrid.IsEnabled = true;\n\n                //Wait a bit, then refresh the commands.\n                await Task.Delay(TimeSpan.FromMilliseconds(200));\n\n                CommandManager.InvalidateRequerySuggested();\n                MoveCommandPanel(true);\n            }\n        }\n    }\n\n    private async Task Discard()\n    {\n        Pause();\n\n        if (UserSettings.All.NotifyRecordingDiscard && !Dialog.Ask(LocalizationHelper.Get(\"S.Recorder.Discard.Title\"),\n                LocalizationHelper.Get(\"S.Recorder.Discard.Instruction\"), LocalizationHelper.Get(\"S.Recorder.Discard.Message\"), false))\n            return;\n\n        await StopCapture();\n\n        FrameCount = 0;\n        Stage = RecorderStages.Discarding;\n        RecordControlsGrid.IsEnabled = false;\n        Cursor = Cursors.AppStarting;\n        SetTaskbarButtonOverlay();\n\n        await Task.Run(() =>\n        {\n            try\n            {\n                #region Remove all the files\n\n                //Not sure if needed.\n                foreach (var frame in Project.Frames)\n                {\n                    try\n                    {\n                        if (File.Exists(frame.Path))\n                            File.Delete(frame.Path);\n                    }\n                    catch (Exception)\n                    { }\n                }\n\n                try\n                {\n                    Directory.Delete(Project.FullPath, true);\n                }\n                catch (Exception ex)\n                {\n                    LogWriter.Log(ex, \"Delete temp path\");\n                }\n\n                #endregion\n\n                Project.Frames.Clear();\n            }\n            catch (IOException io)\n            {\n                LogWriter.Log(io, \"Error while trying to discard the recording\");\n            }\n            catch (Exception ex)\n            {\n                Dispatcher.Invoke(() => Dialog.Ok(\"Discard Error\", \"Error while trying to discard the recording\", ex.Message));\n                LogWriter.Log(ex, \"Error while trying to discard the recording\");\n            }\n        });\n\n        //Enables the controls that are disabled while recording;\n        FrequencyIntegerUpDown.IsEnabled = true;\n        RecordControlsGrid.IsEnabled = true;\n\n        Title = \"ScreenToGif\";\n        Cursor = Cursors.Arrow;\n        IsRecording = false;\n\n        DetectCaptureFrequency();\n        SetTaskbarButtonOverlay();\n\n        //Wait a bit, then refresh the commands.\n        await Task.Delay(TimeSpan.FromMilliseconds(200));\n\n        CommandManager.InvalidateRequerySuggested();\n        MoveCommandPanel(true);\n    }\n\n    private async Task PrepareCapture(bool isNew = true)\n    {\n        if (isNew && Capture != null)\n        {\n            await Capture.DisposeAsync();\n            Capture = null;\n        }\n\n        //If the capture helper was initialized already, ignore this.\n        if (Capture != null)\n            return;\n\n        if (UserSettings.All.UseDesktopDuplication)\n        {\n            //Check if Windows 8 or newer.\n            if (!OperationalSystemHelper.IsWin8OrHigher())\n                throw new Exception(LocalizationHelper.Get(\"S.Recorder.Warning.Windows8\"));\n\n            Capture = GetDirectCapture();\n            Capture.DeviceName = _viewModel.CurrentMonitor.Name;\n            _viewModel.IsDirectMode = true;\n        }\n        else\n        {\n            //Capture with BitBlt.\n            Capture = UserSettings.All.UseMemoryCache ? new CachedCapture() : new ImageCapture();\n\n            _viewModel.IsDirectMode = false;\n        }\n\n        Capture.OnError += exception =>\n        {\n            //Pause the recording and show the error.\n            _viewModel.PauseCommand.Execute(null, null);\n\n            if (exception is GraphicsConfigurationException)\n                GraphicsConfigurationDialog.Ok(exception, _viewModel.CurrentMonitor);\n            else\n                ErrorDialog.Ok(\"ScreenToGif\", LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible\"), exception.Message, exception);\n\n            Capture.Dispose();\n            Capture = null;\n        };\n\n        Capture.Start(GetCaptureInterval(), (int)CaptureRegion.X, (int)CaptureRegion.Y, (int)CaptureRegion.Width, (int)CaptureRegion.Height, _regionSelection.Scale, Project);\n    }\n\n    private async Task PickRegion(ModeType mode, bool quickSelection = false)\n    {\n        _regionSelection.Hide();\n        Hide();\n\n        var previousMode = UserSettings.All.RecorderModeIndex;\n\n        var selection = await RegionSelectHelper.Select(mode, _viewModel.Region, _regionSelection.Monitor, quickSelection);\n\n        ForceUpdate();\n\n        if (selection.Region != Rect.Empty)\n        {\n            WidthIntegerBox.IgnoreValueChanged = true;\n            HeightIntegerBox.IgnoreValueChanged = true;\n\n            UserSettings.All.SelectedRegionScale = selection.Monitor.Scale;\n            UserSettings.All.SelectedRegion = _viewModel.Region = selection.Region;\n\n            WidthIntegerBox.IgnoreValueChanged = false;\n            HeightIntegerBox.IgnoreValueChanged = false;\n\n            DisplaySelection(mode, selection.Monitor);\n            MoveCommandPanel();\n        }\n        else\n        {\n            UserSettings.All.RecorderModeIndex = previousMode;\n            DisplaySelection();\n        }\n\n        Show();\n    }\n\n    private void DisplaySelection(ModeType? mode = null, Monitor display = null)\n    {\n        if (_viewModel.Region.IsEmpty)\n        {\n            if (_regionSelection.IsVisible)\n                _regionSelection.Hide();\n        }\n        else\n        {\n            if (display != null)\n                _viewModel.CurrentMonitor = display;\n\n            _regionSelection.Select(mode, _viewModel.Region, display ?? _viewModel.CurrentMonitor);\n        }\n\n        DisplaySize();\n        DetectMonitorChanges();\n    }\n\n    private void DisplaySize()\n    {\n        switch (UserSettings.All.RecorderModeIndex)\n        {\n            case (int)ModeType.Window:\n            {\n                SizeTextBlock.ToolTip = null;\n\n                if (_viewModel.Region.IsEmpty)\n                {\n                    SizeTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Window.Select\");\n\n                    SizeGrid.Visibility = Visibility.Collapsed;\n                    SizeTextBlock.Visibility = Visibility.Visible;\n                    return;\n                }\n\n                SizeGrid.Visibility = Visibility.Visible;\n                SizeTextBlock.Visibility = Visibility.Collapsed;\n                return;\n            }\n            case (int)ModeType.Fullscreen:\n            {\n                SizeGrid.Visibility = Visibility.Collapsed;\n                SizeTextBlock.Visibility = Visibility.Visible;\n\n                if (_viewModel.CurrentMonitor == null)\n                {\n                    SizeTextBlock.ToolTip = null;\n                    SizeTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Screen.Select\");\n                    return;\n                }\n\n                SizeTextBlock.Text = _viewModel.CurrentMonitor.FriendlyName;\n                SizeTextBlock.ToolTip =\n                    LocalizationHelper.GetWithFormat(\"S.Recorder.Screen.Name.Info1\", \"Graphics adapter: {0}\", _viewModel.CurrentMonitor.AdapterName) +\n                    Environment.NewLine +\n                    LocalizationHelper.GetWithFormat(\"S.Recorder.Screen.Name.Info2\", \"Resolution: {0} x {1}\", _viewModel.CurrentMonitor.Bounds.Width, _viewModel.CurrentMonitor.Bounds.Height) +\n                    (Math.Abs(_viewModel.CurrentMonitor.Scale - 1) > 0.001 ? Environment.NewLine + LocalizationHelper.GetWithFormat(\"S.Recorder.Screen.Name.Info3\", \"Native resolution: {0} x {1}\", _viewModel.CurrentMonitor.NativeBounds.Width, _viewModel.CurrentMonitor.NativeBounds.Height) : \"\")  +\n                    Environment.NewLine +\n                    LocalizationHelper.GetWithFormat(\"S.Recorder.Screen.Name.Info4\", \"DPI: {0} ({1:0.##}%)\", _viewModel.CurrentMonitor.Dpi, _viewModel.CurrentMonitor.Scale * 100d);\n\n                return;\n            }\n            default:\n            {\n                SizeTextBlock.ToolTip = null;\n\n                if (_viewModel.Region.IsEmpty)\n                {\n                    SizeTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Area.Select\");\n\n                    SizeGrid.Visibility = Visibility.Collapsed;\n                    SizeTextBlock.Visibility = Visibility.Visible;\n                    return;\n                }\n\n                SizeGrid.Visibility = Visibility.Visible;\n                SizeTextBlock.Visibility = Visibility.Collapsed;\n                return;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Repositions the capture controls near the selected region, in order to stay away from the capture. If no space available on the nearest screen, try others.\n    /// <param name=\"ignoreCenter\">If there's no space left, don't move the panel to the middle.</param>\n    /// </summary>\n    private void MoveCommandPanel(bool ignoreCenter = false)\n    {\n        if (_viewModel.Region.Width < 25 || _viewModel.Region.Height < 25)\n            return;\n\n        #region Calculate the available spaces for all four sides\n\n        //If the selected region is passing the bottom edge of the display, it means that there are no space available on the bottom.\n        //If the selected region is inside (bottom is below the top most part), it means that there are space available.\n        //If none above, it means that the region is not located inside the screen.\n\n        var bottomSpace = _viewModel.Region.Bottom > _viewModel.CurrentMonitor.Bounds.Bottom ? 0 :\n            _viewModel.Region.Bottom > _viewModel.CurrentMonitor.Bounds.Top ? _viewModel.CurrentMonitor.Bounds.Bottom - _viewModel.Region.Bottom :\n            _viewModel.CurrentMonitor.Bounds.Height;\n\n        var topSpace = _viewModel.Region.Top < _viewModel.CurrentMonitor.Bounds.Top ? 0 :\n            _viewModel.Region.Top < _viewModel.CurrentMonitor.Bounds.Bottom ? _viewModel.Region.Top - _viewModel.CurrentMonitor.Bounds.Top :\n            _viewModel.CurrentMonitor.Bounds.Height;\n\n        var leftSpace = _viewModel.Region.Left < _viewModel.CurrentMonitor.Bounds.Left ? 0 :\n            _viewModel.Region.Left < _viewModel.CurrentMonitor.Bounds.Right ? _viewModel.Region.Left - _viewModel.CurrentMonitor.Bounds.Left :\n            _viewModel.CurrentMonitor.Bounds.Width;\n\n        var rightSpace = _viewModel.Region.Right > _viewModel.CurrentMonitor.Bounds.Right ? 0 :\n            _viewModel.Region.Right > _viewModel.CurrentMonitor.Bounds.Left ? _viewModel.CurrentMonitor.Bounds.Right - _viewModel.Region.Right :\n            _viewModel.CurrentMonitor.Bounds.Width;\n\n        #endregion\n\n        //Bottom.\n        if (bottomSpace > (ActualHeight + 20))\n        {\n            MovePanelTo(_viewModel.CurrentMonitor, (_viewModel.Region.Left + _viewModel.Region.Width / 2 - (ActualWidth / 2))\n                .Clamp(_viewModel.CurrentMonitor.Bounds.Left, _viewModel.CurrentMonitor.Bounds.Right - ActualWidth), _viewModel.Region.Bottom + 10);\n            return;\n        }\n\n        //Top.\n        if (topSpace > ActualHeight + 20)\n        {\n            MovePanelTo(_viewModel.CurrentMonitor, (_viewModel.Region.Left + _viewModel.Region.Width / 2 - ActualWidth / 2)\n                .Clamp(_viewModel.CurrentMonitor.Bounds.Left, _viewModel.CurrentMonitor.Bounds.Right - ActualWidth), _viewModel.Region.Top - ActualHeight - 10);\n            return;\n        }\n\n        //Left.\n        if (leftSpace > ActualWidth + 20)\n        {\n            MovePanelTo(_viewModel.CurrentMonitor, _viewModel.Region.Left - ActualWidth - 10, _viewModel.Region.Top + _viewModel.Region.Height / 2 - ActualHeight / 2);\n            return;\n        }\n\n        //Right.\n        if (rightSpace > ActualWidth + 20)\n        {\n            MovePanelTo(_viewModel.CurrentMonitor, _viewModel.Region.Right + 10, _viewModel.Region.Top + _viewModel.Region.Height / 2 - ActualHeight / 2);\n            return;\n        }\n\n        if (ignoreCenter)\n        {\n            //If no space left, move the control more to the left (if there's more space available to the left).\n            //This is useful when the command panel is to the left of the recording, but there's no enough space.\n            if (leftSpace > rightSpace && leftSpace > (ActualWidth * 0.6))\n                MovePanelTo(_viewModel.CurrentMonitor, _viewModel.Region.Left - ActualWidth - 10, _viewModel.Region.Top + _viewModel.Region.Height / 2 - ActualHeight / 2);\n\n            return;\n        }\n\n        //No space available, simply center on the selected region.\n        MovePanelTo(_viewModel.CurrentMonitor, _viewModel.Region.Left + _viewModel.Region.Width / 2 - ActualWidth / 2, _viewModel.Region.Top + _viewModel.Region.Height / 2 - ActualHeight / 2);\n    }\n\n    private void MovePanelTo(Monitor monitor, double left, double top)\n    {\n        if (_viewModel.CurrentControlMonitor?.Handle != monitor.Handle || _viewModel.CurrentControlMonitor?.Scale != monitor.Scale)\n        {\n            //First move the command window to the final monitor, so that the UI scale can be adjusted.\n            this.MoveToScreen(monitor);\n\n            _viewModel.CurrentControlMonitor = monitor;\n        }\n\n        //Move the command window to the final place.\n        Left = left / (this.Scale() / monitor.Scale);\n        Top = top / (this.Scale() / monitor.Scale);\n    }\n\n    /// <summary>\n    /// Move the selection region to the closest screen when outside of any.\n    /// </summary>\n    private void MoveToClosestScreen()\n    {\n        //If the position was never set.\n        if (_viewModel.Region.IsEmpty)\n            return;\n\n        var top = _viewModel.Region.Top;\n        var left = _viewModel.Region.Left;\n\n        var screen = Screen.FromRectangle(new Rectangle((int)_viewModel.Region.Left, (int)_viewModel.Region.Top, (int)_viewModel.Region.Width, (int)_viewModel.Region.Height));\n        var closest = _viewModel.Monitors.FirstOrDefault(f => f.Name == screen.DeviceName) ?? _viewModel.Monitors.FirstOrDefault();\n        //var closest = monitors.FirstOrDefault(x => x.Bounds.Contains(new System.Windows.Point((int)left, (int)top))) ?? monitors.FirstOrDefault(x => x.IsPrimary) ?? monitors.FirstOrDefault();\n\n        if (closest == null)\n            throw new Exception(\"It was not possible to move the current selected region to the closest monitor.\");\n\n        //To much to the Left.\n        if (closest.Bounds.Left > _viewModel.Region.Left - 1)\n            left = closest.Bounds.Left;\n\n        //Too much to the top.\n        if (closest.Bounds.Top > _viewModel.Region.Top - 1)\n            top = closest.Bounds.Top;\n\n        //Too much to the right.\n        if (closest.Bounds.Right < _viewModel.Region.Left + _viewModel.Region.Width)\n            left = closest.Bounds.Right - _viewModel.Region.Width;\n\n        //Too much to the bottom.\n        if (closest.Bounds.Bottom < _viewModel.Region.Top + _viewModel.Region.Height)\n            top = closest.Bounds.Bottom - _viewModel.Region.Height;\n\n        UserSettings.All.SelectedRegionScale = closest.Scale;\n        _viewModel.CurrentMonitor = closest;\n        _viewModel.Region = UserSettings.All.SelectedRegion = new Rect(left, top, _viewModel.Region.Width, _viewModel.Region.Height);\n    }\n\n    /// <summary>\n    /// True if the capture controls are intersecting with the capture region.\n    /// </summary>\n    /// <returns></returns>\n    private bool IsRegionIntersected()\n    {\n        return IsVisible && CaptureRegion.IntersectsWith(new Rect(Left, Top, Width, Height).Scale(_regionSelection.Scale));\n    }\n\n    private void Follow()\n    {\n        if (IsFollowing && UserSettings.All.FollowShortcut != Key.None)\n        {\n            _followTimer.Interval = (1000 / UserSettings.All.LatestFps) / 2;\n            _followTimer.Start();\n            return;\n        }\n\n        _followTimer.Stop();\n    }\n\n    private void SwitchFrequency(object sender, ExecutedRoutedEventArgs e)\n    {\n        //When this event is fired from clicking on the switch button.\n        if (e.Parameter?.Equals(\"Switch\") == true)\n        {\n            switch (UserSettings.All.CaptureFrequency)\n            {\n                case CaptureFrequencies.Manual:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.Interaction;\n                    break;\n\n                case CaptureFrequencies.Interaction:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.PerSecond;\n                    break;\n\n                case CaptureFrequencies.PerSecond:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.PerMinute;\n                    break;\n\n                case CaptureFrequencies.PerMinute:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.PerHour;\n                    break;\n\n                default: //PerHour.\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.Manual;\n                    break;\n            }\n        }\n\n        //When event is fired when the frequency is picked from the context menu, just switch the labels.\n        DetectCaptureFrequency();\n    }\n\n    private void DetectCaptureFrequency()\n    {\n        switch (UserSettings.All.CaptureFrequency)\n        {\n            case CaptureFrequencies.Manual:\n                FrequencyTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Manual.Short\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Collapsed;\n                FrequencyViewbox.Visibility = Visibility.Collapsed;\n                AdjustToManual();\n                break;\n            case CaptureFrequencies.Interaction:\n                FrequencyTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Interaction.Short\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Collapsed;\n                FrequencyViewbox.Visibility = Visibility.Collapsed;\n                AdjustToInteraction();\n                break;\n            case CaptureFrequencies.PerSecond:\n                FrequencyTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Fps.Short\");\n                FrequencyIntegerUpDown.SetResourceReference(ToolTipProperty, \"S.Recorder.Fps\");\n                FrequencyViewbox.SetResourceReference(ToolTipProperty, \"S.Recorder.Fps.Range\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Visible;\n                FrequencyViewbox.Visibility = Visibility.Visible;\n                AdjustToAutomatic();\n                break;\n\n            case CaptureFrequencies.PerMinute:\n                FrequencyTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Fpm.Short\");\n                FrequencyIntegerUpDown.SetResourceReference(ToolTipProperty, \"S.Recorder.Fpm\");\n                FrequencyViewbox.SetResourceReference(ToolTipProperty, \"S.Recorder.Fpm.Range\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Visible;\n                FrequencyViewbox.Visibility = Visibility.Visible;\n                AdjustToAutomatic();\n                break;\n\n            default: //PerHour.\n                FrequencyTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Recorder.Fph.Short\");\n                FrequencyIntegerUpDown.SetResourceReference(ToolTipProperty, \"S.Recorder.Fph\");\n                FrequencyViewbox.SetResourceReference(ToolTipProperty, \"S.Recorder.Fph.Range\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Visible;\n                FrequencyViewbox.Visibility = Visibility.Visible;\n                AdjustToAutomatic();\n                break;\n        }\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    private void AdjustToManual()\n    {\n        Stage = RecorderStages.Recording;\n        Title = \"ScreenToGif\";\n        FrameRate.Start(HasFixedDelay(), GetFixedDelay());\n\n        _regionSelection.DisplayGuidelines();\n    }\n\n    private void AdjustToInteraction()\n    {\n        Stage = Project?.Frames?.Count > 0 ? RecorderStages.Paused : RecorderStages.Stopped;\n        Title = \"ScreenToGif\";\n        FrameRate.Start(HasFixedDelay(), GetFixedDelay());\n\n        _regionSelection.DisplayGuidelines();\n    }\n\n    private void AdjustToAutomatic()\n    {\n        Stage = Project?.Frames?.Count > 0 ? RecorderStages.Paused : RecorderStages.Stopped;\n        Title = \"ScreenToGif\";\n        FrameRate.Stop();\n\n        _regionSelection.DisplayGuidelines();\n    }\n\n    internal override void StartCapture()\n    {\n        DisplayTimer.Start();\n\n        base.StartCapture();\n    }\n\n    internal override void PauseCapture()\n    {\n        DisplayTimer.Pause();\n\n        base.PauseCapture();\n    }\n\n    internal override async Task StopCapture()\n    {\n        DisplayTimer.Stop();\n\n        await base.StopCapture();\n    }\n\n    private async void DetectMonitorChanges(bool detectCurrent = false)\n    {\n        if (detectCurrent)\n        {\n            var interop = new System.Windows.Interop.WindowInteropHelper(_regionSelection);\n            var current = Screen.FromHandle(interop.Handle);\n\n            _viewModel.CurrentMonitor = _viewModel.Monitors.FirstOrDefault(f => f.Name == current.DeviceName);\n            //_viewModel.CurrentMonitor = Monitor.MostIntersected(_viewModel.Monitors, _viewModel.Region.Scale(_viewModel.CurrentMonitor.Scale)) ?? _viewModel.CurrentMonitor;\n        }\n\n        if (_viewModel.CurrentMonitor != null && _viewModel.CurrentMonitor.Handle != _viewModel.PreviousMonitor?.Handle)\n        {\n            if (_viewModel.PreviousMonitor != null && Stage == RecorderStages.Recording && Project?.Any == true)\n            {\n                Pause();\n\n                Capture.DeviceName = _viewModel.CurrentMonitor.Name;\n                Capture?.ResetConfiguration();\n\n                await Record();\n            }\n\n            _viewModel.PreviousMonitor = _viewModel.CurrentMonitor;\n        }\n    }\n\n    private void MoveWindow(int left, int top, int right, int bottom)\n    {\n        //Limit to this screen in directX capture mode.\n        var x = left > 0 ? Math.Max(_viewModel.Region.Left - left, _viewModel.MaximumBounds.Left - 1) : right > 0 ? Math.Min(_viewModel.Region.Left + right, _viewModel.MaximumBounds.Right - _viewModel.Region.Width + 1) : _viewModel.Region.Left;\n        var y = top > 0 ? Math.Max(_viewModel.Region.Top - top, _viewModel.MaximumBounds.Top - 1) : bottom > 0 ? Math.Min(_viewModel.Region.Top + bottom, _viewModel.MaximumBounds.Bottom - _viewModel.Region.Height + 1) : _viewModel.Region.Top;\n\n        _viewModel.Region = new Rect(x, y, _viewModel.RegionWidth, _viewModel.RegionHeight);\n\n        DetectMonitorChanges();\n        DisplaySelection();\n        MoveCommandPanel();\n    }\n\n    private void ResizeWindow(int left, int top, int right, int bottom)\n    {\n        //Resize to top left increases height/width when reaching the limit.\n\n        var newLeft = left < 0 ? Math.Max(_viewModel.Region.Left + left, _viewModel.MaximumBounds.Left - 1) : left > 0 ? _viewModel.Region.Left + left : _viewModel.Region.Left;\n        var newTop = top < 0 ? Math.Max(_viewModel.Region.Top + top, _viewModel.MaximumBounds.Top - 1) : top > 0 ? _viewModel.Region.Top + top : _viewModel.Region.Top;\n        var width = (right > 0 ? Math.Min(_viewModel.Region.Width + right, _viewModel.MaximumBounds.Right - _viewModel.Region.Left + 1) - left : right < 0 ? _viewModel.Region.Width + right + (left > 0 ? -left : 0) : _viewModel.Region.Width - left);\n        var height = (bottom > 0 ? Math.Min(_viewModel.Region.Height + bottom, _viewModel.MaximumBounds.Bottom - _viewModel.Region.Top + 1) - top : bottom < 0 ? _viewModel.Region.Height + bottom + (top > 0 ? -top : 0) : _viewModel.Region.Height - top);\n\n        //Ignore input if the new size will be smaller than the minimum.\n        if ((height < 25 && (top > 0 || bottom < 0)) || (width < 25 && (left > 0 || right < 0)))\n            return;\n\n        _viewModel.Region = new Rect(newLeft, newTop, width, height);\n\n        DetectMonitorChanges();\n        DisplaySelection();\n        MoveCommandPanel();\n    }\n\n    private void SetTaskbarButtonOverlay()\n    {\n        try\n        {\n            switch (Stage)\n            {\n                case RecorderStages.Stopped:\n                    TaskbarItemInfo.Overlay = null;\n                    return;\n                case RecorderStages.Recording:\n                    if (UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual)\n                        TaskbarItemInfo.Overlay = new DrawingImage((FindResource(\"Vector.Record\") as DrawingBrush)?.Drawing);\n                    else\n                        TaskbarItemInfo.Overlay = null;\n                    return;\n                case RecorderStages.Paused:\n                    TaskbarItemInfo.Overlay = new DrawingImage((FindResource(\"Vector.Pause\") as DrawingBrush)?.Drawing);\n                    return;\n                case RecorderStages.Discarding:\n                    TaskbarItemInfo.Overlay = new DrawingImage((FindResource(\"Vector.Remove\") as DrawingBrush)?.Drawing);\n                    return;\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to set the taskbar button overlay\");\n        }\n    }\n\n    private void AdjustForWidthChange()\n    {\n        MoveCommandPanel(true);\n        Show();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Options.xaml",
    "content": "<c:ExWindow x:Class=\"ScreenToGif.Windows.Options\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Options.Title}\" Height=\"610\" Width=\"800\" MinWidth=\"780\" MinHeight=\"460\" \n            Icon=\"/Resources/Logo.ico\" ShowCustomCaptionButtons=\"True\" ExtendIntoTitleBar=\"False\"\n            SizeToContent=\"Width\" WindowStartupLocation=\"CenterScreen\" UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\"\n            Loaded=\"Window_Loaded\" Closing=\"Window_Closing\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Margin=\"3\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"90\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <!--Options-->\n            <ListView Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"SectionsListView\" Margin=\"0\" MaxWidth=\"180\" MinWidth=\"130\" BorderThickness=\"0\"\n                      Background=\"Transparent\" ScrollViewer.HorizontalScrollBarVisibility=\"Disabled\" SelectionChanged=\"SectionsListView_SelectionChanged\">\n                <ListView.Resources>\n                    <Style BasedOn=\"{StaticResource {x:Type c:ExListViewItem}}\" TargetType=\"{x:Type c:ExListViewItem}\">\n                        <Setter Property=\"Padding\" Value=\"2,2,2,2\"/>\n                        <Setter Property=\"FontSize\" Value=\"17\"/>\n                        <Setter Property=\"FontFamily\" Value=\"{DynamicResource FontFamilyLight}\"/>\n                        <Setter Property=\"Cursor\" Value=\"Hand\"/>\n                        <Setter Property=\"ContentWidth\" Value=\"24\"/>\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\n                    </Style>\n                </ListView.Resources>\n\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.App}\" Icon=\"{StaticResource Vector.Application}\" IsSelected=\"True\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Recorder}\" Icon=\"{StaticResource Vector.Record}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Editor}\" Icon=\"{StaticResource Vector.Editor}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Tasks}\" Icon=\"{StaticResource Vector.Encoder}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Shortcuts}\" Icon=\"{StaticResource Vector.Keyboard}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Language}\" Icon=\"{StaticResource Vector.Translate}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Storage}\" Icon=\"{StaticResource Vector.Temporary}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Upload}\" Icon=\"{StaticResource Vector.Web}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Extras}\" Icon=\"{StaticResource Vector.Extras}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.Donate}\" Icon=\"{StaticResource Vector.Money}\"/>\n                <c:ExListViewItem Content=\"{DynamicResource S.Options.About}\" Icon=\"{StaticResource Vector.Info}\"/>\n            </ListView>\n\n            <Frame Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"Frame\" JournalOwnership=\"UsesParentJournal\" Focusable=\"False\" IsTabStop=\"False\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"110\"/>\n            </Grid.ColumnDefinitions>\n\n            <c:ExtendedButton Grid.Column=\"2\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Margin=\"5\" Padding=\"2,0\" \n                              ContentHeight=\"18\" ContentWidth=\"18\" Icon=\"{StaticResource Vector.Ok}\" Click=\"OkButton_Click\"/>\n        </Grid>\n    </Grid>\n</c:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Options.xaml.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Views.Settings;\nusing ScreenToGif.Windows.Other;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Interop;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Windows;\n\npublic partial class Options : INotification\n{\n    internal const int ApplicationIndex = 0;\n    internal const int RecorderIndex = 1;\n    internal const int EditorIndex = 2;\n    internal const int TasksIndex = 3;\n    internal const int ShortcutsIndex = 4;\n    internal const int LanguageIndex = 5;\n    internal const int StorageIndex = 6;\n    internal const int UploadIndex = 7;\n    internal const int PluginsIndex = 8;\n    internal const int DonateIndex = 9;\n    internal const int AboutIndex = 10;\n    \n    public Options()\n    {\n        InitializeComponent();\n    }\n\n    public Options(int index) : this()\n    {\n        Navigate(index);\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        Navigate(SectionsListView.SelectedIndex);\n\n        SizeToContent = SizeToContent.Manual;\n    }\n\n    private void SectionsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        if (IsLoaded)\n            Navigate(SectionsListView.SelectedIndex);\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        #region Validation\n\n        if (UserSettings.All.CursorFollowing && UserSettings.All.FollowShortcut == Key.None)\n        {\n            Dialog.Ok(LocalizationHelper.Get(\"S.Options.Title\"), LocalizationHelper.Get(\"S.Options.Warning.Follow.Header\"),\n                LocalizationHelper.Get(\"S.Options.Warning.Follow.Message\"), Icons.Warning);\n\n            SectionsListView.SelectedIndex = ShortcutsIndex;\n\n            e.Cancel = true;\n            return;\n        }\n\n        #endregion\n\n        Global.IgnoreHotKeys = false;\n\n        BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailure = UserSettings.All.WorkaroundQuota ? BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailureOptions.Reset : BaseCompatibilityPreferences.HandleDispatcherRequestProcessingFailureOptions.Continue;\n        RenderOptions.ProcessRenderMode = UserSettings.All.DisableHardwareAcceleration ? RenderMode.SoftwareOnly : RenderMode.Default;\n\n        UserSettings.Save();\n    }\n    \n    private void Navigate(int tabIndex)\n    {\n        switch (tabIndex)\n        {\n            case ApplicationIndex:\n                Frame.Navigate(new ApplicationSettings());\n                break;\n\n            case RecorderIndex:\n                Frame.Navigate(new RecorderSettings());\n                break;\n\n            case EditorIndex:\n                Frame.Navigate(new EditorSettings());\n                break;\n\n            case TasksIndex:\n                Frame.Navigate(new TasksSettings());\n                break;\n\n            case ShortcutsIndex:\n                Frame.Navigate(new ShortcutsSettings());\n                break;\n\n            case LanguageIndex:\n                Frame.Navigate(new LanguageSettings());\n                break;\n\n            case StorageIndex:\n                Frame.Navigate(new StorageSettings());\n                break;\n\n            case UploadIndex:\n                Frame.Navigate(new UploadSettings());\n                break;\n\n            case PluginsIndex:\n                Frame.Navigate(new PluginSettings());\n                break;\n\n            case DonateIndex:\n                Frame.Navigate(new DonateSettings());\n                break;\n\n            case AboutIndex:\n                Frame.Navigate(new AboutSettings());\n                break;\n\n            default:\n                Frame.Navigate(null);\n                break;\n        }\n    }\n\n    public void NotificationUpdated()\n    {\n        //LowSpaceTextBlock.Visibility = Global.AvailableDiskSpace > 2_000_000_000 ? Visibility.Collapsed : Visibility.Visible; //2 GB.\n    }\n\n    internal void SelectTab(int index)\n    {\n        if (index <= -1 || index >= SectionsListView.Items.Count - 1)\n            return;\n\n        SectionsListView.SelectedIndex = index;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/AutomatedTask.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.AutomatedTask\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n            xmlns:u=\"clr-namespace:ScreenToGif.Util\"\n            xmlns:t=\"clr-namespace:ScreenToGif.ViewModel.Tasks;assembly=ScreenToGif.ViewModel\"\n            Title=\"{DynamicResource S.Options.Tasks.Title}\" Width=\"370\" Height=\"400\" MinWidth=\"350\" MinHeight=\"300\" \n            WindowStartupLocation=\"CenterScreen\" SnapsToDevicePixels=\"True\"\n            Icon=\"/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <n:ExWindow.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Ok}\" CanExecute=\"Ok_CanExecute\" Executed=\"Ok_Executed\"/>\n    </n:ExWindow.CommandBindings>\n\n    <n:ExWindow.Resources>\n        <c:KeyToResource x:Key=\"StringToStaticResource\"/>\n        <c:NullToVisibility x:Key=\"NullToVisibility\"/>\n        <u:ComboBoxItemTemplateSelector x:Key=\"ItemSelector\"/>\n    </n:ExWindow.Resources>\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"35\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" x:Name=\"MainBorder\" Margin=\"6\" Background=\"{StaticResource Vector.Add}\" Width=\"23\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeTextBlock\" Text=\"{DynamicResource S.Add}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <ComboBox Grid.Column=\"2\" x:Name=\"TypeComboBox\" Margin=\"5,3\" SelectedIndex=\"0\" ItemTemplateSelector=\"{StaticResource ItemSelector}\" SelectionChanged=\"TypeComboBox_Selected\">\n                <u:ComboBoxItemTemplateSelector.SelectedTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"30\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Column=\"0\" Background=\"{Binding Image, Converter={StaticResource StringToStaticResource}}\" Width=\"14\" Height=\"14\" Margin=\"3,2,6,2\"/>\n\n                            <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"0\"/>\n                            <TextBlock Grid.Column=\"2\" Text=\"{Binding Kind}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n                        </Grid>\n                    </DataTemplate>\n                </u:ComboBoxItemTemplateSelector.SelectedTemplate>\n\n                <u:ComboBoxItemTemplateSelector.DropDownTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"30\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Column=\"0\" Background=\"{Binding Image, Converter={StaticResource StringToStaticResource}}\" Width=\"20\" Height=\"20\" Margin=\"3,3,6,3\"/>\n\n                            <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"0\"/>\n                            <TextBlock Grid.Column=\"2\" Text=\"{Binding Kind}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n                        </Grid>\n                    </DataTemplate>\n                </u:ComboBoxItemTemplateSelector.DropDownTemplate>\n\n                <t:BaseTaskViewModel Image=\"Vector.Info\"/>\n                <t:MouseEventsViewModel Image=\"Vector.Cursor\"/>\n                <t:KeyStrokesViewModel Image=\"Vector.Keyboard\"/>\n                <t:DelayViewModel Image=\"Vector.Clock\"/>\n                <t:ProgressViewModel Image=\"Vector.Progress\"/>\n                <t:BorderViewModel Image=\"Vector.Border\"/>\n                <t:ShadowViewModel Image=\"Vector.Shadow\"/>\n            </ComboBox>\n        </Grid>\n\n        <ScrollViewer Grid.Row=\"1\" VerticalScrollBarVisibility=\"Auto\">\n            <ContentControl x:Name=\"MainPresenter\" Focusable=\"False\"/>\n        </ScrollViewer>\n\n        <TextBlock Grid.Row=\"1\" FontSize=\"20\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" TextAlignment=\"Center\" TextWrapping=\"Wrap\"\n                   Foreground=\"{DynamicResource Element.Foreground.Gray192}\" FontFamily=\"{DynamicResource FontFamilyLight}\" Effect=\"{StaticResource Shadow.Background.Tiny}\"\n                   Visibility=\"{Binding ElementName=MainPresenter, Path=Content, Converter={StaticResource NullToVisibility}}\">\n            <Run Text=\"▲\"/>\n            <LineBreak/>\n            <Run Text=\"{DynamicResource S.Options.Tasks.SelectType.Info}\"/>\n        </TextBlock>\n        \n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedCheckBox Grid.Column=\"0\" x:Name=\"EnabledCheckBox\" Text=\"{DynamicResource S.Options.Tasks.Enable}\" Margin=\"5,3\" Visibility=\"Collapsed\"\n                                IsChecked=\"{Binding ElementName=MainPresenter, Path=Content.DataContext.IsEnabled, FallbackValue=True}\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" ContentHeight=\"18\" ContentWidth=\"18\" \n                              Padding=\"4,0\" Margin=\"5\" Command=\"{StaticResource Command.Ok}\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" ContentHeight=\"18\" ContentWidth=\"18\" \n                              Padding=\"4,0\" Margin=\"5\" Click=\"CancelButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/AutomatedTask.xaml.cs",
    "content": "using System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.UserControls;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.Tasks;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class AutomatedTask\n{\n    public BaseTaskViewModel CurrentTask { get; set; }\n\n    public bool IsEditing { get; set; }\n\n    public AutomatedTask()\n    {\n        InitializeComponent();\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        TypeComboBox.Focus();\n\n        if (IsEditing)\n        {\n            MainBorder.Background = TryFindResource(\"Vector.Pen\") as Brush;\n            TypeTextBlock.Text = LocalizationHelper.Get(\"S.Edit\");\n            TypeComboBox.SelectedIndex = (int)(CurrentTask?.TaskType ?? TaskTypes.NotDeclared);\n            TypeComboBox.IsEnabled = false;\n            EnabledCheckBox.Visibility = Visibility.Visible;\n\n            TypeComboBox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n        }\n    }\n\n    private void TypeComboBox_Selected(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (TypeComboBox.SelectedIndex < 1)\n        {\n            MainPresenter.Content = null;\n            return;\n        }\n\n        if (!IsEditing)\n        {\n            //Create a new model.\n            switch ((TaskTypes)TypeComboBox.SelectedIndex)\n            {\n                case TaskTypes.MouseEvents:\n                    CurrentTask = MouseEventsViewModel.Default();\n                    break;\n                case TaskTypes.KeyStrokes:\n                    CurrentTask = KeyStrokesViewModel.Default();\n                    break;\n                case TaskTypes.Delay:\n                    CurrentTask = DelayViewModel.Default();\n                    break;\n                case TaskTypes.Progress:\n                    CurrentTask = ProgressViewModel.Default();\n                    break;\n                case TaskTypes.Border:\n                    CurrentTask = BorderViewModel.Default();\n                    break;\n                case TaskTypes.Shadow:\n                    CurrentTask = ShadowViewModel.Default();\n                    break;\n            }\n        }\n\n        switch ((TaskTypes)TypeComboBox.SelectedIndex)\n        {\n            case TaskTypes.MouseEvents:\n                MainPresenter.Content = new MouseEventsPanel { DataContext = CurrentTask };\n                break;\n            case TaskTypes.KeyStrokes:\n                MainPresenter.Content = new KeyStrokesPanel { DataContext = CurrentTask };\n                break;\n            case TaskTypes.Delay:\n                MainPresenter.Content = new DelayPanel { DataContext = CurrentTask };\n                break;\n            case TaskTypes.Progress:\n                MainPresenter.Content = new ProgressPanel { DataContext = CurrentTask };\n                break;\n            case TaskTypes.Border:\n                MainPresenter.Content = new BorderPanel { DataContext = CurrentTask };\n                break;\n            case TaskTypes.Shadow:\n                MainPresenter.Content = new ShadowPanel { DataContext = CurrentTask };\n                break;\n        }\n    }\n\n    private void Ok_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && TypeComboBox.SelectedIndex > 0;\n    }\n\n    private void Ok_Executed(object sender, RoutedEventArgs e)\n    {\n        OkButton.Focus();\n\n        DialogResult = true;\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/CacheDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.CacheDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Options.Storage.Cache.Title}\" Height=\"260\" Width=\"600\"\n            MinHeight=\"260\" MinWidth=\"450\" SizeToContent=\"Height\" WindowStartupLocation=\"CenterScreen\"\n            Icon=\"/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Margin=\"5\" Background=\"{StaticResource Vector.Delete.Folder}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label Content=\"{DynamicResource S.Options.Storage.Cache.Header}\" Margin=\"3\" Grid.Column=\"1\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <TextBlock Grid.Row=\"2\" Margin=\"25,5,10,5\" FontSize=\"14\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground}\">\n            <Run Text=\"{DynamicResource S.Options.Storage.Cache.Info}\"/>\n            <LineBreak/>\n            <LineBreak/>\n            <Run Text=\"{DynamicResource S.Options.Storage.Cache.Question}\"/>\n        </TextBlock>\n\n        <Grid Grid.Row=\"3\" x:Name=\"OptionsGrid\" Margin=\"20,0,5,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Separator Grid.Row=\"0\" Height=\"1\" Margin=\"5,3\"/>\n\n            <n:ExtendedCheckBox Grid.Row=\"1\" x:Name=\"IgnoreRecentCheckBox\" Text=\"{DynamicResource S.Options.Storage.Cache.IgnoreRecent}\" Margin=\"5,3\" FontSize=\"14\"\n                                VerticalContentAlignment=\"Center\" IsChecked=\"True\" CheckedChanged=\"CheckBox_CheckedChanged\"/>\n\n            <TextBlock Grid.Row=\"2\" x:Name=\"InfoTextBlock\" Margin=\"25,5,10,5\" FontSize=\"14\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground.Gray150}\"\n                       Text=\"{DynamicResource S.Options.Storage.Cache.IgnoreRecent.Yes}\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"YesButton\" Text=\"{DynamicResource S.Yes}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"YesButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.No}\" Icon=\"{StaticResource Vector.No}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"NoButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/CacheDialog.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class CacheDialog\n{\n    #region Properties\n\n    private bool DisplayOptions { get; set; }\n    \n    /// <summary>\n    /// True if the removal process should ignore recent projects.\n    /// </summary>\n    public bool IgnoreRecent { get; set; }\n\n    #endregion\n\n\n    public CacheDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (!DisplayOptions)\n        {\n            OptionsGrid.Visibility = Visibility.Collapsed;\n            return;\n        }\n\n        DisplayInfo();\n    }\n\n    private void CheckBox_CheckedChanged(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        DisplayInfo();\n    }\n\n    private void YesButton_Click(object sender, RoutedEventArgs e)\n    {\n        IgnoreRecent = IgnoreRecentCheckBox.IsChecked == true;\n        DialogResult = true;\n    }\n\n    private void NoButton_Click(object sender, RoutedEventArgs e)\n    {\n        GC.Collect();\n        DialogResult = false;\n    }\n\n\n    private void DisplayInfo()\n    {\n        InfoTextBlock.Text = IgnoreRecentCheckBox.IsChecked == true ? \n            LocalizationHelper.GetWithFormat(\"S.Options.Storage.Cache.IgnoreRecent.Yes\", \"Only the projects older than {0} days, that are not currently in use, will be removed.\", UserSettings.All.AutomaticCleanUpDays) : \n            LocalizationHelper.Get(\"S.Options.Storage.Cache.IgnoreRecent.No\");\n    }\n\n    /// <summary>\n    /// Shows a Yes/No dialog.\n    /// </summary>\n    /// <param name=\"displayOptions\">True if the options should be displayed.</param>\n    /// <param name=\"ignoreRecent\">True if the recent projects should be ignored.</param>\n    /// <returns>True if Yes</returns>\n    public static bool Ask(bool displayOptions, out bool ignoreRecent)\n    {\n        var dialog = new CacheDialog\n        {\n            DisplayOptions = displayOptions\n        };\n        var result = dialog.ShowDialog();\n        ignoreRecent = dialog.IgnoreRecent;\n\n        return result.HasValue && result.Value;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/ColorSelector.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.ColorSelector\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:presentationOptions=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation/options\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n            Title=\"{DynamicResource S.ColorSelector.Title}\" Height=\"350\" Width=\"640\" MinWidth=\"640\" MinHeight=\"350\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\"\n            WindowStartupLocation=\"CenterScreen\" Topmost=\"True\" SizeToContent=\"Width\" Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"*\" MinWidth=\"330\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n        </Grid.ColumnDefinitions>\n\n        <Border Grid.Column=\"0\" Margin=\"5,5,5,29\" Effect=\"{StaticResource Shadow.Border.Large}\">\n            <Border.Background>\n                <DrawingBrush Viewport=\"0,0,10,10\" ViewportUnits=\"Absolute\" TileMode=\"Tile\">\n                    <DrawingBrush.Drawing>\n                        <DrawingGroup>\n                            <GeometryDrawing Brush=\"White\">\n                                <GeometryDrawing.Geometry>\n                                    <RectangleGeometry Rect=\"0,0 100,100\"/>\n                                </GeometryDrawing.Geometry>\n                            </GeometryDrawing>\n                            <GeometryDrawing Brush=\"LightGray\">\n                                <GeometryDrawing.Geometry>\n                                    <GeometryGroup>\n                                        <RectangleGeometry Rect=\"0,0 50,50\"/>\n                                        <RectangleGeometry Rect=\"50,50 50,50\"/>\n                                    </GeometryGroup>\n                                </GeometryDrawing.Geometry>\n                            </GeometryDrawing>\n                        </DrawingGroup>\n                    </DrawingBrush.Drawing>\n                </DrawingBrush>\n            </Border.Background>\n        </Border>\n\n        <Border Grid.Column=\"0\" x:Name=\"ColorDetail\" HorizontalAlignment=\"Stretch\" Cursor=\"Cross\" Margin=\"5,5,5,29\" ClipToBounds=\"True\"\n                Effect=\"{StaticResource Shadow.Border.Large}\" IsEnabled=\"False\" SizeChanged=\"ColorDetailBorder_SizeChanged\" \n                PreviewMouseMove=\"ColorDetailBorder_MouseMove\" PreviewMouseLeftButtonDown=\"ColorDetailBorder_MouseLeftButtonDown\" \n                MouseLeftButtonUp=\"ColorDetailBorder_MouseLeftButtonUp\">\n\n            <Border.Resources>\n                <c:AlphaToOpacity x:Key=\"AlphaToOpacity\"/>\n            </Border.Resources>\n\n            <Border.Background>\n                <DrawingBrush Opacity=\"{Binding Path=Value, ElementName=AlphaIntegerUpDown, Converter={StaticResource AlphaToOpacity}}\">\n                    <DrawingBrush.Drawing>\n                        <DrawingGroup>\n                            <GeometryDrawing>\n                                <GeometryDrawing.Geometry>\n                                    <RectangleGeometry Rect=\"0,0,100,100\"/>\n                                </GeometryDrawing.Geometry>\n                                <GeometryDrawing.Brush>\n                                    <SolidColorBrush Color=\"{Binding SelectedColor, ElementName=ColorSlider}\"/>\n                                </GeometryDrawing.Brush>\n                            </GeometryDrawing>\n                            <GeometryDrawing>\n                                <GeometryDrawing.Geometry>\n                                    <RectangleGeometry Rect=\"0,0,100,100\"/>\n                                </GeometryDrawing.Geometry>\n                                <GeometryDrawing.Brush>\n                                    <LinearGradientBrush StartPoint=\"0.5,1\" EndPoint=\"0.5,0\">\n                                        <GradientStop Offset=\"0.0\" Color=\"Black\"/>\n                                        <GradientStop Offset=\"1.0\" Color=\"{Binding SelectedColor, ElementName=ColorSlider}\"/>\n                                    </LinearGradientBrush>\n                                </GeometryDrawing.Brush>\n                            </GeometryDrawing>\n                            <DrawingGroup presentationOptions:Freeze=\"True\">\n                                <DrawingGroup.OpacityMask>\n                                    <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                                        <GradientStop Offset=\"0.0\" Color=\"#FF000000\"/>\n                                        <GradientStop Offset=\"1\" Color=\"#00000000\"/>\n                                    </LinearGradientBrush>\n                                </DrawingGroup.OpacityMask>\n                                <GeometryDrawing>\n                                    <GeometryDrawing.Geometry>\n                                        <RectangleGeometry Rect=\"0,0,100,100\"/>\n                                    </GeometryDrawing.Geometry>\n                                    <GeometryDrawing.Brush>\n                                        <LinearGradientBrush StartPoint=\"0.5,0\" EndPoint=\"0.5,1\">\n                                            <GradientStop Offset=\"0.0\" Color=\"White\"/>\n                                            <GradientStop Offset=\"1\" Color=\"Black\"/>\n                                        </LinearGradientBrush>\n                                    </GeometryDrawing.Brush>\n                                </GeometryDrawing>\n                            </DrawingGroup>\n                        </DrawingGroup>\n                    </DrawingBrush.Drawing>\n                </DrawingBrush>\n            </Border.Background>\n\n            <Border.Triggers>\n                <!--To prevent false MouseUps during load. xD-->\n                <EventTrigger RoutedEvent=\"Border.Loaded\">\n                    <BeginStoryboard>\n                        <Storyboard BeginTime=\"00:00:00\" Storyboard.TargetName=\"ColorDetail\" Storyboard.TargetProperty=\"(IsEnabled)\">\n                            <BooleanAnimationUsingKeyFrames>\n                                <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0.2\"/>\n                            </BooleanAnimationUsingKeyFrames>\n                        </Storyboard>\n                    </BeginStoryboard>\n                </EventTrigger>\n            </Border.Triggers>\n\n            <Path x:Name=\"ColorMarker\" StrokeThickness=\"2\" Cursor=\"Cross\" Fill=\"Transparent\" RenderTransformOrigin=\"0.5,0.5\" Effect=\"{DynamicResource Shadow.Border.Small}\">\n                <Path.Data>\n                    <EllipseGeometry RadiusX=\"7\" RadiusY=\"7\"/>\n                </Path.Data>\n\n                <Path.Stroke>\n                    <RadialGradientBrush>\n                        <GradientStop Color=\"Black\" Offset=\"0.5\"/>\n                        <GradientStop Color=\"White\" Offset=\"1\"/>\n                        <GradientStop Color=\"White\"/>\n                        <GradientStop Color=\"Black\" Offset=\"0.3\"/>\n                        <GradientStop Color=\"Black\" Offset=\"0.7\"/>\n                    </RadialGradientBrush>\n                </Path.Stroke>\n            </Path>\n        </Border>\n\n        <Grid Grid.Column=\"0\" Margin=\"5,0,5,5\" Height=\"19\" VerticalAlignment=\"Bottom\" Effect=\"{StaticResource Shadow.Border.Large}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\".15*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Grid.ColumnSpan=\"3\">\n                <Border.Background>\n                    <DrawingBrush Viewport=\"0,0,10,10\" ViewportUnits=\"Absolute\" TileMode=\"Tile\">\n                        <DrawingBrush.Drawing>\n                            <DrawingGroup>\n                                <GeometryDrawing Brush=\"White\">\n                                    <GeometryDrawing.Geometry>\n                                        <RectangleGeometry Rect=\"0,0 100,100\"/>\n                                    </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                                <GeometryDrawing Brush=\"LightGray\">\n                                    <GeometryDrawing.Geometry>\n                                        <GeometryGroup>\n                                            <RectangleGeometry Rect=\"0,0 50,50\"/>\n                                            <RectangleGeometry Rect=\"50,50 50,50\"/>\n                                        </GeometryGroup>\n                                    </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                            </DrawingGroup>\n                        </DrawingBrush.Drawing>\n                    </DrawingBrush>\n                </Border.Background>\n            </Border>\n\n            <Border Name=\"InitialColor\" Grid.Column=\"0\" Background=\"White\" Cursor=\"Hand\" \n                    ToolTip=\"{DynamicResource S.ColorSelector.Initial}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                    MouseLeftButtonDown=\"InitialColor_MouseLeftButtonDown\"/>\n\n            <Border Name=\"CurrentColor\" Grid.Column=\"1\" Background=\"White\"\n                    ToolTip=\"{DynamicResource S.ColorSelector.Current}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n            <Border Name=\"LastColor\" Grid.Column=\"2\" Background=\"White\"\n                    ToolTip=\"{DynamicResource S.ColorSelector.Latest}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n        </Grid>\n\n        <n:SpectrumSlider Grid.Column=\"1\" x:Name=\"ColorSlider\" Value=\"0\" IsMoveToPointEnabled=\"True\" IsSnapToTickEnabled=\"False\" Maximum=\"360\" \n                          Orientation=\"Vertical\" HorizontalAlignment=\"Right\" Width=\"36\" Margin=\"0,5\" Effect=\"{StaticResource Shadow.Border.Large}\"\n                          ValueChanged=\"ColorSlider_ValueChanged\" AfterSelecting=\"ColorSlider_OnAfterSelecting\"/>\n\n        <n:SpectrumSlider Grid.Column=\"2\" x:Name=\"AlphaSlider\" Value=\"0\" IsMoveToPointEnabled=\"True\" IsSnapToTickEnabled=\"False\" Maximum=\"255\" \n                          Orientation=\"Vertical\" HorizontalAlignment=\"Right\" Width=\"36\" Margin=\"5,5,0,5\" IsAlphaSpectrum=\"True\" Effect=\"{StaticResource Shadow.Border.Large}\" \n                          ToolTip=\"{DynamicResource S.ColorSelector.Alpha}\" ValueChanged=\"ColorSlider_ValueChanged\" AfterSelecting=\"ColorSlider_OnAfterSelecting\"/>\n\n        <Grid Grid.Column=\"3\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"29\"/>\n                <RowDefinition Height=\"32\"/>\n                <RowDefinition Height=\"32\"/>\n                <RowDefinition Height=\"32\"/>\n                <RowDefinition Height=\"32\"/>\n                <RowDefinition Height=\"5\"/>\n                <RowDefinition Height=\"33\"/>\n                <RowDefinition/>\n                <RowDefinition Height=\"38\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"50\"/>\n                <ColumnDefinition Width=\"*\" MinWidth=\"90\"/>\n            </Grid.ColumnDefinitions>\n\n            <Label Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Content=\"{DynamicResource S.ColorSelector.Select}\" FontSize=\"14\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <Label Grid.Row=\"1\" Grid.Column=\"0\" Content=\"{DynamicResource S.ColorSelector.Red}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"5\" VerticalContentAlignment=\"Center\" Padding=\"3\"/>\n            <n:IntegerUpDown Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"RedIntegerUpDown\" Margin=\"5,3\" MaxLength=\"4\" Padding=\"2,0\" Maximum=\"255\" \n                             MouseWheel=\"ValueBox_MouseWheel\" ValueChanged=\"ArgbText_ValueChanged\"/>\n\n            <Label Grid.Row=\"2\" Grid.Column=\"0\" Content=\"{DynamicResource S.ColorSelector.Green}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"5\" VerticalContentAlignment=\"Center\" Padding=\"3\"/>\n            <n:IntegerUpDown Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"GreenIntegerUpDown\" Margin=\"5,3\" MaxLength=\"4\" Padding=\"2,0\" Maximum=\"255\" \n                             MouseWheel=\"ValueBox_MouseWheel\" ValueChanged=\"ArgbText_ValueChanged\"/>\n\n            <Label Grid.Row=\"3\" Grid.Column=\"0\" Content=\"{DynamicResource S.ColorSelector.Blue}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"5\" VerticalContentAlignment=\"Center\" Padding=\"3\"/>\n            <n:IntegerUpDown Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"BlueIntegerUpDown\" Margin=\"5,3\" MaxLength=\"4\" Padding=\"2,0\" Maximum=\"255\"\n                             MouseWheel=\"ValueBox_MouseWheel\" ValueChanged=\"ArgbText_ValueChanged\"/>\n\n            <Label Grid.Row=\"4\" Grid.Column=\"0\" x:Name=\"AlphaLabel\" Content=\"{DynamicResource S.ColorSelector.Alpha}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"5\" VerticalContentAlignment=\"Center\" Padding=\"3\"/>\n            <n:IntegerUpDown Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"AlphaIntegerUpDown\" Margin=\"5,3\" MaxLength=\"4\" Padding=\"2,0\" Maximum=\"255\" \n                             MouseWheel=\"ValueBox_MouseWheel\" ValueChanged=\"ArgbText_ValueChanged\"/>\n\n            <Separator Grid.Row=\"5\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Height=\"1\"/>\n\n            <Label Grid.Row=\"6\" Grid.Column=\"0\" Content=\"{DynamicResource S.ColorSelector.Hexadecimal}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"5\" VerticalContentAlignment=\"Center\" Padding=\"3\"/>\n            <n:HexadecimalBox Grid.Row=\"6\" Grid.Column=\"1\" x:Name=\"ColorHexadecimalBox\" Margin=\"5\" Padding=\"2,0\" \n                              Alpha=\"{Binding ElementName=AlphaIntegerUpDown, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                              Red=\"{Binding ElementName=RedIntegerUpDown, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                              Green=\"{Binding ElementName=GreenIntegerUpDown, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n                              Blue=\"{Binding ElementName=BlueIntegerUpDown, Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <Grid Grid.Row=\"7\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\">\n                <n:ExtendedButton x:Name=\"EyeDropperButton\" Icon=\"{StaticResource Vector.Crosshair}\" Margin=\"5\" Style=\"{StaticResource Style.Button.Vertical}\" \n                                  Text=\"{DynamicResource S.ColorSelector.Sample}\" HorizontalContentAlignment=\"Center\" ContentHeight=\"20\" ContentWidth=\"20\" Padding=\"3\" TabIndex=\"2\" \n                                  ToolTip=\"{DynamicResource S.ColorSelector.Sample.Info}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\" PreviewMouseDown=\"EyeDropperButton_PreviewMouseDown\"/>\n\n                <Image x:Name=\"EyeDropperImage\" Margin=\"5\" Opacity=\"0\" IsHitTestVisible=\"False\" RenderOptions.BitmapScalingMode=\"NearestNeighbor\" Effect=\"{StaticResource Shadow.Border.Small}\" \n                       Stretch=\"Uniform\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Width=\"{Binding ElementName=EyeDropperButton, Path=ActualWidth}\" Height=\"{Binding ElementName=EyeDropperButton, Path=ActualHeight}\"/>\n\n                <Border Opacity=\"{Binding ElementName=EyeDropperImage, Path=Opacity}\" Background=\"{StaticResource Vector.Crosshair.Color}\" \n                        VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsHitTestVisible=\"False\" Height=\"50\" Width=\"50\"/>\n            </Grid>\n\n            <Grid Grid.Row=\"8\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Margin=\"3,0,0,0\" Background=\"{DynamicResource Panel.Background.Level3}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedButton Grid.Column=\"0\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Margin=\"5\" Icon=\"{StaticResource Vector.Ok}\"\n                                  MinWidth=\"70\" MinHeight=\"25\" ContentWidth=\"16\" ContentHeight=\"16\" Click=\"OkButton_Click\"/>\n                <n:ExtendedButton Grid.Column=\"1\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Margin=\"5\" Icon=\"{StaticResource Vector.Cancel}\"\n                                  MinWidth=\"70\" MinHeight=\"25\" ContentWidth=\"16\" ContentHeight=\"16\" IsCancel=\"True\"/>\n            </Grid>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/ColorSelector.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Codification;\n\n//Nicke Manarin - ScreenToGif - 26/02/2014, Updated 16/10/2016, Updated 31/05/2018, Again in 26/09/2019, 28/06/2020.\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class ColorSelector\n{\n    #region Properties and variables\n\n    /// <summary>\n    /// The selected color.\n    /// </summary>\n    public Color SelectedColor { get; set; }\n\n    private readonly TranslateTransform _markerTransform = new();\n    private Point? _colorPosition;\n    private Size _captureSize;\n    private bool _isUpdating = false;\n\n    #endregion\n\n    public ColorSelector(Color selectedColor, bool showAlpha = true)\n    {\n        InitializeComponent();\n\n        SelectedColor = selectedColor;\n\n        UpdateMarkerPosition(SelectedColor);\n        LastColor.Background = CurrentColor.Background;\n\n        ColorMarker.RenderTransform = _markerTransform;\n        ColorMarker.RenderTransformOrigin = new Point(0.5, 0.5);\n\n        if (!showAlpha)\n        {\n            AlphaIntegerUpDown.Visibility = Visibility.Collapsed;\n            AlphaLabel.Visibility = Visibility.Collapsed;\n            ColorHexadecimalBox.DisplayAlpha = false;\n            AlphaSlider.Visibility = Visibility.Collapsed;\n            MinHeight = 350;\n        }\n\n        InitialColor.Background = CurrentColor.Background = LastColor.Background = new SolidColorBrush(selectedColor);\n    }\n\n    #region Events\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        _isUpdating = true;\n\n        AlphaIntegerUpDown.Value = SelectedColor.A;\n        RedIntegerUpDown.Value = SelectedColor.R;\n        GreenIntegerUpDown.Value = SelectedColor.G;\n        BlueIntegerUpDown.Value = SelectedColor.B;\n\n        _isUpdating = false;\n    }\n\n    private void ColorSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)\n    {\n        if (_colorPosition != null)\n            DetermineColor((Point) _colorPosition);\n    }\n        \n    private void ColorDetailBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        Mouse.Capture(ColorDetail);\n        var p = e.GetPosition(ColorDetail);\n\n        UpdateMarkerPosition(p);\n        LastColor.Background = CurrentColor.Background;\n    }\n\n    private void ColorDetailBorder_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (e.LeftButton != MouseButtonState.Pressed)\n            return;\n\n        var p = e.GetPosition(ColorDetail);\n        var withinBoundaries = new Point(Math.Max(0, Math.Min(p.X, ColorDetail.ActualWidth)), Math.Max(0, Math.Min(p.Y, ColorDetail.ActualHeight)));\n\n        UpdateMarkerPosition(withinBoundaries);\n        Mouse.Synchronize();\n    }\n\n    private void ColorDetailBorder_SizeChanged(object sender, SizeChangedEventArgs args)\n    {\n        if (args.PreviousSize != Size.Empty && args.PreviousSize.Width != 0 && args.PreviousSize.Height != 0)\n        {\n            var widthDifference = args.NewSize.Width / args.PreviousSize.Width;\n            var heightDifference = args.NewSize.Height / args.PreviousSize.Height;\n\n            _markerTransform.X *= widthDifference;\n            _markerTransform.Y *= heightDifference;\n        }\n        else if (_colorPosition != null)\n        {\n            _markerTransform.X = ((Point)_colorPosition).X * args.NewSize.Width;\n            _markerTransform.Y = ((Point)_colorPosition).Y * args.NewSize.Height;\n        }\n    }\n\n    private void ColorDetailBorder_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        Mouse.Capture(null); //Release it.\n        LastColor.Background = CurrentColor.Background;\n    }\n\n    private void InitialColor_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        SelectedColor = ((SolidColorBrush)InitialColor.Background).Color;\n\n        UpdateMarkerPosition(SelectedColor);\n        LastColor.Background = CurrentColor.Background;\n\n        #region Update the values\n\n        _isUpdating = true;\n\n        AlphaIntegerUpDown.Value = SelectedColor.A;\n        RedIntegerUpDown.Value = SelectedColor.R;\n        GreenIntegerUpDown.Value = SelectedColor.G;\n        BlueIntegerUpDown.Value = SelectedColor.B;\n\n        _isUpdating = false;\n\n        #endregion\n    }\n\n    private void ColorSlider_OnAfterSelecting()\n    {\n        LastColor.Background = CurrentColor.Background;\n    }\n\n    private void ArgbText_ValueChanged(object sender, RoutedEventArgs e)\n    {\n        if (AlphaIntegerUpDown == null || _isUpdating)\n            return;\n\n        SelectedColor = Color.FromArgb((byte)AlphaIntegerUpDown.Value, (byte)RedIntegerUpDown.Value, (byte)GreenIntegerUpDown.Value, (byte)BlueIntegerUpDown.Value);\n            \n        UpdateMarkerPosition(SelectedColor);\n        LastColor.Background = CurrentColor.Background;\n    }\n\n    private void ValueBox_MouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        if (sender is not IntegerUpDown textBox)\n            return;\n\n        textBox.Value = e.Delta > 0 ? textBox.Value + 1 : textBox.Value - 1;\n    }\n\n    private void EyeDropperButton_PreviewMouseDown(object sender, MouseButtonEventArgs e)\n    {\n        Mouse.Capture(EyeDropperButton);\n\n        _captureSize = new Size(Math.Round(EyeDropperButton.ActualWidth / 6d, 0), Math.Round(EyeDropperButton.ActualHeight / 6d, 0));\n\n        EyeDropperButton.PreviewMouseUp += EyeDropperButton_PreviewMouseUp;\n        EyeDropperButton.PreviewMouseMove += EyeDropperButton_PreviewMouseMove;\n\n        Cursor = Cursors.Cross;\n        EyeDropperImage.Opacity = 1;\n        EyeDropperButton.Opacity = 0;\n    }\n\n    private void EyeDropperButton_PreviewMouseMove(object sender, MouseEventArgs e)\n    {\n        var str = new PointW();\n        User32.GetCursorPos(ref str);\n\n        var image = Native.Helpers.Capture.CaptureScreenAsBitmapSource((int)_captureSize.Width, (int)_captureSize.Height, str.X - (int)(_captureSize.Width / 2d), str.Y - (int)(_captureSize.Height / 2d));\n\n        if (image.Format != PixelFormats.Bgra32)\n            image = new FormatConvertedBitmap(image, PixelFormats.Bgra32, null, 0);\n\n        EyeDropperImage.Source = image;\n\n        var pix = new PixelUtil(image);\n        pix.LockBits();\n        UpdateMarkerPosition(pix.GetPixel((int)(_captureSize.Width / 2d), (int)(_captureSize.Height / 2d)));\n\n        #region Update the values\n\n        _isUpdating = true;\n\n        AlphaIntegerUpDown.Value = SelectedColor.A;\n        RedIntegerUpDown.Value = SelectedColor.R;\n        GreenIntegerUpDown.Value = SelectedColor.G;\n        BlueIntegerUpDown.Value = SelectedColor.B;\n\n        _isUpdating = false;\n\n        #endregion\n\n        pix.UnlockBits();\n    }\n\n    private void EyeDropperButton_PreviewMouseUp(object sender, MouseButtonEventArgs e)\n    {\n        EyeDropperButton.ReleaseMouseCapture();\n        Cursor = Cursors.Arrow;\n        EyeDropperImage.Opacity = 0;\n        EyeDropperButton.Opacity = 1;\n        EyeDropperImage.Source = null;\n\n        EyeDropperButton.PreviewMouseUp -= EyeDropperButton_PreviewMouseUp;\n        EyeDropperButton.PreviewMouseMove -= EyeDropperButton_PreviewMouseMove;\n    }\n        \n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = true;\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void UpdateMarkerPosition(Point p)\n    {\n        _markerTransform.X = p.X;\n        _markerTransform.Y = p.Y;\n        p.X /= ColorDetail.ActualWidth;\n        p.Y /= ColorDetail.ActualHeight;\n        _colorPosition = p;\n\n        DetermineColor(p);\n    }\n\n    private void UpdateMarkerPosition(Color theColor)\n    {\n        _colorPosition = null;\n\n        var hsv = ColorExtensions.RgbToHsv(theColor.R, theColor.G, theColor.B);\n\n        CurrentColor.Background = new SolidColorBrush(theColor);\n        ColorSlider.Value = hsv.H;\n        AlphaSlider.SpectrumColor = theColor;\n        AlphaSlider.Value = theColor.A;\n\n        var p = new Point(hsv.S, 1 - hsv.V);\n\n        _colorPosition = p;\n        p.X *= ColorDetail.ActualWidth;\n        p.Y *= ColorDetail.ActualHeight;\n        _markerTransform.X = p.X;\n        _markerTransform.Y = p.Y;\n\n        SelectedColor = theColor;\n    }\n\n    private void DetermineColor(Point p)\n    {\n        var hsv = new HsvColor(ColorSlider.Value, 1, 1)\n        {\n            S = p.X,\n            V = 1 - p.Y\n        };\n\n        SelectedColor = ColorExtensions.HsvToRgb(hsv.H, hsv.S, hsv.V, AlphaSlider.Value);\n\n        CurrentColor.Background = new SolidColorBrush(SelectedColor);\n        AlphaSlider.SpectrumColor = SelectedColor;\n\n        #region Update TextBoxes\n\n        _isUpdating = true;\n\n        AlphaIntegerUpDown.Value = SelectedColor.A;\n        RedIntegerUpDown.Value = SelectedColor.R;\n        GreenIntegerUpDown.Value = SelectedColor.G;\n        BlueIntegerUpDown.Value = SelectedColor.B;\n\n        _isUpdating = false;\n\n        #endregion\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/CommandPreviewer.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.CommandPreviewer\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.CommandPreviewer.Title}\" Width=\"400\" Height=\"280\" MinWidth=\"300\" MinHeight=\"270\" SizeToContent=\"Height\"\n            WindowStartupLocation=\"CenterScreen\" SnapsToDevicePixels=\"True\" Icon=\"/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"35\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Margin=\"6\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.CommandPreviewer.Title}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <TextBlock Grid.Column=\"2\" x:Name=\"ExtensionTextBlock\" Text=\".mp4\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" FontStyle=\"Italic\" \n                       FontSize=\"12\" TextWrapping=\"WrapWithOverflow\" VerticalAlignment=\"Center\"/>\n        </Grid>\n\n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"2\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"23\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n\n            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.CommandPreviewer.Command}\"/>\n            <n:ExtendedTextBox Grid.Row=\"1\" x:Name=\"ParametersTextBox\" MinHeight=\"23\" Margin=\"5,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\" IsReadOnly=\"True\"/>\n        </Grid>\n        \n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/CommandPreviewer.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class CommandPreviewer\n{\n    public string Parameters { get; set; }\n        \n    public string Extension { get; set; }\n\n\n    public CommandPreviewer()\n    {\n        InitializeComponent();\n    }\n\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        ExtensionTextBlock.Text = Extension;\n        ParametersTextBox.Text = \"ffmpeg\\n\" + (Parameters ?? \"\").Replace(\"{I}\", $\"-safe 0 -f concat -i \\\"[{LocalizationHelper.Get(\"S.CommandPreviewer.Input\")}]\\\"\")\n            .Replace(\"{O}\", $\"-y \\\"[{LocalizationHelper.Get(\"S.CommandPreviewer.Output\")}]\\\"\");\n\n        if (ParametersTextBox.Text.Contains(\"-pass 2\"))\n        {\n            ParametersTextBox.Text = ParametersTextBox.Text.Replace(\"-pass 2 \", $\"-pass 1 -passlogfile -y \\\"[{LocalizationHelper.Get(\"S.CommandPreviewer.Output\")}]\\\" \") + \n                                     Environment.NewLine + Environment.NewLine +\n                                     ParametersTextBox.Text.Replace(\"-pass 2\", $\"-pass 2 -passlogfile -y \\\"[{LocalizationHelper.Get(\"S.CommandPreviewer.Output\")}]\\\" \");\n        }\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Dialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Dialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"Dialog\" Height=\"230\" Width=\"500\" MinHeight=\"230\" MinWidth=\"400\" SizeToContent=\"Height\" Topmost=\"True\" WindowStartupLocation=\"CenterScreen\" \n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" KeyDown=\"Dialog_KeyDown\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition MinHeight=\"48\" Height=\"Auto\"/>\n            <RowDefinition Height=\"*\" MinHeight=\"100\"/>\n            <RowDefinition Height=\"40\" />\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border x:Name=\"IconBorder\" Background=\"{StaticResource Vector.Cancel.Round}\" Margin=\"5\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock x:Name=\"InstructionLabel\" Text=\"Instruction\" Margin=\"5,1\" Grid.Column=\"1\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <ScrollViewer Grid.Row=\"1\" VerticalScrollBarVisibility=\"Auto\">\n            <TextBlock x:Name=\"ObservationTextBlock\" Margin=\"25,5,10,5\" Text=\"Example text.\" FontSize=\"14\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n        </ScrollViewer>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"40\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" MinWidth=\"90\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"FalseActionButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"YesButton\" Text=\"{DynamicResource S.Yes}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"NoButton\" Text=\"{DynamicResource S.No}\" Icon=\"{StaticResource Vector.No}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"FalseActionButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Dialog.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Dialog\n{\n    public Dialog()\n    {\n        InitializeComponent();\n    }\n\n    #region Methods\n\n    private Brush GetIcon(Icons icon)\n    {\n        switch (icon)\n        {\n            case Icons.Error:\n                return (Brush)FindResource(\"Vector.Cancel.Round\");\n            case Icons.Info:\n                return (Brush)FindResource(\"Vector.Info\");\n            case Icons.Success:\n                return (Brush)FindResource(\"Vector.Ok.Round\");\n            case Icons.Warning:\n                return (Brush)FindResource(\"Vector.Warning\");\n            case Icons.Question:\n                return (Brush)FindResource(\"Vector.Question\");\n\n            default:\n                return (Brush)FindResource(\"Vector.Info\");\n        }\n    }\n\n    private void PrepareOk(string title, string instruction, string observation, Icons icon)\n    {\n        CancelButton.Visibility = Visibility.Collapsed;\n        YesButton.Visibility = Visibility.Collapsed;\n        NoButton.Visibility = Visibility.Collapsed;\n\n        OkButton.Focus();\n\n        IconBorder.Background = GetIcon(icon);\n\n        InstructionLabel.Text = instruction;\n        ObservationTextBlock.Text = observation;\n        Title = title;\n    }\n\n    private void PrepareOkCancel(string title, string instruction, string observation, Icons icon)\n    {\n        YesButton.Visibility = Visibility.Collapsed;\n        NoButton.Visibility = Visibility.Collapsed;\n\n        CancelButton.Focus();\n\n        IconBorder.Background = GetIcon(icon);\n\n        InstructionLabel.Text = instruction;\n        ObservationTextBlock.Text = observation;\n        Title = title;\n    }\n\n    private void PrepareAsk(string title, string instruction, string observation, bool yesAsDefault, Icons icon)\n    {\n        CancelButton.Visibility = Visibility.Collapsed;\n        OkButton.Visibility = Visibility.Collapsed;\n\n        if (yesAsDefault)\n            YesButton.Focus();\n        else\n            NoButton.Focus();\n\n        IconBorder.Background = GetIcon(icon);\n\n        InstructionLabel.Text = instruction;\n        ObservationTextBlock.Text = observation;\n        Title = title;\n    }\n\n    /// <summary>\n    /// Handle all pressed keys that get sent to this Window\n    /// </summary>\n    private void Dialog_KeyDown(object sender, KeyEventArgs e)\n    {\n        switch (e.Key)\n        {\n            case Key.Y:\n                DialogResult = true; //[Y] will answer 'Yes' to ask-dialog\n                break;\n            case Key.Escape:\n            case Key.N:\n                DialogResult = false; //[ESC] or [N] will answer 'No' to ask-dialog\n                break;\n        }\n    }\n\n    /// <summary>\n    /// Shows a Ok dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Ok</returns>\n    public static bool Ok(string title, string instruction, string observation, Icons icon = Icons.Error)\n    {\n        var dialog = new Dialog();\n        dialog.PrepareOk(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    /// <summary>\n    /// Shows a Ok/Cancel dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Ok</returns>\n    public static bool OkCancel(string title, string instruction, string observation, Icons icon = Icons.Error)\n    {\n        var dialog = new Dialog();\n        dialog.PrepareOkCancel(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    /// <summary>\n    /// Shows a Yes/No dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"yesAsDefault\">If true, the Yes button will receive the initial focus.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Yes</returns>\n    public static bool Ask(string title, string instruction, string observation, bool yesAsDefault = true, Icons icon = Icons.Question)\n    {\n        var dialog = new Dialog();\n        dialog.PrepareAsk(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), yesAsDefault, icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    #endregion\n\n    #region Events\n\n    private void FalseActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n\n    private void TrueActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = true;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/DownloadDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.DownloadDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Updater.Title}\" Height=\"400\" Width=\"700\" MinHeight=\"300\" MinWidth=\"450\" MaxHeight=\"750\" MaxWidth=\"700\"\n            SizeToContent=\"Height\" WindowStartupLocation=\"CenterScreen\" Icon=\"/Resources/Logo.ico\" \n            Loaded=\"Window_Loaded\" Closing=\"Window_Closing\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Margin=\"5\" Width=\"32\" Height=\"32\" Background=\"{StaticResource Vector.Synchronize}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label x:Name=\"InstructionLabel\" Content=\"{DynamicResource S.Updater.Header}\" Margin=\"3\" Grid.Column=\"1\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"2\">\n            <FlowDocumentScrollViewer x:Name=\"DocumentViewer\" VerticalScrollBarVisibility=\"Auto\">\n                <FlowDocument x:Name=\"MainFlowDocument\" FontFamily=\"{DynamicResource FontFamilyNormal}\" TextAlignment=\"Left\">\n                    <Paragraph TextAlignment=\"Center\" FontWeight=\"Light\">\n                        <Run Text=\"{DynamicResource S.Updater.NewRelease}\" FontSize=\"30\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <Run Name=\"VersionRun\" Text=\"Version 2.22\" FontSize=\"20\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                        <Run Name=\"SizeRun\" Text=\"1.1 MB\" FontSize=\"14\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n                        <LineBreak/>\n                        <Run Name=\"TypeRun\" Text=\"Portable\" FontSize=\"15\" Foreground=\"{DynamicResource Element.Foreground.Gray112}\"/>\n                    </Paragraph>\n\n                    <Paragraph Name=\"WhatsNewParagraphTitle\" FontSize=\"20\" FontWeight=\"Regular\" Margin=\"0\" Foreground=\"{DynamicResource Element.Foreground}\">\n                        <Run Text=\"{DynamicResource S.Updater.Info.WhatsNew}\"/>\n                    </Paragraph>\n                    <Paragraph Name=\"WhatsNewParagraph\" FontSize=\"12\" FontWeight=\"Regular\" Margin=\"5\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                    <Paragraph Name=\"FixesParagraphTitle\" FontSize=\"16\" FontWeight=\"Regular\" Margin=\"0\" Foreground=\"{DynamicResource Element.Foreground}\">\n                        <Run Text=\"{DynamicResource S.Updater.Info.BugFixes}\"/>\n                    </Paragraph>\n                    <Paragraph Name=\"FixesParagraph\" FontSize=\"12\" FontWeight=\"Regular\" Margin=\"5\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n                </FlowDocument>\n            </FlowDocumentScrollViewer>\n        </Grid>\n\n        <Grid Grid.Row=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <ProgressBar Grid.Column=\"0\" x:Name=\"DownloadProgressBar\" Height=\"4\" Margin=\"5,0\" IsIndeterminate=\"True\" Visibility=\"Hidden\"/>\n            <n:ExtendedCheckBox Grid.Column=\"0\" x:Name=\"RunAfterwardsCheckBox\" Text=\"{DynamicResource S.Updater.RunAfter}\" Margin=\"5\" Visibility=\"Collapsed\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"DownloadButton\" Text=\"{DynamicResource S.Updater.Download}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"DownloadButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"CancelButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/DownloadDialog.xaml.cs",
    "content": "using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Documents;\nusing System.Xml.Linq;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class DownloadDialog\n{\n    #region Properties\n\n    public XElement Element { get; set; }\n\n    internal UpdateAvailable Details { get; set; }\n\n    public bool IsChocolatey { get; set; }\n\n    public bool IsInstaller { get; set; }\n\n    public bool WasPromptedManually { get; set; }\n\n    public bool RunAfterwards { get; set; }\n\n    #endregion\n\n\n    public DownloadDialog()\n    {\n        InitializeComponent();\n    }\n\n\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        #region Validation\n\n        if (Global.UpdateAvailable == null)\n        {\n            WhatsNewParagraph.Inlines.Add(\"Something wrong happened. No update was found.\");\n            return;\n        }\n\n        if (Global.UpdateAvailable.MustDownloadManually)\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Updater.NoNewRelease.Info\"));\n\n        #endregion\n\n        try\n        {\n            //Detect if this is portable or installed. Download the proper file.\n            IsChocolatey = AppDomain.CurrentDomain.BaseDirectory.EndsWith(@\"Chocolatey\\lib\\screentogif\\content\\\");\n            IsInstaller = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory).Any(x => x.ToLowerInvariant().EndsWith(\"screentogif.visualelementsmanifest.xml\"));\n\n            VersionRun.Text = $\"{LocalizationHelper.Get(\"S.Updater.Version\")} {Global.UpdateAvailable.Version}\";\n            SizeRun.Text = !UserSettings.All.PortableUpdate ? (Global.UpdateAvailable.InstallerSize > 0 ? Humanizer.BytesToString(Global.UpdateAvailable.InstallerSize) : \"\") :\n                (Global.UpdateAvailable.PortableSize > 0 ? Humanizer.BytesToString(Global.UpdateAvailable.PortableSize) : \"\");\n            TypeRun.Text = IsInstaller ? LocalizationHelper.Get(\"S.Updater.Installer\") : LocalizationHelper.Get(\"S.Updater.Portable\");\n\n            //Details.\n            if (Global.UpdateAvailable.IsFromGithub)\n            {\n                //From Github, the description is available.\n                var splited = Global.UpdateAvailable.Description.Split(new[] { '#' }, StringSplitOptions.RemoveEmptyEntries);\n\n                WhatsNewParagraph.Inlines.Add(splited[0].Replace(\" What's new?\\r\\n\\r\\n\", \"\"));\n                FixesParagraph.Inlines.Add(splited.Length > 1 ? splited[1].Replace(\" Bug fixes:\\r\\n\\r\\n\", \"\").Replace(\" Fixed:\\r\\n\\r\\n\", \"\") : \"Apparently nothing.\");\n            }\n            else\n            {\n                //If the release detail was obtained by querying Fosshub, no release note is available.\n                MainFlowDocument.Blocks.Remove(WhatsNewParagraphTitle);\n                MainFlowDocument.Blocks.Remove(FixesParagraphTitle);\n                MainFlowDocument.Blocks.Remove(FixesParagraph);\n\n                var run = new Run();\n                run.SetResourceReference(Run.TextProperty, \"S.Updater.Info.NewVersionAvailable\");\n                WhatsNewParagraph.Inlines.Add(run);\n            }\n\n            DocumentViewer.UpdateLayout();\n\n            //If set to force the download the portable version of the app, check if it was downloaded.\n            if (UserSettings.All.PortableUpdate)\n            {\n                //If the update was already downloaded.\n                if (File.Exists(Global.UpdateAvailable.PortablePath))\n                {\n                    //If it's still downloading, wait for it to finish before displaying \"Open\".\n                    if (Global.UpdateAvailable.IsDownloading)\n                    {\n                        Global.UpdateAvailable.TaskCompletionSource = new TaskCompletionSource<bool>();\n                        await Global.UpdateAvailable.TaskCompletionSource.Task;\n\n                        if (!IsLoaded)\n                            return;\n                    }\n\n                    DownloadButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Updater.InstallManually\");\n                }\n\n                return;\n            }\n\n            //If set to download automatically, check if the installer was downloaded.\n            if (UserSettings.All.InstallUpdates)\n            {\n                //If the update was already downloaded.\n                if (File.Exists(Global.UpdateAvailable.InstallerPath))\n                {\n                    //If it's still downloading, wait for it to finish before displaying \"Install\".\n                    if (Global.UpdateAvailable.IsDownloading)\n                    {\n                        Global.UpdateAvailable.TaskCompletionSource = new TaskCompletionSource<bool>();\n                        await Global.UpdateAvailable.TaskCompletionSource.Task;\n\n                        if (!IsLoaded)\n                            return;\n                    }\n\n                    DownloadButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Updater.Install\");\n\n                    //When the update was prompted manually, the user can set the installer to run the app afterwards.\n                    if (WasPromptedManually)\n                    {\n                        RunAfterwardsCheckBox.Visibility = Visibility.Visible;\n                        RunAfterwardsCheckBox.IsChecked = true;\n                    }\n                }\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to load the download details\");\n            StatusBand.Error(LocalizationHelper.Get(\"S.Updater.Warning.Show\"));\n        }\n        finally\n        {\n            Height = ActualHeight;\n            SizeToContent = SizeToContent.Width;\n            Width = ActualWidth;\n            SizeToContent = SizeToContent.Manual;\n\n            MaxHeight = double.PositiveInfinity;\n            MaxWidth = double.PositiveInfinity;\n\n            CenterOnScreen();\n        }\n    }\n\n    private async void DownloadButton_Click(object sender, RoutedEventArgs e)\n    {\n        StatusBand.Hide();\n\n        if (Global.UpdateAvailable.MustDownloadManually)\n        {\n            ProcessHelper.StartWithShell(\"https://www.screentogif.com\");\n            DialogResult = false;\n            return;\n        }\n\n        if (EncodingManager.Encodings.Any(a => a.Status == EncodingStatus.Processing))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Updater.Warning.Encoding\"));\n            return;\n        }\n\n        DownloadButton.IsEnabled = false;\n        StatusBand.Info(LocalizationHelper.Get(\"S.Updater.Downloading\"));\n\n        RunAfterwards = RunAfterwardsCheckBox.IsChecked == true;\n\n        //If it's still downloading, wait for it to finish.\n        if (Global.UpdateAvailable.IsDownloading)\n        {\n            Global.UpdateAvailable.TaskCompletionSource = new TaskCompletionSource<bool>();\n            await Global.UpdateAvailable.TaskCompletionSource.Task;\n\n            if (!IsLoaded)\n                return;\n        }\n\n        //If update already downloaded, simply close this window. The installation will happen afterwards.\n        if (File.Exists(Global.UpdateAvailable.ActivePath))\n        {\n            GC.Collect();\n            DialogResult = true;\n            return;\n        }\n\n        //When the update was not queried from Github, the download must be done by browser.\n        if (!Global.UpdateAvailable.IsFromGithub)\n        {\n            try\n            {\n                ProcessHelper.StartWithShell(Global.UpdateAvailable.ActiveDownloadUrl);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to open the browser to download the update.\", Global.UpdateAvailable?.ActiveDownloadUrl);\n            }\n\n            GC.Collect();\n            DialogResult = true;\n            return;\n        }\n\n        DownloadProgressBar.Visibility = Visibility.Visible;\n        RunAfterwardsCheckBox.Visibility = Visibility.Collapsed;\n\n        var result = await App.MainViewModel.DownloadUpdate();\n\n        //If cancelled.\n        if (!IsLoaded)\n            return;\n\n        if (!result)\n        {\n            DownloadButton.IsEnabled = true;\n            DownloadProgressBar.Visibility = Visibility.Hidden;\n            StatusBand.Error(LocalizationHelper.Get(\"S.Updater.Warning.Download\"));\n            return;\n        }\n\n        //If the update was downloaded successfully, close this window to run.\n        if (File.Exists(Global.UpdateAvailable.ActivePath))\n        {\n            GC.Collect();\n            StatusBand.Hide();\n            DialogResult = true;\n            return;\n        }\n\n        StatusBand.Error(LocalizationHelper.Get(\"S.Updater.Warning.Download\"));\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        GC.Collect();\n        DialogResult = false;\n    }\n\n    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        Global.UpdateAvailable.TaskCompletionSource = null;\n    }\n\n\n    private void CenterOnScreen()\n    {\n        //Since the list of monitors could have been changed, it needs to be queried again.\n        var monitors = MonitorHelper.AllMonitorsGranular();\n\n        //Detect closest screen to the point (previously selected top/left point or current mouse coordinate).\n        var point = new Point((int)Left, (int)Top);\n        var closest = monitors.FirstOrDefault(x => x.Bounds.Contains(point)) ?? monitors.FirstOrDefault(x => x.IsPrimary) ?? monitors.FirstOrDefault();\n\n        if (closest == null)\n            throw new Exception(\"It was not possible to get a list of known screens.\");\n\n        //Move the window to the correct location.\n        Left = closest.WorkingArea.Left + closest.WorkingArea.Width / 2d - ActualWidth / 2d;\n        Top = closest.WorkingArea.Top + closest.WorkingArea.Height / 2d - ActualHeight / 2d;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Downloader.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Downloader\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Downloader.Title}\" Height=\"220\" Width=\"520\" MinHeight=\"220\" MinWidth=\"520\"\n            WindowStartupLocation=\"CenterScreen\" Icon=\"/Resources/Logo.ico\"  \n            Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Margin=\"5\" Width=\"32\" Height=\"32\" Background=\"{StaticResource Vector.Arrow.Blue.Bottom}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label x:Name=\"InstructionLabel\" Content=\"{DynamicResource S.Downloader.Header}\" Margin=\"3\" Grid.Column=\"1\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <StackPanel Grid.Row=\"2\" Orientation=\"Vertical\" Margin=\"10,5\" VerticalAlignment=\"Center\">\n            <TextBlock x:Name=\"StatusTextBlock\" Text=\"{DynamicResource S.Updater.Downloading}\" Margin=\"3\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n            <ProgressBar x:Name=\"MainProgressBar\" Height=\"18\" Margin=\"3\" Maximum=\"100\"/>\n            <TextBlock x:Name=\"TotalTextBlock\" Text=\"\" Margin=\"3\" HorizontalAlignment=\"Right\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n        </StackPanel>\n\n        <Grid Grid.Row=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"RetryButton\" Text=\"{DynamicResource S.Recorder.Retry}\" Icon=\"{StaticResource Vector.Synchronize}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsEnabled=\"False\" Click=\"RetryButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"CancelButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Downloader.xaml.cs",
    "content": "using System;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Downloader\n{\n    #region Properties\n\n    private bool _cancel;\n\n    public string DownloadMode { get; set; }\n\n    public string DestinationPath { get; set; }\n\n    #endregion\n\n    public Downloader()\n    {\n        InitializeComponent();\n    }\n\n\n    private string GetDownloadUrl()\n    {\n        switch (DownloadMode)\n        {\n            case \"gifski\":\n                return \"https://nickemanarin.github.io/ScreenToGif-Website/downloads/Gifski.zip\";\n            case \"ffmpeg\":\n            {\n                return Environment.Is64BitProcess ? \"https://nickemanarin.github.io/ScreenToGif-Website/downloads/FFmpeg-4.4.1-x64.zip\" :\n                    \"https://nickemanarin.github.io/ScreenToGif-Website/downloads/FFmpeg-4.3.1-x86.zip\";\n            }\n        }\n\n        return null;\n    }\n\n    private async Task Download()\n    {\n        try\n        {\n            //Save to a temp folder.\n            var temp = Path.Combine(Path.GetTempPath(), Path.GetTempFileName());\n            var downloadUrl = GetDownloadUrl();\n\n            if (string.IsNullOrWhiteSpace(downloadUrl))\n            {\n                StatusBand.Error(\"Download URL not provided...\");\n                return;\n            }\n\n            //Download.\n            using (var client = new WebClient { Proxy = WebRequest.GetSystemWebProxy() })\n            {\n                client.DownloadProgressChanged += (_, args) =>\n                {\n                    TotalTextBlock.Text = LocalizationHelper.GetWithFormat(\"S.Downloader.Size\", \"{0} of {1}\", Humanizer.BytesToString(args.BytesReceived), Humanizer.BytesToString(args.TotalBytesToReceive));\n                    MainProgressBar.Value = args.ProgressPercentage;\n\n                    if (_cancel)\n                    {\n                        client.CancelAsync();\n                        Environment.Exit(35);\n                    }\n                };\n\n                await client.DownloadFileTaskAsync(new Uri(downloadUrl), temp);\n            }\n\n            if (_cancel)\n            {\n                Environment.Exit(90);\n                return;\n            }\n\n            //Decompress.\n            using (var zip = ZipFile.Open(temp, ZipArchiveMode.Read))\n            {\n                switch (DownloadMode)\n                {\n                    case \"gifski\":\n                    {\n                        var entry = zip.Entries.FirstOrDefault(x => x.Name.Contains(\"gifski.dll\"));\n\n                        if (File.Exists(DestinationPath))\n                            File.Delete(DestinationPath);\n\n                        entry?.ExtractToFile(DestinationPath, true);\n                        break;\n                    }\n                    case \"ffmpeg\":\n                    {\n                        var entry = zip.Entries.FirstOrDefault(x => x.Name.Contains(\"ffmpeg.exe\"));\n\n                        if (File.Exists(DestinationPath))\n                            File.Delete(DestinationPath);\n\n                        entry?.ExtractToFile(DestinationPath, true);\n                        break;\n                    }\n                    case \"sharpdx\":\n                    {\n                        foreach (var entry in zip.Entries)\n                        {\n                            if (File.Exists(Path.Combine(DestinationPath, entry.Name)))\n                                File.Delete(Path.Combine(DestinationPath, entry.Name));\n\n                            entry?.ExtractToFile(Path.Combine(DestinationPath, entry.Name), true);\n                        }\n\n                        break;\n                    }\n                }\n            }\n\n            File.Delete(temp);\n            Environment.Exit(10);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to download\");\n\n            StatusBand.Error(e.Message);\n            RetryButton.IsEnabled = true;\n        }\n    }\n\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        await Download();\n    }\n        \n    private async void RetryButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (!RetryButton.IsEnabled || !IsLoaded)\n            return;\n\n        RetryButton.IsEnabled = false;\n\n        await Download();\n\n        CancelButton.IsEnabled = true;\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (!CancelButton.IsEnabled || !IsLoaded)\n            return;\n\n        CancelButton.IsEnabled = false;\n        _cancel = true;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Encoder.xaml",
    "content": "<c:ExWindow x:Class=\"ScreenToGif.Windows.Other.Encoder\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Encoder.Title}\" Icon=\"/Resources/Logo.ico\" Width=\"320\" Height=\"400\" \n            MinWidth=\"300\" MinHeight=\"300\" Closing=\"Window_Closing\" Activated=\"Window_Activated\">\n\n    <c:ExWindow.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.ClearAll}\" CanExecute=\"ClearAll_CanExecute\" Executed=\"ClearAll_Executed\"/>\n    </c:ExWindow.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Background=\"{StaticResource Vector.ImageStack}\" Margin=\"5\" Height=\"32\" Width=\"32\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label Grid.Column=\"1\" x:Name=\"EncoderLabel\" Content=\"{DynamicResource S.Encoder.Title}\" Margin=\"10,0,10,0\" VerticalAlignment=\"Center\" Padding=\"2\" \n                   FontSize=\"24\" FontFamily=\"{DynamicResource FontFamilyLight}\" Foreground=\"{DynamicResource Element.Foreground.Header}\">\n                <Label.Triggers>\n                    <EventTrigger RoutedEvent=\"Label.Loaded\">\n                        <BeginStoryboard>\n                            <Storyboard BeginTime=\"00:00:00\" Storyboard.TargetName=\"EncoderLabel\" Storyboard.TargetProperty=\"(FontSize)\">\n                                <DoubleAnimation From=\"24\" To=\"18\" Duration=\"0:0:2\">\n                                    <DoubleAnimation.EasingFunction>\n                                        <PowerEase Power=\"20\" EasingMode=\"EaseOut\"/>\n                                    </DoubleAnimation.EasingFunction>\n                                </DoubleAnimation>\n                            </Storyboard>\n                        </BeginStoryboard>\n                    </EventTrigger>\n                </Label.Triggers>\n            </Label>\n\n            <c:ExtendedButton Grid.Column=\"2\" x:Name=\"ClearAllButton\" Icon=\"{DynamicResource Vector.Eraser}\" ContentWidth=\"18\" ContentHeight=\"18\" MinWidth=\"30\"\n                              HorizontalContentAlignment=\"Center\" HorizontalAlignment=\"Center\" Style=\"{DynamicResource Style.Button.NoText}\" \n                              Command=\"{StaticResource Command.ClearAll}\" IsEnabled=\"{Binding Path=HasItems, ElementName=EncodingListView}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\"\n                              ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n        </Grid>\n\n        <c:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n        \n        <c:NotificationBox Grid.Row=\"2\" x:Name=\"NotificationBox\" OnlyDisplayList=\"True\" BorderThickness=\"0\" Margin=\"0\"/>\n    </Grid>\n</c:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Encoder.xaml.cs",
    "content": "using ScreenToGif.Controls;\nusing ScreenToGif.Util;\nusing System;\nusing System.Windows;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Encoder : IEncoding\n{\n    #region Variables\n\n    /// <summary>\n    /// The static Encoder window.\n    /// </summary>\n    private static Encoder _encoder = null;\n\n    /// <summary>\n    /// The latest state of the window. Used when hiding the window to show the recorder.\n    /// </summary>\n    private static WindowState _lastState = WindowState.Normal;\n\n    /// <summary>\n    /// True if this is the encoder window.\n    /// </summary>\n    public bool IsEncoderWindow { get; } = true;\n\n    /// <summary>\n    /// True if this window is available for use.\n    /// </summary>\n    public static bool IsAvailable => _encoder != null;\n\n    #endregion\n\n    public Encoder()\n    {\n        InitializeComponent();\n    }\n\n    #region Events\n\n    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        //Remove all ItemViews of this window from the manager list.\n        NotificationBox?.RemoveAllViews();\n\n        _encoder = null;\n        GC.Collect();\n\n        //Display the encodings in the editor.\n        EncodingManager.MoveEncodingsToPopups();\n    }\n\n    private void Window_Activated(object sender, EventArgs e)\n    {\n        NotificationBox.CheckIfFileExist();\n    }\n\n    private void ClearAll_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = NotificationBox?.HasAnyActiveEncoding == true;\n    }\n\n    private void ClearAll_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        EncodingManager.RemoveFinishedEncodings();\n    }\n\n    #endregion\n\n\n    public EncoderListViewItem EncodingAdded(int id)\n    {\n        return _encoder?.NotificationBox.AddEncoding(id);\n    }\n\n    public void EncodingUpdated(int? id = null, bool onlyStatus = false)\n    {\n        if (onlyStatus)\n            return;\n\n        _encoder?.NotificationBox.UpdateEncoding(id);\n    }\n\n    public EncoderListViewItem EncodingRemoved(int id)\n    {\n        return _encoder?.NotificationBox.RemoveEncoding(id);\n    }\n\n\n    #region Public Static\n\n    /// <summary>\n    /// Shows the Encoder window.\n    /// </summary>\n    /// <param name=\"scale\">Screen scale.</param>\n    public static void Start(double scale)\n    {\n        #region If already started\n\n        if (_encoder != null)\n        {\n            if (_encoder.WindowState == WindowState.Minimized)\n                Restore();\n\n            _encoder.Activate();\n            return;\n        }\n\n        #endregion\n\n        _encoder = new Encoder();\n\n        var screen = ScreenHelper.GetScreen(_encoder);\n\n        //Lower Right corner.\n        _encoder.Left = screen.WorkingArea.Width / scale - _encoder.Width;\n        _encoder.Top = screen.WorkingArea.Height / scale - _encoder.Height;\n\n        _encoder.Show();\n    }\n\n    /// <summary>\n    /// Minimizes the Encoder window.\n    /// </summary>\n    public static void Minimize()\n    {\n        if (_encoder == null)\n            return;\n\n        _lastState = _encoder.WindowState;\n\n        _encoder.WindowState = WindowState.Minimized;\n    }\n\n    /// <summary>\n    /// Minimizes the Encoder window.\n    /// </summary>\n    public static void Restore()\n    {\n        if (_encoder == null)\n            return;\n\n        _encoder.WindowState = _lastState;\n    }\n\n    /// <summary>\n    /// Tries to close the Window if there's no encoding active.\n    /// </summary>\n    public static void TryClose()\n    {\n        if (_encoder == null)\n            return;\n\n        if (_encoder.NotificationBox.HasAnyActiveEncoding)\n            _encoder.Close();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/ErrorDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.ErrorDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"Dialog\" Height=\"230\" Width=\"500\" MinHeight=\"230\" MinWidth=\"400\" SizeToContent=\"Height\"\n            Topmost=\"True\" WindowStartupLocation=\"CenterScreen\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"*\" MinHeight=\"100\"/>\n            <RowDefinition Height=\"40\" />\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border x:Name=\"IconBorder\" Margin=\"5\" Background=\"{StaticResource Vector.Cancel.Round}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label x:Name=\"InstructionLabel\" Content=\"Instruction\" Margin=\"5,0\" Grid.Column=\"1\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <ScrollViewer Grid.Row=\"1\" VerticalScrollBarVisibility=\"Auto\">\n            <TextBlock x:Name=\"ObservationTextBlock\" Margin=\"25,5,10,5\" FontSize=\"14\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground}\">\n                <Run Text=\"{DynamicResource S.ErrorDialog.Observation}\"/>\n                <LineBreak/>\n                <Run x:Name=\"DetailsRun\"/>\n            </TextBlock>\n        </ScrollViewer>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"40\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"FalseActionButton_Click\" IsCancel=\"True\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"YesButton\" Text=\"{DynamicResource S.Yes}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"NoButton\" Text=\"{DynamicResource S.No}\" Icon=\"{StaticResource Vector.No}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"FalseActionButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"3\" x:Name=\"DetailsButton\" Text=\"{DynamicResource S.Encoder.Details}\" Icon=\"{StaticResource Vector.Application}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"DetailsButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"4\" x:Name=\"SendButton\" Text=\"{DynamicResource S.ErrorDialog.Send}\" Icon=\"{StaticResource Vector.Email}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"SendButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/ErrorDialog.xaml.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class ErrorDialog\n{\n    public Exception Exception { get; set; }\n\n    public ErrorDialog()\n    {\n        InitializeComponent();\n    }\n\n    #region Methods\n\n    private Brush GetIcon(Icons icon)\n    {\n        switch (icon)\n        {\n            case Icons.Error:\n                return (Brush)FindResource(\"Vector.Cancel.Round\");\n            case Icons.Info:\n                return (Brush)FindResource(\"Vector.Info\");\n            case Icons.Success:\n                return (Brush)FindResource(\"Vector.Ok.Round\");\n            case Icons.Warning:\n                return (Brush)FindResource(\"Vector.Warning\");\n            case Icons.Question:\n                return (Brush)FindResource(\"Vector.Question\");\n\n            default:\n                return (Brush)FindResource(\"Vector.Info\");\n        }\n    }\n\n    private void PrepareOk(string title, string instruction, string observation, Icons icon)\n    {\n        CancelButton.Visibility = Visibility.Collapsed;\n        YesButton.Visibility = Visibility.Collapsed;\n        NoButton.Visibility = Visibility.Collapsed;\n        DetailsButton.Visibility = Exception != null ? Visibility.Visible : Visibility.Collapsed;\n\n        OkButton.Focus();\n\n        IconBorder.Background = GetIcon(icon);\n        InstructionLabel.Content = instruction;\n        DetailsRun.Text = observation;\n        Title = title;\n    }\n\n    private void PrepareOkCancel(string title, string instruction, string observation, Icons icon)\n    {\n        YesButton.Visibility = Visibility.Collapsed;\n        NoButton.Visibility = Visibility.Collapsed;\n        DetailsButton.Visibility = Exception != null ? Visibility.Visible : Visibility.Collapsed;\n\n        CancelButton.Focus();\n\n        IconBorder.Background = GetIcon(icon);\n        InstructionLabel.Content = instruction;\n        DetailsRun.Text = observation;\n        Title = title;\n    }\n\n    private void PrepareAsk(string title, string instruction, string observation, Icons icon)\n    {\n        CancelButton.Visibility = Visibility.Collapsed;\n        OkButton.Visibility = Visibility.Collapsed;\n        DetailsButton.Visibility = Exception != null ? Visibility.Visible : Visibility.Collapsed;\n\n        NoButton.Focus();\n\n        IconBorder.Background = GetIcon(icon);\n        InstructionLabel.Content = instruction;\n        DetailsRun.Text = observation;\n        Title = title;\n    }\n\n    /// <summary>\n    /// Shows a Ok dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"exception\">The exception of the error.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Ok</returns>\n    public static bool Ok(string title, string instruction, string observation, Exception exception, Icons icon = Icons.Error)\n    {\n        var dialog = new ErrorDialog { Exception = exception };\n        dialog.PrepareOk(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    /// <summary>\n    /// Shows a Ok/Cancel dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"exception\">The exception of the error.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Ok</returns>\n    public static bool OkCancel(string title, string instruction, string observation, Exception exception, Icons icon = Icons.Error)\n    {\n        var dialog = new ErrorDialog { Exception = exception };\n        dialog.PrepareOkCancel(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    /// <summary>\n    /// Shows a Yes/No dialog.\n    /// </summary>\n    /// <param name=\"title\">The title of the window.</param>\n    /// <param name=\"instruction\">The main instruction.</param>\n    /// <param name=\"observation\">A complementar observation.</param>\n    /// <param name=\"exception\">The exception of the error.</param>\n    /// <param name=\"icon\">The image of the dialog.</param>\n    /// <returns>True if Yes</returns>\n    public static bool Ask(string title, string instruction, string observation, Exception exception, Icons icon = Icons.Question)\n    {\n        var dialog = new ErrorDialog { Exception = exception };\n        dialog.PrepareAsk(title, instruction, observation.Replace(@\"\\n\", Environment.NewLine).Replace(@\"\\r\", \"\"), icon);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    #endregion\n\n    #region Events\n\n    private void FalseActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n\n    private void TrueActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = true;\n    }\n\n    private void DetailsButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (Exception == null)\n            return;\n\n        var viewer = new ExceptionViewer(Exception);\n        viewer.ShowDialog();\n    }\n\n    private async void SendButton_Click(object sender, RoutedEventArgs e)\n    {\n        var feedback = new Feedback { Topmost = true };\n\n        if (feedback.ShowDialog() != true)\n            return;\n\n        if (App.MainViewModel != null)\n            await Task.Factory.StartNew(App.MainViewModel.SendFeedback, TaskCreationOptions.LongRunning);\n    }\n\n    #endregion\n\n    /// <summary>\n    /// Dialog Icons.\n    /// </summary>\n    public enum Icons\n    {\n        /// <summary>\n        /// Information. Blue.\n        /// </summary>\n        Info,\n\n        /// <summary>\n        /// Warning, yellow.\n        /// </summary>\n        Warning,\n\n        /// <summary>\n        /// Error, red.\n        /// </summary>\n        Error,\n\n        /// <summary>\n        /// Success, green.\n        /// </summary>\n        Success,\n\n        /// <summary>\n        /// A question mark, blue.\n        /// </summary>\n        Question,\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/ExceptionDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.ExceptionDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"ScreenToGif - Error\" WindowStartupLocation=\"CenterScreen\" Topmost=\"True\" SnapsToDevicePixels=\"True\"\n            Height=\"300\" Width=\"560\" MinHeight=\"250\" MinWidth=\"560\" SizeToContent=\"Height\"\n            Icon=\"/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"110\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border x:Name=\"IconBorder\" Margin=\"6\" Background=\"{DynamicResource Vector.Cancel.Round}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeTextBlock\" Text=\"Instruction\" Margin=\"5,0\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"DetailsButton\" Text=\"{DynamicResource S.Encoder.Details}\" Icon=\"{DynamicResource Vector.Table}\" \n                              ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3\" Padding=\"2\" Style=\"{StaticResource Style.Button.Horizontal}\" TextWrapping=\"NoWrap\"\n                              Click=\"DetailsButton_Click\" FontSize=\"14\" FontFamily=\"{DynamicResource FontFamilyLight}\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" x:Name=\"HeaderTextBlock\" Text=\"{DynamicResource S.Crash}\" Foreground=\"{DynamicResource Element.Foreground.Header}\" \n                       FontSize=\"22\" Margin=\"10\" HorizontalAlignment=\"Center\"/>\n\n            <TextBlock Grid.Row=\"1\" x:Name=\"DetailsTextBlock\" FontSize=\"16\" Margin=\"6,6,6,15\" TextWrapping=\"Wrap\" \n                       Foreground=\"{DynamicResource Element.Foreground}\" ScrollViewer.CanContentScroll=\"True\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{DynamicResource Vector.Ok}\" ContentWidth=\"18\" ContentHeight=\"18\" \n                              Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsDefault=\"True\" Click=\"OkButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"SendButton\" Text=\"{DynamicResource S.ErrorDialog.Send}\" Icon=\"{DynamicResource Vector.Email}\" ContentWidth=\"18\" ContentHeight=\"20\" \n                              Padding=\"4,0\" MinWidth=\"90\" Margin=\"5\" Click=\"SendButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/ExceptionDialog.xaml.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Documents;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class ExceptionDialog\n{\n    #region Properties\n\n    public bool BugWithHotFix4055002 { get; set; }\n        \n    public Exception Exception { get; set; }\n\n    #endregion\n\n    public ExceptionDialog(Exception exception)\n    {\n        InitializeComponent();\n\n        Exception = exception;\n    }\n\n    #region Eventos\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (Exception == null)\n            DetailsButton.IsEnabled = false;\n    }\n\n    private void DetailsButton_Click(object sender, RoutedEventArgs e)\n    {\n        var errorViewer = new ExceptionViewer(Exception);\n        errorViewer.ShowDialog();\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    private async void SendButton_Click(object sender, RoutedEventArgs e)\n    {\n        var feedback = new Feedback { Topmost = true };\n\n        if (feedback.ShowDialog() != true)\n            return;\n\n        if (App.MainViewModel != null)\n            await Task.Factory.StartNew(App.MainViewModel.SendFeedback, TaskCreationOptions.LongRunning);\n    }\n\n    #endregion\n\n    #region Métodos\n\n    private void PrepareOk(string title, string instruction, string observation)\n    {\n        TypeTextBlock.Text = instruction;\n        DetailsTextBlock.Inlines.Add(new Run(\"    \" + observation));\n        Title = title ?? \"ScreenToGif - Error\";\n\n        if (BugWithHotFix4055002)\n        {\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new Run(\"    This was likely caused by a bug with an update for .Net Framework 4.7.1 (KB4055002, released in January 2018). This bug happens on machines with Windows 7 SP1 or Windows Server 2008 R2.\"));\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new LineBreak());\n            DetailsTextBlock.Inlines.Add(new Run(\"    \"));\n\n            var hyper = new Hyperlink(new Run(\"Click here to open a page with some details on how to fix this issue.\") {ToolTip = \"https://github.com/dotnet/announcements/issues/53\" });\n            hyper.Click += HyperOnClick;\n            DetailsTextBlock.Inlines.Add(hyper);\n        }\n\n        OkButton.Focus();\n    }\n\n    private void HyperOnClick(object sender, RoutedEventArgs routedEventArgs)\n    {\n        try\n        {\n            ProcessHelper.StartWithShell(\"https://github.com/dotnet/announcements/issues/53\");\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to open link\");\n        }\n    }\n\n    #endregion\n\n    #region Static Methods\n\n    public static bool Ok(Exception exception, string title, string instruction, string observation = \"\", bool bugWith4055002 = false)\n    {\n        var dialog = new ExceptionDialog(exception) { BugWithHotFix4055002 = bugWith4055002 };\n        dialog.PrepareOk(title, instruction, observation);\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/ExceptionViewer.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.ExceptionViewer\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.ExceptionViewer.Title}\" WindowStartupLocation=\"CenterScreen\" \n            UseLayoutRounding=\"True\" Topmost=\"True\" SnapsToDevicePixels=\"True\"\n            MinWidth=\"640\" MinHeight=\"490\" Width=\"640\" Height=\"490\" Icon=\"/Resources/Logo.ico\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"1*\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"1*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Margin=\"6\" Background=\"{StaticResource Vector.Cancel.Round}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeLabel\" Text=\"Exception Type\" Margin=\"5,0\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"16\" Foreground=\"{DynamicResource Element.Foreground.Header}\"\n                       ToolTip=\"{DynamicResource S.ExceptionViewer.Type}\" ToolTipService.Placement=\"Left\" ToolTipService.HorizontalOffset=\"-5\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"InnerButton\" Text=\"{DynamicResource S.ExceptionViewer.OpenInner}\" Icon=\"{StaticResource Vector.Synchronize}\" \n                              ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3\" Padding=\"2\" Style=\"{StaticResource Style.Button.Horizontal}\" IsEnabled=\"False\" FontSize=\"12\" \n                              FontFamily=\"{DynamicResource FontFamilyLight}\" Click=\"InnerButton_Click\"/>\n        </Grid>\n\n        <n:ExtendedTextBox x:Name=\"MessageTextBox\" Margin=\"3\" Grid.Row=\"1\" TextWrapping=\"Wrap\" MinHeight=\"50\" FontSize=\"14\" ScrollViewer.CanContentScroll=\"True\" \n                           VerticalScrollBarVisibility=\"Auto\" FontFamily=\"{DynamicResource FontFamilyBold}\" IsReadOnly=\"True\" MaxHeight=\"150\"\n                           ToolTip=\"{DynamicResource S.ExceptionViewer.Message}\" ToolTipService.Placement=\"Left\" ToolTipService.HorizontalOffset=\"-5\" ToolTipService.VerticalOffset=\"-5\"/>\n\n        <n:ExtendedTextBox x:Name=\"StackTextBox\" Margin=\"3\" Grid.Row=\"2\" TextWrapping=\"Wrap\" MinHeight=\"23\" ScrollViewer.CanContentScroll=\"True\" VerticalScrollBarVisibility=\"Auto\" IsReadOnly=\"True\"\n                           ToolTip=\"{DynamicResource S.ExceptionViewer.Stack}\" ToolTipService.Placement=\"Left\" ToolTipService.HorizontalOffset=\"-5\" ToolTipService.VerticalOffset=\"-5\"/>\n\n        <n:ExtendedTextBox x:Name=\"SourceTextBox\" Margin=\"3\" Grid.Row=\"3\" TextWrapping=\"Wrap\" MinHeight=\"23\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyBold}\" IsReadOnly=\"True\"\n                           ToolTip=\"{DynamicResource S.ExceptionViewer.Source}\" ToolTipService.Placement=\"Left\" ToolTipService.HorizontalOffset=\"-5\" ToolTipService.VerticalOffset=\"-5\"/>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"20\" ContentHeight=\"20\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsDefault=\"True\" Click=\"DoneButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/ExceptionViewer.xaml.cs",
    "content": "using System;\nusing System.Windows;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class ExceptionViewer\n{\n    #region Variables\n\n    private readonly Exception _exception;\n\n    #endregion\n\n    /// <summary>\n    /// Default constructor.\n    /// </summary>\n    /// <param name=\"ex\">The Exception to show.</param>\n    /// <param name=\"additional\">Additional details.</param>\n    public ExceptionViewer(Exception ex, string additional = null)\n    {\n        InitializeComponent();\n\n        _exception = ex;\n\n        #region Shows Information\n\n        TypeLabel.Text = ex.GetType().Name;\n        MessageTextBox.Text = ex.Message;\n        StackTextBox.Text = (!string.IsNullOrWhiteSpace(additional) ? additional + Environment.NewLine : \"\") + ex.StackTrace;\n        SourceTextBox.Text = ex.Source;\n\n        if (ex.TargetSite != null)\n            SourceTextBox.Text += \".\" + ex.TargetSite.Name;\n\n        //If there's additional details.\n        if (!string.IsNullOrEmpty(ex.HelpLink))\n            StackTextBox.Text += Environment.NewLine + Environment.NewLine + ex.HelpLink;\n\n        if (ex.InnerException != null)\n            InnerButton.IsEnabled = true;\n\n        #endregion\n    }\n\n    private void InnerButton_Click(object sender, RoutedEventArgs e)\n    {\n        var errorViewer = new ExceptionViewer(_exception.InnerException);\n        errorViewer.ShowDialog();\n\n        GC.Collect(1);\n    }\n\n    private void DoneButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Feedback.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Feedback\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n            Title=\"{DynamicResource S.Feedback.Feedback}\" MinHeight=\"500\" MinWidth=\"700\" Height=\"500\" Width=\"750\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" WindowStartupLocation=\"CenterScreen\" UseLayoutRounding=\"True\" \n            Loaded=\"Feedback_Loaded\">\n\n    <Grid x:Name=\"MainGrid\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"1*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Margin=\"6\" Background=\"{StaticResource Vector.Application}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeLabel\" Text=\"{DynamicResource S.Feedback.Header}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <TextBlock Grid.Column=\"2\" FontSize=\"13\" Foreground=\"{DynamicResource Element.Foreground.Header}\" TextAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"3\">\n                <TextBlock Text=\"{DynamicResource S.Feedback.LanguageInfo1}\"/>\n                <LineBreak></LineBreak>\n                <TextBlock Text=\"{DynamicResource S.Feedback.LanguageInfo2}\"/>\n            </TextBlock>\n        </Grid>\n       \n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"2\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"21\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"21\"/>\n                <RowDefinition/>\n                <RowDefinition Height=\"21\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <n:LabelSeparator Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Feedback.Title}\"/>\n            <n:ExtendedTextBox Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"TitleTextBox\" Margin=\"5\" Height=\"24\" MaxLength=\"255\" TextWrapping=\"Wrap\" IsObligatory=\"True\"/>\n\n            <n:LabelSeparator Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Text=\"{DynamicResource S.Feedback.Message}\"/>\n            <n:ExtendedTextBox Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" x:Name=\"MessageTextBox\" Margin=\"5\" AcceptsReturn=\"True\" TextWrapping=\"Wrap\" VerticalContentAlignment=\"Top\"\n                               AcceptsTab=\"True\" VerticalScrollBarVisibility=\"Auto\" IsObligatory=\"True\" Watermark=\"{DynamicResource S.Feedback.Message.Info}\"/>\n\n            <n:LabelSeparator Grid.Row=\"4\" Grid.Column=\"0\" Text=\"{DynamicResource S.Feedback.Type}\"/>\n            <StackPanel Grid.Row=\"5\" Grid.Column=\"0\" Orientation=\"Horizontal\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                <n:ExtendedCheckBox x:Name=\"IssueCheckBox\" Text=\"{DynamicResource S.Feedback.IssueBug}\" Margin=\"5,3\" IsChecked=\"True\"/>\n                <n:ExtendedCheckBox x:Name=\"SuggestionCheckBox\" Text=\"{DynamicResource S.Feedback.Suggestion}\" Margin=\"5,3\" IsChecked=\"True\"/>\n            </StackPanel>\n\n            <n:LabelSeparator Grid.Row=\"4\" Grid.Column=\"1\" Text=\"{DynamicResource S.Feedback.YourEmail}\" BorderThickness=\"0,1,0,0\"/>\n            <n:ExtendedTextBox Grid.Row=\"5\" Grid.Column=\"1\" x:Name=\"EmailTextBox\" Margin=\"5\" Height=\"24\" MaxLength=\"255\" VerticalContentAlignment=\"Center\" IsObligatory=\"True\"\n                               Text=\"{Binding Source={x:Static t:UserSettings.All}, Path=LatestFeedbackEmail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"3\" x:Name=\"AttachmentsGrid\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Feedback.Attachments}\"/>\n            <ListBox Grid.Row=\"1\" x:Name=\"AttachmentListBox\" Margin=\"3\" MaxHeight=\"100\" MinHeight=\"30\" BorderThickness=\"0\"\n                     Background=\"Transparent\" ScrollViewer.HorizontalScrollBarVisibility=\"Disabled\" ScrollViewer.CanContentScroll=\"False\">\n                <ListBox.ItemsPanel>\n                    <ItemsPanelTemplate>\n                        <WrapPanel Orientation=\"Horizontal\" IsItemsHost=\"True\"/>\n                    </ItemsPanelTemplate>\n                </ListBox.ItemsPanel>\n\n                <ListBox.ItemContainerStyle>\n                    <Style TargetType=\"{x:Type ListBoxItem}\">\n                        <Setter Property=\"SnapsToDevicePixels\" Value=\"True\"/>\n                        <Setter Property=\"Padding\" Value=\"2\"/>\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\"/>\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\n                        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                        <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Style.FocusVisual.NoMargin}\"/>\n\n                        <Setter Property=\"Template\">\n                            <Setter.Value>\n                                <ControlTemplate TargetType=\"{x:Type n:AttachmentListBoxItem}\">\n                                    <Border x:Name=\"Bd\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" CornerRadius=\"4\"\n                                            Background=\"{TemplateBinding Background}\" Padding=\"{TemplateBinding Padding}\" ToolTip=\"{TemplateBinding Attachment}\">\n                                        <Grid>\n                                            <Grid.ColumnDefinitions>\n                                                <ColumnDefinition Width=\"Auto\"/>\n                                                <ColumnDefinition/>\n                                                <ColumnDefinition Width=\"Auto\"/>\n                                            </Grid.ColumnDefinitions>\n\n                                            <Viewbox Grid.Column=\"0\" x:Name=\"ViewBoxInternal\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" \n                                                     Stretch=\"Uniform\" StretchDirection=\"Both\" MaxWidth=\"20\" MaxHeight=\"20\" Effect=\"{x:Null}\">\n                                                <Image Source=\"{TemplateBinding FileIcon}\" Width=\"Auto\" Height=\"Auto\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                                            </Viewbox>\n\n                                            <Label Grid.Column=\"1\" x:Name=\"ShortNameLabel\" Content=\"{TemplateBinding ShortName}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" \n                                                   HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"0\" HorizontalContentAlignment=\"Center\" VerticalContentAlignment=\"Center\" Padding=\"1\"/>\n\n                                            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"RemoveButton\" Icon=\"{StaticResource Vector.Close}\" VerticalAlignment=\"Stretch\"\n                                                              Style=\"{StaticResource Style.Button.NoText}\" ContentWidth=\"12\" ContentHeight=\"12\" Width=\"12\" Visibility=\"Collapsed\" \n                                                              PreviewMouseLeftButtonUp=\"RemoveButton_OnMouseLeftButtonDown\" Margin=\"2,0,0,0\"/>\n                                        </Grid>\n                                    </Border>\n\n                                    <ControlTemplate.Triggers>\n                                        <MultiTrigger>\n                                            <MultiTrigger.Conditions>\n                                                <Condition Property=\"IsMouseOver\" Value=\"True\"/>\n                                            </MultiTrigger.Conditions>\n                                            <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Background}\"/>\n                                            <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.MouseOver.Border}\"/>\n                                        </MultiTrigger>\n\n                                        <MultiTrigger>\n                                            <MultiTrigger.Conditions>\n                                                <Condition Property=\"Selector.IsSelectionActive\" Value=\"False\"/>\n                                                <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                            </MultiTrigger.Conditions>\n\n                                            <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedInactive.Background}\"/>\n                                            <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedInactive.Border}\"/>\n                                            <Setter Property=\"Visibility\" TargetName=\"RemoveButton\" Value=\"Visible\"/>\n                                        </MultiTrigger>\n\n                                        <MultiTrigger>\n                                            <MultiTrigger.Conditions>\n                                                <Condition Property=\"Selector.IsSelectionActive\" Value=\"True\"/>\n                                                <Condition Property=\"IsSelected\" Value=\"True\"/>\n                                            </MultiTrigger.Conditions>\n\n                                            <Setter Property=\"Background\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Background}\"/>\n                                            <Setter Property=\"BorderBrush\" TargetName=\"Bd\" Value=\"{DynamicResource Item.SelectedActive.Border}\"/>\n                                            <Setter Property=\"Visibility\" TargetName=\"RemoveButton\" Value=\"Visible\"/>\n                                        </MultiTrigger>\n                                    </ControlTemplate.Triggers>\n                                </ControlTemplate>\n                            </Setter.Value>\n                        </Setter>\n                    </Style>\n                </ListBox.ItemContainerStyle>\n            </ListBox>\n        </Grid>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"40\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"0\" x:Name=\"AddAttachmentButton\" Text=\"{DynamicResource S.Feedback.AddAttachments}\" Icon=\"{StaticResource Vector.Add}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"AddAttachmentButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"RemoveAllAttachmentButton\" Text=\"{DynamicResource S.Feedback.RemoveAttachments}\" Icon=\"{StaticResource Vector.Remove}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\"  Click=\"RemoveAllAttachmentButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"3\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Feedback.Send}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"SendButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"4\" x:Name=\"PreviewButton\" Text=\"{DynamicResource S.Feedback.Preview}\" Icon=\"{StaticResource Vector.Report}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"PreviewButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"5\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"CancelButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Feedback.xaml.cs",
    "content": "using Microsoft.Win32;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Util;\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Management;\nusing System.Reflection;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Input;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Feedback\n{\n    private ObservableCollection<AttachmentListBoxItem> _fileList = new();\n\n    public Feedback()\n    {\n        InitializeComponent();\n    }\n\n    #region Events\n\n    private async void Feedback_Loaded(object sender, RoutedEventArgs e)\n    {\n        Cursor = Cursors.AppStarting;\n        MainGrid.IsEnabled = false;\n\n        await Task.Factory.StartNew(LoadFiles);\n\n        MainGrid.IsEnabled = true;\n        Cursor = Cursors.Arrow;\n    }\n\n    private void AddAttachmentButton_Click(object sender, RoutedEventArgs e)\n    {\n        var ofd = new OpenFileDialog\n        {\n            InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop),\n            Multiselect = true\n        };\n\n        var result = ofd.ShowDialog(this);\n\n        if (!result.Value)\n            return;\n\n        foreach (var fileName in ofd.FileNames)\n        {\n            if (!_fileList.Any(x => x.Attachment.Equals(fileName)))\n                _fileList.Add(new AttachmentListBoxItem(fileName));\n        }\n    }\n\n    private void SendButton_Click(object sender, RoutedEventArgs e)\n    {\n        Send();\n    }\n\n    private void PreviewButton_Click(object sender, RoutedEventArgs e)\n    {\n        var preview = new FeedbackPreview\n        {\n            Owner = this, \n            Html = BuildBody(TitleTextBox.Text, MessageTextBox.Text, EmailTextBox.Text, IssueCheckBox.IsChecked == true, SuggestionCheckBox.IsChecked == true)\n        };\n        preview.ShowDialog();\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n\n    private void RemoveButton_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        _fileList.RemoveAt(AttachmentListBox.SelectedIndex);\n    }\n\n    private void RemoveAllAttachmentButton_Click(object sender, RoutedEventArgs e)\n    {\n        _fileList.Clear();\n    }\n\n    #endregion\n\n    #region Methods\n\n    private async void LoadFiles()\n    {\n        try\n        {\n            var logFolder = Path.Combine(UserSettings.All.LogsFolder, \"ScreenToGif\", \"Logs\");\n            var local = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\");\n            var appData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\", \"Settings.xaml\");\n\n            var list = new List<string>();\n\n            //Search for file inside the log folder.\n            if (Directory.Exists(logFolder))\n                list.AddRange(await Task.Factory.StartNew(() => Directory.GetFiles(logFolder).ToList()));\n\n            //Add the Settings file too.\n            if (File.Exists(local))\n                list.Add(local);\n\n            if (File.Exists(appData))\n                list.Add(appData);\n\n            Dispatcher.Invoke(() => AttachmentListBox.ItemsSource = _fileList = new ObservableCollection<AttachmentListBoxItem>(list.Select(s => new AttachmentListBoxItem(s))));\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to load the default attachments\");\n        }\n    }\n\n    private string GetProcessor()\n    {\n        var sb = new StringBuilder();\n        sb.Append(\"<tr><th>Processor</th>\");\n        sb.Append(\"<th>Cores</th></tr>\");\n\n        try\n        {\n            using (var searcher = new ManagementObjectSearcher(\"select * from Win32_Processor\"))\n            {\n                foreach (var obj in searcher.Get())\n                {\n                    sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", obj[\"Name\"]);\n                    sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0} ({1})</td></tr>\", obj[\"NumberOfCores\"], obj[\"NumberOfLogicalProcessors\"]);\n                }\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Error while trying to find a processor.\");\n\n            sb.AppendFormat(\"<tr><td colspan=\\\"2\\\" class=\\\"textcentered\\\">No processor found ({0})</td></tr>\", e.Message);\n        }\n\n        return sb.ToString();\n    }\n\n    private string GetGraphicsAdapter()\n    {\n        var sb = new StringBuilder();\n        sb.Append(\"<tr><th>Graphics adapter</th>\");\n        sb.Append(\"<th>Driver version</th></tr>\");\n\n        try\n        {\n            using (var searcher = new ManagementObjectSearcher(\"select * from Win32_VideoController\"))\n            {\n                foreach (var obj in searcher.Get())\n                {\n                    sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0} @ {1}Hz</td>\", obj[\"Name\"], obj[\"CurrentRefreshRate\"]);\n                    sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td></tr>\", obj[\"DriverVersion\"]);\n                }\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Error while trying to find a graphics adapter.\");\n\n            sb.AppendFormat(\"<tr><td class=\\\"textcentered\\\">No graphics adapter found ({0})</td></tr>\", e.Message);\n        }\n\n        return sb.ToString();\n    }\n\n    private string BuildBody(string title, string message, string email, bool issue, bool suggestion)\n    {\n        var sb = new StringBuilder();\n        sb.Append(\"<html xmlns:msxsl=\\\"urn:schemas-microsoft-com:xslt\\\">\");\n        sb.Append(\"<head><meta content=\\\"en-us\\\" http-equiv=\\\"Content-Language\\\" />\" +\n                  \"<meta content=\\\"text/html; charset=utf-16\\\" http-equiv=\\\"Content-Type\\\" />\" +\n                  \"<title>ScreenToGif - Feedback</title>\" +\n                  \"</head>\");\n\n        sb.AppendFormat(\"<style>{0}</style>\", Util.Other.GetTextResource(\"ScreenToGif.Resources.Style.css\"));\n\n        sb.Append(\"<body>\");\n        sb.AppendFormat(\"<h1>{0}</h1>\", (title ?? \"\").Length > 0 ? title : \"Title of the feedback\");\n        sb.Append(\"<div id=\\\"content\\\"><div>\");\n        sb.Append(\"<h2>Overview</h2>\");\n        sb.Append(\"<div id=\\\"overview\\\"><table>\");\n\n        //First overview row.\n        sb.Append(\"<tr><th>User</th>\");\n        sb.Append(\"<th>Machine</th>\");\n        sb.Append(\"<th>Startup</th>\");\n        sb.Append(\"<th>Date</th>\");\n        sb.Append(\"<th>Running</th>\");\n        sb.Append(\"<th>Version</th></tr>\");\n\n        var culture = new CultureInfo(\"pt-BR\");\n\n        sb.AppendFormat(\"<tr><td class=\\\"textcentered\\\">{0}</td>\", Environment.UserName);\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", Environment.MachineName);\n        sb.AppendFormat(culture, \"<td class=\\\"textcentered\\\">{0:g}</td>\", Global.StartupDateTime);\n        sb.AppendFormat(culture, \"<td class=\\\"textcentered\\\">{0:g}</td>\", DateTime.Now);\n        sb.AppendFormat(culture, \"<td class=\\\"textcentered\\\">{0:d':'hh':'mm':'ss}</td>\", Global.StartupDateTime != DateTime.MinValue ? DateTime.Now - Global.StartupDateTime : TimeSpan.Zero);\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td></tr>\", Assembly.GetExecutingAssembly().GetName().Version?.ToString(4));\n\n        //Second overview row.\n        sb.Append(\"<tr><th colspan=\\\"2\\\">Windows</th>\");\n        sb.Append(\"<th>Architecture</th>\");\n        sb.Append(\"<th>Used</th>\");\n        sb.Append(\"<th>Available</th>\");\n        sb.Append(\"<th>Total</th></tr>\");\n\n        var status = new MemoryStatusEx(true);\n        Kernel32.GlobalMemoryStatusEx(ref status);\n\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\" colspan=\\\"2\\\">{0}</td>\", Environment.OSVersion.Version);\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", Environment.Is64BitOperatingSystem ? \"64 bits\" : \"32 Bits\");\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", Humanizer.BytesToString(Environment.WorkingSet));\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", Humanizer.BytesToString(status.AvailablePhysicalMemory));\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td></tr>\", Humanizer.BytesToString(status.TotalPhysicalMemory));\n\n        //Third overview row.\n        sb.Append(\"<tr><th colspan=\\\"3\\\">E-mail</th>\");\n        sb.Append(\"<th>.Net version</th>\");\n        sb.Append(\"<th>Issue?</th>\");\n        sb.Append(\"<th>Suggestion?</th></tr>\");\n\n        sb.AppendFormat(\"<td colspan=\\\"3\\\" class=\\\"textcentered\\\">{0}</td>\", (email ?? \"\").Length > 0 ? email : \"example@outlook.com\");\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", FrameworkHelper.QueryFrameworkVersion());\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", issue ? \"Yes\" : \"No\");\n        sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td></tr></table></div></div>\", suggestion ? \"Yes\" : \"No\");\n\n        //Processors.\n        sb.Append(\"<br><h2>Processors</h2><table>\");\n        sb.Append(GetProcessor());\n        sb.Append(GetGraphicsAdapter());\n        sb.Append(\"</table>\");\n\n        //System.Windows.Forms.SystemInformation.PowerStatus.BatteryChargeStatus == System.Windows.Forms.BatteryChargeStatus.NoSystemBattery\n\n        //Monitors.\n        sb.Append(\"<br><h2>Monitors</h2><table>\");\n        sb.Append(\"<tr><th>Name</th>\");\n        sb.Append(\"<th>Bounds</th>\");\n        sb.Append(\"<th>Working area</th>\");\n        sb.Append(\"<th>DPI/Scale</th>\");\n        sb.Append(\"<th>Graphics adapter</th>\");\n        sb.Append(\"<th>Primary?</th></tr>\");\n\n        foreach (var monitor in MonitorHelper.AllMonitors)\n        {\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0} ({1})</td>\", monitor.FriendlyName, monitor.Name);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}:{1} • {2}x{3}</td>\", monitor.Bounds.Left, monitor.Bounds.Top, monitor.Bounds.Width, monitor.Bounds.Height);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}:{1} • {2}x{3}</td>\", monitor.WorkingArea.Left, monitor.WorkingArea.Top, monitor.WorkingArea.Width, monitor.WorkingArea.Height);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}dpi / {1:#00}%</td>\", monitor.Dpi, monitor.Dpi / 96d * 100d);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", monitor.AdapterName);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td></tr>\", monitor.IsPrimary ? \"Yes\" : \"No\");\n        }\n\n        sb.Append(\"</table>\");\n\n        if (MonitorHelper.AllMonitors.Count > 0)\n        {\n            sb.AppendFormat(\"\");\n\n            //sb.Append(\"<svg>\" +\n            //          \"<circle cx=\\\"40\\\" cy=\\\"40\\\" r=\\\"24\\\" style=\\\"stroke:#006600; fill:#00cc00\\\"/>\" +\n            //          \"<rect id=\\\"box\\\" x=\\\"0\\\" y=\\\"0\\\" width=\\\"50\\\" height=\\\"50\\\" style=\\\"stroke:#006600; fill:#00cc00\\\"/>\" +\n            //          \"</svg>\");\n        }\n\n        //Drives.\n        sb.Append(\"<br><h2>Drives</h2><table>\");\n        sb.Append(\"<tr><th>Root</th>\");\n        sb.Append(\"<th>Used</th>\");\n        sb.Append(\"<th>Free</th>\");\n        sb.Append(\"<th>Total</th>\");\n        sb.Append(\"<th>Format</th>\");\n        sb.Append(\"<th>Type</th>\");\n        sb.Append(\"<th>Ready?</th></tr>\");\n\n        foreach (var drive in DriveInfo.GetDrives())\n        {\n            #region Try get the size\n\n            var total = 0L;\n            var available = 0L;\n            var format = \"\";\n\n            try\n            {\n                total = drive.TotalSize;\n                available = drive.AvailableFreeSpace;\n                format = drive.DriveFormat;\n            }\n            catch (Exception e)\n            {\n                //LogWriter.Log(e, \"Not possible to get driver details\");\n            }\n\n            #endregion\n\n            var used = total - available;\n            var usedPerc = Math.Round(MathExtensions.CrossMultiplication((decimal)total, used, null), 1);\n            var avaiPerc = Math.Round(MathExtensions.CrossMultiplication((decimal)total, available, null), 1);\n                \n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", drive.Name);\n            sb.AppendFormat(\"<td class=\\\"textRight\\\">({0} %) {1}</td>\", usedPerc, Humanizer.BytesToString(used, \"N1\"));\n            sb.AppendFormat(\"<td class=\\\"textRight\\\">({0} %) {1}</td>\", avaiPerc, Humanizer.BytesToString(available, \"N1\"));\n            sb.AppendFormat(\"<td class=\\\"textRight\\\">{0}</td>\", Humanizer.BytesToString(total, \"N1\"));\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", format);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td>\", drive.DriveType);\n            sb.AppendFormat(\"<td class=\\\"textcentered\\\">{0}</td></tr>\", drive.IsReady ? \"Yes\" : \"No\");\n        }\n\n        sb.Append(\"<table>\");\n\n        //Details.\n        sb.Append(\"<br><h2>Details</h2><div><div><table>\");\n        sb.Append(\"<tr id=\\\"ProjectNameHeaderRow\\\"><th class=\\\"messageHeader\\\">Message</th></tr>\");\n        sb.Append(\"<tr name=\\\"MessageRowClassProjectName\\\">\");\n        sb.AppendFormat(\"<td class=\\\"messageCell\\\">{0}</td></tr></table>\", message.Replace(Environment.NewLine, \"<br>\"));\n        sb.Append(\"</div></div></div></body></html>\");\n\n        return sb.ToString();\n    }\n\n    private void Send()\n    {\n        StatusBand.Hide();\n\n        #region Validation\n\n        if (TitleTextBox.Text.Length == 0)\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Feedback.Warning.Title\"));\n            TitleTextBox.Focus();\n            return;\n        }\n\n        if (MessageTextBox.Text.Length == 0)\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Feedback.Warning.Message\"));\n            MessageTextBox.Focus();\n            return;\n        }\n\n        if (EmailTextBox.Text.Length == 0)\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Feedback.Warning.Email\"));\n            EmailTextBox.Focus();\n            return;\n        }\n\n        #endregion\n\n        StatusBand.Info(LocalizationHelper.Get(\"S.Feedback.Sending\"));\n\n        Cursor = Cursors.AppStarting;\n        MainGrid.IsEnabled = false;\n        MainGrid.UpdateLayout();\n\n        Persist();\n\n        Cursor = Cursors.Arrow;\n        MainGrid.IsEnabled = true;\n    }\n\n    private async void Persist()\n    {\n        try\n        {\n            var path = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Feedback\");\n\n            if (!Directory.Exists(path))\n                Directory.CreateDirectory(path);\n\n            var name = Path.Combine(path, DateTime.Now.ToString(\"yy_MM_dd HH-mm-ss\"));\n\n            var title = TitleTextBox.Text;\n            var message = MessageTextBox.Text;\n            var email = EmailTextBox.Text;\n            var issue = IssueCheckBox.IsChecked == true;\n            var suggestion = SuggestionCheckBox.IsChecked == true;\n\n            await Task.Factory.StartNew(() => File.WriteAllText(name + \".html\", BuildBody(title, message, email, issue, suggestion)));\n\n            if (AttachmentListBox.Items.Count <= 0)\n            {\n                DialogResult = true;\n                return;\n            }\n\n            if (Directory.Exists(name))\n                Directory.Delete(name);\n\n            Directory.CreateDirectory(name);\n\n            foreach (var item in AttachmentListBox.Items.OfType<AttachmentListBoxItem>())\n            {\n                var sourceName = Path.GetFileName(item.Attachment);\n                var destName = Path.Combine(name, sourceName);\n\n                if (item.Attachment.StartsWith(UserSettings.All.LogsFolder))\n                    File.Move(item.Attachment, destName);\n                else\n                    File.Copy(item.Attachment, destName, true);\n            }\n\n            ZipFile.CreateFromDirectory(name, name + \".zip\");\n\n            Directory.Delete(name, true);\n\n            DialogResult = true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Persist feedback\");\n\n            Dialog.Ok(\"Feedback\", \"Error while creating the feedback\", ex.Message);\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/FeedbackPreview.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.FeedbackPreview\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"Feedback Preview\" Height=\"600\" Width=\"700\" MinHeight=\"450\" MinWidth=\"700\" WindowStartupLocation=\"CenterScreen\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Loaded=\"FeedbackPreview_Loaded\">\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n        \n        <WebBrowser Grid.Row=\"0\" x:Name=\"MainBrowser\"/>\n\n        <Grid Grid.Row=\"1\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"40\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Column=\"0\" TextAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"5\" Text=\"{DynamicResource S.Feedback.Preview.Info}\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/FeedbackPreview.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class FeedbackPreview\n{\n    public string Html { get; set; }\n\n    public FeedbackPreview()\n    {\n        InitializeComponent();\n    }\n\n    private void FeedbackPreview_Loaded(object sender, RoutedEventArgs e)\n    {\n        try\n        {\n            MainBrowser.NavigateToString(Html);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Displaying the preview\");\n\n            Dialog.Ok(\"Feedback Preview\", \"It was not possible to display the content\", ex.Message);\n        }\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/GoTo.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.GoTo\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.GoTo.Title}\" MinHeight=\"180\" Height=\"180\" MinWidth=\"340\" Width=\"340\" ResizeMode=\"CanMinimize\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" WindowStartupLocation=\"CenterOwner\" Loaded=\"Window_Loaded\">\n\n    <n:ExWindow.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Cancel}\" CanExecute=\"Cancel_CanExecute\" Executed=\"Cancel_Executed\"/>\n    </n:ExWindow.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Label Grid.Row=\"0\" x:Name=\"GoToLabel\" Content=\"{DynamicResource S.GoTo.Instruction}\" HorizontalAlignment=\"Stretch\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n        <n:IntegerUpDown Grid.Row=\"1\" x:Name=\"NumberIntegerUpDown\" Margin=\"5\" Padding=\"3\" VerticalContentAlignment=\"Stretch\" HorizontalContentAlignment=\"Left\" \n                         Height=\"26\" Minimum=\"0\" Maximum=\"100\" KeyDown=\"IntegerUpDown_OnKeyDown\"/>\n\n        <Grid Grid.Row=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"40\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Command=\"{StaticResource Command.Cancel}\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/GoTo.xaml.cs",
    "content": "using System.Windows;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class GoTo\n{\n    #region Properties\n\n    public int Maximum { get; set; }\n\n    public int Selected { get; set; }\n\n    #endregion\n\n    public GoTo(int maximum)\n    {\n        InitializeComponent();\n\n        Maximum = maximum;\n    }\n\n    #region Events\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        GoToLabel.Content = string.Format(GoToLabel.Content.ToString(), Maximum);\n        NumberIntegerUpDown.Maximum = Maximum;\n\n        NumberIntegerUpDown.Focus();\n        NumberIntegerUpDown.SelectAll();\n    }\n\n    private void Cancel_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = true;\n    }\n\n    private void Cancel_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n        \n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Selected = NumberIntegerUpDown.Value;\n        DialogResult = true;\n    }\n\n    private void IntegerUpDown_OnKeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key == Key.Enter || e.Key == Key.Return)\n            OkButton_Click(null, null);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/GraphicsConfigurationDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.GraphicsConfigurationDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Warning.Graphics.Title}\" WindowStartupLocation=\"CenterScreen\" Topmost=\"True\" SnapsToDevicePixels=\"True\"\n            Height=\"300\" Width=\"560\" MinHeight=\"500\" MinWidth=\"500\" SizeToContent=\"Height\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"110\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border x:Name=\"IconBorder\" Margin=\"6\" Background=\"{DynamicResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeTextBlock\" Text=\"{DynamicResource S.Warning.Graphics.Title}\" Margin=\"5,0\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"DetailsButton\" Text=\"{DynamicResource S.Encoder.Details}\" Icon=\"{DynamicResource Vector.Table}\" \n                              ContentWidth=\"20\" ContentHeight=\"20\" Margin=\"3\" Padding=\"2\" Style=\"{StaticResource Style.Button.Horizontal}\" TextWrapping=\"NoWrap\"\n                              Click=\"DetailsButton_Click\" FontSize=\"14\" FontFamily=\"{DynamicResource FontFamilyLight}\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\" Margin=\"0,0,0,15\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Grid.Row=\"0\" x:Name=\"HeaderTextBlock\" Text=\"{DynamicResource S.Warning.Graphics.Instruction}\" Foreground=\"{DynamicResource Element.Foreground.Header}\" \n                       FontSize=\"18\" Margin=\"10\" HorizontalAlignment=\"Center\" TextAlignment=\"Center\" TextWrapping=\"Wrap\"/>\n\n            <TextBlock Grid.Row=\"1\" x:Name=\"DetailsTextBlock\" Text=\"{DynamicResource S.Warning.Graphics.Message}\" FontSize=\"16\" Margin=\"6\" TextWrapping=\"Wrap\" \n                       Foreground=\"{DynamicResource Element.Foreground}\" TextAlignment=\"Left\" ScrollViewer.CanContentScroll=\"True\"/>\n\n            <Viewbox Grid.Row=\"2\" Stretch=\"Uniform\" StretchDirection=\"Both\" Margin=\"10\" VerticalAlignment=\"Center\">\n                <Canvas x:Name=\"MainCanvas\" SizeChanged=\"MainCanvas_SizeChanged\"/>\n            </Viewbox>\n\n            <TextBlock Grid.Row=\"3\" x:Name=\"ActionTextBlock\" Text=\"{DynamicResource S.Warning.Graphics.Action}\" FontSize=\"16\" Margin=\"6\" TextWrapping=\"Wrap\" \n                       Foreground=\"{DynamicResource Element.Foreground}\" TextAlignment=\"Left\" ScrollViewer.CanContentScroll=\"True\"/>\n            \n            <TextBlock Grid.Row=\"4\" x:Name=\"HyperlinkTextBlock\" TextAlignment=\"Center\" Margin=\"6,0,6,6\">\n                <Hyperlink Click=\"Hyperlink_Click\">\n                    <Run Text=\"{DynamicResource S.Warning.Graphics.Switch}\" FontSize=\"16\"/>\n                </Hyperlink>\n            </TextBlock>\n        </Grid>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{DynamicResource Vector.Ok}\" ContentWidth=\"18\" ContentHeight=\"18\" \n                              Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsDefault=\"True\" Click=\"OkButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"SendButton\" Text=\"{DynamicResource S.ErrorDialog.Send}\" Icon=\"{DynamicResource Vector.Email}\" ContentWidth=\"18\" ContentHeight=\"20\" \n                              Padding=\"4,0\" MinWidth=\"90\" Margin=\"5\" Click=\"SendButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/GraphicsConfigurationDialog.xaml.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing Microsoft.Win32;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class GraphicsConfigurationDialog\n{\n    #region Properties\n\n    private double _minLeft = SystemParameters.VirtualScreenLeft;\n    private double _minTop = SystemParameters.VirtualScreenTop;\n    private double _maxRight = SystemParameters.VirtualScreenWidth;\n    private double _maxBottom = SystemParameters.VirtualScreenHeight;\n\n    public Exception Exception { get; set; }\n\n    public Monitor Monitor { get; set; }\n\n    #endregion\n\n    public GraphicsConfigurationDialog()\n    {\n        InitializeComponent();\n            \n        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;\n    }\n\n    #region Eventos\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (Exception == null)\n            DetailsButton.IsEnabled = false;\n    }\n\n    private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)\n    {\n        DetectScreens();\n    }\n\n    private void DetailsButton_Click(object sender, RoutedEventArgs e)\n    {\n        var errorViewer = new ExceptionViewer(Exception);\n        errorViewer.ShowDialog();\n    }\n\n    private void Hyperlink_Click(object sender, RoutedEventArgs routedEventArgs)\n    {\n        try\n        {\n            Process.Start(\"ms-settings:display-advancedgraphics\");\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to open Windows Settings\");\n        }\n    }\n\n    private void MainCanvas_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        SetViewPort(_minLeft, _maxRight, _minTop, _maxBottom);\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    private async void SendButton_Click(object sender, RoutedEventArgs e)\n    {\n        var feedback = new Feedback { Topmost = true };\n\n        if (feedback.ShowDialog() != true)\n            return;\n\n        if (App.MainViewModel != null)\n            await Task.Factory.StartNew(App.MainViewModel.SendFeedback, TaskCreationOptions.LongRunning);\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void PrepareOk()\n    {\n        //No Graphics Settings page prior to Windows 10, build 17093.\n        if (Environment.OSVersion.Version.Major < 10 || Environment.OSVersion.Version.Build < 17093)\n        {\n            ActionTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Warning.Graphics.Action.Legacy\");\n            HyperlinkTextBlock.Visibility = Visibility.Collapsed;\n        }\n\n        DetectScreens();\n        OkButton.Focus();\n    }\n\n    public static bool Ok(Exception exception, Monitor monitor)\n    {\n        var dialog = new GraphicsConfigurationDialog\n        {\n            Exception = exception,\n            Monitor = monitor\n        };\n        dialog.PrepareOk();\n        var result = dialog.ShowDialog();\n\n        return result.HasValue && result.Value;\n    }\n\n    private void DetectScreens()\n    {\n        var monitors = MonitorHelper.AllMonitorsGranular();\n        _minLeft = monitors.Min(m => m.NativeBounds.Left);\n        _minTop = monitors.Min(m => m.NativeBounds.Top);\n        _maxRight = monitors.Max(m => m.NativeBounds.Right);\n        _maxBottom = monitors.Max(m => m.NativeBounds.Bottom);\n\n        MainCanvas.Children.Clear();\n\n        foreach (var monitor in monitors)\n        {\n            var rect = new Rectangle\n            {\n                Width = monitor.NativeBounds.Width,\n                Height = monitor.NativeBounds.Height,\n                StrokeThickness = 6\n            };\n            rect.SetResourceReference(Shape.StrokeProperty, \"Element.Foreground\");\n            rect.SetResourceReference(Shape.FillProperty, monitor.AdapterName == Monitor.AdapterName ? \"Element.Background.Checked\" : \"Element.Background.Hover\");\n\n            var textBlock = new TextBlock\n            {\n                Text = monitor.AdapterName,\n                TextAlignment = TextAlignment.Center,\n                HorizontalAlignment = HorizontalAlignment.Center,\n                VerticalAlignment = VerticalAlignment.Center,\n                FontSize = 26,\n                TextWrapping = TextWrapping.Wrap,\n                Margin = new Thickness(15)\n            };\n            textBlock.SetResourceReference(TextBlock.ForegroundProperty, \"Element.Foreground\");\n\n            var viewbox = new Viewbox\n            {\n                Child = textBlock,\n                Width = monitor.NativeBounds.Width,\n                Height = monitor.NativeBounds.Height,\n            };\n\n            MainCanvas.Children.Add(rect);\n            MainCanvas.Children.Add(viewbox);\n\n            Canvas.SetLeft(rect, monitor.NativeBounds.Left);\n            Canvas.SetTop(rect, monitor.NativeBounds.Top);\n            Canvas.SetLeft(viewbox, monitor.NativeBounds.Left);\n            Canvas.SetTop(viewbox, monitor.NativeBounds.Top);\n            Panel.SetZIndex(rect, 1);\n            Panel.SetZIndex(viewbox, 2);\n        }\n\n        MainCanvas.Width = Math.Abs(_minLeft) + Math.Abs(_maxRight);\n        MainCanvas.Height = Math.Abs(_minTop) + Math.Abs(_maxBottom);\n        MainCanvas.Measure(new Size(MainCanvas.Width, MainCanvas.Height));\n        MainCanvas.Arrange(new Rect(MainCanvas.DesiredSize));\n\n        SetViewPort(_minLeft, _maxRight, _minTop, _maxBottom);\n    }\n\n    public void SetViewPort(double minX, double maxX, double minY, double maxY)\n    {\n        var width = maxX - minX;\n        var height = maxY - minY;\n\n        var group = new TransformGroup();\n        group.Children.Add(new TranslateTransform(-minX, -minY));\n        group.Children.Add(new ScaleTransform(MainCanvas.ActualWidth / width, MainCanvas.ActualHeight / height));\n        MainCanvas.RenderTransform = group;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Insert.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Insert\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n            Title=\"{DynamicResource S.InsertFrames.Title}\" \n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" SnapsToDevicePixels=\"True\" \n            UseLayoutRounding=\"True\" WindowStartupLocation=\"CenterOwner\" \n            Height=\"500\" Width=\"870\" MinWidth=\"800\" MinHeight=\"600\" SizeToContent=\"Width\" \n            Loaded=\"Window_Loaded\" Closing=\"Window_Closing\" Activated=\"Window_Activated\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"1\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"120\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Margin=\"6\" Background=\"{StaticResource Vector.Add}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label Grid.Column=\"1\" Content=\"{DynamicResource S.InsertFrames.Title}\" Margin=\"5,0,5,0\" VerticalAlignment=\"Center\" Padding=\"2\" \n                   FontSize=\"18\" FontFamily=\"{DynamicResource FontFamilyLight}\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <Grid Grid.Column=\"2\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"15\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Column=\"0\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.InsertFrames.Info}\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" FontStyle=\"Italic\" FontSize=\"12\" \n                           TextWrapping=\"WrapWithOverflow\" VerticalAlignment=\"Center\"/>\n            </Grid>\n\n            <Separator Grid.Column=\"3\" Width=\"1\"/>\n\n            <Grid Grid.Column=\"4\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Margin=\"5\" Width=\"25\" Height=\"25\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                        Background=\"{StaticResource Vector.WidthHeight}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n                <Label Grid.Row=\"0\" Grid.Column=\"1\" Content=\"{DynamicResource S.InsertFrames.CanvasSize}\" VerticalAlignment=\"Center\" Padding=\"2\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"CanvasSizeTextBlock\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Text=\"0 × 0\"/>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" x:Name=\"ResetCanvasButton\" Margin=\"10,0,0,0\" TextWrapping=\"Wrap\"\n                                  Text=\"{DynamicResource S.InsertFrames.FitCanvas}\" Icon=\"{StaticResource Vector.PictureFit}\" ContentWidth=\"40\" ContentHeight=\"40\" \n                                  Style=\"{StaticResource Style.Button.Horizontal}\" ToolTip=\"{DynamicResource S.InsertFrames.FitCanvas.Info}\" Click=\"ResetCanvasButton_Click\"/>\n            </Grid>\n        </Grid>\n\n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"2\" x:Name=\"ContentGrid\">\n            <Grid.RowDefinitions>\n                <RowDefinition/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"5\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <ScrollViewer Grid.Row=\"0\" Grid.Column=\"0\" x:Name=\"LeftScrollViewer\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\"\n                          Background=\"{StaticResource Checker.DrawingBrush}\" BorderThickness=\"1,1,0,1\" BorderBrush=\"{DynamicResource Element.Border}\" PanningMode=\"Both\"\n                          PreviewMouseWheel=\"ScrollViewer_MouseWheel\" PreviewMouseRightButtonDown=\"ScrollViewer_PreviewMouseRightButtonDown\">\n                <Canvas x:Name=\"LeftCanvas\" Background=\"{Binding InsertFillColor, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrushConverter}, Mode=TwoWay}\">\n                    <Image Canvas.Left=\"0\" Canvas.Top=\"0\" x:Name=\"LeftImage\" Stretch=\"Fill\" SizeChanged=\"LeftImage_SizeChanged\"/>\n                </Canvas>\n            </ScrollViewer>\n\n            <Separator Grid.Row=\"0\" Grid.Column=\"1\" Grid.RowSpan=\"2\" Width=\"2\" Margin=\"2,0\"/>\n\n            <ScrollViewer Grid.Row=\"0\" Grid.Column=\"2\" x:Name=\"RightScrollViewer\" VerticalScrollBarVisibility=\"Auto\" HorizontalScrollBarVisibility=\"Auto\"\n                          Background=\"{StaticResource Checker.DrawingBrush}\" BorderThickness=\"0,1,1,1\" BorderBrush=\"{DynamicResource Element.Border}\" PanningMode=\"Both\"\n                          PreviewMouseWheel=\"ScrollViewer_MouseWheel\" PreviewMouseRightButtonDown=\"ScrollViewer_PreviewMouseRightButtonDown\">\n                <Canvas x:Name=\"RightCanvas\" Background=\"{Binding InsertFillColor, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrushConverter}, Mode=TwoWay}\">\n                    <Image Canvas.Left=\"0\" Canvas.Top=\"0\" x:Name=\"RightImage\" Stretch=\"Fill\" SizeChanged=\"RightImage_SizeChanged\"/>\n                </Canvas>\n            </ScrollViewer>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Text=\"{DynamicResource S.InsertFrames.InsertedFrames}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Top\"\n                       FontSize=\"16\" Foreground=\"{DynamicResource Element.Foreground.Header}\" Background=\"{DynamicResource Panel.Background.Level4}\" Effect=\"{StaticResource Shadow.Background.Small}\" Opacity=\"0.9\"/>\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" Text=\"{DynamicResource S.InsertFrames.CurrentFrames}\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Top\"\n                       FontSize=\"16\" Foreground=\"{DynamicResource Element.Foreground.Header}\" Background=\"{DynamicResource Panel.Background.Level4}\" Effect=\"{StaticResource Shadow.Background.Small}\" Opacity=\"0.9\"/>\n\n            <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Background=\"{StaticResource Vector.Arrow.Blue.Right}\" Width=\"22\" Height=\"22\" \n                    HorizontalAlignment=\"Center\" VerticalAlignment=\"Top\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n            \n            <Grid Grid.Row=\"1\" Grid.Column=\"0\" HorizontalAlignment=\"Center\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"35\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"1\"/>\n                    <ColumnDefinition Width=\"35\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"120\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Margin=\"5\" Background=\"{StaticResource Vector.WidthHeight}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.InsertFrames.ImageSize}\" Padding=\"3,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"LeftImageSizeTextBlock\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                           Margin=\"0,0,3,0\" Foreground=\"{DynamicResource Element.Foreground}\" Text=\"0 × 0\"/>\n\n                <Separator Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" Width=\"1\"/>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"3\" Grid.RowSpan=\"2\" Margin=\"5\" Background=\"{StaticResource Vector.Move}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"{DynamicResource S.InsertFrames.ImagePosition}\" Padding=\"3,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"4\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground}\">\n                    <TextBlock.Text>\n                        <MultiBinding StringFormat=\"{}X: {0:0.#}  Y: {1:0.#}\">\n                            <Binding ElementName=\"LeftImage\" Path=\"(Canvas.Left)\" Mode=\"OneWay\"/>\n                            <Binding ElementName=\"LeftImage\" Path=\"(Canvas.Top)\" Mode=\"OneWay\"/>\n                        </MultiBinding>\n                    </TextBlock.Text>\n                </TextBlock>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"5\" Grid.RowSpan=\"2\" x:Name=\"ResetLeftButton\" Text=\"{DynamicResource S.InsertFrames.ResetImageSizePosition}\" Icon=\"{StaticResource Vector.Repeat}\" \n                                  ContentWidth=\"20\" ContentHeight=\"20\" Style=\"{StaticResource Style.Button.Horizontal}\" Click=\"ResetLeftButton_Click\" Margin=\"10,0,0,0\"/>\n            </Grid>\n\n            <Grid Grid.Row=\"1\" Grid.Column=\"2\" HorizontalAlignment=\"Center\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"35\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"1\"/>\n                    <ColumnDefinition Width=\"35\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"120\"/>\n                </Grid.ColumnDefinitions>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Margin=\"5\" Background=\"{StaticResource Vector.WidthHeight}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.InsertFrames.ImageSize}\" Padding=\"3,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"RightImageSizeTextBlock\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"\n                           Margin=\"0,0,3,0\" Foreground=\"{DynamicResource Element.Foreground}\" Text=\"0 × 0\"/>\n\n                <Separator Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" Width=\"1\"/>\n\n                <Border Grid.Row=\"0\" Grid.Column=\"3\" Grid.RowSpan=\"2\" Margin=\"5\" Background=\"{StaticResource Vector.Move}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"4\" Text=\"{DynamicResource S.InsertFrames.ImagePosition}\" Padding=\"3,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"4\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground}\">\n                    <TextBlock.Text>\n                        <MultiBinding StringFormat=\"{}X: {0:0.#}  Y: {1:0.#}\">\n                            <Binding ElementName=\"RightImage\" Path=\"(Canvas.Left)\" Mode=\"OneWay\"/>\n                            <Binding ElementName=\"RightImage\" Path=\"(Canvas.Top)\" Mode=\"OneWay\"/>\n                        </MultiBinding>\n                    </TextBlock.Text>\n                </TextBlock>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"5\" Grid.RowSpan=\"2\" x:Name=\"ResetRightButton\" Text=\"{DynamicResource S.InsertFrames.ResetImageSizePosition}\" Icon=\"{StaticResource Vector.Repeat}\" \n                                  ContentWidth=\"20\" ContentHeight=\"20\" Style=\"{StaticResource Style.Button.Horizontal}\" Click=\"ResetRightButton_Click\" Margin=\"10,0,0,0\"/>\n            </Grid>\n        </Grid>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"150\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <Grid Grid.Column=\"0\" x:Name=\"ProgressGrid\" Visibility=\"Hidden\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <Label x:Name=\"StatusLabel\" Content=\"{DynamicResource S.InsertFrames.Importing}\" Margin=\"5,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n                <ProgressBar x:Name=\"InsertProgressBar\" Grid.Column=\"1\" Height=\"4\" Margin=\"5,0\"/>\n            </Grid>\n\n            <Grid Grid.Column=\"0\" x:Name=\"InsertionGrid\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" Text=\"{DynamicResource S.InsertFrames.Info2}\" FontSize=\"13\" Margin=\"5,3\"\n                           Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" TextWrapping=\"Wrap\"/>\n\n                <RadioButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"BeforeRadioButton\" Content=\"{DynamicResource S.InsertFrames.Before}\" VerticalContentAlignment=\"Center\" Margin=\"10,0,0,0\" IsChecked=\"True\"/>\n                <RadioButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"AfterRadioButton\" Content=\"{DynamicResource S.InsertFrames.After}\" VerticalContentAlignment=\"Center\" Margin=\"10,0,00,0\"/>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"3\" Grid.RowSpan=\"2\" Text=\"{DynamicResource S.InsertFrames.Frame}\" Padding=\"0\" Margin=\"20,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" FontSize=\"14\" VerticalAlignment=\"Center\"/>\n                <TextBlock  Grid.Row=\"0\" Grid.Column=\"4\" Grid.RowSpan=\"2\" x:Name=\"FrameNumberTextBlock\" Text=\"0\" Margin=\"10,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" FontSize=\"14\" VerticalAlignment=\"Center\"/>\n            </Grid>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"FillColorButton\" Text=\"{DynamicResource S.InsertFrames.SelectColorFill}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"FillColorButton_Click\">\n                <n:ExtendedButton.Icon>\n                    <DrawingBrush>\n                        <DrawingBrush.Drawing>\n                            <GeometryDrawing Brush=\"{Binding InsertFillColor, Source={x:Static t:UserSettings.All}, Converter={StaticResource ColorToBrushConverter}}\" Geometry=\"M 0,40 L 40,40 L 40,0 L 0,0 L 0,40 Z\">\n                                <GeometryDrawing.Pen>\n                                    <Pen Thickness=\"1\" Brush=\"{DynamicResource Element.Border}\"/>\n                                </GeometryDrawing.Pen>\n                            </GeometryDrawing>\n                        </DrawingBrush.Drawing>\n                    </DrawingBrush>\n                </n:ExtendedButton.Icon>\n            </n:ExtendedButton>\n\n            <n:ExtendedButton x:Name=\"OkButton\" Grid.Column=\"2\" Text=\"{DynamicResource S.Ok}\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Icon=\"{StaticResource Vector.Ok}\" Click=\"OkButton_Click\"/>\n            <n:ExtendedButton x:Name=\"CancelButton\" Grid.Column=\"3\" Text=\"{DynamicResource S.Cancel}\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Icon=\"{StaticResource Vector.Cancel}\" Click=\"CancelButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Insert.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Insert\n{\n    #region Variables\n\n    /// <summary>\n    /// The current list of frames.\n    /// </summary>\n    public List<FrameInfo> CurrentList { get; set; }\n    private List<FrameInfo> NewList { get; set; }\n\n    private bool _isRunning;\n    private bool _isCancelled;\n\n    private int _insertIndex;\n    AdornerLayer _adornerLayer;\n\n    private double _zoom = 1;\n    UIElement _selectedElement = null;\n\n    private double _leftDpi = 0;\n    private double _leftScale = 0;\n    private double _leftWidth = 0;\n    private double _leftHeight = 0;\n    private double _leftScaleDiff = 0;\n\n    private double _rightDpi = 0;\n    private double _rightScale = 0;\n    private double _rightWidth = 0;\n    private double _rightHeight = 0;\n    private double _rightScaleDiff = 0;\n\n    #endregion\n\n\n    /// <summary>\n    /// Default constructor.\n    /// </summary>\n    /// <param name=\"currentList\">The current list.</param>\n    /// <param name=\"newList\">The list to be inserted.</param>\n    /// <param name=\"insertAt\">The index to insert the list.</param>\n    public Insert(List<FrameInfo> currentList, List<FrameInfo> newList, int insertAt)\n    {\n        InitializeComponent();\n\n        CurrentList = currentList;\n        NewList = newList;\n        _insertIndex = insertAt;\n\n        FrameNumberTextBlock.Text = insertAt.ToString();\n    }\n\n\n    #region Mouse Events\n\n    /// <summary>\n    /// Handler for clearing element selection, adorner removal.\n    /// </summary>\n    private void Unselect_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (_selectedElement == null)\n            return;\n\n        var adorner = _adornerLayer.GetAdorners(_selectedElement)?.FirstOrDefault();\n\n        if (adorner != null)\n            _adornerLayer.Remove(adorner);\n\n        _selectedElement = null;\n    }\n\n    /// <summary>\n    ///  Handler for element selection on the canvas providing resizing adorner.\n    /// </summary>\n    private void Select_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        //Ignore this event if it's the same element.\n        if (Equals(_selectedElement, sender as UIElement))\n            return;\n\n        #region Remove elsewhere before adding the layer.\n\n        if (_selectedElement != null)\n        {\n            var adornerList = _adornerLayer.GetAdorners(_selectedElement);\n\n            var adorner = adornerList?.OfType<ResizingAdorner>().FirstOrDefault();\n\n            if (adorner != null)\n            {\n                adorner.Destroy();\n\n                //Remove the adorner from the selected element\n                _adornerLayer.Remove(adorner);\n                _selectedElement = null;\n            }\n        }\n\n        #endregion\n\n        #region Add\n\n        _selectedElement = e.Source as UIElement;\n\n        if (_selectedElement != null)\n        {\n            _adornerLayer = AdornerLayer.GetAdornerLayer(_selectedElement);\n            _adornerLayer?.Add(new ResizingAdorner(_selectedElement, _selectedElement is Image, ContentGrid, e.GetPosition(ContentGrid)));\n        }\n\n        #endregion\n    }\n\n    #endregion\n\n    #region Content Events\n\n    private void Canvas_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        LeftCanvas.SizeChanged -= Canvas_SizeChanged;\n        RightCanvas.SizeChanged -= Canvas_SizeChanged;\n\n        if (sender is Canvas canvas)\n        {\n            if (canvas.Name.StartsWith(\"Right\"))\n            {\n                #region If Right, changes the Left Sizes\n\n                LeftCanvas.Width = canvas.ActualWidth;\n                LeftCanvas.Height = canvas.ActualHeight;\n\n                #endregion\n            }\n            else\n            {\n                #region Else Left, changes the Right Sizes\n\n                RightCanvas.Width = canvas.ActualWidth;\n                RightCanvas.Height = canvas.ActualHeight;\n\n                #endregion\n            }\n        }\n\n        CanvasSizeTextBlock.Text = $\"{RightCanvas.ActualWidth * _rightScaleDiff * _rightScale} × {RightCanvas.ActualHeight * _rightScaleDiff * _rightScale} • {Math.Round(_rightDpi, 0)} {LocalizationHelper.Get(\"S.Resize.Dpi\")}\";\n\n        LeftCanvas.SizeChanged += Canvas_SizeChanged;\n        RightCanvas.SizeChanged += Canvas_SizeChanged;\n    }\n\n    private void ScrollViewer_MouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        if (sender is not ScrollViewer scroller)\n            return;\n\n        switch (Keyboard.Modifiers)\n        {\n            case ModifierKeys.Control:\n\n                #region Zoom\n\n                if (e.Delta > 0)\n                {\n                    if (_zoom < 5.0)\n                        _zoom += 0.1;\n                }\n                if (e.Delta < 0)\n                {\n                    if (_zoom > 0.2)\n                        _zoom -= 0.1;\n                }\n\n                LeftCanvas.LayoutTransform = new ScaleTransform(_zoom, _zoom);\n                RightCanvas.LayoutTransform = new ScaleTransform(_zoom, _zoom);\n\n                var centerOfViewport = new Point(scroller.ViewportWidth / 2, scroller.ViewportHeight / 2);\n                //_lastCenterPositionOnTarget = _scrollViewer.TranslatePoint(centerOfViewport, _grid);\n\n                #endregion\n\n                break;\n\n            case ModifierKeys.Alt:\n\n                var verDelta = e.Delta > 0 ? -10.5 : 10.5;\n                scroller.ScrollToVerticalOffset(scroller.VerticalOffset + verDelta);\n\n                break;\n\n            case ModifierKeys.Shift:\n\n                var horDelta = e.Delta > 0 ? -10.5 : 10.5;\n                scroller.ScrollToHorizontalOffset(scroller.HorizontalOffset + horDelta);\n\n                break;\n        }\n    }\n\n    private void ScrollViewer_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        _zoom = 1;\n        LeftCanvas.LayoutTransform = new ScaleTransform(_zoom, _zoom);\n        RightCanvas.LayoutTransform = new ScaleTransform(_zoom, _zoom);\n    }\n\n    private void ResetLeftButton_Click(object sender, RoutedEventArgs e)\n    {\n        LeftImage.Width = _leftWidth;\n        LeftImage.Height = _leftHeight;\n\n        Canvas.SetTop(LeftImage, 0);\n        Canvas.SetLeft(LeftImage, 0);\n    }\n\n    private void ResetRightButton_Click(object sender, RoutedEventArgs e)\n    {\n        RightImage.Width = _rightWidth;\n        RightImage.Height = _rightHeight;\n\n        Canvas.SetTop(RightImage, 0);\n        Canvas.SetLeft(RightImage, 0);\n    }\n\n    private void ResetCanvasButton_Click(object sender, RoutedEventArgs e)\n    {\n        LeftCanvas.Height = LeftImage.ActualHeight + Canvas.GetTop(LeftImage);\n        LeftCanvas.Width = LeftImage.ActualWidth + Canvas.GetLeft(LeftImage);\n\n        RightCanvas.Height = RightImage.ActualHeight + Canvas.GetTop(RightImage);\n        RightCanvas.Width = RightImage.ActualWidth + Canvas.GetLeft(RightImage);\n\n        EqualizeSizes();\n    }\n\n    #endregion\n\n    #region Events\n\n    private void Window_Activated(object sender, EventArgs e)\n    {\n        SizeToContent = SizeToContent.Manual;\n        Activated -= Window_Activated;\n\n        #region Set as Maximized if the window gets big enough\n\n        var size = WindowHelper.ScreenSizeFromWindow(this);\n\n        if (size.Height - Height < 200 || size.Width - Width < 200)\n            WindowState = WindowState.Maximized;\n\n        #endregion\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        #region Size check\n\n        var left = NewList[0].Path.SourceFrom();\n        var right = CurrentList[0].Path.SourceFrom();\n\n        //Left: New, Right: Current\n        LeftImage.Source = left;\n        RightImage.Source = right;\n\n        //The image should be displayed based on the scale of the screen.\n        _leftScale = Math.Round(left.DpiX / 96d, 2);\n        _rightScale = Math.Round(right.DpiX / 96d, 2);\n        var scale = this.Scale();\n\n        _leftDpi = left.DpiX;\n        _rightDpi = right.DpiX;\n\n        _leftScaleDiff = Math.Round(scale / _leftScale, 2);\n        _rightScaleDiff = Math.Round(scale / _rightScale, 2);\n\n        LeftImage.Width = _leftWidth = left.Width / _leftScaleDiff;\n        LeftImage.Height = _leftHeight = left.Height / _leftScaleDiff;\n\n        RightImage.Width = _rightWidth = right.Width / _rightScaleDiff;\n        RightImage.Height = _rightHeight = right.Height / _rightScaleDiff;\n\n        #endregion\n\n        CanvasSizeTextBlock.Text = $\"{right.PixelWidth} × {right.PixelHeight} • {Math.Round(right.DpiX, 0)} {LocalizationHelper.Get(\"S.Resize.Dpi\")}\";\n        LeftImageSizeTextBlock.Text = $\"{left.PixelWidth} × {left.PixelHeight} • {Math.Round(left.DpiX, 0)} {LocalizationHelper.Get(\"S.Resize.Dpi\")}\";\n        RightImageSizeTextBlock.Text = $\"{right.PixelWidth} × {right.PixelHeight} • {Math.Round(right.DpiX, 0)} {LocalizationHelper.Get(\"S.Resize.Dpi\")}\";\n\n        #region Initial sizing\n\n        LeftImage.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        LeftImage.Arrange(new Rect(new Point(0,0), LeftImage.DesiredSize));\n        RightImage.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        RightImage.Arrange(new Rect(new Point(0, 0), RightImage.DesiredSize));\n\n        if (Math.Abs(LeftImage.ActualWidth - RightImage.ActualWidth) > 0.01 || Math.Abs(LeftImage.ActualHeight - RightImage.ActualHeight) > 0.01)\n            StatusBand.Warning(LocalizationHelper.Get(\"S.InsertFrames.DifferentSizes\"));\n\n        LeftCanvas.Width = LeftImage.ActualWidth;\n        LeftCanvas.Height = LeftImage.ActualHeight;\n\n        RightCanvas.Width = RightImage.ActualWidth;\n        RightCanvas.Height = RightImage.ActualHeight;\n\n        EqualizeSizes();\n\n        #endregion\n\n        MouseLeftButtonDown += Unselect_MouseLeftButtonDown;\n\n        LeftImage.MouseLeftButtonDown += Select_PreviewMouseLeftButtonDown;\n        LeftCanvas.MouseLeftButtonDown += Select_PreviewMouseLeftButtonDown;\n\n        RightImage.MouseLeftButtonDown += Select_PreviewMouseLeftButtonDown;\n        RightCanvas.MouseLeftButtonDown += Select_PreviewMouseLeftButtonDown;\n\n        LeftCanvas.SizeChanged += Canvas_SizeChanged;\n        RightCanvas.SizeChanged += Canvas_SizeChanged;\n\n        UpdateLayout();\n    }\n\n    private void FillColorButton_Click(object sender, RoutedEventArgs e)\n    {\n        var colorDialog = new ColorSelector(UserSettings.All.InsertFillColor, false) { Owner = this };\n        var result = colorDialog.ShowDialog();\n\n        if (result.HasValue && result.Value)\n            UserSettings.All.InsertFillColor = colorDialog.SelectedColor;\n    }\n\n    private void LeftImage_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        LeftImageSizeTextBlock.Text = $\"{LeftImage.ActualWidth * _leftScaleDiff * _leftScale} × {LeftImage.ActualHeight * _leftScaleDiff * _leftScale} • {Math.Round(_leftDpi, 0)} {LocalizationHelper.Get(\"S.Resize.Dpi\")}\";\n    }\n\n    private void RightImage_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        RightImageSizeTextBlock.Text = $\"{RightImage.ActualWidth * _rightScaleDiff * _rightScale} × {RightImage.ActualHeight * _rightScaleDiff * _rightScale} • {Math.Round(_rightDpi, 0)} {LocalizationHelper.Get(\"S.Resize.Dpi\")}\";\n    }\n\n    private async void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        _isRunning = true;\n\n        #region Update UI\n\n        Cursor = Cursors.AppStarting;\n\n        LeftScrollViewer.IsEnabled = false;\n        RightScrollViewer.IsEnabled = false;\n        OkButton.IsEnabled = false;\n\n        #endregion\n\n        var after = AfterRadioButton.IsChecked == true;\n        var scale = this.Scale();\n        var result = await Task.Run(() => InsertFrames(after, scale));\n\n        if (result)\n        {\n            GC.Collect();\n\n            Dispatcher.Invoke(() => DialogResult = true);\n            return;\n        }\n\n        _isCancelled = false;\n        GC.Collect();\n\n        #region Update UI\n\n        Cursor = Cursors.Arrow;\n\n        LeftScrollViewer.IsEnabled = true;\n        RightScrollViewer.IsEnabled = true;\n        OkButton.IsEnabled = true;\n\n        DialogResult = false;\n\n        HideProgress();\n\n        #endregion\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        _isCancelled = true;\n\n        if (!_isRunning)\n            DialogResult = false;\n    }\n\n    private void Window_Closing(object sender, CancelEventArgs e)\n    {\n        UserSettings.Save();\n\n        GC.Collect();\n    }\n\n    #endregion\n\n    #region Async Insert\n\n    private bool InsertFrames(bool after, double screenScale)\n    {\n        try\n        {\n            //Sizes.\n            var left = NewList[0].Path.SourceFrom();\n            var right = CurrentList[0].Path.SourceFrom();\n\n            //The image should be displayed based on the scale of the project.\n            var scaleLeft = left.DpiX / 96d;\n            var scaleRight = right.DpiX / 96d; //Math.Round(right.DpiX / 96d, 2);\n\n            var scaleDiffLeft = screenScale / scaleLeft;\n            var scaleDiffRight = screenScale / scaleRight;\n\n            #region Current frames\n\n            //If the canvas size changed.\n            if (Math.Abs(RightCanvas.ActualWidth - _rightWidth) > 0.1 || Math.Abs(RightCanvas.ActualHeight - _rightHeight) > 0.1 ||\n                Math.Abs(RightImage.ActualWidth - _rightWidth) > 0.1 || Math.Abs(RightImage.ActualHeight - _rightHeight) > 0.1)\n            {\n                StartProgress(CurrentList.Count, FindResource(\"S.Editor.UpdatingFrames\").ToString());\n\n                //Saves the state before resizing the images.\n                ActionStack.SaveState(ActionStack.EditAction.ImageAndProperties, CurrentList, Util.Other.ListOfIndexes(0, CurrentList.Count));\n\n                foreach (var frameInfo in CurrentList)\n                {\n                    #region Resize Images\n\n                    //Draws the images into a DrawingVisual component.\n                    var drawingVisual = new DrawingVisual();\n                    using (var context = drawingVisual.RenderOpen())\n                    {\n                        //The back canvas.\n                        context.DrawRectangle(new SolidColorBrush(UserSettings.All.InsertFillColor), null,\n                            new Rect(new Point(0, 0), new Point(Math.Round(RightCanvas.ActualWidth, MidpointRounding.AwayFromZero), Math.Round(RightCanvas.ActualHeight, MidpointRounding.AwayFromZero))));\n\n                        var topPoint = Dispatcher.Invoke<double>(() => Canvas.GetTop(RightImage)) * scaleDiffRight;\n                        var leftPoint = Dispatcher.Invoke<double>(() => Canvas.GetLeft(RightImage)) * scaleDiffRight;\n\n                        //The image.\n                        context.DrawImage(frameInfo.Path.SourceFrom(), new Rect(leftPoint, topPoint, RightImage.ActualWidth * scaleDiffRight, RightImage.ActualHeight * scaleDiffRight));\n                        //context.DrawText(new FormattedText(\"Hi!\", CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface(\"Segoe UI\"), 32, Brushes.Black), new Point(0, 0));\n                    }\n\n                    //Converts the Visual (DrawingVisual) into a BitmapSource.\n                    var bmp = new RenderTargetBitmap((int)Math.Round(RightCanvas.ActualWidth * screenScale, MidpointRounding.AwayFromZero),\n                        (int)Math.Round(RightCanvas.ActualHeight * screenScale, MidpointRounding.AwayFromZero), right.DpiX, right.DpiX, PixelFormats.Pbgra32);\n                    bmp.Render(drawingVisual);\n\n                    #endregion\n\n                    #region Save\n\n                    //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder\n                    var encoder = new PngBitmapEncoder();\n                    encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                    //Saves the image into a file using the encoder\n                    using (Stream stream = File.Create(frameInfo.Path))\n                        encoder.Save(stream);\n\n                    #endregion\n\n                    if (_isCancelled)\n                        return false;\n\n                    UpdateProgress(CurrentList.IndexOf(frameInfo));\n                }\n            }\n\n            #endregion\n\n            #region New frames\n\n            StartProgress(CurrentList.Count, FindResource(\"S.Editor.ImportingFrames\").ToString());\n\n            var folder = Path.GetDirectoryName(CurrentList[0].Path);\n            var insertFolder = Path.GetDirectoryName(NewList[0].Path);\n\n            //If the canvas size changed.\n            if (Math.Abs(LeftCanvas.ActualWidth - _leftWidth) > 0.1 || Math.Abs(LeftCanvas.ActualHeight - _leftHeight) > 0.1 ||\n                Math.Abs(LeftImage.ActualWidth - _leftWidth) > 0.1 || Math.Abs(LeftImage.ActualHeight - _leftHeight) > 0.1 || Math.Abs(left.DpiX - right.DpiX) > 0.1)\n            {\n                foreach (var frameInfo in NewList)\n                {\n                    #region Resize Images\n\n                    //Draws the images into a DrawingVisual component.\n                    var drawingVisual = new DrawingVisual();\n                    using (var context = drawingVisual.RenderOpen())\n                    {\n                        //The back canvas.\n                        context.DrawRectangle(new SolidColorBrush(UserSettings.All.InsertFillColor), null,\n                            new Rect(new Point(0, 0), new Point(Math.Round(RightCanvas.ActualWidth * scaleDiffRight, MidpointRounding.AwayFromZero),\n                                Math.Round(RightCanvas.ActualHeight * scaleDiffRight, MidpointRounding.AwayFromZero))));\n\n                        var topPoint = Dispatcher.Invoke<double>(() => Canvas.GetTop(LeftImage)) * scaleDiffRight;\n                        var leftPoint = Dispatcher.Invoke<double>(() => Canvas.GetLeft(LeftImage)) * scaleDiffRight;\n\n                        //The front image.\n                        context.DrawImage(frameInfo.Path.SourceFrom(), new Rect(leftPoint, topPoint, LeftImage.ActualWidth * scaleDiffRight, LeftImage.ActualHeight * scaleDiffRight)); // * scaleDiffLeft\n                    }\n\n                    //Converts the Visual (DrawingVisual) into a BitmapSource. Using the actual frame dpi.\n                    var bmp = new RenderTargetBitmap((int)Math.Round(LeftCanvas.ActualWidth * screenScale, MidpointRounding.AwayFromZero),\n                        (int)Math.Round(LeftCanvas.ActualHeight * screenScale, MidpointRounding.AwayFromZero), right.DpiX, right.DpiX, PixelFormats.Pbgra32);\n                    bmp.Render(drawingVisual);\n\n                    #endregion\n\n                    #region Save\n\n                    //Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder.\n                    var encoder = new PngBitmapEncoder();\n                    encoder.Frames.Add(BitmapFrame.Create(bmp));\n\n                    File.Delete(frameInfo.Path);\n\n                    var fileName = Path.Combine(folder, $\"{_insertIndex}-{NewList.IndexOf(frameInfo)} {DateTime.Now:hh-mm-ss}.png\");\n\n                    //Saves the image into a file using the encoder.\n                    using (Stream stream = File.Create(fileName))\n                        encoder.Save(stream);\n\n                    frameInfo.Path = fileName;\n\n                    #endregion\n\n                    if (_isCancelled)\n                        return false;\n\n                    UpdateProgress(NewList.IndexOf(frameInfo));\n                }\n            }\n            else\n            {\n                foreach (var frameInfo in NewList)\n                {\n                    #region Move\n\n                    var fileName = Path.Combine(folder, $\"{_insertIndex}-{NewList.IndexOf(frameInfo)} {DateTime.Now:hh-mm-ss}.png\");\n\n                    File.Move(frameInfo.Path, fileName);\n\n                    frameInfo.Path = fileName;\n\n                    #endregion\n\n                    if (_isCancelled)\n                        return false;\n\n                    UpdateProgress(NewList.IndexOf(frameInfo));\n                }\n            }\n\n            Directory.Delete(insertFolder, true);\n\n            #endregion\n\n            if (_isCancelled)\n                return false;\n\n            #region Merge the lists\n\n            if (after)\n                _insertIndex++;\n\n            //Saves the state before inserting the images. This was removed because it was causing a crash when applying undo twice.\n            //ActionStack.SaveState(ActionStack.EditAction.Add, _insertIndex, NewList.Count);\n\n            CurrentList.InsertRange(_insertIndex, NewList);\n\n            #endregion\n\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Insert Error\");\n            Dispatcher.Invoke(() => ErrorDialog.Ok(\"Insert Error\", \"Something Wrong Happened\", ex.Message, ex));\n\n            return false;\n        }\n    }\n\n    #endregion\n\n    #region Methods\n\n    #region Progress\n\n    private void StartProgress(int maximum, string description)\n    {\n        Dispatcher.Invoke(() =>\n        {\n            InsertionGrid.Visibility = Visibility.Collapsed;\n            ProgressGrid.Visibility = Visibility.Visible;\n\n            InsertProgressBar.Maximum = maximum;\n            InsertProgressBar.Value = 0;\n\n            StatusLabel.Content = description;\n        });\n    }\n\n    private void UpdateProgress(int value)\n    {\n        Dispatcher.Invoke(() =>\n        {\n            InsertProgressBar.Value = value;\n        });\n    }\n\n    private void HideProgress()\n    {\n        Dispatcher.Invoke(() =>\n        {\n            InsertProgressBar.Value = 0;\n\n            ProgressGrid.Visibility = Visibility.Hidden;\n            InsertionGrid.Visibility = Visibility.Visible;\n        });\n    }\n\n    #endregion\n\n    private void EqualizeSizes()\n    {\n        if (RightCanvas.Width >= LeftCanvas.Width)\n            LeftCanvas.Width = RightCanvas.Width;\n        else\n            RightCanvas.Width = LeftCanvas.Width;\n\n        if (RightCanvas.Height >= LeftCanvas.Height)\n            LeftCanvas.Height = RightCanvas.Height;\n        else\n            RightCanvas.Height = LeftCanvas.Height;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/KeyStrokes.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.KeyStrokes\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.KeyStrokes.Edit.Title}\" MinWidth=\"350\" MinHeight=\"250\" Height=\"500\" Width=\"450\"\n            WindowStartupLocation=\"CenterScreen\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Loaded=\"KeyStrokes_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <n:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n        <DataGrid Grid.Row=\"1\" x:Name=\"KeysDataGrid\" Margin=\"3\" MinHeight=\"60\" SelectionMode=\"Single\" MinRowHeight=\"28\" SelectionUnit=\"FullRow\">\n            <DataGrid.Columns>\n                <DataGridTemplateColumn Header=\"{DynamicResource S.KeyStrokes.Edit.Number}\" Width=\"90\" IsReadOnly=\"True\" SortMemberPath=\"Index\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <TextBlock Text=\"{Binding Path=Index, UpdateSourceTrigger=PropertyChanged}\" VerticalAlignment=\"Center\" Margin=\"3,0\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n\n                <DataGridTemplateColumn Header=\"{DynamicResource S.KeyStrokes.Edit.Keys}\" IsReadOnly=\"True\" Width=\"*\" CanUserSort=\"False\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <ItemsControl x:Name=\"MainItemsControl\" ItemsSource=\"{Binding Path=KeyList, UpdateSourceTrigger=PropertyChanged}\">\n                                <ItemsControl.ItemTemplate>\n                                    <DataTemplate>\n                                        <DockPanel>\n                                            <n:KeyBox x:Name=\"KeyBox\" MainKey=\"{Binding Key, Mode=TwoWay}\" ModifierKeys=\"{Binding Modifiers, Mode=TwoWay}\" Margin=\"1,1,0,1\" Padding=\"0\" \n                                                      AllowAllKeys=\"True\" CanRemove=\"False\" IsSingleLetterLowerCase=\"{Binding IsUppercase, Mode=TwoWay, Converter={StaticResource InvertedBool}}\"/>\n\n                                            <n:ExtendedButton DockPanel.Dock=\"Right\" x:Name=\"RemoveButton\" Icon=\"{StaticResource Vector.Close}\" Style=\"{StaticResource Style.Button.NoText.Border}\" \n                                                              ContentWidth=\"12\" ContentHeight=\"12\" Width=\"16\" Margin=\"0,1,1,1\" BorderThickness=\"0,1,1,1\" Height=\"23\" ToolTip=\"{DynamicResource S.KeyStrokes.Edit.Remove}\"\n                                                              PreviewMouseLeftButtonUp=\"RemoveButton_OnMouseLeftButtonDown\"/>\n                                        </DockPanel>\n                                    </DataTemplate>\n                                </ItemsControl.ItemTemplate>\n                                <ItemsControl.ItemsPanel>\n                                    <ItemsPanelTemplate>\n                                        <WrapPanel Orientation=\"Horizontal\" Margin=\"0\"/>\n                                    </ItemsPanelTemplate>\n                                </ItemsControl.ItemsPanel>\n                            </ItemsControl>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n            </DataGrid.Columns>\n\n            <DataGrid.RowDetailsTemplate>\n                <DataTemplate>\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"20\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Border Background=\"{StaticResource Vector.Arrow.Blue.Top}\" Margin=\"5,0\"/>\n\n                        <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.KeyStrokes.Edit.Add}\" Foreground=\"{DynamicResource Element.Foreground}\" VerticalAlignment=\"Center\" Margin=\"2,3,5,3\"/>\n\n                        <n:KeyBox Grid.Column=\"2\" x:Name=\"AddKeyBox\" MinWidth=\"100\" AllowAllKeys=\"True\" CanRemove=\"False\" IsSingleLetterLowerCase=\"{Binding ElementName=LowercaseCheckBox, Path=IsChecked}\"/>\n\n                        <n:ExtendedButton Grid.Column=\"3\" x:Name=\"AddButton\" Text=\"{DynamicResource S.Add}\" Icon=\"{StaticResource Vector.Add}\" ContentHeight=\"14\" Height=\"23\" Padding=\"5,0\" Margin=\"5,3\"\n                                          Click=\"AddButton_Click\"/>\n                    </Grid>\n                </DataTemplate>\n            </DataGrid.RowDetailsTemplate>\n            \n            <!--<model:FrameInfo Delay=\"10\" Index=\"0\">\n                <model:FrameInfo.KeyList>\n                    <util:SimpleKeyGesture Key=\"A\" Modifiers=\"Control\"/>\n                    <util:SimpleKeyGesture Key=\"B\" Modifiers=\"Shift\"/>\n                    <util:SimpleKeyGesture Key=\"C\" Modifiers=\"Alt\"/>\n                    <util:SimpleKeyGesture Key=\"C\" Modifiers=\"Alt\"/>\n                    <util:SimpleKeyGesture Key=\"C\" Modifiers=\"Alt\"/>\n                    <util:SimpleKeyGesture Key=\"C\" Modifiers=\"Alt\"/>\n                    <util:SimpleKeyGesture Key=\"C\" Modifiers=\"Alt\"/>\n                </model:FrameInfo.KeyList>\n            </model:FrameInfo>-->\n            <!--<model:FrameInfo Delay=\"10\" Index=\"1\"/>-->\n        </DataGrid>\n\n        <Grid Grid.Row=\"2\" Grid.Column=\"0\" Background=\"{DynamicResource Panel.Background.Level3}\" UseLayoutRounding=\"False\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedCheckBox Grid.Column=\"0\" x:Name=\"LowercaseCheckBox\" Text=\"{DynamicResource S.KeyStrokes.Edit.Lower}\" Margin=\"3,0\" HorizontalAlignment=\"Center\"\n                                ToolTip=\"{DynamicResource S.KeyStrokes.Edit.Lower.Info}\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" IsDefault=\"True\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"CancelButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/KeyStrokes.xaml.cs",
    "content": "using System.Collections.ObjectModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Model;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class KeyStrokes\n{\n    public ObservableCollection<FrameInfo> InternalList { get; set; }\n\n    public KeyStrokes()\n    {\n        InitializeComponent();\n    }\n\n    private void KeyStrokes_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (InternalList == null)\n            return;\n\n        KeysDataGrid.ItemsSource = InternalList;\n        KeysDataGrid.FocusOnFirstCell();\n    }\n\n    private void RemoveButton_OnMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)\n    {\n        if (sender is not Button button || KeysDataGrid.SelectedIndex == -1)\n            return;\n\n        if (button.DataContext is not SimpleKeyGesture context)\n            return;\n\n        InternalList[KeysDataGrid.SelectedIndex].KeyList.Remove(context);\n        KeysDataGrid.Items.Refresh();\n    }\n\n    private void AddButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (KeysDataGrid.SelectedIndex == -1)\n            return;\n\n        var row = (DataGridRow)KeysDataGrid.ItemContainerGenerator.ContainerFromItem(KeysDataGrid.SelectedItem);\n\n        if (row == null)\n            return;\n\n        //Getting the ContentPresenter of the row details\n        var presenter = VisualHelper.GetVisualChild<DataGridDetailsPresenter>(row);\n\n        if (presenter == null)\n            return;\n\n        //Finding Remove button from the DataTemplate that is set on that ContentPresenter\n        var template = presenter.ContentTemplate;\n        var box = (KeyBox)template.FindName(\"AddKeyBox\", presenter);\n\n        if (!box.MainKey.HasValue)\n            return;\n\n        InternalList[KeysDataGrid.SelectedIndex].KeyList.Add(new SimpleKeyGesture(box.MainKey.Value, box.ModifierKeys, !box.IsSingleLetterLowerCase));\n        KeysDataGrid.Items.Refresh();\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = true;\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Localization.xaml",
    "content": "<c:ExWindow x:Class=\"ScreenToGif.Windows.Other.Localization\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Localization}\" MinHeight=\"300\" MinWidth=\"500\" MaxHeight=\"500\" SizeToContent=\"WidthAndHeight\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" WindowStartupLocation=\"CenterOwner\" SnapsToDevicePixels=\"True\" \n            Loaded=\"Localization_Loaded\">\n\n    <Window.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.MoveUp}\" CanExecute=\"MoveUp_CanExecute\" Executed=\"MoveUp_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.MoveDown}\" CanExecute=\"MoveDown_CanExecute\" Executed=\"MoveDown_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Save}\" CanExecute=\"Save_CanExecute\" Executed=\"Save_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Remove}\" CanExecute=\"Remove_CanExecute\" Executed=\"Remove_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.Add}\" CanExecute=\"Add_CanExecute\" Executed=\"Add_Executed\"/>\n    </Window.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <c:StatusBand Grid.Row=\"0\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"1\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <ListBox Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"6\" x:Name=\"ResourceListBox\" Margin=\"5,5,0,5\" VerticalContentAlignment=\"Center\"/>\n\n            <c:ExtendedButton Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"UpButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Arrow.Blue.Top}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.MoveUp}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"DownButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Arrow.Blue.Bottom}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.MoveDown}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"AddButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.File.Add}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Add}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"3\" Grid.Column=\"1\" x:Name=\"SaveButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Save}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Save}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n\n            <c:ExtendedButton Grid.Row=\"4\" Grid.Column=\"1\" x:Name=\"RemoveButton\" Margin=\"3,5\" Icon=\"{StaticResource Vector.Remove}\" ContentWidth=\"18\" ContentHeight=\"18\"\n                              Style=\"{StaticResource Style.Button.NoText.Border}\" MinWidth=\"30\" MinHeight=\"30\" Command=\"{StaticResource Command.Remove}\"\n                              ToolTip=\"{Binding Command, RelativeSource={RelativeSource Self}, Converter={StaticResource CommandToInputGestureText}}\" \n                              ToolTipService.Placement=\"Right\" ToolTipService.VerticalOffset=\"-5\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\" UseLayoutRounding=\"False\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Column=\"0\" TextAlignment=\"Center\" VerticalAlignment=\"Center\" FontSize=\"13\" Foreground=\"{DynamicResource Element.Foreground.Header}\" Margin=\"0\">\n                <Run Text=\"{DynamicResource S.Localization.Usage.First}\"/><LineBreak/>\n                <Run Text=\"{DynamicResource S.Localization.Usage.Second}\"/>\n            </TextBlock>\n\n            <c:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" IsCancel=\"True\"\n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\"/>\n        </Grid>\n    </Grid>\n</c:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Localization.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\nusing Microsoft.Win32;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Localization\n{\n    private IEnumerable<string> _cultures;\n\n    public Localization()\n    {\n        InitializeComponent();\n    }\n\n    #region Events\n        \n    private async void Localization_Loaded(object sender, RoutedEventArgs e)\n    {\n        AddButton.IsEnabled = false;\n        SaveButton.IsEnabled = false;\n        RemoveButton.IsEnabled = false;\n        DownButton.IsEnabled = false;\n        UpButton.IsEnabled = false;\n        OkButton.IsEnabled = false;\n\n        var actualIndex = 0;\n        foreach (var resourceDictionary in Application.Current.Resources.MergedDictionaries)\n        {\n            //If it's not a localization resource, ignore it.\n            if (resourceDictionary.Source?.OriginalString.Contains(\"StringResources\") != true)\n            {\n                actualIndex++;\n                continue;\n            }\n\n            var imageItem = new ExtendedListBoxItem\n            {\n                Content = resourceDictionary.Source.OriginalString,\n                Icon = FindResource(\"Vector.Translate\") as Brush,\n                Index = actualIndex++,\n                ShowMarkOnSelection = false\n            };\n\n            #region Language code\n\n            var pieces = resourceDictionary.Source.OriginalString.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);\n\n            if (pieces.Length == 3 || pieces.Length == 4)\n                imageItem.Author = LocalizationHelper.GetWithFormat(\"S.Localization.Recognized\", \"Recognized as {0}\", pieces[1]);\n            else\n                imageItem.Author = LocalizationHelper.Get(\"S.Localization.NotRecognized\");\n\n            #endregion\n\n            ResourceListBox.Items.Add(imageItem);\n        }\n\n        //Selects the last item on the list.\n        ResourceListBox.SelectedItem = ResourceListBox.Items.Cast<ExtendedListBoxItem>().LastOrDefault(w => w.IsEnabled);\n            \n        if (ResourceListBox.SelectedItem != null)\n            ResourceListBox.ScrollIntoView(ResourceListBox.SelectedItem);\n\n        StatusBand.Info(LocalizationHelper.Get(\"S.Localization.GettingCodes\"));\n\n        _cultures = await GetProperCulturesAsync();\n\n        AddButton.IsEnabled = true;\n        SaveButton.IsEnabled = true;\n        RemoveButton.IsEnabled = true;\n        DownButton.IsEnabled = true;\n        UpButton.IsEnabled = true;\n        OkButton.IsEnabled = true;\n\n        StatusBand.Hide();\n        SizeToContent = SizeToContent.Width;\n        MaxHeight = double.PositiveInfinity;\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n\n    private void MoveUp_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = ResourceListBox.SelectedIndex > 0;\n    }\n\n    private void MoveDown_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = ResourceListBox.SelectedIndex < ResourceListBox.Items.Count - 1;\n    }\n\n    private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = ResourceListBox.SelectedIndex != -1;\n    }\n\n    private void Remove_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = ResourceListBox.SelectedIndex != -1;\n    }\n\n    private void Add_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = true;\n    }\n\n\n    private void MoveUp_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        if (ResourceListBox.SelectedItem is not ExtendedListBoxItem item)\n            return;\n\n        if (LocalizationHelper.Move(item.Index))\n        {\n            var selectedIndex = ResourceListBox.SelectedIndex;\n            var selected = ResourceListBox.Items[selectedIndex];\n\n            ResourceListBox.Items.RemoveAt(selectedIndex);\n            ResourceListBox.Items.Insert(selectedIndex - 1, selected);\n            ResourceListBox.SelectedItem = selected;\n\n            //Reflects the new index to the item.\n            UpdateIndexes();\n        }\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    private void MoveDown_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        if (!(ResourceListBox.SelectedItem is ExtendedListBoxItem item))\n            return;\n\n        if (LocalizationHelper.Move(item.Index, false))\n        {\n            var selectedIndex = ResourceListBox.SelectedIndex;\n            var selected = ResourceListBox.Items[selectedIndex];\n\n            ResourceListBox.Items.RemoveAt(selectedIndex);\n            ResourceListBox.Items.Insert(selectedIndex + 1, selected);\n            ResourceListBox.SelectedItem = selected;\n\n            //Reflects the new index to the item.\n            UpdateIndexes();\n        }\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    private async void Save_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        StatusBand.Info(LocalizationHelper.Get(\"S.Localization.Exporting\"));\n\n        if (ResourceListBox.SelectedItem is not ExtendedListBoxItem selected)\n            return;\n\n        var source = selected.Content.ToString();\n        var subs = source.Substring(source.IndexOf(\"StringResources\", StringComparison.InvariantCulture));\n\n        var sfd = new SaveFileDialog\n        {\n            AddExtension = true,\n            Filter = LocalizationHelper.Get(\"S.Localization.File.Resource\") + \" (*.xaml)|*.xaml\",\n            Title = LocalizationHelper.Get(\"S.Localization.SaveResource\"),\n            FileName = subs\n        };\n\n        var result = sfd.ShowDialog();\n\n        if (result.HasValue && result.Value)\n        {\n            try\n            {\n                //Pass the UI parameters to the task.\n                var fileName = sfd.FileName;\n                var index = selected.Index;\n\n                await Task.Factory.StartNew(() => LocalizationHelper.SaveSelected(index, fileName));\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to save the resource\");\n                Dialog.Ok(\"Impossible to Save\", \"Impossible to save the Xaml file\", ex.Message, Icons.Warning);\n            }\n        }\n\n        StatusBand.Hide();\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    private void Remove_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        if (!(ResourceListBox.SelectedItem is ExtendedListBoxItem item))\n            return;\n\n        if (LocalizationHelper.Remove(item.Index))\n        {\n            var current = ResourceListBox.SelectedIndex;\n            ResourceListBox.Items.RemoveAt(ResourceListBox.SelectedIndex);\n\n            //Adjust the actual index of the rest of the items.\n            for (var index = current; index < ResourceListBox.Items.Count; index++)\n            {\n                if (ResourceListBox.Items[index] is ExtendedListBoxItem res)\n                    res.Index --;\n            }\n        }\n            \n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    private async void Add_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        var ofd = new OpenFileDialog\n        {\n            AddExtension = true,\n            CheckFileExists = true,\n            Title = LocalizationHelper.Get(\"S.Localization.OpenResource\"),\n            Filter = LocalizationHelper.Get(\"S.Localization.File.Resource\") + \" (*.xaml)|*.xaml;\"\n        };\n\n        var result = ofd.ShowDialog();\n\n        if (!result.HasValue || !result.Value) \n            return;\n\n        #region Validations\n\n        var position = ofd.FileName.IndexOf(\"StringResources\", StringComparison.InvariantCulture);\n        var subs = position > -1 ? ofd.FileName.Substring(position) : \"\";\n        var pieces = subs.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);\n            \n        //Wrong filename format.\n        if (position < 0 || pieces.Length != 3)\n        {\n            Dialog.Ok(Title, LocalizationHelper.Get(\"S.Localization.Warning.Name\"), LocalizationHelper.Get(\"S.Localization.Warning.Name.Info\"));\n            StatusBand.Hide();\n            return;\n        }\n\n        //Repeated language code.\n        if (Application.Current.Resources.MergedDictionaries.Any(x => x.Source != null && x.Source.OriginalString.Contains(subs)))\n        {\n            Dialog.Ok(Title, LocalizationHelper.Get(\"S.Localization.Warning.Repeated\"), LocalizationHelper.Get(\"S.Localization.Warning.Repeated.Info\"));\n            StatusBand.Hide();\n            return;\n        }\n\n        try\n        {\n            var properCulture = await Task.Factory.StartNew(() => CheckSupportedCulture(pieces[1]));\n\n            if (properCulture != pieces[1])\n            {\n                Dialog.Ok(Title, LocalizationHelper.Get(\"S.Localization.Warning.Redundant\"), LocalizationHelper.GetWithFormat(\"S.Localization.Warning.Redundant.Info\", \n                    \"The \\\"{0}\\\" code is redundant. Try using \\\"{1}\\\" instead.\", pieces[1], properCulture));\n                StatusBand.Hide();\n                return;\n            }\n        }\n        catch (CultureNotFoundException cn)\n        {\n            LogWriter.Log(cn, \"Impossible to validade the resource name, culture not found\");\n            Dialog.Ok(Title, LocalizationHelper.Get(\"S.Localization.Warning.Unknown\"), LocalizationHelper.GetWithFormat(\"S.Localization.Warning.Unknown.Info\",\n                \"The \\\"{0}\\\" and its family were not recognized as valid language codes.\", pieces[1]));\n            StatusBand.Hide();\n            return;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to validade the resource name\");\n            Dialog.Ok(Title, LocalizationHelper.Get(\"S.Localization.Warning.NotPossible\"), ex.Message);\n            StatusBand.Hide();\n            return;\n        }\n\n        #endregion\n\n        StatusBand.Info(LocalizationHelper.Get(\"S.Localization.Importing\"));\n\n        try\n        {\n            var fileName = ofd.FileName;\n\n            await Task.Factory.StartNew(() => LocalizationHelper.ImportStringResource(fileName));\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to import the resource\");\n            Dialog.Ok(Title, LocalizationHelper.Get(\"S.Localization.Warning.NotPossible\"), ex.Message);\n            StatusBand.Hide();\n            return;\n        }\n\n        var resourceDictionary = Application.Current.Resources.MergedDictionaries.LastOrDefault();\n\n        var imageItem = new ExtendedListBoxItem\n        {\n            Content = resourceDictionary?.Source.OriginalString ?? \"...\",\n            Icon = FindResource(\"Vector.Translate\") as Brush,\n            Author = LocalizationHelper.GetWithFormat(\"S.Localization.Recognized\", \"Recognized as {0}\", pieces[1]),\n            Index = Application.Current.Resources.MergedDictionaries.Count - 1,\n            ShowMarkOnSelection = false\n        };\n\n        StatusBand.Hide();\n\n        ResourceListBox.Items.Add(imageItem);\n        ResourceListBox.ScrollIntoView(imageItem);\n\n        UpdateIndexes();\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    #endregion\n\n    #region Methods \n\n    private string CheckSupportedCulture(string cultureName)\n    {\n        //Using HashSet, because we can check if it contains string in O(1) time.\n        //Only creating it takes some time, but it's better than performing Contains multiple times on the list in the loop below.\n        var cultureHash = new HashSet<string>(_cultures);\n\n        if (cultureHash.Contains(cultureName))\n            return cultureName;\n\n        var t = CultureInfo.GetCultureInfo(cultureName);\n\n        while (t != CultureInfo.InvariantCulture)\n        {\n            if (cultureHash.Contains(t.Name))\n                return t.Name;\n\n            t = t.Parent;\n        }\n\n        return null;\n    }\n\n    private async Task<IEnumerable<string>> GetProperCulturesAsync()\n    {\n        var allCodes = await Task.Factory.StartNew(() => CultureInfo.GetCultures(CultureTypes.AllCultures).Where(x => !string.IsNullOrEmpty(x.Name)).Select(x => x.Name));\n\n        try\n        {\n            var downloadedCodes = GetLanguageCodesOffline();\n            var properCodes = await Task.Factory.StartNew(() => allCodes.Where(x => downloadedCodes.Contains(x)));\n                \n            return properCodes ?? allCodes;\n        }\n        catch (Exception ex)\n        {\n            Dispatcher.Invoke(() => Dialog.Ok(\"Translator\", \"Translator - Getting Language Codes\", ex.Message + Environment.NewLine + \"Loading all local language codes.\"));\n        }\n\n        GC.Collect();\n        return allCodes;\n    }\n\n    private List<string> GetLanguageCodesOffline()\n    {\n        //I'm taking a shortcut in here.\n        return (\"af;af-NA;agq;ak;am;ar;ar-AE;ar-BH;ar-DJ;ar-DZ;ar-EG;ar-ER;ar-IL;ar-IQ;ar-JO;ar-KM;ar-KW;ar-LB;ar-LY;ar-MA;ar-MR;ar-OM;ar-PS;ar-QA;ar-SA;ar-SD;ar-SO;\" +\n                \"ar-SS;ar-SY;ar-TD;ar-TN;ar-YE;as;asa;ast;az;az-Cyrl;bas;be;bem;bez;bg;bm;bn;bn-IN;bo;bo-IN;br;brx;bs;bs-Cyrl;ca;ca-FR;ccp;ce;ceb;cgg;chr;cs;cu;cy;da;\" +\n                \"dav;de;de-AT;de-CH;de-IT;de-LI;de-LU;dje;dsb;dua;dyo;dz;ebu;ee;ee-TG;el;en;en-001;en-150;en-AE;en-AG;en-AI;en-AT;en-AU;en-BB;en-BE;en-BI;en-BM;en-BS;\" +\n                \"en-BW;en-BZ;en-CA;en-CC;en-CH;en-CK;en-CM;en-CX;en-DE;en-DK;en-DM;en-ER;en-FI;en-FJ;en-FK;en-GB;en-GD;en-GG;en-GH;en-GI;en-GM;en-GU;en-GY;en-HK;en-IE;\" +\n                \"en-IL;en-IM;en-IN;en-IO;en-JE;en-JM;en-KE;en-KI;en-KN;en-KY;en-LC;en-LR;en-LS;en-MG;en-MH;en-MO;en-MP;en-MS;en-MT;en-MU;en-MW;en-MY;en-NA;en-NF;en-NG;\" +\n                \"en-NL;en-NR;en-NU;en-NZ;en-PG;en-PH;en-PK;en-PN;en-PW;en-RW;en-SB;en-SC;en-SD;en-SE;en-SG;en-SH;en-SI;en-SL;en-SS;en-SX;en-SZ;en-TK;en-TO;en-TT;en-TV;\" +\n                \"en-TZ;en-UG;en-VC;en-VU;en-WS;en-ZA;en-ZM;en-ZW;eo;es;es-419;es-AR;es-BO;es-BR;es-BZ;es-CL;es-CO;es-CR;es-CU;es-DO;es-EC;es-GQ;es-GT;es-HN;es-MX;es-NI;\" +\n                \"es-PA;es-PE;es-PH;es-PR;es-PY;es-SV;es-US;es-UY;es-VE;et;eu;ewo;fa;ff;ff-Latn-GH;ff-Latn-GM;ff-Latn-GN;ff-Latn-LR;ff-Latn-MR;ff-Latn-NG;ff-Latn-SL;fi;fil;\" +\n                \"fo;fo-DK;fr;fr-BE;fr-BI;fr-CA;fr-CD;fr-CH;fr-CI;fr-CM;fr-DJ;fr-DZ;fr-GF;fr-GN;fr-HT;fr-KM;fr-LU;fr-MA;fr-MG;fr-ML;fr-MR;fr-MU;fr-RE;fr-RW;fr-SC;fr-SN;fr-SY;\" +\n                \"fr-TD;fr-TN;fr-VU;fur;fy;ga;gd;gl;gsw;gu;guz;gv;ha;haw;he;hi;hr;hr-BA;hsb;hu;hy;ia;id;ig;ii;is;it;it-CH;ja;jgo;jmc;jv;ka;kab;kam;kde;kea;khq;ki;kk;kkj;kl;kln;\" +\n                \"km;kn;ko;ko-KP;kok;ks;ksb;ksf;ksh;ku;kw;ky;lag;lb;lg;lkt;ln;ln-AO;lo;lrc;lrc-IQ;lt;lu;luo;luy;lv;mas;mas-TZ;mer;mfe;mg;mgh;mgo;mi;mk;ml;mn;mni;mr;ms;ms-BN;ms-SG;\" +\n                \"mt;mua;my;mzn;naq;nb;nd;nds;nds-NL;ne;ne-IN;nl;nl-AW;nl-BE;nl-BQ;nl-CW;nl-SR;nl-SX;nmg;nn;nnh;nus;nyn;om;om-KE;or;os;os-RU;pa;pa-Arab;pl;prg;ps;ps-PK;pt;pt-AO;\" +\n                \"pt-CV;pt-GW;pt-LU;pt-MO;pt-MZ;pt-PT;pt-ST;pt-TL;rm;rn;ro;ro-MD;rof;ru;ru-BY;ru-KG;ru-KZ;ru-MD;ru-UA;rw;rwk;sah;saq;sbp;sd;sd-Deva;se;se-FI;se-SE;seh;ses;sg;shi;\" +\n                \"shi-Latn;si;sk;sl;smn;sn;so;so-DJ;so-ET;so-KE;sq;sq-MK;sq-XK;sr;sr-Cyrl-BA;sr-Cyrl-ME;sr-Cyrl-XK;sr-Latn;sr-Latn-BA;sr-Latn-ME;sr-Latn-XK;sv;sv-FI;sw;sw-CD;sw-KE;\" +\n                \"sw-UG;ta;ta-LK;ta-MY;ta-SG;te;teo;teo-KE;tg;th;ti;ti-ER;tk;to;tr;tr-CY;tt;twq;tzm;ug;uk;ur;ur-IN;uz;uz-Arab;uz-Cyrl;vai;vai-Latn;vi;vo;vun;wae;wo;xh;xog;yav;yi;yo;\" +\n                \"yo-BJ;zgh;zh;zh-Hans-HK;zh-Hans-MO;zh-Hant;zu\").Split(';').ToList();\n    }\n\n    private async Task<IEnumerable<string>> GetLanguageCodesAsync()\n    {\n        var path = await GetLanguageCodesPathAsync();\n\n        if (string.IsNullOrEmpty(path))\n            throw new WebException(\"Can't get language codes. Path to language codes is null\");\n\n        var request = (HttpWebRequest)WebRequest.Create(path);\n        request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n        request.Proxy = WebHelper.GetProxy();\n\n        var response = (HttpWebResponse)await request.GetResponseAsync();\n\n        using (var resultStream = response.GetResponseStream())\n        {\n            if (resultStream == null)\n                throw new WebException(\"Empty response from server when getting language codes\");\n\n            using (var reader = new StreamReader(resultStream))\n            {\n                var result = await reader.ReadToEndAsync();\n\n                var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),\n                    new System.Xml.XmlDictionaryReaderQuotas());\n\n                var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));\n                var languages = json.Elements();\n\n                return await Task.Factory.StartNew(() => languages.Where(x => x.XPathSelectElement(\"defs\")?.Value != \"0\").Select(x => x.XPathSelectElement(\"lang\")?.Value));\n            }\n        }\n    }\n\n    private async Task<string> GetLanguageCodesPathAsync()\n    {\n        var request = (HttpWebRequest)WebRequest.Create(\"https://datahub.io/core/language-codes/datapackage.json\");\n        request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n        request.Proxy = WebHelper.GetProxy();\n\n        var response = (HttpWebResponse)await request.GetResponseAsync();\n\n        using (var resultStream = response.GetResponseStream())\n        {\n            if (resultStream == null)\n                throw new WebException(\"Empty response from server when getting language codes path\");\n\n            using (var reader = new StreamReader(resultStream))\n            {\n                var result = await reader.ReadToEndAsync();\n\n                var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(result),\n                    new System.Xml.XmlDictionaryReaderQuotas());\n\n                var json = await Task<XElement>.Factory.StartNew(() => XElement.Load(jsonReader));\n\n                return await Task.Factory.StartNew(() => json.XPathSelectElement(\"resources\")?.Elements().First(x => x.XPathSelectElement(\"name\")?.Value == \"ietf-language-tags_json\").XPathSelectElement(\"path\")?.Value);\n            }\n        }\n    }\n\n    private void UpdateIndexes()\n    {\n        var actualIndex = 0;\n        for (var index = 0; index < Application.Current.Resources.MergedDictionaries.Count; index++)\n        {\n            var resourceDictionary = Application.Current.Resources.MergedDictionaries[index];\n\n            //If it's not a localization resource, ignore it.\n            if (resourceDictionary.Source?.OriginalString.Contains(\"StringResources\") != true)\n                continue;\n\n            if (ResourceListBox.Items[actualIndex] is ExtendedListBoxItem res)\n            {\n                res.Index = index;\n                actualIndex++;\n            }\n        }\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/PickAlbumDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.PickAlbumDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"ScreenToGif\" Height=\"250\" Width=\"500\" MinHeight=\"230\" MinWidth=\"400\" SizeToContent=\"Height\" Topmost=\"True\" \n            WindowStartupLocation=\"CenterScreen\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\"\n            Loaded=\"Dialog_Loaded\" KeyDown=\"DialogKeyDown\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"48\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"40\" />\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Margin=\"6\" Background=\"{StaticResource Vector.ImageStack}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock x:Name=\"InstructionLabel\" Text=\"{DynamicResource S.Options.Upload.Pick.Album}\" Margin=\"5\" Grid.Column=\"1\" VerticalAlignment=\"Center\" FontFamily=\"{DynamicResource FontFamilyLight}\" \n                       FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <ScrollViewer Grid.Row=\"1\" VerticalScrollBarVisibility=\"Auto\">\n            <TextBlock x:Name=\"ObservationTextBlock\" Margin=\"25,5,10,5\" Text=\"{DynamicResource S.Options.Upload.Pick.Album.Info}\" FontSize=\"14\" TextWrapping=\"WrapWithOverflow\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n        </ScrollViewer>\n\n        <DataGrid Grid.Row=\"2\" x:Name=\"MainDataGrid\" Margin=\"5\" MinHeight=\"60\" SelectionMode=\"Single\" SelectionUnit=\"FullRow\" MouseDoubleClick=\"DataGrid_MouseDoubleClick\" PreviewKeyDown=\"DataGrid_PreviewKeyDown\">\n            <DataGrid.Columns>\n                <DataGridTextColumn Header=\"{DynamicResource S.Id}\" Width=\"Auto\" IsReadOnly=\"True\" Binding=\"{Binding Path=Id, UpdateSourceTrigger=PropertyChanged}\"/>\n                <DataGridTextColumn Header=\"{DynamicResource S.Title}\" Width=\"Auto\" IsReadOnly=\"True\" FontWeight=\"SemiBold\" Binding=\"{Binding Path=Title, UpdateSourceTrigger=PropertyChanged}\"/>\n                <DataGridTextColumn Header=\"{DynamicResource S.Description}\" Width=\"*\" IsReadOnly=\"True\" FontStyle=\"Italic\" Binding=\"{Binding Path=Description, UpdateSourceTrigger=PropertyChanged}\"/>\n            </DataGrid.Columns>\n        </DataGrid>\n\n        <Grid Grid.Row=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\" Height=\"40\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Recorder.Accept}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"TrueActionButton_Click\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"FalseActionButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/PickAlbumDialog.xaml.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Input;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.UploadPresets.Imgur;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class PickAlbumDialog\n{\n    private List<ImgurAlbum> AlbumList { get; set; }\n\n    public PickAlbumDialog()\n    {\n        InitializeComponent();\n    }\n\n    #region Methods\n\n    private void PrepareOk(List<ImgurAlbum> list)\n    {\n        AlbumList = list;\n\n        CancelButton.Visibility = Visibility.Collapsed;\n        OkButton.Focus();\n    }\n\n    private void PrepareOkCancel(List<ImgurAlbum> list)\n    {\n        AlbumList = list;\n\n        CancelButton.Focus();\n    }\n\n    /// <summary>\n    /// Handle all pressed keys that get sent to this Window\n    /// </summary>\n    private void DialogKeyDown(object sender, KeyEventArgs e)\n    {\n        switch (e.Key)\n        {\n            case Key.NumPad1:\n            case Key.D1:\n            case Key.Y:\n                DialogResult = true; //[Y]/[1] will answer 'Yes'.\n                break;\n            case Key.NumPad2:\n            case Key.D2:\n            case Key.Escape:\n            case Key.N:\n                DialogResult = false; //[ESC]/[2]/[N] will answer 'No'.\n                break;\n        }\n    }\n\n    /// <summary>\n    /// Shows a Ok dialog.\n    /// </summary>\n    /// <returns>True if Ok</returns>\n    public static string Ok(List<ImgurAlbum> list)\n    {\n        var dialog = new PickAlbumDialog();\n        dialog.PrepareOk(list);\n        var result = dialog.ShowDialog();\n\n        if (!result.HasValue || !result.Value)\n            return null;\n\n        var item = dialog.MainDataGrid.SelectedItem as ImgurAlbum;\n        return item?.Id;\n    }\n\n    /// <summary>\n    /// Shows a Ok/Cancel dialog.\n    /// </summary>\n    /// <returns>True if Ok</returns>\n    public static string OkCancel(List<ImgurAlbum> list)\n    {\n        var dialog = new PickAlbumDialog();\n        dialog.PrepareOkCancel(list);\n        var result = dialog.ShowDialog();\n\n        if (!result.HasValue || !result.Value)\n            return null;\n\n        var item = dialog.MainDataGrid.SelectedItem as ImgurAlbum;\n        return item?.Id;\n    }\n\n    #endregion\n\n    #region Events\n\n    private void Dialog_Loaded(object sender, RoutedEventArgs e)\n    {\n        var remove = AlbumList?.FirstOrDefault(f => string.IsNullOrWhiteSpace(f.Id) || f.Id == \"♥♦♣♠\");\n\n        if (remove != null)\n            AlbumList.Remove(remove);\n\n        MainDataGrid.ItemsSource = AlbumList;\n\n        MainDataGrid.Focus();\n\n        if (MainDataGrid.Items.Count > 0)\n        {\n            MainDataGrid.SelectedIndex = 0;\n            MainDataGrid.FocusOnFirstCell();\n        }\n    }\n\n    private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)\n    {\n        if (MainDataGrid.SelectedItem != null)\n            DialogResult = true;\n    }\n\n    private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key == Key.Return || e.Key == Key.Enter)\n        {\n            if (MainDataGrid.SelectedItem != null)\n                DialogResult = true;\n\n            e.Handled = true;\n        }\n    }\n\n    private void TrueActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (MainDataGrid.SelectedItem == null)\n            return;\n\n        DialogResult = true;\n    }\n\n    private void FalseActionButton_Click(object sender, RoutedEventArgs e)\n    {\n        MainDataGrid.SelectedItem = null;\n        DialogResult = false;\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Preset.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Preset\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:i=\"clr-namespace:ScreenToGif.Controls.Items\"\n            xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n            Title=\"{DynamicResource S.Preset.Title}\" Width=\"400\" Height=\"390\" MinWidth=\"300\" MinHeight=\"390\" SizeToContent=\"Height\"\n            WindowStartupLocation=\"CenterScreen\" SnapsToDevicePixels=\"True\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <n:ExWindow.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Ok}\" CanExecute=\"Ok_CanExecute\" Executed=\"Ok_Executed\"/>\n    </n:ExWindow.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"35\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" x:Name=\"IconBorder\" Margin=\"6\" Background=\"{StaticResource Vector.Add}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"ModeTextBlock\" Text=\"{DynamicResource S.Add}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <TextBlock Grid.Column=\"2\" x:Name=\"ExtensionTextBlock\" Text=\".mp4\" Margin=\"5,0\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" FontStyle=\"Italic\" \n                       FontSize=\"12\" TextWrapping=\"WrapWithOverflow\" VerticalAlignment=\"Center\"/>\n        </Grid>\n\n        <n:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Grid Grid.Row=\"2\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"23\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"23\"/>\n                <RowDefinition Height=\"29\"/>\n                <RowDefinition Height=\"23\"/>\n                <RowDefinition Height=\"Auto\" MinHeight=\"29\"/>\n                <RowDefinition Height=\"23\"/>\n                <RowDefinition Height=\"29\"/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n\n            <n:LabelSeparator Grid.Row=\"0\" Text=\"{DynamicResource S.Preset.Encoder}\"/>\n            <ComboBox Grid.Row=\"1\" x:Name=\"EncoderComboBox\" VerticalAlignment=\"Center\" Margin=\"5,3\" Height=\"38\" ItemTemplate=\"{StaticResource Template.ComboBox.Simple}\"\n                      SelectedValuePath=\"Value\" ToolTip=\"{DynamicResource S.SaveAs.Encoder.Info}\">\n                <ComboBox.ItemContainerStyle>\n                    <Style TargetType=\"ComboBoxItem\">\n                        <Style.Triggers>\n                            <DataTrigger Binding=\"{Binding IsEnabled}\" Value=\"False\">\n                                <Setter Property=\"Visibility\" Value=\"Collapsed\"/>\n                            </DataTrigger>\n                        </Style.Triggers>\n                    </Style>\n                </ComboBox.ItemContainerStyle>\n\n                <i:GenericItem x:Name=\"EncoderScreenToGifItem\" Title=\"{DynamicResource S.SaveAs.Encoder.ScreenToGif}\" Description=\"{DynamicResource S.SaveAs.Encoder.ScreenToGif.Info}\"\n                               Value=\"{x:Static e:EncoderTypes.ScreenToGif}\" ImageId=\"Vector.Logo\"/>\n\n                <i:GenericItem x:Name=\"EncoderFfmpegItem\" Title=\"{DynamicResource S.SaveAs.Encoder.Ffmpeg}\" Description=\"{DynamicResource S.SaveAs.Encoder.Ffmpeg.Info}\"\n                               Value=\"{x:Static e:EncoderTypes.FFmpeg}\" ImageId=\"Vector.Ffmpeg\"/>\n\n                <i:GenericItem x:Name=\"EncoderGifskiItem\" Title=\"{DynamicResource S.SaveAs.Encoder.Gifski}\" Description=\"{DynamicResource S.SaveAs.Encoder.Gifski.Info}\"\n                               Value=\"{x:Static e:EncoderTypes.Gifski}\" ImageId=\"Vector.Gifski\"/>\n\n                <i:GenericItem x:Name=\"EncoderSystemItem\" Title=\"{DynamicResource S.SaveAs.Encoder.System}\" Description=\"{DynamicResource S.SaveAs.Encoder.System.Info}\"\n                               Value=\"{x:Static e:EncoderTypes.System}\" ImageId=\"Vector.Net\"/>\n\n                <i:GenericItem x:Name=\"EncoderKGySoftItem\" Title=\"{DynamicResource S.SaveAs.Encoder.KGySoft}\" Description=\"{DynamicResource S.SaveAs.Encoder.KGySoft.Info}\"\n                               Value=\"{x:Static e:EncoderTypes.KGySoft}\" ImageId=\"Vector.KGySoft\"/>\n            </ComboBox>\n            \n            <n:LabelSeparator Grid.Row=\"2\" Text=\"{DynamicResource S.Preset.Name}\"/>\n            <n:ExtendedTextBox Grid.Row=\"3\" x:Name=\"TitleTextBox\" Margin=\"5,3\" MaxLength=\"50\" IsObligatory=\"True\"/>\n\n            <n:LabelSeparator Grid.Row=\"4\" Text=\"{DynamicResource S.Preset.Description}\"/>\n            <n:ExtendedTextBox Grid.Row=\"5\" x:Name=\"DescriptionTextBox\" MinHeight=\"23\" Margin=\"5,3\" VerticalContentAlignment=\"Top\" TextWrapping=\"Wrap\" MaxLength=\"100\"/>\n\n            <n:LabelSeparator Grid.Row=\"6\" Text=\"{DynamicResource S.Preset.Other}\"/>\n            <n:ExtendedCheckBox Grid.Row=\"7\" x:Name=\"AutoSaveCheckBox\" Text=\"{DynamicResource S.Preset.AutoSave}\" Margin=\"5,3\" HorizontalAlignment=\"Center\" CheckedChanged=\"AutoSaveCheckBox_CheckedChanged\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"3\" x:Name=\"InfoGrid\" Margin=\"5,3\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Width=\"15\" Height=\"15\" Background=\"{StaticResource Vector.Info}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n            <TextBlock Grid.Column=\"1\" x:Name=\"SaveInfoTextBlock\" Text=\"{DynamicResource S.Preset.Info.Automatic}\" Foreground=\"{DynamicResource Element.Foreground.Detail}\" \n                       FontStyle=\"Italic\" FontSize=\"12\" Padding=\"3\" TextWrapping=\"WrapWithOverflow\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Command=\"{StaticResource Command.Ok}\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"CancelButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Preset.xaml.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel.ExportPresets;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Avif;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;\nusing ScreenToGif.ViewModel.ExportPresets.Image;\nusing ScreenToGif.ViewModel.ExportPresets.Other;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Avi;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Mkv;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Mov;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Mp4;\nusing ScreenToGif.ViewModel.ExportPresets.Video.Webm;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Preset\n{\n    public ExportPreset Current { get; set; }\n        \n    public bool IsNew { get; set; }\n        \n        \n    public Preset()\n    {\n        InitializeComponent();\n    }\n\n        \n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        #region Adjust to file type\n\n        switch (Current.Type)\n        {\n            case ExportFormats.Gif:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = Environment.Is64BitProcess;\n                EncoderSystemItem.IsEnabled = true;\n                EncoderKGySoftItem.IsEnabled = true;\n                break;\n            case ExportFormats.Apng:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                break;\n            case ExportFormats.Webp:\n            case ExportFormats.Avif:\n            case ExportFormats.Bpg:\n            case ExportFormats.Avi:\n            case ExportFormats.Mkv:\n            case ExportFormats.Mov:\n            case ExportFormats.Mp4:\n            case ExportFormats.Webm:\n                EncoderScreenToGifItem.IsEnabled = false;\n                EncoderFfmpegItem.IsEnabled = true;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                break;\n\n            case ExportFormats.Jpeg:\n            case ExportFormats.Png:\n            case ExportFormats.Bmp:\n            case ExportFormats.Stg:\n            case ExportFormats.Psd:\n                EncoderScreenToGifItem.IsEnabled = true;\n                EncoderFfmpegItem.IsEnabled = false;\n                EncoderGifskiItem.IsEnabled = false;\n                EncoderSystemItem.IsEnabled = false;\n                EncoderKGySoftItem.IsEnabled = false;\n                break;\n        }\n\n        #endregion\n            \n        TitleTextBox.Focus();\n        ExtensionTextBlock.Text = Current.Type.ToString();\n        EncoderComboBox.SelectedValue = Current.Encoder;\n            \n        if (IsNew)\n        {\n            AutoSaveCheckBox.IsChecked = true;\n            return;\n        }\n\n        //Edit.\n        IconBorder.Background = TryFindResource(\"Vector.Pen\") as Brush;\n        ModeTextBlock.Text = LocalizationHelper.Get(\"S.Edit\");\n        EncoderComboBox.IsEnabled = false;\n        TitleTextBox.Text = Current.Title ?? \"\";\n        DescriptionTextBox.Text = Current.Description ?? \"\";\n        AutoSaveCheckBox.IsChecked = Current.HasAutoSave;\n        SaveInfoTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Preset.Info.\" + (AutoSaveCheckBox.IsChecked == true ? \"Automatic\" : \"Manual\"));\n\n        //If it's a default preset, just let the user edit the \"auto save\" feature.\n        if (string.IsNullOrWhiteSpace(Current.TitleKey))\n            return;\n\n        TitleTextBox.IsEnabled = false;\n        DescriptionTextBox.IsEnabled = false;\n        AutoSaveCheckBox.Focus();\n\n        StatusBand.Info(LocalizationHelper.Get(\"S.Preset.Warning.Readonly\"));\n    }\n\n    private void Ok_CanExecute(object sender, System.Windows.Input.CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = EncoderComboBox.SelectedItem != null && !TitleTextBox.IsNullOrWhiteSpace();\n    }\n\n    private void Ok_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e)\n    {\n        #region Validation\n\n        if (TitleTextBox.IsNullOrWhiteSpace())\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Preset.Warning.Name\"));\n            return;\n        }\n            \n        var list = UserSettings.All.ExportPresets.OfType<ExportPreset>().ToList();\n\n        //Don't let two preset of the same type to have the same name.\n        if (list.Any(a => a.Type == Current.Type && a.Title != Current.Title && a.Title == TitleTextBox.Text.Trim()))\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.Preset.Warning.SameName\"));\n            return;\n        }\n\n        #endregion\n\n        #region Build preset\n\n        var encoder = EncoderComboBox.SelectedValue as EncoderTypes?;\n            \n        if (IsNew)\n            switch (Current.Type)\n            {\n                case ExportFormats.Gif:\n                {\n                    switch (encoder)\n                    {\n                        case EncoderTypes.ScreenToGif:\n                            var embeddedGifPreset = new EmbeddedGifPreset();\n                                \n                            Current.CopyPropertiesTo(embeddedGifPreset);\n                            embeddedGifPreset.Encoder = EncoderTypes.ScreenToGif;\n                            embeddedGifPreset.ImageId = \"Vector.Logo\";\n                            Current = embeddedGifPreset;\n                            break;\n                        case EncoderTypes.KGySoft:\n                            var kgySoftGifPreset = new KGySoftGifPreset();\n\n                            Current.CopyPropertiesTo(kgySoftGifPreset);\n                            kgySoftGifPreset.Encoder = EncoderTypes.KGySoft;\n                            kgySoftGifPreset.ImageId = \"Vector.KGySoft\";\n                            Current = kgySoftGifPreset;\n                            break;\n                        case EncoderTypes.FFmpeg:\n                            var ffmpegGifPreset = new FfmpegGifPreset();\n                                \n                            Current.CopyPropertiesTo(ffmpegGifPreset);\n                            ffmpegGifPreset.Encoder = EncoderTypes.FFmpeg;\n                            ffmpegGifPreset.ImageId = \"Vector.Ffmpeg\";\n                            Current = ffmpegGifPreset;\n                            break;\n                        case EncoderTypes.Gifski:\n                            var gifskiGifPreset = new GifskiGifPreset();\n                                \n                            Current.CopyPropertiesTo(gifskiGifPreset);\n                            gifskiGifPreset.Encoder = EncoderTypes.Gifski;\n                            gifskiGifPreset.ImageId = \"Vector.Gifski\";\n                            Current = gifskiGifPreset;\n                            break;\n                        case EncoderTypes.System:\n                            var systemGifPreset = new SystemGifPreset();\n                                \n                            Current.CopyPropertiesTo(systemGifPreset);\n                            systemGifPreset.Encoder = EncoderTypes.System;\n                            systemGifPreset.ImageId = \"Vector.Net\";\n                            Current = systemGifPreset;\n                            break;\n                    }\n                            \n                    break;\n                }\n                case ExportFormats.Apng:\n                {\n                    switch (encoder)\n                    {\n                        case EncoderTypes.ScreenToGif:\n                        {\n                            var embeddedApngPreset = new EmbeddedApngPreset();\n\n                            Current.CopyPropertiesTo(embeddedApngPreset);\n                            embeddedApngPreset.Encoder = EncoderTypes.ScreenToGif;\n                            embeddedApngPreset.ImageId = \"Vector.Logo\";\n                            Current = embeddedApngPreset;\n                            break;\n                        }\n                        case EncoderTypes.FFmpeg:\n                        {\n                            var ffmpegApngPreset = new FfmpegApngPreset();\n\n                            Current.CopyPropertiesTo(ffmpegApngPreset);\n                            ffmpegApngPreset.Encoder = EncoderTypes.FFmpeg;\n                            ffmpegApngPreset.ImageId = \"Vector.Ffmpeg\";\n                            Current = ffmpegApngPreset;\n                            break;\n                        }\n                    }\n                        \n                    break;\n                }\n                case ExportFormats.Webp:\n                {\n                    var ffmpegWebpPreset = new FfmpegWebpPreset();\n\n                    Current.CopyPropertiesTo(ffmpegWebpPreset);\n                    Current = ffmpegWebpPreset;\n                    break;\n                }\n                case ExportFormats.Avif:\n                {\n                    var ffmpegAvifPreset = new FfmpegAvifPreset();\n\n                    Current.CopyPropertiesTo(ffmpegAvifPreset);\n                    Current = ffmpegAvifPreset;\n                    break;\n                }\n                        \n                case ExportFormats.Avi:\n                {\n                    var ffmpegAviPreset = new FfmpegAviPreset();\n\n                    Current.CopyPropertiesTo(ffmpegAviPreset);\n                    Current = ffmpegAviPreset;\n                    break;\n                }\n                case ExportFormats.Mkv:\n                {\n                    var ffmpegMkvPreset = new FfmpegMkvPreset();\n\n                    Current.CopyPropertiesTo(ffmpegMkvPreset);\n                    Current = ffmpegMkvPreset;\n                    break;\n                }\n                case ExportFormats.Mov:\n                {\n                    var ffmpegMovPreset = new FfmpegMovPreset();\n\n                    Current.CopyPropertiesTo(ffmpegMovPreset);\n                    Current = ffmpegMovPreset;\n                    break;\n                }\n                case ExportFormats.Mp4:\n                {\n                    var ffmpegMp4Preset = new FfmpegMp4Preset();\n\n                    Current.CopyPropertiesTo(ffmpegMp4Preset);\n                    Current = ffmpegMp4Preset;\n                    break;\n                }\n                case ExportFormats.Webm:\n                {\n                    var ffmpegWebmPreset = new FfmpegWebmPreset();\n\n                    Current.CopyPropertiesTo(ffmpegWebmPreset);\n                    Current = ffmpegWebmPreset;\n                    break;\n                }\n                case ExportFormats.Jpeg:\n                {\n                    var jpegPreset = new JpegPreset();\n\n                    Current.CopyPropertiesTo(jpegPreset);\n                    Current = jpegPreset;\n                    break;\n                }\n                case ExportFormats.Png:\n                {\n                    var pngPreset = new PngPreset();\n\n                    Current.CopyPropertiesTo(pngPreset);\n                    Current = pngPreset;\n                    break;\n                }\n                case ExportFormats.Bmp:\n                {\n                    var bmpPreset = new BmpPreset();\n\n                    Current.CopyPropertiesTo(bmpPreset);\n                    Current = bmpPreset;\n                    break;\n                }\n                case ExportFormats.Stg:\n                {\n                    var projectPreset = new StgPreset();\n\n                    Current.CopyPropertiesTo(projectPreset);\n                    Current = projectPreset;\n                    break;\n                }\n                case ExportFormats.Psd:\n                {\n                    var psdPreset = new PsdPreset();\n\n                    Current.CopyPropertiesTo(psdPreset);\n                    Current = psdPreset;\n                    break;\n                }\n            }\n\n        Current.IsDefault = false;\n        Current.Title = TitleTextBox.Text;\n        Current.TitleKey = null;\n        Current.Description = DescriptionTextBox.Text;\n        Current.DescriptionKey = null;\n        Current.HasAutoSave = AutoSaveCheckBox.IsChecked == true;\n        Current.CreationDate = IsNew ? DateTime.UtcNow : Current.CreationDate;\n\n        #endregion\n\n        #region Update on list\n\n        if (IsNew)\n            list.Add(Current);\n            \n        //Persist the changes to the settings.\n        UserSettings.All.ExportPresets = new ArrayList(list.ToArray());\n\n        #endregion\n\n        DialogResult = true;\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        DialogResult = false;\n    }\n\n    private void AutoSaveCheckBox_CheckedChanged(object sender, RoutedEventArgs e)\n    {\n        SaveInfoTextBlock.SetResourceReference(TextBlock.TextProperty, \"S.Preset.Info.\" + (AutoSaveCheckBox.IsChecked == true ? \"Automatic\" : \"Manual\"));\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/RegionMagnifier.xaml",
    "content": "﻿<Window x:Class=\"ScreenToGif.Windows.Other.RegionMagnifier\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        x:Name=\"ThisWindow\" Title=\"RegionMagnifier\" Height=\"140\" Width=\"120\"\n        WindowStyle=\"None\" AllowsTransparency=\"True\" Topmost=\"True\" ResizeMode=\"NoResize\" IsHitTestVisible=\"False\"\n        UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\" Background=\"{x:Null}\" ShowInTaskbar=\"False\">\n\n    <Grid Height=\"140\" Width=\"120\" Background=\"#60000000\">\n        <Grid.RowDefinitions>\n            <RowDefinition/>\n            <RowDefinition Height=\"2\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"20\"/>\n        </Grid.RowDefinitions>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition/>\n            <ColumnDefinition Width=\"2\"/>\n            <ColumnDefinition/>\n        </Grid.ColumnDefinitions>\n\n        <Image Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" Grid.ColumnSpan=\"3\" Source=\"{Binding ElementName=ThisWindow, Path=Image}\" Stretch=\"UniformToFill\" \n               RenderOptions.BitmapScalingMode=\"NearestNeighbor\" RenderOptions.EdgeMode=\"Unspecified\" UseLayoutRounding=\"True\"/>\n\n        <Rectangle Grid.Row=\"1\" Grid.Column=\"0\" Grid.ColumnSpan=\"2\" Height=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n        <Rectangle Grid.Row=\"1\" Grid.Column=\"2\" Height=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n        <Rectangle Grid.Row=\"0\" Grid.Column=\"1\" Width=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n        <Rectangle Grid.Row=\"2\" Grid.Column=\"1\" Width=\"2\" Stroke=\"#6020FF00\" StrokeThickness=\"2\"/>\n\n        <TextBlock Grid.Row=\"3\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" Foreground=\"AliceBlue\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\">\n            <TextBlock.Text>\n                <MultiBinding StringFormat=\"{}{0:##,##0.##} ◇ {1:##,##0.##}\">\n                    <Binding ElementName=\"ThisWindow\" Path=\"LeftPosition\" FallbackValue=\"0\"/>\n                    <Binding ElementName=\"ThisWindow\" Path=\"TopPosition\" FallbackValue=\"0\"/>\n                </MultiBinding>\n            </TextBlock.Text>\n        </TextBlock>\n    </Grid>\n</Window>"
  },
  {
    "path": "ScreenToGif/Windows/Other/RegionMagnifier.xaml.cs",
    "content": "using System.Windows;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class RegionMagnifier : Window\n{\n    #region Properties\n\n    public static readonly DependencyProperty LeftPositionProperty = DependencyProperty.Register(nameof(LeftPosition), typeof(double), typeof(RegionMagnifier), new PropertyMetadata(double.NaN));\n    public static readonly DependencyProperty TopPositionProperty = DependencyProperty.Register(nameof(TopPosition), typeof(double), typeof(RegionMagnifier), new PropertyMetadata(double.NaN));\n    public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(nameof(Image), typeof(ImageSource), typeof(RegionMagnifier), new PropertyMetadata(null));\n\n    public double LeftPosition\n    {\n        get => (double)GetValue(LeftPositionProperty);\n        set => SetValue(LeftPositionProperty, value);\n    }\n\n    public double TopPosition\n    {\n        get => (double)GetValue(TopPositionProperty);\n        set => SetValue(TopPositionProperty, value);\n    }\n\n    public ImageSource Image\n    {\n        get => (ImageSource)GetValue(ImageProperty);\n        set => SetValue(ImageProperty, value);\n    }\n\n    #endregion\n\n    public RegionMagnifier()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/RegionSelection.xaml",
    "content": "<Window x:Class=\"ScreenToGif.Windows.Other.RegionSelection\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n        x:Name=\"ThisWindow\" Title=\"ScreenToGif\" WindowStyle=\"None\" AllowsTransparency=\"True\" Topmost=\"True\" ResizeMode=\"NoResize\" SizeToContent=\"WidthAndHeight\"\n        UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\" Background=\"{x:Null}\" ShowInTaskbar=\"False\"\n        DpiChanged=\"Window_DpiChanged\" StateChanged=\"Window_StateChanged\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n        </Grid.ColumnDefinitions>\n        \n        <Rectangle Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"SelectionRectangle\" StrokeDashArray=\"5\" Stroke=\"#FFABABAB\" StrokeThickness=\"1\" IsHitTestVisible=\"False\" Effect=\"{x:Null}\"/>\n\n        <!--<TextBlock Grid.Row=\"1\" Grid.Column=\"1\" Background=\"Beige\" Margin=\"5\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\">\n            <Run Text=\"{Binding ElementName=ThisWindow, Path=Left, StringFormat={}{0}}\"/>\n            <Run Text=\"x\"/>\n            <Run Text=\"{Binding ElementName=ThisWindow, Path=Top, StringFormat={}{0}}\"/>\n        </TextBlock>-->\n        \n        <Grid Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"GuidelinesGrid\">\n            <Grid Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=DisplayThirdsGuideline, Converter={StaticResource Bool2Visibility}}\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                    <ColumnDefinition/>\n                </Grid.ColumnDefinitions>\n\n                <!--Rule of thirds, horizontal top-->\n                <Line Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ThirdsLine\" X1=\"0\" Y1=\"0\" X2=\"1\" Y2=\"0\" \n                      Stroke=\"{Binding Source={x:Static t:UserSettings.All}, Path=ThirdsGuidelineColor, Converter={StaticResource ColorToBrush}}\" \n                      StrokeThickness=\"{Binding Source={x:Static t:UserSettings.All}, Path=ThirdsGuidelineThickness}\" Stretch=\"Uniform\" VerticalAlignment=\"Bottom\"\n                      StrokeDashArray=\"{Binding Source={x:Static t:UserSettings.All}, Path=ThirdsGuidelineStrokeDashArray}\"/>\n\n                <!--Rule of thirds, horizontal bottom-->\n                <Line Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" X1=\"0\" Y1=\"0\" X2=\"1\" Y2=\"0\" Stroke=\"{Binding ElementName=ThirdsLine, Path=Stroke}\" \n                      StrokeThickness=\"{Binding ElementName=ThirdsLine, Path=StrokeThickness}\" Stretch=\"Uniform\" VerticalAlignment=\"Top\"\n                      StrokeDashArray=\"{Binding ElementName=ThirdsLine, Path=StrokeDashArray}\"/>\n\n                <!--Rule of thirds, vertical left-->\n                <Line Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" X1=\"0\" Y1=\"0\" X2=\"0\" Y2=\"1\" Stroke=\"{Binding ElementName=ThirdsLine, Path=Stroke}\" \n                      StrokeThickness=\"{Binding ElementName=ThirdsLine, Path=StrokeThickness}\" Stretch=\"Uniform\" HorizontalAlignment=\"Right\"\n                      StrokeDashArray=\"{Binding ElementName=ThirdsLine, Path=StrokeDashArray}\"/>\n\n                <!--Rule of thirds, vertical right-->\n                <Line Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"3\" X1=\"0\" Y1=\"0\" X2=\"0\" Y2=\"1\" Stroke=\"{Binding ElementName=ThirdsLine, Path=Stroke}\" \n                      StrokeThickness=\"{Binding ElementName=ThirdsLine, Path=StrokeThickness}\" Stretch=\"Uniform\" HorizontalAlignment=\"Left\"\n                      StrokeDashArray=\"{Binding ElementName=ThirdsLine, Path=StrokeDashArray}\"/>\n            </Grid>\n\n            <Grid Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=DisplayCrosshairGuideline, Converter={StaticResource Bool2Visibility}}\">\n                <!--Crosshair, horizontal-->\n                <Line X1=\"0\" Y1=\"0\" X2=\"1\" Y2=\"0\" x:Name=\"CrosshairLine\" Stroke=\"{Binding Source={x:Static t:UserSettings.All}, Path=CrosshairGuidelineColor, Converter={StaticResource ColorToBrush}}\" \n                      StrokeThickness=\"{Binding Source={x:Static t:UserSettings.All}, Path=CrosshairGuidelineThickness}\" Stretch=\"Uniform\" VerticalAlignment=\"Center\" \n                      StrokeDashArray=\"{Binding Source={x:Static t:UserSettings.All}, Path=CrosshairGuidelineStrokeDashArray}\"/>\n\n                <!--Crosshair, vertical-->\n                <Line X1=\"0\" Y1=\"0\" X2=\"0\" Y2=\"1\" Stroke=\"{Binding ElementName=CrosshairLine, Path=Stroke}\" StrokeThickness=\"{Binding ElementName=CrosshairLine, Path=StrokeThickness}\" \n                      Stretch=\"Uniform\" HorizontalAlignment=\"Center\" StrokeDashArray=\"{Binding ElementName=CrosshairLine, Path=StrokeDashArray}\"/>\n            </Grid>\n        </Grid>\n\n        <!--Thumbs-->\n        <Border Grid.Row=\"1\" Grid.Column=\"2\" x:Name=\"HorizontalBorder\" Width=\"10\" Height=\"30\" BorderThickness=\"0,1,1,0\" Background=\"{DynamicResource Panel.Background.Level2}\" \n                BorderBrush=\"{DynamicResource Element.Border}\" CornerRadius=\"0,15,0,0\" VerticalAlignment=\"Bottom\" HorizontalAlignment=\"Left\" Cursor=\"SizeAll\" \n                Visibility=\"Collapsed\" ToolTip=\"{DynamicResource S.Recorder.Move}\" ToolTipService.Placement=\"Right\"\n                MouseLeftButtonDown=\"Thumb_MouseLeftButtonDown\" MouseMove=\"Thumb_MouseMove\" PreviewMouseLeftButtonUp=\"Thumb_PreviewMouseLeftButtonUp\"/>\n\n        <Border Grid.Row=\"2\" Grid.Column=\"2\" x:Name=\"CornerBorder\" Width=\"10\" Height=\"10\" BorderThickness=\"0,0,1,1\" Background=\"{DynamicResource Panel.Background.Level2}\" \n                BorderBrush=\"{DynamicResource Element.Border}\" CornerRadius=\"0,0,15,0\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Left\" Cursor=\"SizeAll\" \n                Visibility=\"Collapsed\" ToolTip=\"{DynamicResource S.Recorder.Move}\" ToolTipService.Placement=\"Right\"\n                MouseLeftButtonDown=\"Thumb_MouseLeftButtonDown\" MouseMove=\"Thumb_MouseMove\" PreviewMouseLeftButtonUp=\"Thumb_PreviewMouseLeftButtonUp\"/>\n\n        <Border Grid.Row=\"2\" Grid.Column=\"1\" x:Name=\"VerticalBorder\" Width=\"30\" Height=\"10\" BorderThickness=\"1,0,0,1\" Background=\"{DynamicResource Panel.Background.Level2}\" \n                BorderBrush=\"{DynamicResource Element.Border}\" CornerRadius=\"0,0,0,15\" VerticalAlignment=\"Top\" HorizontalAlignment=\"Right\" Cursor=\"SizeAll\" \n                Visibility=\"Collapsed\" ToolTip=\"{DynamicResource S.Recorder.Move}\" ToolTipService.Placement=\"Bottom\"\n                MouseLeftButtonDown=\"Thumb_MouseLeftButtonDown\" MouseMove=\"Thumb_MouseMove\" PreviewMouseLeftButtonUp=\"Thumb_PreviewMouseLeftButtonUp\"/>\n    </Grid>\n</Window>"
  },
  {
    "path": "ScreenToGif/Windows/Other/RegionSelection.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Threading;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class RegionSelection : Window\n{\n    #region Properties\n\n    public Rect Rect { get; set; }\n        \n    public ModeType? Mode { get; set; }\n\n    public bool IsStatic { get; set; }\n        \n    public Monitor Monitor { get; set; }\n\n    public double Dpi { get; set; }\n\n    public double Scale { get; set; }\n\n    private Point _previousPoint;\n    private HorizontalAlignment _horizontalAlignment = HorizontalAlignment.Right;\n    private VerticalAlignment _verticalAlignment = VerticalAlignment.Bottom;\n\n    #endregion\n\n    #region Custom event\n\n    public static readonly RoutedEvent PositionChangedEvent = EventManager.RegisterRoutedEvent(nameof(PositionChanged), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RegionSelection));\n    public static readonly RoutedEvent DragStartedEvent = EventManager.RegisterRoutedEvent(nameof(DragStarted), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RegionSelection));\n    public static readonly RoutedEvent DragEndedEvent = EventManager.RegisterRoutedEvent(nameof(DragEnded), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RegionSelection));\n\n    public event RoutedEventHandler PositionChanged\n    {\n        add => AddHandler(PositionChangedEvent, value);\n        remove => RemoveHandler(PositionChangedEvent, value);\n    }\n\n    public event RoutedEventHandler DragStarted\n    {\n        add => AddHandler(DragStartedEvent, value);\n        remove => RemoveHandler(DragStartedEvent, value);\n    }\n\n    public event RoutedEventHandler DragEnded\n    {\n        add => AddHandler(DragEndedEvent, value);\n        remove => RemoveHandler(DragEndedEvent, value);\n    }\n\n    private void RaisePositionChanged()\n    {\n        if (PositionChangedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(PositionChangedEvent));\n    }\n\n    private void RaiseDragStarted()\n    {\n        if (DragStartedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(DragStartedEvent));\n    }\n\n    private void RaiseDragEnded()\n    {\n        if (DragEndedEvent == null || !IsLoaded)\n            return;\n\n        RaiseEvent(new RoutedEventArgs(DragEndedEvent));\n    }\n\n    #endregion\n\n    public RegionSelection()\n    {\n        InitializeComponent();\n\n        RenderOptions.SetEdgeMode(SelectionRectangle, EdgeMode.Unspecified);\n    }\n\n\n    private void Window_DpiChanged(object sender, DpiChangedEventArgs e)\n    {\n        Scale = e.NewDpi.DpiScaleX;\n        Dpi = e.NewDpi.PixelsPerInchX;\n    }\n\n    private void Window_StateChanged(object sender, EventArgs e)\n    {\n        Opacity = WindowState == WindowState.Minimized ? 0 : 1;\n    }\n\n    private void Thumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (IsStatic || sender is not Border border)\n            return;\n\n        border.CaptureMouse();\n        _previousPoint = PointToScreen(e.GetPosition(this));\n        RaiseDragStarted();\n\n        e.Handled = true;\n    }\n\n    private void Thumb_MouseMove(object sender, MouseEventArgs e)\n    {\n        if (IsStatic || !(sender is Border border) || !border.IsMouseCaptured || e.LeftButton != MouseButtonState.Pressed)\n            return;\n\n        var currentPosition = PointToScreen(e.GetPosition(this));\n\n        //Detect how much the mouse cursor was moved.\n        var x = Rect.X + (currentPosition.X - _previousPoint.X) / Scale;\n        var y = Rect.Y + (currentPosition.Y - _previousPoint.Y) / Scale;\n\n        //Limit the drag to the current screen.\n        if (x < Monitor.Bounds.X - 1)\n            x = Monitor.Bounds.X - 1;\n\n        if (y < Monitor.Bounds.Y - 1)\n            y = Monitor.Bounds.Y - 1;\n\n        if (x + Rect.Width > Monitor.Bounds.Right + 1)\n            x = Monitor.Bounds.Right + 1 - Rect.Width;\n\n        if (y + Rect.Height > Monitor.Bounds.Bottom + 1)\n            y = Monitor.Bounds.Bottom + 1 - Rect.Height;\n\n        //Is there any way to prevent mouse going towards the edges when the region is already touching it?\n\n        //Move the selection.\n        Rect = new Rect(x, y, Rect.Width, Rect.Height);\n        DisplaySelection(false);\n        RaisePositionChanged();\n\n        _previousPoint = currentPosition;\n        e.Handled = true;\n    }\n\n    private void Thumb_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)\n    {\n        if (IsStatic || !(sender is Border border) || !border.IsMouseCaptured)\n            return;\n\n        border.ReleaseMouseCapture();\n        DisplayThumbs();\n        RaiseDragEnded();\n    }\n\n\n    public void Select(ModeType? mode, Rect region, Monitor monitor = null)\n    {\n        //TODO: Configurable border color.\n\n        //When the region switches monitors, move the selection to the new monitor, so that the scale of the UI changes.\n        //This solves the issue where the UI would move to the wrong position.\n        if (monitor != null)\n        {\n            //If the new region is in another screen, move the panel to the new screen first, to adjust the UI to the screen DPI.\n            if (Monitor?.Handle != monitor.Handle || Monitor?.Scale != monitor.Scale)\n            {\n                if (double.IsNaN(Left) || double.IsNaN(Top))\n                    Show();\n\n                this.MoveToScreen(monitor);\n            }\n\n            Monitor = monitor;\n        }\n        else\n        {\n            //TODO: Maybe get the monitor which intersects the most with the region.\n            Monitor = MonitorHelper.FromPoint((int) region.X, (int) region.Y);\n        }\n\n        Mode = mode ?? Mode;\n        Rect = region;\n        IsStatic = !Mode.HasValue || Mode == ModeType.Fullscreen || !UserSettings.All.EnableSelectionPanning;\n        Opacity = !Mode.HasValue || Mode == ModeType.Fullscreen ? 0 : 1;\n\n        DisplaySelection();\n        DisplayThumbs();\n        Show();\n\n        Scale = this.Scale();\n        Dpi = Scale * 96d;\n    } \n\n    private void DisplaySelection(bool ignoreThumbs = true)\n    {\n        Left = (Rect.Left - (ignoreThumbs || _horizontalAlignment == HorizontalAlignment.Right ? 0 : HorizontalBorder.ActualWidth)) / (this.Scale() / Monitor.Scale);\n        Top = (Rect.Top - (ignoreThumbs || _verticalAlignment == VerticalAlignment.Bottom ? 0 : VerticalBorder.ActualHeight)) / (this.Scale() / Monitor.Scale);\n\n        SelectionRectangle.Width = Rect.Width;\n        SelectionRectangle.Height = Rect.Height;\n    }\n\n    private void DisplayThumbs()\n    {\n        if (IsStatic)\n        {\n            HorizontalBorder.Visibility = Visibility.Collapsed;\n            CornerBorder.Visibility = Visibility.Collapsed;\n            VerticalBorder.Visibility = Visibility.Collapsed;\n            return;\n        }\n\n        //Detect the space left on all 4 sides.\n        var leftSpace = Rect.X - Monitor.Bounds.X;\n        var topSpace = Rect.Y - Monitor.Bounds.Y;\n        var rightSpace = Monitor.Bounds.Right - Rect.Right;\n        var bottomSpace = Monitor.Bounds.Bottom - Rect.Bottom;\n\n        //Display the thumb to the left if there's space on the left and not enough space on the right.\n        //Display the thumb to the top if there's space on the top and not enough space on the bottom.\n        _horizontalAlignment = rightSpace < 10 && leftSpace > 10 ? HorizontalAlignment.Left : HorizontalAlignment.Right;\n        _verticalAlignment = bottomSpace < 10 && topSpace > 10 ? VerticalAlignment.Top : VerticalAlignment.Bottom;\n\n        #region Position the thumbs\n\n        //Visibility as hidden, to have the size available.\n        if (_horizontalAlignment != HorizontalAlignment.Right)\n        {\n            HorizontalBorder.Visibility = Visibility.Hidden;\n            HorizontalBorder.Refresh();\n        }\n\n        if (_verticalAlignment != VerticalAlignment.Bottom)\n        {\n            VerticalBorder.Visibility = Visibility.Hidden;\n            VerticalBorder.Refresh();\n        }\n            \n        //Offset.\n        Left = (Rect.Left - (_horizontalAlignment == HorizontalAlignment.Right ? 0 : HorizontalBorder.ActualWidth)) / (this.Scale() / Monitor.Scale);\n        Top = (Rect.Top - (_verticalAlignment == VerticalAlignment.Bottom ? 0 : VerticalBorder.ActualHeight)) / (this.Scale() / Monitor.Scale); \n\n        //Grid positioning.\n        Grid.SetRow(HorizontalBorder, 1);\n        Grid.SetColumn(HorizontalBorder, _horizontalAlignment == HorizontalAlignment.Right ? 2 : 0);\n\n        Grid.SetRow(CornerBorder, _verticalAlignment == VerticalAlignment.Bottom ? 2 : 0);\n        Grid.SetColumn(CornerBorder, _horizontalAlignment == HorizontalAlignment.Right ? 2 : 0);\n\n        Grid.SetRow(VerticalBorder, _verticalAlignment == VerticalAlignment.Bottom ? 2 : 0);\n        Grid.SetColumn(VerticalBorder, 1);\n\n        //Alignment.\n        VerticalBorder.HorizontalAlignment = _horizontalAlignment;\n        HorizontalBorder.VerticalAlignment = _verticalAlignment;\n\n        //Corners.\n        HorizontalBorder.CornerRadius = new CornerRadius\n        {\n            TopLeft = _verticalAlignment == VerticalAlignment.Bottom && _horizontalAlignment == HorizontalAlignment.Left ? 15 : 0,\n            TopRight = _verticalAlignment == VerticalAlignment.Bottom && _horizontalAlignment == HorizontalAlignment.Right ? 15 : 0,\n            BottomRight = _verticalAlignment == VerticalAlignment.Top && _horizontalAlignment == HorizontalAlignment.Right ? 15 : 0,\n            BottomLeft = _verticalAlignment == VerticalAlignment.Top && _horizontalAlignment == HorizontalAlignment.Left ? 15 : 0\n        };\n        CornerBorder.CornerRadius = new CornerRadius\n        {\n            TopLeft = _verticalAlignment == VerticalAlignment.Top && _horizontalAlignment == HorizontalAlignment.Left ? 15 : 0,\n            TopRight = _verticalAlignment == VerticalAlignment.Top && _horizontalAlignment == HorizontalAlignment.Right ? 15 : 0,\n            BottomRight = _verticalAlignment == VerticalAlignment.Bottom && _horizontalAlignment == HorizontalAlignment.Right ? 15 : 0,\n            BottomLeft = _verticalAlignment == VerticalAlignment.Bottom && _horizontalAlignment == HorizontalAlignment.Left ? 15 : 0\n        };\n        VerticalBorder.CornerRadius = new CornerRadius\n        {\n            TopLeft = _verticalAlignment == VerticalAlignment.Top && _horizontalAlignment == HorizontalAlignment.Right ? 15 : 0,\n            TopRight = _verticalAlignment == VerticalAlignment.Top && _horizontalAlignment == HorizontalAlignment.Left ? 15 : 0,\n            BottomRight = _verticalAlignment == VerticalAlignment.Bottom && _horizontalAlignment == HorizontalAlignment.Left ? 15 : 0,\n            BottomLeft = _verticalAlignment == VerticalAlignment.Bottom && _horizontalAlignment == HorizontalAlignment.Right ? 15 : 0\n        };\n\n        //Borders.\n        HorizontalBorder.BorderThickness = new Thickness\n        {\n            Left = _horizontalAlignment == HorizontalAlignment.Left ? 1 : 0,\n            Top = _verticalAlignment == VerticalAlignment.Bottom ? 1 : 0,\n            Right = _horizontalAlignment == HorizontalAlignment.Right ? 1 : 0,\n            Bottom = _verticalAlignment == VerticalAlignment.Top ? 1 : 0\n        };\n        CornerBorder.BorderThickness = new Thickness\n        {\n            Left = _horizontalAlignment == HorizontalAlignment.Left ? 1 : 0,\n            Top = _verticalAlignment == VerticalAlignment.Top ? 1 : 0,\n            Right = _horizontalAlignment == HorizontalAlignment.Right ? 1 : 0,\n            Bottom = _verticalAlignment == VerticalAlignment.Bottom ? 1 : 0\n        };\n        VerticalBorder.BorderThickness = new Thickness\n        {\n            Left = _horizontalAlignment == HorizontalAlignment.Right ? 1 : 0,\n            Top = _verticalAlignment == VerticalAlignment.Top ? 1 : 0,\n            Right = _horizontalAlignment == HorizontalAlignment.Left ? 1 : 0,\n            Bottom = _verticalAlignment == VerticalAlignment.Bottom ? 1 : 0\n        };\n\n        //Tooltips.\n        ToolTipService.SetPlacement(HorizontalBorder, _horizontalAlignment == HorizontalAlignment.Right ? PlacementMode.Right : PlacementMode.Left);\n        ToolTipService.SetPlacement(CornerBorder, _horizontalAlignment == HorizontalAlignment.Right ? PlacementMode.Right : PlacementMode.Left);\n        ToolTipService.SetPlacement(VerticalBorder, _verticalAlignment == VerticalAlignment.Bottom ? PlacementMode.Bottom : PlacementMode.Top);\n\n        //Visibility.\n        HorizontalBorder.Visibility = Visibility.Visible;\n        CornerBorder.Visibility = Visibility.Visible;\n        VerticalBorder.Visibility = Visibility.Visible;\n\n        #endregion\n    }\n\n    public void DisplayGuidelines()\n    {\n        GuidelinesGrid.Visibility = Visibility.Visible;\n    }\n\n    public void HideGuidelines()\n    {\n        GuidelinesGrid.Visibility = Visibility.Collapsed;\n        Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);\n    }\n\n    public void ClearSelection()\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/RegionSelector.xaml",
    "content": "<Window x:Class=\"ScreenToGif.Windows.Other.RegionSelector\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n        xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n        x:Name=\"GhostWindow\" Title=\"ScreenToGif\" Height=\"Auto\" Width=\"Auto\"\n        WindowStyle=\"None\" AllowsTransparency=\"True\" Topmost=\"True\" ResizeMode=\"NoResize\"\n        UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\" Background=\"Transparent\" ShowInTaskbar=\"False\">\n\n    <n:SelectControl x:Name=\"SelectControl\" Focusable=\"True\" AnimateBorder=\"{Binding Source={x:Static t:UserSettings.All}, Path=AnimateRecorderBorder, Mode=OneWay}\" \n                     HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" MouseHovering=\"SelectControl_MouseHovering\" \n                     SelectionAccepted=\"SelectControl_SelectionAccepted\" SelectionChanged=\"SelectControl_SelectionChanged\" \n                     SelectionCanceled=\"SelectControl_SelectionCanceled\"/>\n</Window>"
  },
  {
    "path": "ScreenToGif/Windows/Other/RegionSelector.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Util;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class RegionSelector : Window\n{\n    public Monitor Monitor { get; set; }\n\n    private Action<Monitor, Rect> _selected;\n    private Action<Monitor> _changed;\n    private Action<Monitor> _gotHover;\n    private Action _aborted;\n    private double _scale = 1;\n\n\n    public RegionSelector()\n    {\n        InitializeComponent();\n    }\n\n\n    public void Select(Monitor monitor, ModeType mode, Rect previousRegion, Action<Monitor, Rect> selected, Action<Monitor> changed, Action<Monitor> gotHover, Action aborted)\n    {\n        //Resize to fit given window.\n        Left = monitor.Bounds.Left;\n        Top = monitor.Bounds.Top;\n        Width = monitor.Bounds.Width;\n        Height = monitor.Bounds.Height;\n            \n        Monitor = monitor;\n\n        _scale = monitor.Scale;\n        _selected = selected;\n        _changed = changed;\n        _gotHover = gotHover;\n        _aborted = aborted;\n\n        SelectControl.Width = monitor.Bounds.Width;\n        SelectControl.Height = monitor.Bounds.Height;\n        SelectControl.Scale = monitor.Scale;\n        SelectControl.ParentLeft = Left;\n        SelectControl.ParentTop = Top;\n        SelectControl.Mode = mode;\n\n        if (mode == ModeType.Region)\n        {\n            SelectControl.BackImage = CaptureBackground();\n\n            if (UserSettings.All.SelectionImprovement)\n            {\n                AllowsTransparency = false;\n                Background = new ImageBrush(CaptureBackground(false));\n            }\n\n            //Since each region selector is attached to a single screen, the selection must be translated.\n            SelectControl.Selected = previousRegion.Translate(monitor.Bounds.Left * -1, monitor.Bounds.Top * -1);\n            SelectControl.Windows.Clear();\n        }\n        else if (mode == ModeType.Window)\n        {\n            //Get only the windows that are located inside the given screen.\n            var win = WindowHelper.EnumerateWindowsByMonitor(monitor);\n\n            //Since each region selector is attached to a single screen, the list of positions must be translated.\n            SelectControl.Windows = win.AdjustPosition(monitor.Bounds.Left, monitor.Bounds.Top);\n        }\n        else if (mode == ModeType.Fullscreen)\n        {\n            //Each selector is the whole screen.\n            SelectControl.Windows = new List<DetectedRegion>\n            {\n                new DetectedRegion(monitor.Handle, new Rect(new Size(monitor.Bounds.Width, monitor.Bounds.Height)), monitor.Name)\n            };\n        }\n\n        //Call the selector to select the region.\n        SelectControl.IsPickingRegion = true;\n        Show();\n\n        this.MoveToScreen(monitor, true);\n    }\n\n    public void ClearSelection()\n    {\n        SelectControl.Retry();\n    }\n\n    public void ClearHoverEffects()\n    {\n        SelectControl.HideZoom();\n    }\n\n    public void CancelSelection()\n    {\n        Close();\n    }\n\n\n    private double GetScreenDpi()\n    {\n        try\n        {\n            var source = Dispatcher?.Invoke<PresentationSource>(() => PresentationSource.FromVisual(this));\n\n            if (source?.CompositionTarget != null)\n                return Dispatcher.Invoke<double>(() => source.CompositionTarget.TransformToDevice.M11);\n            else\n                return 1;\n        }\n        catch (Exception)\n        {\n            return 1;\n        }\n        finally\n        {\n            GC.Collect(1);\n        }\n    }\n\n    private BitmapSource CaptureBackground(bool addPadding = true)\n    {\n        //A 7 pixel offset is added to allow the crop by the magnifying glass.\n        if (addPadding)\n            return Native.Helpers.Capture.CaptureScreenAsBitmapSource((int)Math.Round((Width + 14 + 1) * _scale), (int)Math.Round((Height + 14 + 1) * _scale),\n                (int)Math.Round((Left - 7) * _scale), (int)Math.Round((Top - 7) * _scale));\n\n        return Native.Helpers.Capture.CaptureScreenAsBitmapSource((int)Math.Round(Width * _scale), (int)Math.Round(Height * _scale),\n            (int)Math.Round(Left * _scale), (int)Math.Round(Top * _scale));\n    }\n\n    private void SelectControl_MouseHovering(object sender, RoutedEventArgs e)\n    {\n        _gotHover.Invoke(Monitor);\n    }\n\n    private void SelectControl_SelectionAccepted(object sender, RoutedEventArgs e)\n    {\n        SelectControl.IsPickingRegion = false;\n        _selected.Invoke(Monitor, SelectControl.Selected.Translate(Monitor.Bounds.Left, Monitor.Bounds.Top)); //NonExpandedSelection\n        Close();\n    }\n\n    private void SelectControl_SelectionChanged(object sender, RoutedEventArgs e)\n    {\n        _changed.Invoke(Monitor);\n    }\n\n    private void SelectControl_SelectionCanceled(object sender, RoutedEventArgs e)\n    {\n        SelectControl.IsPickingRegion = false;\n        _aborted.Invoke();\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Splash.xaml",
    "content": "﻿<Window x:Class=\"ScreenToGif.Windows.Other.Splash\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        x:Name=\"SplashWindow\" Title=\"Splash\" Height=\"200\" Width=\"400\" Background=\"{DynamicResource Panel.Background}\"\n        WindowStyle=\"None\" AllowsTransparency=\"True\" WindowStartupLocation=\"CenterScreen\" Topmost=\"True\">\n\n    <Border BorderBrush=\"{DynamicResource Element.Border.Medium}\" BorderThickness=\"1\">\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n                <TextBlock Text=\"{Binding ElementName=SplashWindow, Path=Title, FallbackValue=Title}\" FontSize=\"22\" FontFamily=\"{DynamicResource FontFamilyLight}\" TextWrapping=\"Wrap\"\n                       Foreground=\"{DynamicResource Element.Foreground.Header}\" Margin=\"10\" HorizontalAlignment=\"Stretch\" TextAlignment=\"Center\"/>\n            </Grid>\n\n            <TextBlock Grid.Row=\"1\" FontSize=\"50\" Text=\"{Binding ElementName=SplashWindow, Path=SecondsLeft, StringFormat={}{0}, FallbackValue=0}\" \n                   Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"5\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>\n\n            <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\">\n                <TextBlock FontSize=\"14\" Text=\"{Binding ElementName=SplashWindow, Path=Subtitle, FallbackValue=Subtitle}\" TextAlignment=\"Center\" TextWrapping=\"Wrap\"\n                       Foreground=\"{DynamicResource Element.Foreground}\" Margin=\"5\" HorizontalAlignment=\"Stretch\"/>\n            </Grid>\n        </Grid>\n    </Border>\n</Window>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Splash.xaml.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Splash : Window\n{\n    private static Splash _splash;\n\n    #region Properties\n\n    public static readonly DependencyProperty SubtitleProperty = DependencyProperty.Register(nameof(Subtitle), typeof(string), typeof(Splash), new PropertyMetadata(default(string)));\n\n    public static readonly DependencyProperty SecondsLeftProperty = DependencyProperty.Register(nameof(SecondsLeft), typeof(int), typeof(Splash), new PropertyMetadata(default(int)));\n\n    public string Subtitle\n    {\n        get => (string) GetValue(SubtitleProperty);\n        set => SetValue(SubtitleProperty, value);\n    }\n\n    public int SecondsLeft\n    {\n        get => (int)GetValue(SecondsLeftProperty);\n        set => SetValue(SecondsLeftProperty, value);\n    }\n\n    #endregion\n\n    public Splash()\n    {\n        InitializeComponent();\n    }\n\n    public static void Display(string title, string subtitle = null)\n    {\n        _splash?.Close();\n\n        _splash = new Splash\n        {\n            Title = title,\n            Subtitle = subtitle\n        };\n        _splash.Show();\n    }\n\n    public static void SetTime(int seconds)\n    {\n        if (_splash != null)\n            _splash.SecondsLeft = seconds;\n    }\n\n    public static void Dismiss()\n    {\n        _splash?.Close();\n        _splash = null;\n    }\n\n    public static bool IsBeingDisplayed()\n    {\n        return _splash != null;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Startup.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Startup\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            x:Name=\"StartupWindow\" Title=\"{DynamicResource S.StartUp.Title}\" Height=\"220\" Width=\"500\"\n            MinWidth=\"500\" MinHeight=\"220\" DataContext=\"{StaticResource AppViewModel}\" UseLayoutRounding=\"True\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Initialized=\"Startup_Initialized\"\n            Loaded=\"Startup_Loaded\" Closing=\"Startup_Closing\">\n\n    <Window.InputBindings>\n        <KeyBinding Command=\"{Binding OpenRecorder}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" Modifiers=\"Control\" Key=\"N\"/>\n        <KeyBinding Command=\"{Binding OpenWebcamRecorder}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" Modifiers=\"Control\" Key=\"W\"/>\n        <KeyBinding Command=\"{Binding OpenBoardRecorder}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" Modifiers=\"Control\" Key=\"B\"/>\n        <KeyBinding Command=\"{Binding OpenEditor}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" Modifiers=\"Control\" Key=\"E\"/>\n        <KeyBinding Command=\"{Binding OpenOptions}\" Modifiers=\"Control+Alt\" Key=\"O\"/>\n    </Window.InputBindings>\n\n    <Window.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Update}\" CanExecute=\"Update_CanExecute\" Executed=\"Update_Executed\"/>\n    </Window.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"45\"/>\n            <RowDefinition />\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <TextBlock Grid.Column=\"0\" Text=\"ScreenToGif\" Margin=\"10\" FontSize=\"18\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Effect=\"{DynamicResource Shadow.Border.Small}\"/>\n\n            <TextBlock Grid.Column=\"1\" Name=\"UpdateTextBlock\" VerticalAlignment=\"Center\" Visibility=\"Hidden\" Effect=\"{StaticResource Shadow.Border.Small}\">\n                <Hyperlink Command=\"{StaticResource Command.Update}\" ToolTip=\"{DynamicResource S.StartUp.NewRelease.Tooltip}\" Cursor=\"Hand\">\n                    <Run Name=\"UpdateRun\" Text=\"{DynamicResource S.StartUp.NewRelease}\"/>\n                    <Run Text=\"•\"/>\n                    <Run Name=\"VersionRun\" Text=\"0.00\"/>\n                </Hyperlink>\n            </TextBlock>\n\n            <n:ExtendedButton Grid.Column=\"3\" Text=\"{DynamicResource S.StartUp.Options}\" Icon=\"{StaticResource Vector.Options}\" \n                              Margin=\"5\" Style=\"{StaticResource Style.Button.Horizontal}\" Effect=\"{StaticResource Shadow.Border.Small}\"\n                              Padding=\"2\" ContentWidth=\"25\" ContentHeight=\"25\" Command=\"{Binding OpenOptions}\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"0\" Text=\"{DynamicResource S.StartUp.Recorder}\" Margin=\"5,0,5,5\" FontSize=\"13\" Style=\"{StaticResource Style.Button.Vertical.Border}\"\n                              Effect=\"{StaticResource Shadow.Border.Tiny}\" ContentWidth=\"36\" ContentHeight=\"36\" Icon=\"{StaticResource Vector.Record.New}\" \n                              Command=\"{Binding OpenRecorder}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" \n                              ToolTip=\"{DynamicResource S.StartUp.Recorder.Tooltip}\" ToolTipService.Placement=\"Bottom\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" Text=\"{DynamicResource S.StartUp.Webcam}\" Margin=\"5,0,5,5\" FontSize=\"13\" Style=\"{StaticResource Style.Button.Vertical.Border}\"\n                              Effect=\"{StaticResource Shadow.Border.Tiny}\" ContentWidth=\"36\" ContentHeight=\"36\" Icon=\"{StaticResource Vector.Camera.New}\" \n                              Command=\"{Binding OpenWebcamRecorder}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" \n                              ToolTip=\"{DynamicResource S.StartUp.Webcam.Tooltip}\" ToolTipService.Placement=\"Bottom\"/>\n\n            <n:ExtendedButton Grid.Column=\"2\" Text=\"{DynamicResource S.StartUp.Board}\" Margin=\"5,0,5,5\" FontSize=\"13\" Style=\"{StaticResource Style.Button.Vertical.Border}\"\n                              Effect=\"{StaticResource Shadow.Border.Tiny}\" ContentWidth=\"36\" ContentHeight=\"36\" Icon=\"{StaticResource Vector.Board.New}\" \n                              Command=\"{Binding OpenBoardRecorder}\" CommandParameter=\"{Binding ElementName=StartupWindow}\"\n                              ToolTip=\"{DynamicResource S.StartUp.Board.Tooltip}\" ToolTipService.Placement=\"Bottom\"/>\n\n            <n:ExtendedButton Grid.Column=\"3\" Text=\"{DynamicResource S.StartUp.Editor}\" Margin=\"5,0,5,5\" FontSize=\"13\" Style=\"{StaticResource Style.Button.Vertical.Border}\"\n                              Effect=\"{StaticResource Shadow.Border.Tiny}\" ContentWidth=\"36\" ContentHeight=\"36\" Icon=\"{StaticResource Vector.Editor}\" \n                              Command=\"{Binding OpenEditor}\" CommandParameter=\"{Binding ElementName=StartupWindow}\" \n                              ToolTip=\"{DynamicResource S.StartUp.Editor.Tooltip}\" ToolTipService.Placement=\"Bottom\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Startup.xaml.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Input;\nusing Microsoft.Win32;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Startup : INotification\n{\n    public Startup()\n    {\n        InitializeComponent();\n    }\n\n    #region Events\n\n    private void Startup_Initialized(object sender, EventArgs e)\n    {\n        #region Adjust the position\n\n        //Tries to adjust the position/size of the window, centers on screen otherwise.\n        if (!UpdatePositioning())\n            WindowStartupLocation = WindowStartupLocation.CenterScreen;\n\n        #endregion\n    }\n\n    private void Startup_Loaded(object sender, RoutedEventArgs e)\n    {\n        SystemEvents.DisplaySettingsChanged += System_DisplaySettingsChanged;\n\n        #region Adjust the position\n\n        //Tries to adjust the position/size of the window, centers on screen otherwise.\n        if (!UpdatePositioning())\n            WindowStartupLocation = WindowStartupLocation.CenterScreen;\n\n        #endregion\n\n        NotificationUpdated();\n    }\n\n    private void Update_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = Global.UpdateAvailable != null;\n    }\n\n    private void Update_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        App.MainViewModel?.PromptUpdate.Execute(null);\n    }\n\n    private void System_DisplaySettingsChanged(object sender, EventArgs e)\n    {\n        UpdatePositioning(false);\n    }\n\n    private void Startup_Closing(object sender, CancelEventArgs e)\n    {\n        SystemEvents.DisplaySettingsChanged -= System_DisplaySettingsChanged;\n\n        //Manually get the position/size of the window, so it's possible opening multiple instances.\n        UserSettings.All.StartupTop = Top;\n        UserSettings.All.StartupLeft = Left;\n        UserSettings.All.StartupWidth = Width;\n        UserSettings.All.StartupHeight = Height;\n        UserSettings.All.StartupWindowState = WindowState;\n        UserSettings.Save();\n    }\n\n    #endregion\n\n    #region Methods\n\n    private bool UpdatePositioning(bool onLoad = true)\n    {\n        var top = onLoad ? UserSettings.All.StartupTop : Top;\n        var left = onLoad ? UserSettings.All.StartupLeft : Left;\n        var width = onLoad ? UserSettings.All.StartupWidth : Width;\n        var height = onLoad ? UserSettings.All.StartupHeight : Height;\n        var state = onLoad ? UserSettings.All.StartupWindowState : WindowState;\n\n        //If the position was never set, let it center on screen. \n        if (double.IsNaN(top) && double.IsNaN(left))\n            return false;\n\n        //The catch here is to get the closest monitor from current Top/Left point. \n        var monitors = MonitorHelper.AllMonitorsScaled(this.Scale());\n        var closest = monitors.FirstOrDefault(x => x.Bounds.Contains(new Point((int)left, (int)top))) ?? monitors.FirstOrDefault(x => x.IsPrimary);\n\n        if (closest == null)\n            return false;\n\n        //To much to the Left.\n        if (closest.WorkingArea.Left > left + width - 100)\n            left = closest.WorkingArea.Left;\n\n        //Too much to the top.\n        if (closest.WorkingArea.Top > top + height - 100)\n            top = closest.WorkingArea.Top;\n\n        //Too much to the right.\n        if (closest.WorkingArea.Right < left + 100)\n            left = closest.WorkingArea.Right - width;\n\n        //Too much to the bottom.\n        if (closest.WorkingArea.Bottom < top + 100)\n            top = closest.WorkingArea.Bottom - height;\n\n        if (top > int.MaxValue || top < int.MinValue || left > int.MaxValue || left < int.MinValue || width > int.MaxValue || width < 0 || height > int.MaxValue || height < 0)\n        {\n            var desc = $\"On load: {onLoad}\\nScale: {this.Scale()}\\n\\n\" +\n                       $\"Screen: {closest.AdapterName}\\nBounds: {closest.Bounds}\\n\\nTopLeft: {top}x{left}\\nWidthHeight: {width}x{height}\\n\\n\" +\n                       $\"TopLeft Settings: {UserSettings.All.StartupTop}x{UserSettings.All.StartupLeft}\\nWidthHeight Settings: {UserSettings.All.StartupWidth}x{UserSettings.All.StartupHeight}\";\n            LogWriter.Log(\"Wrong Startup window sizing\", desc);\n            return false;\n        }\n\n        Top = top;\n        Left = left;\n        Width = width;\n        Height = height;\n        WindowState = state;\n\n        return true;\n    }\n\n    public void NotificationUpdated()\n    {\n        if (Global.UpdateAvailable == null)\n        {\n            UpdateTextBlock.Visibility = Visibility.Collapsed;\n            return;\n        }\n\n        VersionRun.Text = Global.UpdateAvailable.Version.ToStringShort();\n        UpdateTextBlock.Visibility = Visibility.Visible;\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/TestField.xaml",
    "content": "<Window xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n        x:Class=\"ScreenToGif.Windows.Other.TestField\" x:Name=\"ThisWindow\"\n        Title=\"Window Test\" Height=\"350\" Width=\"450\" WindowStartupLocation=\"CenterScreen\" \n        SnapsToDevicePixels=\"True\" Loaded=\"WindowTest_OnLoaded\" LocationChanged=\"WindowTest_OnLocationChanged\" Closed=\"Window_Closed\">\n\n    <!--Background=\"{DynamicResource Panel.Background}\"-->\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n        </Grid.RowDefinitions>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition/>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition/>\n        </Grid.ColumnDefinitions>\n\n        <!--<n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Icon=\"{StaticResource Vector.Encoder.MostUsed}\" Text=\"Example\" ContentWidth=\"18\" ContentHeight=\"18\"/>\n        <n:ImageButton Grid.Row=\"0\" Grid.Column=\"1\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Content=\"{StaticResource Vector.Encoder.MostUsed}\" Text=\"Example\" ContentWidth=\"18\" ContentHeight=\"18\"/>-->\n\n        <!--<Grid Width=\"100\" Height=\"100\">\n            <Grid.Background>\n                <DrawingBrush>\n                    <DrawingBrush.Drawing>\n                        <DrawingGroup>\n                            <GeometryDrawing Brush=\"#ffa02821\" Geometry=\"M 32.719,28.660 C 34.942,25.666 36.088,22.036 36.088,18.021 C 36.088,8.069 28.009,0.000 18.044,0.000 C 8.079,0.000 0.000,8.069 0.000,18.021 C 0.000,27.974 8.079,36.043 18.044,36.043 C 21.186,36.043 23.893,35.532 26.464,34.120 L 26.584,33.909 L 20.450,34.000 L 20.450,28.354 L 26.344,28.354 L 26.344,22.467 L 32.719,22.467 L 32.719,28.660 Z\" />\n                            <GeometryDrawing Brush=\"#ff6da391\" Geometry=\"M 27.016,29.030 L 21.159,29.030 L 21.159,33.419 L 27.016,33.419 L 27.016,40.000 L 32.142,40.000 L 32.142,33.419 L 38.000,33.419 L 38.000,29.030 L 32.142,29.030 L 32.142,23.180 L 27.016,23.180 L 27.016,29.030 Z\" />\n                        </DrawingGroup>\n                    </DrawingBrush.Drawing>\n                </DrawingBrush>\n            </Grid.Background>\n        </Grid>-->\n\n        <!--<Grid Background=\"White\" Width=\"100\" Height=\"100\" Effect=\"{DynamicResource Shadow.Background}\"/>-->\n\n        <!--<Viewbox Grid.Row=\"0\" Child=\"{StaticResource Vector.Ok.Round}\"/>\n        <Viewbox Grid.Row=\"1\" Child=\"{StaticResource Vector.Cancel.Round}\"/>-->\n        <!--<n:NotificationBox x:Name=\"NotificationList\" Visibility=\"Visible\">\n            <n:NotificationBox.GroupStyle>\n                <GroupStyle>\n                    <GroupStyle.HeaderTemplate>\n                        <DataTemplate>\n                            <TextBlock FontSize=\"15\" FontWeight=\"Bold\" Text=\"{Binding Key}\"/>\n                        </DataTemplate>\n                    </GroupStyle.HeaderTemplate>\n                </GroupStyle>\n            </n:NotificationBox.GroupStyle>\n        </n:NotificationBox>-->\n    </Grid>\n</Window>"
  },
  {
    "path": "ScreenToGif/Windows/Other/TestField.xaml.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Interop;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class TestField : Window\n{\n    private IntPtr _handle;\n\n    public TestField()\n    {\n        InitializeComponent();\n    }\n\n    private void WindowTest_OnLoaded(object sender, RoutedEventArgs e)\n    {\n        _handle = new WindowInteropHelper(this).Handle;\n\n        //var adornerLayer = AdornerLayer.GetAdornerLayer(TestTriangle);\n        //var adorner = new ElementAdorner(TestTriangle, true, true, true, MainCanvas, OnChange);\n        //adorner.LayoutUpdated += (o, args) => Title = adorner.Width + \" \" + adorner.Height;\n        //adornerLayer.Add(adorner);\n    }\n\n    private void OnChange()\n    {}\n\n    private void WindowTest_OnLocationChanged(object sender, EventArgs e)\n    {\n        //Native.Rect rect;\n        //Native.GetWindowRect(_handle, out rect);\n\n        //LeftLabel2.Content = rect.Left;\n        //TopLabel2.Content = rect.Top;\n        //RightLabel2.Content = rect.Right - rect.Left;\n    }\n\n    private void RefreshButton_Click(object sender, RoutedEventArgs e)\n    {\n        //try\n        //{\n        //    ExamplePath.Data = Geometry.Parse(InputTextBox.Text);\n        //}\n        //catch (Exception ex)\n        //{\n        //    LogWriter.Log(ex, \"Geometry Parse error\", InputTextBox.Text);\n        //}\n    }\n\n\n    private void Window_Closed(object sender, EventArgs e)\n    {\n        Environment.Exit(1);\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/TextDialog.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.TextDialog\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Encoder.Command.Title}\" Height=\"300\" Width=\"500\" MinHeight=\"200\" MinWidth=\"350\"\n            SizeToContent=\"WidthAndHeight\" WindowStartupLocation=\"CenterScreen\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Margin=\"6\" Background=\"{StaticResource Vector.Text}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <Label x:Name=\"InstructionLabel\" Content=\"{DynamicResource S.Encoder.Command.Header}\" Margin=\"3\" Grid.Column=\"1\" VerticalContentAlignment=\"Center\" \n                   FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <n:ExtendedTextBox Grid.Row=\"1\" x:Name=\"CommandTextBox\" Margin=\"3\" FontFamily=\"Consolas\" IsReadOnly=\"True\" ScrollViewer.CanContentScroll=\"True\" VerticalScrollBarVisibility=\"Auto\"/>\n        <n:ExtendedTextBox Grid.Row=\"2\" x:Name=\"OutputTextBox\" Margin=\"3\" FontFamily=\"Consolas\" IsReadOnly=\"True\" ScrollViewer.CanContentScroll=\"True\" VerticalScrollBarVisibility=\"Auto\" TextWrapping=\"Wrap\"/>\n\n        <Grid Grid.Row=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/TextDialog.xaml.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class TextDialog\n{\n    public string Command { get; set; }\n    public string Output { get; set; }\n\n    public TextDialog()\n    {\n        InitializeComponent();\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        CommandTextBox.Text = Command;\n        OutputTextBox.Text = Output;\n\n        CommandTextBox.Focus();\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Troubleshoot.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Troubleshoot\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            Title=\"{DynamicResource S.Troubleshoot.Title}\" Height=\"450\" Width=\"800\" MinHeight=\"350\" MinWidth=\"700\"\n            Icon=\"/ScreenToGif;component/Resources/Logo.ico\" WindowStartupLocation=\"CenterScreen\"\n            Loaded=\"Window_Loaded\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition MinHeight=\"35\" Height=\"Auto\" MaxHeight=\"70\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition Width=\"1*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" Margin=\"6\" Background=\"{StaticResource Vector.Warning}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeLabel\" Text=\"{DynamicResource S.Troubleshoot.Windows}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <TextBlock Grid.Column=\"2\" Text=\"{DynamicResource S.Troubleshoot.Windows.Info}\" FontSize=\"12\" Foreground=\"{DynamicResource Element.Foreground.Header}\" \n                       TextAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"3\" TextWrapping=\"Wrap\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedRadioButton Grid.Column=\"0\" x:Name=\"NowRadioButton\" Text=\"{DynamicResource S.Troubleshoot.Windows.Current}\" TextWrapping=\"Wrap\" Checked=\"KindRadioButton_Checked\"/>\n            <n:ExtendedRadioButton Grid.Column=\"1\" x:Name=\"LaterRadioButton\" Text=\"{DynamicResource S.Troubleshoot.Windows.Next}\" TextWrapping=\"Wrap\" Checked=\"KindRadioButton_Checked\"/>\n        </Grid>\n\n        <Viewbox Grid.Row=\"2\" Stretch=\"Uniform\" StretchDirection=\"Both\" Margin=\"3\" VerticalAlignment=\"Center\">\n            <Canvas x:Name=\"MainCanvas\" SizeChanged=\"MainCanvas_SizeChanged\"/>\n        </Viewbox>\n        \n        <Grid Grid.Row=\"3\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n            \n            <TextBlock Grid.Column=\"0\" x:Name=\"CurrentTextBlock\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"3\" FontSize=\"14\">\n                <Hyperlink Click=\"HyperlinkMove_Click\">\n                    <Run x:Name=\"Recorder1Run\" Text=\"{DynamicResource S.Troubleshoot.Windows.BringBack}\"/>\n                </Hyperlink>\n            </TextBlock>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"NextTextBlock\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"3\" FontSize=\"14\">\n                <Hyperlink Click=\"HyperlinkReset_Click\">\n                    <Run x:Name=\"Recorder2Run\" Text=\"{DynamicResource S.Troubleshoot.Windows.Reset}\"/>\n                </Hyperlink>\n            </TextBlock>\n        </Grid>\n\n        <Grid Grid.Row=\"4\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"110\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Troubleshoot.xaml.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing System.Windows.Shapes;\nusing Microsoft.Win32;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Troubleshoot\n{\n    private double _minLeft = SystemParameters.VirtualScreenLeft;\n    private double _minTop = SystemParameters.VirtualScreenTop;\n    private double _maxRight = SystemParameters.VirtualScreenWidth;\n    private double _maxBottom = SystemParameters.VirtualScreenHeight;\n\n    public Troubleshoot()\n    {\n        InitializeComponent();\n\n        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (Application.Current.Windows.OfType<Window>().Any(a => a.GetType() != typeof(Troubleshoot)))\n            NowRadioButton.IsChecked = true;\n        else\n            LaterRadioButton.IsChecked = true;\n    }\n\n    private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) => DetectMonitors();\n\n    private void MainCanvas_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        SetViewPort(_minLeft, _maxRight, _minTop, _maxBottom);\n    }\n\n    private void KindRadioButton_Checked(object sender, RoutedEventArgs e) => DetectMonitors();\n\n    private void HyperlinkMove_Click(object sender, RoutedEventArgs e)\n    {\n        var monitor = MonitorHelper.AllMonitorsGranular().FirstOrDefault(f => f.IsPrimary);\n\n        if (monitor == null)\n            return;\n\n        //Move all windows to the main monitor.\n        foreach (var window in Application.Current.Windows.OfType<Window>().Where(w => w.GetType() != typeof(Troubleshoot) && w.GetType() != typeof(RegionSelection)).OrderBy(o => o.Width).ThenBy(o => o.Height))\n        {\n            //Pause any active recording...\n            if (window is NewRecorder newRecorder)\n            {\n                if (newRecorder.Stage == RecorderStages.Recording && newRecorder.Project?.Any == true)\n                    newRecorder.Pause();\n\n                newRecorder.MoveToMainScreen();\n                continue;\n            }\n\n            if (window is Recorder recorder)\n            {\n                if (recorder.Stage == RecorderStages.Recording && recorder.Project?.Any == true)\n                    recorder.Pause();\n            }\n\n            var diff = window.Scale() / monitor.Scale;\n            var top = window.Top / diff;\n            var left = window.Left / diff;\n            var width = window.ActualWidth;\n            var height = window.ActualHeight;\n\n            if (monitor.NativeBounds.Top > top)\n                top = monitor.NativeBounds.Top;\n\n            if (monitor.NativeBounds.Left > left)\n                left = monitor.NativeBounds.Left;\n\n            if (monitor.NativeBounds.Bottom < top + height)\n                top = monitor.NativeBounds.Bottom - height;\n\n            if (monitor.NativeBounds.Right < left + width)\n                left = monitor.NativeBounds.Right - width;\n\n            window.MoveToScreen(monitor);\n\n            window.WindowState = WindowState.Normal;\n            window.Left = monitor.NativeBounds.Left + 1;\n            window.Top = monitor.NativeBounds.Top + 1;\n\n            window.Left = left;\n            window.Top = top;\n        }\n\n        DetectMonitors();\n    }\n\n    private void HyperlinkReset_Click(object sender, RoutedEventArgs e)\n    {\n        UserSettings.All.RecorderTop = double.NaN;\n        UserSettings.All.RecorderLeft = double.NaN;\n        UserSettings.All.RecorderWidth = 518;\n        UserSettings.All.RecorderHeight = 269;\n\n        UserSettings.All.SelectedRegion = Rect.Empty;\n\n        UserSettings.All.EditorTop = double.NaN;\n        UserSettings.All.EditorLeft = double.NaN;\n        UserSettings.All.EditorWidth = double.NaN;\n        UserSettings.All.EditorHeight = double.NaN;\n        UserSettings.All.EditorWindowState = WindowState.Normal;\n\n        UserSettings.All.StartupTop = double.NaN;\n        UserSettings.All.StartupLeft = double.NaN;\n        UserSettings.All.StartupWidth = double.NaN;\n        UserSettings.All.StartupHeight = double.NaN;\n        UserSettings.All.StartupWindowState = WindowState.Normal;\n\n        //Move currently open windows to the main monitor?\n\n        DetectMonitors();\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n\n    private void DetectMonitors()\n    {\n        var monitors = MonitorHelper.AllMonitorsGranular();\n        _minLeft = monitors.Min(m => m.NativeBounds.Left);\n        _minTop = monitors.Min(m => m.NativeBounds.Top);\n        _maxRight = monitors.Max(m => m.NativeBounds.Right);\n        _maxBottom = monitors.Max(m => m.NativeBounds.Bottom);\n\n        MainCanvas.Children.Clear();\n\n        if (NowRadioButton.IsChecked == true)\n        {\n            foreach (var window in Application.Current.Windows.OfType<Window>().Where(w => w.GetType() != typeof(Troubleshoot) && w.IsVisible).OrderBy(o => o.Width).ThenBy(o => o.Height))\n            {\n                var scale = window.Scale();\n\n                var top = window.Top * scale;\n                var left = window.Left * scale;\n                var width = window.ActualWidth * scale;\n                var height = window.ActualHeight * scale;\n                var title = window.Title.Remove(\"ScreenToGif - \");\n\n                if (window is Recorder or NewRecorder or RegionSelection)\n                    title = LocalizationHelper.Get(\"S.StartUp.Recorder\");\n                    \n                _minLeft = Math.Min(_minLeft, left);\n                _minTop = Math.Min(_minTop, top);\n                _maxRight = Math.Max(_maxRight, left + width);\n                _maxBottom = Math.Max(_maxBottom, top + height);\n\n                var rect = new Border\n                {\n                    BorderBrush = TryFindResource(\"Element.Border.Required\") as SolidColorBrush ?? Brushes.DarkBlue,\n                    BorderThickness = new Thickness(3),\n                    Background = TryFindResource(\"Panel.Background.Level3\") as SolidColorBrush ?? Brushes.WhiteSmoke,\n                    Width = width,\n                    Height = height,\n                    Tag = \"C\",\n                    Child = new Viewbox\n                    {\n                        Child = new TextBlock\n                        {\n                            VerticalAlignment = VerticalAlignment.Center,\n                            Padding = new Thickness(2),\n                            Text = title,\n                            Foreground = TryFindResource(\"Element.Foreground\") as SolidColorBrush ?? Brushes.Black,\n                        }\n                    }\n                };\n\n                MainCanvas.Children.Add(rect);\n\n                Canvas.SetLeft(rect, left);\n                Canvas.SetTop(rect, top);\n                Panel.SetZIndex(rect, MainCanvas.Children.Count + 1);\n            }\n        }\n        else\n        {\n            #region Recorder position\n\n            if (!double.IsNaN(UserSettings.All.RecorderTop) && !double.IsNaN(UserSettings.All.RecorderLeft))\n            {\n                _minLeft = Math.Min(_minLeft, UserSettings.All.RecorderLeft);\n                _minTop = Math.Min(_minTop, UserSettings.All.RecorderTop);\n                _maxRight = Math.Max(_maxRight, UserSettings.All.RecorderLeft + UserSettings.All.RecorderWidth);\n                _maxBottom = Math.Max(_maxBottom, UserSettings.All.RecorderTop + UserSettings.All.RecorderHeight);\n\n                var rect = new Border\n                {\n                    BorderBrush = new SolidColorBrush(Colors.DarkBlue),\n                    BorderThickness = new Thickness(3),\n                    Background = new SolidColorBrush(Colors.WhiteSmoke),\n                    Width = UserSettings.All.RecorderWidth,\n                    Height = UserSettings.All.RecorderHeight,\n                    Tag = \"N\",\n                    Child = new Viewbox\n                    {\n                        Child = new TextBlock\n                        {\n                            VerticalAlignment = VerticalAlignment.Center,\n                            Padding = new Thickness(2),\n                            Text = LocalizationHelper.Get(\"S.StartUp.Recorder\")\n                        }\n                    }\n                };\n\n                MainCanvas.Children.Add(rect);\n\n                Canvas.SetLeft(rect, UserSettings.All.RecorderLeft);\n                Canvas.SetTop(rect, UserSettings.All.RecorderTop);\n            }\n\n            if (!UserSettings.All.SelectedRegion.IsEmpty)\n            {\n                _minLeft = Math.Min(_minLeft, UserSettings.All.SelectedRegion.Left + SystemParameters.VirtualScreenLeft);\n                _minTop = Math.Min(_minTop, UserSettings.All.SelectedRegion.Top + SystemParameters.VirtualScreenTop);\n                _maxRight = Math.Max(_maxRight, UserSettings.All.SelectedRegion.Right + SystemParameters.VirtualScreenLeft);\n                _maxBottom = Math.Max(_maxBottom, UserSettings.All.SelectedRegion.Bottom + SystemParameters.VirtualScreenTop);\n\n                var rect = new Border\n                {\n                    BorderBrush = TryFindResource(\"Element.Border.Required\") as SolidColorBrush ?? Brushes.DarkBlue,\n                    BorderThickness = new Thickness(3),\n                    Background = TryFindResource(\"Panel.Background.Level3\") as SolidColorBrush ?? Brushes.WhiteSmoke,\n                    Width = UserSettings.All.SelectedRegion.Width,\n                    Height = UserSettings.All.SelectedRegion.Height,\n                    Tag = \"N\",\n                    Child = new Viewbox\n                    {\n                        Child = new TextBlock\n                        {\n                            VerticalAlignment = VerticalAlignment.Center,\n                            Padding = new Thickness(2),\n                            Text = LocalizationHelper.Get(\"S.StartUp.Recorder\") + \" 2\",\n                            Foreground = TryFindResource(\"Element.Foreground\") as SolidColorBrush ?? Brushes.Black,\n                        }\n                    }\n                };\n\n                MainCanvas.Children.Add(rect);\n\n                Canvas.SetLeft(rect, UserSettings.All.SelectedRegion.Left + SystemParameters.VirtualScreenLeft);\n                Canvas.SetTop(rect, UserSettings.All.SelectedRegion.Top + SystemParameters.VirtualScreenTop);\n            }\n\n            #endregion\n\n            if (!double.IsNaN(UserSettings.All.EditorTop) && !double.IsNaN(UserSettings.All.EditorLeft))\n            {\n                _minLeft = Math.Min(_minLeft, UserSettings.All.EditorLeft);\n                _minTop = Math.Min(_minTop, UserSettings.All.EditorTop);\n                _maxRight = Math.Max(_maxRight, UserSettings.All.EditorLeft + UserSettings.All.EditorWidth);\n                _maxBottom = Math.Max(_maxBottom, UserSettings.All.EditorTop + UserSettings.All.EditorHeight);\n\n                var rect = new Border\n                {\n                    BorderBrush = TryFindResource(\"Element.Border.Required\") as SolidColorBrush ?? Brushes.DarkBlue,\n                    BorderThickness = new Thickness(3),\n                    Background = TryFindResource(\"Panel.Background.Level3\") as SolidColorBrush ?? Brushes.WhiteSmoke,\n                    Width = UserSettings.All.EditorWidth,\n                    Height = UserSettings.All.EditorHeight,\n                    Tag = \"N\",\n                    Child = new Viewbox\n                    {\n                        Child = new TextBlock\n                        {\n                            VerticalAlignment = VerticalAlignment.Center,\n                            Padding = new Thickness(2),\n                            Text = LocalizationHelper.Get(\"S.StartUp.Editor\"),\n                            Foreground = TryFindResource(\"Element.Foreground\") as SolidColorBrush ?? Brushes.Black,\n                        }\n                    }\n                };\n\n                MainCanvas.Children.Add(rect);\n\n                Canvas.SetLeft(rect, UserSettings.All.EditorLeft);\n                Canvas.SetTop(rect, UserSettings.All.EditorTop);\n            }\n\n            if (!double.IsNaN(UserSettings.All.StartupTop) && !double.IsNaN(UserSettings.All.StartupLeft))\n            {\n                _minLeft = Math.Min(_minLeft, UserSettings.All.StartupLeft);\n                _minTop = Math.Min(_minTop, UserSettings.All.StartupTop);\n                _maxRight = Math.Max(_maxRight, UserSettings.All.StartupLeft + UserSettings.All.StartupWidth);\n                _maxBottom = Math.Max(_maxBottom, UserSettings.All.StartupTop + UserSettings.All.StartupHeight);\n\n                var rect = new Border\n                {\n                    BorderBrush = TryFindResource(\"Element.Border.Required\") as SolidColorBrush ?? Brushes.DarkBlue,\n                    BorderThickness = new Thickness(3),\n                    Background = TryFindResource(\"Panel.Background.Level3\") as SolidColorBrush ?? Brushes.WhiteSmoke,\n                    Width = UserSettings.All.StartupWidth,\n                    Height = UserSettings.All.StartupHeight,\n                    Tag = \"N\",\n                    Child = new Viewbox\n                    {\n                        Child = new TextBlock\n                        {\n                            VerticalAlignment = VerticalAlignment.Center,\n                            Padding = new Thickness(2),\n                            Text = (LocalizationHelper.Get(\"S.StartUp.Title\") ?? \"\").Remove(\"ScreenToGif - \"),\n                            Foreground = TryFindResource(\"Element.Foreground\") as SolidColorBrush ?? Brushes.Black,\n                        }\n                    }\n                };\n\n                MainCanvas.Children.Add(rect);\n\n                Canvas.SetLeft(rect, UserSettings.All.StartupLeft);\n                Canvas.SetTop(rect, UserSettings.All.StartupTop);\n            }\n\n            var index = 1;\n            foreach (var border in MainCanvas.Children.OfType<Border>().OrderBy(o => o.ActualWidth).ThenBy(t => t.ActualHeight))\n                Panel.SetZIndex(border, index++);\n        }\n\n        CurrentTextBlock.IsEnabled = MainCanvas.Children.OfType<Border>().Count(c => (string)c.Tag == \"C\") > 0;\n        NextTextBlock.IsEnabled = MainCanvas.Children.OfType<Border>().Count(c => (string) c.Tag == \"N\") > 0;\n            \n        foreach (var monitor in monitors)\n        {\n            var rect = new Rectangle\n            {\n                Width = monitor.NativeBounds.Width,\n                Height = monitor.NativeBounds.Height,\n                StrokeThickness = 6\n            };\n            rect.SetResourceReference(Shape.StrokeProperty, \"Element.Foreground\");\n            rect.SetResourceReference(Shape.FillProperty, monitor.IsPrimary ? \"Element.Background.Checked\" : \"Element.Background.Hover\");\n\n            MainCanvas.Children.Add(rect);\n\n            Canvas.SetLeft(rect, monitor.NativeBounds.Left);\n            Canvas.SetTop(rect, monitor.NativeBounds.Top);\n            Panel.SetZIndex(rect, 1);\n        }\n\n        MainCanvas.Width = Math.Abs(_minLeft) + Math.Abs(_maxRight);\n        MainCanvas.Height = Math.Abs(_minTop) + Math.Abs(_maxBottom);\n\n        SetViewPort(_minLeft, _maxRight, _minTop, _maxBottom);\n    }\n\n    private void SetViewPort(double minX, double maxX, double minY, double maxY)\n    {\n        var width = maxX - minX;\n        var height = maxY - minY;\n\n        var group = new TransformGroup();\n        group.Children.Add(new TranslateTransform(-minX, -minY));\n        group.Children.Add(new ScaleTransform(MainCanvas.ActualWidth / width, MainCanvas.ActualHeight / height));\n        MainCanvas.RenderTransform = group;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/Upload.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.Upload\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n            xmlns:u=\"clr-namespace:ScreenToGif.Util\"\n            xmlns:p=\"clr-namespace:ScreenToGif.ViewModel.UploadPresets;assembly=ScreenToGif.ViewModel\"\n            xmlns:i=\"clr-namespace:ScreenToGif.ViewModel.UploadPresets.Imgur;assembly=ScreenToGif.ViewModel\"\n            xmlns:y=\"clr-namespace:ScreenToGif.ViewModel.UploadPresets.Yandex;assembly=ScreenToGif.ViewModel\"\n            Title=\"{DynamicResource S.Options.Upload.Preset.Title}\" Width=\"400\" Height=\"500\" MinWidth=\"380\" MinHeight=\"300\"\n            WindowStartupLocation=\"CenterScreen\" SnapsToDevicePixels=\"True\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\"\n            Loaded=\"Window_Loaded\">\n\n    <n:ExWindow.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Ok}\" CanExecute=\"Ok_CanExecute\" Executed=\"Ok_Executed\"/>\n    </n:ExWindow.CommandBindings>\n\n    <n:ExWindow.Resources>\n        <c:KeyToResource x:Key=\"StringToStaticResource\"/>\n        <c:NullToVisibility x:Key=\"NullToVisibility\"/>\n        <u:ComboBoxItemTemplateSelector x:Key=\"ItemSelector\"/>\n    </n:ExWindow.Resources>\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"35\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" x:Name=\"MainBorder\" Margin=\"6\" Background=\"{StaticResource Vector.Add}\" Width=\"23\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeTextBlock\" Text=\"{DynamicResource S.Add}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <ComboBox Grid.Column=\"2\" x:Name=\"TypeComboBox\" Margin=\"5,3\" SelectedIndex=\"0\" ItemTemplateSelector=\"{StaticResource ItemSelector}\" SelectionChanged=\"TypeComboBox_Selected\">\n                <ComboBox.ItemContainerStyle>\n                    <Style TargetType=\"ComboBoxItem\">\n                        <Style.Triggers>\n                            <DataTrigger Binding=\"{Binding Tag}\" Value=\"False\">\n                                <Setter Property=\"Visibility\" Value=\"Collapsed\"/>\n                                <Setter Property=\"IsEnabled\" Value=\"False\"/>\n                            </DataTrigger>\n                        </Style.Triggers>\n                    </Style>\n                </ComboBox.ItemContainerStyle>\n                \n                <u:ComboBoxItemTemplateSelector.SelectedTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"30\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Column=\"0\" Background=\"{Binding ImageId, Converter={StaticResource StringToStaticResource}}\" Width=\"14\" Height=\"14\" Margin=\"3,2,6,2\"/>\n\n                            <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"0\"/>\n                            <TextBlock Grid.Column=\"2\" Text=\"{Binding TypeName}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n                        </Grid>\n                    </DataTemplate>\n                </u:ComboBoxItemTemplateSelector.SelectedTemplate>\n\n                <u:ComboBoxItemTemplateSelector.DropDownTemplate>\n                    <DataTemplate>\n                        <Grid>\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"30\"/>\n                                <ColumnDefinition Width=\"1\"/>\n                                <ColumnDefinition/>\n                            </Grid.ColumnDefinitions>\n\n                            <Border Grid.Column=\"0\" Background=\"{Binding ImageId, Converter={StaticResource StringToStaticResource}}\" Width=\"20\" Height=\"20\" Margin=\"3,3,6,3\"/>\n\n                            <Separator Grid.Column=\"1\" Width=\"1\" Margin=\"0\"/>\n                            <TextBlock Grid.Column=\"2\" Text=\"{Binding TypeName}\" Margin=\"10,0,2,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"/>\n                        </Grid>\n                    </DataTemplate>\n                </u:ComboBoxItemTemplateSelector.DropDownTemplate>\n\n                <p:UploadPreset ImageId=\"Vector.Info\"/>\n                <i:ImgurPreset x:Name=\"ImgurPresetItem\" ImageId=\"Vector.Imgur\"/>\n                <y:YandexPreset x:Name=\"YandexPresetItem\" ImageId=\"Vector.YandexDisk\"/>\n            </ComboBox>\n        </Grid>\n\n        <ScrollViewer Grid.Row=\"1\" VerticalScrollBarVisibility=\"Auto\">\n            <ContentControl x:Name=\"MainPresenter\" Focusable=\"False\"/>\n        </ScrollViewer>\n\n        <TextBlock Grid.Row=\"1\" FontSize=\"20\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" TextAlignment=\"Center\" TextWrapping=\"Wrap\"\n                   Foreground=\"{DynamicResource Element.Foreground.Gray192}\" FontFamily=\"{DynamicResource FontFamilyLight}\" Effect=\"{StaticResource Shadow.Background.Tiny}\"\n                   Visibility=\"{Binding ElementName=MainPresenter, Path=Content, Converter={StaticResource NullToVisibility}}\">\n            <Run Text=\"▲\"/>\n            <LineBreak/>\n            <Run Text=\"{DynamicResource S.Options.Upload.Preset.Select.Info}\"/>\n            <Run x:Name=\"FilterRun\"/>\n        </TextBlock>\n\n        <Grid Grid.Row=\"2\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedCheckBox Grid.Column=\"0\" x:Name=\"EnabledCheckBox\" Text=\"{DynamicResource S.Options.Upload.Preset.Enable}\" Margin=\"5,3\" Visibility=\"Collapsed\"\n                                IsChecked=\"{Binding ElementName=MainPresenter, Path=Content.DataContext.IsEnabled, FallbackValue=True}\"/>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" ContentHeight=\"18\" ContentWidth=\"18\" \n                              Padding=\"4,0\" Margin=\"5\" Command=\"{StaticResource Command.Ok}\"/>\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"CancelButton\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\" ContentHeight=\"18\" ContentWidth=\"18\" \n                              Padding=\"4,0\" Margin=\"5\" Click=\"CancelButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/Upload.xaml.cs",
    "content": "using System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.UserControls;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.ViewModel.UploadPresets.Imgur;\nusing ScreenToGif.ViewModel.UploadPresets.Yandex;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class Upload\n{\n    public UploadPreset CurrentPreset { get; set; }\n\n    public bool IsEditing { get; set; }\n\n    public ExportFormats? Type { get; set; }\n\n    public Upload()\n    {\n        InitializeComponent();\n    }\n\n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        if (IsEditing)\n        {\n            MainBorder.Background = TryFindResource(\"Vector.Pen\") as Brush;\n            TypeTextBlock.Text = LocalizationHelper.Get(\"S.Edit\");\n            TypeComboBox.SelectedIndex = (int)(CurrentPreset?.Type ?? UploadDestinations.NotDefined);\n            TypeComboBox.IsEnabled = false;\n            EnabledCheckBox.Visibility = Visibility.Visible;\n\n            TypeComboBox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n        }\n        else\n        {\n            //If the file type is set, only display services that supports upload for that.\n            if (Type.HasValue)\n            {\n                FilterRun.Text = $\"\\n(*.{Type.ToString().ToLower()})\";\n\n                if (!ImgurPresetItem.AllowedTypes.Contains(Type.Value))\n                    TypeComboBox.Items.Remove(ImgurPresetItem);\n            }\n\n            TypeComboBox.Focus();\n        }\n    }\n\n    private void TypeComboBox_Selected(object sender, RoutedEventArgs e)\n    {\n        if (!IsLoaded)\n            return;\n\n        if (TypeComboBox.SelectedIndex < 1)\n        {\n            MainPresenter.Content = null;\n            return;\n        }\n\n        if (!IsEditing)\n        {\n            //Create a new model.\n            switch ((UploadDestinations)TypeComboBox.SelectedIndex)\n            {\n                case UploadDestinations.Imgur:\n                    CurrentPreset = new ImgurPreset();\n                    break;\n                case UploadDestinations.Yandex:\n                    CurrentPreset = new YandexPreset();\n                    break;\n            }\n        }\n\n        switch ((UploadDestinations)TypeComboBox.SelectedIndex)\n        {\n            case UploadDestinations.Imgur:\n                MainPresenter.Content = new ImgurPanel { DataContext = CurrentPreset };\n                break;\n            case UploadDestinations.Yandex:\n                MainPresenter.Content = new YandexPanel { DataContext = CurrentPreset };\n                break;\n        }\n    }\n\n    private void Ok_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = IsLoaded && TypeComboBox.SelectedIndex > 0;\n    }\n\n    private async void Ok_Executed(object sender, RoutedEventArgs e)\n    {\n        OkButton.Focus();\n\n        if (MainPresenter.Content is not IPanel panel || !await panel.IsValid())\n            return;\n\n        DialogResult = true;\n    }\n\n    private void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/UploadHistory.xaml",
    "content": "<n:ExWindow x:Class=\"ScreenToGif.Windows.Other.UploadHistory\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:gl=\"clr-namespace:System.Globalization;assembly=mscorlib\"\n            Title=\"{DynamicResource S.Options.Upload.History.Title}\" Width=\"600\" Height=\"350\" MinWidth=\"500\" MinHeight=\"300\"\n            WindowStartupLocation=\"CenterScreen\" SnapsToDevicePixels=\"True\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\" Loaded=\"Window_Loaded\">\n\n    <n:ExWindow.Resources>\n        <Style TargetType=\"{x:Type FlowDocument}\">\n            <Setter Property=\"Foreground\" Value=\"{DynamicResource Element.Foreground.Medium}\"/>\n            <Setter Property=\"ColumnGap\" Value=\"0\"/>\n        </Style>\n\n        <Style TargetType=\"{x:Type Hyperlink}\">\n            <Setter Property=\"Foreground\" Value=\"{DynamicResource Brush.Hyperlink}\"/>\n        </Style>\n    </n:ExWindow.Resources>\n    \n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"35\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" x:Name=\"MainBorder\" Margin=\"6\" Background=\"{StaticResource Vector.Clock}\" Width=\"23\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" x:Name=\"TypeTextBlock\" Text=\"{DynamicResource S.Options.Upload.History.Title}\" Margin=\"5\" VerticalAlignment=\"Center\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" FontSize=\"18\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n        </Grid>\n\n        <DataGrid Grid.Row=\"1\" Grid.Column=\"0\" x:Name=\"DataGrid\" Margin=\"5,3\" MinHeight=\"60\" SelectionMode=\"Single\" SelectionUnit=\"FullRow\" CanUserSortColumns=\"False\"\n                  SelectionChanged=\"DataGrid_SelectionChanged\" PreviewKeyDown=\"DataGrid_PreviewKeyDown\">\n            <DataGrid.Columns>\n                <DataGridTextColumn Header=\"{DynamicResource S.Options.Upload.History.Date}\" Width=\"Auto\" MinWidth=\"110\" IsReadOnly=\"True\" \n                                    Binding=\"{Binding DateInLocalTime, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, StringFormat='{}{0:G}', ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}\"/>\n                <DataGridTextColumn Header=\"{DynamicResource S.Options.Upload.Presets.Service}\" Width=\"Auto\" MinWidth=\"110\" IsReadOnly=\"True\" \n                                    Binding=\"{Binding Type, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}\"/>\n                <DataGridTextColumn Header=\"{DynamicResource S.Options.Upload.History.Preset}\" Width=\"*\" IsReadOnly=\"True\" \n                                    Binding=\"{Binding PresetName, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}\"/>\n                <DataGridCheckBoxColumn Header=\"{DynamicResource S.Options.Upload.History.Successful}\" Width=\"Auto\" MinWidth=\"70\" IsReadOnly=\"True\" \n                                        Binding=\"{Binding WasSuccessful, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}\"/>\n\n                <DataGridTemplateColumn Width=\"35\">\n                    <DataGridTemplateColumn.CellTemplate>\n                        <DataTemplate>\n                            <n:ExtendedButton x:Name=\"DeleteButton\" Style=\"{StaticResource Style.Button.NoText}\" Icon=\"{StaticResource Vector.Cancel}\" ContentHeight=\"13\" ContentWidth=\"16\"\n                                              ToolTip=\"{DynamicResource S.Options.Upload.History.Remove}\" Click=\"DeleteButton_Click\"/>\n                        </DataTemplate>\n                    </DataGridTemplateColumn.CellTemplate>\n                </DataGridTemplateColumn>\n            </DataGrid.Columns>\n        </DataGrid>\n\n        <FlowDocumentScrollViewer Grid.Row=\"2\" x:Name=\"FlowDocumentViewer\" Margin=\"5,3\" VerticalScrollBarVisibility=\"Auto\" MinHeight=\"23\" Padding=\"0\"\n                                  BorderThickness=\"1\" BorderBrush=\"{DynamicResource Element.Border}\"\n                                  Visibility=\"{Binding ElementName=DataGrid, Path=SelectedItem, Converter={StaticResource ContentToVisibility}}\"/>\n\n        <Grid Grid.Row=\"3\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\" MinWidth=\"100\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OkButton\" Text=\"{DynamicResource S.Ok}\" Icon=\"{StaticResource Vector.Ok}\" ContentHeight=\"18\" ContentWidth=\"18\" \n                              Padding=\"4,0\" Margin=\"5\" Click=\"OkButton_Click\" IsCancel=\"True\"/>\n        </Grid>\n    </Grid>\n</n:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/UploadHistory.xaml.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel.UploadPresets;\nusing ScreenToGif.ViewModel.UploadPresets.History;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class UploadHistory\n{\n    public UploadPreset CurrentPreset { get; set; }\n\n\n    public UploadHistory()\n    {\n        InitializeComponent();\n    }\n    \n    private void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        DataGrid.ItemsSource = CurrentPreset?.History;\n        DataGrid.SelectedIndex = 0;\n\n        DataGrid.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));\n    }\n\n    private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)\n    {\n        if (e.Key == Key.Delete)\n        {\n            if (DataGrid.SelectedItem is not History selected)\n                return;\n\n            Delete(selected);\n            e.Handled = true;\n        }\n    }\n\n    private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        FlowDocumentViewer.Document = (DataGrid.SelectedItem as History)?.Content;\n    }\n\n    private void DeleteButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (sender is not FrameworkElement element || element.DataContext is not History history)\n            return;\n\n        Delete(history);\n    }\n\n    private void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n\n    private void Delete(History history)\n    {\n        if (!Dialog.Ask(Title, LocalizationHelper.Get(\"S.Options.Upload.History.Delete.Instruction\"), LocalizationHelper.Get(\"S.Options.Upload.History.Delete.Message\")))\n            return;\n\n        CurrentPreset?.History.Remove(history);\n        DataGrid.ItemsSource = null;\n        DataGrid.ItemsSource = CurrentPreset?.History;\n        DataGrid.SelectedIndex = 0;\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Other/VideoSource.xaml",
    "content": "<c:ExWindow x:Class=\"ScreenToGif.Windows.Other.VideoSource\"\n            xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n            xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n            xmlns:c=\"clr-namespace:ScreenToGif.Controls\"\n            xmlns:v=\"clr-namespace:ScreenToGif.ViewModel;assembly=ScreenToGif.ViewModel\"\n            Title=\"{DynamicResource S.ImportVideo.Title}\" Height=\"500\" Width=\"800\" MinHeight=\"400\" MinWidth=\"500\"\n            SnapsToDevicePixels=\"True\" UseLayoutRounding=\"True\" Icon=\"/ScreenToGif;component/Resources/Logo.ico\" WindowStartupLocation=\"CenterOwner\" \n            Background=\"{DynamicResource Panel.Background}\" Loaded=\"Window_Loaded\" Closing=\"Window_Closing\">\n\n    <c:ExWindow.DataContext>\n        <v:VideoSourceViewModel/>\n    </c:ExWindow.DataContext>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"40\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"40\"/>\n        </Grid.RowDefinitions>\n\n        <Grid Grid.Row=\"0\" Background=\"{DynamicResource Panel.Background.Level4}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"40\"/>\n                <ColumnDefinition/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Border Grid.Column=\"0\" x:Name=\"IconViewBox\" Margin=\"6\" Background=\"{StaticResource Vector.FramesFromVideo}\" Opacity=\"{DynamicResource Element.Opacity}\"/>\n\n            <TextBlock Grid.Column=\"1\" Text=\"{DynamicResource S.ImportVideo.Title}\" Margin=\"5\" VerticalAlignment=\"Center\" Padding=\"2\" FontSize=\"18\" \n                       FontFamily=\"{DynamicResource FontFamilyLight}\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n            <TextBlock Grid.Column=\"2\" Text=\"{DynamicResource S.ImportVideo.Importer}\" FontSize=\"13\" Foreground=\"{DynamicResource Element.Foreground.Header}\" \n                       TextAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n\n            <ComboBox Grid.Column=\"3\" x:Name=\"ImporterComboBox\" Margin=\"5,3\" Height=\"23\" MinWidth=\"100\" SelectedIndex=\"{Binding VideoImporter, Mode=TwoWay}\"\n                      IsEnabled=\"{Binding AreControlsEnabled, Mode=OneWay}\">\n                <TextBlock Text=\"MediaPlayer\"/>\n                <TextBlock Text=\"FFmpeg\"/>\n            </ComboBox>\n        </Grid>\n\n        <c:StatusBand Grid.Row=\"1\" x:Name=\"StatusBand\"/>\n\n        <Label Grid.Row=\"2\" Content=\"{DynamicResource S.ImportVideo.Loading}\" Margin=\"0\" VerticalContentAlignment=\"Center\" \n               HorizontalContentAlignment=\"Center\" FontSize=\"24\" Foreground=\"{DynamicResource Element.Foreground.Header}\" FontFamily=\"{DynamicResource FontFamilyLight}\"\n               Visibility=\"{Binding LoadingVisibility, Mode=OneWay}\"/>\n\n        <Grid Grid.Row=\"2\" x:Name=\"PreviewerGrid\" Margin=\"5\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition MinWidth=\"50\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition MinWidth=\"50\"/>\n            </Grid.ColumnDefinitions>\n\n            <Image Grid.Column=\"0\" Source=\"{Binding LowerSelectionImage, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"/>\n            <Image Grid.Column=\"2\" Source=\"{Binding UpperSelectionImage, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n            <GridSplitter x:Name=\"Splitter\" Grid.Column=\"1\" Width=\"4\" BorderBrush=\"{DynamicResource Element.Border}\" \n                          KeyboardIncrement=\"5\" ShowsPreview=\"False\" ResizeDirection=\"Columns\" ResizeBehavior=\"PreviousAndNext\" \n                          Effect=\"{StaticResource Shadow.Background.Small}\" Opacity=\"0.8\" Margin=\"-2,0\"\n                          IsEnabled=\"{Binding AreControlsEnabled, Mode=OneWay}\"/>\n        </Grid>\n\n        <c:RangeSlider x:Name=\"SelectionSlider\" Grid.Row=\"3\" Height=\"Auto\" MinHeight=\"20\" TickPlacement=\"BottomRight\" Margin=\"5,5\"\n                       UpperValue=\"{Binding EndMillisecond, Mode=TwoWay}\" LowerValue=\"{Binding StartMillisecond, Mode=TwoWay}\" Maximum=\"{Binding MaximumMilliseconds, Mode=OneWay}\"\n                       IsEnabled=\"{Binding AreControlsEnabled, Mode=OneWay}\"/>\n\n        <Grid x:Name=\"DetailsGrid\" Grid.Row=\"4\" IsEnabled=\"{Binding AreControlsEnabled, Mode=OneWay}\" Margin=\"0,0,0,5\">\n            <Grid.RowDefinitions>\n                <RowDefinition/>\n                <RowDefinition/>\n            </Grid.RowDefinitions>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n\n            <!--Scale-->\n            <TextBlock Text=\"{DynamicResource S.ImportVideo.Scale}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n            <StackPanel Grid.Column=\"0\" Grid.Row=\"1\" Orientation=\"Horizontal\">\n                <c:IntegerUpDown MinWidth=\"60\" Margin=\"5\" Maximum=\"200\" Minimum=\"5\" Value=\"{Binding Scale, Mode=TwoWay}\"/>\n\n                <TextBlock Text=\"%\" VerticalAlignment=\"Center\" Padding=\"0,0,5,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            </StackPanel>\n\n            <!--Size-->\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" Text=\"{DynamicResource S.ImportVideo.Size}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n            <StackPanel Grid.Row=\"1\" Grid.Column=\"1\" Orientation=\"Horizontal\" HorizontalAlignment=\"Left\">\n                <TextBlock Text=\"{DynamicResource S.ImportVideo.Width}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\"/>\n                <TextBlock VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" Text=\"{Binding TargetWidth, StringFormat={}{0:d}}\"/>\n\n                <TextBlock Text=\"{DynamicResource S.ImportVideo.Height}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\"/>\n                <TextBlock VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" Text=\"{Binding TargetHeight, StringFormat={}{0:d}}\"/>\n            </StackPanel>\n\n            <Separator Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"2\" Width=\"1\" HorizontalAlignment=\"Left\"/>\n\n            <!--Framerate-->\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"3\" Text=\"{DynamicResource S.ImportVideo.Framerate}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n            <StackPanel Grid.Row=\"1\" Grid.Column=\"3\" Orientation=\"Horizontal\" HorizontalAlignment=\"Left\">\n                <c:IntegerUpDown MinWidth=\"60\" Margin=\"5\" Maximum=\"60\" Minimum=\"1\" Value=\"{Binding Framerate, Mode=TwoWay}\"/>\n\n                <TextBlock Text=\"{DynamicResource S.ImportVideo.Fps}\" Padding=\"0,0,5,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            </StackPanel>\n\n            <Separator Grid.Row=\"0\" Grid.Column=\"5\" Grid.RowSpan=\"2\" Width=\"1\" HorizontalAlignment=\"Left\"/>\n\n            <!--Start-->\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"6\" Text=\"{DynamicResource S.ImportVideo.Start}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n            <StackPanel Grid.Row=\"1\" Grid.Column=\"6\" Orientation=\"Horizontal\" HorizontalAlignment=\"Left\">\n                <c:IntegerUpDown MinWidth=\"60\" Margin=\"5\" StepValue=\"10\" Padding=\"2,0\" Maximum=\"{Binding EndMillisecond, Mode=OneWay}\" Minimum=\"0\" \n                                 Value=\"{Binding StartMillisecond, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"ms\" Padding=\"0,0,5,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            </StackPanel>\n\n            <!--End-->\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"7\" Text=\"{DynamicResource S.ImportVideo.End}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n            <StackPanel Grid.Row=\"1\" Grid.Column=\"7\" Orientation=\"Horizontal\" HorizontalAlignment=\"Left\">\n                <c:IntegerUpDown MinWidth=\"60\" Margin=\"5\" StepValue=\"10\" Padding=\"2,0\" Maximum=\"{Binding MaximumMilliseconds, Mode=OneWay}\" Minimum=\"{Binding StartMillisecond, Mode=OneWay}\" \n                                 Value=\"{Binding EndMillisecond, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"/>\n\n                <TextBlock Text=\"ms\" Padding=\"0,0,5,0\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n            </StackPanel>\n\n            <TextBlock Grid.Row=\"0\" Grid.Column=\"8\" Text=\"{DynamicResource S.ImportVideo.Selection}\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\" Margin=\"3\"/>\n            <StackPanel Grid.Row=\"1\" Grid.Column=\"8\" Orientation=\"Horizontal\">\n                <TextBlock Text=\"{DynamicResource S.ImportVideo.Frames}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\"/>\n                <TextBlock VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" Text=\"{Binding FrameCount, StringFormat={}{0:}}\"/>\n\n                <TextBlock Text=\"{DynamicResource S.ImportVideo.Duration}\" VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\"/>\n                <TextBlock VerticalAlignment=\"Center\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" Margin=\"3\" Text=\"{Binding Duration, StringFormat={}{0:hh\\\\:mm\\\\:ss\\\\.fff}}\"/>\n            </StackPanel>\n        </Grid>\n\n        <Grid Grid.Row=\"5\" Background=\"{DynamicResource Panel.Background.Level3}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Label Content=\"{DynamicResource S.InsertFrames.Importing}\" Margin=\"5,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\" VerticalAlignment=\"Center\"\n                   Visibility=\"{Binding ImportingVisibility, Mode=OneWay}\"/>\n            <ProgressBar Grid.Column=\"1\" Height=\"4\" Margin=\"5,0\" Value=\"{Binding ImportProgress, Mode=OneWay}\" Maximum=\"{Binding MaximumProgress, Mode=OneWay}\"\n                         Visibility=\"{Binding ImportingVisibility, Mode=OneWay}\"/>\n\n            <c:ExtendedButton Grid.Column=\"2\" Text=\"{DynamicResource S.Ok}\" IsEnabled=\"{Binding AreControlsEnabled, Mode=OneWay}\" Icon=\"{StaticResource Vector.Ok}\" \n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" Click=\"OkButton_Click\"/>\n\n            <c:ExtendedButton Grid.Column=\"3\" Text=\"{DynamicResource S.Cancel}\" Icon=\"{StaticResource Vector.Cancel}\"\n                              ContentWidth=\"18\" ContentHeight=\"18\" Padding=\"5,0\" MinWidth=\"90\" Margin=\"5\" IsCancel=\"True\" Click=\"CancelButton_Click\"/>\n        </Grid>\n    </Grid>\n</c:ExWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Other/VideoSource.xaml.cs",
    "content": "using ScreenToGif.Model;\nusing ScreenToGif.Util;\nusing ScreenToGif.ViewModel;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\n\nnamespace ScreenToGif.Windows.Other;\n\npublic partial class VideoSource\n{\n    private readonly VideoSourceViewModel _viewModel;\n\n    /// <summary>\n    /// The path of the video file to be imported.\n    /// </summary>\n    public string VideoPath\n    {\n        get => _viewModel.VideoPath;\n        set => _viewModel.VideoPath = value;\n    }\n\n    /// <summary>\n    /// The path of the project where the imported frames will be stored after importing.\n    /// </summary>\n    public string RootFolder\n    {\n        get => _viewModel.RootFolder;\n        set => _viewModel.RootFolder = value;\n    }\n\n    /// <summary>\n    /// The imported frame list.\n    /// </summary>\n    public List<FrameInfo> Frames => _viewModel.Frames.Select(s => new FrameInfo(s.Path, s.Delay)).ToList();\n\n    public VideoSource()\n    {\n        InitializeComponent();\n\n        _viewModel = DataContext as VideoSourceViewModel;\n    }\n\n    //Events\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        _viewModel.LoadSettings();\n\n        _viewModel.ShowErrorRequested += (_, args) =>\n        {\n            if (!IsLoaded)\n                return;\n\n            switch (args)\n            {\n                case string error:\n                    StatusBand.Error(error);\n                    break;\n\n                case Exception ex:\n                    ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.ImportVideo.Error\"), LocalizationHelper.Get(\"S.ImportVideo.Error.Detail\"), ex);\n                    break;\n            }\n        };\n\n        _viewModel.ShowWarningRequested += (_, e) =>\n        {\n            if (!IsLoaded)\n                return;\n\n            StatusBand.Warning(e, () => App.MainViewModel.OpenOptions.Execute(Options.PluginsIndex));\n        };\n\n        _viewModel.HideErrorRequested += (_, _) =>\n        {\n            if (!IsLoaded)\n                return;\n\n            StatusBand.Hide();\n        };\n\n        _viewModel.CloseRequested += (_, _) =>\n        {\n            Dispatcher.Invoke(() =>\n            {\n                if (IsLoaded)\n                    DialogResult = true;\n            });\n        };\n\n        await _viewModel.LoadPreview();\n    }\n\n    private async void OkButton_Click(object sender, RoutedEventArgs e)\n    {\n        if (_viewModel.FrameCount == 0)\n        {\n            StatusBand.Warning(LocalizationHelper.Get(\"S.ImportVideo.Nothing\"));\n            return;\n        }\n\n        MinHeight = Height;\n        SizeToContent = SizeToContent.Manual;\n\n        await _viewModel.Import();\n    }\n\n    private async void CancelButton_Click(object sender, RoutedEventArgs e)\n    {\n        await _viewModel.Cancel();\n\n        DialogResult = false;\n    }\n\n    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        _viewModel.SaveSettings();\n        _viewModel.RemoveImportFiles();\n        _viewModel.Dispose();\n\n        GC.Collect();\n    }\n}"
  },
  {
    "path": "ScreenToGif/Windows/Recorder.xaml",
    "content": "<n:LightWindow x:Name=\"RecorderLightWindow\" x:Class=\"ScreenToGif.Windows.Recorder\"\n               xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n               xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n               xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n               xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n               xmlns:cx=\"clr-namespace:ScreenToGif.Util.Converters\"\n               xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n               xmlns:e=\"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\"\n               xmlns:u=\"clr-namespace:ScreenToGif.Util;assembly=ScreenToGif.Util\"\n               Title=\"ScreenToGif\" SnapsToDevicePixels=\"True\" UseLayoutRounding=\"True\" AllowsTransparency=\"True\" WindowStyle=\"None\" \n               Topmost=\"True\" Icon=\"../Resources/Logo.ico\"\n               IsThin=\"{Binding RecorderThinMode, Source={x:Static t:UserSettings.All}}\"\n               IsFollowing=\"{Binding CursorFollowing, Source={x:Static t:UserSettings.All}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\"\n               FocusManager.FocusedElement=\"{Binding RelativeSource={x:Static RelativeSource.Self}, Mode=OneTime}\"\n               Loaded=\"Window_Loaded\" Closing=\"Window_Closing\" Activated=\"Window_Activated\" KeyDown=\"Window_KeyDown\">\n\n    <Window.Resources>\n        <Storyboard x:Key=\"ShowDiscardStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\" >\n                <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"(Button.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideDiscardStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\" >\n                <DiscreteBooleanKeyFrame Value=\"False\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"(Button.Opacity)\" \n                             From=\"{Binding ElementName=DiscardButton,Path=Opacity}\" To=\"0\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideWindowStoryboard\" FillBehavior=\"Stop\" DesiredFrameRate=\"60\" SpeedRatio=\"2\">\n            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RecorderLightWindow\" Storyboard.TargetProperty=\"(Window.Opacity)\" Duration=\"0:0:0.1\" FillBehavior=\"Stop\">\n                <DiscreteDoubleKeyFrame Value=\"0\" KeyTime=\"0:0:0\"/>\n            </DoubleAnimationUsingKeyFrames>\n        </Storyboard>\n\n        <Storyboard x:Key=\"ShowWindowStoryboard\" FillBehavior=\"Stop\" DesiredFrameRate=\"60\">\n            <DoubleAnimation Storyboard.TargetName=\"RecorderLightWindow\" Storyboard.TargetProperty=\"(Window.Opacity)\" \n                             From=\"{Binding ElementName=DashedRectangle,Path=Opacity}\" To=\"1\" Duration=\"0:0:1\" FillBehavior=\"Stop\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\"/>\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <cx:KeyGestureToString x:Key=\"KeyGestureToString\"/>\n        <c:InvertedBoolToVisibility x:Key=\"InvertedBoolToVisibility\"/>\n        <c:IntToString x:Key=\"IntToStringConverter\"/>\n        <c:BoolOr x:Key=\"BoolOr\"/>\n    </Window.Resources>\n\n    <Window.TaskbarItemInfo>\n        <TaskbarItemInfo>\n            <TaskbarItemInfo.ThumbButtonInfos>\n                <ThumbButtonInfoCollection>\n                    <ThumbButtonInfo x:Name=\"RecordThumbInfo\" Command=\"{Binding RecordCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Record}\" CommandTarget=\"{Binding ElementName=RecordButton}\"\n                                     Visibility=\"{Binding ElementName=RecordButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Record}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"SnapThumbInfo\" Command=\"{Binding SnapCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Snap}\" CommandTarget=\"{Binding ElementName=SnapButton}\"\n                                     Visibility=\"{Binding ElementName=SnapButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Camera.Add}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n\n                    <ThumbButtonInfo x:Name=\"PauseThumbInfo\" Command=\"{Binding PauseCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Pause}\" CommandTarget=\"{Binding ElementName=PauseButton}\"\n                                     Visibility=\"{Binding ElementName=PauseButton, Path=Visibility, Mode=OneWay}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Pause}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n                    \n                    <ThumbButtonInfo x:Name=\"StopThumbInfo\" Command=\"{Binding StopCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Stop}\" CommandTarget=\"{Binding ElementName=StopButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Stop}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n                    \n                    <ThumbButtonInfo Visibility=\"Hidden\"/>\n\n                    <ThumbButtonInfo x:Name=\"DiscardThumbInfo\" Command=\"{Binding DiscardCommand}\" DismissWhenClicked=\"True\" \n                                     Description=\"{DynamicResource S.Recorder.Discard}\" CommandTarget=\"{Binding ElementName=DiscardButton}\">\n                        <ThumbButtonInfo.ImageSource>\n                            <DrawingImage Drawing=\"{Binding Source={StaticResource Vector.Remove}, Path=Drawing, Mode=OneTime}\"/>\n                        </ThumbButtonInfo.ImageSource>\n                    </ThumbButtonInfo>\n                </ThumbButtonInfoCollection>\n            </TaskbarItemInfo.ThumbButtonInfos>\n        </TaskbarItemInfo>\n    </Window.TaskbarItemInfo>\n\n    <Grid x:Name=\"OutterGrid\" UseLayoutRounding=\"True\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"31\"/>\n        </Grid.RowDefinitions>\n        \n        <!--Hollow part-->\n        <Border BorderBrush=\"{Binding ElementName=RecorderLightWindow, Path=BorderBrush}\" BorderThickness=\"{Binding ElementName=RecorderLightWindow, Path=BorderThickness}\">\n            <Grid x:Name=\"GuidelinesGrid\">\n                <Grid Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=DisplayThirdsGuideline, Converter={StaticResource Bool2Visibility}}\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition/>\n                        <RowDefinition/>\n                        <RowDefinition/>\n                    </Grid.RowDefinitions>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                        <ColumnDefinition/>\n                    </Grid.ColumnDefinitions>\n\n                    <!--Rule of thirds, horizontal top-->\n                    <Line Grid.Row=\"0\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" x:Name=\"ThirdsLine\" X1=\"0\" Y1=\"0\" X2=\"1\" Y2=\"0\" \n                          Stroke=\"{Binding Source={x:Static t:UserSettings.All}, Path=ThirdsGuidelineColor, Converter={StaticResource ColorToBrush}}\" \n                          StrokeThickness=\"{Binding Source={x:Static t:UserSettings.All}, Path=ThirdsGuidelineThickness}\" Stretch=\"Uniform\" VerticalAlignment=\"Bottom\"\n                          StrokeDashArray=\"{Binding Source={x:Static t:UserSettings.All}, Path=ThirdsGuidelineStrokeDashArray}\"/>\n\n                    <!--Rule of thirds, horizontal bottom-->\n                    <Line Grid.Row=\"2\" Grid.Column=\"0\" Grid.ColumnSpan=\"3\" X1=\"0\" Y1=\"0\" X2=\"1\" Y2=\"0\" Stroke=\"{Binding ElementName=ThirdsLine, Path=Stroke}\" \n                          StrokeThickness=\"{Binding ElementName=ThirdsLine, Path=StrokeThickness}\" Stretch=\"Uniform\" VerticalAlignment=\"Top\"\n                          StrokeDashArray=\"{Binding ElementName=ThirdsLine, Path=StrokeDashArray}\"/>\n\n                    <!--Rule of thirds, vertical left-->\n                    <Line Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"3\" X1=\"0\" Y1=\"0\" X2=\"0\" Y2=\"1\" Stroke=\"{Binding ElementName=ThirdsLine, Path=Stroke}\" \n                          StrokeThickness=\"{Binding ElementName=ThirdsLine, Path=StrokeThickness}\" Stretch=\"Uniform\" HorizontalAlignment=\"Right\"\n                          StrokeDashArray=\"{Binding ElementName=ThirdsLine, Path=StrokeDashArray}\"/>\n\n                    <!--Rule of thirds, vertical right-->\n                    <Line Grid.Row=\"0\" Grid.Column=\"2\" Grid.RowSpan=\"3\" X1=\"0\" Y1=\"0\" X2=\"0\" Y2=\"1\" Stroke=\"{Binding ElementName=ThirdsLine, Path=Stroke}\" \n                          StrokeThickness=\"{Binding ElementName=ThirdsLine, Path=StrokeThickness}\" Stretch=\"Uniform\" HorizontalAlignment=\"Left\"\n                          StrokeDashArray=\"{Binding ElementName=ThirdsLine, Path=StrokeDashArray}\"/>\n                </Grid>\n\n                <Grid Visibility=\"{Binding Source={x:Static t:UserSettings.All}, Path=DisplayCrosshairGuideline, Converter={StaticResource Bool2Visibility}}\">\n                    <!--Crosshair, horizontal-->\n                    <Line X1=\"0\" Y1=\"0\" X2=\"1\" Y2=\"0\" x:Name=\"CrosshairLine\" Stroke=\"{Binding Source={x:Static t:UserSettings.All}, Path=CrosshairGuidelineColor, Converter={StaticResource ColorToBrush}}\" \n                          StrokeThickness=\"{Binding Source={x:Static t:UserSettings.All}, Path=CrosshairGuidelineThickness}\" Stretch=\"Uniform\" VerticalAlignment=\"Center\" \n                          StrokeDashArray=\"{Binding Source={x:Static t:UserSettings.All}, Path=CrosshairGuidelineStrokeDashArray}\"/>\n\n                    <!--Crosshair, vertical-->\n                    <Line X1=\"0\" Y1=\"0\" X2=\"0\" Y2=\"1\" Stroke=\"{Binding ElementName=CrosshairLine, Path=Stroke}\" StrokeThickness=\"{Binding ElementName=CrosshairLine, Path=StrokeThickness}\" \n                          Stretch=\"Uniform\" HorizontalAlignment=\"Center\" StrokeDashArray=\"{Binding ElementName=CrosshairLine, Path=StrokeDashArray}\"/>\n                </Grid>\n            </Grid>\n        </Border>\n\n        <!--Command bar-->\n        <Grid Grid.Row=\"1\" x:Name=\"LowerGrid\" Height=\"31\" VerticalAlignment=\"Bottom\" Background=\"{Binding ElementName=RecorderLightWindow, Path=Background}\" \n              KeyboardNavigation.TabNavigation=\"Cycle\" MouseLeftButtonDown=\"CommandGrid_MouseLeftButtonDown\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition/>\n            </Grid.ColumnDefinitions>\n\n            <Grid Grid.Column=\"0\" Visibility=\"{Binding RecorderThinMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource Bool2Visibility}}\">\n                <Grid.RowDefinitions>\n                    <RowDefinition/>\n                    <RowDefinition/>\n                </Grid.RowDefinitions>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n\n                <n:ExtendedButton Grid.Row=\"0\" Grid.Column=\"0\" Grid.RowSpan=\"2\" x:Name=\"CloseButton\" Icon=\"{StaticResource Vector.Close}\" Style=\"{StaticResource Style.Button.NoText}\"\n                                  ContentHeight=\"10\" ContentWidth=\"10\" Padding=\"4,1\" Click=\"CloseButton_Click\"/>\n\n                <TextBlock Grid.Row=\"0\" Grid.Column=\"1\" x:Name=\"CaptionText\" Text=\"{Binding Title, ElementName=RecorderLightWindow}\" FontFamily=\"{DynamicResource FontFamilyNormal}\" FontSize=\"12\"\n                           FontWeight=\"Regular\" Margin=\"5,0,0,0\" Foreground=\"{DynamicResource Element.Foreground}\"/>\n\n                <TextBlock Grid.Row=\"1\" Grid.Column=\"1\" x:Name=\"FrameCountTextBlock\" Text=\"{Binding FrameCount, ElementName=RecorderLightWindow, Converter={StaticResource IntToStringConverter}}\" \n                           FontFamily=\"{DynamicResource FontFamilyNormal}\" FontSize=\"12\" FontWeight=\"Regular\" Margin=\"5,0,0,0\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n            </Grid>\n\n            <!--Command controls-->\n            <StackPanel Grid.Column=\"1\" x:Name=\"ControlStackPanel\" Height=\"31\" Orientation=\"Horizontal\" HorizontalAlignment=\"Right\"\n                        ScrollViewer.VerticalScrollBarVisibility=\"Disabled\">\n\n                <Grid Background=\"{StaticResource Vector.Cursor}\" Margin=\"5,4\" ToolTip=\"{DynamicResource S.Recorder.CursorFollowing}\" Width=\"16\"\n                      Visibility=\"{Binding ElementName=RecorderLightWindow, Path=IsFollowing, Converter={StaticResource Bool2Visibility}, FallbackValue={x:Static Visibility.Collapsed}}\"/>\n\n                <n:ExtendedButton x:Name=\"SnapWindowButton\" Icon=\"{StaticResource Vector.Crosshair}\" Margin=\"0\" Style=\"{StaticResource Style.Button.NoText}\" \n                                  HorizontalContentAlignment=\"Center\" ContentHeight=\"20\" ContentWidth=\"20\" Command=\"{Binding SnapToWindowCommand}\" Padding=\"3\"\n                                  ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\" ToolTip=\"{DynamicResource S.Recorder.SnapToWindow}\" \n                                  PreviewMouseDown=\"SnapWindowButton_PreviewMouseDown\"/>\n\n                <n:ExtendedButton x:Name=\"OptionsButton\" Icon=\"{DynamicResource Vector.Options}\" Margin=\"0\" Padding=\"3\" \n                                  Style=\"{DynamicResource Style.Button.NoText}\" ContentHeight=\"20\" ContentWidth=\"20\" Command=\"{Binding OptionsCommand}\"\n                                  ToolTipService.HorizontalOffset=\"-5\" ToolTipService.Placement=\"Bottom\" ToolTip=\"{DynamicResource S.StartUp.Options}\"/>\n                \n                <Separator Width=\"1\" Margin=\"5,2\"/>\n\n                <Viewbox x:Name=\"FrequencyViewbox\" Stretch=\"UniformToFill\" ClipToBounds=\"True\" Focusable=\"False\" \n                         ToolTip=\"{DynamicResource S.Recorder.Fps.Range}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\">\n                    <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" FlowDirection=\"LeftToRight\" Margin=\"-4\" Opacity=\"{DynamicResource Element.Opacity}\"\n                          Visibility=\"{Binding Path=RecorderThinMode, Source={x:Static t:UserSettings.All}, Converter={StaticResource InvertedBoolToVisibility}}\">\n                        <n:CircularProgressBar StrokeThickness=\"2\" Percentage=\"100\" SegmentColor=\"Gray\" Radius=\"24\" IsTabStop=\"False\"/>\n                        <n:CircularProgressBar StrokeThickness=\"22\" Percentage=\"100\" SegmentColor=\"#FFF0F1F1\" Radius=\"10\" IsTabStop=\"False\"/>\n\n                        <n:CircularProgressBar StrokeThickness=\"2\" Value=\"{Binding ElementName=FrequencyIntegerUpDown, Path=Value, Mode=OneWay}\" \n                                               IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"24\" IsTabStop=\"False\"/>\n                        <n:CircularProgressBar StrokeThickness=\"22\" Value=\"{Binding ElementName=FrequencyIntegerUpDown, Path=Value, Mode=OneWay}\" \n                                               IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"10\" IsTabStop=\"False\"/>\n                    </Grid>\n                </Viewbox>\n\n                <n:IntegerUpDown x:Name=\"FrequencyIntegerUpDown\" Margin=\"1,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"60\" MinWidth=\"45\"\n                                 Value=\"{Binding Source={x:Static t:UserSettings.All}, Path=LatestFps, Mode=TwoWay}\"\n                                 ToolTip=\"{DynamicResource S.Recorder.Fps}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"/>\n\n                <n:ExtendedButton x:Name=\"FrequencyButton\" Style=\"{StaticResource Style.Button.Horizontal.NoImage}\" Margin=\"1,0,0,0\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n                                  UseLayoutRounding=\"True\" Text=\"{DynamicResource S.Recorder.Fps.Short}\" FontSize=\"12\" TextWrapping=\"NoWrap\"\n                                  ToolTip=\"{DynamicResource S.Recorder.SwitchFrequency}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                  Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"Switch\">\n                    <n:ExtendedButton.ContextMenu>\n                        <ContextMenu IsOpen=\"False\">\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency}\" IsHitTestVisible=\"False\" Icon=\"{StaticResource Vector.Record}\" ContentHeight=\"16\" ContentWidth=\"16\"/>\n                            <Separator/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Manual}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Camera}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Manual}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.Manual}\"/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Interaction}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Cursor}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.Interaction}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}, UpdateSourceTrigger=PropertyChanged}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.Interaction}\"/>\n                            \n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Second}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerSecond}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerSecond}\"/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Minute}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay.Minute}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerMinute}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerMinute}\"/>\n\n                            <n:ExtendedMenuItem Header=\"{DynamicResource S.Options.Recorder.Frequency.Hour}\" IsCheckable=\"True\" Icon=\"{StaticResource Vector.Delay.Hour}\" ContentHeight=\"16\" ContentWidth=\"16\" \n                                                IsChecked=\"{Binding CaptureFrequency, Source={x:Static t:UserSettings.All}, Converter={StaticResource EnumToBool}, ConverterParameter={x:Static e:CaptureFrequencies.PerHour}}\" \n                                                IsEnabled=\"{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Converter={StaticResource InvertedBool}}\" \n                                                Command=\"{Binding SwitchFrequencyCommand}\" CommandParameter=\"{x:Static e:CaptureFrequencies.PerHour}\"/>\n                        </ContextMenu>\n                    </n:ExtendedButton.ContextMenu>\n                </n:ExtendedButton>\n\n                <Separator Width=\"1\" Margin=\"5,2\"/>\n\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n                    \n                    <Grid.IsEnabled>\n                        <MultiBinding Converter=\"{StaticResource BoolOr}\" ConverterParameter=\"0\">\n                            <Binding ElementName=\"StopButton\" Path=\"IsEnabled\"/>\n                            <Binding ElementName=\"PauseButton\" Path=\"IsEnabled\"/>\n                        </MultiBinding>\n                    </Grid.IsEnabled>\n\n                    <n:IntegerBox Grid.Column=\"0\" x:Name=\"WidthIntegerBox\" Value=\"{Binding ElementName=RecorderLightWindow, Path=Width, Mode=TwoWay}\"\n                                  Offset=\"{x:Static u:Constants.HorizontalOffset}\" Minimum=\"100\" Maximum=\"3000\" Height=\"Auto\" Padding=\"4,0\" Margin=\"1,3\"\n                                  ToolTip=\"{DynamicResource S.Recorder.Width}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                  PropagateWheelEvent=\"True\" MouseWheel=\"SizeIntegerBox_MouseWheel\"/>\n\n                    <Label Grid.Column=\"1\" Content=\"×\" FontSize=\"16\" FontFamily=\"Segoe Script\" Margin=\"1\" VerticalContentAlignment=\"Center\" Padding=\"0\" \n                           Foreground=\"{Binding ElementName=RecorderLightWindow, Path=Foreground}\"/>\n\n                    <n:IntegerBox Grid.Column=\"2\" x:Name=\"HeightIntegerBox\" Value=\"{Binding ElementName=RecorderLightWindow, Path=Height, Mode=TwoWay}\"\n                                  Offset=\"{x:Static u:Constants.VerticalOffset}\" Minimum=\"100\" Maximum=\"3000\" Height=\"Auto\" Padding=\"4,0\" Margin=\"1,3\"\n                                  ToolTip=\"{DynamicResource S.Recorder.Height}\" ToolTipService.Placement=\"Bottom\" ToolTipService.HorizontalOffset=\"-5\"\n                                  PropagateWheelEvent=\"True\" MouseWheel=\"SizeIntegerBox_MouseWheel\"/>\n\n                    <TextBlock Grid.Column=\"3\" Text=\"px\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyNormal}\" Margin=\"1,0,0,0\" VerticalAlignment=\"Center\" Padding=\"0\" \n                               Foreground=\"{Binding ElementName=RecorderLightWindow, Path=Foreground}\"/>\n                </Grid>\n\n                <Separator Width=\"1\" Margin=\"5,2\"/>\n\n                <!--Discard-->\n                <n:ExtendedButton x:Name=\"DiscardButton\" Icon=\"{DynamicResource Vector.Remove}\" ContentHeight=\"18\" ContentWidth=\"18\" Text=\"{DynamicResource S.Recorder.Discard}\"\n                                  MinWidth=\"31\" Style=\"{Binding ButtonStyle, FallbackValue={StaticResource Style.Button.Horizontal}}\" ToolTip=\"{DynamicResource S.Recorder.Discard}\" \n                                  Command=\"{Binding DiscardCommand}\" KeyGesture=\"{Binding DiscardKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\" \n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n                \n                <!--Snap-->\n                <n:ExtendedButton x:Name=\"SnapButton\" Icon=\"{StaticResource Vector.Camera.Add}\" ContentHeight=\"18\" ContentWidth=\"18\" Text=\"{DynamicResource S.Recorder.Snap}\"\n                                  MinWidth=\"31\" Style=\"{Binding ButtonStyle, FallbackValue={StaticResource Style.Button.Horizontal}}\" ToolTip=\"{DynamicResource S.Recorder.Snap}\" \n                                  Command=\"{Binding SnapCommand}\" KeyGesture=\"{Binding RecordKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Record-->\n                <n:ExtendedButton x:Name=\"RecordButton\" Icon=\"{StaticResource Vector.Record}\" ContentHeight=\"18\" ContentWidth=\"18\" Text=\"{DynamicResource S.Recorder.Record}\"\n                                  MinWidth=\"31\" Style=\"{Binding ButtonStyle, FallbackValue={StaticResource Style.Button.Horizontal}}\" ToolTip=\"{DynamicResource S.Recorder.Record}\"\n                                  Command=\"{Binding RecordCommand}\" KeyGesture=\"{Binding RecordKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\" \n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Pause-->\n                <n:ExtendedButton x:Name=\"PauseButton\" Icon=\"{StaticResource Vector.Pause}\" ContentHeight=\"18\" ContentWidth=\"18\" Text=\"{DynamicResource S.Recorder.Pause}\"\n                                  MinWidth=\"31\" Style=\"{Binding ButtonStyle, FallbackValue={StaticResource Style.Button.Horizontal}}\" ToolTip=\"{DynamicResource S.Recorder.Pause}\"\n                                  Command=\"{Binding PauseCommand}\" KeyGesture=\"{Binding RecordKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n\n                <!--Stop-->\n                <n:ExtendedButton x:Name=\"StopButton\" Icon=\"{DynamicResource Vector.Stop}\" ContentHeight=\"18\" ContentWidth=\"18\" Text=\"{DynamicResource S.Recorder.Stop}\"\n                                  MinWidth=\"31\" Style=\"{Binding ButtonStyle, FallbackValue={StaticResource Style.Button.Horizontal}}\" ToolTip=\"{DynamicResource S.Recorder.Stop}\"\n                                  Command=\"{Binding StopCommand}\" KeyGesture=\"{Binding StopKeyGesture, Converter={StaticResource KeyGestureToString}, UpdateSourceTrigger=PropertyChanged}\"\n                                  Visibility=\"{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource Bool2Visibility}}\"/>\n            </StackPanel>\n        </Grid>\n    </Grid>\n</n:LightWindow>"
  },
  {
    "path": "ScreenToGif/Windows/Recorder.xaml.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Forms;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing System.Windows.Threading;\nusing Microsoft.Win32;\nusing ScreenToGif.Capture;\nusing ScreenToGif.Controls;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Domain.Exceptions;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Helpers;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.ViewModel;\nusing ScreenToGif.Windows.Other;\nusing Cursors = System.Windows.Input.Cursors;\nusing DpiChangedEventArgs = System.Windows.DpiChangedEventArgs;\nusing KeyEventArgs = System.Windows.Input.KeyEventArgs;\nusing MouseButtons = ScreenToGif.Domain.Enums.MouseButtons;\nusing Timer = System.Windows.Forms.Timer;\n\nnamespace ScreenToGif.Windows;\n\npublic partial class Recorder\n{\n    #region Variables\n\n    /// <summary>\n    /// The view model of the recorder.\n    /// </summary>\n    private readonly ScreenRecorderViewModel _viewModel;\n\n    /// <summary>\n    /// The region's left edge position.\n    /// </summary>\n    private int _left = 0;\n\n    /// <summary>\n    /// The region's top edge position.\n    /// </summary>\n    private int _top = 0;\n\n    /// <summary>\n    /// The region's width.\n    /// </summary>\n    private int _width = 0;\n\n    /// <summary>\n    /// The region's height.\n    /// </summary>\n    private int _height = 0;\n\n    /// <summary>\n    /// The object of the keyboard and mouse hooks.\n    /// </summary>\n    private readonly InputHook _actHook;\n\n    /// <summary>\n    /// The amount of seconds of the pre start delay, plus 1 (1+1=2);\n    /// </summary>\n    private int _preStartCount = 1;\n\n    /// <summary>\n    /// The DPI of the current screen.\n    /// </summary>\n    private double _scale = 1;\n\n    /// <summary>\n    /// The last window handle saved.\n    /// </summary>\n    private IntPtr _lastHandle;\n\n    #region Mouse cursor follow up\n\n    /// <summary>\n    /// The previous position of the cursor in the X axis.\n    /// </summary>\n    private int _prevPosX = 0;\n\n    /// <summary>\n    /// The previous position of the cursor in the Y axis.\n    /// </summary>\n    private int _prevPosY = 0;\n\n    /// <summary>\n    /// The latest position of the cursor in the X axis.\n    /// </summary>\n    private int _posX = 0;\n\n    /// <summary>\n    /// The latest position of the cursor in the Y axis.\n    /// </summary>\n    private int _posY = 0;\n\n    /// <summary>\n    /// The offset in pixels. Used for moving the recorder around the X axis.\n    /// </summary>\n    private double _offsetX = 0;\n\n    /// <summary>\n    /// The offset in pixels. Used for moving the recorder around the Y axis.\n    /// </summary>\n    private double _offsetY = 0;\n\n    #endregion\n\n    #endregion\n\n    #region Timer\n\n    private readonly Timer _preStartTimer = new Timer();\n\n    private readonly Timer _followTimer = new Timer();\n    private readonly Timer _showBorderTimer = new Timer();\n    private readonly Timer _limitTimer = new Timer();\n\n    #endregion\n\n\n    public Recorder()\n    {\n        InitializeComponent();\n\n        _preStartTimer.Tick += PreStart_Elapsed;\n        _preStartTimer.Interval = 1000;\n\n        #region Global Hook\n\n        try\n        {\n            _actHook = new InputHook(true, true); //true for the mouse, true for the keyboard.\n            _actHook.KeyDown += KeyHookTarget;\n            _actHook.OnMouseActivity += MouseHookTarget;\n        }\n        catch (Exception) { }\n\n        #endregion\n\n        #region Model and commands\n\n        DataContext = _viewModel = new ScreenRecorderViewModel();\n\n        RegisterCommands();\n\n        #endregion\n\n        SystemEvents.PowerModeChanged += System_PowerModeChanged;\n        SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;\n    }\n\n\n    #region Events\n\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        #region Adjust the position\n\n        UpdateScreenDpi();\n\n        _viewModel.IsDirectMode = UserSettings.All.UseDesktopDuplication;\n\n        await UpdatePositioning(true);\n\n        #endregion\n\n        UpdateSize();\n        UpdateLocation();\n\n        DetectCaptureFrequency();\n        DetectThinMode();\n        AutoFitButtons(true);\n\n        #region Timers\n\n        _showBorderTimer.Interval = 500;\n        _showBorderTimer.Tick += ShowBorderTimer_Tick;\n\n        _followTimer.Tick += FollowTimer_Tick;\n\n        #endregion\n\n        CommandManager.InvalidateRequerySuggested();\n\n        if (UserSettings.All.CursorFollowing)\n            Follow();\n\n        SizeChanged += Window_SizeChanged;\n        DpiChanged += Window_DpiChanged;\n        LocationChanged += Window_LocationChanged;\n\n        //Automation arguments were passed by command line.\n        if (Arguments.Open)\n        {\n            if (Arguments.FrequencyType.HasValue)\n            {\n                UserSettings.All.CaptureFrequency = Arguments.FrequencyType.Value;\n                UserSettings.All.LatestFps = Arguments.Frequency;\n                DetectCaptureFrequency();\n\n                Arguments.FrequencyType = null;\n            }\n\n            if (Arguments.StartCapture && UserSettings.All.CaptureFrequency >= CaptureFrequencies.PerSecond)\n            {\n                if (Arguments.Limit > TimeSpan.Zero)\n                {\n                    _limitTimer.Tick += Limit_Elapsed;\n                    _limitTimer.Interval = (int)Math.Min(int.MaxValue, Arguments.Limit.TotalMilliseconds);\n                }\n\n                await Record();\n            }\n            else\n            {\n                Arguments.ClearAutomationArgs();\n            }\n        }\n    }\n\n    private void Window_Activated(object sender, EventArgs e)\n    {\n        if (IsFollowing && UserSettings.All.FollowShortcut == Key.None)\n        {\n            IsFollowing = false;\n\n            Dialog.Ok(LocalizationHelper.Get(\"S.StartUp.Recorder\"), LocalizationHelper.Get(\"S.Options.Warning.Follow.Header\"),\n                LocalizationHelper.Get(\"S.Options.Warning.Follow.Message\"), Icons.Warning);\n        }\n    }\n\n    private void Window_DpiChanged(object sender, DpiChangedEventArgs e)\n    {\n        _scale = e.NewDpi.DpiScaleX;\n\n        UpdateSize();\n        UpdateLocation();\n\n        WidthIntegerBox.Scale = _scale;\n        HeightIntegerBox.Scale = _scale;\n    }\n\n    private void Window_SizeChanged(object sender, SizeChangedEventArgs e)\n    {\n        UpdateSize();\n        AutoFitButtons();\n    }\n\n    private void Window_KeyDown(object sender, KeyEventArgs e)\n    {\n        var step = (Keyboard.Modifiers & ModifierKeys.Alt) != 0 ? 5 : 1;\n        var key = e.Key == Key.System ? e.SystemKey : e.Key;\n\n        if (Stage == RecorderStages.Stopped)\n        {\n            //Control + Shift: Expand both ways.\n            if ((Keyboard.Modifiers & ModifierKeys.Control) != 0 && (Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n            {\n                switch (key)\n                {\n                    case Key.Up:\n                        ResizeWindow(0, -step, 0, step);\n                        e.Handled = true;\n                        break;\n                    case Key.Down:\n                        ResizeWindow(0, step, 0, -step);\n                        e.Handled = true;\n                        break;\n                    case Key.Left:\n                        ResizeWindow(step, 0, -step, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Right:\n                        ResizeWindow(-step, 0, step, 0);\n                        e.Handled = true;\n                        break;\n                }\n\n                return;\n            }\n\n            //If the Shift key is pressed, the sizing mode is enabled (bottom right).\n            if ((Keyboard.Modifiers & ModifierKeys.Shift) != 0)\n            {\n                switch (key)\n                {\n                    case Key.Left:\n                        ResizeWindow(0, 0, -step, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Up:\n                        ResizeWindow(0, 0, 0, -step);\n                        e.Handled = true;\n                        break;\n                    case Key.Right:\n                        ResizeWindow(0, 0, step, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Down:\n                        ResizeWindow(0, 0, 0, step);\n                        e.Handled = true;\n                        break;\n                }\n\n                return;\n            }\n\n            //If the Control key is pressed, the sizing mode is enabled (top left).\n            if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)\n            {\n                switch (key)\n                {\n                    case Key.Left:\n                        ResizeWindow(-step, 0, 0, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Up:\n                        ResizeWindow(0, -step, 0, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Right:\n                        ResizeWindow(step, 0, 0, 0);\n                        e.Handled = true;\n                        break;\n                    case Key.Down:\n                        ResizeWindow(0, step, 0, 0);\n                        e.Handled = true;\n                        break;\n                }\n\n                return;\n            }\n        }\n\n        //If no other key is pressed, move the region.\n        switch (key)\n        {\n            case Key.Left:\n                MoveWindow(step, 0, 0, 0);\n                e.Handled = true;\n                break;\n            case Key.Up:\n                MoveWindow(0, step, 0, 0);\n                e.Handled = true;\n                break;\n            case Key.Right:\n                MoveWindow(0, 0, step, 0);\n                e.Handled = true;\n                break;\n            case Key.Down:\n                MoveWindow(0, 0, 0, step);\n                e.Handled = true;\n                break;\n        }\n    }\n\n    private void CommandGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)\n    {\n        if (Mouse.LeftButton == MouseButtonState.Pressed)\n            DragMove();\n    }\n\n    private void Window_LocationChanged(object sender, EventArgs e)\n    {\n        UpdateLocation();\n    }\n\n    private void SizeIntegerBox_MouseWheel(object sender, MouseWheelEventArgs e)\n    {\n        if (!(sender is IntegerBox box))\n            return;\n\n        var screenPoint = box.PointToScreen(new Point(0, 0));\n        var scale = this.Scale();\n\n        User32.SetCursorPos((int)(screenPoint.X + (box.ActualWidth / 2) * scale), (int)(screenPoint.Y + (box.ActualHeight / 2) * scale));\n    }\n\n    private async void System_PowerModeChanged(object sender, PowerModeChangedEventArgs e)\n    {\n        if (e.Mode == PowerModes.Suspend)\n        {\n            if (Stage == RecorderStages.Recording)\n                Pause();\n            else if (Stage == RecorderStages.PreStarting)\n                await Stop();\n\n            GC.Collect();\n        }\n    }\n\n    private async void SystemEvents_DisplaySettingsChanged(object sender, EventArgs eventArgs)\n    {\n        await UpdatePositioning();\n    }\n\n    private void SnapWindowButton_PreviewMouseDown(object sender, MouseButtonEventArgs e)\n    {\n        Mouse.Capture(this);\n\n        Cursor = Cursors.Cross;\n    }\n\n    private void CloseButton_Click(object sender, RoutedEventArgs e)\n    {\n        Close();\n    }\n\n    private async void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        //Save the settings\n        UserSettings.All.RecorderTop = Top;\n        UserSettings.All.RecorderLeft = Left;\n        UserSettings.All.RecorderHeight = (int) Height;\n        UserSettings.All.RecorderWidth = (int) Width;\n        UserSettings.Save();\n\n        #region Remove Hooks\n\n        try\n        {\n            _actHook.OnMouseActivity -= MouseHookTarget;\n            _actHook.KeyDown -= KeyHookTarget;\n            _actHook.Stop(); //Stop the user activity watcher.\n        }\n        catch (Exception) { }\n\n        #endregion\n\n        SystemEvents.PowerModeChanged -= System_PowerModeChanged;\n        SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged;\n\n        #region Stops the timers\n\n        if (Stage != RecorderStages.Stopped)\n        {\n            _preStartTimer.Stop();\n            _preStartTimer.Dispose();\n\n            await StopCapture();\n        }\n\n        //Garbage Collector Timer.\n        GarbageTimer?.Stop();\n        _followTimer?.Stop();\n\n        #endregion\n\n        //Clean all capture resources.\n        if (Capture != null)\n            await Capture.DisposeAsync();\n\n        GC.Collect();\n    }\n\n    #endregion\n\n    #region Hooks\n\n    /// <summary>\n    /// KeyHook event method. This fires when the user press a key.\n    /// </summary>\n    private async void KeyHookTarget(object sender, CustomKeyEventArgs e)\n    {\n        if (RegionSelectHelper.IsSelecting || Stage == RecorderStages.Discarding)\n            return;\n\n        //Capture when an user interactions happens.\n        if (Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction && !IsKeyboardFocusWithin)\n            await Snap();\n\n        //Record/snap or pause.\n        if (Keyboard.Modifiers.HasFlag(UserSettings.All.StartPauseModifiers) && e.Key == UserSettings.All.StartPauseShortcut)\n        {\n            if (UserSettings.All.CaptureFrequency == CaptureFrequencies.Manual)\n            {\n                _viewModel.SnapCommand.Execute(null, this);\n                return;\n            }\n\n            if (Stage == RecorderStages.Recording)\n                _viewModel.PauseCommand.Execute(null, this);\n            else\n            {\n                if (_viewModel.Region.IsEmpty && WindowState == WindowState.Minimized)\n                    WindowState = WindowState.Normal;\n\n                _viewModel.RecordCommand.Execute(null, this);\n            }\n\n            return;\n        }\n\n        if (Keyboard.Modifiers.HasFlag(UserSettings.All.StopModifiers) && e.Key == UserSettings.All.StopShortcut && (Stage == RecorderStages.Recording || Stage == RecorderStages.Paused || Stage == RecorderStages.PreStarting))\n            await Stop();\n        else if (Keyboard.Modifiers.HasFlag(UserSettings.All.DiscardModifiers) && e.Key == UserSettings.All.DiscardShortcut)\n            _viewModel.DiscardCommand.Execute(null, this);\n        else if (Keyboard.Modifiers.HasFlag(UserSettings.All.FollowModifiers) && e.Key == UserSettings.All.FollowShortcut)\n            UserSettings.All.CursorFollowing = IsFollowing = !IsFollowing;\n        else\n            KeyList.Add(new SimpleKeyGesture(e.Key, Keyboard.Modifiers, e.IsUppercase, e.IsInjected));\n    }\n\n    /// <summary>\n    /// MouseHook event method, detects the mouse clicks.\n    /// </summary>\n    private async void MouseHookTarget(object sender, SimpleMouseGesture args)\n    {\n        try\n        {\n            if (RegionSelectHelper.IsSelecting || Stage == RecorderStages.Discarding)\n                return;\n\n            //In the future, store each mouse event, with a timestamp, independently of the capture.\n            if (args.LeftButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.Left;\n            else if (args.RightButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.Right;\n            else if (args.MiddleButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.Middle;\n            else if (args.FirstExtraButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.FirstExtra;\n            else if (args.SecondExtraButton == MouseButtonState.Pressed)\n                RecordClicked = MouseButtons.SecondExtra;\n            else\n                RecordClicked = MouseButtons.None;\n\n            _posX = args.PosX;\n            _posY = args.PosY;\n\n            if (Stage == RecorderStages.Recording && args.IsInteraction && UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction)\n            {\n                var controlHit = VisualTreeHelper.HitTest(this, Mouse.GetPosition(this));\n\n                if (controlHit == null)\n                    await Snap();\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Error in mouse hook target.\");\n        }\n\n        if (WindowState == WindowState.Minimized || !IsMouseCaptured || Mouse.Captured == null)\n            return;\n\n        #region Get Handle and Window Rect\n\n        var handle = User32.WindowFromPoint(new PointW { X = args.PosX, Y = args.PosY });\n        var scale = this.Scale();\n\n        if (_lastHandle != handle)\n        {\n            if (_lastHandle != IntPtr.Zero)\n                Native.Helpers.Other.DrawFrame(_lastHandle, scale);\n\n            _lastHandle = handle;\n            Native.Helpers.Other.DrawFrame(handle, scale);\n        }\n\n        var rect = WindowHelper.TrueWindowRectangle(handle);\n\n        #endregion\n\n        if (args.LeftButton == MouseButtonState.Pressed && Mouse.LeftButton == MouseButtonState.Pressed)\n            return;\n\n        #region Mouse Up\n\n        Cursor = Cursors.Arrow;\n\n        try\n        {\n            #region Try to get the process\n\n            User32.GetWindowThreadProcessId(handle, out var id);\n            var target = Process.GetProcesses().FirstOrDefault(p => p.Id == id);\n\n            #endregion\n\n            if (target is { ProcessName: \"ScreenToGif\" })\n                return;\n\n            //Clear up the selected window frame.\n            Native.Helpers.Other.DrawFrame(handle, scale);\n            _lastHandle = IntPtr.Zero;\n\n            #region Values\n\n            //TODO: Test values with other versions of windows.\n            var top = (rect.Y / scale) - Constants.TopOffset + 0;\n            var left = (rect.X / scale) - Constants.LeftOffset + 0;\n            var height = ((rect.Height + 1) / scale) + Constants.TopOffset + Constants.BottomOffset - 1;\n            var width = ((rect.Width + 1) / scale) + Constants.LeftOffset + Constants.RightOffset - 1;\n\n            #endregion\n\n            #region Validate\n\n            if (top < SystemParameters.VirtualScreenTop)\n                top = SystemParameters.VirtualScreenTop - 1;\n            if (left < SystemParameters.VirtualScreenLeft)\n                left = SystemParameters.VirtualScreenLeft - 1;\n            if (SystemInformation.VirtualScreen.Height < (height + top) * scale) //TODO: Check if works with 2 screens.\n                height = (SystemInformation.VirtualScreen.Height - top) / scale;\n            if (SystemInformation.VirtualScreen.Width < (width + left) * scale)\n                width = (SystemInformation.VirtualScreen.Width - left) / scale;\n\n            #endregion\n\n            Top = top;\n            Left = left;\n            Height = height;\n            Width = width;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error • Snap To Window\");\n        }\n        finally\n        {\n            ReleaseMouseCapture();\n        }\n\n        #endregion\n    }\n\n    #endregion\n\n    #region Timers\n\n    private void PreStart_Elapsed(object sender, EventArgs e)\n    {\n        if (_preStartCount >= 1)\n        {\n            Title = \"ScreenToGif - \" + LocalizationHelper.Get(\"S.Recorder.PreStarting\");\n            DisplayTimer.SetElapsed(-_preStartCount);\n            Splash.SetTime(-_preStartCount);\n            _preStartCount--;\n            return;\n        }\n\n        _preStartTimer.Stop();\n        Title = \"ScreenToGif\";\n        IsRecording = true;\n\n        StartCapture();\n\n        Stage = RecorderStages.Recording;\n        AutoFitButtons();\n\n        if (Arguments.StartCapture && Arguments.Limit > TimeSpan.Zero)\n            _limitTimer.Start();\n    }\n\n    private void FollowTimer_Tick(object sender, EventArgs e)\n    {\n        if (WindowState != WindowState.Normal || _prevPosX == _posX && _prevPosY == _posY || Stage == RecorderStages.Paused || Stage == RecorderStages.Stopped || Stage == RecorderStages.Discarding ||\n            (Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers == UserSettings.All.DisableFollowModifiers))\n            return;\n\n        _prevPosX = _posX;\n        _prevPosY = _posY;\n\n        //TODO: Test with 2 monitors.\n        //if (isCentered)\n        //{\n        //    //Hide the UI.\n        //    _showBorderTimer.Stop();\n        //    BeginStoryboard(this.FindStoryboard(\"HideRectangleStoryboard\"), HandoffBehavior.SnapshotAndReplace);\n        //    _showBorderTimer.Start();\n\n        //    //_offsetX = _posX - Region.Width / 2d;\n        //    //_offsetY = _posY - Region.Height / 2d;\n\n        //    //Region = new Rect(new Point(_offsetX.Clamp(-1, Width - Region.Width + 1), _offsetY.Clamp(-1, Height - Region.Height + 1)), Region.Size);\n        //    //DashedRectangle.Refresh();\n        //}\n        //else\n        {\n            if (_width < 1)\n                UpdateSize();\n\n            //Only move to the left if 'Mouse.X < Rect.L' and only move to the right if 'Mouse.X > Rect.R'\n            _offsetX = _posX - UserSettings.All.FollowBuffer < _left ? _posX - _left - UserSettings.All.FollowBuffer : _posX + UserSettings.All.FollowBuffer > _left + _width ?\n                _posX - (_left + _width) + UserSettings.All.FollowBuffer : 0;\n            _offsetY = _posY - UserSettings.All.FollowBuffer < _top ? _posY - _top - UserSettings.All.FollowBuffer : _posY + UserSettings.All.FollowBuffer > _top + _height ?\n                _posY - (_top + _height) + UserSettings.All.FollowBuffer : 0;\n\n            //Hide the UI when moving.\n            if (_posX - UserSettings.All.FollowBuffer - UserSettings.All.FollowBufferInvisible < _left || _posX + UserSettings.All.FollowBuffer + UserSettings.All.FollowBufferInvisible > _left + _width ||\n                _posY - UserSettings.All.FollowBuffer - UserSettings.All.FollowBufferInvisible < _top || _posY + UserSettings.All.FollowBuffer + UserSettings.All.FollowBufferInvisible > _top + _height)\n            {\n                _showBorderTimer.Stop();\n                HideInternals();\n                BeginStoryboard(this.FindStoryboard(\"HideWindowStoryboard\"), HandoffBehavior.Compose);\n                _showBorderTimer.Start();\n            }\n\n            this.Refresh();\n        }\n\n        //Rearrange the window.\n        Left = (Left + _offsetX / _scale).Clamp(0 - Constants.LeftOffset, SystemParameters.VirtualScreenWidth - Width + Constants.RightOffset);\n        Top = (Top + _offsetY / _scale).Clamp(0 - Constants.TopOffset, SystemParameters.VirtualScreenHeight - Height + Constants.BottomOffset);\n    }\n\n    private void ShowBorderTimer_Tick(object sender, EventArgs e)\n    {\n        _showBorderTimer.Stop();\n\n        this.Refresh();\n        ShowInternals();\n\n        BeginStoryboard(this.FindStoryboard(\"ShowWindowStoryboard\"), HandoffBehavior.Compose);\n    }\n\n    private async void Limit_Elapsed(object sender, EventArgs e)\n    {\n        _limitTimer.Stop();\n\n        if (!IsLoaded || (Stage != RecorderStages.Recording && Stage == RecorderStages.PreStarting))\n            return;\n\n        await Stop();\n    }\n\n    #endregion\n\n    #region Methods\n\n    private void RegisterCommands()\n    {\n        CommandBindings.Clear();\n        CommandBindings.AddRange(new CommandBindingCollection\n        {\n            new CommandBinding(_viewModel.CloseCommand, (_, _) => Close(),\n                (_, args) => args.CanExecute = Stage == RecorderStages.Stopped || (UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction && (Project == null || !Project.Any))),\n\n            new CommandBinding(_viewModel.OptionsCommand, ShowOptions,\n                (_, args) => args.CanExecute = (Stage != RecorderStages.Recording || UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction) && Stage != RecorderStages.PreStarting),\n\n            new CommandBinding(_viewModel.SnapToWindowCommand, null,\n                (_, args) => args.CanExecute = Stage == RecorderStages.Stopped || (Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction && (Project == null || Project.Frames.Count == 0))),\n\n            new CommandBinding(_viewModel.SwitchFrequencyCommand, SwitchFrequency,\n                (_, args) =>\n                {\n                    if (args.Parameter != null && !args.Parameter.Equals(\"Switch\"))\n                    {\n                        args.CanExecute = true;\n                        return;\n                    }\n\n                    args.CanExecute = ((Stage != RecorderStages.Recording || Project == null) || UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction) && Stage != RecorderStages.PreStarting;\n                }),\n\n            new CommandBinding(_viewModel.RecordCommand, async (_, _) => await Record(),\n                (_, args) => args.CanExecute = Stage is RecorderStages.Stopped or RecorderStages.Paused && UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual),\n\n            new CommandBinding(_viewModel.PauseCommand, (_, _) => Pause(),\n                (_, args) => args.CanExecute = Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual),\n\n            new CommandBinding(_viewModel.SnapCommand, async (_, _) => await Snap(),\n                (_, args) => args.CanExecute = Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency == CaptureFrequencies.Manual),\n\n            new CommandBinding(_viewModel.StopLargeCommand, async (_, _) => await Stop(),\n                (_, args) => args.CanExecute = (Stage == RecorderStages.Recording && UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual && UserSettings.All.CaptureFrequency != CaptureFrequencies.Interaction &&\n                    !UserSettings.All.RecorderDisplayDiscard) || Stage == RecorderStages.PreStarting),\n\n            new CommandBinding(_viewModel.StopCommand, async (_, _) => await Stop(),\n                (_, args) =>\n                {\n                    args.CanExecute = Stage == RecorderStages.Recording &&\n                        ((UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual && UserSettings.All.CaptureFrequency != CaptureFrequencies.Interaction && !UserSettings.All.RecorderDisplayDiscard) || FrameCount > 0) || Stage == RecorderStages.Paused;\n                }),\n\n            new CommandBinding(_viewModel.DiscardCommand, async (_, _) => await Discard(),\n                (_, args) => args.CanExecute = (Stage == RecorderStages.Paused && FrameCount > 0) || (Stage == RecorderStages.Recording && (UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction || UserSettings.All.RecorderDisplayDiscard) && FrameCount > 0)),\n        });\n\n        _viewModel.RefreshKeyGestures();\n    }\n\n    private void ShowOptions(object sender, ExecutedRoutedEventArgs e)\n    {\n        Topmost = false;\n\n        var options = new Options(Options.RecorderIndex);\n        options.ShowDialog();\n\n        DetectCaptureFrequency();\n        RegisterCommands();\n        DetectThinMode();\n\n        //If not recording (or recording in manual/interactive mode, but with no frames captured yet), adjust the maximum bounds for the recorder.\n        if (Stage == RecorderStages.Stopped || ((UserSettings.All.CaptureFrequency == CaptureFrequencies.Manual || UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction) && Stage == RecorderStages.Recording && FrameCount == 0))\n            _viewModel.IsDirectMode = UserSettings.All.UseDesktopDuplication;\n\n        Topmost = true;\n    }\n\n    private void SwitchFrequency(object sender, ExecutedRoutedEventArgs e)\n    {\n        //When this event is fired from clicking on the switch button.\n        if (e.Parameter?.Equals(\"Switch\") == true)\n        {\n            switch (UserSettings.All.CaptureFrequency)\n            {\n                case CaptureFrequencies.Manual:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.Interaction;\n                    break;\n\n                case CaptureFrequencies.Interaction:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.PerSecond;\n                    break;\n\n                case CaptureFrequencies.PerSecond:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.PerMinute;\n                    break;\n\n                case CaptureFrequencies.PerMinute:\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.PerHour;\n                    break;\n\n                default: //PerHour.\n                    UserSettings.All.CaptureFrequency = CaptureFrequencies.Manual;\n                    break;\n            }\n        }\n\n        //When event is fired when the frequency is picked from the context menu, just switch the labels.\n        DetectCaptureFrequency();\n        AutoFitButtons();\n    }\n\n    /// <summary>\n    /// Method that starts or pauses the recording\n    /// </summary>\n    internal async Task Record()\n    {\n        try\n        {\n            switch (Stage)\n            {\n                case RecorderStages.Stopped:\n\n                    #region If interaction mode\n\n                    if (UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction)\n                    {\n                        Stage = RecorderStages.Recording;\n                        SetTaskbarButtonOverlay();\n                        return;\n                    }\n\n                    #endregion\n\n                    #region To record\n\n                    Project = new ProjectInfo().CreateProjectFolder(ProjectByType.ScreenRecorder);\n\n                    KeyList.Clear();\n                    FrameCount = 0;\n\n                    await Task.Factory.StartNew(UpdateScreenDpi);\n                    await PrepareCapture();\n                    HideGuidelines();\n\n                    HeightIntegerBox.IsEnabled = false;\n                    WidthIntegerBox.IsEnabled = false;\n                    FrequencyIntegerUpDown.IsEnabled = false;\n\n                    IsRecording = true;\n                    Topmost = true;\n\n                    #region Start\n\n                    if (UserSettings.All.UsePreStart)\n                    {\n                        Stage = RecorderStages.PreStarting;\n\n                        Title = $\"ScreenToGif ({LocalizationHelper.Get(\"S.Recorder.PreStart\")} {UserSettings.All.PreStartValue}s)\";\n                        DisplayTimer.SetElapsed(-UserSettings.All.PreStartValue);\n\n                        _preStartCount = UserSettings.All.PreStartValue - 1;\n                        _preStartTimer.Start();\n                        return;\n                    }\n\n                    StartCapture();\n\n                    Stage = RecorderStages.Recording;\n                    AutoFitButtons();\n                    SetTaskbarButtonOverlay();\n\n                    if (Arguments.StartCapture && Arguments.Limit > TimeSpan.Zero)\n                        _limitTimer.Start();\n\n                    break;\n\n                #endregion\n\n                #endregion\n\n                case RecorderStages.Paused:\n\n                    #region To record again\n\n                    Stage = RecorderStages.Recording;\n                    Title = \"ScreenToGif\";\n\n                    SetTaskbarButtonOverlay();\n                    await PrepareCapture(false);\n                    HideGuidelines();\n                    AutoFitButtons();\n\n                    //If it's interaction mode, the capture is done via Snap().\n                    if (UserSettings.All.CaptureFrequency == CaptureFrequencies.Interaction)\n                        return;\n\n                    FrequencyIntegerUpDown.IsEnabled = false;\n\n                    StartCapture();\n                    break;\n\n                #endregion\n            }\n        }\n        catch (GraphicsConfigurationException g)\n        {\n            LogWriter.Log(g, \"Impossible to start the recording due to wrong graphics adapter.\");\n            GraphicsConfigurationDialog.Ok(g, _viewModel.CurrentMonitor);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to start the recording.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.StartPauseNotPossible\"), e.Message, e);\n        }\n        finally\n        {\n            Arguments.ClearAutomationArgs();\n\n            //Wait a bit, then refresh the commands. Some of the commands are dependent of the FrameCount property.\n            await Task.Delay(TimeSpan.FromMilliseconds(GetCaptureInterval() + 200));\n\n            CommandManager.InvalidateRequerySuggested();\n        }\n    }\n\n    /// <summary>\n    /// Capture a single frame.\n    /// </summary>\n    private async Task Snap()\n    {\n        var snapTriggerDelay = GetTriggerDelay();\n\n        if (snapTriggerDelay != 0)\n            await Task.Delay(snapTriggerDelay);\n\n        HideGuidelines();\n\n        if (Project == null || Project.Frames.Count == 0)\n        {\n            try\n            {\n                Project = new ProjectInfo().CreateProjectFolder(ProjectByType.ScreenRecorder);\n\n                await PrepareCapture();\n\n                IsRecording = true;\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to start the screencasting.\");\n                ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible\"), ex.Message, ex);\n                return;\n            }\n        }\n\n        #region Take the screenshot\n\n        try\n        {\n            var limit = 0;\n            do\n            {\n                FrameCount = await Capture.ManualCaptureAsync(new FrameInfo(RecordClicked, KeyList), UserSettings.All.ShowCursor);\n\n                if (limit > 5)\n                    throw new Exception(\"Impossible to capture the manual screenshot.\");\n\n                limit++;\n            }\n            while (FrameCount == 0);\n\n            KeyList.Clear();\n\n            DisplayTimer.ManuallyCapturedCount++;\n            CommandManager.InvalidateRequerySuggested();\n        }\n        catch (GraphicsConfigurationException g)\n        {\n            IsRecording = false;\n\n            LogWriter.Log(g, \"Impossible to start the recording due to wrong graphics adapter.\");\n            GraphicsConfigurationDialog.Ok(g, _viewModel.CurrentMonitor);\n        }\n        catch (Exception e)\n        {\n            IsRecording = false;\n\n            LogWriter.Log(e, \"Impossible to capture the manual screenshot.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible\"), LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible.Info\"), e);\n        }\n\n        #endregion\n    }\n\n    internal void Pause()\n    {\n        try\n        {\n            if (Stage != RecorderStages.Recording || UserSettings.All.CaptureFrequency is CaptureFrequencies.Manual or CaptureFrequencies.Interaction)\n                return;\n\n            Stage = RecorderStages.Paused;\n            Title = \"ScreenToGif\";\n\n            PauseCapture();\n            _limitTimer.Stop();\n\n            FrequencyIntegerUpDown.IsEnabled = true;\n            DisplayGuidelines();\n            AutoFitButtons();\n            SetTaskbarButtonOverlay();\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to pause the recording.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.StartPauseNotPossible\"), e.Message, e);\n        }\n    }\n\n    /// <summary>\n    /// Stops the recording or the Pre-Start countdown.\n    /// </summary>\n    private async Task Stop()\n    {\n        try\n        {\n            ControlStackPanel.IsEnabled = false;\n            Title = \"ScreenToGif - \" + LocalizationHelper.Get(\"S.Recorder.Stopping\");\n            Cursor = Cursors.AppStarting;\n\n            _limitTimer.Stop();\n            await StopCapture();\n\n            if (Stage is RecorderStages.Recording or RecorderStages.Paused && Project?.Any == true)\n            {\n                #region Finishes if it's recording and it has any frames\n\n                await Task.Delay(100);\n\n                Close();\n                return;\n\n                #endregion\n            }\n\n            #region Stops if it is not recording, or has no frames\n\n            //Stop the pre-start timer to kill pre-start warming up.\n            if (Stage == RecorderStages.PreStarting)\n                _preStartTimer.Stop();\n\n            Stage = RecorderStages.Stopped;\n\n            //Enables the controls that are disabled while recording;\n            FrequencyIntegerUpDown.IsEnabled = true;\n            ControlStackPanel.IsEnabled = true;\n            HeightIntegerBox.IsEnabled = true;\n            WidthIntegerBox.IsEnabled = true;\n\n            IsRecording = false;\n            Topmost = true;\n\n            AutoFitButtons();\n            DisplayGuidelines();\n            SetTaskbarButtonOverlay();\n\n            #endregion\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error on the Stop function\");\n\n            ErrorDialog.Ok(\"ScreenToGif\", \"Error while stopping\", ex.Message, ex);\n        }\n        finally\n        {\n            if (IsLoaded)\n            {\n                Title = \"ScreenToGif\";\n                Cursor = Cursors.Arrow;\n                ControlStackPanel.IsEnabled = true;\n            }\n        }\n    }\n\n    private async Task Discard()\n    {\n        Pause();\n\n        if (UserSettings.All.NotifyRecordingDiscard && !Dialog.Ask(LocalizationHelper.Get(\"S.Recorder.Discard.Title\"),\n                LocalizationHelper.Get(\"S.Recorder.Discard.Instruction\"), LocalizationHelper.Get(\"S.Recorder.Discard.Message\"), false))\n            return;\n\n        await StopCapture();\n\n        FrameCount = 0;\n        Stage = RecorderStages.Discarding;\n        OutterGrid.IsEnabled = false;\n        Cursor = Cursors.AppStarting;\n        SetTaskbarButtonOverlay();\n\n        await Task.Run(() =>\n        {\n            try\n            {\n                #region Remove all the files\n\n                //Not sure if needed.\n                foreach (var frame in Project.Frames)\n                {\n                    try\n                    {\n                        if (File.Exists(frame.Path))\n                            File.Delete(frame.Path);\n                    }\n                    catch (Exception)\n                    { }\n                }\n\n                try\n                {\n                    Directory.Delete(Project.FullPath, true);\n                }\n                catch (Exception ex)\n                {\n                    LogWriter.Log(ex, \"Delete temp path\");\n                }\n\n                #endregion\n\n                Project.Frames.Clear();\n            }\n            catch (IOException io)\n            {\n                LogWriter.Log(io, \"Error while trying to discard the recording\");\n            }\n            catch (Exception ex)\n            {\n                Dispatcher.Invoke(() => Dialog.Ok(\"Discard Error\", \"Error while trying to discard the recording\", ex.Message));\n                LogWriter.Log(ex, \"Error while trying to discard the recording\");\n            }\n        });\n\n        //Enables the controls that are disabled while recording;\n        FrequencyIntegerUpDown.IsEnabled = true;\n        HeightIntegerBox.IsEnabled = true;\n        WidthIntegerBox.IsEnabled = true;\n        OutterGrid.IsEnabled = true;\n\n        Title = \"ScreenToGif\";\n        Cursor = Cursors.Arrow;\n        IsRecording = false;\n\n        DetectCaptureFrequency();\n        AutoFitButtons();\n        SetTaskbarButtonOverlay();\n    }\n\n    /// <summary>\n    /// Changes the way that the Record and Stop buttons are shown.\n    /// </summary>\n    private void AutoFitButtons(bool force = false)\n    {\n        if (LowerGrid.ActualWidth < 360)\n        {\n            if (MinimizeVisibility == Visibility.Collapsed && !force)\n                return;\n\n            _viewModel.ButtonStyle = (Style)FindResource(\"Style.Button.NoText\");\n\n            MinimizeVisibility = Visibility.Collapsed;\n\n            if (IsThin)\n                CaptionText.Visibility = Visibility.Collapsed;\n        }\n        else\n        {\n            if (MinimizeVisibility == Visibility.Visible && !force)\n                return;\n\n            _viewModel.ButtonStyle = (Style)FindResource(\"Style.Button.Horizontal\");\n\n            MinimizeVisibility = Visibility.Visible;\n\n            if (IsThin)\n                CaptionText.Visibility = Visibility.Visible;\n        }\n    }\n\n\n    private void UpdateScreenDpi()\n    {\n        try\n        {\n            var source = Dispatcher.Invoke(() => PresentationSource.FromVisual(this));\n\n            if (source?.CompositionTarget != null)\n                _scale = Dispatcher.Invoke(() => source.CompositionTarget.TransformToDevice.M11);\n\n            Dispatcher.Invoke(() =>\n            {\n                if (_viewModel.Monitors?.Any() == true)\n                {\n                    UpdateSize();\n                    UpdateLocation();\n                }\n\n                WidthIntegerBox.Scale = _scale;\n                HeightIntegerBox.Scale = _scale;\n            });\n        }\n        finally\n        {\n            GC.Collect(1);\n        }\n    }\n\n    private void UpdateSize()\n    {\n        //If minimized, assume that the position is the same.\n        if (WindowState != WindowState.Minimized)\n        {\n            _width = (int)Math.Round((Width - Constants.HorizontalOffset) * _scale);\n            _height = (int)Math.Round((Height - Constants.VerticalOffset) * _scale);\n        }\n\n        _viewModel.Region = new Rect(_viewModel.Region.TopLeft, new Size(_width, _height));\n\n        if (Capture != null)\n        {\n            Capture.Width = _width;\n            Capture.Height = _height;\n        }\n\n        DetectMonitorChanges(true);\n    }\n\n    private void UpdateLocation()\n    {\n        UserSettings.All.RecorderLeft = _left = (int)Math.Round((Math.Round(Left, MidpointRounding.AwayFromZero) + Constants.LeftOffset) * _scale);\n        UserSettings.All.RecorderTop = _top = (int)Math.Round((Math.Round(Top, MidpointRounding.AwayFromZero) + Constants.TopOffset) * _scale);\n\n        _viewModel.Region = new Rect(new Point(_left, _top), _viewModel.Region.BottomRight);\n\n        if (Capture == null)\n            return;\n\n        Capture.Left = _left;\n        Capture.Top = _top;\n\n        DetectMonitorChanges(true);\n    }\n\n    private async void DetectMonitorChanges(bool detectCurrent = false)\n    {\n        if (detectCurrent)\n        {\n            var interop = new System.Windows.Interop.WindowInteropHelper(this);\n            var current = Screen.FromHandle(interop.Handle);\n\n            _viewModel.CurrentMonitor = _viewModel.Monitors.FirstOrDefault(f => f.Name == current.DeviceName);\n        }\n\n        if (_viewModel.CurrentMonitor != null && _viewModel.CurrentMonitor.Handle != _viewModel.PreviousMonitor?.Handle)\n        {\n            if (_viewModel.PreviousMonitor != null && Stage == RecorderStages.Recording && Project?.Any == true)\n            {\n                Pause();\n\n                Capture.DeviceName = _viewModel.CurrentMonitor.Name;\n                Capture?.ResetConfiguration();\n\n                await Record();\n            }\n\n            _viewModel.PreviousMonitor = _viewModel.CurrentMonitor;\n        }\n    }\n\n    private bool UpdatePositioning2(bool startup = false)\n    {\n        try\n        {\n            var top = UserSettings.All.RecorderTop;\n            var left = UserSettings.All.RecorderLeft;\n\n            //If the position was never set.\n            if (double.IsNaN(top) || double.IsNaN(left))\n            {\n                //Let it center on screen when the window is loading.\n                if (startup)\n                    return false;\n\n                //Let the code below decide where to position the screen.\n                top = 0;\n                left = 0;\n            }\n\n            //The catch here is to get the closest monitor from current Top/Left point.\n            var monitors = MonitorHelper.AllMonitorsGranular();\n            var closest = monitors.FirstOrDefault(x => x.Bounds.Contains(new Point((int)left, (int)top))) ?? monitors.FirstOrDefault(x => x.IsPrimary) ?? monitors.FirstOrDefault();\n\n            if (closest == null)\n                return false;\n\n            //To much to the Left.\n            if (closest.WorkingArea.Left > UserSettings.All.RecorderLeft + UserSettings.All.RecorderWidth - 100)\n                left = closest.WorkingArea.Left;\n\n            //Too much to the top.\n            if (closest.WorkingArea.Top > UserSettings.All.RecorderTop + UserSettings.All.RecorderHeight - 100)\n                top = closest.WorkingArea.Top;\n\n            //Too much to the right.\n            if (closest.WorkingArea.Right < UserSettings.All.RecorderLeft + 100)\n                left = closest.WorkingArea.Right - UserSettings.All.RecorderWidth;\n\n            //Too much to the bottom.\n            if (closest.WorkingArea.Bottom < UserSettings.All.RecorderTop + 100)\n                top = closest.WorkingArea.Bottom - UserSettings.All.RecorderHeight;\n\n            Top = UserSettings.All.RecorderTop = top;\n            Left = UserSettings.All.RecorderLeft = left;\n\n            return true;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to position the recorder window.\");\n            return false;\n        }\n        finally\n        {\n            DetectMonitorChanges(true);\n        }\n    }\n\n    private async Task UpdatePositioning(bool startup = false)\n    {\n        if (!startup)\n        {\n            switch (Stage)\n            {\n                case RecorderStages.PreStarting:\n                {\n                    await Stop();\n                    break;\n                }\n                case RecorderStages.Recording:\n                {\n                    if (UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual)\n                        Pause();\n\n                    break;\n                }\n            }\n        }\n        else\n        {\n            //The user can opt out of the using the previous position and size.\n            if (!UserSettings.All.RecorderRememberPosition)\n            {\n                UserSettings.All.RecorderLeft = double.NaN;\n                UserSettings.All.RecorderTop = double.NaN;\n\n                if (!UserSettings.All.RecorderRememberSize)\n                {\n                    UserSettings.All.RecorderWidth = 518;\n                    UserSettings.All.RecorderHeight = 269;\n                }\n            }\n\n            //Command line arguments were sent.\n            if (Arguments.Region != Rect.Empty)\n            {\n                UserSettings.All.RecorderLeft = Arguments.Region.Left - Constants.LeftOffset;\n                UserSettings.All.RecorderTop = Arguments.Region.Top - Constants.TopOffset;\n                UserSettings.All.RecorderWidth = (int)Arguments.Region.Width + Constants.HorizontalOffset;\n                UserSettings.All.RecorderHeight = (int)Arguments.Region.Height + Constants.VerticalOffset;\n                Arguments.Region = Rect.Empty;\n            }\n        }\n\n        //Since the list of monitors could have been changed, it needs to be queried again.\n        _viewModel.Monitors = MonitorHelper.AllMonitorsGranular();\n\n        //Detect closest screen to the point (previously selected top/left point or current mouse coordinate).\n        var point = startup ? (double.IsNaN(UserSettings.All.RecorderTop) || double.IsNaN(UserSettings.All.RecorderLeft) ?\n            CursorHelper.GetMousePosition(_scale, Left, Top) : new Point((int)UserSettings.All.RecorderLeft, (int)UserSettings.All.RecorderTop)) : new Point((int) Left, (int) Top);\n        var closest = _viewModel.Monitors.FirstOrDefault(x => x.Bounds.Contains(point)) ?? _viewModel.Monitors.FirstOrDefault(x => x.IsPrimary) ?? _viewModel.Monitors.FirstOrDefault();\n\n        if (closest == null)\n            throw new Exception(\"It was not possible to get a list of known screens.\");\n\n        //Move the window to the correct location.\n        var left = UserSettings.All.RecorderLeft;\n        var top = UserSettings.All.RecorderTop;\n\n        if (double.IsNaN(UserSettings.All.RecorderTop) || double.IsNaN(UserSettings.All.RecorderLeft))\n        {\n            left = closest.WorkingArea.Left + closest.WorkingArea.Width / 2d - ActualWidth / 2d;\n            top = closest.WorkingArea.Top + closest.WorkingArea.Height / 2d - ActualHeight / 2d;\n        }\n        else\n        {\n            //To much to the Left.\n            if (closest.WorkingArea.Left > UserSettings.All.RecorderLeft + UserSettings.All.RecorderWidth - 100)\n                left = closest.WorkingArea.Left;\n\n            //Too much to the top.\n            if (closest.WorkingArea.Top > UserSettings.All.RecorderTop + UserSettings.All.RecorderHeight - 100)\n                top = closest.WorkingArea.Top;\n\n            //Too much to the right.\n            if (closest.WorkingArea.Right < UserSettings.All.RecorderLeft + 100)\n                left = closest.WorkingArea.Right - UserSettings.All.RecorderWidth;\n\n            //Too much to the bottom.\n            if (closest.WorkingArea.Bottom < UserSettings.All.RecorderTop + 100)\n                top = closest.WorkingArea.Bottom - UserSettings.All.RecorderHeight;\n        }\n\n        Top = closest.NativeBounds.Top + 1;\n        Left = closest.NativeBounds.Left + 1;\n\n        var diff = this.Scale() / closest.Scale;\n        Top = UserSettings.All.RecorderTop = top / diff;\n        Left = UserSettings.All.RecorderLeft = left / diff;\n        Height = UserSettings.All.RecorderHeight;\n        Width = UserSettings.All.RecorderWidth;\n\n        //After moving, detect the current monitor using a more reliable method.\n        var windowInteropHelper = new System.Windows.Interop.WindowInteropHelper(this);\n        var current = Screen.FromHandle(windowInteropHelper.Handle);\n\n        _viewModel.CurrentMonitor =  _viewModel.Monitors.FirstOrDefault(f => f.Name == current.DeviceName) ?? closest;\n\n        var regionLeft = (int)Math.Round((Math.Round(Left, MidpointRounding.AwayFromZero) + Constants.LeftOffset) * _viewModel.CurrentMonitor.Scale);\n        var regionTop = (int)Math.Round((Math.Round(Top, MidpointRounding.AwayFromZero) + Constants.TopOffset) * _viewModel.CurrentMonitor.Scale);\n        var regionWidth = (int)Math.Round((UserSettings.All.RecorderWidth - Constants.HorizontalOffset) * _viewModel.CurrentMonitor.Scale);\n        var regionHeight = (int)Math.Round((UserSettings.All.RecorderHeight - Constants.VerticalOffset) * _viewModel.CurrentMonitor.Scale);\n\n        if (regionWidth < 0 || regionHeight < 0)\n        {\n            var desc = $\"Scale: {this.Scale()}\\n\\nScreen: {closest.AdapterName}\\nBounds: {closest.Bounds}\\n\\nTopLeft: {top}x{left}\\nWidthHeight: {regionWidth}x{regionHeight}\";\n\n            LogWriter.Log(\"Wrong recorder window sizing\", desc);\n\n            Height = UserSettings.All.RecorderHeight = 500;\n            Width = UserSettings.All.RecorderWidth = 250;\n            return;\n        }\n\n        _viewModel.Region = new Rect(regionLeft, regionTop, regionWidth, regionHeight);\n    }\n\n    internal override void OnFollowingChanged()\n    {\n        Follow();\n\n        base.OnFollowingChanged();\n    }\n\n    private void Follow()\n    {\n        if (IsFollowing && UserSettings.All.FollowShortcut != Key.None)\n        {\n            _followTimer.Interval = (1000 / UserSettings.All.LatestFps) / 2;\n            _followTimer.Start();\n            return;\n        }\n\n        _followTimer.Stop();\n    }\n\n    private async Task PrepareCapture(bool isNew = true)\n    {\n        if (isNew && Capture != null)\n        {\n            await Capture.DisposeAsync();\n            Capture = null;\n        }\n\n        //If the capture helper was initialized already, ignore this.\n        if (Capture != null)\n            return;\n\n        if (UserSettings.All.UseDesktopDuplication)\n        {\n            //Check if Windows 8 or newer.\n            if (!OperationalSystemHelper.IsWin8OrHigher())\n                throw new Exception(LocalizationHelper.Get(\"S.Recorder.Warning.Windows8\"));\n\n            Capture = GetDirectCapture();\n            Capture.DeviceName = _viewModel.CurrentMonitor.Name;\n            _viewModel.IsDirectMode = true;\n        }\n        else\n        {\n            //Capture with BitBlt.\n            Capture = UserSettings.All.UseMemoryCache ? new CachedCapture() : new ImageCapture();\n            _viewModel.IsDirectMode = true;\n        }\n\n        Capture.OnError += exception =>\n        {\n            Dispatcher?.Invoke(() =>\n            {\n                //Pause the recording and show the error.\n                Pause();\n\n                if (exception is GraphicsConfigurationException)\n                    GraphicsConfigurationDialog.Ok(exception, _viewModel.CurrentMonitor);\n                else\n                    ErrorDialog.Ok(\"ScreenToGif\", LocalizationHelper.Get(\"S.Recorder.Warning.CaptureNotPossible\"), exception.Message, exception);\n\n                Capture.Dispose();\n                Capture = null;\n            });\n        };\n\n        var dpi = MonitorHelper.AllMonitors.FirstOrDefault(f => f.IsPrimary)?.Dpi ?? 96d;\n\n        Capture.Start(GetCaptureInterval(), _left, _top, _width, _height, dpi / 96d, Project);\n    }\n\n    private void DetectCaptureFrequency()\n    {\n        switch (UserSettings.All.CaptureFrequency)\n        {\n            case CaptureFrequencies.Manual:\n                FrequencyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Recorder.Manual.Short\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Collapsed;\n                FrequencyViewbox.Visibility = Visibility.Collapsed;\n                AdjustToManual();\n                break;\n            case CaptureFrequencies.Interaction:\n                FrequencyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Recorder.Interaction.Short\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Collapsed;\n                FrequencyViewbox.Visibility = Visibility.Collapsed;\n                AdjustToInteraction();\n                break;\n            case CaptureFrequencies.PerSecond:\n                FrequencyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Recorder.Fps.Short\");\n                FrequencyIntegerUpDown.SetResourceReference(ToolTipProperty, \"S.Recorder.Fps\");\n                FrequencyViewbox.SetResourceReference(ToolTipProperty, \"S.Recorder.Fps.Range\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Visible;\n                FrequencyViewbox.Visibility = Visibility.Visible;\n                AdjustToAutomatic();\n                break;\n\n            case CaptureFrequencies.PerMinute:\n                FrequencyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Recorder.Fpm.Short\");\n                FrequencyIntegerUpDown.SetResourceReference(ToolTipProperty, \"S.Recorder.Fpm\");\n                FrequencyViewbox.SetResourceReference(ToolTipProperty, \"S.Recorder.Fpm.Range\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Visible;\n                FrequencyViewbox.Visibility = Visibility.Visible;\n                AdjustToAutomatic();\n                break;\n\n            default: //PerHour.\n                FrequencyButton.SetResourceReference(ExtendedButton.TextProperty, \"S.Recorder.Fph.Short\");\n                FrequencyIntegerUpDown.SetResourceReference(ToolTipProperty, \"S.Recorder.Fph\");\n                FrequencyViewbox.SetResourceReference(ToolTipProperty, \"S.Recorder.Fph.Range\");\n                FrequencyIntegerUpDown.Visibility = Visibility.Visible;\n                FrequencyViewbox.Visibility = Visibility.Visible;\n                AdjustToAutomatic();\n                break;\n        }\n\n        CommandManager.InvalidateRequerySuggested();\n    }\n\n    private void AdjustToManual()\n    {\n        Stage = RecorderStages.Recording;\n        Title = \"ScreenToGif\";\n        FrameRate.Start(HasFixedDelay(), GetFixedDelay());\n\n        AutoFitButtons();\n        DisplayGuidelines();\n    }\n\n    private void AdjustToInteraction()\n    {\n        Stage = Project?.Frames?.Count > 0 ? RecorderStages.Paused : RecorderStages.Stopped;\n        Title = \"ScreenToGif\";\n        FrameRate.Start(HasFixedDelay(), GetFixedDelay());\n\n        AutoFitButtons();\n        DisplayGuidelines();\n    }\n\n    private void AdjustToAutomatic()\n    {\n        Stage = Project?.Frames?.Count > 0 ? RecorderStages.Paused : RecorderStages.Stopped;\n        Title = \"ScreenToGif\";\n        FrameRate.Stop();\n\n        AutoFitButtons();\n        DisplayGuidelines();\n    }\n\n    internal override void StartCapture()\n    {\n        DisplayTimer.Start();\n\n        base.StartCapture();\n    }\n\n    internal override void PauseCapture()\n    {\n        DisplayTimer.Pause();\n\n        base.PauseCapture();\n    }\n\n    internal override async Task StopCapture()\n    {\n        DisplayTimer.Stop();\n\n        await base.StopCapture();\n    }\n\n    private void DetectThinMode()\n    {\n        //Updates the Offsets of the two controls (because it's a static property, it will not update by itself).\n        HeightIntegerBox.Offset = Constants.VerticalOffset;\n        WidthIntegerBox.Offset = Constants.HorizontalOffset;\n    }\n\n    private void MoveWindow(int left, int top, int right, int bottom)\n    {\n        Left = left > 0 ? Math.Max(Left - left, _viewModel.MaximumBounds.Left - Constants.LeftOffset) : right > 0 ? Math.Min(Left + right, _viewModel.MaximumBounds.Right - Width + Constants.RightOffset) : Left;\n        Top = top > 0 ? Math.Max(Top - top, _viewModel.MaximumBounds.Top - Constants.TopOffset) : bottom > 0 ? Math.Min(Top + bottom, _viewModel.MaximumBounds.Bottom - Height + Constants.BottomOffset) : Top;\n\n        DetectMonitorChanges(true);\n    }\n\n    private void ResizeWindow(int left, int top, int right, int bottom)\n    {\n        var newLeft = left < 0 ? Math.Max(Left + left, _viewModel.MaximumBounds.Left - Constants.LeftOffset) : left > 0 ? Left + left : Left;\n        var newTop = top < 0 ? Math.Max(Top + top, _viewModel.MaximumBounds.Top - Constants.TopOffset) : top > 0 ? Top + top : Top;\n        var width = (right > 0 ? Math.Min(Width + right, _viewModel.MaximumBounds.Right - Left + Constants.RightOffset) - left : right < 0 ? Width + right + (left > 0 ? -left : 0) : Width - (newLeft - Left));\n        var height = (bottom > 0 ? Math.Min(Height + bottom, _viewModel.MaximumBounds.Bottom - Top + Constants.BottomOffset) - top : bottom < 0 ? Height + bottom + (top > 0 ? -top : 0) : Height - (newTop - Top));\n\n        //Ignore input if the new size will be smaller than the minimum.\n        if ((height < 25 && (top > 0 || bottom < 0)) || (width < 25 && (left > 0 || right < 0)))\n            return;\n\n        Left = newLeft;\n        Top = newTop;\n        Width = width;\n        Height = height;\n\n        DetectMonitorChanges(true);\n    }\n\n    private void SetTaskbarButtonOverlay()\n    {\n        try\n        {\n            switch (Stage)\n            {\n                case RecorderStages.Stopped:\n                    TaskbarItemInfo.Overlay = null;\n                    return;\n                case RecorderStages.Recording:\n                    if (UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual)\n                        TaskbarItemInfo.Overlay = new DrawingImage((FindResource(\"Vector.Record\") as DrawingBrush)?.Drawing);\n                    else\n                        TaskbarItemInfo.Overlay = null;\n                    return;\n                case RecorderStages.Paused:\n                    TaskbarItemInfo.Overlay = new DrawingImage((FindResource(\"Vector.Pause\") as DrawingBrush)?.Drawing);\n                    return;\n                case RecorderStages.Discarding:\n                    TaskbarItemInfo.Overlay = new DrawingImage((FindResource(\"Vector.Remove\") as DrawingBrush)?.Drawing);\n                    return;\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to set the taskbar button overlay\");\n        }\n    }\n\n    private void DisplayGuidelines()\n    {\n        GuidelinesGrid.Visibility = Visibility.Visible;\n    }\n\n    private void HideGuidelines()\n    {\n        GuidelinesGrid.Visibility = Visibility.Collapsed;\n        Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif/Windows/Webcam.xaml",
    "content": "<n:BaseRecorder xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n                xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n                xmlns:n=\"clr-namespace:ScreenToGif.Controls\"\n                xmlns:c=\"clr-namespace:ScreenToGif.Util.Converters;assembly=ScreenToGif.Util\"\n                xmlns:cx=\"clr-namespace:ScreenToGif.Util.Converters\"\n                xmlns:t=\"clr-namespace:ScreenToGif.Util.Settings;assembly=ScreenToGif.Util\"\n                x:Class=\"ScreenToGif.Windows.Webcam\" x:Name=\"WebcamWindow\" \n                Title=\"{DynamicResource S.Webcam.Title}\" Height=\"400\" Width=\"600\" MinWidth=\"200\" MinHeight=\"200\" \n                Icon=\"/Resources/Logo.ico\" WindowStartupLocation=\"CenterScreen\" Background=\"{DynamicResource Panel.Background}\"\n                Loaded=\"Window_Loaded\" LocationChanged=\"Window_LocationChanged\" Closing=\"Window_Closing\">\n\n    <Window.Resources>\n        <c:StageToButtonString x:Key=\"StageToButtonStringConverter\"/>\n        <c:StageToCanvas x:Key=\"StageToCanvasConverter\"/>\n        <c:KeysToString x:Key=\"KeysToStringConverter\"/>\n        <cx:ShortcutKeys x:Key=\"ShortcutKeys\"/>\n\n        <Storyboard x:Key=\"ShowDiscardStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\" >\n                <DiscreteBooleanKeyFrame Value=\"True\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Visible}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"(Button.Opacity)\" From=\"0\" To=\"1\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n\n        <Storyboard x:Key=\"HideDiscardStoryboard\">\n            <BooleanAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"IsHitTestVisible\" Duration=\"0:0:0\" >\n                <DiscreteBooleanKeyFrame Value=\"False\" KeyTime=\"0:0:0\"/>\n            </BooleanAnimationUsingKeyFrames>\n\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"Visibility\" Duration=\"0:0:0\">\n                <DiscreteObjectKeyFrame Value=\"{x:Static Visibility.Collapsed}\" KeyTime=\"0:0:0\"/>\n            </ObjectAnimationUsingKeyFrames>\n\n            <DoubleAnimation Storyboard.TargetName=\"DiscardButton\" Storyboard.TargetProperty=\"(Button.Opacity)\" \n                             From=\"{Binding ElementName=DiscardButton,Path=Opacity}\" To=\"0\" Duration=\"0:0:1\">\n                <DoubleAnimation.EasingFunction>\n                    <PowerEase Power=\"8\" />\n                </DoubleAnimation.EasingFunction>\n            </DoubleAnimation>\n        </Storyboard>\n    </Window.Resources>\n\n    <Window.CommandBindings>\n        <CommandBinding Command=\"{StaticResource Command.Options}\" CanExecute=\"NotRecording_CanExecute\" Executed=\"Options_Executed\"/>\n        <CommandBinding Command=\"{StaticResource Command.CheckVideoDevices}\" CanExecute=\"NotRecording_CanExecute\" Executed=\"CheckVideoDevices_Executed\"/>\n        <CommandBinding Command=\"Stop\" CanExecute=\"Stop_CanExecute\" Executed=\"Stop_Executed\"/>\n    </Window.CommandBindings>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition/>\n            <RowDefinition Height=\"31\"/>\n        </Grid.RowDefinitions>\n\n        <n:WebcamControl Grid.Row=\"0\" x:Name=\"WebcamControl\"/>\n\n        <Label Grid.Row=\"0\" x:Name=\"NoVideoLabel\" Content=\"{DynamicResource S.Webcam.NoVideo}\" VerticalContentAlignment=\"Center\" HorizontalContentAlignment=\"Center\" \n               Visibility=\"Hidden\" FontSize=\"24\" Foreground=\"{DynamicResource Element.Foreground.Header}\"/>\n\n        <Grid Grid.Row=\"1\" x:Name=\"LowerGrid\" Height=\"31\" VerticalAlignment=\"Bottom\" UseLayoutRounding=\"True\" SnapsToDevicePixels=\"True\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"30\"/>\n                <ColumnDefinition Width=\"26\"/>\n                <ColumnDefinition Width=\"26\"/>\n                <ColumnDefinition Width=\"26\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"11\"/>\n                <ColumnDefinition Width=\"31\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"11\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <n:ExtendedButton Grid.Column=\"1\" x:Name=\"OptionsButton\" Icon=\"{StaticResource Vector.Options}\" TabIndex=\"0\" ContentWidth=\"20\" ContentHeight=\"20\"\n                           Style=\"{StaticResource Style.Button.NoText}\" HorizontalContentAlignment=\"Center\" Padding=\"3\" Command=\"{StaticResource Command.Options}\">\n                <n:ExtendedButton.ToolTip>\n                    <ToolTip HorizontalOffset=\"-5\" Placement=\"Bottom\" Content=\"{DynamicResource S.StartUp.Options}\"/>\n                </n:ExtendedButton.ToolTip>\n            </n:ExtendedButton>\n\n            <n:ExtendedButton Grid.Column=\"2\" x:Name=\"ScaleButton\" Icon=\"{StaticResource Vector.Resize}\" TabIndex=\"1\" ContentWidth=\"20\" ContentHeight=\"20\" Padding=\"3\" \n                              Style=\"{StaticResource Style.Button.NoText}\" HorizontalContentAlignment=\"Center\" Click=\"ScaleButton_Click\"\n                              IsEnabled=\"{Binding ElementName=VideoDevicesComboBox, Path=IsEnabled}\">\n                <n:ExtendedButton.ToolTip>\n                    <ToolTip Placement=\"Bottom\" HorizontalOffset=\"-5\" Content=\"{DynamicResource S.Webcam.ChangeScale}\" />\n                </n:ExtendedButton.ToolTip>\n            </n:ExtendedButton>\n\n            <n:ExtendedButton Grid.Column=\"3\" x:Name=\"RefreshButton\" Icon=\"{StaticResource Vector.Repeat}\" TabIndex=\"1\" ContentWidth=\"20\" ContentHeight=\"20\" Padding=\"3\" \n                              Style=\"{StaticResource Style.Button.NoText}\" HorizontalContentAlignment=\"Center\" Command=\"{StaticResource Command.CheckVideoDevices}\">\n                <n:ExtendedButton.ToolTip>\n                    <ToolTip Placement=\"Bottom\" HorizontalOffset=\"-5\" Content=\"{DynamicResource S.Webcam.CheckVideoDevices}\" />\n                </n:ExtendedButton.ToolTip>\n            </n:ExtendedButton>\n\n            <ComboBox Grid.Column=\"4\" x:Name=\"VideoDevicesComboBox\" MinWidth=\"120\" Margin=\"0,3\" TabIndex=\"2\" IsEnabled=\"False\" SelectionChanged=\"VideoDevicesComboBox_SelectionChanged\"/>\n\n            <Separator Grid.Column=\"5\" Width=\"1\" Margin=\"5,2\"/>\n\n            <Viewbox Grid.Column=\"6\" ClipToBounds=\"True\" Focusable=\"False\">\n                <Grid HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"-4\" Opacity=\"{DynamicResource Element.Opacity}\">\n                    <n:CircularProgressBar StrokeThickness=\"2\" Percentage=\"100\" SegmentColor=\"Gray\" Radius=\"24\"/>\n                    <n:CircularProgressBar StrokeThickness=\"22\" Percentage=\"100\" SegmentColor=\"#FFF0F1F1\" Radius=\"10\"/>\n\n                    <n:CircularProgressBar StrokeThickness=\"2\" Value=\"{Binding ElementName=FpsNumericUpDown, Path=Value, Mode=OneWay}\" \n                                           IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"24\"/>\n                    <n:CircularProgressBar StrokeThickness=\"22\" Value=\"{Binding ElementName=FpsNumericUpDown, Path=Value, Mode=OneWay}\" \n                                           IsInverted=\"True\" Minimum=\"1\" Maximum=\"60\" SegmentColor=\"#FFE28A73\" Radius=\"10\" />\n                </Grid>\n\n                <Viewbox.ToolTip>\n                    <ToolTip HorizontalOffset=\"-5\" Placement=\"Bottom\" Content=\"{DynamicResource S.Recorder.Fps.Range}\"/>\n                </Viewbox.ToolTip>\n            </Viewbox>\n\n            <n:IntegerUpDown Grid.Column=\"7\" x:Name=\"FpsNumericUpDown\" Margin=\"1,3\" StepValue=\"1\" Minimum=\"1\" Maximum=\"60\" TabIndex=\"3\"\n                             Value=\"{Binding LatestFps, Mode=TwoWay, Source={x:Static t:UserSettings.All}}\" MinWidth=\"45\" IsEnabled=\"False\">\n                <n:IntegerUpDown.ToolTip>\n                    <ToolTip HorizontalOffset=\"-5\" Placement=\"Bottom\" Content=\"{DynamicResource S.Recorder.Fps}\"/>\n                </n:IntegerUpDown.ToolTip>\n            </n:IntegerUpDown>\n\n            <TextBlock Grid.Column=\"8\" Text=\"fps\" FontSize=\"12\" FontFamily=\"{DynamicResource FontFamilyNormal}\" Margin=\"1,0,0,0\" VerticalAlignment=\"Center\" Padding=\"0\" Foreground=\"{DynamicResource Element.Foreground.Medium}\"/>\n\n            <Separator Grid.Column=\"9\" Width=\"1\" Margin=\"5,2\"/>\n\n            <n:ExtendedButton Grid.Column=\"10\" x:Name=\"DiscardButton\" Text=\"{DynamicResource S.Recorder.Discard}\" Icon=\"{StaticResource Vector.Remove}\" Visibility=\"Collapsed\" \n                              Click=\"DiscardButton_Click\" Style=\"{StaticResource Style.Button.Horizontal}\" UseLayoutRounding=\"True\" ContentWidth=\"16\" ContentHeight=\"16\" TabIndex=\"4\" \n                              MinWidth=\"{Binding RelativeSource={RelativeSource Mode=Self}, Path=ActualHeight}\" KeyGesture=\"{Binding Converter={StaticResource ShortcutKeys}, ConverterParameter='3'}\"/>\n\n            <n:ExtendedButton Grid.Column=\"11\" x:Name=\"RecordPauseButton\" IsEnabled=\"False\" TabIndex=\"5\"\n                              Text=\"{Binding Path=Stage, ElementName=WebcamWindow, Converter={StaticResource StageToButtonStringConverter}, FallbackValue={StaticResource S.Recorder.Record}}\" \n                              Icon=\"{Binding Path=Stage, ElementName=WebcamWindow, Converter={StaticResource StageToCanvasConverter}, FallbackValue={StaticResource Vector.Record}}\" \n                              KeyGesture=\"{Binding Converter={StaticResource ShortcutKeys}, ConverterParameter='1'}\"\n                              ContentWidth=\"16\" ContentHeight=\"16\" Click=\"RecordPauseButton_Click\" Style=\"{StaticResource Style.Button.Horizontal}\"/>\n\n            <n:ExtendedButton Grid.Column=\"12\" x:Name=\"StopButton\" Text=\"{DynamicResource S.Recorder.Stop}\" Icon=\"{StaticResource Vector.Stop}\" ContentWidth=\"16\" ContentHeight=\"16\" Margin=\"0\" \n                              Command=\"Stop\" Style=\"{StaticResource Style.Button.Horizontal}\" UseLayoutRounding=\"True\" TabIndex=\"6\"\n                              KeyGesture=\"{Binding Converter={StaticResource ShortcutKeys}, ConverterParameter='2'}\"/>\n        </Grid>\n\n        <Popup Grid.Row=\"0\" x:Name=\"ScalePopup\" Placement=\"Bottom\" PlacementTarget=\"{Binding ElementName=ScaleButton}\" StaysOpen=\"False\" Width=\"200\" Height=\"50\">\n            <Border BorderThickness=\"1\" BorderBrush=\"{DynamicResource Element.Border}\" Background=\"{DynamicResource Panel.Background}\">\n                <Grid>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition/>\n                    </Grid.RowDefinitions>\n\n                    <n:LabelSeparator Grid.Row=\"0\" Text=\"{Binding ElementName=ScaleSlider, Path=Value, StringFormat={StaticResource S.Webcam.Scale}}\"/>\n\n                    <Slider Grid.Row=\"1\" x:Name=\"ScaleSlider\" Margin=\"5,3\" Minimum=\"0.4\" Maximum=\"1.5\" Value=\"0.5\" LargeChange=\"0.1\" TickFrequency=\"0.1\" TickPlacement=\"None\" ValueChanged=\"Slider_ValueChanged\"/>\n                </Grid>\n            </Border>\n        </Popup>\n    </Grid>\n</n:BaseRecorder>"
  },
  {
    "path": "ScreenToGif/Windows/Webcam.xaml.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.IO;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing System.Windows.Media.Animation;\nusing Microsoft.Win32;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Model;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing ScreenToGif.Webcam.DirectX;\nusing ScreenToGif.Windows.Other;\nusing Timer = System.Windows.Forms.Timer;\n\nnamespace ScreenToGif.Windows;\n\npublic partial class Webcam\n{\n    #region Variables\n\n    private Filters _filters;\n\n    /// <summary>\n    /// The object of the keyboard and mouse hooks.\n    /// </summary>\n    private readonly InputHook _actHook;\n\n    #region Counters\n\n    /// <summary>\n    /// The numbers of frames, this is updated while recording.\n    /// </summary>\n    private int _frameCount = 0;\n\n    #endregion\n\n    private Timer _timer = new Timer();\n\n    /// <summary>\n    /// The DPI of the current screen.\n    /// </summary>\n    private double _scale = 1;\n\n    /// <summary>\n    /// The amount of pixels of the window border. Width.\n    /// </summary>\n    private int _offsetX;\n\n    /// <summary>\n    /// The amount of pixels of the window border. Height.\n    /// </summary>\n    private int _offsetY;\n\n    #endregion\n\n    #region Async Load\n\n    private async Task LoadWebcams()\n    {\n        var result = await Task.Run(LoadVideoDevices);\n\n        #region If no devices detected\n\n        if (result.Count == 0)\n        {\n            RecordPauseButton.IsEnabled = false;\n            FpsNumericUpDown.IsEnabled = false;\n            VideoDevicesComboBox.IsEnabled = false;\n\n            WebcamControl.Visibility = Visibility.Collapsed;\n            NoVideoLabel.Visibility = Visibility.Visible;\n\n            return;\n        }\n\n        #endregion\n\n        #region Detected at least one device\n\n        VideoDevicesComboBox.ItemsSource = result;\n        VideoDevicesComboBox.SelectedIndex = 0;\n\n        RecordPauseButton.IsEnabled = true;\n        FpsNumericUpDown.IsEnabled = true;\n        VideoDevicesComboBox.IsEnabled = true;\n\n        WebcamControl.Visibility = Visibility.Visible;\n        NoVideoLabel.Visibility = Visibility.Collapsed;\n\n        _actHook.Start(false, true); //false for the mouse, true for the keyboard.\n\n        #endregion\n    }\n\n    /// <summary>\n    /// Loads the list of video devices.\n    /// </summary>\n    private List<string> LoadVideoDevices()\n    {\n        var devicesList = new List<string>();\n        _filters = new Filters();\n\n        for (var i = 0; i < _filters.VideoInputDevices.Count; i++)\n            devicesList.Add(_filters.VideoInputDevices[i].Name);\n\n        return devicesList;\n    }\n\n    #endregion\n\n    #region Inicialization\n\n    public Webcam()\n    {\n        InitializeComponent();\n\n        //Load.\n        _timer.Tick += Normal_Elapsed;\n\n        #region Global Hook\n\n        try\n        {\n            _actHook = new InputHook();\n            _actHook.KeyDown += KeyHookTarget;\n        }\n        catch (Exception) { }\n\n        #endregion\n    }\n\n    private async void Window_Loaded(object sender, RoutedEventArgs e)\n    {\n        SystemEvents.PowerModeChanged += System_PowerModeChanged;\n\n        Arguments.ClearAutomationArgs();\n\n        #region DPI\n\n        var source = PresentationSource.FromVisual(this);\n\n        if (source?.CompositionTarget != null)\n            _scale = source.CompositionTarget.TransformToDevice.M11;\n\n        #endregion\n\n        #region Window Offset\n\n        //Gets the window chrome offset\n        _offsetX = (int)Math.Round((ActualWidth - ((Grid)Content).ActualWidth) / 2);\n        _offsetY = (int)Math.Round((ActualHeight - ((Grid)Content).ActualHeight) - _offsetX);\n\n        #endregion\n\n        await LoadWebcams();\n    }\n\n    #endregion\n\n    #region Hooks\n\n    /// <summary>\n    /// KeyHook event method. This fires when the user press a key.\n    /// </summary>\n    private void KeyHookTarget(object sender, CustomKeyEventArgs e)\n    {\n        if (!IsActive)\n            return;\n\n        if (Stage != RecorderStages.Discarding && Keyboard.Modifiers.HasFlag(UserSettings.All.StartPauseModifiers) && e.Key == UserSettings.All.StartPauseShortcut)\n            RecordPauseButton_Click(null, null);\n        else if (Keyboard.Modifiers.HasFlag(UserSettings.All.StopModifiers) && e.Key == UserSettings.All.StopShortcut)\n            Stop_Executed(null, null);\n        else if ((Stage == RecorderStages.Paused || Stage == RecorderStages.Snapping) && Keyboard.Modifiers.HasFlag(UserSettings.All.DiscardModifiers) && e.Key == UserSettings.All.DiscardShortcut)\n            DiscardButton_Click(null, null);\n    }\n\n    #endregion\n\n    #region Other Events\n\n    private void VideoDevicesComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n    {\n        try\n        {\n            if (VideoDevicesComboBox.SelectedIndex == -1)\n            {\n                WebcamControl.VideoDevice = null;\n                return;\n            }\n\n            WebcamControl.VideoDevice = _filters.VideoInputDevices[VideoDevicesComboBox.SelectedIndex];\n            WebcamControl.Refresh();\n\n            if (WebcamControl.VideoWidth > 0)\n            {\n                Width = WebcamControl.VideoWidth * _scale / 2;\n                Height = (WebcamControl.VideoHeight + 31) * _scale / 2;\n            }\n\n            if (Top < 0)\n                Top = 0;\n\n            if (Left < 0)\n                Left = 0;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Video device not supported\");\n        }\n    }\n\n    private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)\n    {\n        if (!IsLoaded)\n            return;\n\n        Width = WebcamControl.VideoWidth * _scale * ScaleSlider.Value;\n        Height = (WebcamControl.VideoHeight + 31) * _scale * ScaleSlider.Value;\n\n        if (Top < 0)\n            Top = 0;\n\n        if (Left < 0)\n            Left = 0;\n    }\n\n    private void System_PowerModeChanged(object sender, PowerModeChangedEventArgs e)\n    {\n        if (e.Mode == PowerModes.Suspend)\n        {\n            if (Stage == RecorderStages.Recording)\n                RecordPauseButton_Click(null, null);\n            else if (Stage == RecorderStages.PreStarting)\n                Stop_Executed(null, null);\n\n            GC.Collect();\n        }\n    }\n\n    private async void Window_LocationChanged(object sender, EventArgs e)\n    {\n        await Task.Factory.StartNew(UpdateScreenDpi);\n    }\n\n    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)\n    {\n        try\n        {\n            _actHook.Stop(); //Stop the user activity watcher.\n        }\n        catch (Exception) { }\n\n        SystemEvents.PowerModeChanged -= System_PowerModeChanged;\n    }\n\n    #endregion\n\n    #region Record Async\n\n    private void AddFrames(string filename, Bitmap bitmap)\n    {\n        bitmap.Save(filename);\n        bitmap.Dispose();\n    }\n\n    #endregion\n\n    #region Discard Async\n\n    private void Discard()\n    {\n        #region Remove all the files\n\n        foreach (var frame in Project.Frames)\n        {\n            try\n            {\n                File.Delete(frame.Path);\n            }\n            catch (Exception)\n            { }\n        }\n\n        try\n        {\n            Directory.Delete(Project.FullPath, true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Delete Temp Path\");\n        }\n\n        #endregion\n\n        Project.Frames.Clear();\n    }\n\n    #endregion\n\n    #region Timer\n\n    private void Normal_Elapsed(object sender, EventArgs e)\n    {\n        var fileName = $\"{Project.FullPath}{_frameCount}.png\";\n        Project.Frames.Add(new FrameInfo(fileName, _timer.Interval));\n\n        //Get the actual position of the form.\n        var lefttop = Dispatcher.Invoke<System.Drawing.Point>(() => new System.Drawing.Point((int)Math.Round((Left + _offsetX) * _scale, MidpointRounding.AwayFromZero),\n            (int)Math.Round((Top + _offsetY) * _scale, MidpointRounding.AwayFromZero)));\n\n        //Take a screenshot of the area.\n        var bt = Native.Helpers.Capture.CaptureScreenAsBitmap((int)Math.Round(WebcamControl.ActualWidth * _scale, MidpointRounding.AwayFromZero),\n            (int)Math.Round(WebcamControl.ActualHeight * _scale, MidpointRounding.AwayFromZero), lefttop.X, lefttop.Y);\n\n        //await Task.Run(() => AddFrames(fileName, new Bitmap(bt)));\n        AddFrames(fileName, new Bitmap(bt));\n\n        Dispatcher.Invoke(() => Title = $\"ScreenToGif • {_frameCount}\");\n\n        _frameCount++;\n        GC.Collect(1);\n    }\n\n    #endregion\n\n    #region Click Events\n\n    private void ScaleButton_Click(object sender, RoutedEventArgs e)\n    {\n        ScalePopup.IsOpen = true;\n    }\n\n    private void RecordPauseButton_Click(object sender, RoutedEventArgs e)\n    {\n        WebcamControl.Capture.PrepareCapture();\n\n        if (Stage == RecorderStages.Stopped)\n        {\n            #region To Record\n\n            _timer = new Timer { Interval = 1000 / FpsNumericUpDown.Value };\n\n            Project = new ProjectInfo().CreateProjectFolder(ProjectByType.WebcamRecorder);\n\n            RefreshButton.IsEnabled = false;\n            VideoDevicesComboBox.IsEnabled = false;\n            FpsNumericUpDown.IsEnabled = false;\n            Topmost = true;\n\n            //WebcamControl.Capture.GetFrame();\n\n            #region Start - Normal or Snap\n\n            if (UserSettings.All.CaptureFrequency != CaptureFrequencies.Manual)\n            {\n                #region Normal Recording\n\n                _timer.Tick += Normal_Elapsed;\n                Normal_Elapsed(null, null);\n                _timer.Start();\n\n                Stage = RecorderStages.Recording;\n\n                #endregion\n            }\n            else\n            {\n                #region SnapShot Recording\n\n                Stage = RecorderStages.Snapping;\n                Title = \"ScreenToGif - \" + LocalizationHelper.Get(\"S.Recorder.Snapshot\");\n\n                Normal_Elapsed(null, null);\n\n                #endregion\n            }\n\n            #endregion\n\n            #endregion\n        }\n        else if (Stage == RecorderStages.Recording)\n        {\n            #region To Pause\n\n            Stage = RecorderStages.Paused;\n            Title = LocalizationHelper.Get(\"S.Recorder.Paused\");\n\n            DiscardButton.BeginStoryboard(FindResource(\"ShowDiscardStoryboard\") as Storyboard, HandoffBehavior.Compose);\n\n            _timer.Stop();\n\n            #endregion\n        }\n        else if (Stage == RecorderStages.Paused)\n        {\n            #region To Record Again\n\n            Stage = RecorderStages.Recording;\n            Title = \"ScreenToGif\";\n\n            _timer.Start();\n\n            #endregion\n        }\n        else if (Stage == RecorderStages.Snapping)\n        {\n            #region Take Screenshot\n\n            Normal_Elapsed(null, null);\n\n            #endregion\n        }\n    }\n\n    internal void Pause()\n    {\n        try\n        {\n            if (Stage != RecorderStages.Recording)\n                return;\n\n            Stage = RecorderStages.Paused;\n            Stage = RecorderStages.Paused;\n            Title = LocalizationHelper.Get(\"S.Recorder.Paused\");\n\n            DiscardButton.BeginStoryboard(FindResource(\"ShowDiscardStoryboard\") as Storyboard, HandoffBehavior.Compose);\n\n            _timer.Stop();\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to pause the recording.\");\n            ErrorDialog.Ok(Title, LocalizationHelper.Get(\"S.Recorder.Warning.StartPauseNotPossible\"), e.Message, e);\n        }\n    }\n\n    private async void DiscardButton_Click(object sender, RoutedEventArgs e)\n    {\n        Pause();\n\n        if (UserSettings.All.NotifyRecordingDiscard && !Dialog.Ask(LocalizationHelper.Get(\"S.Recorder.Discard.Title\"),\n                LocalizationHelper.Get(\"S.Recorder.Discard.Instruction\"), LocalizationHelper.Get(\"S.Recorder.Discard.Message\"), false))\n            return;\n\n        _timer.Stop();\n        _frameCount = 0;\n        Stage = RecorderStages.Stopped;\n\n        Cursor = Cursors.AppStarting;\n        LowerGrid.IsEnabled = false;\n\n        await Task.Run(Discard);\n\n        //Enables the controls that are disabled while recording;\n        FpsNumericUpDown.IsEnabled = true;\n        RefreshButton.IsEnabled = true;\n        VideoDevicesComboBox.IsEnabled = true;\n        LowerGrid.IsEnabled = true;\n\n        DiscardButton.BeginStoryboard(FindResource(\"HideDiscardStoryboard\") as Storyboard, HandoffBehavior.Compose);\n\n        Cursor = Cursors.Arrow;\n\n        //if (!UserSettings.All.SnapshotMode)\n        {\n            //Only display the Record text when not in snapshot mode.\n            Title = \"ScreenToGif\";\n            Stage = RecorderStages.Stopped;\n        }\n        //else\n        {\n            //Stage = Stage.Snapping;\n            //EnableSnapshot_Executed(null, null);\n        }\n\n        GC.Collect();\n    }\n\n    private void Stop_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = Project != null && Project.Frames.Count > 0;\n    }\n\n    private void Stop_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        try\n        {\n            _frameCount = 0;\n\n            _timer.Stop();\n\n            if (Stage != RecorderStages.Stopped && Stage != RecorderStages.PreStarting && Project.Any)\n            {\n                //If not Already Stopped nor Pre Starting and FrameCount > 0, Stops\n                Close();\n            }\n            else if ((Stage == RecorderStages.PreStarting || Stage == RecorderStages.Snapping) && !Project.Any)\n            {\n                #region if Pre-Starting or in Snapmode and no Frames, Stops\n\n                Stage = RecorderStages.Stopped;\n\n                //Enables the controls that are disabled while recording;\n                FpsNumericUpDown.IsEnabled = true;\n                RecordPauseButton.IsEnabled = true;\n                RefreshButton.IsEnabled = true;\n                VideoDevicesComboBox.IsEnabled = true;\n                Topmost = true;\n\n                Title = \"ScreenToGif\";\n\n                #endregion\n            }\n        }\n        catch (NullReferenceException nll)\n        {\n            LogWriter.Log(nll, \"NullPointer in the Stop function\");\n\n            ErrorDialog.Ok(\"ScreenToGif\", \"Error while stopping\", nll.Message, nll);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error in the Stop function\");\n\n            ErrorDialog.Ok(\"ScreenToGif\", \"Error while stopping\", ex.Message, ex);\n        }\n    }\n\n    private void NotRecording_CanExecute(object sender, CanExecuteRoutedEventArgs e)\n    {\n        e.CanExecute = Stage != RecorderStages.Recording && Stage != RecorderStages.PreStarting && LowerGrid.IsEnabled;\n    }\n\n    private void Options_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        Topmost = false;\n\n        var options = new Options();\n        options.ShowDialog();\n\n        Topmost = true;\n    }\n\n    private async void CheckVideoDevices_Executed(object sender, ExecutedRoutedEventArgs e)\n    {\n        RecordPauseButton.IsEnabled = false;\n\n        VideoDevicesComboBox.ItemsSource = null;\n\n        //Check again for video devices.\n        await LoadWebcams();\n    }\n\n    #endregion\n\n    private void UpdateScreenDpi()\n    {\n        try\n        {\n            var source = Dispatcher.Invoke<PresentationSource>(() => PresentationSource.FromVisual(this));\n\n            if (source?.CompositionTarget != null)\n                _scale = Dispatcher.Invoke<double>(() => source.CompositionTarget.TransformToDevice.M11);\n        }\n        finally\n        {\n            GC.Collect(1);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif/app.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n  \n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n        <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitorV2</dpiAwareness>\n        <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/PM</dpiAware>\n    </windowsSettings>\n  </application>\n  \n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity type=\"win32\" name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"*\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\"/>\n    </dependentAssembly>\n  </dependency>\n</assembly>"
  },
  {
    "path": "ScreenToGif.Model/Enums/AdornerPlacement.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Specifies the placement of the adorner in related to the adorned control.\n/// </summary>\npublic enum AdornerPlacement\n{\n    Inside,\n    Outside\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/AppThemes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum AppThemes\n{\n    Light,\n    Medium,\n    Dark,\n    VeryDark,\n    FollowSystem\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ApplicationTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum ApplicationTypes\n{\n    Unidentified = 0,\n\n    /// <summary>\n    /// Light package (.NET 6 desktop runtime download and installation required).\n    /// Distributted as a single file, as an EXE.\n    /// </summary>\n    DependantSingle = 1,\n\n    /// <summary>\n    /// Full package (.NET 6 desktop runtime included).\n    /// Distributted as a single file, as an EXE.\n    /// </summary>\n    FullSingle = 2,\n\n    /// <summary>\n    /// Full package (.NET 6 desktop runtime included).\n    /// Distributted as multiple files, as a MSIX for the outside the Store.\n    /// </summary>\n    FullMultiMsix = 3,\n\n    /// <summary>\n    /// Full package (.NET 6 desktop runtime included).\n    /// Distributted as multiple files, as a MSIX for the Store.\n    /// </summary>\n    FullMultiMsixStore = 4,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/CaptureFrequencies.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Type of capture frequency mode for the screen recorder.\n/// </summary>\npublic enum CaptureFrequencies\n{\n    Manual,\n    Interaction,\n    PerSecond,\n    PerMinute,\n    PerHour\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ColorQuantizationType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Type of color quantization methods of the gif encoder.\n/// </summary>\npublic enum ColorQuantizationTypes\n{\n    Neural = 0,\n    Octree = 1,\n    MedianCut = 2,\n    Grayscale = 3,\n    MostUsed = 4,\n    Palette = 5,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/CopyModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Specifies the copy operation mode.\n/// </summary>\npublic enum CopyModes\n{\n    File,\n    FolderPath,\n    FilePath,\n    Link\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/DelayChangeType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Type of delay change action.\n/// </summary>\npublic enum DelayChangeType\n{\n    Override,\n    IncreaseDecrease,\n    Scale\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/DelayUpdateModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum DelayUpdateModes\n{\n    Override = 0,\n    IncreaseDecrease = 1,\n    Scale = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/DitherMethods.cs",
    "content": "using System.ComponentModel;\n\nnamespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Dither methods, currently being used by FFmpeg.\n/// </summary>\npublic enum DitherMethods\n{\n    [Description(\"bayer\")]\n    Bayer,\n\n    [Description(\"heckbert\")]\n    Heckbert,\n\n    [Description(\"floyd_steinberg\")]\n    FloydSteinberg,\n\n    [Description(\"sierra2\")]\n    Sierra2,\n\n    [Description(\"sierra2_4a\")]\n    Sierra2Lite,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/DrawingModeType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The types of drawings.\n/// </summary>\npublic enum DrawingModeType\n{\n    None = 0,\n    Ink,\n    Select,\n    EraseByPoint,\n    EraseByObject,\n    Rectangle,\n    Circle,\n    Triangle,\n    Arrow,\n    Balloon,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/DuplicatesDelayModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Specifies the frame delay adjustment mode.\n/// </summary>\npublic enum DuplicatesDelayModes\n{\n    DontAdjust = 0,\n    Average = 1,\n    Sum = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/DuplicatesRemovalModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Specifies the frame removal mode.\n/// </summary>\npublic enum DuplicatesRemovalModes\n{\n    First = 0,\n    Last = 1\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/EncoderTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum EncoderTypes\n{\n    ScreenToGif, //Gif, Apng\n    KGySoft, // Gif\n    System, //Gif, Video\n    FFmpeg, //Gif, Webp, Apng, Avif, Video\n    Gifski //Gif\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/EncodingStatus.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Encoding status.\n/// </summary>\npublic enum EncodingStatus\n{\n    /// <summary>\n    /// Processing encoding/uploading status.\n    /// </summary>\n    Processing,\n\n    /// <summary>\n    /// The Encoding was canceled. So apparently \"cancelled\" (with two L's) is also a valid grammar. Huh, that's strange.\n    /// </summary>\n    Canceled,\n\n    /// <summary>\n    /// An error happened with the encoding process.\n    /// </summary>\n    Error,\n\n    /// <summary>\n    /// Encoding done.\n    /// </summary>\n    Completed,\n\n    /// <summary>\n    /// File deleted or Moved.\n    /// </summary>\n    FileDeletedOrMoved\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ExitAction.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Exit actions after closing the Recording Window.\n/// </summary>\npublic enum ExitAction\n{\n    /// <summary>\n    /// Return to the StartUp Window.\n    /// </summary>\n    Return = 0,\n\n    /// <summary>\n    /// Something was recorded. Go to the Editor.\n    /// </summary>\n    Recorded = 1,\n\n    /// <summary>\n    /// Exit the application.\n    /// </summary>\n    Exit = 2,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ExportFormats.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum ExportFormats\n{\n    /// <summary>\n    /// Graphics Interchange Format.\n    /// </summary>\n    Gif,\n\n    /// <summary>\n    /// Animated Portable Network Graphics.\n    /// </summary>\n    Apng,\n\n    /// <summary>\n    /// Web Picture.\n    /// </summary>\n    Webp,\n\n    /// <summary>\n    /// Better portable graphics.\n    /// </summary>\n    Bpg,\n\n    /// <summary>\n    /// AV1 Still Image Format.\n    /// </summary>\n    Avif,\n\n    /// <summary>\n    /// Audio Video Interleaved.\n    /// </summary>\n    Avi,\n\n    /// <summary>\n    /// Matroska.\n    /// </summary>\n    Mkv,\n\n    /// <summary>\n    /// Quicktime movie.\n    /// </summary>\n    Mov,\n\n    /// <summary>\n    /// MPEG-4 Part 14.\n    /// </summary>\n    Mp4,\n\n    /// <summary>\n    /// Web Movie.\n    /// </summary>\n    Webm,\n\n\n    /// <summary>\n    /// Bitmap.\n    /// </summary>\n    Bmp,\n\n    /// <summary>\n    /// Joint Photographic Experts Group.\n    /// </summary>\n    Jpeg,\n\n    /// <summary>\n    /// Portable Network Graphics.\n    /// </summary>\n    Png,\n\n\n    /// <summary>\n    /// Project file, .stg or .zip.\n    /// </summary>\n    Stg,\n\n    /// <summary>\n    /// Photoshop file.\n    /// </summary>\n    Psd,\n\n    /// <summary>\n    /// Compressed file.\n    /// Not in directly use by the encoder, but as an option for the images and the project.\n    /// </summary>\n    Zip\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ExtrasStatus.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Specifies the status of the image card control.\n/// </summary>\npublic enum ExtrasStatus\n{\n    NotAvailable,\n    Available,\n    Processing,\n    Ready,\n    Error\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/FadeModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The type of fade transition.\n/// </summary>\npublic enum FadeModes\n{\n    /// <summary>\n    /// The next frame of the recording.\n    /// </summary>\n    NextFrame,\n\n    /// <summary>\n    /// A solid color.\n    /// </summary>\n    Color\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/FlipRotateType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Type of the Flip/Rotate action.\n/// </summary>\npublic enum FlipRotateType\n{\n    FlipHorizontal,\n    FlipVertical,\n    RotateRight90,\n    RotateLeft90\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Framerates.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum Framerates\n{\n    Auto,\n    Custom,\n    Film,\n    Ntsc,\n    Pal\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/GifskiErrorCodes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum GifskiErrorCodes\n{\n    /// <summary>\n    /// Alright.\n    /// </summary>\n    Ok = 0,\n\n    /// <summary>\n    /// One of input arguments was NULL.\n    /// </summary>\n    NullArgument = 1,\n\n    /// <summary>\n    /// A one-time function was called twice, or functions were called in wrong order.\n    /// </summary>\n    InvalidState = 2,\n\n    /// <summary>\n    /// Internal error related to palette quantization.\n    /// </summary>\n    QuantizationError = 4,\n\n    /// <summary>\n    /// Internal error related to gif composing.\n    /// </summary>\n    GifError = 5,\n\n    /// <summary>\n    /// Internal error related to multithreading.\n    /// </summary>\n    ThreadLost = 6,\n\n    /// <summary>\n    /// I/O error: file or directory not found.\n    /// </summary>\n    NotFound = 7,\n\n    /// <summary>\n    /// I/O error: permission denied.\n    /// </summary>\n    PermissionDenied = 8,\n\n    /// <summary>\n    /// I/O error: File already exists.\n    /// </summary>\n    AlreadyExists = 9,\n\n    /// <summary>\n    /// Misc I/O error.\n    /// </summary>\n    InvalidInput = 10,\n\n    /// <summary>\n    /// Misc I/O error.\n    /// </summary>\n    TimedOut = 11,\n\n    /// <summary>\n    /// Misc I/O error.\n    /// </summary>\n    WriteZero = 12,\n\n    /// <summary>\n    /// Misc I/O error.\n    /// </summary>\n    Interrupted = 13,\n\n    /// <summary>\n    /// Misc I/O error.\n    /// </summary>\n    UnexpectedEof = 14,\n\n    /// <summary>\n    /// Should not happen, file a bug.\n    /// </summary>\n    OtherError = 15\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/HardwareAcceleration.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum HardwareAccelerationModes\n{\n    /// <summary>\n    /// Only lets you select non-hardware backed encoders. \n    /// </summary>\n    Off,\n\n    /// <summary>\n    /// Lets you select hardware backed encoders too. -hwaccel auto\n    /// </summary>\n    On,\n\n    /// <summary>\n    /// Only lets you select non-hardware backed encoders, but switches to one if possible. -hwaccel auto\n    /// </summary>\n    Auto\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Icons.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Dialog Icons.\n/// </summary>\npublic enum Icons\n{\n    /// <summary>\n    /// Information. Blue.\n    /// </summary>\n    Info,\n\n    /// <summary>\n    /// Warning, yellow.\n    /// </summary>\n    Warning,\n\n    /// <summary>\n    /// Error, red.\n    /// </summary>\n    Error,\n\n    /// <summary>\n    /// Success, green.\n    /// </summary>\n    Success,\n\n    /// <summary>\n    /// A question mark, blue.\n    /// </summary>\n    Question,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ModeType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The type of capture area selection.\n/// </summary>\npublic enum ModeType\n{\n    Region = 0,\n    Window = 1,\n    Fullscreen = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/MouseButtons.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum MouseButtons\n{\n    None,\n    Left,\n    Middle,\n    Right,\n    FirstExtra,\n    SecondExtra,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/MouseEventType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Event flags for mouse-related events.\n/// </summary>\npublic enum MouseEventType\n{\n    MouseMove,\n    IconRightMouseDown,\n    IconLeftMouseDown,\n    IconRightMouseUp,\n    IconLeftMouseUp,\n    IconMiddleMouseDown,\n    IconMiddleMouseUp,\n    IconLeftDoubleClick\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/BaloonFlags.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// Flags that define the icon that is shown on a balloon\n/// tooltip.\n/// </summary>\npublic enum BalloonFlags\n{\n    /// <summary>\n    /// No icon is displayed.\n    /// </summary>\n    None = 0x00,\n\n    /// <summary>\n    /// An information icon is displayed.\n    /// </summary>\n    Info = 0x01,\n\n    /// <summary>\n    /// A warning icon is displayed.\n    /// </summary>\n    Warning = 0x02,\n\n    /// <summary>\n    /// An error icon is displayed.\n    /// </summary>\n    Error = 0x03,\n\n    /// <summary>\n    /// Windows XP Service Pack 2 (SP2) and later.\n    /// Use a custom icon as the title icon.\n    /// </summary>\n    User = 0x04,\n\n    /// <summary>\n    /// Windows XP (Shell32.dll version 6.0) and later.\n    /// Do not play the associated sound. Applies only to balloon ToolTips.\n    /// </summary>\n    NoSound = 0x10,\n\n    /// <summary>\n    /// Windows Vista (Shell32.dll version 6.0.6) and later. The large version\n    /// of the icon should be used as the balloon icon. This corresponds to the\n    /// icon with dimensions SM_CXICON x SM_CYICON. If this flag is not set,\n    /// the icon with dimensions XM_CXSMICON x SM_CYSMICON is used.<br/>\n    /// - This flag can be used with all stock icons.<br/>\n    /// - Applications that use older customized icons (NIIF_USER with hIcon) must\n    ///   provide a new SM_CXICON x SM_CYICON version in the tray icon (hIcon). These\n    ///   icons are scaled down when they are displayed in the System Tray or\n    ///   System Control Area (SCA).<br/>\n    /// - New customized icons (NIIF_USER with hBalloonIcon) must supply an\n    ///   SM_CXICON x SM_CYICON version in the supplied icon (hBalloonIcon).\n    /// </summary>\n    LargeIcon = 0x20,\n\n    /// <summary>\n    /// Windows 7 and later.\n    /// </summary>\n    RespectQuietTime = 0x80\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/BitmapCompressionModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum BitmapCompressionModes : uint\n{\n    Rgb = 0,\n    Rle8 = 1,\n    Rle4 = 2,\n    BitFields = 3,\n    Jpeg = 4,\n    Png = 5\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/CopyPixelOperations.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n///<summary>\n///Specifies a raster-operation code. These codes define how the color data for the\n///source rectangle is to be combined with the color data for the destination\n///rectangle to achieve the final color.\n///</summary>\n[Flags]\npublic enum CopyPixelOperations\n{\n    NoMirrorBitmap = -2147483648,\n\n    /// <summary>dest = BLACK, 0x00000042</summary>\n    Blackness = 66,\n\n    ///<summary>dest = (NOT src) AND (NOT dest), 0x001100A6</summary>\n    NotSourceErase = 1114278,\n\n    ///<summary>dest = (NOT source), 0x00330008</summary>\n    NotSourceCopy = 3342344,\n\n    ///<summary>dest = source AND (NOT dest), 0x00440328</summary>\n    SourceErase = 4457256,\n\n    /// <summary>dest = (NOT dest), 0x00550009</summary>\n    DestinationInvert = 5570569,\n\n    /// <summary>dest = pattern XOR dest, 0x005A0049</summary>\n    PatInvert = 5898313,\n\n    ///<summary>dest = source XOR dest, 0x00660046</summary>\n    SourceInvert = 6684742,\n\n    ///<summary>dest = source AND dest, 0x008800C6</summary>\n    SourceAnd = 8913094,\n\n    /// <summary>dest = (NOT source) OR dest, 0x00BB0226</summary>\n    MergePaint = 12255782,\n\n    ///<summary>dest = (source AND pattern), 0x00C000CA</summary>\n    MergeCopy = 12583114,\n\n    ///<summary>dest = source, 0x00CC0020</summary>\n    SourceCopy = 13369376,\n\n    /// <summary>dest = source OR dest, 0x00EE0086</summary>\n    SourcePaint = 15597702,\n\n    /// <summary>dest = pattern, 0x00F00021</summary>\n    PatCopy = 15728673,\n\n    /// <summary>dest = DPSnoo, 0x00FB0A09</summary>\n    PatPaint = 16452105,\n\n    /// <summary>dest = WHITE, 0x00FF0062</summary>\n    Whiteness = 16711778,\n\n    /// <summary>\n    /// Capture window as seen on screen.  This includes layered windows \n    /// such as WPF windows with AllowsTransparency=\"true\", 0x40000000\n    /// </summary>\n    CaptureBlt = 1073741824,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/CornerPreferences.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// Flags used by the DwmSetWindowAttribute function to specify the rounded corner preference for a window.\n/// https://docs.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwm_window_corner_preference\n/// Windows Build 22000\n/// </summary>\npublic enum CornerPreferences\n{\n    /// <summary>\n    /// Let the system decide when to round window corners.\n    /// </summary>\n    Default = 0,\n\n    /// <summary>\n    /// Never round window corners.\n    /// </summary>\n    DoNotRound = 1,\n\n    /// <summary>\n    /// Round the corners, if appropriate.\n    /// </summary>\n    Round = 2,\n\n    /// <summary>\n    /// Round the corners if appropriate, with a small radius.\n    /// </summary>\n    RoundSmall = 3\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/DeviceCaps.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum DeviceCaps : int\n{\n    LogPixelsX = 88,\n    LogPixelsY = 90,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/DibColorModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum DibColorModes : uint\n{\n    RgbColors = 0,\n    PalColors = 1\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/DisplayDeviceStates.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n[Flags]\npublic enum DisplayDeviceStates : int\n{\n    /// <summary>\n    /// The device is part of the desktop.\n    /// </summary>\n    AttachedToDesktop = 0x1,\n\n    MultiDriver = 0x2,\n\n    /// <summary>\n    /// The device is part of the desktop.\n    /// </summary>\n    PrimaryDevice = 0x4,\n\n    /// <summary>\n    /// Represents a pseudo device used to mirror application drawing for remoting or other purposes.\n    /// </summary>\n    MirroringDriver = 0x8,\n\n    /// <summary>\n    /// The device is VGA compatible.\n    /// </summary>\n    VgaCompatible = 0x10,\n\n    /// <summary>\n    /// The device is removable; it cannot be the primary display.\n    /// </summary>\n    Removable = 0x20,\n\n    /// <summary>\n    /// The device has more display modes than its output devices support.\n    /// </summary>\n    ModesPruned = 0x8000000,\n\n    Remote = 0x4000000,\n    Disconnect = 0x2000000\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/DisplayDevices.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Domain.Enums.Native;\n\n[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]\npublic struct DisplayDevices\n{\n    public DisplayDevices(bool? filler) : this()\n    {\n        //Allows automatic initialization of \"Size\" with \"new DisplayDevice(null/true/false)\".\n        Size = Marshal.SizeOf(typeof(DisplayDevices));\n    }\n\n    [MarshalAs(UnmanagedType.U4)]\n    public int Size;\n\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]\n    public string DeviceName;\n\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\n    public string DeviceString;\n\n    [MarshalAs(UnmanagedType.U4)]\n    public DisplayDeviceStates StateFlags;\n\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\n    public string DeviceID;\n\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\n    public string DeviceKey;\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/DpiTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// https://msdn.microsoft.com/en-us/library/windows/desktop/dn280511(v=vs.85).aspx\n/// </summary>\npublic enum DpiTypes\n{\n    Effective = 0,\n    Angular = 1,\n    Raw = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/DwmWindowAttributes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum DwmWindowAttributes\n{\n    NcRenderingEnabled = 1,\n    NcRenderingPolicy,\n    TransitionsForcedisabled,\n    AllowNcPaint,\n    CaptionButtonBounds,\n    NonclientRtlLayout,\n    ForceIconicRepresentation,\n    Flip3DPolicy,\n    ExtendedFrameBounds,\n    HasIconicBitmap,\n    DisallowPeek,\n    ExcludedFromPeek,\n    Cloak,\n    Cloaked,\n    FreezeRepresentation,\n    PassiveUpdateMode,\n    UseHostBackdropBrush,\n    UseImmersiveDarkModeBefore20H1 = 19,  //For Windows 10 versions before 2004.\n    UseImmersiveDarkMode = 20,\n    WindowCornerPreference = 33,\n    BorderColor,\n    CaptionColor,\n    TextColor,\n    VisibleFrameBorderThickness,\n\n    /// <summary>\n    /// Retrieves or specifies the system-drawn backdrop material of a window, including behind the non-client area.\n    /// The pvAttribute parameter points to a value of type SystemBackdropTypes.\n    /// </summary>\n    SystemBackdropType,\n\n    MicaEffect = 1029,\n    Last\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/GetAncestorFlags.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum GetAncestorFlags\n{\n    /// <summary>\n    /// Retrieves the parent window. This does not include the owner, as it does with the GetParent function. \n    /// </summary>\n    GetParent = 1,\n    /// <summary>\n    /// Retrieves the root window by walking the chain of parent windows.\n    /// </summary>\n    GetRoot = 2,\n    /// <summary>\n    /// Retrieves the owned root window by walking the chain of parent and owner windows returned by GetParent. \n    /// </summary>\n    GetRootOwner = 3\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/GetWindowTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum GetWindowType : uint\n{\n    /// <summary>\n    /// The retrieved handle identifies the window of the same type that is highest in the Z order.\n    /// <para/>\n    /// If the specified window is a topmost window, the handle identifies a topmost window.\n    /// If the specified window is a top-level window, the handle identifies a top-level window.\n    /// If the specified window is a child window, the handle identifies a sibling window.\n    /// </summary>\n    HwndFirst = 0,\n\n    /// <summary>\n    /// The retrieved handle identifies the window of the same type that is lowest in the Z order.\n    /// <para />\n    /// If the specified window is a topmost window, the handle identifies a topmost window.\n    /// If the specified window is a top-level window, the handle identifies a top-level window.\n    /// If the specified window is a child window, the handle identifies a sibling window.\n    /// </summary>\n    HwdnLast = 1,\n\n    /// <summary>\n    /// The retrieved handle identifies the window below the specified window in the Z order.\n    /// <para />\n    /// If the specified window is a topmost window, the handle identifies a topmost window.\n    /// If the specified window is a top-level window, the handle identifies a top-level window.\n    /// If the specified window is a child window, the handle identifies a sibling window.\n    /// </summary>\n    HwndNext = 2,\n\n    /// <summary>\n    /// The retrieved handle identifies the window above the specified window in the Z order.\n    /// <para />\n    /// If the specified window is a topmost window, the handle identifies a topmost window.\n    /// If the specified window is a top-level window, the handle identifies a top-level window.\n    /// If the specified window is a child window, the handle identifies a sibling window.\n    /// </summary>\n    HwndPrev = 3,\n\n    /// <summary>\n    /// The retrieved handle identifies the specified window's owner window, if any.\n    /// </summary>\n    Owner = 4,\n\n    /// <summary>\n    /// The retrieved handle identifies the child window at the top of the Z order,\n    /// if the specified window is a parent window; otherwise, the retrieved handle is NULL.\n    /// The function examines only child windows of the specified window. It does not examine descendant windows.\n    /// </summary>\n    Child = 5,\n\n    /// <summary>\n    /// The retrieved handle identifies the enabled popup window owned by the specified window (the\n    /// search uses the first such window found using HwndNext); otherwise, if there are no enabled\n    /// popup windows, the retrieved handle is that of the specified window.\n    /// </summary>\n    EnabledPopup = 6\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/HitTestTargets.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum HitTestTargets : int\n{\n    /// <summary>\n    /// In the border of a window that does not have a sizing border.\n    /// </summary>\n    Border = 18,\n\n    /// <summary>\n    /// In the lower-horizontal border of a resizable window (the user can click the mouse to resize the window vertically).\n    /// </summary>\n    Bottom = 15,\n\n    /// <summary>\n    /// In the lower-left corner of a border of a resizable window (the user can click the mouse to resize the window diagonally).\n    /// </summary>\n    BottomLeft = 16,\n\n    /// <summary>\n    /// In the lower-right corner of a border of a resizable window (the user can click the mouse to resize the window diagonally).\n    /// </summary>\n    BottomRight = 17,\n\n    /// <summary>\n    /// In a title bar.\n    /// </summary>\n    Caption = 2,\n\n    /// <summary>\n    /// In a client area.\n    /// </summary>\n    Client = 1,\n\n    /// <summary>\n    /// In a Close button.\n    /// </summary>\n    CloseButton = 20,\n\n    /// <summary>\n    /// On the screen background or on a dividing line between windows (same as HTNOWHERE, except that the DefWindowProc function produces a system beep to indicate an error).\n    /// </summary>\n    Error = -2,\n\n    /// <summary>\n    /// In a size box (same as HTSIZE).\n    /// </summary>\n    GrowBox = 4,\n\n    /// <summary>\n    /// In a Help button.\n    /// </summary>\n    Help = 21,\n\n    /// <summary>\n    /// In a horizontal scroll bar.\n    /// </summary>\n    HorizontalScroll = 6,\n\n    /// <summary>\n    /// In the left border of a resizable window (the user can click the mouse to resize the window horizontally).\n    /// </summary>\n    Left = 10,\n\n    /// <summary>\n    /// In a menu.\n    /// </summary>\n    Menu = 5,\n\n    /// <summary>\n    /// In a Maximize button.\n    /// </summary>\n    MaximizeButton = 9,\n\n    /// <summary>\n    /// In a Minimize button.\n    /// </summary>\n    MinimizeButton = 8,\n\n    /// <summary>\n    /// On the screen background or on a dividing line between windows.\n    /// </summary>\n    Nowhere = 0,\n\n    /// <summary>\n    /// In a Minimize button.\n    /// </summary>\n    Reduce = MinimizeButton,\n\n    /// <summary>\n    /// In the right border of a resizable window (the user can click the mouse to resize the window horizontally).\n    /// </summary>\n    Right = 11,\n\n    /// <summary>\n    /// In a size box (same as HTGROWBOX).\n    /// </summary>\n    Size = GrowBox,\n\n    /// <summary>\n    /// In a window menu or in a Close button in a child window.\n    /// </summary>\n    SysMenu = 3,\n\n    /// <summary>\n    /// In the upper-horizontal border of a window.\n    /// </summary>\n    Top = 12,\n\n    /// <summary>\n    /// In the upper-left corner of a window border.\n    /// </summary>\n    TopLeft = 13,\n\n    /// <summary>\n    /// In the upper-right corner of a window border.\n    /// </summary>\n    TopRight = 14,\n\n    /// <summary>\n    /// In a window currently covered by another window in the same thread (the message will be sent to underlying windows in the same thread until one of them returns a code that is not HTTRANSPARENT).\n    /// </summary>\n    Transparent = -1,\n\n    /// <summary>\n    /// In the vertical scroll bar.\n    /// </summary>\n    VerticalScroll = 7,\n\n    /// <summary>\n    /// In a Maximize button.\n    /// </summary>\n    Zoom = MaximizeButton\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/IconDataMembers.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// Indicates which members of a <see cref=\"NotifyIconData\"/> structure\n/// were set, and thus contain valid data or provide additional information\n/// to the ToolTip as to how it should display.\n/// </summary>\n[Flags]\npublic enum IconDataMembers\n{\n    /// <summary>\n    /// The message ID is set.\n    /// </summary>\n    Message = 0x01,\n\n    /// <summary>\n    /// The notification icon is set.\n    /// </summary>\n    Icon = 0x02,\n\n    /// <summary>\n    /// The tooltip is set.\n    /// </summary>\n    Tip = 0x04,\n\n    /// <summary>\n    /// State information (<see cref=\"IconState\"/>) is set. This\n    /// applies to both <see cref=\"NotifyIconData.IconState\"/> and\n    /// <see cref=\"NotifyIconData.StateMask\"/>.\n    /// </summary>\n    State = 0x08,\n\n    /// <summary>\n    /// The balloon ToolTip is set. Accordingly, the following\n    /// members are set: <see cref=\"NotifyIconData.BalloonText\"/>,\n    /// <see cref=\"NotifyIconData.BalloonTitle\"/>, <see cref=\"NotifyIconData.BalloonFlags\"/>,\n    /// and <see cref=\"NotifyIconData.VersionOrTimeout\"/>.\n    /// </summary>\n    Info = 0x10,\n\n    // Internal identifier is set. Reserved, thus commented out.\n    //Guid = 0x20,\n\n    /// <summary>\n    /// Windows Vista (Shell32.dll version 6.0.6) and later. If the ToolTip\n    /// cannot be displayed immediately, discard it.<br/>\n    /// Use this flag for ToolTips that represent real-time information which\n    /// would be meaningless or misleading if displayed at a later time.\n    /// For example, a message that states \"Your telephone is ringing.\"<br/>\n    /// This modifies and must be combined with the <see cref=\"Info\"/> flag.\n    /// </summary>\n    Realtime = 0x40,\n\n    /// <summary>\n    /// Windows Vista (Shell32.dll version 6.0.6) and later.\n    /// Use the standard ToolTip. Normally, when uVersion is set\n    /// to NOTIFYICON_VERSION_4, the standard ToolTip is replaced\n    /// by the application-drawn pop-up user interface (UI).\n    /// If the application wants to show the standard tooltip\n    /// in that case, regardless of whether the on-hover UI is showing,\n    /// it can specify NIF_SHOWTIP to indicate the standard tooltip\n    /// should still be shown.<br/>\n    /// Note that the NIF_SHOWTIP flag is effective until the next call \n    /// to Shell_NotifyIcon.\n    /// </summary>\n    UseLegacyToolTips = 0x80\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/IconStates.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// The visual state of the icon.\n/// </summary>\npublic enum IconStates\n{\n    /// <summary>\n    /// The icon is visible.\n    /// </summary>\n    Visible = 0x00,\n\n    /// <summary>\n    /// Hide the icon.\n    /// </summary>\n    Hidden = 0x01\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/LocalMemoryFlags.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n[Flags]\npublic enum LocalMemoryFlags\n{\n    LMEM_FIXED = 0x0000,\n    LMEM_MOVEABLE = 0x0002,\n    LMEM_NOCOMPACT = 0x0010,\n    LMEM_NODISCARD = 0x0020,\n    LMEM_ZEROINIT = 0x0040,\n    LMEM_MODIFY = 0x0080,\n    LMEM_DISCARDABLE = 0x0F00,\n    LMEM_VALID_FLAGS = 0x0F72,\n    LMEM_INVALID_HANDLE = 0x8000,\n    LHND = (LMEM_MOVEABLE | LMEM_ZEROINIT),\n    LPTR = (LMEM_FIXED | LMEM_ZEROINIT),\n    NONZEROLHND = (LMEM_MOVEABLE),\n    NONZEROLPTR = (LMEM_FIXED)\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/MapTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum MapTypes : uint\n{\n    MapvkVkToVsc = 0x0,\n    MapvkVscToVk = 0x1,\n    MapvkVkToChar = 0x2,\n    MapvkVscToVkEx = 0x3,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/MenuFunctions.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n[Flags]\npublic enum MenuFunctions\n{\n    ByCommand = 0x00000000,\n    ByPosition = 0x00000400,\n    Enabled = 0x00000000,\n    Grayed = 0x00000001,\n    Disabled = 0x00000002\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/NativeMouseEvents.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum NativeMouseEvents\n{\n    MouseMove = 0x200,\n    MouseDragStart = 0x00AE,\n    MouseDragEnd = 0x00AF,\n\n    LeftButtonDown = 0x201,\n    LeftButtonUp = 0x202,\n    LeftButtonDoubleClick = 0x203,\n    OutsideLeftButtonDown = 0x00A1,\n    OutsideLeftButtonUp = 0x00A2,\n    OutsideLeftButtonDoubleClick = 0x00A3,\n\n    RightButtonDown = 0x204,\n    RightButtonUp = 0x205,\n    RightButtonDoubleClick = 0x206,\n    OutsideRightButtonDown = 0x00A4,\n    OutsideRightButtonUp = 0x00A5,\n    OutsideRightButtonDoubleClick = 0x00A6,\n\n    MiddleButtonDown = 0x207,\n    MiddleButtonUp = 0x208,\n    MiddleButtonDoubleClick = 0x209,\n    OutsideMiddleButtonDown = 0x00A7,\n    OutsideMiddleButtonUp = 0x00A8,\n    OutsideMiddleButtonDoubleClick = 0x00A9,\n\n    MouseWheel = 0x020A,\n    MouseWheelHorizontal = 0x020E,\n\n    ExtraButtonDown = 0x020B,\n    ExtraButtonUp = 0x020C,\n    ExtraButtonDoubleClick = 0x020D,\n    OutsideExtraButtonDown = 0x00AB,\n    OutsideExtraButtonUp = 0x00AC,\n    OutsideExtraButtonDoubleClick = 0x00AD\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/NotifyCommands.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// The main operations performed on the <see cref=\"Shell_NotifyIcon\"/> function.\n/// </summary>\npublic enum NotifyCommands\n{\n    /// <summary>\n    /// The taskbar icon is being created.\n    /// </summary>\n    Add = 0x00,\n\n    /// <summary>\n    /// The settings of the taskbar icon are being updated.\n    /// </summary>\n    Modify = 0x01,\n\n    /// <summary>\n    /// The taskbar icon is deleted.\n    /// </summary>\n    Delete = 0x02,\n\n    /// <summary>\n    /// Focus is returned to the taskbar icon.\n    /// </summary>\n    SetFocus = 0x03,\n\n    /// <summary>\n    /// Shell32.dll version 5.0 and later only. Instructs the taskbar\n    /// to behave according to the version number specified in the \n    /// uVersion member of the structure pointed to by lpdata.\n    /// This message allows you to specify whether you want the version\n    /// 5.0 behavior found on Microsoft Windows 2000 systems, or the\n    /// behavior found on earlier Shell versions. The default value for\n    /// uVersion is zero.\n    /// </summary>\n    SetVersion = 0x04\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/NotifyIconVersions.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// The notify icon version that is used. The higher\n/// the version, the more capabilities are available.\n/// </summary>\npublic enum NotifyIconVersions\n{\n    /// <summary>\n    /// Default behavior (legacy Win95).\n    /// Expects a <see cref=\"NotifyIconData\"/> size of 488.\n    /// </summary>\n    Win95 = 0x0,\n\n    /// <summary>\n    /// Behavior representing Win2000 an higher.\n    /// Expects a <see cref=\"NotifyIconData\"/> size of 504.\n    /// </summary>\n    Win2000 = 0x3,\n\n    /// <summary>\n    /// Extended tooltip support, which is available for Vista and later.\n    /// </summary>\n    Vista = 0x4\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/ProcessDpiAwareness.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum ProcessDpiAwareness\n{\n    ProcessDpiUnaware = 0,\n    ProcessSystemDpiAware = 1,\n    ProcessPerMonitorDpiAware = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/SetWindowPosFlags.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n[Flags]\npublic enum SetWindowPosFlags : uint\n{\n    /// <summary>\n    /// If the calling thread and the thread that owns the window are attached to different input queues, the system posts the request to the thread that owns the window.\n    /// This prevents the calling thread from blocking its execution while other threads process the request.\n    /// </summary>\n    AsyncWindowPositioning = 0x4000,\n\n    /// <summary>\n    /// Prevents generation of the WM_SYNCPAINT message.\n    /// </summary>\n    DeferErase = 0x2000,\n\n    /// <summary>\n    /// Draws a frame (defined in the window's class description) around the window.\n    /// </summary>\n    DrawFrame = 0x0020,\n\n    /// <summary>\n    /// Applies new frame styles set using the SetWindowLong function.\n    /// Sends a WM_NCCALCSIZE message to the window, even if the window's size is not being changed.\n    /// If this flag is not specified, WM_NCCALCSIZE is sent only when the window's size is being changed.\n    /// </summary>\n    FrameChanged = 0x0020,\n\n    /// <summary>\n    /// Hides the window.\n    /// </summary>\n    HideWindow = 0x0080,\n\n    /// <summary>\n    /// Does not activate the window.\n    /// If this flag is not set, the window is activated and moved to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter parameter).\n    /// </summary>\n    NoActivate = 0x0010,\n\n    /// <summary>\n    /// Discards the entire contents of the client area.\n    /// If this flag is not specified, the valid contents of the client area are saved and copied back into the client area after the window is sized or repositioned.\n    /// </summary>\n    NoCopyBits = 0x0100,\n\n    /// <summary>\n    /// Retains the current position (ignores X and Y parameters).\n    /// </summary>\n    NoMove = 0x0002,\n\n    /// <summary>\n    /// Does not change the owner window's position in the Z order.\n    /// </summary>\n    NoOwnerZOrder = 0x0200,\n\n    /// <summary>\n    /// Does not redraw changes. If this flag is set, no repainting of any kind occurs.\n    /// This applies to the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent window uncovered as a result of the window being moved.\n    /// When this flag is set, the application must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.\n    /// </summary>\n    NoRedraw = 0x0008,\n\n    /// <summary>\n    /// Same as the NoOwnerZOrder flag.\n    /// </summary>\n    NoReposition = 0x0200,\n\n    /// <summary>\n    /// Prevents the window from receiving the WM_WINDOWPOSCHANGING message.\n    /// </summary>\n    NoSendChanging = 0x0400,\n\n    /// <summary>\n    /// Retains the current size (ignores the cx and cy parameters).\n    /// </summary>\n    NoSize = 0x0001,\n\n    /// <summary>\n    /// Retains the current Z order (ignores the hWndInsertAfter parameter).\n    /// </summary>\n    NoZOrder = 0x0004,\n\n    /// <summary>\n    /// Displays the window.\n    /// </summary>\n    ShowWindow = 0x0040\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/ShellExecuteMasks.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n[Flags]\npublic enum ShellExecuteMasks : uint\n{\n    Default = 0x00000000,\n    ClassName = 0x00000001,\n    ClassKey = 0x00000003,\n    IdList = 0x00000004,\n    InvokeIdList = 0x0000000c, //InvokeIdList(0xC) implies IdList(0x04) \n    HotKey = 0x00000020,\n    NoCloseProcess = 0x00000040,\n    ConnectNetDrv = 0x00000080,\n    NoAsync = 0x00000100,\n    FlagDdeWait = NoAsync,\n    DeEnvSubst = 0x00000200,\n    FlagNoUi = 0x00000400,\n    Unicode = 0x00004000,\n    NoConsole = 0x00008000,\n    Asyncok = 0x00100000,\n    HMonitor = 0x00200000,\n    NoZoneChecks = 0x00800000,\n    NoQueryClassStore = 0x01000000,\n    WaitForInputIdle = 0x02000000,\n    FlagLogUsage = 0x04000000,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/ShowWindowCommands.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum ShowWindowCommands\n{\n    /// <summary>\n    /// Hides the window and activates another window.\n    /// </summary>\n    Hide = 0,\n\n    /// <summary>\n    /// Activates and displays a window. If the window is minimized or\n    /// maximized, the system restores it to its original size and position.\n    /// An application should specify this flag when displaying the window\n    /// for the first time.\n    /// </summary\n    /// >\n    Normal = 1,\n    /// <summary>\n    /// Activates the window and displays it as a minimized window.\n    /// </summary>\n    ShowMinimized = 2,\n\n    /// <summary>\n    /// Maximizes the specified window.\n    /// </summary>\n    Maximize = 3,\n\n    /// <summary>\n    /// Activates the window and displays it as a maximized window.\n    /// </summary>      \n    ShowMaximized = 3,\n\n    /// <summary>\n    /// Displays a window in its most recent size and position. This value\n    /// is similar to <see cref=\"ShowWindowCommands.Normal\"/>, except\n    /// the window is not activated.\n    /// </summary>\n    ShowNoActivate = 4,\n\n    /// <summary>\n    /// Activates the window and displays it in its current size and position.\n    /// </summary>\n    Show = 5,\n\n    /// <summary>\n    /// Minimizes the specified window and activates the next top-level\n    /// window in the Z order.\n    /// </summary>\n    Minimize = 6,\n\n    /// <summary>\n    /// Displays the window as a minimized window. This value is similar to\n    /// <see cref=\"ShowWindowCommands.ShowMinimized\"/>, except the\n    /// window is not activated.\n    /// </summary>\n    ShowMinNoActive = 7,\n\n    /// <summary>\n    /// Displays the window in its current size and position. This value is\n    /// similar to <see cref=\"ShowWindowCommands.Show\"/>, except the\n    /// window is not activated.\n    /// </summary>\n    ShowNa = 8,\n\n    /// <summary>\n    /// Activates and displays the window. If the window is minimized or\n    /// maximized, the system restores it to its original size and position.\n    /// An application should specify this flag when restoring a minimized window.\n    /// </summary>\n    Restore = 9,\n\n    /// <summary>\n    /// Sets the show state based on the SW_* value specified in the\n    /// STARTUPINFO structure passed to the CreateProcess function by the\n    /// program that started the application.\n    /// </summary>\n    ShowDefault = 10,\n\n    /// <summary>\n    ///  <b>Windows 2000/XP:</b> Minimizes a window, even if the thread\n    /// that owns the window is not responding. This flag should only be\n    /// used when minimizing windows from a different thread.\n    /// </summary>\n    ForceMinimize = 11\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/SpecialWindowHandles.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// Special window handles.\n/// </summary>\npublic enum SpecialWindowHandles\n{\n    /// <summary>\n    /// Places the window at the top of the Z order.\n    /// </summary>\n    Top = 0,\n\n    /// <summary>\n    /// Places the window at the bottom of the Z order.\n    /// If the hWnd parameter identifies a topmost window, the window loses its topmost status and is placed at the bottom of all other windows.\n    /// </summary>\n    Bottom = 1,\n\n    /// <summary>\n    /// Places the window above all non-topmost windows.\n    /// The window maintains its topmost position even when it is deactivated.\n    /// </summary>\n    TopMost = -1,\n\n    /// <summary>\n    /// Places the window above all non-topmost windows (that is, behind all topmost windows).\n    /// This flag has no effect if the window is already a non-topmost window.\n    /// </summary>\n    NoTopMost = -2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/SysCommands.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum SysCommands : uint\n{\n    Size = 0xF000,\n    Move = 0xF010,\n    Minimize = 0xF020,\n    Maximize = 0xF030,\n    NextWindow = 0xF040,\n    PreviousWindow = 0xF050,\n    Close = 0xF060,\n    VScroll = 0xF070,\n    HScroll = 0xF080,\n    MouseMenu = 0xF090,\n    KeyMenu = 0xF100,\n    Arrange = 0xF110,\n    Restore = 0xF120,\n    TaskList = 0xF130,\n    ScreenSave = 0xF140,\n    HotKey = 0xF150,\n    Default = 0xF160,\n    MonitorPower = 0xF170,\n    ContextHelp = 0xF180,\n    Separator = 0xF00F,\n    IsSecure = 0x0001,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/TimeResults.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum TimerResults : uint\n{\n    NoError = 0,\n    NoCanDo = 97\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/WindowAttributes.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum WindowAttributes\n{\n    /// <summary>\n    /// Sets a new address for the window procedure.\n    /// You cannot change this attribute if the window does not belong to the same process as the calling thread.\n    /// </summary>\n    GwlWndproc = -4,\n\n    /// <summary>\n    /// Sets a new application instance handle.\n    /// </summary>\n    GwlHinstance = -6,\n\n    /// <summary>\n    /// Changes the owner of a top-level window.\n    /// </summary>\n    GwlHwndparent = -8,\n\n    /// <summary>\n    /// Sets a new window style.\n    /// </summary>\n    GwlStyle = -16,\n\n    /// <summary>\n    /// Sets a new extended window style.\n    /// </summary>\n    GwlExstyle = -20,\n\n    /// <summary>\n    /// Sets the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.\n    /// </summary>\n    GwlUserdata = -21,\n\n    /// <summary>\n    /// Sets a new identifier of the child window. The window cannot be a top-level window.\n    /// </summary>\n    GwlId = -12\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/WindowStyles.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum WindowStyles : uint\n{\n    Overlapped = 0,\n    Popup = 0x80000000,\n    Child = 0x40000000,\n    Minimize = 0x20000000,\n    Visible = 0x10000000,\n    Disabled = 0x8000000,\n    Clipsiblings = 0x4000000,\n    Clipchildren = 0x2000000,\n    Maximize = 0x1000000,\n    Caption = 0xC00000, //WS_BORDER or WS_DLGFRAME  \n    Border = 0x800000,\n    Dlgframe = 0x400000,\n    Vscroll = 0x200000,\n    Hscroll = 0x100000,\n    Sysmenu = 0x80000,\n    ThickFrame = 0x40000,\n    Group = 0x20000,\n    Tabstop = 0x10000,\n    MinimizeBox = 0x20000,\n    MaximizeBox = 0x10000,\n    Tiled = Overlapped,\n    Iconic = Minimize,\n    Sizebox = ThickFrame,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/WindowStylesEx.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\n/// <summary>\n/// Extended Window Styles.\n/// </summary>\npublic enum WindowStylesEx : uint\n{\n    DlgModalFrame = 0x0001,\n    NoParentNotify = 0x0004,\n    TopMost = 0x0008,\n    AcceptFiles = 0x0010,\n    Transparent = 0x0020,\n    MdiChild = 0x0040,\n    ToolWindow = 0x0080,\n    WindowEdge = 0x0100,\n    ClientEdge = 0x0200,\n    ContextHelp = 0x0400,\n    Right = 0x1000,\n    Left = 0x0000,\n    RtlReading = 0x2000,\n    LtrReading = 0x0000,\n    LeftScrollbar = 0x4000,\n    RightScrollbar = 0x0000,\n    ControlParent = 0x10000,\n    StaticEdge = 0x20000,\n    AppWindow = 0x40000,\n    OverlappedWindow = (WindowEdge | ClientEdge),\n    PaletteWindow = (WindowEdge | ToolWindow | TopMost),\n    Layered = 0x00080000,\n    NoInheritLayout = 0x00100000, // Disable inheritance of mirroring by children\n    LayoutRtl = 0x00400000, // Right to left mirroring\n    Composited = 0x02000000,\n    NoActivate = 0x08000000,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Native/WindowsMessages.cs",
    "content": "namespace ScreenToGif.Domain.Enums.Native;\n\npublic enum WindowsMessages\n{\n    Activate = 0x0006,\n    ActivateApp = 0x001C,\n    AfxFirst = 0x0360,\n    AfxLast = 0x037F,\n    App = 0x8000,\n    AskCbFormatName = 0x030C,\n    CancelJournal = 0x004B,\n    CancelMode = 0x001F,\n    CaptureChanged = 0x0215,\n    ChangeCbChain = 0x030D,\n    ChangeUiState = 0x0127,\n    Char = 0x0102,\n    CharToItem = 0x002F,\n    ChildActivate = 0x0022,\n    Clear = 0x0303,\n    Close = 0x0010,\n    ClipboardUpdate = 0x031D,\n    Command = 0x0111,\n    Compacting = 0x0041,\n    CompareItem = 0x0039,\n    ContextMenu = 0x007B,\n    Copy = 0x0301,\n    CopyData = 0x004A,\n    Create = 0x0001,\n    CtlColorBtn = 0x0135,\n    CtlColorDlg = 0x0136,\n    CtlColorEdit = 0x0133,\n    CtlColorListBox = 0x0134,\n    CtlColorMsgBox = 0x0132,\n    CtlColorScrollbar = 0x0137,\n    CtlColorStatic = 0x0138,\n    Cut = 0x0300,\n    DeadChar = 0x0103,\n    DeleteItem = 0x002D,\n    Destroy = 0x0002,\n    DestroyClipboard = 0x0307,\n    DeviceChange = 0x0219,\n    DevModeChange = 0x001B,\n    DisplayChange = 0x007E,\n    DrawClipboard = 0x0308,\n    DrawItem = 0x002B,\n    DropFiles = 0x0233,\n    Enable = 0x000A,\n    EndSession = 0x0016,\n    EnterIdle = 0x0121,\n    EnterMenuLoop = 0x0211,\n    EnterSizeMove = 0x0231,\n    EraseBackground = 0x0014,\n    ExitMenuLoop = 0x0212,\n    ExitSizeMove = 0x0232,\n    FontChange = 0x001D,\n    GetDialogCode = 0x0087,\n    GetFont = 0x0031,\n    GetHotkey = 0x0033,\n    GetIcon = 0x007F,\n    GetMinMaxInfo = 0x0024,\n    GetObject = 0x003D,\n    GetText = 0x000D,\n    GetTextLenght = 0x000E,\n    HandheldFirst = 0x0358,\n    HandheldLast = 0x035F,\n    Help = 0x0053,\n    Hotkey = 0x0312,\n    HorizontalScroll = 0x0114,\n    HorizontalScrollClipboard = 0x030E,\n    IconEraseBackground = 0x0027,\n    ImeChar = 0x0286,\n    ImeComposition = 0x010F,\n    ImeCompositionFull = 0x0284,\n    ImeControl = 0x0283,\n    ImeEndComposition = 0x010E,\n    ImeKeyDown = 0x0290,\n    ImeKeyLast = 0x010F,\n    ImeKeyUp = 0x0291,\n    ImeNotify = 0x0282,\n    ImeRequest = 0x0288,\n    ImeSelect = 0x0285,\n    ImeSetContent = 0x0281,\n    ImeStartComposition = 0x010D,\n    InitDialog = 0x0110,\n    InitMenu = 0x0116,\n    InitMenuPopup = 0x0117,\n    InputLanguageChange = 0x0051,\n    InputLanguageChangeRequest = 0x0050,\n    KeyDown = 0x0100,\n    KeyFirst = 0x0100,\n    KeyLast = 0x0108,\n    KeyUp = 0x0101,\n    KillFocus = 0x0008,\n    LeftDoubleClick = 0x0203,\n    LeftButtonDown = 0x0201,\n    LeftButtonUp = 0x0202,\n    MiddleDoubleClick = 0x0209,\n    MiddleButtonDown = 0x0207,\n    MiddleButtonUp = 0x0208,\n    MdiActivate = 0x0222,\n    MdiCascade = 0x0227,\n    MdiCreate = 0x0220,\n    MdiDestroy = 0x0221,\n    MdiGetActive = 0x0229,\n    MdiIconmArrange = 0x0228,\n    MdiMaximize = 0x0225,\n    MdiNext = 0x0224,\n    MdiRefreshMenu = 0x0234,\n    MdiRestore = 0x0223,\n    MdiSetMenu = 0x0230,\n    MdiTile = 0x0226,\n    MeasureItem = 0x002C,\n    MenuChar = 0x0120,\n    MenuCommand = 0x0126,\n    MenuDrag = 0x0123,\n    MenuGetObject = 0x0124,\n    MenuRightButtonUp = 0x0122,\n    MenuSelect = 0x011F,\n    MouseActivate = 0x0021,\n    MouseFirst = 0x0200,\n    MouseHover = 0x02A1,\n    MouseLast = 0x020D,\n    MouseLeave = 0x02A3,\n    MouseMove = 0x0200,\n    MouseWheel = 0x020A,\n    MouseHorizontalWheel = 0x020E,\n    Move = 0x0003,\n    Moving = 0x0216,\n    NonClientActivate = 0x0086,\n    NonClientCalculateSize = 0x0083,\n    NonClientCreate = 0x0081,\n    NonClientDestroy = 0x0082,\n    NonClientHitTest = 0x0084,\n    NonClientLeftButtonDoubleClick = 0x00A3,\n    NonClientLeftButtonDown = 0x00A1,\n    NonClientLeftButtonUp = 0x00A2,\n    NonClientMiddleButtonDoubleClick = 0x00A9,\n    NonClientMiddleButtonDown = 0x00A7,\n    NonClientMiddleButtonUp = 0x00A8,\n    NonClientMouseHover = 0x02A0,\n    NonClientMouseLeave = 0x02A2,\n    NonClientMouseMonve = 0x00A0,\n    NonClientPaint = 0x0085,\n    NonClientRightButtonDoubleClick = 0x00A6,\n    NonClientRightButtonDown = 0x00A4,\n    NonClientRightButtonUp = 0x00A5,\n    NonClientXButtonDoubleClick = 0x00AD,\n    NonClientXButtonDown = 0x00AB,\n    NonClientXButtonUp = 0x00AC,\n    NonClientUndocumentedAhDrawCaption = 0x00AE,\n    NonClientUndocumentedAhDrawFrame = 0x00AF,\n    NextDialogControl = 0x0028,\n    NextMenu = 0x0213,\n    Notify = 0x004E,\n    NotifyFormat = 0x0055,\n    Null = 0x0000,\n    Paint = 0x000F,\n    PaintClipboard = 0x0309,\n    PaintIcon = 0x0026,\n    PaletteChanged = 0x0311,\n    PaletteIsChanging = 0x0310,\n    ParentNotify = 0x0210,\n    Paste = 0x0302,\n    PenWinFirst = 0x0380,\n    PenWinLast = 0x038F,\n    Power = 0x0048,\n    PowerBroadcast = 0x0218,\n    Print = 0x0317,\n    PrintClient = 0x0318,\n    QueryDragIcon = 0x0037,\n    QueryEndSession = 0x0011,\n    QueryNewPalette = 0x030F,\n    QueryOpen = 0x0013,\n    QueueSync = 0x0023,\n    Quit = 0x0012,\n    RButtonDoubleClick = 0x0206,\n    RButtonDown = 0x0204,\n    RButtonUp = 0x0205,\n    RenderAllFormats = 0x0306,\n    RenderFormat = 0x0305,\n    SetCursor = 0x0020,\n    SetFocus = 0x0007,\n    SetFont = 0x0030,\n    SetHotKey = 0x0032,\n    SetIcon = 0x0080,\n    SetRedraw = 0x000B,\n    SetText = 0x000C,\n    SettingChange = 0x001A,\n    ShowWindow = 0x0018,\n    Size = 0x0005,\n    SizeClipboard = 0x030B,\n    Sizing = 0x0214,\n    SpoolerStatus = 0x002A,\n    StyleChanged = 0x007D,\n    StyleChanging = 0x007C,\n    SyncPaint = 0x0088,\n    SysChar = 0x0106,\n    SysColorChange = 0x0015,\n    SysCommand = 0x0112,\n    SysDeadChar = 0x0107,\n    SysKeyDown = 0x0104,\n    SysKeyUp = 0x0105,\n    TrainingCard = 0x0052,\n    TimeChange = 0x001E,\n    Timer = 0x0113,\n    Undo = 0x0304,\n    UnInitMenuPopup = 0x0125,\n    User = 0x0400,\n    UserChanged = 0x0054,\n    VKeyToItem = 0x002E,\n    VerticalScroll = 0x0115,\n    VerticalScrollClipboard = 0x030A,\n    WindowPositionChanged = 0x0047,\n    WindowPositionChanging = 0x0046,\n    WinIniChange = 0x001A,\n    XButtonDoubleClick = 0x020D,\n    XButtonDown = 0x020B,\n    XButtonUp = 0x020C,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ObfuscationModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum ObfuscationModes\n{\n    Pixelation,\n    Blur,\n    Darken,\n    Lighten\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/OverwriteModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum OverwriteModes\n{\n    Allow,\n    Warn,\n    Prompt\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/PanelType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The types of Panel of the Editor window.\n/// Positive values means that there's no preview overlay.\n/// </summary>\npublic enum PanelTypes\n{\n    /// <summary>\n    /// Save As Panel.\n    /// </summary>\n    SaveAs = 1,\n\n    /// <summary>\n    /// New Animation Panel.\n    /// </summary>\n    NewAnimation = 2,\n\n    /// <summary>\n    /// Clipboard Panel.\n    /// </summary>\n    Clipboard = 3,\n\n    /// <summary>\n    /// Resize Panel.\n    /// </summary>\n    Resize = 4,\n\n    /// <summary>\n    /// Flip/Rotate Panel.\n    /// </summary>\n    FlipRotate = 5,\n\n    /// <summary>\n    /// Override Delay Panel.\n    /// </summary>\n    OverrideDelay = 6,\n\n    /// <summary>\n    /// Change Delay Panel.\n    /// </summary>\n    IncreaseDecreaseDelay = 7,\n\n    ScaleDelay = 8,\n\n    /// <summary>\n    /// Fade Transition Panel.\n    /// </summary>\n    Fade = 9,\n\n    /// <summary>\n    /// Slide Transition Panel.\n    /// </summary>\n    Slide = 10,\n\n    /// <summary>\n    /// Reduce Frame Count Panel.\n    /// </summary>\n    ReduceFrames = 11,\n\n    /// <summary>\n    /// Load Recent Panel.\n    /// </summary>\n    LoadRecent = 12,\n\n    /// <summary>\n    /// Remove Duplicates Panel.\n    /// </summary>\n    RemoveDuplicates = 13,\n\n    /// <summary>\n    /// Mouse Events Panel.\n    /// </summary>\n    MouseEvents = 14,\n\n    /// <summary>\n    /// Smooth Loop Panel.\n    /// </summary>\n    SmoothLoop = 15,\n\n    /// <summary>\n    /// Crop Panel.\n    /// </summary>\n    Crop = -1,\n\n    /// <summary>\n    /// Caption Panel.\n    /// </summary>\n    Caption = -2,\n\n    /// <summary>\n    /// Free Text Panel.\n    /// </summary>\n    FreeText = -3,\n\n    /// <summary>\n    /// Title Frame Panel.\n    /// </summary>\n    TitleFrame = -4,\n\n    /// <summary>\n    /// Free Drawing Panel.\n    /// </summary>\n    FreeDrawing = -5,\n\n    /// <summary>\n    /// Shapes Panel.\n    /// </summary>\n    Shapes = -6,\n\n    /// <summary>\n    /// Watermark Panel.\n    /// </summary>\n    Watermark = -7,\n\n    /// <summary>\n    /// Border Panel.\n    /// </summary>\n    Border = -8,\n\n    /// <summary>\n    /// Cinemagraph Panel.\n    /// </summary>\n    Cinemagraph = -9,\n\n    /// <summary>\n    /// Progress Panel.\n    /// </summary>\n    Progress = -10,\n\n    /// <summary>\n    /// Key Strokes Panel.\n    /// </summary>\n    KeyStrokes = -11,\n\n    /// <summary>\n    /// Obfuscate Panel.\n    /// </summary>\n    Obfuscate = -12,\n\n    /// <summary>\n    /// Shadow Panel.\n    /// </summary>\n    Shadow = -13,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/PartialExportModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum PartialExportModes\n{\n    /// <summary>\n    /// An expression like '4, 5, 9 - 11'.\n    /// </summary>\n    FrameExpression,\n\n    /// <summary>\n    /// Start and end frame number.\n    /// </summary>\n    FrameRange,\n\n    /// <summary>\n    /// Start and end times.\n    /// </summary>\n    TimeRange,\n\n    /// <summary>\n    /// All selected frames in the timeline.\n    /// </summary>\n    Selection\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/PasteBehaviors.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Paste behavior for the editor.\n/// </summary>\npublic enum PasteBehaviors\n{\n    /// <summary>\n    /// It will paste before the selected frame.\n    /// </summary>\n    BeforeSelected,\n\n    /// <summary>\n    /// It will paste after the selected frame.\n    /// </summary>\n    AfterSelected\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/PredictionMethods.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Png prediction methods used by FFmpeg.\n/// </summary>\npublic enum PredictionMethods\n{\n    None,\n    Sub,\n    Up,\n    Avg,\n    Paeth,\n    Mixed\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ProgressTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Type of the progress indicator.\n/// </summary>\npublic enum ProgressTypes\n{\n    Bar,\n    Text\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ProjectByType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The types of source of project creation.\n/// </summary>\npublic enum ProjectByType\n{\n    Unknown = 0,\n    ScreenRecorder = 1,\n    WebcamRecorder = 2,\n    BoardRecorder = 3,\n    Editor = 4\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ProxyTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The proxy method, used for uploading files.\n/// </summary>\npublic enum ProxyTypes\n{\n    Disabled = 0,\n    Manual = 1,\n    System = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/RateUnits.cs",
    "content": "using System.ComponentModel;\n\nnamespace ScreenToGif.Domain.Enums;\n\npublic enum RateUnits\n{\n    [Description(\"B\")]\n    Bits,\n\n    [Description(\"K\")]\n    Kilobits,\n\n    [Description(\"M\")]\n    Megabits\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/RecorderStages.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Stage status of the recording process.\n/// </summary>\n[Flags]\npublic enum RecorderStages\n{\n    /// <summary>\n    /// Recording stopped.\n    /// </summary>\n    Stopped = 1, //1 << 0, 0b_000001\n\n    /// <summary>\n    /// Recording active.\n    /// </summary>\n    Recording = 2, //1 << 1, 0b_000010\n\n    /// <summary>\n    /// Recording paused.\n    /// </summary>\n    Paused = 4, //1 << 2, 0b_000100\n\n    /// <summary>\n    /// Pre start countdown active.\n    /// </summary>\n    PreStarting = 8, //1 << 3, 0b_001000\n\n    /// <summary>\n    /// The recording is being discarded.\n    /// </summary>\n    Discarding = 16, //1 << 4, 0b_010000\n\n\n\n    /// <summary>\n    /// Single shot mode.\n    /// </summary>\n    [Obsolete]\n    Snapping = 32, //1 << 5, 0b_100000 //Remove later.\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ReduceDelayModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Specifies the frame delay adjustment mode for the 'Reduce Framerate'.\n/// </summary>\npublic enum ReduceDelayModes\n{\n    DontAdjust = 0,\n    Previous = 1,\n    Evenly = 2\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ResizeDirection.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The direction in which the window should be resized.\n/// </summary>\npublic enum ResizeDirection\n{\n    Left = 1,\n    Right = 2,\n    Top = 3,\n    TopLeft = 4,\n    TopRight = 5,\n    Bottom = 6,\n    BottomLeft = 7,\n    BottomRight = 8\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/ScalingMethod.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Scaling quality options for resizing\n/// This enum is a subset of <seealso cref=\"System.Windows.Media.BitmapScalingMode\"/>.\n/// It is used to expose this enum to the Editor and choose which options are available\n/// </summary>\npublic enum ScalingMethod\n{\n    Fant = System.Windows.Media.BitmapScalingMode.Fant,\n    Linear = System.Windows.Media.BitmapScalingMode.Linear,\n    NearestNeighbor = System.Windows.Media.BitmapScalingMode.NearestNeighbor\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/SizeUnits.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum SizeUnits\n{\n    Pixels,\n    Percent\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/SlideFromType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Transition animation.\n/// </summary>\npublic enum SlideFromType\n{\n    Right,\n    Top,\n    Left,\n    Bottom\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/SmoothLoopSelectionModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum SmoothLoopFromModes\n{\n    End = 0,\n    Start = 1\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/StatusReason.cs",
    "content": "namespace ScreenToGif.Domain.Enums\n{\n    public enum StatusReasons : int\n    {\n        None,\n        EmptyProperty,\n        InvalidState,\n        FileAlreadyExists,\n        MissingFfmpeg,\n        MissingGifski,\n        UploadServiceUnauthorized\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/StatusType.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum StatusType : int\n{\n    None = 0,\n    Info,\n    Update,\n    Warning,\n    Error\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/SupportedFFmpegVersions.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum SupportedFFmpegVersions\n{\n    Version8 = -1,\n    Version7 = 0,\n    Version6 = 0,\n    Version5 = 1,\n    Version4 = 2,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/TaskTypes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum TaskTypes\n{\n    NotDeclared = 0,\n    MouseEvents = 1,\n    KeyStrokes = 2,\n    Delay = 3,\n    Progress = 4,\n    Border = 5,\n    Shadow = 6,\n    RemoveDuplicates = 7,\n    Watermark = 8,\n    TitleFrame = 9,\n    Resize = 10,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/UploadDestinations.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// Upload destination type.\n/// </summary>\npublic enum UploadDestinations\n{\n    NotDefined = 0,\n    Imgur,\n    Yandex = 3,\n    YouTrack,\n    Custom\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/UploadService.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// The upload service.\n/// </summary>\npublic enum UploadService\n{\n    None = 0,\n    ImgurAnonymous = 1,\n    Imgur = 2,\n    Yandex = 5,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/VideoCodecPresets.cs",
    "content": "using System.Diagnostics.CodeAnalysis;\n\nnamespace ScreenToGif.Domain.Enums;\n\n[SuppressMessage(\"ReSharper\", \"InconsistentNaming\")]\npublic enum VideoCodecPresets\n{\n    Auto = -1,\n    NotSelected,\n    None,\n\n    VerySlow,\n    Slower,\n    Slow,\n    Medium,\n    Fast,\n    Faster,\n    VeryFast,\n    SuperFast,\n    UltraFast,\n\n    Quality,\n    Balanced,\n    Speed,\n\n    Default,\n    Lossless,\n    LosslessHP,\n    HP,\n    HQ,\n    BD,\n    LowLatency,\n    LowLatencyHP,\n    LowLatencyHQ,\n\n    Picture, //Digital picture, like portrait, inner shot.\n    Photo, //Outdoor photograph, with natural lighting.\n    Drawing, //Hand or line drawing, with high-contrast details.\n    Icon, //Small-sized colorful images.\n    Text //Text-like.\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/VideoCodecs.cs",
    "content": "using System.ComponentModel;\n\nnamespace ScreenToGif.Domain.Enums;\n\npublic enum VideoCodecs\n{\n    NotSelected,\n\n    [Description(\"mpeg2video\")]\n    Mpeg2,\n\n    [Description(\"mpeg4\")]\n    Mpeg4,\n\n    [Description(\"libx264\")]\n    X264,\n\n    [Description(\"h264_amf\")]\n    H264Amf,\n\n    [Description(\"h264_nvenc\")]\n    H264Nvenc,\n\n    [Description(\"h264_qsv\")]\n    H264Qsv,\n\n    [Description(\"libx265\")]\n    X265,\n\n    [Description(\"hevc_amf\")]\n    HevcAmf,\n\n    [Description(\"hevc_nvenc\")]\n    HevcNvenc,\n\n    [Description(\"hevc_qsv\")]\n    HevcQsv,\n\n    [Description(\"libvpx\")]\n    Vp8,\n\n    [Description(\"libvpx-vp9\")]\n    Vp9,\n\n    [Description(\"libaom-av1\")]\n    LibAom,\n\n    [Description(\"libsvtav1\")]\n    SvtAv1,\n\n    [Description(\"librav1e\")]\n    Rav1E,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/VideoPixelFormats.cs",
    "content": "using System.ComponentModel;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace ScreenToGif.Domain.Enums;\n\n/// <summary>\n/// FFmpeg pixel formats.\n/// https://github.com/FFmpeg/FFmpeg/blob/b7b73e83e3d5c78a5fea96a6bcae02e1f0a5c45f/libavutil/pixdesc.c\n/// </summary>\n[SuppressMessage(\"ReSharper\", \"InconsistentNaming\")]\npublic enum VideoPixelFormats\n{\n    NotSelected,\n    Auto,\n    Bgr0,\n    [Description(\"bgr4_byte\")] Bgr4Byte, //https://stackoverflow.com/questions/8588384/how-to-define-an-enum-with-string-value\n    Bgr8,\n    BgrA,\n    Cuda,\n    D3D11,\n    Dxva2Vld,\n    Gbrp,\n    Gbrp10Le,\n    Gbrp12Le,\n    Gray,\n    Gray10Le,\n    Gray12Le,\n    Gray16Be,\n    MonoB,\n    Nv12,\n    Nv16,\n    Nv20Le,\n    Nv21,\n    P010Le,\n    Pal8,\n    Qsv,\n    Rgb24,\n    Rgb48Be,\n    Rgb8,\n    Rgba64Be,\n    RgbA,\n    [Description(\"bgr4_byte\")] Rgb4Byte,\n    Ya8,\n    Ya16Be,\n    Yuv420p,\n    Yuv420p10Le,\n    Yuv420p12Le,\n    Yuv422p,\n    Yuv422p10Le,\n    Yuv422p12Le,\n    Yuv440p,\n    Yuv444p,\n    Yuv440p10Le,\n    Yuv440p12Le,\n    Yuv444p10Le,\n    Yuv444p12Le,\n    Yuv444p16Le,\n    Yuva420p,\n    Yuvj420p,\n    Yuvj422p,\n    Yuvj444p,\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/VideoSettingsModes.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum VideoSettingsModes\n{\n    Normal,\n    Advanced\n}"
  },
  {
    "path": "ScreenToGif.Model/Enums/Vsyncs.cs",
    "content": "namespace ScreenToGif.Domain.Enums;\n\npublic enum Vsyncs\n{\n    Off,\n    Auto,\n    Passthrough,\n    Cfr,\n    Vfr,\n    Drop\n}"
  },
  {
    "path": "ScreenToGif.Model/Events/CustomKeyEventArgs.cs",
    "content": "using System.Windows.Input;\n\nnamespace ScreenToGif.Domain.Events\n{\n    /// <summary>\n    /// Custom Key Event Args.\n    /// </summary>\n    public class CustomKeyEventArgs : EventArgs\n    {\n        public Key Key { get; }\n\n        public bool IsUppercase { get; }\n\n        public bool IsInjected { get; }\n\n        public bool Handled { get; private set; }\n\n        public CustomKeyEventArgs(Key key, bool isUppercase = false, bool isInjected = false)\n        {\n            Key = key;\n            IsUppercase = isUppercase;\n            IsInjected = isInjected;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Events/CustomKeyPressEventArgs.cs",
    "content": "namespace ScreenToGif.Domain.Events\n{\n    /// <summary>\n    /// Custom KeyPress Event Args\n    /// </summary>\n    public class CustomKeyPressEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Gets or sets the character corresponding to the key pressed.\n        /// </summary>\n        /// <returns>\n        /// The ASCII character that is composed. For example, if the user presses SHIFT + K, \n        /// this property returns an uppercase K.\n        /// </returns>\n        public char KeyChar { get; private set; }\n\n        public bool Handled { get; private set; }\n\n        public CustomKeyPressEventArgs(char keyChar)\n        {\n            KeyChar = keyChar;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Events/ManipulatedEventArgs.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Domain.Events;\n\npublic delegate void ManipulatedEventHandler(object sender, ManipulatedEventArgs args);\n\npublic class ManipulatedEventArgs : RoutedEventArgs\n{\n    public double AngleDifference { get; private set; }\n\n    public double WidthDifference { get; private set; }\n\n    public double HeightDifference { get; private set; }\n\n    public double TopDifference { get; private set; }\n\n    public double LeftDifference { get; private set; }\n\n    public ManipulatedEventArgs(RoutedEvent routedEvent, double angleDifference, double widthDifference, double heightDifference, double topDifference, double leftDifference) : base(routedEvent)\n    {\n        AngleDifference = angleDifference;\n        WidthDifference = widthDifference;\n        HeightDifference = heightDifference;\n        TopDifference = topDifference;\n        LeftDifference = leftDifference;\n    }\n\n    public ManipulatedEventArgs(RoutedEvent routedEvent, double angleDifference) : base(routedEvent)\n    {\n        AngleDifference = angleDifference;\n    }\n\n    public ManipulatedEventArgs(RoutedEvent routedEvent, double widthDifference, double heightDifference, double topDifference, double leftDifference) : base(routedEvent)\n    {\n        WidthDifference = widthDifference;\n        HeightDifference = heightDifference;\n        TopDifference = topDifference;\n        LeftDifference = leftDifference;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Events/SaveEventArgs.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Domain.Events\n{\n    public class SaveEventArgs : RoutedEventArgs\n    {\n        public SaveEventArgs(RoutedEvent routedEvent) : base(routedEvent)\n        { }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Events/ValidatedEventArgs.cs",
    "content": "using System.Windows;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Domain.Events\n{\n    public delegate void ValidatedEventHandler(object sender, ValidatedEventArgs e);\n\n    public class ValidatedEventArgs : RoutedEventArgs\n    {\n        public string MessageKey { get; set; }\n\n        public StatusReasons Reason { get; set; }\n\n        public Action Action { get; set; }\n\n\n        public ValidatedEventArgs(string messageKey, StatusReasons reason, Action action = null)\n        {\n            MessageKey = messageKey;\n            Reason = reason;\n            Action = action;\n        }\n\n        public ValidatedEventArgs(RoutedEvent routedEvent, string messageKey, StatusReasons reason, Action action = null) : base(routedEvent)\n        {\n            MessageKey = messageKey;\n            Reason = reason;\n            Action = action;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Exceptions/GraphicsConfigurationException.cs",
    "content": "namespace ScreenToGif.Domain.Exceptions;\n\npublic class GraphicsConfigurationException : Exception\n{\n    public GraphicsConfigurationException(string message, Exception exception) : base(message, exception)\n    { }\n}"
  },
  {
    "path": "ScreenToGif.Model/Exceptions/SettingsPersistenceException.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Domain.Exceptions;\n\npublic sealed class SettingsPersistenceException : Exception\n{\n    public ResourceDictionary ResourceDictionary { get; }\n\n    public bool IsLocal { get; }\n\n    public SettingsPersistenceException()\n    { }\n\n    public SettingsPersistenceException(ResourceDictionary resourceDictionary, bool isLocal)\n    {\n        ResourceDictionary = resourceDictionary;\n        IsLocal = isLocal;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Exceptions/UploadException.cs",
    "content": "using System;\n\nnamespace ScreenToGif.Cloud\n{\n    public class UploadException : Exception\n    {\n        public UploadException() : base(\"Uploading failed\")\n        { }\n\n        public UploadException(string message) : base(message)\n        { }\n\n        public UploadException(string message, Exception innerException) : base(message, innerException)\n        { }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IExportPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Domain.Interfaces\n{\n    public interface IExportPreset : IPreset\n    {\n        string TitleKey { get; set; }\n        string DescriptionKey { get; set; }\n        ExportFormats Type { get; set; }\n        bool PickLocation { get; set; }\n        OverwriteModes OverwriteMode { get; set; }\n        bool ExportAsProjectToo { get; set; }\n        bool UploadFile { get; set; }\n        string UploadService { get; set; }\n\n        bool ExportPartially { get; set; }\n        PartialExportModes PartialExport { get; set; }\n        string PartialExportFrameExpression { get; set; }\n\n        string OutputFolder { get; set; }\n        string OutputFilename { get; set; }\n\n        bool RequiresFfmpeg { get; set; }\n        bool RequiresGifski { get; set; }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IFfmpegPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Domain.Interfaces\n{\n    public interface IFfmpegPreset\n    {\n        VideoSettingsModes SettingsMode { get; set; }\n\n        string Parameters { get; set; }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IFrame.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing System.Windows;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Domain.Interfaces;\n\npublic interface IFrame\n{\n    public string Path { get; set; }\n\n    public string Name { get; set; }\n\n    public int Delay { get; set; }\n\n    public int CursorX { get; set; }\n\n    public int CursorY { get; set; }\n\n    public MouseButtons ButtonClicked { get; set; }\n\n    public bool WasClicked { get; set; }\n\n    public int Index { get; set; }\n\n    public Int32Rect Rect { get; set; }\n\n    public Color ColorKey { get; set; }\n\n    public bool HasArea => Rect.HasArea;\n\n    public List<IKeyGesture> KeyList { get; set; }\n\n    public byte[] Data { get; set; }\n\n    public bool FrameSkipped { get; set; }\n\n    public long DataLength { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IHistory.cs",
    "content": "using System.Windows.Documents;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Domain.Interfaces;\n\npublic interface IHistory\n{\n    public UploadDestinations Type { get; set; }\n\n    public string PresetName { get; set; }\n\n    public DateTime? DateInUtc { get; set; }\n\n    public DateTime? DateInLocalTime { get; }\n\n    public int Result { get; set; }\n\n    public bool WasSuccessful { get; }\n\n    public long Size { get; set; }\n\n    public TimeSpan? Duration { get; set; }\n\n    public string Link { get; set; }\n\n    public string DeletionLink { get; set; }\n\n    public string Message { get; set; }\n\n    public FlowDocument Content { get; }\n\n    public string GetLink(IPreset preset);\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IKeyGesture.cs",
    "content": "using System.Windows.Input;\n\nnamespace ScreenToGif.Domain.Interfaces;\n\npublic interface IKeyGesture\n{\n    public ModifierKeys Modifiers { get; set; }\n    public Key Key { get; set; }\n    public bool IsUppercase { get; set; }\n    public bool IsInjected { get; set; }\n    public string DisplayString { get; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IPanel.cs",
    "content": "namespace ScreenToGif.Domain.Interfaces\n{\n    public interface IPanel\n    {\n        Task<bool> IsValid();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IPersistent.cs",
    "content": "namespace ScreenToGif.Domain.Interfaces\n{\n    public interface IPersistent\n    {\n        void Persist();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IPreset.cs",
    "content": "using ScreenToGif.Domain.Events;\n\nnamespace ScreenToGif.Domain.Interfaces\n{\n    public interface IPreset\n    {\n        string Title { get; set; }    \n        \n        string Description { get; set; }\n\n        Task<ValidatedEventArgs> IsValid();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IUploadPreset.cs",
    "content": "using System.Collections;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Domain.Interfaces;\n\npublic interface IUploadPreset : IPreset\n{\n    public UploadDestinations Type { get; set; }\n\n    public bool IsEnabled { get; set; }\n\n    public string ImageId { get; set; }\n\n    public bool IsAnonymous { get; set; }\n\n    public ArrayList History { get; set; }\n\n    public List<ExportFormats> AllowedTypes { get; set; }\n\n    public string TypeName { get; }\n\n    public bool HasLimit { get; }\n\n    public bool HasSizeLimit { get; }\n\n    public bool HasDurationLimit { get; }\n\n    public bool HasResolutionLimit { get; }\n\n    public long? SizeLimit { get; }\n\n    public TimeSpan? DurationLimit { get; }\n\n    public Size? ResolutionLimit { get; }\n\n    public string Limit { get; }\n\n    public string Mode { get; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Interfaces/IUploader.cs",
    "content": "namespace ScreenToGif.Domain.Interfaces;\n\npublic interface IUploader\n{\n    /// <summary>\n    /// Upload the file to the cloud service.\n    /// </summary>\n    /// <param name=\"preset\">The upload preset with the configurations necessary for the upload.</param>\n    /// <param name=\"path\">Path of file.</param>\n    /// <param name=\"cancellationToken\"></param>\n    /// <param name=\"progressCallback\"></param>\n    /// <returns>The upload details.</returns>\n    Task<IHistory> UploadFileAsync(IUploadPreset preset, string path, CancellationToken cancellationToken, IProgress<double> progressCallback = null);\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/DetectedRegion.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Domain.Models;\n\npublic class DetectedRegion\n{\n    public IntPtr Handle { get; private set; }\n\n    public Rect Bounds { get; set; }\n\n    public string Name { get; private set; }\n\n    /// <summary>\n    /// The Z-Index of the window, higher means that the window will be on top.\n    /// </summary>\n    public int Order { get; private set; }\n\n    public DetectedRegion(IntPtr handle, Rect bounds, string name, int order = 0)\n    {\n        Handle = handle;\n        Bounds = bounds;\n        Name = name;\n        Order = order;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/ExportFrame.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Domain.Models;\n\npublic class ExportFrame\n{\n    /// <summary>\n    /// The position of the frame within the list.\n    /// </summary>\n    public int Index { get; set; }\n\n    /// <summary>\n    /// The position of the frame on the pixel array.\n    /// </summary>\n    public long DataPosition { get; set; }\n\n    /// <summary>\n    /// The pixel array data length of the frame.\n    /// </summary>\n    public long DataLength { get; set; }\n\n    /// <summary>\n    /// The delay of the frame.\n    /// </summary>\n    public int Delay { get; set; }\n\n    /// <summary>\n    /// The Rectangle of the frame.\n    /// </summary>\n    public Int32Rect Rect { get; set; }\n\n    /// <summary>\n    /// The depth in bits of the frame.\n    /// </summary>\n    public int ImageDepth { get; set; }\n\n    /// <summary>\n    /// True if the frame has area, width and height > 0.\n    /// </summary>\n    public bool HasArea => Rect.HasArea;\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/ExportProject.cs",
    "content": "using ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.Domain.Models;\n\npublic class ExportProject\n{\n    /// <summary>\n    /// True if the project will be passed as files instead of byte array.\n    /// </summary>\n    public bool UsesFiles { get; set; }\n\n    /// <summary>\n    /// The path of frame chunk.\n    /// </summary>\n    public string ChunkPath { get; set; }\n\n    /// <summary>\n    /// The path of frame chunk that is used to hold the new frame data when cutting the images.\n    /// </summary>\n    public string NewChunkPath { get; set; }\n\n    /// <summary>\n    /// Path of the folder where the files are located.\n    /// </summary>\n    public string Path { get; set; }\n\n    /// <summary>\n    /// List of frames.\n    /// </summary>\n    public List<ExportFrame> Frames { get; set; } = new();\n\n    /// <summary>\n    /// List of frames.\n    /// </summary>\n    public List<IFrame> FramesFiles { get; set; } = new();\n\n    /// <summary>\n    /// Frame count.\n    /// </summary>\n    public int FrameCount => UsesFiles ? FramesFiles.Count : Frames.Count;\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/FosshubItem.cs",
    "content": "﻿using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Model;\n\n[DataContract]\npublic class FosshubItem\n{\n    [DataMember(Name = \"title\")]\n    public string Title { get; set; }\n\n    [DataMember(Name = \"link\")]\n    public string Link { get; set; }\n\n    [DataMember(Name = \"type\")]\n    public string Type { get; set; }\n\n    [DataMember(Name = \"version\")]\n    public string Version { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/FosshubRelease.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Runtime.Serialization;\n\nnamespace ScreenToGif.Model;\n\n[DataContract]\npublic class FosshubRelease\n{\n    [DataMember(Name = \"title\")]\n    public string Title { get; set; }\n\n    [DataMember(Name = \"date\")]\n    public string DateString { get; set; }\n\n    public DateTime? CreatedAt\n    {\n        get\n        {\n            if (DateTime.TryParse(DateString, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out var date))\n                return date;\n                \n            return null;\n        }\n    }\n\n    [DataMember(Name = \"link\")]\n    public string Link { get; set; }\n\n    [DataMember(Name = \"items\")]\n    public List<FosshubItem> Items { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/FosshubResponse.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Model;\n\n[DataContract]\npublic class FosshubResponse\n{\n    [DataMember(Name = \"release\")]\n    public FosshubRelease Release { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Frame.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing System.Windows;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Domain.Models;\n\npublic class Frame : IFrame\n{\n    public string Path { get; set; }\n\n    public string Name { get; set; }\n\n    public int Delay { get; set; }\n\n    public int CursorX { get; set; }\n\n    public int CursorY { get; set; }\n\n    public MouseButtons ButtonClicked { get; set; }\n\n    public bool WasClicked { get; set; }\n\n    public int Index { get; set; }\n\n    public Int32Rect Rect { get; set; }\n\n    public Color ColorKey { get; set; }\n\n    public List<IKeyGesture> KeyList { get; set; }\n\n    public byte[] Data { get; set; }\n\n    public bool FrameSkipped { get; set; }\n\n    public long DataLength { get; set; }\n}\n"
  },
  {
    "path": "ScreenToGif.Model/Models/GitHub/GitHubAsset.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace ScreenToGif.Domain.Models.GitHub;\n\npublic class GitHubAsset\n{\n    [JsonPropertyName(\"url\")]\n    public string Url { get; set; }\n\n    [JsonPropertyName(\"id\")]\n    public long Id { get; set; }\n\n    [JsonPropertyName(\"node_id\")]\n    public string NodeId { get; set; }\n\n    [JsonPropertyName(\"name\")]\n    public string Name { get; set; }\n\n    [JsonPropertyName(\"label\")]\n    public object Label { get; set; }\n\n    [JsonPropertyName(\"uploader\")]\n    public GitHubUser Uploader { get; set; }\n\n    [JsonPropertyName(\"content_type\")]\n    public string ContentType { get; set; }\n\n    [JsonPropertyName(\"state\")]\n    public string State { get; set; }\n\n    [JsonPropertyName(\"size\")]\n    public long Size { get; set; }\n\n    [JsonPropertyName(\"download_count\")]\n    public long DownloadCount { get; set; }\n\n    [JsonPropertyName(\"created_at\")]\n    public DateTime CreatedAt { get; set; }\n\n    [JsonPropertyName(\"updated_at\")]\n    public DateTime UpdatedAt { get; set; }\n\n    [JsonPropertyName(\"browser_download_url\")]\n    public string BrowserDownloadUrl { get; set; }\n}\n"
  },
  {
    "path": "ScreenToGif.Model/Models/GitHub/GitHubRelease.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace ScreenToGif.Domain.Models.GitHub;\n\npublic class GitHubRelease\n{\n    [JsonPropertyName(\"url\")]\n    public string Url { get; set; }\n\n    [JsonPropertyName(\"assets_url\")]\n    public string AssetsUrl { get; set; }\n\n    [JsonPropertyName(\"upload_url\")]\n    public string UploadUrl { get; set; }\n\n    [JsonPropertyName(\"html_url\")]\n    public string HtmlUrl { get; set; }\n\n    [JsonPropertyName(\"id\")]\n    public long Id { get; set; }\n\n    [JsonPropertyName(\"author\")]\n    public GitHubUser Author { get; set; }\n\n    [JsonPropertyName(\"node_id\")]\n    public string NodeId { get; set; }\n\n    [JsonPropertyName(\"tag_name\")]\n    public string TagName { get; set; }\n\n    [JsonPropertyName(\"target_commitish\")]\n    public string TargetCommitish { get; set; }\n\n    [JsonPropertyName(\"name\")]\n    public string Name { get; set; }\n\n    [JsonPropertyName(\"draft\")]\n    public bool IsDraft { get; set; }\n\n    [JsonPropertyName(\"prerelease\")]\n    public bool IsPrerelease { get; set; }\n\n    [JsonPropertyName(\"created_at\")]\n    public DateTime CreatedAt { get; set; }\n\n    [JsonPropertyName(\"published_at\")]\n    public DateTime PublishedAt { get; set; }\n\n    [JsonPropertyName(\"assets\")]\n    public GitHubAsset[] Assets { get; set; }\n}\n"
  },
  {
    "path": "ScreenToGif.Model/Models/GitHub/GitHubUser.cs",
    "content": "using System.Text.Json.Serialization;\n\nnamespace ScreenToGif.Domain.Models.GitHub;\n\npublic class GitHubUser\n{\n    [JsonPropertyName(\"login\")]\n    public string Login { get; set; }\n\n    [JsonPropertyName(\"id\")]\n    public long Id { get; set; }\n\n    [JsonPropertyName(\"node_id\")]\n    public string NodeId { get; set; }\n\n    [JsonPropertyName(\"avatar_url\")]\n    public string AvatarUrl { get; set; }\n\n    [JsonPropertyName(\"gravatar_id\")]\n    public string GravatarId { get; set; }\n\n    [JsonPropertyName(\"url\")]\n    public string Url { get; set; }\n\n    [JsonPropertyName(\"html_url\")]\n    public string HtmlUrl { get; set; }\n\n    [JsonPropertyName(\"followers_url\")]\n    public string FollowersUrl { get; set; }\n\n    [JsonPropertyName(\"following_url\")]\n    public string FollowingUrl { get; set; }\n\n    [JsonPropertyName(\"gists_url\")]\n    public string GistsUrl { get; set; }\n\n    [JsonPropertyName(\"starred_url\")]\n    public string StarredUrl { get; set; }\n\n    [JsonPropertyName(\"subscriptions_url\")]\n    public string SubscriptionsUrl { get; set; }\n\n    [JsonPropertyName(\"organizations_url\")]\n    public string OrganizationsUrl { get; set; }\n\n    [JsonPropertyName(\"repos_url\")]\n    public string ReposUrl { get; set; }\n\n    [JsonPropertyName(\"events_url\")]\n    public string EventsUrl { get; set; }\n\n    [JsonPropertyName(\"received_events_url\")]\n    public string ReceivedEventsUrl { get; set; }\n\n    [JsonPropertyName(\"type\")]\n    public string Type { get; set; }\n\n    [JsonPropertyName(\"site_admin\")]\n    public bool IsSiteAdmin { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/MediaSource.cs",
    "content": "using System.Diagnostics;\n\nnamespace ScreenToGif.Domain.Models;\n\n[DebuggerDisplay(\"Resolution = {Width}x{Height}, Framerate: {Framerate}, Format: {Format}\")]\npublic class MediaSource\n{\n    public int StreamIndex { get; set; }\n\n    public int MediaIndex { get; set; }\n\n    public int Width { get; set; }\n\n    public int Height { get; set; }\n\n    public double Framerate { get; set; }\n\n    public string Format { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Native/Monitor.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Domain.Models.Native;\n\npublic class Monitor\n{\n    public IntPtr Handle { get; set; }\n\n    public Rect Bounds { get; set; }\n\n    public Rect NativeBounds { get; set; }\n\n    public Rect WorkingArea { get; set; }\n\n    public string Name { get; set; }\n\n    public string AdapterName { get; set; }\n\n    public string FriendlyName { get; set; }\n\n    public int Dpi { get; set; }\n\n    public double Scale => Dpi / 96d;\n\n    public bool IsPrimary { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Native/NativeRect.cs",
    "content": "using System.Runtime.InteropServices;\nusing System.Windows;\n\nnamespace ScreenToGif.Domain.Models.Native;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct NativeRect\n{\n    public int Left;        // x position of upper-left corner\n    public int Top;         // y position of upper-left corner\n    public int Right;       // x position of lower-right corner\n    public int Bottom;      // y position of lower-right corner\n\n    public Int32Rect ToRectangle()\n    {\n        return new Int32Rect(Left, Top, Right - Left, Bottom - Top);\n    }\n\n    public Rect ToRect(double offset = 0, double scale = 1d)\n    {\n        return new Rect((Left - offset) / scale, (Top - offset) / scale, (Right - Left + offset * 2) / scale, (Bottom - Top + offset * 2) / scale);\n    }\n\n    public Rect TryToRect(double offset = 0, double scale = 1d)\n    {\n        var left = (Left - offset) / scale;\n        var top = (Top - offset) / scale;\n        var width = (Right - Left + offset * 2) / scale;\n        var height = (Bottom - Top + offset * 2) / scale;\n\n        if (double.IsNaN(left) || double.IsNaN(top) || width < 0 || height < 0)\n            return Rect.Empty;\n\n        return new Rect(left, top, width, height);\n    }\n\n    public bool IsValid()\n    {\n        return Right - Left > 0 && Bottom - Top > 0;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Project.cs",
    "content": "using System.Windows.Media;\n\nnamespace ScreenToGif.Domain.Models.Project;\n\npublic class Project\n{\n    #region Identity\n\n    /// <summary>\n    /// Just the name to the project file.\n    /// </summary>\n    public string Name { get; set; }\n\n    /// <summary>\n    /// The full path of the project (saved by the user).\n    /// It's the path + filename + extension.\n    /// </summary>\n    public string Path { get; set; }\n\n    /// <summary>\n    /// The version of ScreenToGif used to create this project.\n    /// </summary>\n    public Version Version { get; set; }\n\n    public DateTime? CreationDate { get; set; }\n\n    public DateTime? LastModificationDate { get; set; }\n\n    #endregion\n\n    #region Visual\n\n    /// <summary>\n    /// The canvas width of the project.\n    /// </summary>\n    public int Width { get; set; }\n\n    /// <summary>\n    /// The canvas height of the project.\n    /// </summary>\n    public int Height { get; set; }\n\n    /// <summary>\n    /// The DPI of the X axis of the project.\n    /// </summary>\n    public double HorizontalDpi { get; set; }\n\n    /// <summary>\n    /// The DPI of the Y axis of the project.\n    /// </summary>\n    public double VerticalDpi { get; set; }\n\n    /// <summary>\n    /// The background of the whole project.\n    /// </summary>\n    public Brush Background { get; set; }\n\n    #endregion\n\n    /// <summary>\n    /// Tracks can hold multiple sequences of the same type, but not overlapping.\n    /// </summary>\n    public List<Track> Tracks { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequence.cs",
    "content": "using System.Windows.Media;\nusing ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\nnamespace ScreenToGif.Domain.Models.Project;\n\npublic class Sequence\n{\n    public enum Types : int\n    {\n        /// <summary>\n        /// A sequence that contains a single brush data.\n        /// </summary>\n        Brush,\n\n        /// <summary>\n        /// A sequence that holds raster image data.\n        /// It can be the actual frame image from a recording or an overlay.\n        /// </summary>\n        Raster,\n\n        /// <summary>\n        /// A sequence that holds text data.\n        /// </summary>\n        Text,\n\n        /// <summary>\n        /// A sequence that holds a shape.\n        /// </summary>\n        Shape,\n\n        /// <summary>\n        /// A sequence that holds strokes (drawings).\n        /// </summary>\n        Drawing,\n\n        /// <summary>\n        /// A sequence that holds all keys events.\n        /// </summary>\n        Key,\n\n        /// <summary>\n        /// A sequence that holds all cursor events.\n        /// </summary>\n        Cursor,\n            \n\n        Progress,\n        TitleFrame, //? Maybe it should be a layer type of Frame.\n        Obfuscation,\n        Cinemagraph\n    }\n\n    public int Id { get; set; }\n\n    public Types Type { get; set; }\n\n    public TimeSpan StartTime { get; set; }\n\n    public TimeSpan EndTime { get; set; }\n\n    public double Opacity { get; set; }\n\n    public Shadow Shadow { get; set; }\n\n    public Brush Background { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/BrushSequence.cs",
    "content": "using System.Windows.Media;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class BrushSequence : SizeableSequence\n{\n    public Brush Brush { get; set; }\n\n\n    public BrushSequence()\n    {\n        Type = Types.Brush;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/CursorSequence.cs",
    "content": "using ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class CursorSequence : SizeableSequence\n{\n    public List<CursorEvent> CursorEvents { get; set; }\n\n\n    public CursorSequence()\n    {\n        Type = Types.Cursor;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/DrawingSequence.cs",
    "content": "using System.Windows.Ink;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class DrawingSequence : Sequence\n{\n    public StrokeCollection Strokes { get; set; }\n\n\n    public DrawingSequence()\n    {\n        Type = Types.Drawing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/KeySequence.cs",
    "content": "using ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\n/// <summary>\n/// KeyEvents can happen out of sync with the recording. \n/// </summary>\npublic class KeySequence : SizeableSequence\n{\n    public List<KeyEvent> KeyEvents { get; set; }\n\n\n    public KeySequence()\n    {\n        Type = Types.Key;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/ObfuscationSequence.cs",
    "content": "namespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class ObfuscationSequence : SizeableSequence\n{\n    public enum Modes : int\n    {\n        Pixelate,\n        Blur\n    }\n\n    public Modes ObfuscationMode { get; set; }\n\n    //ObfuscationSize, other properties.\n\n\n    public ObfuscationSequence()\n    {\n        Type = Types.Obfuscation;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/ProgressSequence.cs",
    "content": "namespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class ProgressSequence : SizeableSequence\n{\n    public enum Modes : int\n    {\n        Test,\n        Bar\n    }\n\n    public Modes ProgressMode { get; set; }\n\n    //Color.\n    //Bar percentage.\n    //How to calculate the correct text to be shown?\n\n\n    public ProgressSequence()\n    {\n        Type = Types.Progress;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/RasterSequence.cs",
    "content": "using ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class RasterSequence : SizeableSequence\n{\n    /// <summary>\n    /// Origin of the raster frames.\n    /// It could be from capture (screen or webcam), media import (gif, apng, image or video) or rasterization of other sequences.\n    /// </summary>\n    public string Origin { get; set; }\n\n    /// <summary>\n    /// The bit depth of the raster images.\n    /// Usually 24 or 32 bits.\n    /// </summary>\n    public int BitDepth { get; set; }\n\n    public List<Frame> Frames { get; set; }\n\n\n    public RasterSequence()\n    {\n        Type = Types.Raster;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/ShapeSequence.cs",
    "content": "using System.Windows.Shapes;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class ShapeSequence : SizeableSequence\n{\n    public Shape Shape { get; set; }\n\n\n    public ShapeSequence()\n    {\n        Type = Types.Shape;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/SizeableSequence.cs",
    "content": "namespace ScreenToGif.Domain.Models.Project.Sequences;\n\n/// <summary>\n/// Primitive sequence object which has a defined sizing information.\n/// </summary>\npublic class SizeableSequence : Sequence\n{\n    public double Left { get; set; }\n\n    public double Top { get; set; }\n        \n    public double Width { get; set; }\n\n    public double Height { get; set; }\n\n    public double Angle { get; set; }\n\n    public double HorizontalDpi { get; set; }\n\n    public double VerticalDpi { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/SubSequences/CursorEvent.cs",
    "content": "namespace ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\npublic class CursorEvent\n{\n    public byte[] Pixels { get; set; }\n\n    public double Left { get; set; }\n\n    public double Top { get; set; }\n\n    public double Width { get; set; }\n\n    public double Height { get; set; }\n\n    //DPI, Depth?\n\n    public bool IsLeftButtonDown { get; set; }\n\n    public bool IsRightButtonDown { get; set; }\n\n    public bool IsMiddleButtonDown { get; set; }\n\n    public bool IsFourthButtonDown { get; set; }\n\n    public bool IsFifthButtonDown { get; set; }\n\n    public int MouseWheelDelta { get; set; }\n\n    public bool IsMiddleScrollUp => MouseWheelDelta > 0; \n\n    public bool IsMiddleScrollDown => MouseWheelDelta < 0;\n\n    public bool IsMiddleScroll => IsMiddleScrollUp || IsMiddleScrollDown;\n\n    public TimeSpan TimeStamp { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/SubSequences/Frame.cs",
    "content": "namespace ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\npublic class Frame\n{\n    /// <summary>\n    /// The time, in milliseconds that the frame should be visible.\n    /// </summary>\n    public uint Delay { get; set; }\n\n    public double Left { get; set; }\n\n    public double Top { get; set; }\n\n    public double Width { get; set; }\n\n    public double Height { get; set; }\n\n    internal byte[] Pixels { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/SubSequences/KeyEvent.cs",
    "content": "using System.Windows.Input;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\npublic class KeyEvent\n{\n    public Key Key { get; set; }\n\n    public ModifierKeys Modifiers { get; set; }\n\n    public TimeSpan TimeStamp { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/SubSequences/Shadow.cs",
    "content": "using System.Windows.Media;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences.SubSequences;\n\npublic class Shadow\n{\n    public Color Color { get;set; } \n        \n    public double Direction { get; set; }\n        \n    public double BlurRadius { get; set; }\n\n    public double Opacity { get; set; }\n\n    public double Depth { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Sequences/TextSequence.cs",
    "content": "using System.Windows;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Domain.Models.Project.Sequences;\n\npublic class TextSequence : SizeableSequence\n{\n    public string Text { get; set; }\n\n    public FontFamily FontFamily { get; set; }\n        \n    public double FontSize { get; set; }\n        \n    public FontWeight FontWeight { get; set; }\n        \n    public FontStyle FontStyle { get; set; }\n        \n    public Brush Foreground { get; set; }\n        \n    public double OutlineThickness { get; set; }\n        \n    public Brush OutlineColor { get; set; }\n\n\n    public TextSequence()\n    {\n        Type = Types.Text;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Project/Track.cs",
    "content": "namespace ScreenToGif.Domain.Models.Project;\n\npublic class Track\n{\n    public int Id { get; set; }\n\n    public bool IsVisible { get; set; }\n\n    public bool IsLocked { get; set; }\n        \n    public string Name { get; set; }\n        \n    /// <summary>\n    /// A track can have multiple sequences of the same type.\n    /// </summary>\n    public List<Sequence> Sequences { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Property.cs",
    "content": "namespace ScreenToGif.Domain.Models;\n\npublic class Property\n{\n    public string NameSpace { get; set; }\n        \n    public string Key { get; set; }\n        \n    public string Type { get; set; }\n\n    public string Value { get; set; }\n        \n    public List<Property> Attributes { get; set; } = new();\n        \n    public List<Property> Children { get; set; } = new();\n\n\n    public override string ToString()\n    {\n        return $\"NameSpace: {NameSpace}\" + Environment.NewLine +\n               $\"Key: {Key} \" + Environment.NewLine +\n               $\"Type: {Type} \" + Environment.NewLine +\n               $\"Value: {Value} \" + Environment.NewLine +\n               (Attributes?.Count > 0 ? (\"Attributes >>>> \" + Environment.NewLine) : \"\") +\n               (Attributes?.Count > 0 ? ($\"{Attributes?.Aggregate(\"\", (p, n) => p + (p.Length > 0 ? Environment.NewLine : \"\") + n)} \" + Environment.NewLine) : \"\") +\n               (Attributes?.Count > 0 ? (\"End attributes <<<< \" + Environment.NewLine) : \"\") +\n               (Children?.Count > 0 ? (\"Children >>>> \" + Environment.NewLine) : \"\") +\n               (Children?.Count > 0 ? ($\"Children: {Children?.Aggregate(\"\", (p, n) => p + (p.Length > 0 ? Environment.NewLine : \"\") + n)} \" + Environment.NewLine) : \"\") +\n               (Children?.Count > 0 ? (\"End children <<<< \" + Environment.NewLine) : \"\");\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/SimpleMouseGesture.cs",
    "content": "using System.Runtime.Serialization;\nusing System.Windows.Input;\nusing ScreenToGif.Domain.Enums.Native;\n\nnamespace ScreenToGif.Domain.Models;\n\n/// <summary>\n/// Custom mouse event arguments.\n/// </summary>\n[DataContract]\npublic class SimpleMouseGesture\n{\n    #region Properties\n        \n    /// <summary>\n    /// The type of the mouse event.\n    /// </summary>\n    public NativeMouseEvents EventType { get; }\n\n\n    public long Timestamp { get; set; }\n\n\n    /// <summary>\n    /// X Axis position\n    /// </summary>\n    public int PosX { get; }\n\n    /// <summary>\n    /// Y Axis position.\n    /// </summary>\n    public int PosY { get; }\n        \n\n    /// <summary>\n    /// State of the left mouse button.\n    /// </summary>\n    public MouseButtonState LeftButton { get; }\n\n    /// <summary>\n    /// State of the right mouse button.\n    /// </summary>\n    public MouseButtonState RightButton { get; }\n\n    /// <summary>\n    /// State of the middle mouse button.\n    /// </summary>\n    public MouseButtonState MiddleButton { get; }\n\n    /// <summary>\n    /// State of the first extra mouse buttons.\n    /// </summary>\n    public MouseButtonState FirstExtraButton { get; }\n\n    /// <summary>\n    /// State of the second extra mouse buttons.\n    /// </summary>\n    public MouseButtonState SecondExtraButton { get; }\n\n    /// <summary>\n    /// The state of the scroll wheel. Up or down scroll flow.\n    /// </summary>\n    public short MouseDelta { get; }\n\n        \n    /// <summary>\n    /// True if this event args is a registration of a mouse down event.\n    /// </summary>\n    public bool IsMouseDown => EventType == NativeMouseEvents.LeftButtonDown || EventType == NativeMouseEvents.RightButtonDown || EventType == NativeMouseEvents.MiddleButtonDown || \n                               EventType == NativeMouseEvents.ExtraButtonDown || EventType == NativeMouseEvents.OutsideExtraButtonDown;\n\n    /// <summary>\n    /// True if this event args is a registration of a mouse double click event.\n    /// </summary>\n    public bool IsMouseDoubleClick => EventType == NativeMouseEvents.LeftButtonDoubleClick || EventType == NativeMouseEvents.RightButtonDoubleClick || EventType == NativeMouseEvents.MiddleButtonDoubleClick ||\n                                      EventType == NativeMouseEvents.ExtraButtonDoubleClick || EventType == NativeMouseEvents.OutsideExtraButtonDoubleClick;\n\n    /// <summary>\n    /// True if the action of clicking or scrolling happened.\n    /// </summary>\n    public bool IsInteraction => IsMouseDown || IsMouseDoubleClick || MouseDelta != 0;\n\n    /// <summary>\n    /// True if the any button is being clicked.\n    /// </summary>\n    public bool IsClicked => LeftButton == MouseButtonState.Pressed || RightButton == MouseButtonState.Pressed || MiddleButton == MouseButtonState.Pressed;\n\n    /// <summary>\n    /// True if the scroll event is upwards.\n    /// </summary>\n    public bool IsScrollUp => EventType == NativeMouseEvents.MouseWheel && MouseDelta > 0;\n\n    /// <summary>\n    /// True if the scroll event is downwards.\n    /// </summary>\n    public bool IsScrollDown => EventType == NativeMouseEvents.MouseWheel && MouseDelta < 0;\n\n    /// <summary>\n    /// True if the scroll event is upwards.\n    /// </summary>\n    public bool IsScrollLeft => EventType == NativeMouseEvents.MouseWheelHorizontal && MouseDelta < 0;\n\n    /// <summary>\n    /// True if the scroll event is downwards.\n    /// </summary>\n    public bool IsScrollRight => EventType == NativeMouseEvents.MouseWheelHorizontal && MouseDelta > 0;\n\n    #endregion\n\n    public SimpleMouseGesture(NativeMouseEvents eventType, int x, int y, MouseButtonState left, MouseButtonState right, MouseButtonState middle, MouseButtonState firstExtra, MouseButtonState secondExtra, short mouseDelta = 0)\n    {\n        EventType = eventType;\n\n        PosX = x;\n        PosY = y;\n\n        LeftButton = left;\n        RightButton = right;\n        MiddleButton = middle;\n        FirstExtraButton = firstExtra;\n        SecondExtraButton = secondExtra;\n        MouseDelta = mouseDelta;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/Imgur/ImgurAlbum.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Domain.Models.Upload.Imgur;\n\n[DataContract]\npublic class ImgurAlbumData\n{\n    [DataMember(Name = \"id\")]\n    public string Id { get; set; }\n\n    [DataMember(Name = \"title\")]\n    public string Title { get; set; }\n\n    [DataMember(Name = \"description\")]\n    public string Description { get; set; }\n\n    [DataMember(Name = \"datetime\")]\n    public int Datetime { get; set; }\n\n    [DataMember(Name = \"cover\")]\n    public string Cover { get; set; }\n\n    [DataMember(Name = \"cover_width\")]\n    public string CoverWidth { get; set; }\n\n    [DataMember(Name = \"cover_height\")]\n    public string CoverHeight { get; set; }\n\n    [DataMember(Name = \"account_url\")]\n    public string AccountUrl { get; set; }\n\n    [DataMember(Name = \"account_id\")]\n    public long? AccountId { get; set; }\n\n    [DataMember(Name = \"privacy\")]\n    public string Privacy { get; set; }\n\n    [DataMember(Name = \"layout\")]\n    public string Layout { get; set; }\n\n    [DataMember(Name = \"views\")]\n    public int Views { get; set; }\n\n    [DataMember(Name = \"link\")]\n    public string Link { get; set; }\n\n    [DataMember(Name = \"favorite\")]\n    public bool Favorite { get; set; }\n\n    [DataMember(Name = \"nsfw\")]\n    public bool? Nsfw { get; set; }\n\n    [DataMember(Name = \"section\")]\n    public string Section { get; set; }\n\n    [DataMember(Name = \"order\")]\n    public int Order { get; set; }\n\n    [DataMember(Name = \"deletehash\")]\n    public string DeleteHash { get; set; }\n\n    [DataMember(Name = \"images_count\")]\n    public int ImagesCount { get; set; }\n\n    [DataMember(Name = \"images\")]\n    public ImgurImageData[] Images { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/Imgur/ImgurAlbumsResponse.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Domain.Models.Upload.Imgur;\n\n[DataContract]\npublic class ImgurAlbumsResponse\n{\n    [DataMember(Name = \"data\")]\n    public List<ImgurAlbumData> Data { get; set; }\n\n    [DataMember(Name = \"success\")]\n    public bool Success { get; set; }\n\n    [DataMember(Name = \"status\")]\n    public int Status { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/Imgur/ImgurImage.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Domain.Models.Upload.Imgur;\n\n[DataContract]\npublic class ImgurImageData\n{\n    [DataMember(Name = \"id\")]\n    public string Id { get; set; }\n\n    [DataMember(Name = \"title\")]\n    public string Title { get; set; }\n\n    [DataMember(Name = \"description\")]\n    public string Description { get; set; }\n\n    [DataMember(Name = \"datetime\")]\n    public int Datetime { get; set; }\n\n    [DataMember(Name = \"type\")]\n    public string Type { get; set; }\n\n    [DataMember(Name = \"animated\")]\n    public bool Animated { get; set; }\n\n    [DataMember(Name = \"width\")]\n    public int Width { get; set; }\n\n    [DataMember(Name = \"height\")]\n    public int Height { get; set; }\n\n    [DataMember(Name = \"size\")]\n    public int Size { get; set; }\n\n    [DataMember(Name = \"views\")]\n    public int Views { get; set; }\n\n    [DataMember(Name = \"bandwidth\")]\n    public long Bandwidth { get; set; }\n\n    [DataMember(Name = \"deletehash\")]\n    public string DeleteHash { get; set; }\n\n    [DataMember(Name = \"name\")]\n    public string Name { get; set; }\n\n    [DataMember(Name = \"section\")]\n    public string Section { get; set; }\n\n    [DataMember(Name = \"link\")]\n    public string Link { get; set; }\n\n    [DataMember(Name = \"gifv\")]\n    public string Gifv { get; set; }\n\n    [DataMember(Name = \"mp4\")]\n    public string Mp4 { get; set; }\n\n    [DataMember(Name = \"webm\")]\n    public string Webm { get; set; }\n\n    [DataMember(Name = \"looping\")]\n    public bool Looping { get; set; }\n\n    [DataMember(Name = \"favorite\")]\n    public bool Favorite { get; set; }\n\n    [DataMember(Name = \"nsfw\")]\n    public bool? Nsfw { get; set; }\n\n    [DataMember(Name = \"vote\")]\n    public string Vote { get; set; }\n\n    [DataMember(Name = \"comment_preview\")]\n    public string CommentPreview { get; set; }\n\n    [DataMember(Name = \"error\")]\n    public string Error { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/Imgur/ImgurUploadResponse.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Domain.Models.Upload.Imgur;\n\n[DataContract]\npublic class ImgurUploadResponse\n{\n    [DataMember(Name = \"data\")]\n    public ImgurImageData Data { get; set; }\n\n    [DataMember(Name = \"success\")]\n    public bool Success { get; set; }\n\n    [DataMember(Name = \"status\")]\n    public int Status { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/OAuth2Token.cs",
    "content": "﻿using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Cloud\n{\n    [DataContract]\n    public class OAuth2Token\n    {\n        [DataMember(Name = \"access_token\")]\n        public string AccessToken { get; set; }\n\n        [DataMember(Name = \"refresh_token\")]\n        public string RefreshToken { get; set; }\n\n        [DataMember(Name = \"expires_in\")]\n        public int ExpiresIn { get; set; }\n\n        [DataMember(Name = \"refresh_token_expires_in\")]\n        public int RefreshTokenExpiresIn { get; set; }\n\n        [DataMember(Name = \"token_type\")]\n        public string TokenType { get; set; }\n\n        [DataMember(Name = \"scope\")]\n        public string Scope { get; set; }\n\n        [DataMember(Name = \"resource_owner\")]\n        public string ResourceOwner { get; set; }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/YandexDisk/Error.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Domain.Models.Upload.YandexDisk\n{\n    [DataContract]\n    public class ErrorDescriptor\n    {\n        [DataMember]\n        public string Message { get; set; }\n\n        [DataMember]\n        public string Description { get; set; }\n\n        [DataMember]\n        public string Error { get; set; }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/Upload/YandexDisk/Link.cs",
    "content": "using System.Runtime.Serialization;\n\nnamespace ScreenToGif.Domain.Models.Upload.YandexDisk\n{\n    [DataContract]\n    public class Link\n    {\n        [DataMember]\n        public string Href { get; set; }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/Models/VideoSource.cs",
    "content": "using System.Diagnostics;\n\nnamespace ScreenToGif.Domain.Models;\n\n[DebuggerDisplay(\"Name = {Name}, MediaSources: {MediaSources.Count}\")]\npublic class VideoSource\n{\n    public string Name { get; set; }\n\n    public string SymbolicLink { get; set; }\n\n    public bool IsFromHardware { get; set; }\n\n    public List<MediaSource> MediaSources { get; set; } = new();\n}"
  },
  {
    "path": "ScreenToGif.Model/Properties/AssemblyInfo.cs",
    "content": "using System.Runtime.InteropServices;\n\n// In SDK-style projects such as this one, several assembly attributes that were historically\n// defined in this file are now automatically added during build and populated with\n// values defined in project properties. For details of which attributes are included\n// and how to customise this process see: https://aka.ms/assembly-info-properties\n\n\n// Setting ComVisible to false makes the types in this assembly not visible to COM\n// components.  If you need to access a type in this assembly from COM, set the ComVisible\n// attribute to true on that type.\n\n[assembly: ComVisible(false)]"
  },
  {
    "path": "ScreenToGif.Model/ScreenToGif.Domain.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>disable</Nullable>\n    <DebugType>embedded</DebugType>\n    <UseWPF>True</UseWPF>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|AnyCPU'\">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif.Model/Structs/GifskiSettings.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Domain.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct GifskiSettings\n{\n    public GifskiSettings(uint width, uint height, byte quality, bool fast, short repeat)\n    {\n        Width = width;\n        Height = height;\n        Quality = quality;\n        Fast = fast;\n        Repeat = repeat;\n    }\n\n    /// <summary>\n    /// Resize to max this width if non-0.\n    /// </summary>\n    internal uint Width;\n\n    /// <summary>\n    /// Resize to max this height if width is non-0. Note that aspect ratio is not preserved.\n    /// </summary>\n    internal uint Height;\n\n    /// <summary>\n    /// 1-100. Recommended to set to 100.\n    /// </summary>\n    internal byte Quality;\n\n    /// <summary>\n    /// If negative, looping is disabled. The number of times the sequence is repeated. 0 to loop forever.\n    /// </summary>\n    internal short Repeat;\n\n    /// <summary>\n    /// Lower quality, but faster encode.\n    /// </summary>\n    internal bool Fast;\n}"
  },
  {
    "path": "ScreenToGif.Model/ViewModels/BaseViewModel.cs",
    "content": "using System.Windows;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Domain.ViewModels\n{\n    public class BaseViewModel : BindableBase\n    {\n        #region Commands\n\n        //Instead of getting the command from the Commands.xaml, I can create them here.\n        //private RoutedUICommand _newRecordingCommand = new RoutedUICommand\n        //{\n        //    Text = \"S.Command.NewRecording\",\n        //    InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) }\n        //};\n\n        //public RoutedUICommand NewRecordingCommand\n        //{\n        //    get => _newRecordingCommand;\n        //    set => SetProperty(ref _newRecordingCommand, value);\n        //}\n\n\n\n        //I can also create it statically.\n        //public static RoutedUICommand NewRecordingCommand { get; set; } = new RoutedUICommand\n        //{\n        //    Text = \"S.Command.NewRecording\",\n        //    InputGestures = { new KeyGesture(Key.N, ModifierKeys.Control) }\n        //};\n\n        //public CommandBindingCollection CommandBindings => new CommandBindingCollection\n        //{\n        //    new CommandBinding(NewRecordingCommand, (sender, args) => { Console.WriteLine(\"\"); }, (sender, args) => { args.CanExecute = true; })\n        //};\n\n        #endregion\n\n        #region Helper methods\n\n        protected internal RoutedUICommand FindCommand(string key)\n        {\n            return Application.Current.FindResource(key) as RoutedUICommand;\n        }\n        \n        #endregion\n    }\n}"
  },
  {
    "path": "ScreenToGif.Model/ViewModels/BindableBase.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\nnamespace ScreenToGif.Domain.ViewModels\n{\n    /// <summary>\n    /// Implementation of <see cref=\"INotifyPropertyChanged\" /> to simplify models.\n    /// From here: https://www.danrigby.com/2015/09/12/inotifypropertychanged-the-net-4-6-way/\n    /// </summary>\n    public abstract class BindableBase : INotifyPropertyChanged\n    {\n        /// <summary>\n        /// Multicast event for property change notifications.\n        /// </summary>\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        /// <summary>\n        /// Checks if a property already matches a desired value.  Sets the property and\n        /// notifies listeners only when necessary.\n        /// </summary>\n        /// <typeparam name=\"T\">Type of the property.</typeparam>\n        /// <param name=\"storage\">Reference to a property with both getter and setter.</param>\n        /// <param name=\"value\">Desired value for the property.</param>\n        /// <param name=\"propertyName\">\n        /// Name of the property used to notify listeners.  This\n        /// value is optional and can be provided automatically when invoked from compilers that\n        /// support CallerMemberName.\n        /// </param>\n        /// <returns>\n        /// True if the value was changed, false if the existing value matched the\n        /// desired value.\n        /// </returns>\n        protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)\n        {\n            if (Equals(storage, value))\n                return false;\n\n            storage = value;\n            OnPropertyChanged(propertyName);\n            return true;\n        }\n\n        /// <summary>\n        /// Notifies listeners that a property value has changed.\n        /// </summary>\n        /// <param name=\"propertyName\">\n        /// Name of the property used to notify listeners.  This\n        /// value is optional and can be provided automatically when invoked from compilers\n        /// that support <see cref=\"CallerMemberNameAttribute\" />.\n        /// </param>\n        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)\n        {\n            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Constants.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native\n{\n    public static class Constants\n    {\n        /// <summary>\n        /// User32 library name.\n        /// </summary>\n        internal const string User32 = \"user32.dll\";\n        internal const string Gdi32 = \"gdi32.dll\";\n        internal const string Shell32 = \"shell32.dll\";\n        internal const string DwmApi = \"dwmapi.dll\";\n        internal const string MsvCrt = \"msvcrt.dll\";\n        internal const string NtDll = \"ntdll.dll\";\n        internal const string WinMm = \"winmm.dll\";\n        internal const string Kernel32 = \"kernel32.dll\";\n\n\n        public static HandleRef NullHandleRef = new(null, IntPtr.Zero);\n\n        internal const int MonitorDefaultToNull = 0;\n        internal const int MonitorDefaultToPrimary = 1;\n        public const int MonitorDefaultToNearest = 2;\n\n        public const int CursorShowing = 0x00000001;\n        internal const int DstInvert = 0x00550009;\n\n        internal const int DiNormal = 0x0003;\n\n        public const int MonitorinfoPrimary = 0x00000001;\n\n        internal const int StateSystemFocusable = 0x00100000;\n        public const int StateSystemUnavailable = 0x0001;\n        internal const int StateSystemInvisible = 0x8000;\n        internal const int StateSystemOffscreen = 0x010000;\n\n        internal const int CChildrenTitlebar = 5;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Delegates.cs",
    "content": "namespace ScreenToGif.Native\n{\n    public static class Delegates\n    {\n        /// <summary>\n        /// Callback delegate which is used by the Windows API to submit window messages.\n        /// </summary>\n        public delegate IntPtr WindowProcedureHandler(IntPtr hwnd, uint uMsg, IntPtr wparam, IntPtr lparam);\n\n        public delegate bool MonitorEnumProc(IntPtr monitor, IntPtr hdc, IntPtr lprcMonitor, IntPtr lParam);\n\n        public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);\n\n        /// <summary>\n        /// The CallWndProc hook procedure is an application-defined or library-defined callback \n        /// function used with the SetWindowsHookEx function. The HOOKPROC type defines a pointer \n        /// to this callback function. CallWndProc is a placeholder for the application-defined \n        /// or library-defined function name.\n        /// </summary>\n        /// <param name=\"nCode\">\n        /// [in] Specifies whether the hook procedure must process the message. \n        /// If nCode is HC_ACTION, the hook procedure must process the message. \n        /// If nCode is less than zero, the hook procedure must pass the message to the \n        /// CallNextHookEx function without further processing and must return the \n        /// value returned by CallNextHookEx.\n        /// </param>\n        /// <param name=\"wParam\">\n        /// [in] Specifies whether the message was sent by the current thread. \n        /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero. \n        /// </param>\n        /// <param name=\"lParam\">\n        /// [in] Pointer to a CWPSTRUCT structure that contains details about the message. \n        /// </param>\n        /// <returns>\n        /// If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx. \n        /// If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx \n        /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC \n        /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook \n        /// procedure does not call CallNextHookEx, the return value should be zero. \n        /// </returns>\n        /// <remarks>\n        /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/callwndproc.asp\n        /// </remarks>\n        public delegate IntPtr HookProc(int nCode, uint wParam, IntPtr lParam);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/DwmApi.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class DwmApi\n    {\n        [DllImport(Constants.DwmApi)]\n        public static extern int DwmGetWindowAttribute(IntPtr hwnd, int dwAttribute, out bool pvAttribute, int cbAttribute);\n\n        [DllImport(Constants.DwmApi)]\n        public static extern int DwmGetWindowAttribute(IntPtr hwnd, int dwAttribute, out NativeRect pvAttribute, int cbAttribute);\n\n        [DllImport(Constants.DwmApi, PreserveSig = true)]\n        public static extern int DwmSetWindowAttribute(IntPtr hwnd, DwmWindowAttributes attr, ref int attrValue, int attrSize);\n\n        [DllImport(Constants.DwmApi, PreserveSig = false)]\n        public static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref Margins margins);\n\n        [DllImport(Constants.DwmApi, PreserveSig = false)]\n        public static extern bool DwmIsCompositionEnabled();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/Gdi32.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class Gdi32\n    {\n        ///<summary>\n        ///Creates a memory device context (DC) compatible with the specified device.\n        ///</summary>\n        ///<param name=\"hdc\">A handle to an existing DC. If this handle is NULL,\n        ///the function creates a memory DC compatible with the application's current screen.</param>\n        ///<returns>\n        ///If the function succeeds, the return value is the handle to a memory DC.\n        ///If the function fails, the return value is <see cref=\"System.IntPtr.Zero\"/>.\n        ///</returns>\n        [DllImport(Constants.Gdi32, EntryPoint = \"CreateCompatibleDC\", SetLastError = true)]\n        public static extern IntPtr CreateCompatibleDC([In] IntPtr hdc);\n\n        ///<summary>Selects an object into the specified device context (DC). The new object replaces the previous object of the same type.</summary>\n        ///<param name=\"hdc\">A handle to the DC.</param>\n        ///<param name=\"hgdiobj\">A handle to the object to be selected.</param>\n        ///<returns>\n        ///<para>If the selected object is not a region and the function succeeds, the return value is a handle to the object being replaced. If the selected object is a region and the function succeeds, the return value is one of the following values.</para>\n        ///<para>SIMPLEREGION - Region consists of a single rectangle.</para>\n        ///<para>COMPLEXREGION - Region consists of more than one rectangle.</para>\n        ///<para>NULLREGION - Region is empty.</para>\n        ///<para>If an error occurs and the selected object is not a region, the return value is <c>NULL</c>. Otherwise, it is <c>HGDI_ERROR</c>.</para>\n        ///</returns>\n        ///<remarks>\n        ///<para>This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.</para>\n        ///<para>An application cannot select a single bitmap into more than one DC at a time.</para>\n        ///<para>ICM: If the object being selected is a brush or a pen, color management is performed.</para>\n        ///</remarks>\n        [DllImport(Constants.Gdi32, EntryPoint = \"SelectObject\")]\n        public static extern IntPtr SelectObject([In] IntPtr hdc, [In] IntPtr hgdiobj);\n\n        ///<summary>\n        ///Performs a bit-block transfer of the color data corresponding to a\n        ///rectangle of pixels from the specified source device context into\n        ///a destination device context.\n        ///</summary>\n        ///<param name=\"hdc\">Handle to the destination device context.</param>\n        ///<param name=\"nXDest\">The leftmost x-coordinate of the destination rectangle (in pixels).</param>\n        ///<param name=\"nYDest\">The topmost y-coordinate of the destination rectangle (in pixels).</param>\n        ///<param name=\"nWidth\">The width of the source and destination rectangles (in pixels).</param>\n        ///<param name=\"nHeight\">The height of the source and the destination rectangles (in pixels).</param>\n        ///<param name=\"hdcSrc\">Handle to the source device context.</param>\n        ///<param name=\"nXSrc\">The leftmost x-coordinate of the source rectangle (in pixels).</param>\n        ///<param name=\"nYSrc\">The topmost y-coordinate of the source rectangle (in pixels).</param>\n        ///<param name=\"dwRop\">A raster-operation code.</param>\n        ///<returns>\n        ///<c>true</c> if the operation succeeds, <c>false</c> otherwise. To get extended error information, call <see cref=\"System.Runtime.InteropServices.Marshal.GetLastWin32Error\"/>.\n        ///</returns>\n        [DllImport(Constants.Gdi32, EntryPoint = \"BitBlt\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool BitBlt([In] IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, [In] IntPtr hdcSrc, int nXSrc, int nYSrc, CopyPixelOperations dwRop);\n\n        [DllImport(Constants.Gdi32, EntryPoint = \"StretchBlt\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool StretchBlt([In] IntPtr hdc, int nXDest, int nYDest, int nWidthDest, int nHeightDest, [In] IntPtr hdcSrc, int nXSrc, int nYSrc, int nWidthSource, int nHeightSource, CopyPixelOperations dwRop);\n\n        /// <summary>\n        /// pbmi was BitmapInfo.\n        /// </summary>\n        /// <param name=\"hdc\"></param>\n        /// <param name=\"pbmi\"></param>\n        /// <param name=\"pila\"></param>\n        /// <param name=\"ppvBits\"></param>\n        /// <param name=\"hSection\"></param>\n        /// <param name=\"dwOffset\"></param>\n        /// <returns></returns>\n        [DllImport(Constants.Gdi32)]\n        public static extern IntPtr CreateDIBSection(IntPtr hdc, [In] ref IntPtr pbmi, uint pila, out IntPtr ppvBits, IntPtr hSection, uint dwOffset);\n\n        /// <summary>\n        /// Retrieves the bits of the specified compatible bitmap and copies them into a buffer as a DIB using the specified format.\n        /// </summary>\n        /// <param name=\"hdc\">A handle to the device context.</param>\n        /// <param name=\"hbmp\">A handle to the bitmap. This must be a compatible bitmap (DDB).</param>\n        /// <param name=\"uStartScan\">The first scan line to retrieve.</param>\n        /// <param name=\"cScanLines\">The number of scan lines to retrieve.</param>\n        /// <param name=\"lpvBits\">A pointer to a buffer to receive the bitmap data. If this parameter is <see cref=\"IntPtr.Zero\"/>, the function passes the dimensions and format of the bitmap to the <see cref=\"BITMAPINFO\"/> structure pointed to by the <paramref name=\"lpbi\"/> parameter.</param>\n        /// <param name=\"lpbi\">A pointer to a <see cref=\"BITMAPINFO\"/> structure that specifies the desired format for the DIB data.</param>\n        /// <param name=\"uUsage\">The format of the bmiColors member of the <see cref=\"BITMAPINFO\"/> structure. It must be one of the following values.</param>\n        /// <returns>If the lpvBits parameter is non-NULL and the function succeeds, the return value is the number of scan lines copied from the bitmap.\n        /// If the lpvBits parameter is NULL and GetDIBits successfully fills the <see cref=\"BITMAPINFO\"/> structure, the return value is nonzero.\n        /// If the function fails, the return value is zero.\n        /// This function can return the following value: ERROR_INVALID_PARAMETER (87 (0×57))</returns>\n        [DllImport(Constants.Gdi32, EntryPoint = \"GetDIBits\")]\n        public static extern int GetDIBits([In] IntPtr hdc, [In] IntPtr hbmp, uint uStartScan, uint cScanLines, [Out] byte[] lpvBits, ref BitmapInfoHeader lpbi, DibColorModes uUsage);\n        \n        ///<summary>Deletes the specified device context (DC).</summary>\n        ///<param name=\"hdc\">A handle to the device context.</param>\n        ///<returns><para>If the function succeeds, the return value is nonzero.</para><para>If the function fails, the return value is zero.</para></returns>\n        ///<remarks>An application must not delete a DC whose handle was obtained by calling the <c>GetDC</c> function. Instead, it must call the <c>ReleaseDC</c> function to free the DC.</remarks>\n        [DllImport(Constants.Gdi32, EntryPoint = \"DeleteDC\")]\n        public static extern bool DeleteDC([In] IntPtr hdc);\n\n        [DllImport(Constants.Gdi32)]\n        public static extern int GetObject(IntPtr hgdiobj, int cbBuffer, IntPtr lpvObject);\n\n        ///<summary>Deletes a logical pen, brush, font, bitmap, region, or palette, freeing all system resources associated with the object. After the object is deleted, the specified handle is no longer valid.</summary>\n        ///<param name=\"hObject\">A handle to a logical pen, brush, font, bitmap, region, or palette.</param>\n        ///<returns>\n        ///<para>If the function succeeds, the return value is nonzero.</para>\n        ///<para>If the specified handle is not valid or is currently selected into a DC, the return value is zero.</para>\n        ///</returns>\n        ///<remarks>\n        ///<para>Do not delete a drawing object (pen or brush) while it is still selected into a DC.</para>\n        ///<para>When a pattern brush is deleted, the bitmap associated with the brush is not deleted. The bitmap must be deleted independently.</para>\n        ///</remarks>\n        [DllImport(Constants.Gdi32, EntryPoint = \"DeleteObject\")]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool DeleteObject([In] IntPtr hObject);\n        \n        [DllImport(Constants.Gdi32)]\n        public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);\n        \n        [DllImport(Constants.Gdi32)]\n        public static extern int GetDeviceCaps(IntPtr hdc, int capindex);\n        \n        [DllImport(Constants.Gdi32)]\n        internal static extern bool PatBlt(IntPtr hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, uint dwRop);\n\n        [DllImport(Constants.Gdi32)]\n        internal static extern bool GetCurrentPositionEx(IntPtr hdc, out PointW lpPoint);\n\n        [DllImport(Constants.Gdi32)]\n        internal static extern bool GetWindowOrgEx(IntPtr hdc, out PointW lpPoint);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/Kernel32.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class Kernel32\n    {\n        [DllImport(Constants.Kernel32)]\n        public static extern int GetProcessId(IntPtr handle);\n\n        [DllImport(Constants.Kernel32, CharSet = CharSet.Auto, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool GlobalMemoryStatusEx(ref MemoryStatusEx lpBuffer);\n\n        [DllImport(Constants.Kernel32)]\n        public static extern IntPtr LocalAlloc(uint uFlags, UIntPtr uBytes);\n\n        [DllImport(Constants.Kernel32, SetLastError = true)]\n        public static extern IntPtr LocalFree(IntPtr hMem);\n\n        [DllImport(Constants.Kernel32)]\n        internal static extern IntPtr LoadLibrary(string path);\n\n        [DllImport(Constants.Kernel32, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool FreeLibrary(IntPtr hModule);\n\n        [DllImport(Constants.Kernel32)]\n        internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName);\n\n        internal const uint LoadLibrarySearchSystem32 = 0x00000800;\n        internal const uint LoadLibrarySearchDefaultDirs = 0x00001000;\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        internal static extern bool SetDefaultDllDirectories(uint directoryFlags);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true, CharSet = CharSet.Unicode)]\n        internal static extern bool SetDllDirectory(string lpPathName);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true, CharSet = CharSet.Unicode)]\n        internal static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, uint dwFlags);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/MsvCrt.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.External\n{\n    internal static class MsvCrt\n    {\n        [DllImport(Constants.MsvCrt, EntryPoint = \"memcpy\", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]\n        internal static extern IntPtr MemoryCopy(IntPtr dest, IntPtr src, UIntPtr count);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/NtDll.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class NtDll\n    {\n        [DllImport(Constants.NtDll, EntryPoint = \"NtQueryTimerResolution\", SetLastError = true)]\n        public static extern int QueryTimerResolution(out int maximumResolution, out int minimumResolution, out int currentResolution);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/ShCore.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class ShCore\n    {\n        /// <summary>\n        /// https://msdn.microsoft.com/en-us/library/windows/desktop/dn280510(v=vs.85).aspx\n        /// </summary>\n        /// <param name=\"hmonitor\">Handle of the monitor being queried.</param>\n        /// <param name=\"dpiType\">The type of DPI being queried. Possible values are from the MONITOR_DPI_TYPE enumeration.</param>\n        /// <param name=\"dpiX\">The value of the DPI along the X axis. This value always refers to the horizontal edge, even when the screen is rotated.</param>\n        /// <param name=\"dpiY\">The value of the DPI along the Y axis. This value always refers to the vertical edge, even when the screen is rotated.</param>\n        /// <returns>If OK, 0x00000000 | Else, 0x80070057</returns>\n        [DllImport(\"Shcore.dll\")]\n        public static extern IntPtr GetDpiForMonitor([In] IntPtr hmonitor, [In] DpiTypes dpiType, [Out] out uint dpiX, [Out] out uint dpiY);\n\n        //[DllImport(\"SHCore.dll\", SetLastError = true)]\n        //public static extern bool SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness);\n\n        //[DllImport(\"SHCore.dll\", SetLastError = true)]\n        //public static extern void GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS awareness);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/Shell32.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class Shell32\n    {\n        /// <summary>\n        /// \"open\"       - Opens a file or a application.\n        /// \"openas\"     - Opens dialog when no program is associated to the extension.\n        /// \"opennew\"    - see MSDN.\n        /// \"runas\"      - In Windows 7 and Vista, opens the UAC dialog and in others, open the Run as... Dialog.\n        /// \"null\"       - Specifies that the operation is the default for the selected file type.\n        /// \"edit\"       - Opens the default text editor for the file.    \n        /// \"explore\"    - Opens the Windows Explorer in the folder specified in lpDirectory.\n        /// \"properties\" - Opens the properties window of the file.\n        /// \"copy\"       - see MSDN.\n        /// \"cut\"        - see MSDN.\n        /// \"paste\"      - see MSDN.\n        /// \"pastelink\"  - pastes a shortcut.\n        /// \"delete\"     - see MSDN.\n        /// \"print\"      - Start printing the file with the default application.\n        /// \"printto\"    - see MSDN.\n        /// \"find\"       - Start a search.\n        /// </summary>\n        [DllImport(Constants.Shell32, CharSet = CharSet.Auto)]\n        internal static extern bool ShellExecuteEx(ref ShellExecuteInfo lpExecInfo);\n\n        /// <summary>\n        /// Creates, updates or deletes the taskbar icon.\n        /// </summary>\n        [DllImport(Constants.Shell32, CharSet = CharSet.Unicode)]\n        public static extern bool Shell_NotifyIcon(NotifyCommands cmd, [In] ref NotifyIconData data);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/User32.cs",
    "content": "using System.Runtime.InteropServices;\nusing System.Runtime.Versioning;\nusing System.Text;\nusing System.Windows.Input;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class User32\n    {\n        [DllImport(Constants.User32)]\n        public static extern bool ClientToScreen(IntPtr hWnd, ref PointW lpPoint);\n\n        /// <summary>\n        /// Retrieves the cursor's position, in screen coordinates.\n        /// </summary>\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool GetCursorPos(ref PointW lpPoint);\n\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool SetCursorPos(int x, int y);\n\n        /// <summary>\n        /// Gets the screen coordinates of the current mouse position.\n        /// </summary>\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool GetPhysicalCursorPos(ref PointW lpPoint);\n\n        [DllImport(Constants.User32, EntryPoint = \"GetCursorInfo\")]\n        public static extern bool GetCursorInfo(out CursorInfo pci);\n\n        [DllImport(Constants.User32, EntryPoint = \"CopyIcon\")]\n        public static extern IntPtr CopyIcon(IntPtr hIcon);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool DestroyIcon(IntPtr hIcon);\n\n        [DllImport(Constants.User32, EntryPoint = \"GetIconInfo\")]\n        public static extern bool GetIconInfo(IntPtr hIcon, out Iconinfo piconinfo);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool DrawIconEx(IntPtr hdc, int xLeft, int yTop, IntPtr hIcon, int cxWidth, int cyHeight, int istepIfAniCur, IntPtr hbrFlickerFreeDraw, int diFlags);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        internal static extern IntPtr GetCursorFrameInfo(IntPtr hCursor, IntPtr reserved, int step, ref int rate, ref int numSteps);\n\n        [DllImport(Constants.User32, SetLastError = false)]\n        public static extern IntPtr GetDesktopWindow();\n\n        [DllImport(Constants.User32)]\n        public static extern IntPtr GetWindowDC(IntPtr ptr);\n\n        /// <summary>\n        /// Releases the device context from the given window handle.\n        /// </summary>\n        /// <param name=\"hWnd\">The window handle</param>\n        /// <param name=\"hDc\">The device context handle.</param>\n        /// <returns>True if successful</returns>\n        [DllImport(Constants.User32)]\n        public static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDc);\n        \n        [DllImport(Constants.User32)]\n        public static extern IntPtr WindowFromPoint(PointW point);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool GetWindowRect(IntPtr hwnd, out NativeRect lpRect);\n\n        [DllImport(Constants.User32)]\n        internal static extern bool GetClientRect(IntPtr hWnd, out NativeRect lpRect);\n\n        /// <summary>\n        /// Retrieves the show state and the restored, minimized, and maximized positions of the specified window.\n        /// </summary>\n        /// <param name=\"hWnd\">\n        /// A handle to the window.\n        /// </param>\n        /// <param name=\"lpwndpl\">\n        /// A pointer to the WINDOWPLACEMENT structure that receives the show state and position information.\n        /// <para>\n        /// Before calling GetWindowPlacement, set the length member to sizeof(WINDOWPLACEMENT). GetWindowPlacement fails if lpwndpl-> length is not set correctly.\n        /// </para>\n        /// </param>\n        /// <returns>\n        /// If the function succeeds, the return value is nonzero.\n        /// <para>\n        /// If the function fails, the return value is zero. To get extended error information, call GetLastError.\n        /// </para>\n        /// </returns>\n        [DllImport(Constants.User32, SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool GetWindowPlacement(IntPtr hWnd, ref WindowPlacement lpwndpl);\n        \n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);\n\n        [DllImport(Constants.User32)]\n        internal static extern bool OffsetRect(ref NativeRect lprc, int dx, int dy);\n        \n        [DllImport(Constants.User32)]\n        public static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern IntPtr MonitorFromPoint(PointW pt, uint dwFlags);\n\n        [DllImport(Constants.User32, CharSet = CharSet.Auto)]\n        [ResourceExposure(ResourceScope.None)]\n        public static extern bool GetMonitorInfo(HandleRef hmonitor, [In, Out] MonitorInfoEx info);\n\n        [DllImport(Constants.User32, ExactSpelling = true)]\n        [ResourceExposure(ResourceScope.None)]\n        public static extern bool EnumDisplayMonitors(HandleRef hdc, IntPtr rcClip, Delegates.MonitorEnumProc lpfnEnum, IntPtr dwData);\n        \n        [DllImport(Constants.User32, CharSet = CharSet.Auto)]\n        public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);\n\n\n        /// <summary>\n        ///     Enumerates all top-level windows on the screen by passing the handle to each window, in turn, to an\n        ///     application-defined callback function. <see cref=\"EnumWindows\" /> continues until the last top-level window is\n        ///     enumerated or the callback function returns FALSE.\n        ///     <para>\n        ///     Go to https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx for more\n        ///     information\n        ///     </para>\n        /// </summary>\n        /// <param name=\"lpEnumFunc\">\n        ///     C++ ( lpEnumFunc [in]. Type: WNDENUMPROC )<br />A pointer to an application-defined callback\n        ///     function. For more information, see\n        ///     <see cref=\"!:https://msdn.microsoft.com/en-us/library/windows/desktop/ms633498%28v=vs.85%29.aspx\">EnumWindowsProc</see>\n        ///     .\n        /// </param>\n        /// <param name=\"lParam\">\n        ///     C++ ( lParam [in]. Type: LPARAM )<br />An application-defined value to be passed to the callback\n        ///     function.\n        /// </param>\n        /// <returns>\n        ///     <c>true</c> if the return value is nonzero., <c>false</c> otherwise. If the function fails, the return value\n        ///     is zero.<br />To get extended error information, call GetLastError.<br />If <see cref=\"Delegates.EnumWindowsProc\" /> returns\n        ///     zero, the return value is also zero. In this case, the callback function should call SetLastError to obtain a\n        ///     meaningful error code to be returned to the caller of <see cref=\"EnumWindows\" />.\n        /// </returns>\n        /// <remarks>\n        ///     The <see cref=\"EnumWindows\" /> function does not enumerate child windows, with the exception of a few\n        ///     top-level windows owned by the system that have the WS_CHILD style.\n        ///     <para />\n        ///     This function is more reliable than calling the\n        ///     <see cref=\"!:https://msdn.microsoft.com/en-us/library/windows/desktop/ms633515%28v=vs.85%29.aspx\">GetWindow</see>\n        ///     function in a loop. An application that calls the GetWindow function to perform this task risks being caught in an\n        ///     infinite loop or referencing a handle to a window that has been destroyed.<br />Note For Windows 8 and later,\n        ///     EnumWindows enumerates only top-level windows of desktop apps.\n        /// </remarks>\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool EnumWindows(Delegates.EnumWindowsProc lpEnumFunc, IntPtr lParam);\n\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool EnumDesktopWindows(IntPtr handle, Delegates.EnumWindowsProc lpEnumFunc, IntPtr lParam);\n\n        /// <summary>\n        ///     Determines the visibility state of the specified window.\n        ///     <para>\n        ///     Go to https://msdn.microsoft.com/en-us/library/windows/desktop/ms633530%28v=vs.85%29.aspx for more\n        ///     information. For WS_VISIBLE information go to\n        ///     https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600%28v=vs.85%29.aspx\n        ///     </para>\n        /// </summary>\n        /// <param name=\"hWnd\">C++ ( hWnd [in]. Type: HWND )<br />A handle to the window to be tested.</param>\n        /// <returns>\n        ///     <c>true</c> or the return value is nonzero if the specified window, its parent window, its parent's parent\n        ///     window, and so forth, have the WS_VISIBLE style; otherwise, <c>false</c> or the return value is zero.\n        /// </returns>\n        /// <remarks>\n        ///     The visibility state of a window is indicated by the WS_VISIBLE[0x10000000L] style bit. When\n        ///     WS_VISIBLE[0x10000000L] is set, the window is displayed and subsequent drawing into it is displayed as long as the\n        ///     window has the WS_VISIBLE[0x10000000L] style. Any drawing to a window with the WS_VISIBLE[0x10000000L] style will\n        ///     not be displayed if the window is obscured by other windows or is clipped by its parent window.\n        /// </remarks>\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool IsWindowVisible(IntPtr hWnd);\n\n        /// <summary>\n        ///     Retrieves a handle to the Shell's desktop window.\n        ///     <para>\n        ///     Go to https://msdn.microsoft.com/en-us/library/windows/desktop/ms633512%28v=vs.85%29.aspx for more\n        ///     information\n        ///     </para>\n        /// </summary>\n        /// <returns>\n        ///     C++ ( Type: HWND )<br />The return value is the handle of the Shell's desktop window. If no Shell process is\n        ///     present, the return value is NULL.\n        /// </returns>\n        [DllImport(Constants.User32)]\n        public static extern IntPtr GetShellWindow();\n\n        [DllImport(Constants.User32)]\n        public static extern int ToUnicode(uint wVirtKey, uint wScanCode, byte[] lpKeyState, [Out, MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 4)] StringBuilder pwszBuff, int cchBuff, uint wFlags);\n\n        [DllImport(Constants.User32)]\n        public static extern uint MapVirtualKey(uint uCode, MapTypes uMapType);\n\n        /// <summary>\n        ///     Copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a\n        ///     control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another\n        ///     application.\n        ///     <para>\n        ///     Go to https://msdn.microsoft.com/en-us/library/windows/desktop/ms633520%28v=vs.85%29.aspx  for more\n        ///     information\n        ///     </para>\n        /// </summary>\n        /// <param name=\"hWnd\">\n        ///     C++ ( hWnd [in]. Type: HWND )<br />A <see cref=\"IntPtr\" /> handle to the window or control containing the text.\n        /// </param>\n        /// <param name=\"lpString\">\n        ///     C++ ( lpString [out]. Type: LPTSTR )<br />The <see cref=\"StringBuilder\" /> buffer that will receive the text. If\n        ///     the string is as long or longer than the buffer, the string is truncated and terminated with a null character.\n        /// </param>\n        /// <param name=\"nMaxCount\">\n        ///     C++ ( nMaxCount [in]. Type: int )<br /> Should be equivalent to\n        ///     <see cref=\"StringBuilder.Length\" /> after call returns. The <see cref=\"int\" /> maximum number of characters to copy\n        ///     to the buffer, including the null character. If the text exceeds this limit, it is truncated.\n        /// </param>\n        /// <returns>\n        ///     If the function succeeds, the return value is the length, in characters, of the copied string, not including\n        ///     the terminating null character. If the window has no title bar or text, if the title bar is empty, or if the window\n        ///     or control handle is invalid, the return value is zero. To get extended error information, call GetLastError.<br />\n        ///     This function cannot retrieve the text of an edit control in another application.\n        /// </returns>\n        /// <remarks>\n        ///     If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the\n        ///     specified window or control. If the target window is owned by another process and has a caption, GetWindowText\n        ///     retrieves the window caption text. If the window does not have a caption, the return value is a null string. This\n        ///     behavior is by design. It allows applications to call GetWindowText without becoming unresponsive if the process\n        ///     that owns the target window is not responding. However, if the target window is not responding and it belongs to\n        ///     the calling application, GetWindowText will cause the calling application to become unresponsive. To retrieve the\n        ///     text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.<br />For\n        ///     an example go to\n        ///     <see cref=\"!:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644928%28v=vs.85%29.aspx#sending\">\n        ///     Sending a\n        ///     Message.\n        ///     </see>\n        /// </remarks>\n        [DllImport(Constants.User32, CharSet = CharSet.Auto, SetLastError = true)]\n        public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);\n\n        /// <summary>\n        ///     Retrieves the length, in characters, of the specified window's title bar text (if the window has a title bar). If\n        ///     the specified window is a control, the function retrieves the length of the text within the control. However,\n        ///     GetWindowTextLength cannot retrieve the length of the text of an edit control in another application.\n        ///     <para>\n        ///     Go to https://msdn.microsoft.com/en-us/library/windows/desktop/ms633521%28v=vs.85%29.aspx for more\n        ///     information\n        ///     </para>\n        /// </summary>\n        /// <param name=\"hWnd\">C++ ( hWnd [in]. Type: HWND )<br />A <see cref=\"IntPtr\" /> handle to the window or control.</param>\n        /// <returns>\n        ///     If the function succeeds, the return value is the length, in characters, of the text. Under certain\n        ///     conditions, this value may actually be greater than the length of the text.<br />For more information, see the\n        ///     following Remarks section. If the window has no text, the return value is zero.To get extended error information,\n        ///     call GetLastError.\n        /// </returns>\n        /// <remarks>\n        ///     If the target window is owned by the current process, <see cref=\"GetWindowTextLength\" /> causes a\n        ///     WM_GETTEXTLENGTH message to be sent to the specified window or control.<br />Under certain conditions, the\n        ///     <see cref=\"GetWindowTextLength\" /> function may return a value that is larger than the actual length of the\n        ///     text.This occurs with certain mixtures of ANSI and Unicode, and is due to the system allowing for the possible\n        ///     existence of double-byte character set (DBCS) characters within the text. The return value, however, will always be\n        ///     at least as large as the actual length of the text; you can thus always use it to guide buffer allocation. This\n        ///     behavior can occur when an application uses both ANSI functions and common dialogs, which use Unicode.It can also\n        ///     occur when an application uses the ANSI version of <see cref=\"GetWindowTextLength\" /> with a window whose window\n        ///     procedure is Unicode, or the Unicode version of <see cref=\"GetWindowTextLength\" /> with a window whose window\n        ///     procedure is ANSI.<br />For more information on ANSI and ANSI functions, see Conventions for Function Prototypes.\n        ///     <br />To obtain the exact length of the text, use the WM_GETTEXT, LB_GETTEXT, or CB_GETLBTEXT messages, or the\n        ///     GetWindowText function.\n        /// </remarks>\n        [DllImport(Constants.User32, SetLastError = true, CharSet = CharSet.Auto)]\n        public static extern int GetWindowTextLength(IntPtr hWnd);\n\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool IsIconic(IntPtr hWnd);\n\n        [DllImport(Constants.User32, EntryPoint = \"GetWindowLong\")]\n        internal static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex);\n\n        [DllImport(Constants.User32, EntryPoint = \"GetWindowLongPtr\")]\n        internal static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex);\n\n        [DllImport(Constants.User32)]\n        public static extern int GetWindowLong(IntPtr hWnd, int nIndex);\n\n        [DllImport(Constants.User32)]\n        public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);\n\n        /// <summary>\n        /// Retrieves the handle to the ancestor of the specified window. \n        /// </summary>\n        /// <param name=\"hwnd\">A handle to the window whose ancestor is to be retrieved. \n        /// If this parameter is the desktop window, the function returns NULL. </param>\n        /// <param name=\"flags\">The ancestor to be retrieved.</param>\n        /// <returns>The return value is the handle to the ancestor window.</returns>\n        [DllImport(Constants.User32, ExactSpelling = true)]\n        internal static extern IntPtr GetAncestor(IntPtr hwnd, GetAncestorFlags flags);\n\n        [DllImport(Constants.User32)]\n        internal static extern IntPtr GetLastActivePopup(IntPtr hWnd);\n\n        [return: MarshalAs(UnmanagedType.Bool)]\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool GetWindowInfo(IntPtr hwnd, ref WindowInfo pwi);\n\n        [DllImport(Constants.User32, CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]\n        public static extern bool GetTitleBarInfo(IntPtr hwnd, ref TitlebarInfo pti);\n\n        [DllImport(Constants.User32, SetLastError = true, CharSet = CharSet.Auto)]\n        public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);\n\n        /// <summary>\n        /// Retrieves a handle to a window that has the specified relationship (Z-Order or owner) to the specified window.\n        /// </summary>\n        /// <remarks>The EnumChildWindows function is more reliable than calling GetWindow in a loop. An application that\n        /// calls GetWindow to perform this task risks being caught in an infinite loop or referencing a handle to a window\n        /// that has been destroyed.</remarks>\n        /// <param name=\"hWnd\">A handle to a window. The window handle retrieved is relative to this window, based on the\n        /// value of the uCmd parameter.</param>\n        /// <param name=\"uCmd\">The relationship between the specified window and the window whose handle is to be\n        /// retrieved.</param>\n        /// <returns>\n        /// If the function succeeds, the return value is a window handle. If no window exists with the specified relationship\n        /// to the specified window, the return value is NULL. To get extended error information, call GetLastError.\n        /// </returns>\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern IntPtr GetWindow(IntPtr hWnd, GetWindowType uCmd);\n\n\n        [DllImport(Constants.User32, EntryPoint = \"CreateWindowExW\", SetLastError = true)]\n        internal static extern IntPtr CreateWindowEx(int dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName,\n            int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);\n\n        /// <summary>\n        /// Processes a default windows procedure.\n        /// </summary>\n        [DllImport(Constants.User32)]\n        internal static extern IntPtr DefWindowProc(IntPtr hWnd, uint msg, IntPtr wparam, IntPtr lparam);\n\n        /// <summary>\n        /// Registers the helper window class.\n        /// </summary>\n        [DllImport(Constants.User32, EntryPoint = \"RegisterClassW\", SetLastError = true)]\n        internal static extern short RegisterClass(ref WindowClass lpWndClass);\n\n        /// <summary>\n        /// Registers a listener for a window message.\n        /// </summary>\n        /// <param name=\"lpString\"></param>\n        /// <returns></returns>\n        [DllImport(Constants.User32, EntryPoint = \"RegisterWindowMessageW\")]\n        internal static extern uint RegisterWindowMessage([MarshalAs(UnmanagedType.LPWStr)] string lpString);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        internal static extern bool DestroyWindow(IntPtr hWnd);\n\n        /// <summary>\n        /// Gives focus to a given window.\n        /// </summary>\n        /// <param name=\"hWnd\"></param>\n        /// <returns></returns>\n        [DllImport(Constants.User32)]\n        public static extern bool SetForegroundWindow(IntPtr hWnd);\n\n        [DllImport(Constants.User32)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        public static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommands flags);\n\n        /// <summary>\n        /// Gets the maximum number of milliseconds that can elapse between a\n        /// first click and a second click for the OS to consider the\n        /// mouse action a double-click.\n        /// </summary>\n        /// <returns>The maximum amount of time, in milliseconds, that can\n        /// elapse between a first click and a second click for the OS to\n        /// consider the mouse action a double-click.</returns>\n        [DllImport(Constants.User32, CharSet = CharSet.Auto, ExactSpelling = true)]\n        public static extern int GetDoubleClickTime();\n\n        [DllImport(Constants.User32, CharSet = CharSet.Auto)]\n        public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DisplayDevices lpDisplayDevices, uint dwFlags);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, SetWindowPosFlags uFlags);\n\n        /// <summary>\n        /// The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain. \n        /// You would install a hook procedure to monitor the system for certain types of events. These events \n        /// are associated either with a specific thread or with all threads in the same desktop as the calling thread. \n        /// </summary>\n        /// <param name=\"idHook\">\n        /// Specifies the type of hook procedure to be installed. This parameter can be one of the following values.\n        /// </param>\n        /// <param name=\"lpfn\">\n        /// Pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a \n        /// thread created by a different process, the lpfn parameter must point to a hook procedure in a dynamic-link \n        /// library (DLL). Otherwise, lpfn can point to a hook procedure in the code associated with the current process.\n        /// </param>\n        /// <param name=\"hMod\">\n        /// Handle to the DLL containing the hook procedure pointed to by the lpfn parameter. \n        /// The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by \n        /// the current process and if the hook procedure is within the code associated with the current process. \n        /// </param>\n        /// <param name=\"dwThreadId\">\n        /// Specifies the identifier of the thread with which the hook procedure is to be associated. \n        /// If this parameter is zero, the hook procedure is associated with all existing threads running in the \n        /// same desktop as the calling thread. \n        /// </param>\n        /// <returns>\n        /// If the function succeeds, the return value is the handle to the hook procedure.\n        /// If the function fails, the return value is NULL. To get extended error information, call GetLastError.\n        /// </returns>\n        /// <remarks>\n        /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp\n        /// </remarks>\n        [DllImport(Constants.User32, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]\n        public static extern int SetWindowsHookEx(int idHook, Delegates.HookProc lpfn, IntPtr hMod, int dwThreadId);\n\n        /// <summary>\n        /// The UnhookWindowsHookEx function removes a hook procedure installed in a hook chain by the SetWindowsHookEx function. \n        /// </summary>\n        /// <param name=\"idHook\">\n        /// [in] Handle to the hook to be removed. This parameter is a hook handle obtained by a previous call to SetWindowsHookEx. \n        /// </param>\n        /// <returns>\n        /// If the function succeeds, the return value is nonzero.\n        /// If the function fails, the return value is zero. To get extended error information, call GetLastError.\n        /// </returns>\n        /// <remarks>\n        /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp\n        /// </remarks>\n        [DllImport(Constants.User32, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]\n        public static extern int UnhookWindowsHookEx(int idHook);\n\n        /// <summary>\n        /// The CallNextHookEx function passes the hook information to the next hook procedure in the current hook chain. \n        /// A hook procedure can call this function either before or after processing the hook information. \n        /// </summary>\n        /// <param name=\"idHook\">Ignored.</param>\n        /// <param name=\"nCode\">\n        /// [in] Specifies the hook code passed to the current hook procedure. \n        /// The next hook procedure uses this code to determine how to process the hook information.\n        /// </param>\n        /// <param name=\"wParam\">\n        /// [in] Specifies the wParam value passed to the current hook procedure. \n        /// The meaning of this parameter depends on the type of hook associated with the current hook chain. \n        /// </param>\n        /// <param name=\"lParam\">\n        /// [in] Specifies the lParam value passed to the current hook procedure. \n        /// The meaning of this parameter depends on the type of hook associated with the current hook chain. \n        /// </param>\n        /// <returns>\n        /// This value is returned by the next hook procedure in the chain. \n        /// The current hook procedure must also return this value. The meaning of the return value depends on the hook type. \n        /// For more information, see the descriptions of the individual hook procedures.\n        /// </returns>\n        /// <remarks>\n        /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp\n        /// </remarks>\n        [DllImport(Constants.User32, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]\n        public static extern IntPtr CallNextHookEx(int idHook, int nCode, uint wParam, IntPtr lParam);\n\n        /// <summary>\n        /// The ToAscii function translates the specified virtual-key code and keyboard \n        /// state to the corresponding character or characters. The function translates the code \n        /// using the input language and physical keyboard layout identified by the keyboard layout handle.\n        /// </summary>\n        /// <param name=\"uVirtKey\">\n        /// [in] Specifies the virtual-key code to be translated. \n        /// </param>\n        /// <param name=\"uScanCode\">\n        /// [in] Specifies the hardware scan code of the key to be translated. \n        /// The high-order bit of this value is set if the key is up (not pressed). \n        /// </param>\n        /// <param name=\"lpbKeyState\">\n        /// [in] Pointer to a 256-byte array that contains the current keyboard state. \n        /// Each element (byte) in the array contains the state of one key. \n        /// If the high-order bit of a byte is set, the key is down (pressed). \n        /// The low bit, if set, indicates that the key is toggled on. In this function, \n        /// only the toggle bit of the CAPS LOCK key is relevant. The toggle state \n        /// of the NUM LOCK and SCROLL LOCK keys is ignored.\n        /// </param>\n        /// <param name=\"lpwTransKey\">\n        /// [out] Pointer to the buffer that receives the translated character or characters. \n        /// </param>\n        /// <param name=\"fuState\">\n        /// [in] Specifies whether a menu is active. This parameter must be 1 if a menu is active, or 0 otherwise. \n        /// </param>\n        /// <returns>\n        /// If the specified key is a dead key, the return value is negative. Otherwise, it is one of the following values. \n        /// Value Meaning \n        /// 0 The specified virtual key has no translation for the current state of the keyboard. \n        /// 1 One character was copied to the buffer. \n        /// 2 Two characters were copied to the buffer. This usually happens when a dead-key character \n        /// (accent or diacritic) stored in the keyboard layout cannot be composed with the specified \n        /// virtual key to form a single character. \n        /// </returns>\n        /// <remarks>\n        /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/toascii.asp\n        /// </remarks>\n        [DllImport(Constants.User32)]\n        public static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey, int fuState);\n\n        /// <summary>\n        /// The GetKeyboardState function copies the status of the 256 virtual keys to the \n        /// specified buffer. \n        /// </summary>\n        /// <param name=\"pbKeyState\">\n        /// [in] Pointer to a 256-byte array that contains keyboard key states. \n        /// </param>\n        /// <returns>\n        /// If the function succeeds, the return value is nonzero.\n        /// If the function fails, the return value is zero. To get extended error information, call GetLastError. \n        /// </returns>\n        /// <remarks>\n        /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/toascii.asp\n        /// </remarks>\n        [DllImport(Constants.User32)]\n        public static extern int GetKeyboardState(byte[] pbKeyState);\n\n        [DllImport(Constants.User32, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]\n        public static extern short GetKeyState(int vKey);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        internal static extern bool RegisterHotKey(IntPtr hWnd, int id, ModifierKeys fsModifiers, Keys vk);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        internal static extern bool UnregisterHotKey(IntPtr hWnd, int id);\n\n        [DllImport(Constants.User32, SetLastError = true)]\n        public static extern bool EnableMenuItem(IntPtr hMenu, SysCommands uIdEnableItem, uint uEnable);\n\n        [DllImport(Constants.User32)]\n        public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/External/WinMm.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.External\n{\n    public static class WinMm\n    {\n        [DllImport(Constants.WinMm, EntryPoint = \"timeGetDevCaps\", SetLastError = true)]\n        public static extern uint GetDevCaps(ref TimeCaps timeCaps, uint sizeTimeCaps);\n\n        [DllImport(Constants.WinMm, EntryPoint = \"timeBeginPeriod\")]\n        public static extern uint BeginPeriod(uint uMilliseconds);\n\n        [DllImport(Constants.WinMm, EntryPoint = \"timeGetTime\")]\n        public static extern uint GetTime();\n\n        [DllImport(Constants.WinMm, EntryPoint = \"timeEndPeriod\")]\n        public static extern uint EndPeriod(uint uMilliseconds);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Helpers/DllSecurity.cs",
    "content": "using ScreenToGif.Native.External;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic static class DllSecurity\n{\n    public static void HardenDllSearchPath()\n    {\n        //Restrict DLL search to safe system locations.\n        Kernel32.SetDefaultDllDirectories(Kernel32.LoadLibrarySearchSystem32);\n\n        //Remove the current directory from the search path.\n        Kernel32.SetDllDirectory(string.Empty);\n\n        //Preload version.dll from System32 so delay-load can't be hijacked.\n        Kernel32.LoadLibraryEx(\"version.dll\", IntPtr.Zero, Kernel32.LoadLibrarySearchSystem32);\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.Native/Helpers/FunctionLoader.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Native.External;\n\nnamespace ScreenToGif.Native.Helpers;\n\n/// <summary>\n/// Loads externals functions/methods based on a dynamic DLL path.\n/// </summary>\npublic static class FunctionLoader\n{\n    private static readonly Dictionary<string, IntPtr> LoadedLibraries = new();\n\n    public static T LoadFunction<T>(string dllPath, string functionName) where T : Delegate\n    {\n        if (!LoadedLibraries.TryGetValue(dllPath, out var moduleHandle))\n        {\n            moduleHandle = Kernel32.LoadLibrary(dllPath);\n\n            if (moduleHandle == IntPtr.Zero)\n                throw new Exception(\"Failed to load the DLL: \" + dllPath);\n\n            LoadedLibraries[dllPath] = moduleHandle;\n        }\n\n        var functionAddress = Kernel32.GetProcAddress(moduleHandle, functionName);\n\n        if (functionAddress == IntPtr.Zero)\n            throw new Exception(\"Failed to get the function address: \" + functionName);\n\n        return (T)Marshal.GetDelegateForFunctionPointer(functionAddress, typeof(T));\n    }\n\n    public static T? TryLoadFunction<T>(string dllPath, string functionName) where T : Delegate\n    {\n        if (!LoadedLibraries.TryGetValue(dllPath, out var moduleHandle))\n        {\n            moduleHandle = Kernel32.LoadLibrary(dllPath);\n\n            if (moduleHandle == IntPtr.Zero)\n                return null;\n\n            LoadedLibraries[dllPath] = moduleHandle;\n        }\n\n        var functionAddress = Kernel32.GetProcAddress(moduleHandle, functionName);\n\n        if (functionAddress == IntPtr.Zero)\n            return null;\n\n        return (T)Marshal.GetDelegateForFunctionPointer(functionAddress, typeof(T));\n    }\n\n    public static void UnloadLibrary(string dllPath)\n    {\n        if (!LoadedLibraries.TryGetValue(dllPath, out var moduleHandle))\n            return;\n\n        Kernel32.FreeLibrary(moduleHandle);\n\n        LoadedLibraries.Remove(dllPath);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Helpers/HotKey.cs",
    "content": "using System.Diagnostics;\nusing System.Windows.Input;\nusing System.Windows.Interop;\nusing ScreenToGif.Native.External;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic class HotKey : IDisposable\n{\n    #region Variables\n\n    private const int WmHotKey = 0x0312;\n\n    private int _id;\n    private readonly IntPtr _windowHandle;\n    private readonly Action _callback;\n\n    #endregion\n\n    #region Properties\n\n    public ModifierKeys Modifier { get; }\n\n    public Key Key { get; }\n\n    #endregion\n\n\n    public HotKey(ModifierKeys modifier, Key key, IntPtr windowsHandle, Action callback)\n    {\n        Modifier = modifier;\n        Key = key;\n\n        var keys = ConvertWinformsToWpfKey(key);\n\n        _windowHandle = windowsHandle;\n        _id = GetHashCode();\n        _callback = callback;\n\n        if (!User32.RegisterHotKey(_windowHandle, _id, Modifier, keys))\n            throw new InvalidOperationException(\"Hotkey already in use\");\n\n        ComponentDispatcher.ThreadPreprocessMessage += ThreadPreprocessMessageMethod;\n    }\n\n    public HotKey(ModifierKeys modifier, Key key, Action callback, bool unregisterFirst = false)\n    {\n        Modifier = modifier;\n        Key = key;\n\n        var keys = ConvertWinformsToWpfKey(key);\n\n        _windowHandle = IntPtr.Zero;\n        _id = GetHashCode();\n        _callback = callback;\n\n        if (unregisterFirst)\n            User32.UnregisterHotKey(_windowHandle, _id);\n\n        if (!User32.RegisterHotKey(_windowHandle, _id, Modifier, keys))\n            throw new InvalidOperationException(\"Hotkey already in use\");\n\n        ComponentDispatcher.ThreadPreprocessMessage += ThreadPreprocessMessageMethod;\n    }\n\n    public sealed override int GetHashCode()\n    {\n        unchecked\n        {\n            return ((int)Modifier * 397) ^ (int)Key;\n        }\n    }\n\n    private static Keys ConvertWinformsToWpfKey(Key inputKey)\n    {\n        try\n        {\n            return (Keys)Enum.Parse(typeof(Keys), inputKey.ToString());\n        }\n        catch\n        {\n            return Keys.None;\n        }\n    }\n\n    [DebuggerStepThrough]\n    private void ThreadPreprocessMessageMethod(ref MSG msg, ref bool handled)\n    {\n        if (handled || msg.message != WmHotKey || (int)msg.wParam != _id)\n            return;\n\n        _callback.Invoke();\n\n        handled = true;\n    }\n\n    public void Dispose()\n    {\n        if (_id <= 0) return;\n\n        if (!User32.UnregisterHotKey(_windowHandle, _id))\n        {\n            //TODO: Warning?\n        }\n\n        _id = 0;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Helpers/Other.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic class Other\n{\n    /// <summary>\n    /// Draws a rectangle over a Window.\n    /// </summary>\n    /// <param name=\"hWnd\">The window handle.</param>\n    /// <param name=\"scale\">Window scale.</param>\n    public static void DrawFrame(IntPtr hWnd, double scale)\n    {\n        //TODO: Adjust for high DPI.\n        if (hWnd == IntPtr.Zero)\n            return;\n\n        var hdc = User32.GetWindowDC(hWnd); //GetWindowDC((IntPtr) null);\n\n        User32.GetWindowRect(hWnd, out NativeRect rect);\n\n        //DwmGetWindowAttribute(hWnd, (int)DwmWindowAttribute.DwmwaExtendedFrameBounds, out rect, Marshal.SizeOf(typeof(Rect)));\n        User32.OffsetRect(ref rect, -rect.Left, -rect.Top);\n\n        const int frameWidth = 3;\n\n        Gdi32.PatBlt(hdc, rect.Left, rect.Top, rect.Right - rect.Left, frameWidth, Constants.DstInvert);\n\n        Gdi32.PatBlt(hdc, rect.Left, rect.Bottom - frameWidth, frameWidth, -(rect.Bottom - rect.Top - 2 * frameWidth), Constants.DstInvert);\n\n        Gdi32.PatBlt(hdc, rect.Right - frameWidth, rect.Top + frameWidth, frameWidth, rect.Bottom - rect.Top - 2 * frameWidth, Constants.DstInvert);\n\n        Gdi32.PatBlt(hdc, rect.Right, rect.Bottom - frameWidth, -(rect.Right - rect.Left), frameWidth, Constants.DstInvert);\n    }\n\n    public static bool ShowFileProperties(string filename)\n    {\n        var info = new ShellExecuteInfo();\n        info.cbSize = Marshal.SizeOf(info);\n        info.lpVerb = \"properties\";\n        info.lpFile = filename;\n        //info.lpParameters = \"Security\";\n        info.nShow = (int)ShowWindowCommands.Show;\n        info.fMask = (uint)ShellExecuteMasks.InvokeIdList;\n        return Shell32.ShellExecuteEx(ref info);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Helpers/TimerResolution.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.Helpers\n{\n    /// <summary>\n    /// Windows API Extension methods that enables a timer resolution change for the calling thread.\n    /// https://docs.microsoft.com/en-us/windows/win32/api/timeapi/\n    /// https://randomascii.wordpress.com/2020/10/04/windows-timer-resolution-the-great-rule-change/\n    /// </summary>\n    public class TimerResolution : IDisposable\n    {\n        #region Properties\n\n        /// <summary>\n        /// The target resolution in milliseconds.\n        /// </summary>\n        public uint TargetResolution { get; private set; }\n\n        /// <summary>\n        /// The current resolution in milliseconds.\n        /// May differ from target resolution based on system limitation.\n        /// </summary>\n        public uint CurrentResolution { get; private set; }\n\n        /// <summary>\n        /// True if a new resolution was set (target resolution or not).\n        /// </summary>\n        public bool SuccessfullySetResolution { get; private set; }\n\n        /// <summary>\n        /// True if a new target resolution was set.\n        /// </summary>\n        public bool SuccessfullySetTargetResolution { get; private set; }\n\n        #endregion\n\n        /// <summary>\n        /// Tries setting a given target timer resolution to the current thread.\n        /// If the selected resolution can be set, a nearby value will be set instead.\n        /// This must be disposed afterward (or call EndPeriod() passing the CurrentResolution)\n        /// </summary>\n        /// <param name=\"targetResolution\">The target resolution in milliseconds.</param>\n        public TimerResolution(int targetResolution)\n        {\n            TargetResolution = (uint)targetResolution;\n\n            //Get system limits.\n            var timeCaps = new TimeCaps();\n            if (WinMm.GetDevCaps(ref timeCaps, (uint)Marshal.SizeOf(typeof(TimeCaps))) != (uint)TimerResults.NoError)\n                return;\n\n            //Calculates resolution based on system limits.\n            CurrentResolution = Math.Min(Math.Max(timeCaps.MinimumResolution, TargetResolution), timeCaps.MaximumResolution);\n\n            //Begins the period in which the thread will run on this new timer resolution.\n            if (WinMm.BeginPeriod(CurrentResolution) != (uint)TimerResults.NoError)\n                return;\n\n            SuccessfullySetResolution = true;\n\n            if (CurrentResolution == TargetResolution)\n                SuccessfullySetTargetResolution = true;\n        }\n\n        public void Dispose()\n        {\n            if (SuccessfullySetResolution)\n                WinMm.EndPeriod(CurrentResolution);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Helpers/WindowMessageSink.cs",
    "content": "using System.ComponentModel;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\n\nnamespace ScreenToGif.Native.Helpers\n{\n    public class WindowMessageSink : IDisposable\n    {\n        #region Variables/Properties\n\n        private readonly object _lock = new();\n\n        /// <summary>\n        /// The ID of messages that are received from the taskbar icon.\n        /// </summary>\n        public const int CallbackMessageId = 0x400;\n\n        /// <summary>\n        /// The ID of the message that is being received if the taskbar is (re)started.\n        /// </summary>\n        private uint _taskbarRestartMessageId;\n\n        /// <summary>\n        /// The number of clicks between the first click and all clicks in between the maximum amount of time of SystemInformation.DoubleClickTime.\n        /// </summary>\n        private int _clickCount = 0;\n\n        /// <summary>\n        /// A delegate that processes messages of the hidden native window that receives window messages. Storing\n        /// this reference makes sure we don't loose our reference to the message window.\n        /// </summary>\n        private Delegates.WindowProcedureHandler _messageHandler;\n\n        /// <summary>\n        /// Timer used to detect double clicks and ignore unwanted single click events.\n        /// </summary>\n        private readonly System.Windows.Forms.Timer _doubleClick = new();\n\n        /// <summary>\n        /// Window class ID.\n        /// </summary>\n        internal string WindowId { get; private set; }\n\n        /// <summary>\n        /// Handle for the message window.\n        /// </summary> \n        public IntPtr MessageWindowHandle { get; set; } = IntPtr.Zero;\n\n        public bool IsDisposed { get; private set; }\n\n        #endregion\n\n        #region Events\n\n        /// <summary>\n        /// The custom tooltip should be closed or hidden.\n        /// </summary>\n        public event Action<bool> ChangeToolTipStateRequest;\n\n        /// <summary>\n        /// Fired in case the user clicked or moved within the taskbar icon area.\n        /// </summary>\n        public event Action<MouseEventType> MouseEventReceived;\n\n        /// <summary>\n        /// Fired if the taskbar was created or restarted. Requires the taskbar icon to be reset.\n        /// </summary>\n        public event Action TaskbarCreated;\n\n        #endregion\n\n        public WindowMessageSink()\n        {\n            CreateMessageWindow();\n\n            _doubleClick.Interval = SystemInformation.DoubleClickTime;\n            _doubleClick.Tick += DoubleClick_Tick;\n        }\n\n        private void DoubleClick_Tick(object sender, EventArgs e)\n        {\n            lock (_lock)\n            {\n                if (_clickCount <= 0)\n                    return;\n\n                MouseEventReceived?.Invoke(_clickCount > 1 ? MouseEventType.IconLeftDoubleClick : MouseEventType.IconLeftMouseUp);\n\n                _clickCount = 0;\n                _doubleClick.Stop();\n            }\n        }\n\n        ~WindowMessageSink()\n        {\n            Dispose(false);\n        }\n\n        #region Methods\n\n        /// <summary>\n        /// Creates the helper message window that is used to receive messages from the taskbar icon.\n        /// </summary>\n        private void CreateMessageWindow()\n        {\n            //Generates a unique ID for the window.\n            WindowId = \"NotifyIcon_\" + Guid.NewGuid();\n\n            //Register window message handler.\n            _messageHandler = OnWindowMessageReceived;\n\n            //Creates a simple window class which is reference through the messageHandler delegate.\n            WindowClass wc;\n            wc.style = 0;\n            wc.lpfnWndProc = _messageHandler;\n            wc.cbClsExtra = 0;\n            wc.cbWndExtra = 0;\n            wc.hInstance = IntPtr.Zero;\n            wc.hIcon = IntPtr.Zero;\n            wc.hCursor = IntPtr.Zero;\n            wc.hbrBackground = IntPtr.Zero;\n            wc.lpszMenuName = \"\";\n            wc.lpszClassName = WindowId;\n\n            User32.RegisterClass(ref wc);\n\n            //Gets the message used to indicate the taskbar has been restarted. This is used to re-add icons when the taskbar restarts;\n            _taskbarRestartMessageId = User32.RegisterWindowMessage(\"TaskbarCreated\");\n\n            MessageWindowHandle = User32.CreateWindowEx(0, WindowId, \"\", 0, 0, 0, 1, 1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);\n\n            if (MessageWindowHandle == IntPtr.Zero)\n                throw new Win32Exception(\"Message window handle was not a valid pointer.\");\n        }\n\n        /// <summary>\n        /// Callback method that receives messages from the taskbar area.\n        /// </summary>\n        private IntPtr OnWindowMessageReceived(IntPtr hwnd, uint messageId, IntPtr wparam, IntPtr lparam)\n        {\n            if (messageId == _taskbarRestartMessageId)\n            {\n                //Recreate the icon if the taskbar was restarted (for example due to Windows Explorer shutdown).\n                var listener = TaskbarCreated;\n                listener?.Invoke();\n            }\n\n            //Forward the message.\n            ProcessWindowMessage(messageId, wparam, lparam);\n\n            //Pass the message to the default window procedure.\n            return User32.DefWindowProc(hwnd, messageId, wparam, lparam);\n        }\n\n        /// <summary>\n        /// Processes incoming system messages.\n        /// </summary>\n        /// <param name=\"msg\">Callback ID.</param>\n        /// <param name=\"wParam\">This parameter can be used to resolve mouse coordinates.</param>\n        /// <param name=\"lParam\">Provides information about the event.</param>\n        private void ProcessWindowMessage(uint msg, IntPtr wParam, IntPtr lParam)\n        {\n            if (msg != CallbackMessageId)\n                return;\n\n            switch (lParam.ToInt32())\n            {\n                case 0x200:\n                    MouseEventReceived(MouseEventType.MouseMove);\n                    break;\n\n                case 0x201:\n                    MouseEventReceived(MouseEventType.IconLeftMouseDown);\n                    break;\n\n                case 0x202: //Left click.\n                    _clickCount++;\n\n                    if (_clickCount == 1)\n                        _doubleClick.Start();\n\n                    break;\n\n                case 0x203:\n                    lock (_lock)\n                    {\n                        _clickCount = -1; //Puts down to -1 to avoid a third call by the mouse up.\n                        _doubleClick.Stop();\n\n                        MouseEventReceived(MouseEventType.IconLeftDoubleClick);\n                    }\n                    break;\n\n                case 0x204:\n                    MouseEventReceived(MouseEventType.IconRightMouseDown);\n                    break;\n\n                case 0x205:\n                    MouseEventReceived(MouseEventType.IconRightMouseUp);\n                    break;\n\n                case 0x206:\n                    //Double click with right mouse button, ignored.\n                    break;\n\n                case 0x207:\n                    MouseEventReceived(MouseEventType.IconMiddleMouseDown);\n                    break;\n\n                case 520:\n                    MouseEventReceived(MouseEventType.IconMiddleMouseUp);\n                    break;\n\n                case 0x209:\n                    //Double click with middle mouse button, ignored.\n                    break;\n\n                case 0x405:\n                    //BaloonTooltip clicked, ignored.\n                    break;\n\n                case 0x406:\n                    var listener = ChangeToolTipStateRequest;\n                    listener?.Invoke(true);\n                    break;\n\n                case 0x407:\n                    listener = ChangeToolTipStateRequest;\n                    listener?.Invoke(false);\n                    break;\n            }\n        }\n\n        #endregion\n\n        public void Dispose()\n        {\n            Dispose(true);\n\n            GC.SuppressFinalize(this);\n        }\n\n        private void Dispose(bool disposing)\n        {\n            if (IsDisposed)\n                return;\n\n            IsDisposed = true;\n\n            User32.DestroyWindow(MessageWindowHandle);\n\n            _messageHandler = null;\n\n            _doubleClick.Tick -= DoubleClick_Tick;\n            _doubleClick.Stop();\n            _doubleClick.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Properties/AssemblyInfo.cs",
    "content": "using System.Runtime.InteropServices;\n\n// In SDK-style projects such as this one, several assembly attributes that were historically\n// defined in this file are now automatically added during build and populated with\n// values defined in project properties. For details of which attributes are included\n// and how to customise this process see: https://aka.ms/assembly-info-properties\n\n\n// Setting ComVisible to false makes the types in this assembly not visible to COM\n// components.  If you need to access a type in this assembly from COM, set the ComVisible\n// attribute to true on that type.\n\n[assembly: ComVisible(false)]"
  },
  {
    "path": "ScreenToGif.Native/ScreenToGif.Native.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <UseWPF>True</UseWPF>\n    <UseWindowsForms>True</UseWindowsForms>\n    <DebugType>embedded</DebugType>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|AnyCPU'\">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\ScreenToGif.Model\\ScreenToGif.Domain.csproj\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif.Native/Structs/Bitmap.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// The BITMAP structure defines the type, width, height, color format, and bit values of a bitmap.\n/// </summary>\n[Serializable]\n[StructLayout(LayoutKind.Sequential)]\npublic struct Bitmap\n{\n    /// <summary>\n    /// The bitmap type. This member must be zero.\n    /// </summary>\n    public int bmType;\n\n    /// <summary>\n    /// The width, in pixels, of the bitmap. The width must be greater than zero.\n    /// </summary>\n    public int bmWidth;\n\n    /// <summary>\n    /// The height, in pixels, of the bitmap. The height must be greater than zero.\n    /// </summary>\n    public int bmHeight;\n\n    /// <summary>\n    /// The number of bytes in each scan line. This value must be divisible by 2, because the system assumes that the bit \n    /// values of a bitmap form an array that is word aligned.\n    /// </summary>\n    public int bmWidthBytes;\n\n    /// <summary>\n    /// The count of color planes.\n    /// </summary>\n    public int bmPlanes;\n\n    /// <summary>\n    /// The number of bits required to indicate the color of a pixel.\n    /// </summary>\n    public int bmBitsPixel;\n\n    /// <summary>\n    /// A pointer to the location of the bit values for the bitmap. The bmBits member must be a pointer to an array of \n    /// character (1-byte) values.\n    /// </summary>\n    public IntPtr bmBits;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/BitmapFileHeader.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential, Pack = 2)]\npublic struct BitmapFileHeader\n{\n    public ushort bfType;\n    public uint bfSize;\n    public ushort bfReserved1;\n    public ushort bfReserved2;\n    public uint bfOffBits;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/BitmapInfoHeader.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct BitmapInfoHeader\n{\n    public uint biSize;\n    public int biWidth;\n    public int biHeight;\n    public ushort biPlanes;\n    public ushort biBitCount;\n    public BitmapCompressionModes biCompression;\n    public uint biSizeImage;\n    public int biXPelsPerMeter;\n    public int biYPelsPerMeter;\n    public uint biClrUsed;\n    public uint biClrImportant;\n\n    public BitmapInfoHeader Init()\n    {\n        return new BitmapInfoHeader { biSize = (uint)Marshal.SizeOf(this) };\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/CursorInfo.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct CursorInfo\n{\n    /// <summary>\n    /// Specifies the size, in bytes, of the structure. \n    /// </summary>\n    public int cbSize;\n\n    /// <summary>\n    /// Specifies the cursor state. This parameter can be one of the following values:\n    /// </summary>\n    public int flags;\n\n    ///<summary>\n    ///Handle to the cursor. \n    ///</summary>\n    public IntPtr hCursor;\n\n    /// <summary>\n    /// A POINT structure that receives the screen coordinates of the cursor. \n    /// </summary>\n    public PointW ptScreenPos;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/IconInfo.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct Iconinfo\n{\n    /// <summary>\n    /// Specifies whether this structure defines an icon or a cursor.\n    /// A value of TRUE specifies an icon; FALSE specifies a cursor.\n    /// </summary>\n    public bool fIcon;\n\n    /// <summary>\n    /// The x-coordinate of a cursor's hot spot.\n    /// If this structure defines an icon, the hot spot is always in the center of the icon, and this member is ignored.\n    /// </summary>\n    public int xHotspot;\n\n    /// <summary>\n    /// The y-coordinate of the cursor's hot spot.\n    /// If this structure defines an icon, the hot spot is always in the center of the icon, and this member is ignored.\n    /// </summary>\n    public int yHotspot;\n\n    /// <summary>\n    /// The icon bitmask bitmap.\n    /// If this structure defines a black and white icon, this bitmask is formatted so that the upper half is the icon AND bitmask and the lower half is the icon XOR bitmask.\n    /// Under this condition, the height should be an even multiple of two. If this structure defines a color icon, this mask only defines the AND bitmask of the icon.\n    /// </summary>\n    public IntPtr hbmMask;\n\n    /// <summary>\n    /// A handle to the icon color bitmap.\n    /// This member can be optional if this structure defines a black and white icon.\n    /// The AND bitmask of hbmMask is applied with the SRCAND flag to the destination; subsequently, the color bitmap is applied (using XOR) to the destination by using the SRCINVERT flag.\n    /// </summary>\n    public IntPtr hbmColor;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/KeyboardHook.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// The KBDLLHOOKSTRUCT structure contains information about a low-level keyboard input event. \n/// </summary>\n/// <remarks>\n/// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/cwpstruct.asp\n/// </remarks>\n[StructLayout(LayoutKind.Sequential)]\npublic class KeyboardHook\n{\n    /// <summary>\n    /// Specifies a virtual-key code. The code must be a value in the range 1 to 254. \n    /// </summary>\n    public int KeyCode;\n\n    /// <summary>\n    /// Specifies a hardware scan code for the key. \n    /// </summary>\n    public int ScanCode;\n\n    /// <summary>\n    /// Specifies the extended-key flag, event-injected flag, context code, and transition-state flag.\n    /// </summary>\n    public int Flags;\n\n    /// <summary>\n    /// Specifies the time stamp for this message.\n    /// </summary>\n    public int Time;\n\n    /// <summary>\n    /// Specifies extra information associated with the message. \n    /// </summary>\n    public int ExtraInfo;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/Margins.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Native.Structs;\n\npublic struct Margins\n{\n    public Margins(Thickness t)\n    {\n        Left = (int)t.Left;\n        Right = (int)t.Right;\n        Top = (int)t.Top;\n        Bottom = (int)t.Bottom;\n    }\n\n    public int Left;\n    public int Right;\n    public int Top;\n    public int Bottom;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/MemoryStatusEx.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\npublic struct MemoryStatusEx\n{\n    public uint Length;\n    public uint MemoryLoad;\n    public ulong TotalPhysicalMemory;\n    public ulong AvailablePhysicalMemory;\n    public ulong TotalPageFile;\n    public ulong AvailablePageFile;\n    public ulong TotalVirtualMemory;\n    public ulong AvailableVirtualMemory;\n    public ulong AvailableExtendedVirtual;\n\n    public MemoryStatusEx(bool? filler) : this()\n    {\n        Length = checked((uint)Marshal.SizeOf(typeof(MemoryStatusEx)));\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/MinMaxInfo.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// Contains information about a window's maximized size and position and its minimum and maximum tracking size.\n/// https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-minmaxinfo\n/// </summary>\n[StructLayout(LayoutKind.Sequential)]\npublic struct MinMaxInfo\n{\n    /// <summary>\n    /// Reserved, do not use.\n    /// </summary>\n    public PointW Reserved;\n\n    /// <summary>\n    /// The maximized width (x member) and the maximized height (y member) of the window.\n    /// For top-level windows, this value is based on the width of the primary monitor.\n    /// </summary>\n    public PointW MaxSize;\n\n    /// <summary>\n    /// The position of the left side of the maximized window (x member) and the position of the top of the maximized window (y member).\n    /// For top-level windows, this value is based on the position of the primary monitor.\n    /// </summary>\n    public PointW MaxPosition;\n\n    /// <summary>\n    /// The minimum tracking width (x member) and the minimum tracking height (y member) of the window.\n    /// This value can be obtained programmatically from the system metrics SM_CXMINTRACK and SM_CYMINTRACK (see the GetSystemMetrics function).\n    /// </summary>\n    public PointW MinTrackSize;\n\n    /// <summary>\n    /// The maximum tracking width (x member) and the maximum tracking height (y member) of the window.\n    /// This value is based on the size of the virtual screen and can be obtained programmatically from the system metrics SM_CXMAXTRACK and SM_CYMAXTRACK (see the GetSystemMetrics function).\n    /// </summary>\n    public PointW MaxTrackSize;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/MonitorInfoEx.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Models.Native;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]\npublic class MonitorInfoEx\n{\n    /// <summary>\n    /// The size, in bytes, of the structure. Set this member to sizeof(MONITORINFOEX) (72) before calling the GetMonitorInfo function.\n    /// Doing so lets the function determine the type of structure you are passing to it.\n    /// </summary>\n    public int cbSize = Marshal.SizeOf(typeof(MonitorInfoEx));\n\n    /// <summary>\n    /// A RECT structure that specifies the display monitor rectangle, expressed in virtual-screen coordinates.\n    /// Note that if the monitor is not the primary display monitor, some of the rectangle's coordinates may be negative values.\n    /// </summary>\n    public NativeRect Monitor;\n\n    /// <summary>\n    /// A RECT structure that specifies the work area rectangle of the display monitor that can be used by applications,\n    /// expressed in virtual-screen coordinates. Windows uses this rectangle to maximize an application on the monitor.\n    /// The rest of the area in Monitor contains system windows such as the task bar and side bars.\n    /// Note that if the monitor is not the primary display monitor, some of the rectangle's coordinates may be negative values.\n    /// </summary>\n    public NativeRect Work;\n\n    /// <summary>\n    /// The attributes of the display monitor.\n    ///\n    /// This member can be the following value:\n    ///   1 : MONITORINFOF_PRIMARY\n    /// </summary>\n    public int Flags = 0;\n\n    /// <summary>\n    /// A string that specifies the device name of the monitor being used.\n    /// Most applications have no use for a display monitor name, and so can save some bytes by using a MONITORINFO structure.\n    /// </summary>\n    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]\n    public char[] Device = new char[32];\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/MouseHook.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// The MSLLHOOKSTRUCT structure contains information about a low-level keyboard input event.\n/// </summary>\n/// <remarks>\n/// https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-msllhookstruct\n/// </remarks>\n[StructLayout(LayoutKind.Sequential)]\npublic class MouseHook\n{\n    /// <summary>\n    /// Specifies a POINT structure that contains the X and Y coordinates of the cursor, in screen coordinates. \n    /// </summary>\n    public PointW Point;\n\n    /// <summary>\n    /// If the message is WM_MOUSEWHEEL, the high-order word of this member is the wheel delta. \n    /// The low-order word is reserved. A positive value indicates that the wheel was rotated forward, \n    /// away from the user; a negative value indicates that the wheel was rotated backward, toward the user. \n    /// One wheel click is defined as WHEEL_DELTA, which is 120. \n    ///If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP,\n    /// or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released, \n    /// and the low-order word is reserved.\n    /// </summary>\n    public uint MouseData;\n\n    /// <summary>\n    /// Specifies the event-injected flag. An application can use the following value to test the mouse flags.\n    /// </summary>\n    public int Flags;\n\n    /// <summary>\n    /// Specifies the time stamp for this message.\n    /// </summary>\n    public int Time;\n\n    /// <summary>\n    /// Specifies extra information associated with the message. \n    /// </summary>\n    public int ExtraInfo;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/NotifyIconData.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.Helpers;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// A struct that is submitted in order to configure the taskbar icon.\n/// Provides various members that can be configured partially, according to the\n/// values of the <see cref=\"IconDataMembers\"/> that were defined.\n/// </summary>\n[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]\npublic struct NotifyIconData\n{\n    /// <summary>\n    /// Size of this structure, in bytes.\n    /// </summary>\n    public uint cbSize;\n\n    /// <summary>\n    /// Handle to the window that receives notification messages associated with an icon in the taskbar status area.\n    /// The Shell uses hWnd and uID to identify which icon to operate on when Shell_NotifyIcon is invoked.\n    /// </summary>\n    public IntPtr WindowHandle;\n\n    /// <summary>\n    /// Application-defined identifier of the taskbar icon.\n    /// The Shell uses hWnd and uID to identify which icon to operate on when Shell_NotifyIcon is invoked.\n    /// You can have multiple icons associated with a single hWnd by assigning each a different uID.\n    /// This feature, however is currently not used.\n    /// </summary>\n    public uint TaskbarIconId;\n\n    /// <summary>\n    /// Flags that indicate which of the other members contain valid data.\n    /// This member can be a combination of the NIF_XXX constants.\n    /// </summary>\n    public IconDataMembers ValidMembers;\n\n    /// <summary>\n    /// Application-defined message identifier.\n    /// The system uses this identifier to send notifications to the window identified in hWnd.\n    /// </summary>\n    public uint CallbackMessageId;\n\n    /// <summary>\n    /// A handle to the icon that should be displayed.\n    /// Just Icon.Handle.\n    /// </summary>\n    public IntPtr IconHandle;\n\n    /// <summary>\n    /// String with the text for a standard ToolTip.\n    /// It can have a maximum of 128 characters, including the terminating NULL.\n    /// </summary>\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\n    public string ToolTipText;\n\n    /// <summary>\n    /// State of the icon. Remember to also set the <see cref=\"StateMask\"/>.\n    /// </summary>\n    public IconStates IconState;\n\n    /// <summary>\n    /// A value that specifies which bits of the state member are retrieved or modified.\n    /// For example, setting this member to <see cref=\"IconStates.Hidden\"/> causes only the item's hidden state to be retrieved.\n    /// </summary>\n    public IconStates StateMask;\n\n    /// <summary>\n    /// String with the text for a balloon ToolTip. It can have a maximum of 255 characters.\n    /// To remove the ToolTip, set the NIF_INFO flag in uFlags and set szInfo to an empty string.\n    /// </summary>\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string BalloonText;\n\n    /// <summary>\n    /// Mainly used to set the version when Shell_NotifyIcon is invoked with <see cref=\"NotifyCommands.SetVersion\"/>.\n    /// However, for legacy operations, the same member is also used to set timouts for balloon ToolTips.\n    /// </summary>\n    public uint VersionOrTimeout;\n\n    /// <summary>\n    /// String containing a title for a balloon ToolTip.\n    /// This title appears in boldface above the text.\n    /// It can have a maximum of 63 characters.\n    /// </summary>\n    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string BalloonTitle;\n\n    /// <summary>\n    /// Adds an icon to a balloon ToolTip, which is placed to the left of the title.\n    /// If the <see cref=\"BalloonTitle\"/> member is zero-length, the icon is not shown.\n    /// </summary>\n    public BalloonFlags BalloonFlags;\n\n    /// <summary>\n    /// A registered GUID that identifies the icon. \n    /// This value overrides uID and is the recommended method of identifying the icon.\n    /// </summary>\n    public Guid TaskbarIconGuid;\n\n    /// <summary>\n    /// The handle of a customized balloon icon provided by the application that should\n    /// be used independently of the tray icon.\n    /// If this member is non-NULL and the User flag is set, this icon is used as the balloon icon.\n    /// If this member is NULL, the legacy behavior is carried out.\n    /// </summary>\n    public IntPtr CustomBalloonIconHandle;\n\n\n    /// <summary>\n    /// Creates a default data structure that provides a hidden taskbar icon without the icon being set.\n    /// </summary>\n    public static NotifyIconData CreateDefault(IntPtr handle)\n    {\n        var data = new NotifyIconData();\n\n        data.cbSize = (uint)Marshal.SizeOf(data);\n        data.WindowHandle = handle;\n        data.TaskbarIconId = 0x0;\n        data.CallbackMessageId = WindowMessageSink.CallbackMessageId;\n        data.VersionOrTimeout = (uint)NotifyIconVersions.Vista;\n        data.IconHandle = IntPtr.Zero;\n\n        //hide initially\n        data.IconState = IconStates.Hidden;\n        data.StateMask = IconStates.Hidden;\n\n        //set flags\n        data.ValidMembers = IconDataMembers.Message | IconDataMembers.Icon | IconDataMembers.Tip;\n\n        //reset strings\n        data.ToolTipText = data.BalloonText = data.BalloonTitle = string.Empty;\n\n        return data;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/PointW.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct PointW\n{\n    public int X;\n    public int Y;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/ShellExecuteInfo.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]\npublic struct ShellExecuteInfo\n{\n    public int cbSize;\n    public uint fMask;\n    public IntPtr hwnd;\n    [MarshalAs(UnmanagedType.LPTStr)]\n    public string lpVerb;\n    [MarshalAs(UnmanagedType.LPTStr)]\n    public string lpFile;\n    [MarshalAs(UnmanagedType.LPTStr)]\n    public string lpParameters;\n    [MarshalAs(UnmanagedType.LPTStr)]\n    public string lpDirectory;\n    public int nShow;\n    public IntPtr hInstApp;\n    public IntPtr lpIDList;\n    [MarshalAs(UnmanagedType.LPTStr)]\n    public string lpClass;\n    public IntPtr hkeyClass;\n    public uint dwHotKey;\n    public IntPtr hIcon;\n    public IntPtr hProcess;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/TimeCaps.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic readonly struct TimeCaps\n{\n    public readonly uint MinimumResolution;\n    public readonly uint MaximumResolution;\n};"
  },
  {
    "path": "ScreenToGif.Native/Structs/TitlebarInfo.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Models.Native;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct TitlebarInfo\n{\n    /// <summary>\n    /// The size, in bytes, of the structure. The caller must set this member to sizeof(TITLEBARINFO).\n    /// </summary>\n    public int cbSize;\n\n    /// <summary>\n    /// The coordinates of the title bar.\n    /// These coordinates include all title-bar elements except the window menu.\n    /// </summary>\n    public NativeRect rcTitleBar;\n\n    /// <summary>\n    /// An array that receives a value for each element of the title bar.\n    /// </summary>\n    [MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.CChildrenTitlebar + 1)]\n    public int[] rgstate;\n\n    public TitlebarInfo(bool? filler) : this()\n    {\n        //Allows automatic initialization of \"cbSize\" with \"new TitlebarInfo(null/true/false)\".\n        cbSize = (int)Marshal.SizeOf(typeof(TitlebarInfo));\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/WindowClass.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// Win API WNDCLASS struct - represents a single window.\n/// Used to receive window messages.\n/// </summary>\n[StructLayout(LayoutKind.Sequential)]\npublic struct WindowClass\n{\n    public uint style;\n    public Delegates.WindowProcedureHandler lpfnWndProc;\n    public int cbClsExtra;\n    public int cbWndExtra;\n    public IntPtr hInstance;\n    public IntPtr hIcon;\n    public IntPtr hCursor;\n    public IntPtr hbrBackground;\n    [MarshalAs(UnmanagedType.LPWStr)] public string lpszMenuName;\n    [MarshalAs(UnmanagedType.LPWStr)] public string lpszClassName;\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/WindowInfo.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Models.Native;\n\nnamespace ScreenToGif.Native.Structs;\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct WindowInfo\n{\n    /// <summary>\n    /// The size of the structure, in bytes.\n    /// The caller must set this member to sizeof(WINDOWINFO).\n    /// </summary>\n    public uint cbSize;\n\n    /// <summary>\n    /// The coordinates of the window.\n    /// </summary>\n    public NativeRect rcWindow;\n\n    /// <summary>\n    /// The coordinates of the client area.\n    /// </summary>\n    public NativeRect rcClient;\n\n    /// <summary>\n    /// The window styles.\n    /// For a table of window styles, see Window Styles (https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles).\n    /// </summary>\n    public uint dwStyle;\n\n    /// <summary>\n    /// The extended window styles.\n    /// For a table of extended window styles, see Extended Window Styles (https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles).\n    /// </summary>\n    public uint dwExStyle;\n\n    /// <summary>\n    /// The window status.\n    /// If this member is WS_ACTIVECAPTION (0x0001), the window is active. Otherwise, this member is zero.\n    /// </summary>\n    public uint dwWindowStatus;\n\n    /// <summary>\n    /// The width of the window border, in pixels.\n    /// </summary>\n    public uint cxWindowBorders;\n\n    /// <summary>\n    /// The height of the window border, in pixels.\n    /// </summary>\n    public uint cyWindowBorders;\n\n    /// <summary>\n    /// The window class atom (see RegisterClass).\n    /// </summary>\n    public ushort atomWindowType;\n\n    /// <summary>\n    /// The Windows version of the application that created the window.\n    /// </summary>\n    public ushort wCreatorVersion;\n\n    public WindowInfo(bool? filler) : this()\n    {\n        //Allows automatic initialization of \"cbSize\" with \"new WindowInfo(null/true/false)\".\n        cbSize = (uint)Marshal.SizeOf(typeof(WindowInfo));\n    }\n}"
  },
  {
    "path": "ScreenToGif.Native/Structs/WindowPlacement.cs",
    "content": "using System.Runtime.InteropServices;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Models.Native;\nusing Point = System.Drawing.Point;\n\nnamespace ScreenToGif.Native.Structs;\n\n/// <summary>\n/// Contains information about the placement of a window on the screen.\n/// </summary>\n[Serializable]\n[StructLayout(LayoutKind.Sequential)]\npublic struct WindowPlacement\n{\n    /// <summary>\n    /// The length of the structure, in bytes. Before calling the GetWindowPlacement or SetWindowPlacement functions, set this member to sizeof(WINDOWPLACEMENT).\n    /// <para>\n    /// GetWindowPlacement and SetWindowPlacement fail if this member is not set correctly.\n    /// </para>\n    /// </summary>\n    public int Length;\n\n    /// <summary>\n    /// Specifies flags that control the position of the minimized window and the method by which the window is restored.\n    /// </summary>\n    public int Flags;\n\n    /// <summary>\n    /// The current show state of the window.\n    /// </summary>\n    public ShowWindowCommands ShowCmd;\n\n    /// <summary>\n    /// The coordinates of the window's upper-left corner when the window is minimized.\n    /// </summary>\n    public Point MinPosition;\n\n    /// <summary>\n    /// The coordinates of the window's upper-left corner when the window is maximized.\n    /// </summary>\n    public Point MaxPosition;\n\n    /// <summary>\n    /// The window's coordinates when the window is in the restored position.\n    /// </summary>\n    public NativeRect NormalPosition;\n\n    /// <summary>\n    /// Gets the default (empty) value.\n    /// </summary>\n    public static WindowPlacement Default\n    {\n        get\n        {\n            var result = new WindowPlacement();\n            result.Length = Marshal.SizeOf(result);\n            return result;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Test/A11Y/ThemeContrastTests.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Windows.Media;\nusing Xunit;\n\nnamespace ScreenToGif.Test.A11Y\n{\n    public class ThemeContrastTests\n    {\n        private static readonly string ThemeRoot = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, \"..\", \"..\", \"..\", \"..\", \"ScreenToGif\", \"Themes\", \"Colors\"));\n\n        private static readonly string[] Themes = [\"Dark.xaml\", \"Light.xaml\", \"Medium.xaml\", \"VeryDark.xaml\"];\n\n        // Explicit pairs\n        private static readonly (string fg, string bg, double minRatio)[] ColorPairs = [\n            (\"Brush.Button.Paypal.Foreground\", \"Brush.Button.Paypal.Background\", WCAGContrast.LargeAA),\n            (\"Brush.DataGrid.Header.Foreground\", \"Brush.DataGrid.Header.Background\", WCAGContrast.NormalAA),\n        ];\n\n        // Generates contrast test cases based on prefix matching\n        private static IEnumerable<(string theme, string fg, string bg, double minRatio)> DynamicColorPairs()\n        {\n            (string fgPrefix, string bgPrefix, double minRatio)[] dynamicPairs = [\n                (\"Brush.Hyperlink\", \"Panel.Background\", WCAGContrast.NormalAA),\n            ];\n            foreach (var theme in Themes)\n            {\n                var dict = LoadTheme(theme);\n                var keys = dict.Keys.OfType<string>().ToList();\n\n                foreach (var (fgPrefix, bgPrefix, minRatio) in dynamicPairs)\n                {\n                    var fgKeys = keys.Where(k => k.StartsWith(fgPrefix));\n                    var bgKeys = keys.Where(k => k.StartsWith(bgPrefix));\n\n                    foreach (string fgKey in fgKeys)\n                    {\n                        foreach (string bgKey in bgKeys)\n                        {\n                            yield return (theme, fgKey, bgKey, minRatio);\n                        }\n                    }\n                }\n            }\n        }\n        public static IEnumerable<object[]> ContrastTestCases()\n        {\n            foreach (var theme in Themes)\n            {\n                foreach (var (fg, bg, minRatio) in ColorPairs)\n                {\n                    yield return new object[] { theme, fg, bg, minRatio };\n                }\n            }\n\n            foreach (var (theme, fg, bg, minRatio) in DynamicColorPairs())\n            {\n                yield return new object[] { theme, fg, bg, minRatio };\n            }\n        }\n\n        [Theory]\n        [MemberData(nameof(ContrastTestCases))]\n        public void ThemeContrastShouldMeetWCAG(string theme, string fgKey, string bgKey, double minRatio)\n        {\n            var dict = LoadTheme(theme);\n            var fg = ((SolidColorBrush)dict[fgKey]).Color;\n            var bg = ((SolidColorBrush)dict[bgKey]).Color;\n\n            var contrast = WCAGContrast.CheckContrast(fg, bg);\n\n            Assert.True(contrast >= minRatio, $\"[{fgKey}] on [{bgKey}] contrast {contrast:F2} < {minRatio}\");\n        }\n\n        private static ResourceDictionary LoadTheme(string fileName)\n        {\n            var filePath = Path.Combine(ThemeRoot, fileName);\n            using var stream = File.OpenRead(filePath);\n            return (ResourceDictionary)XamlReader.Load(stream);\n        }\n    }\n\n\n    public static class WCAGContrast\n    {\n        public const double NormalAA = 4.5;\n        public const double LargeAA = 3.0;\n\n        public const double NormalAAA = 7.0;\n        public const double LargeAAA = 4.5;\n\n        public static double CheckContrast(Color fg, Color bg)\n        {\n            var alpha = fg.A / 255.0;\n            var r = (byte)(fg.R * alpha + bg.R * (1 - alpha));\n            var g = (byte)(fg.G * alpha + bg.G * (1 - alpha));\n            var b = (byte)(fg.B * alpha + bg.B * (1 - alpha));\n\n            var blendedFg = Color.FromRgb(r, g, b);\n\n            var l1 = GetLuminance(blendedFg);\n            var l2 = GetLuminance(bg);\n\n            var light = Math.Max(l1, l2);\n            var dark = Math.Min(l1, l2);\n\n            return (light + 0.05) / (dark + 0.05);\n        }\n\n        private static double GetLuminance(Color c)\n        {\n            static double ChannelToLinear(byte channel)\n            {\n                var v = channel / 255.0;\n                return v <= 0.03928 ? v / 12.92 : Math.Pow((v + 0.055) / 1.055, 2.4);\n            }\n\n            return 0.2126 * ChannelToLinear(c.R) + 0.7152 * ChannelToLinear(c.G) + 0.0722 * ChannelToLinear(c.B);\n        }\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.Test/Data/Upload/Test.txt",
    "content": "﻿test"
  },
  {
    "path": "ScreenToGif.Test/Facts/ImageComparison.cs",
    "content": "using ScreenToGif.Model;\nusing Xunit;\n\nnamespace ScreenToGif.Test.Fact\n{\n    public class ImageComparison\n    {\n        [Fact]\n        public void CanCalculateDifference()\n        {\n            var f1 = new FrameInfo()\n            {\n                Path = \"./Data/b1.bmp\",\n                Index = 0\n            };\n\n            var f2 = new FrameInfo()\n            {\n                Path = \"./Data/b2.bmp\",\n                Index = 1\n            };\n\n            var diff = ImageUtil.ImageMethods.CalculateDifference(f1, f2);\n\n            Assert.Equal(25, diff);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Test/Facts/YandexUpload.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing ScreenToGif.Cloud;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Test.Util;\nusing ScreenToGif.ViewModel.UploadPresets.Yandex;\nusing Xunit;\n\nnamespace ScreenToGif.Test.Facts\n{\n    public class YandexUpload\n    {\n        [Fact]\n        public async Task CanUploadFile()\n        {\n            var cloud = CloudFactory.CreateCloud(UploadDestinations.Yandex);\n            var preset = new YandexPreset\n            {\n                OAuthToken = \"2344534523e45LW2jwerdp-efUwe4rmg\" //Put your test token in here.\n            };\n\n            //Upload.\n            var history = await cloud.UploadFileAsync(preset, \"./Data/Test.txt\", CancellationToken.None);\n\n            Assert.NotNull(history);\n            Assert.False(string.IsNullOrEmpty(history.Link));\n\n            Trace.WriteLine(\"Link: \" + history.Link);\n\n            //Download.\n            var data = await HttpHelper.HttpDownloadFileAsync(history.Link);\n\n            Assert.NotNull(data);\n        }\n\n        [Fact]\n        public async Task ThrowExceptionWhenUploadFileWithInvalidToken()\n        {\n            var cloud = CloudFactory.CreateCloud(UploadDestinations.Yandex);\n            var preset = new YandexPreset\n            {\n                OAuthToken = \"Invalid token\"\n            };\n\n            //Upload.\n            await Assert.ThrowsAsync<UploadException>(async () => await cloud.UploadFileAsync(preset, \"./Data/Test.txt\", CancellationToken.None));\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Test/ScreenToGif.Test.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <Nullable>disable</Nullable>\n    <IsPackable>false</IsPackable>\n    <DebugType>embedded</DebugType>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n    <PackageReference Include=\"xunit\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"coverlet.collector\">\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Data\\ImageComparison\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\ScreenToGif.ViewModel\\ScreenToGif.ViewModel.csproj\" />\n    <ProjectReference Include=\"..\\ScreenToGif\\ScreenToGif.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Update=\"Data\\Upload\\Test.txt\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif.Test/Util/HttpHelper.cs",
    "content": "using System.Net.Http;\nusing System.Threading.Tasks;\n\nnamespace ScreenToGif.Test.Util\n{\n    internal static class HttpHelper\n    {\n        static public async Task<string> HttpDownloadFileAsync(string url)\n        {\n            var httpClient = new HttpClient();\n\n            using HttpResponseMessage response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);\n\n            return await response.Content.ReadAsStringAsync();\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Arguments.cs",
    "content": "using System.Globalization;\nusing System.IO;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Holds information about the current arguments of the running instance.\n/// </summary>\npublic static class Arguments\n{\n    #region Properties\n\n    /// <summary>\n    /// The path of the files passed as arguments to this executable.\n    /// Only files that exists are not ignored.\n    /// </summary>\n    public static List<string> FileNames { get; set; } = new();\n\n    /// <summary>\n    /// True if this instance should not try to display anything, besides the download window.\n    /// </summary>\n    public static bool IsInDownloadMode { get; set; }\n\n    /// <summary>\n    /// The type of download that should happen (Gifski, FFmpeg, SharpDX).\n    /// </summary>\n    public static string DownloadMode { get; set; }\n\n    /// <summary>\n    /// The output path of the download.\n    /// </summary>\n    public static string DownloadPath { get; set; }\n\n    /// <summary>\n    /// True if this instance should not try to display anything, besides trying to save the settings to disk.\n    /// </summary>\n    public static bool IsInSettingsMode { get; set; }\n\n    /// <summary>\n    /// Ignores the single instance setting to continue opening a new instance of the app.\n    /// </summary>\n    public static bool NewInstance { get; set; }\n\n    /// <summary>\n    /// Opens a window.\n    /// </summary>\n    public static bool Open { get; set; }\n\n    /// <summary>\n    /// The window to open with the -open command.\n    /// </summary>\n    public static int WindownToOpen { get; set; }\n\n    /// <summary>\n    /// The capture region.\n    /// </summary>\n    public static Rect Region { get; set; } = Rect.Empty;\n\n    /// <summary>\n    /// The capture frequency multiplier.\n    /// </summary>\n    public static int Frequency { get; set; }\n\n    /// <summary>\n    /// The capture frequency type.\n    /// </summary>\n    public static CaptureFrequencies? FrequencyType { get; set; }\n\n    /// <summary>\n    /// The capture limit.\n    /// </summary>\n    public static TimeSpan Limit { get; set; }\n\n    /// <summary>\n    /// True if the recorder should start capture right away.\n    /// </summary>\n    public static bool StartCapture { get; set; }\n\n    #endregion\n\n\n    public static void Prepare(string[] args)\n    {\n        FileNames.Clear();\n\n        for (var i = 0; i < args.Length; i++)\n        {\n            switch (args[i])\n            {\n                case \"/lang\":\n                case \"-lang\":\n                {\n                    //Changes the language of the app, example: -lang pt\n                    if (args.Length > i + 1)\n                    {\n                        try\n                        {\n                            //Fail silently if the language is not properly set.\n                            UserSettings.All.LanguageCode = new CultureInfo(args[i + 1]).ThreeLetterISOLanguageName;\n                            i++;\n                        }\n                        catch (Exception e)\n                        {\n                            LogWriter.Log(e, $\"The language code {args[i + 1]} was not recognized.\");\n                        }\n                    }\n\n                    break;\n                }\n\n                case \"-d\":\n                case \"/d\":\n                case \"-download\":\n                case \"/download\":\n                {\n                    if (args.Length > i + 2)\n                    {\n                        IsInDownloadMode = true;\n                        i++;\n\n                        DownloadMode = args[i++];\n                        DownloadPath = args[i++];\n                    }\n                    break;\n                }\n\n                case \"-sm\":\n                case \"/sm\":\n                case \"-softmode\":\n                case \"/softmode\":\n                {\n                    //Forces using software mode.\n                    UserSettings.All.DisableHardwareAcceleration = true;\n                    break;\n                }\n\n                case \"-hm\":\n                case \"/hm\":\n                case \"-hardmode\":\n                case \"/hardmode\":\n                {\n                    //Forces using hardware mode.\n                    UserSettings.All.DisableHardwareAcceleration = false;\n                    break;\n                }\n\n                case \"-settings\":\n                {\n                    //Enables the mode which will try to save the settings using administrative privileges.\n                    IsInSettingsMode = true;\n                    break;\n                }\n\n                case \"-n\":\n                case \"/n\":\n                case \"/new\":\n                case \"-new\":\n                {\n                    NewInstance = true;\n                    break;\n                }\n\n                case \"-o\":\n                case \"/o\":\n                case \"/open\":\n                case \"-open\":\n                {\n                    if (args.Length <= i + 1)\n                        return;\n\n                    //-open screen-recorder(webcam-recorder/board-recorder/editor/options/startup/minimized)\n                    Open = true;\n\n                    #region Get window to open\n\n                    var window = args[++i];\n\n                    switch (window)\n                    {\n                        case \"m\":\n                        case \"min\":\n                        case \"minimized\":\n                            WindownToOpen = -1;\n                            break;\n\n                        case \"up\":\n                        case \"start\":\n                        case \"startup\":\n                            WindownToOpen = 0;\n                            break;\n\n                        case \"s\":\n                        case \"screen\":\n                        case \"screen-recorder\":\n                            WindownToOpen = 1;\n                            break;\n\n                        case \"w\":\n                        case \"webcam\":\n                        case \"webcam-recorder\":\n                            WindownToOpen = 2;\n                            break;\n\n                        case \"b\":\n                        case \"board\":\n                        case \"board-recorder\":\n                            WindownToOpen = 3;\n                            break;\n\n                        case \"e\":\n                        case \"editor\":\n                            WindownToOpen = 4;\n                            break;\n\n                        case \"o\":\n                        case \"options\":\n                            WindownToOpen = 5;\n                            break;\n\n                        default:\n                            Open = false;\n                            break;\n                    }\n\n                    #endregion\n\n                    break;\n                }\n\n                case \"-r\":\n                case \"/r\":\n                case \"/region\":\n                case \"-region\":\n                {\n                    try\n                    {\n                        //-region/-r 100,50,500,200\n                        if (args.Length > i + 1)\n                            Region = Rect.Parse(args[++i]);\n                    }\n                    catch (Exception ex)\n                    {\n                        LogWriter.Log(ex, \"Not possible to parse the capture rectangle from arguments\", args[i++]);\n                    }\n\n                    break;\n                }\n\n                case \"-f\":\n                case \"/f\":\n                case \"/framerate\":\n                case \"-framerate\":\n                case \"/frequency\":\n                case \"-frequency\":\n                {\n                    if (args.Length <= i + 1)\n                        return;\n\n                    //-framerate/-f (60fps/60fpm/60fph/manual/interaction)\n                    ParseFramerate(args[++i].Trim());\n                    break;\n                }\n\n                case \"-l\":\n                case \"/l\":\n                case \"/limit\":\n                case \"-limit\":\n                {\n                    //-limit/-l 01:30\n                    if (args.Length <= i + 1)\n                        return;\n\n                    if (TimeSpan.TryParse(args[++i].Trim(), CultureInfo.InvariantCulture, out var time))\n                        Limit = time;\n\n                    break;\n                }\n\n                case \"-c\":\n                case \"/c\":\n                case \"/capture\":\n                case \"-capture\":\n                {\n                    StartCapture = true;\n                    break;\n                }\n                        \n                default:\n                {\n                    var path = args[i].Trim('\"').Trim('\\'');\n\n                    //Anything else is treated as file to be imported.\n                    if (File.Exists(path))\n                        FileNames.Add(path);\n\n                    break;\n                }\n            }\n        }\n    }\n\n    public static void ClearAutomationArgs()\n    {\n        Open = false;\n        WindownToOpen = 0;\n        Region = Rect.Empty;\n        Frequency = 0;\n        FrequencyType = null;\n        Limit = TimeSpan.Zero;\n        StartCapture = false;\n    }\n\n\n    private static void ParseFramerate(string frequency)\n    {\n        if (frequency.ToLowerInvariant().EndsWith(\"fps\"))\n        {\n            ParseFramerate(frequency, CaptureFrequencies.PerSecond);\n            return;\n        }\n\n        if (frequency.ToLowerInvariant().EndsWith(\"fpm\"))\n        {\n            ParseFramerate(frequency, CaptureFrequencies.PerMinute);\n            return;\n        }\n\n        if (frequency.ToLowerInvariant().EndsWith(\"fph\"))\n        {\n            ParseFramerate(frequency, CaptureFrequencies.PerHour);\n            return;\n        }\n\n        if (frequency.ToLowerInvariant().Equals(\"manual\"))\n        {\n            FrequencyType = CaptureFrequencies.Manual;\n            return;\n        }\n\n        if (frequency.ToLowerInvariant().Equals(\"interaction\"))\n            FrequencyType = CaptureFrequencies.Interaction;\n    }\n\n    private static void ParseFramerate(string frequency, CaptureFrequencies type)\n    {\n        if (!int.TryParse(frequency.Substring(0, frequency.Length - 3), out var time))\n        {\n            LogWriter.Log(\"Not possible to parse the framerate from the argument\", frequency);\n            return;\n        }\n\n        if (time < 1)\n            time = 1;\n        else if (time > 60)\n            time = 60;\n\n        FrequencyType = type;\n        Frequency = time;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/BitHelper.cs",
    "content": "namespace ScreenToGif.Util;\n\npublic static class BitHelper\n{\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static byte[] ConvertEndian(byte[] i)\n    {\n        if (i.Length % 2 != 0)\n            throw new Exception(\"Byte array length must multiply of 2.\");\n\n        Array.Reverse(i);\n\n        return i;\n    }\n\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static int ConvertEndian(int i)\n    {\n        return BitConverter.ToInt32(ConvertEndian(BitConverter.GetBytes(i)), 0);\n    }\n\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static uint ConvertEndian(uint i)\n    {\n        return BitConverter.ToUInt32(ConvertEndian(BitConverter.GetBytes(i)), 0);\n    }\n\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static short ConvertEndian(short i)\n    {\n        return BitConverter.ToInt16(ConvertEndian(BitConverter.GetBytes(i)), 0);\n    }\n\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static ushort ConvertEndian(ushort i)\n    {\n        return BitConverter.ToUInt16(ConvertEndian(BitConverter.GetBytes(i)), 0);\n    }\n\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static long ConvertEndian(long i)\n    {\n        return BitConverter.ToInt64(ConvertEndian(BitConverter.GetBytes(i)), 0);\n    }\n\n    ///<summary>\n    ///Convert big-endian to little-endian or reserve.\n    ///</summary>\n    public static long ConvertEndian(double i)\n    {\n        var lo = BitConverter.DoubleToInt64Bits(i);\n\n        return ConvertEndian(lo);\n    }\n\n    ///<summary>\n    ///Compare two byte array.\n    ///</summary>\n    public static bool IsBytesEqual(byte[] byte1, byte[] byte2)\n    {\n        if (byte1.Length != byte2.Length)\n            return false;\n\n        return !byte1.Where((t, i) => t != byte2[i]).Any();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Apng.cs",
    "content": "using ScreenToGif.Util.Codification.Apng.Chunks;\nusing System.IO;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing PixelFormats = System.Windows.Media.PixelFormats;\n\nnamespace ScreenToGif.Util.Codification.Apng;\n\n/// <summary>\n/// Apng encoder and decoder.\n/// https://en.wikipedia.org/wiki/APNG\n/// https://wiki.mozilla.org/APNG_Specification\n/// https://www.w3.org/TR/PNG/\n/// </summary>\npublic class Apng : IDisposable\n{\n    public enum DisposeOps\n    {\n        None = 0,\n        Background = 1,\n        Previous = 2\n    }\n\n    public enum BlendOps\n    {\n        Source = 0,\n        Over = 1\n    }\n\n\n    #region Properties\n\n    /// <summary>\n    /// The stream which the apng is written on.\n    /// </summary>\n    private Stream InternalStream { get; set; }\n\n    /// <summary>\n    /// The total number of frames.\n    /// </summary>\n    internal int FrameCount { get; set; } = 0;\n\n    /// <summary>\n    /// Repeat Count for the apng.\n    /// </summary>\n    internal int RepeatCount { get; set; } = 0;\n\n    /// <summary>\n    /// True if it's the first frame of the apng.\n    /// </summary>\n    private bool IsFirstFrame { get; set; } = true;\n\n    /// <summary>\n    /// The sequence number of frame.\n    /// </summary>\n    private int SequenceNumber { get; set; } = 0;\n\n    #endregion\n\n    #region Internal chunks\n\n    /// <summary>\n    /// The image header chunk.\n    /// </summary>\n    public IhdrChunk Ihdr { get; private set; }\n\n    /// <summary>\n    /// The animation control chunk.\n    /// </summary>\n    public ActlChunk Actl { get; private set; }\n\n    /// <summary>\n    /// All the chunks of the Png, except IHDR, acTL and IEND.\n    /// </summary>\n    internal List<Chunk> Chunks { get; } = new();\n\n    #endregion\n\n\n    public Apng(Stream stream, int frameCount, int repeatCount)\n    {\n        InternalStream = stream;\n        FrameCount = frameCount;\n        RepeatCount = repeatCount;\n    }\n\n    public Apng(Stream stream)\n    {\n        InternalStream = stream;\n    }\n\n    public void AddFrame(string path, Int32Rect rect, int delay = 66)\n    {\n        using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))\n        {\n            if (IsFirstFrame)\n            {\n                //Png Header: 8 bytes.\n                InternalStream.WriteBytes(stream.ReadBytes(8));\n\n                //IHDR chunk. 13 bytes (Length + Type + CRC, 4 bytes each) = 25 bytes.\n                InternalStream.WriteBytes(stream.ReadBytes(25));\n\n                //acTL: Animation control chunk. 8 bytes (Length + Type + CRC, 4 bytes each) = 20 bytes.\n                InternalStream.WriteUInt32(BitHelper.ConvertEndian(8u)); //Length, 4 bytes.\n                InternalStream.WriteBytes(Encoding.ASCII.GetBytes(\"acTL\")); //Chunk type, 4 bytes.\n                InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)FrameCount)); //NumFrames, 4 bytes.\n                InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)RepeatCount)); //NumPlays, 4 bytes.\n                InternalStream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(InternalStream.PeekBytes(InternalStream.Position - 12, 12)))); //CRC, 4 bytes.\n            }\n\n            //fcTL: Frame control chunk. 26 bytes (Length + Type + CRC, 4 bytes each) = 38 bytes.\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian(26u)); //Length, 4 bytes.\n            InternalStream.WriteBytes(Encoding.ASCII.GetBytes(\"fcTL\")); //Chunk type, 4 bytes.\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)SequenceNumber++)); //SequenceNumber, 4 bytes.\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)rect.Width)); //Width, 4 bytes.\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)rect.Height)); //Height, 4 bytes.\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)rect.X)); //OffsetX, 4 bytes.\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)rect.Y)); //OffsetY, 4 bytes.\n            InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)delay)); //Delay numerator, 2 bytes.\n            InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)1000)); //Delay denominator, 2 bytes.\n\n            if (IsFirstFrame)\n            {\n                InternalStream.WriteByte((byte)DisposeOps.None); //DisposeOp, 1 byte.\n                InternalStream.WriteByte((byte)BlendOps.Source); //BlendOp, 1 byte.\n            }\n            else\n            {\n                InternalStream.WriteByte((byte)DisposeOps.None); //DisposeOp, 1 byte.\n                InternalStream.WriteByte((byte)BlendOps.Over); //BlendOp, 1 byte.\n            }\n\n            InternalStream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(InternalStream.PeekBytes(InternalStream.Position - 30, 30)))); //CRC, 4 bytes.\n\n            //fdAT: Frame data chunk. 4 + n bytes (Length + Type + CRC, 4 bytes each) = 16 + n bytes, where n is the frame data.\n            var dataList = GetData(stream);\n\n            foreach (var data in dataList)\n            {\n                if (IsFirstFrame)\n                {\n                    InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)data.Length)); //Length, 4 bytes.\n                    InternalStream.WriteBytes(Encoding.ASCII.GetBytes(\"IDAT\")); //Chunk type, 4 bytes.\n                    InternalStream.WriteBytes(data); //Frame data, n bytes.\n                    InternalStream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(InternalStream.PeekBytes(InternalStream.Position - (data.Length + 4), data.Length + 4)))); //CRC, 4 bytes.\n                }\n                else\n                {\n                    InternalStream.WriteUInt32(BitHelper.ConvertEndian(4 + (uint)data.Length)); //Length, 4 bytes.\n                    InternalStream.WriteBytes(Encoding.ASCII.GetBytes(\"fdAT\")); //Chunk type, 4 bytes.\n                    InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)SequenceNumber++)); //SequenceNumber, 4 bytes.\n                    InternalStream.WriteBytes(data); //Frame data, n bytes.\n                    InternalStream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(InternalStream.PeekBytes(InternalStream.Position - (data.Length + 8), data.Length + 8)))); //CRC, 4 bytes.\n                }\n            }\n\n            IsFirstFrame = false;\n        }\n    }\n\n    private static IEnumerable<byte[]> GetData(Stream ms)\n    {\n        ms.Position = 8 + 25;\n\n        var list = new List<byte[]>();\n\n        while (ms.CanRead)\n        {\n            var length = BitHelper.ConvertEndian(ms.ReadUInt32());\n            var chunkType = Encoding.ASCII.GetString(ms.ReadBytes(4));\n            var data = ms.ReadBytes(length);\n\n            if (chunkType == \"IDAT\")\n                list.Add(data);\n\n            if (chunkType == \"IEND\")\n                break;\n\n            ms.ReadUInt32();\n        }\n\n        return list;\n    }\n\n    public bool ReadFrames()\n    {\n        //Png header, 8 bytes.\n        if (!InternalStream.ReadBytes(8).SequenceEqual(new byte[] {137, 80, 78, 71, 13, 10, 26, 10}))\n            throw new Exception(\"Invalid file format, expected PNG signature not found.\");\n\n        //IHDR chunk, 25 bytes.\n        Ihdr = IhdrChunk.Read(InternalStream);\n\n        //aCTl chunk, 16 bytes.\n        Actl = ActlChunk.Read(InternalStream);\n\n        //If there's no animation control chunk, it's a normal Png.\n        if (Actl == null)\n            return false;\n\n        var masterSequence = 0;\n        var frameGroupId = -1;\n\n        //Read frames.\n        while (InternalStream.CanRead)\n        {\n            //Tries to read any chunk, except IEND.\n            var chunk = Chunk.Read(InternalStream, masterSequence++);\n\n            //End reached, prematurely or not.\n            if (chunk == null || chunk.ChunkType == \"IEND\")\n                break;\n\n            //Chunks can be grouped into frames.\n            if (new[] {\"fcTL\", \"fdAT\", \"IDAT\"}.Contains(chunk.ChunkType))\n            {\n                if (chunk.ChunkType == \"fcTL\")\n                    frameGroupId++;\n\n                chunk.FrameGroupId = frameGroupId;\n            }\n\n            Chunks.Add(chunk);\n        }\n\n        return true;\n    }\n\n    public ApngFrame GetFrame(int index)\n    {\n        //Build each frame using:\n        //Starting blocks: IHDR, tIME, zTXt, tEXt, iTXt, pHYs, sPLT, (iCCP | sRGB), sBIT, gAMA, cHRM, PLTE, tRNS, hIST, bKGD.\n        //Image data: IDAT.\n        //End block: IEND.\n\n        var chunks = Chunks.Where(w => w.FrameGroupId == index).ToList();\n        var otherChunks = Chunks.Where(w => w.FrameGroupId == -1 && w.ChunkType != \"IDAT\").ToList();\n\n        if (!chunks.Any())\n            return null;\n\n        var frame = new ApngFrame();\n\n        //First frame • Second frame\n        //Default image is part of the animation:       fcTL + IDAT • fcTL + fdAT\n        //Default image isn't part of the animation:    IDAT • fcTL + fdAT\n\n        if (chunks[0].ChunkType == \"fcTL\")\n        {\n            var fctl = FctlChunk.Read(chunks[0].Length, chunks[0].ChunkData);\n            frame.Delay = fctl.DelayNum == 0 ? 10 : (int)(fctl.DelayNum / (fctl.DelayDen == 0 ? 100d : fctl.DelayDen) * 1000d);\n            frame.Width = fctl.Width;\n            frame.Height = fctl.Height;\n            frame.Left = fctl.XOffset;\n            frame.Top = fctl.YOffset;\n            frame.ColorType = Ihdr.ColorType;\n            frame.BitDepth = Ihdr.BitDepth;\n            frame.DisposeOp = fctl.DisposeOp;\n            frame.BlendOp = fctl.BlendOp;\n\n            using (var stream = new MemoryStream())\n            {\n                //Png signature, 8 bytes.\n                stream.WriteBytes(new byte[] {137, 80, 78, 71, 13, 10, 26, 10});\n\n                //Image header chunk. 25 bytes.\n                Ihdr.Write(stream, fctl.Width, fctl.Height);\n\n                //Any other auxiliary chunks.\n                foreach (var other in otherChunks)\n                    other.Write(stream);\n\n                //Frame has multiple chunks.\n                if (chunks.Count > 2)\n                {\n                    var datas = new List<byte[]>();\n\n                    //Data chunks.\n                    for (var i = 1; i < chunks.Count; i++)\n                    {\n                        switch (chunks[i].ChunkType)\n                        {\n                            case \"fdAT\":\n                            {\n                                var fdat = FdatChunk.Read(chunks[i].Length, chunks[i].ChunkData);\n                                datas.Add(fdat.FrameData);\n                                break;\n                            }\n                            case \"IDAT\":\n                            {\n                                var idat = IdatChunk.Read(chunks[i].Length, chunks[i].ChunkData);\n                                datas.Add(idat.FrameData);\n                                break;\n                            }\n                        }\n                    }\n\n                    //Write combined frame data.\n                    var length = datas.Sum(s => s.Length);\n\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)length)); //4 bytes.\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"IDAT\")); //4 bytes.\n                    stream.WriteBytes(datas.SelectMany(s => s).ToArray()); //XX bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - (length + 4), length + 4)))); //CRC, 4 bytes.\n                }\n                else\n                {\n                    switch (chunks[1].ChunkType)\n                    {\n                        case \"fdAT\":\n                        {\n                            var fdat = FdatChunk.Read(chunks[1].Length, chunks[1].ChunkData);\n                            fdat.Write(stream);\n                            break;\n                        }\n                        case \"IDAT\":\n                        {\n                            var idat = IdatChunk.Read(chunks[1].Length, chunks[1].ChunkData);\n                            idat.Write(stream);\n                            break;\n                        }\n                    }\n                }\n\n                //End chunk.\n                stream.WriteUInt32(BitHelper.ConvertEndian(0u)); //Chunk length, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"IEND\")); //Chunk type, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - 4, 4)))); //CRC, 4 bytes.\n\n                //Gets the whole Png.\n                frame.ImageData = stream.ToArray();\n            }\n        }\n        else\n        {\n            //This is not supposed to happen.\n            //All chunks with an FrameGroupId are grouped with a starting fcTL, ending with a IDAT or fdAT chunk.\n            LogWriter.Log(new Exception(\"Missing fcTL on frame number \" + index), $\"It was not possible to read frame number {index}\");\n            return null;\n        }\n\n        return frame;\n    }\n\n    public static BitmapSource MakeFrame(System.Drawing.Size fullSize, BitmapSource rawFrame, ApngFrame frame, BitmapSource baseFrame)\n    {\n        var visual = new DrawingVisual();\n        using (var context = visual.RenderOpen())\n        {\n            if (baseFrame != null)\n            {\n                var fullRect = new Rect(0, 0, fullSize.Width, fullSize.Height);\n                context.DrawImage(frame.BlendOp == BlendOps.Source ? ClearArea(baseFrame, frame) : baseFrame,  fullRect);\n            }\n\n            var rect = new Rect(frame.Left, frame.Top, frame.Width, frame.Height);\n            context.DrawImage(rawFrame, rect);\n        }\n\n        var bitmap = new RenderTargetBitmap(fullSize.Width, fullSize.Height, rawFrame.DpiX, rawFrame.DpiY, PixelFormats.Pbgra32);\n        bitmap.Render(visual);\n\n        if (bitmap.CanFreeze && !bitmap.IsFrozen)\n            bitmap.Freeze();\n\n        return bitmap;\n    }\n\n    public static bool IsFullFrame(ApngFrame metadata, System.Drawing.Size fullSize)\n    {\n        return metadata.Left == 0 && metadata.Top == 0 && metadata.Width == fullSize.Width && metadata.Height == fullSize.Height;\n    }\n\n    public static BitmapSource ClearArea(BitmapSource frame, ApngFrame metadata)\n    {\n        var visual = new DrawingVisual();\n        using (var context = visual.RenderOpen())\n        {\n            var fullRect = new Rect(0, 0, frame.PixelWidth, frame.PixelHeight);\n            var clearRect = new Rect(metadata.Left, metadata.Top, metadata.Width, metadata.Height);\n            var clip = Geometry.Combine(new RectangleGeometry(fullRect), new RectangleGeometry(clearRect), GeometryCombineMode.Exclude, null);\n\n            context.PushClip(clip);\n            context.DrawImage(frame, fullRect);\n        }\n\n        var bitmap = new RenderTargetBitmap(frame.PixelWidth, frame.PixelHeight, frame.DpiX, frame.DpiY, PixelFormats.Pbgra32);\n        bitmap.Render(visual);\n\n        if (bitmap.CanFreeze && !bitmap.IsFrozen)\n            bitmap.Freeze();\n\n        return bitmap;\n    }\n\n    public void Dispose()\n    {\n        //IEND: The end of the Png datastream. 0 bytes (Length + Type + CRC, 4 bytes each) = 12 bytes.\n        InternalStream.WriteUInt32(BitHelper.ConvertEndian(0u)); //Length, 4 bytes.\n        InternalStream.WriteBytes(Encoding.ASCII.GetBytes(\"IEND\")); //Chunk type, 4 bytes.\n        InternalStream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(InternalStream.PeekBytes(InternalStream.Position - 4, 4)))); //CRC, 4 bytes.\n\n        InternalStream.Flush();\n        //Resets the stream position to save afterwards.\n        InternalStream.Position = 0;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/ActlChunk.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// The animation control chunk.\n/// </summary>\npublic class ActlChunk : Chunk\n{\n    public uint NumFrames { get; private set; }\n\n    public uint NumPlays { get; private set; }\n\n    /// <summary>\n    /// Attempts to read 16 bytes of the stream.\n    /// </summary>\n    internal static ActlChunk Read(Stream stream)\n    {\n        var chunk = new ActlChunk\n        {\n            Length = BitHelper.ConvertEndian(stream.ReadUInt32()), //Chunk length, 4 bytes.\n            ChunkType = Encoding.ASCII.GetString(stream.ReadBytes(4)) //Chunk type, 4 bytes.\n        };\n\n        //If the second chunk is not the animation control (acTL), it means that this is a normal PNG.\n        if (chunk.ChunkType != \"acTL\")\n            return null;\n\n        //var pos = stream.Position;\n        //chunk.ChunkData = stream.ReadBytes(chunk.Length);\n        //stream.Position = pos;\n\n        //Chunk details + CRC, 8 bytes + 4 bytes.\n        chunk.NumFrames = BitHelper.ConvertEndian(stream.ReadUInt32());\n        chunk.NumPlays = BitHelper.ConvertEndian(stream.ReadUInt32());\n        chunk.Crc = BitHelper.ConvertEndian(stream.ReadUInt32());\n\n        return chunk;\n    }\n\n    internal new void Write(Stream stream)\n    {\n        stream.WriteUInt32(BitHelper.ConvertEndian(Length)); //4 bytes.\n        stream.WriteBytes(Encoding.ASCII.GetBytes(ChunkType)); //4 bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(NumFrames)); //4 bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(NumPlays)); //4 bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - (Length + 4), (int)Length + 4)))); //CRC, 4 bytes.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/ApngFrame.cs",
    "content": "namespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// Frame that contains the image data and playback details.\n/// </summary>\npublic class ApngFrame\n{\n    /// <summary>\n    /// The image width.\n    /// </summary>\n    internal uint Width { get; set; }\n\n    /// <summary>\n    /// The image height.\n    /// </summary>\n    internal uint Height { get; set; }\n\n    /// <summary>\n    /// The left offset of the image.\n    /// </summary>\n    internal uint Left { get; set; }\n\n    /// <summary>\n    /// The top offset of the image.\n    /// </summary>\n    internal uint Top { get; set; }\n\n    /// <summary>\n    /// The color type of the image.\n    /// PNG image type        • Colour type • Allowed bit depths • Interpretation\n    /// Greyscale             • 0           • 1, 2, 4, 8, 16     • Each pixel is a greyscale sample\n    /// Truecolour            • 2           • 8, 16              • Each pixel is an R,G,B triple\n    /// Indexed-colour        • 3           • 1, 2, 4, 8         • Each pixel is a palette index; a PLTE chunk shall appear.\n    /// Greyscale with alpha  • 4           • 8, 16              • Each pixel is a greyscale sample followed by an alpha sample.\n    /// Truecolour with alpha • 6           • 8, 16              • Each pixel is an R,G,B triple followed by an alpha sample.\n    /// </summary>\n    internal byte ColorType { get; set; }\n\n    /// <summary>\n    /// The bit depth of the image.\n    /// </summary>\n    internal byte BitDepth { get; set; }\n\n    /// <summary>\n    /// The whole image data, including auxiliary chunks.\n    /// </summary>\n    public byte[] ImageData { get; set; }\n\n    /// <summary>\n    /// The delay of the frame in milliseconds.\n    /// </summary>\n    public int Delay { get; set; }\n\n    ///<summary>\n    ///Type of frame area disposal to be done after rendering this frame.\n    ///</summary>\n    public Apng.DisposeOps DisposeOp { get; set; }\n\n    ///<summary>\n    ///Type of frame area rendering for this frame.\n    ///</summary>\n    public Apng.BlendOps BlendOp { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/Chunk.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// Generic chunk.\n/// </summary>\npublic class Chunk\n{\n    #region Properties\n\n    /// <summary>\n    /// When reading a Apng, this sequence property remembers in which position the chunk was located.\n    /// </summary>\n    public int MasterSequence { get; set; }\n\n    /// <summary>\n    /// If this chunk holds frame details, it may be grouped with other chunk.\n    /// </summary>\n    public int FrameGroupId { get; set; } = -1;\n\n    public uint Length { get; protected internal set; }\n\n    public string ChunkType { get; protected internal set; }\n\n    public byte[] ChunkData { get; protected internal set; }\n\n    public uint Crc { get; protected internal set; }\n\n    #endregion\n\n    /// <summary>\n    /// Attempts to read XX bytes of the stream.\n    /// </summary>\n    internal static Chunk Read(Stream stream, int sequence)\n    {\n        var chunk = new Chunk\n        {\n            MasterSequence = sequence,\n            Length = BitHelper.ConvertEndian(stream.ReadUInt32()), //Chunk length, 4 bytes.\n            ChunkType = Encoding.ASCII.GetString(stream.ReadBytes(4)) //Chunk type, 4 bytes.\n        };\n\n        //Chunk details + CRC, XX bytes + 4 bytes.\n        chunk.ChunkData = stream.ReadBytes(chunk.Length);\n        chunk.Crc = BitHelper.ConvertEndian(stream.ReadUInt32());\n            \n        return chunk;\n    }\n\n    internal void Write(Stream stream)\n    {\n        stream.WriteUInt32(BitHelper.ConvertEndian(Length)); //4 bytes.\n        stream.WriteBytes(Encoding.ASCII.GetBytes(ChunkType)); //4 bytes.\n        stream.WriteBytes(ChunkData); //XX bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - (Length + 4), (int)Length + 4)))); //CRC, 4 bytes.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/FctlChunk.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// The frame control chunk.\n/// </summary>\ninternal class FctlChunk : Chunk\n{\n    ///<summary>\n    ///Sequence number of the animation chunk, starting from 0.\n    ///</summary>\n    internal uint SequenceNumber { get; private set; }\n\n    ///<summary>\n    ///Width of the following frame.\n    ///</summary>\n    internal uint Width { get; private set; }\n\n    ///<summary>\n    ///Height of the following frame.\n    ///</summary>\n    internal uint Height { get; private set; }\n\n    ///<summary>\n    ///X position at which to render the following frame.\n    ///</summary>\n    internal uint XOffset { get; private set; }\n\n    ///<summary>\n    ///Y position at which to render the following frame.\n    ///</summary>\n    internal uint YOffset { get; private set; }\n\n    ///<summary>\n    ///Frame delay fraction numerator.\n    ///</summary>\n    internal ushort DelayNum { get; private set; }\n\n    ///<summary>\n    ///Frame delay fraction denominator.\n    ///</summary>\n    internal ushort DelayDen { get; private set; }\n\n    ///<summary>\n    ///Type of frame area disposal to be done after rendering this frame.\n    ///</summary>\n    internal Apng.DisposeOps DisposeOp { get; private set; }\n\n    ///<summary>\n    ///Type of frame area rendering for this frame.\n    ///</summary>\n    internal Apng.BlendOps BlendOp { get; private set; }\n\n\n    /// <summary>\n    /// Attempts to read 26 bytes of the stream.\n    /// </summary>\n    internal static FctlChunk Read(uint length, byte[] array)\n    {\n        var chunk = new FctlChunk\n        {\n            Length = length, //Chunk length, 4 bytes.\n            ChunkType = \"fcTL\" //Chunk type, 4 bytes.\n        };\n\n        using (var stream = new MemoryStream(array))\n        {\n            //Chunk details, 26 bytes.\n            chunk.SequenceNumber = BitHelper.ConvertEndian(stream.ReadUInt32());\n            chunk.Width = BitHelper.ConvertEndian(stream.ReadUInt32());\n            chunk.Height = BitHelper.ConvertEndian(stream.ReadUInt32());\n            chunk.XOffset = BitHelper.ConvertEndian(stream.ReadUInt32());\n            chunk.YOffset = BitHelper.ConvertEndian(stream.ReadUInt32());\n            chunk.DelayNum = BitHelper.ConvertEndian(stream.ReadUInt16());\n            chunk.DelayDen = BitHelper.ConvertEndian(stream.ReadUInt16());\n            chunk.DisposeOp = (Apng.DisposeOps)stream.ReadByte();\n            chunk.BlendOp = (Apng.BlendOps)stream.ReadByte();\n        }\n\n        return chunk;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/FdatChunk.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// The frame data chunk.\n/// </summary>\ninternal class FdatChunk : Chunk\n{\n    ///<summary>\n    ///Sequence number of the animation chunk, starting from 0.\n    ///</summary>\n    internal uint SequenceNumber { get; private set; }\n\n    /// <summary>\n    /// The image data.\n    /// </summary>\n    internal byte[] FrameData { get; private set; }\n\n    /// <summary>\n    /// Attempts to read XX bytes of the stream.\n    /// </summary>\n    internal static FdatChunk Read(uint length, byte[] array)\n    {\n        var chunk = new FdatChunk\n        {\n            Length = length, //Chunk length, 4 bytes.\n            ChunkType = \"fdAT\" //Chunk type, 4 bytes.\n        };\n\n        using (var stream = new MemoryStream(array))\n        {\n            //Chunk details, 4 bytes + XX bytes.\n            chunk.SequenceNumber = BitHelper.ConvertEndian(stream.ReadUInt32());\n            chunk.FrameData = stream.ReadBytes(length - 4); //Minus 4 because that's the size of the sequence number.\n        }\n\n        return chunk;\n    }\n\n    internal void Write(Stream stream, bool writeAsIdat = true)\n    {\n        stream.WriteUInt32(BitHelper.ConvertEndian(Length)); //4 bytes.\n        stream.WriteBytes(Encoding.ASCII.GetBytes(writeAsIdat ? \"IDAT\" : ChunkType)); //4 bytes.\n\n        if (!writeAsIdat)\n            stream.WriteUInt32(BitHelper.ConvertEndian(SequenceNumber)); //4 bytes.\n\n        stream.WriteBytes(FrameData); //XX bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - (Length + (writeAsIdat ? 4 : 8)), (int)Length + (writeAsIdat ? 4 : 8))))); //CRC, 4 bytes.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/IdatChunk.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// The image data chunk.\n/// </summary>\ninternal class IdatChunk : Chunk\n{\n    /// <summary>\n    /// The image data.\n    /// </summary>\n    internal byte[] FrameData { get; private set; }\n\n    /// <summary>\n    /// Attempts to read XX bytes of the stream.\n    /// </summary>\n    internal static IdatChunk Read(uint length, byte[] array)\n    {\n        var chunk = new IdatChunk\n        {\n            Length = length, //Chunk length, 4 bytes.\n            ChunkType = \"IDAT\" //Chunk type, 4 bytes.\n        };\n\n        using (var stream = new MemoryStream(array))\n        {\n            //Chunk details, XX bytes.\n            chunk.FrameData = stream.ReadBytes(length); // - 4\n        }\n\n        return chunk;\n    }\n\n    internal new void Write(Stream stream)\n    {\n        stream.WriteUInt32(BitHelper.ConvertEndian(Length)); //4 bytes.\n        stream.WriteBytes(Encoding.ASCII.GetBytes(ChunkType)); //4 bytes.\n        stream.WriteBytes(FrameData); //XX bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - (Length + 4), (int)Length + 4)))); //CRC, 4 bytes.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Apng/Chunks/IhdrChunk.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Apng.Chunks;\n\n/// <summary>\n/// The image header chunk.\n/// </summary>\npublic class IhdrChunk : Chunk\n{\n    public uint Width { get; private set; }\n\n    public uint Height { get; private set; }\n\n    internal byte BitDepth { get; private set; }\n\n    internal byte ColorType { get; private set; }\n\n    internal byte CompressionMethod { get; private set; }\n\n    internal byte FilterMethod { get; private set; }\n\n    internal byte InterlaceMethod { get; private set; }\n        \n    /// <summary>\n    /// Attempts to read 25 bytes of the stream.\n    /// </summary>\n    internal static IhdrChunk Read(Stream stream)\n    {\n        var chunk = new IhdrChunk\n        {\n            Length = BitHelper.ConvertEndian(stream.ReadUInt32()), //Chunk length, 4 bytes.\n            ChunkType = Encoding.ASCII.GetString(stream.ReadBytes(4)) //Chunk type, 4 bytes.\n        };\n\n        if (chunk.ChunkType != \"IHDR\")\n            throw new Exception(\"Missing IHDR chunk.\");\n\n        //var pos = stream.Position;\n        //chunk.ChunkData = stream.ReadBytes(chunk.Length);\n        //stream.Position = pos;\n\n        //Chunk details + CRC, 13 bytes + 4 bytes.\n        chunk.Width = BitHelper.ConvertEndian(stream.ReadUInt32());\n        chunk.Height = BitHelper.ConvertEndian(stream.ReadUInt32());\n        chunk.BitDepth = (byte) stream.ReadByte();\n        chunk.ColorType = (byte) stream.ReadByte();\n        chunk.CompressionMethod = (byte) stream.ReadByte();\n        chunk.FilterMethod = (byte) stream.ReadByte();\n        chunk.InterlaceMethod = (byte) stream.ReadByte();\n        chunk.Crc = BitHelper.ConvertEndian(stream.ReadUInt32());\n\n        return chunk;\n    }\n\n    /// <summary>\n    /// Write the IHDR chunk to the stream.\n    /// If a custom size is given, that's what is written.\n    /// </summary>\n    internal void Write(Stream stream, uint? width = null, uint? height = null)\n    {\n        stream.WriteUInt32(BitHelper.ConvertEndian(Length)); //4 bytes.\n        stream.WriteBytes(Encoding.ASCII.GetBytes(ChunkType)); //4 bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(width ?? Width)); //4 bytes.\n        stream.WriteUInt32(BitHelper.ConvertEndian(height ?? Height)); //4 bytes.\n        stream.WriteByte(BitDepth); //1 byte.\n        stream.WriteByte(ColorType); //1 byte.\n        stream.WriteByte(CompressionMethod); //1 byte.\n        stream.WriteByte(FilterMethod); //1 byte.\n        stream.WriteByte(InterlaceMethod); //1 byte.\n        stream.WriteUInt32(BitHelper.ConvertEndian(CrcHelper.Calculate(stream.PeekBytes(stream.Position - (Length + 4), (int)Length + 4)))); //CRC, 4 bytes.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifApplicationExtension.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifApplicationExtension : GifExtension\n{\n    public const int ExtensionLabel = 0xFF;\n\n    public int BlockSize { get; private set; }\n\n    public string ApplicationIdentifier { get; private set; }\n\n    public byte[] AuthenticationCode { get; private set; }\n\n    public byte[] Data { get; private set; }\n\n    private GifApplicationExtension(){ }\n\n    public override GifBlockKind Kind => GifBlockKind.SpecialPurpose;\n\n\n    public static GifApplicationExtension ReadApplication(Stream stream)\n    {\n        var ext = new GifApplicationExtension();\n        ext.Read(stream);\n        return ext;\n    }\n\n    private void Read(Stream stream)\n    {\n        // Note: at this point, the label (0xFF) has already been read\n        var bytes = new byte[12];\n        stream.ReadAll(bytes, 0, bytes.Length);\n        BlockSize = bytes[0]; // should always be 11\n\n        if (BlockSize != 11)\n            throw GifHelpers.InvalidBlockSizeException(\"Application Extension\", 11, BlockSize);\n\n        ApplicationIdentifier = Encoding.ASCII.GetString(bytes, 1, 8);\n        var authCode = new byte[3];\n        Array.Copy(bytes, 9, authCode, 0, 3);\n        AuthenticationCode = authCode;\n        Data = GifHelpers.ReadDataBlocks(stream, false);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifBlock.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic abstract class GifBlock\n{\n    public static GifBlock ReadBlock(Stream stream, IEnumerable<GifExtension> controlExtensions, bool metadataOnly)\n    {\n        var blockId = stream.ReadByte();\n\n        if (blockId < 0)\n            throw GifHelpers.UnexpectedEndOfStreamException();\n\n        switch (blockId)\n        {\n            case GifExtension.ExtensionIntroducer:\n                return GifExtension.ReadExtension(stream, controlExtensions, metadataOnly);\n            case GifFrame.ImageSeparator:\n                return GifFrame.ReadFrame(stream, controlExtensions, metadataOnly);\n            case GifTrailer.TrailerByte:\n                return GifTrailer.ReadTrailer();\n            default:\n                throw GifHelpers.UnknownBlockTypeException(blockId);\n        }\n    }\n\n    public abstract GifBlockKind Kind { get; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifBlockKind.cs",
    "content": "namespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic enum GifBlockKind\n{\n    Control,\n    GraphicRendering,\n    SpecialPurpose,\n    Other\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifColor.cs",
    "content": "namespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic struct GifColor\n{\n    private readonly byte _r;\n    private readonly byte _g;\n    private readonly byte _b;\n\n    public GifColor(byte r, byte g, byte b)\n    {\n        _r = r;\n        _g = g;\n        _b = b;\n    }\n\n    public byte R => _r;\n    public byte G => _g;\n    public byte B => _b;\n\n    public override string ToString()\n    {\n        return $\"#{_r:x2}{_g:x2}{_b:x2}\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifCommentExtension.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifCommentExtension : GifExtension\n{\n    public const int ExtensionLabel = 0xFE;\n\n    public string Text { get; private set; }\n\n    private GifCommentExtension()\n    {}\n\n    public override GifBlockKind Kind => GifBlockKind.SpecialPurpose;\n\n    public static GifCommentExtension ReadComment(Stream stream)\n    {\n        var comment = new GifCommentExtension();\n        comment.Read(stream);\n        return comment;\n    }\n\n    private void Read(Stream stream)\n    {\n        // Note: at this point, the label (0xFE) has already been read\n        var bytes = GifHelpers.ReadDataBlocks(stream, false);\n\n        if (bytes != null)\n            Text = Encoding.ASCII.GetString(bytes);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifDecoderException.cs",
    "content": "namespace ScreenToGif.Util.Codification.Gif.Decoder;\n\n[Serializable]\npublic class GifDecoderException : Exception\n{\n    public GifDecoderException() { }\n\n    public GifDecoderException(string message) : base(message) { }\n\n    public GifDecoderException(string message, Exception inner) : base(message, inner) { }\n\n    public GifDecoderException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)\n        : base(info, context) { }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifExtension.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic abstract class GifExtension : GifBlock\n{\n    public const int ExtensionIntroducer = 0x21;\n\n    public static GifExtension ReadExtension(Stream stream, IEnumerable<GifExtension> controlExtensions, bool metadataOnly)\n    {\n        //Note: at this point, the Extension Introducer (0x21) has already been read\n        var label = stream.ReadByte();\n\n        if (label < 0)\n            throw GifHelpers.UnexpectedEndOfStreamException();\n\n        switch (label)\n        {\n            case GifGraphicControlExtension.ExtensionLabel:\n                return GifGraphicControlExtension.ReadGraphicsControl(stream);\n            case GifCommentExtension.ExtensionLabel:\n                return GifCommentExtension.ReadComment(stream);\n            case GifPlainTextExtension.ExtensionLabel:\n                return GifPlainTextExtension.ReadPlainText(stream, controlExtensions, metadataOnly);\n            case GifApplicationExtension.ExtensionLabel:\n                return GifApplicationExtension.ReadApplication(stream);\n            default:\n                throw GifHelpers.UnknownExtensionTypeException(label);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifFile.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic enum FrameDisposalMethod\n{\n    None = 0,\n    DoNotDispose = 1,\n    RestoreBackground = 2,\n    RestorePrevious = 3\n}\n\npublic class FrameMetadata\n{\n    public int Left { get; set; }\n    public int Top { get; set; }\n    public int Width { get; set; }\n    public int Height { get; set; }\n    public TimeSpan Delay { get; set; }\n    public FrameDisposalMethod DisposalMethod { get; set; }\n}\n\npublic class GifFile\n{\n    public GifHeader Header { get; private set; }\n    public GifColor[] GlobalColorTable { get; set; }\n    public IList<GifFrame> Frames { get; set; }\n    public IList<GifExtension> Extensions { get; set; }\n    public ushort RepeatCount { get; set; }\n\n    private GifFile()\n    { }\n\n    public static GifFile ReadGifFile(Stream stream, bool metadataOnly)\n    {\n        var file = new GifFile();\n        file.Read(stream, metadataOnly);\n        return file;\n    }\n\n    private void Read(Stream stream, bool metadataOnly)\n    {\n        Header = GifHeader.ReadHeader(stream);\n\n        if (Header.LogicalScreenDescriptor.HasGlobalColorTable)\n            GlobalColorTable = GifHelpers.ReadColorTable(stream, Header.LogicalScreenDescriptor.GlobalColorTableSize);\n\n        ReadFrames(stream, metadataOnly);\n\n        var netscapeExtension = Extensions.OfType<GifApplicationExtension>().FirstOrDefault(GifHelpers.IsNetscapeExtension);\n\n        RepeatCount = netscapeExtension != null ? GifHelpers.GetRepeatCount(netscapeExtension) : (ushort) 1;\n    }\n\n    private void ReadFrames(Stream stream, bool metadataOnly)\n    {\n        var frames = new List<GifFrame>();\n        var controlExtensions = new List<GifExtension>();\n        var specialExtensions = new List<GifExtension>();\n\n        while (stream.Position < stream.Length)\n        {\n            var block = GifBlock.ReadBlock(stream, controlExtensions, metadataOnly);\n\n            if (block.Kind == GifBlockKind.GraphicRendering)\n                controlExtensions = new List<GifExtension>();\n\n            if (block is GifFrame frame)\n            {\n                frames.Add(frame);\n            }\n            else if (block is GifExtension extension)\n            {\n                switch (extension.Kind)\n                {\n                    case GifBlockKind.Control:\n                        controlExtensions.Add(extension);\n                        break;\n                    case GifBlockKind.SpecialPurpose:\n                        specialExtensions.Add(extension);\n                        break;\n                }\n            }\n            else if (block is GifTrailer)\n            {\n                break;\n            }\n        }\n\n        Frames = frames.AsReadOnly();\n        Extensions = specialExtensions.AsReadOnly();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifFrame.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifFrame : GifBlock\n{\n    public const int ImageSeparator = 0x2C;\n\n    public GifImageDescriptor Descriptor { get; private set; }\n    public GifColor[] LocalColorTable { get; private set; }\n    public IList<GifExtension> Extensions { get; private set; }\n    public GifImageData ImageData { get; private set; }\n\n    private GifFrame()\n    {}\n\n    public override GifBlockKind Kind => GifBlockKind.GraphicRendering;\n\n    public static GifFrame ReadFrame(Stream stream, IEnumerable<GifExtension> controlExtensions, bool metadataOnly)\n    {\n        var frame = new GifFrame();\n\n        frame.Read(stream, controlExtensions, metadataOnly);\n\n        return frame;\n    }\n\n    private void Read(Stream stream, IEnumerable<GifExtension> controlExtensions, bool metadataOnly)\n    {\n        //Note: at this point, the Image Separator (0x2C) has already been read\n        Descriptor = GifImageDescriptor.ReadImageDescriptor(stream);\n\n        if (Descriptor.HasLocalColorTable)\n            LocalColorTable = GifHelpers.ReadColorTable(stream, Descriptor.LocalColorTableSize);\n\n        ImageData = GifImageData.ReadImageData(stream, metadataOnly);\n        Extensions = controlExtensions.ToList().AsReadOnly();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifGraphicControlExtension.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\n//Label 0xF9\npublic class GifGraphicControlExtension : GifExtension\n{\n    public const int ExtensionLabel = 0xF9;\n\n    public int BlockSize { get; private set; }\n    public int DisposalMethod { get; private set; }\n    public bool UserInput { get; private set; }\n    public bool HasTransparency { get; private set; }\n    public int Delay { get; private set; }\n    public int TransparencyIndex { get; private set; }\n\n    private GifGraphicControlExtension()\n    {}\n\n    public override GifBlockKind Kind => GifBlockKind.Control;\n\n    public static GifGraphicControlExtension ReadGraphicsControl(Stream stream)\n    {\n        var ext = new GifGraphicControlExtension();\n        ext.Read(stream);\n        return ext;\n    }\n\n    private void Read(Stream stream)\n    {\n        // Note: at this point, the label (0xF9) has already been read\n        var bytes = new byte[6];\n        stream.ReadAll(bytes, 0, bytes.Length);\n        BlockSize = bytes[0]; // should always be 4\n\n        if (BlockSize != 4)\n            throw GifHelpers.InvalidBlockSizeException(\"Graphic Control Extension\", 4, BlockSize);\n\n        var packedFields = bytes[1];\n        DisposalMethod = (packedFields & 0x1C) >> 2;\n        UserInput = (packedFields & 0x02) != 0;\n        HasTransparency = (packedFields & 0x01) != 0;\n        Delay = BitConverter.ToUInt16(bytes, 2) * 10; // milliseconds\n        TransparencyIndex = bytes[4];\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifHeader.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifHeader : GifBlock\n{\n    public string Signature { get; private set; }\n    public string Version { get; private set; }\n    public GifLogicalScreenDescriptor LogicalScreenDescriptor { get; private set; }\n\n    private GifHeader()\n    {}\n\n    public override GifBlockKind Kind => GifBlockKind.Other;\n\n    public static GifHeader ReadHeader(Stream stream)\n    {\n        var header = new GifHeader();\n        header.Read(stream);\n        return header;\n    }\n\n    private void Read(Stream stream)\n    {\n        Signature = GifHelpers.ReadString(stream, 3);\n\n        if (Signature != \"GIF\")\n            throw GifHelpers.InvalidSignatureException(Signature);\n\n        Version = GifHelpers.ReadString(stream, 3);\n\n        if (Version != \"87a\" && Version != \"89a\")\n            throw GifHelpers.UnsupportedVersionException(Version);\n\n        LogicalScreenDescriptor = GifLogicalScreenDescriptor.ReadLogicalScreenDescriptor(stream);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifHelpers.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic static class GifHelpers\n{\n    public static string ReadString(Stream stream, int length)\n    {\n        var bytes = new byte[length];\n        stream.ReadAll(bytes, 0, length);\n        return Encoding.ASCII.GetString(bytes);\n    }\n\n    public static byte[] ReadDataBlocks(Stream stream, bool discard)\n    {\n        var ms = discard ? null : new MemoryStream();\n\n        using (ms)\n        {\n            int len;\n\n            while ((len = stream.ReadByte()) > 0)\n            {\n                var bytes = new byte[len];\n                stream.ReadAll(bytes, 0, len);\n\n                ms?.Write(bytes, 0, len);\n            }\n\n            return ms?.ToArray();\n        }\n    }\n\n    public static GifColor[] ReadColorTable(Stream stream, int size)\n    {\n        var length = 3 * size;\n        var bytes = new byte[length];\n        stream.ReadAll(bytes, 0, length);\n        var colorTable = new GifColor[size];\n\n        for (var i = 0; i < size; i++)\n        {\n            var r = bytes[3 * i];\n            var g = bytes[3 * i + 1];\n            var b = bytes[3 * i + 2];\n            colorTable[i] = new GifColor(r, g, b);\n        }\n\n        return colorTable;\n    }\n\n    public static bool IsNetscapeExtension(GifApplicationExtension ext)\n    {\n        return ext.ApplicationIdentifier == \"NETSCAPE\" && Encoding.ASCII.GetString(ext.AuthenticationCode) == \"2.0\";\n    }\n\n    public static ushort GetRepeatCount(GifApplicationExtension ext)\n    {\n        if (ext.Data.Length >= 3)\n            return BitConverter.ToUInt16(ext.Data, 1);\n\n        return 1;\n    }\n\n    public static Exception UnexpectedEndOfStreamException()\n    {\n        return new GifDecoderException(\"Unexpected end of stream before trailer was encountered\");\n    }\n\n    public static Exception UnknownBlockTypeException(int blockId)\n    {\n        return new GifDecoderException(\"Unknown block type: 0x\" + blockId.ToString(\"x2\"));\n    }\n\n    public static Exception UnknownExtensionTypeException(int extensionLabel)\n    {\n        return new GifDecoderException(\"Unknown extension type: 0x\" + extensionLabel.ToString(\"x2\"));\n    }\n\n    public static Exception InvalidBlockSizeException(string blockName, int expectedBlockSize, int actualBlockSize)\n    {\n        return new GifDecoderException($\"Invalid block size for {blockName}. Expected {expectedBlockSize}, but was {actualBlockSize}\");\n    }\n\n    public static Exception InvalidSignatureException(string signature)\n    {\n        return new GifDecoderException(\"Invalid file signature: \" + signature);\n    }\n\n    public static Exception UnsupportedVersionException(string version)\n    {\n        return new GifDecoderException(\"Unsupported version: \" + version);\n    }\n\n    public static void ReadAll(this Stream stream, byte[] buffer, int offset, int count)\n    {\n        var totalRead = 0;\n\n        while (totalRead < count && stream.Position < stream.Length)\n            totalRead += stream.Read(buffer, offset + totalRead, count - totalRead);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifImageData.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifImageData\n{\n    public byte LzwMinimumCodeSize { get; set; }\n    public byte[] CompressedData { get; set; }\n\n    private GifImageData()\n    {}\n\n    internal static GifImageData ReadImageData(Stream stream, bool metadataOnly)\n    {\n        var imgData = new GifImageData();\n        imgData.Read(stream, metadataOnly);\n        return imgData;\n    }\n\n    private void Read(Stream stream, bool metadataOnly)\n    {\n        LzwMinimumCodeSize = (byte)stream.ReadByte();\n        CompressedData = GifHelpers.ReadDataBlocks(stream, metadataOnly);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifImageDescriptor.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifImageDescriptor\n{\n    public int Left { get; private set; }\n    public int Top { get; private set; }\n    public int Width { get; private set; }\n    public int Height { get; private set; }\n    public bool HasLocalColorTable { get; private set; }\n    public bool Interlace { get; private set; }\n    public bool IsLocalColorTableSorted { get; private set; }\n    public int LocalColorTableSize { get; private set; }\n\n    private GifImageDescriptor()\n    {}\n\n    public static GifImageDescriptor ReadImageDescriptor(Stream stream)\n    {\n        var descriptor = new GifImageDescriptor();\n        descriptor.Read(stream);\n        return descriptor;\n    }\n\n    private void Read(Stream stream)\n    {\n        var bytes = new byte[9];\n        stream.ReadAll(bytes, 0, bytes.Length);\n        Left = BitConverter.ToUInt16(bytes, 0);\n        Top = BitConverter.ToUInt16(bytes, 2);\n        Width = BitConverter.ToUInt16(bytes, 4);\n        Height = BitConverter.ToUInt16(bytes, 6);\n        var packedFields = bytes[8];\n        HasLocalColorTable = (packedFields & 0x80) != 0;\n        Interlace = (packedFields & 0x40) != 0;\n        IsLocalColorTableSorted = (packedFields & 0x20) != 0;\n        LocalColorTableSize = 1 << ((packedFields & 0x07) + 1);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifLogicalScreenDescriptor.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifLogicalScreenDescriptor\n{\n    public int Width { get; private set; }\n\n    public int Height { get; private set; }\n\n    public bool HasGlobalColorTable { get; private set; }\n\n    public int ColorResolution { get; private set; }\n\n    public bool IsGlobalColorTableSorted { get; private set; }\n\n    public int GlobalColorTableSize { get; private set; }\n\n    public int BackgroundColorIndex { get; private set; }\n\n    public double PixelAspectRatio { get; private set; }\n\n\n    internal static GifLogicalScreenDescriptor ReadLogicalScreenDescriptor(Stream stream)\n    {\n        var descriptor = new GifLogicalScreenDescriptor();\n        descriptor.Read(stream);\n        return descriptor;\n    }\n\n    private void Read(Stream stream)\n    {\n        var bytes = new byte[7];\n        stream.ReadAll(bytes, 0, bytes.Length);\n\n        Width = BitConverter.ToUInt16(bytes, 0);\n        Height = BitConverter.ToUInt16(bytes, 2);\n\n        var packedFields = bytes[4];\n\n        HasGlobalColorTable = (packedFields & 0x80) != 0;\n        ColorResolution = ((packedFields & 0x70) >> 4) + 1;\n        IsGlobalColorTableSorted = (packedFields & 0x08) != 0;\n        GlobalColorTableSize = 1 << ((packedFields & 0x07) + 1);\n        BackgroundColorIndex = bytes[5];\n        PixelAspectRatio = bytes[5] == 0 ? 0.0 : (15 + bytes[5]) / 64.0;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifPlainTextExtension.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Gif.Decoder;\n\n//Label 0x01\npublic class GifPlainTextExtension : GifExtension\n{\n    internal const int ExtensionLabel = 0x01;\n\n    public int BlockSize { get; private set; }\n    public int Left { get; private set; }\n    public int Top { get; private set; }\n    public int Width { get; private set; }\n    public int Height { get; private set; }\n    public int CellWidth { get; private set; }\n    public int CellHeight { get; private set; }\n    public int ForegroundColorIndex { get; private set; }\n    public int BackgroundColorIndex { get; private set; }\n    public string Text { get; private set; }\n\n    public IList<GifExtension> Extensions { get; private set; }\n\n    private GifPlainTextExtension()\n    {}\n\n    public override GifBlockKind Kind => GifBlockKind.GraphicRendering;\n\n    public static GifPlainTextExtension ReadPlainText(Stream stream, IEnumerable<GifExtension> controlExtensions, bool metadataOnly)\n    {\n        var plainText = new GifPlainTextExtension();\n        plainText.Read(stream, controlExtensions, metadataOnly);\n        return plainText;\n    }\n\n    private void Read(Stream stream, IEnumerable<GifExtension> controlExtensions, bool metadataOnly)\n    {\n        //Note: at this point, the label (0x01) has already been read\n        var bytes = new byte[13];\n        stream.ReadAll(bytes,0, bytes.Length);\n\n        BlockSize = bytes[0];\n\n        if (BlockSize != 12)\n            throw GifHelpers.InvalidBlockSizeException(\"Plain Text Extension\", 12, BlockSize);\n\n        Left = BitConverter.ToUInt16(bytes, 1);\n        Top = BitConverter.ToUInt16(bytes, 3);\n        Width = BitConverter.ToUInt16(bytes, 5);\n        Height = BitConverter.ToUInt16(bytes, 7);\n        CellWidth = bytes[9];\n        CellHeight = bytes[10];\n        ForegroundColorIndex = bytes[11];\n        BackgroundColorIndex = bytes[12];\n\n        var dataBytes = GifHelpers.ReadDataBlocks(stream, metadataOnly);\n        Text = Encoding.ASCII.GetString(dataBytes);\n        Extensions = controlExtensions.ToList().AsReadOnly();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Decoder/GifTrailer.cs",
    "content": "namespace ScreenToGif.Util.Codification.Gif.Decoder;\n\npublic class GifTrailer : GifBlock\n{\n    internal const int TrailerByte = 0x3B;\n\n    private GifTrailer()\n    {}\n\n    public override GifBlockKind Kind => GifBlockKind.Other;\n\n    internal static GifTrailer ReadTrailer()\n    {\n        return new GifTrailer();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/BitEncoder.cs",
    "content": "namespace ScreenToGif.Util.Codification.Gif.Encoder;\n\ninternal class BitEncoder\n{\n    /// <summary>\n    /// The last remaining bit\n    /// </summary>\n    private int _currentBit = 0;\n\n    /// <summary>\n    /// Output byte of data collection.\n    /// </summary>\n    internal List<byte> OutList = new();\n\n    /// <summary>\n    /// Current length of the output.\n    /// </summary>\n    internal int Length => OutList.Count;\n\n    internal int InBit { get; set; }\n\n    private int _currentVal;\n\n    internal BitEncoder(int initBit = 8)\n    {\n        InBit = initBit;\n    }\n\n    /// <summary> \n    /// Adds the code into \n    /// </summary> \n    /// <param name=\"inByte\">The input data</param>\n    internal void Add(int inByte)\n    {\n        //Debug.WriteLine(InBit + \" : \" + inByte);\n\n        //Shifts the input value to the bit position (0 to 8).\n        //Merges the current value with the shifted input value.\n        //They will never colide, 00000100 | 00000101 = 00101100 (4 | 5 = 44)\n        _currentVal |= (inByte << (_currentBit));\n\n        _currentBit += InBit;\n\n        //The output always use 8 bits, even if the codesize ranges from 3-12 bits.\n        //So, it needs 3+3+3bits to output 1 byte (1 bit will be left to the next byte).\n        while (_currentBit >= 8)\n        {\n            var outVal = (byte)(_currentVal & 0XFF);\n            _currentVal = _currentVal >> 8; //\"Eats\" the first eight positions to the right.\n            _currentBit -= 8;\n\n            OutList.Add(outVal);\n        }\n    }\n\n    internal void End()\n    {\n        //Should output the value even if does not fill 8 bits.\n        while (_currentBit > 0)\n        {\n            var outVal = (byte)(_currentVal & 0XFF);\n            _currentVal = _currentVal >> 8;\n            _currentBit -= 8;\n\n            OutList.Add(outVal);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/GifFile.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\nusing System.Collections;\nusing System.IO;\nusing System.Windows;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder;\n\n/// <summary>\n/// New gif encoder. Made by Nicke Manarin.\n/// </summary>\npublic class GifFile : IDisposable\n{\n    #region Properties\n\n    /// <summary>\n    /// Repeat Count for the gif.\n    /// </summary>\n    public int RepeatCount { get; set; } = 0;\n\n    /// <summary>\n    /// When enabled, the entire (star and end) gif will contain a transparent background.\n    /// Not related to the option to \"paint unchanged pixels\".\n    /// </summary>\n    public bool UseFullTransparency { get; set; }\n\n    /// <summary>\n    /// The color marked as transparent. Null if not in use.\n    /// </summary>\n    public Color? TransparentColor { get; set; }\n\n    /// <summary>\n    /// The maximum number of colors of each frame of the gif.\n    /// </summary>\n    public int MaximumNumberColor { get; set; } = 256;\n\n    /// <summary>\n    /// The maximum number of colors of each frame of the gif.\n    /// </summary>\n    public ColorQuantizationTypes QuantizationType { get; set; } = ColorQuantizationTypes.Octree;\n\n    /// <summary>\n    /// True if the gif should use a global color table instead of a local one.\n    /// </summary>\n    public bool UseGlobalColorTable { get; set; } = false;\n\n    /// <summary>\n    /// The sampling factor of the neural network quantizer.\n    /// </summary>\n    public int SamplingFactor { get; set; }\n\n\n    /// <summary>\n    /// The stream which the gif is written on.\n    /// </summary>\n    private Stream InternalStream { get; set; }\n\n    /// <summary>\n    /// True if it's the first frame of the gif.\n    /// </summary>\n    private bool IsFirstFrame { get; set; } = true;\n\n    /// <summary>\n    /// The list of indexed pixels, based on a color table (palette).\n    /// </summary>\n    private byte[] IndexedPixels { get; set; }\n\n    /// <summary>\n    /// The current color table. Global or local.\n    /// </summary>\n    private List<Color> ColorTable { get; set; }\n\n    /// <summary>\n    /// True if the color table contains the color that will be treated as transparent.\n    /// </summary>\n    private bool ColorTableHasTransparency { get; set; }\n\n    /// <summary>\n    /// The size of the current color table.\n    /// </summary>\n    private int ColorTableSize { get; set; }\n\n    /// <summary>\n    /// Cumulative non adjusted time.\n    /// </summary>\n    private int OrganicTime { get; set; }\n        \n    /// <summary>\n    /// Adjusted and rounded off time.\n    /// </summary>\n    private int AdjustedTime { get; set; }\n\n    /// <summary>\n    /// If a quantizer needs to be constructed only once (for example, to use with PaletteQuantizers), this property will be used.\n    /// </summary>\n    private Quantizer GlobalQuantizer { get; set; }\n\n    #endregion\n\n\n    public GifFile(Stream stream)\n    {\n        InternalStream = stream;\n    }\n\n\n    #region Public methods\n\n    public void AddFrame(byte[] pixels, Int32Rect rect, int delay = 66, bool isLastFrame = false)\n    {\n        ReadPixels(pixels);\n\n        //For global color table, only generate a new palette if it's the first frame.\n        if (!UseGlobalColorTable || IsFirstFrame)\n            CalculateColorTableSize();\n\n        if (IsFirstFrame)\n        {\n            WriteLogicalScreenDescriptor(rect);\n\n            //Global color table.\n            if (UseGlobalColorTable)\n                WritePalette();\n\n            if (RepeatCount > -1)\n                WriteApplicationExtension();\n        }\n\n        WriteGraphicControlExtension(delay, isLastFrame);\n        WriteImageDescriptor(rect);\n\n        IsFirstFrame = false;\n\n        //Local color table.\n        if (!UseGlobalColorTable)\n            WritePalette();\n\n        WriteImage();\n    }\n\n    #endregion\n\n    #region Main methods\n\n    private void WriteLogicalScreenDescriptor(Int32Rect rect)\n    {\n        //File Header, 6 bytes\n        WriteString(\"GIF89a\");\n\n        //Initial Logical Size (Width, Height), 4 bytes\n        WriteShort(rect.Width);\n        WriteShort(rect.Height);\n\n        //Packed fields, 1 byte\n        var bitArray = new BitArray(8);\n        bitArray.Set(0, UseGlobalColorTable);\n\n        //Color resolution: 111 = (8 bits - 1)\n        //Color depth - 1\n        //Global colors count = 2^color depth\n        var pixelBits = ToBitValues(ColorTableSize);\n\n        bitArray.Set(1, pixelBits[0]);\n        bitArray.Set(2, pixelBits[1]);\n        bitArray.Set(3, pixelBits[2]);\n\n        //Sort flag (for the global color table): 0\n        bitArray.Set(4, true);\n\n        //Size of the Global Color Table (Zero, if not used.): \n        var sizeInBits = ToBitValues(UseGlobalColorTable ? ColorTableSize : 0);\n\n        bitArray.Set(5, sizeInBits[0]);\n        bitArray.Set(6, sizeInBits[1]);\n        bitArray.Set(7, sizeInBits[2]);\n\n        WriteByte(ConvertToByte(bitArray));\n        WriteByte(UseFullTransparency ? FindTransparentColorIndex() : 0); //Background color index, 1 byte\n        WriteByte(0); //Pixel aspect ratio - Assume 1:1, 1 byte\n    }\n\n    private void WritePalette()\n    {\n        foreach (var color in ColorTable)\n        {\n            WriteByte(color.R);\n            WriteByte(color.G);\n            WriteByte(color.B);\n        }\n\n        //Do I need to fill up the rest of the color table? \n        //Or just seek the stream to the next place?\n\n        //(MaximumColorsCount -  ColorCount) * 3 channels [rgb]\n        var emptySpace = (GetMaximumColorCount() - ColorTable.Count) * 3;\n\n        for (var index = 0; index < emptySpace; index++)\n            WriteByte(0);\n    }\n\n    private void WriteApplicationExtension()\n    {\n        WriteByte(0x21); //Extension Introducer.\n        WriteByte(0xff); //Extension Label.\n\n        WriteByte(0x0b); //Application Block Size. It says \"11 bytes\".\n        WriteString(\"NETSCAPE2.0\"); //Extension type, 11 bytes\n        WriteByte(0x03); // Application block length\n        WriteByte(0x01); //Loop sub-block ID. 1 byte\n        WriteShort(RepeatCount); // Repeat count. 2 bytes.\n        WriteByte(0x00); //Terminator\n    }\n\n    private void WriteGraphicControlExtension(int delay, bool isLastFrame)\n    {\n        WriteByte(0x21); //Extension Introducer.\n        WriteByte(0xf9); //Extension Label.\n        WriteByte(0x04); //Block size.\n\n        //Packed fields\n        var bitArray = new BitArray(8);\n\n        //Reserved for future use. Hahahaha. Yeah...\n        bitArray.Set(0, false);\n        bitArray.Set(1, false);\n        bitArray.Set(2, false);\n\n        #region Disposal Method\n\n        //Use Inplace if you want to Leave the last frame pixel.\n        //GCE_DISPOSAL_NONE = Undefined = 0\n        //GCE_DISPOSAL_INPLACE = Leave = 1\n        //GCE_DISPOSAL_BACKGROUND = Restore Background = 2\n        //GCE_DISPOSAL_RESTORE = Restore Previous = 3\n\n        if (UseFullTransparency)\n        {\n            //If full \"Transparency\" is set:\n            //All starting frames as \"Restore Background\".\n            //The last frame as \"Leave\".\n\n            if (isLastFrame)\n            {\n                //Leave.\n                bitArray.Set(3, false);\n                bitArray.Set(4, false);\n                bitArray.Set(5, true);\n            }\n            else\n            {\n                //Restore background.\n                bitArray.Set(3, false);\n                bitArray.Set(4, true);\n                bitArray.Set(5, false);\n            }\n        }\n        else\n        {\n            //If \"Detect Unchanged Pixels\" is set:\n            //First frame as \"Leave\" with no Transparency. IsFirstFrame\n            //Following frames as \"Undefined\" with Transparency.\n\n            //Was TransparentColor.HasValue && \n            if (IsFirstFrame)\n            {\n                //Leave.\n                bitArray.Set(3, false);\n                bitArray.Set(4, false);\n                bitArray.Set(5, true);\n            }\n            else\n            {\n                //Undefined.\n                bitArray.Set(3, false);\n                bitArray.Set(4, false);\n                bitArray.Set(5, false);\n            }\n        }\n\n        #endregion\n\n        //User Input Flag.\n        bitArray.Set(6, false);\n\n        //Transparent Color Flag, uses tranparency?\n        bitArray.Set(7, (!IsFirstFrame || UseFullTransparency) && ColorTableHasTransparency);\n\n        //Write the packed fields.\n        WriteByte(ConvertToByte(bitArray));\n\n        //Calculates the delay, taking into consideration overall rounding. Bug!\n        //OrganicTime += delay;\n        //delay = (int)Math.Round((OrganicTime > delay ? OrganicTime - AdjustedTime * 10 : delay) / 10.0f, MidpointRounding.AwayFromZero);\n        //AdjustedTime += delay;\n        //WriteShort(delay);\n\n        WriteShort((int)Math.Round(delay / 10.0f, MidpointRounding.AwayFromZero));\n        WriteByte(FindTransparentColorIndex()); //Transparency Index.\n        WriteByte(0); //Terminator.\n    }\n\n    private void WriteImageDescriptor(Int32Rect rect)\n    {\n        WriteByte(0x2c); //Image Separator.\n        WriteShort(rect.X); //Position X. 2 bytes.\n        WriteShort(rect.Y); //Position Y. 2 bytes.\n        WriteShort(rect.Width); //Width. 2 bytes.\n        WriteShort(rect.Height); //Height. 2 bytes.\n\n        if (UseGlobalColorTable)\n        {\n            //No Local Color Table. Every packed field values are zero.\n            WriteByte(0);\n            return;\n        }\n\n        //Packed fields.\n        var bitArray = new BitArray(8);\n\n        //Uses local color table?\n        bitArray.Set(0, true);\n\n        //Interlace Flag.\n        bitArray.Set(1, false);\n\n        //Sort Flag.\n        bitArray.Set(2, true);\n\n        //Reserved for future use. Hahahah again.\n        bitArray.Set(3, false);\n        bitArray.Set(4, false);\n\n        //Size of Local Color Table.\n        var sizeInBits = ToBitValues(ColorTableSize);\n\n        bitArray.Set(5, sizeInBits[0]);\n        bitArray.Set(6, sizeInBits[1]);\n        bitArray.Set(7, sizeInBits[2]);\n\n        //Write the packed fields.\n        WriteByte(ConvertToByte(bitArray));\n    }\n\n    private void WriteImage()\n    {\n        //TODO: Fix the new LZW encoder when ColorTableSize == 7. It's getting corrupted. \n\n        //if (ColorTableSize < 6)\n        //{\n        //    //New LZW encoder, ColorTableSize from 1 to 8.\n        //    var encoder = new LzwEncoder(IndexedPixels, ColorTableSize + 1);\n        //    encoder.Encode(InternalStream);\n        //}\n        //else\n        //{\n        //Old LZW encoder, only works with ColorTableSize 8.\n        var encoder = new LegacyEncoder.LzwEncoder(0, 0, IndexedPixels, 8);\n        encoder.Encode(InternalStream);\n        //}\n    }\n\n    #endregion\n\n    #region Helper methods\n\n    private void ReadPixels(byte[] pixels)\n    {\n        if (QuantizationType == ColorQuantizationTypes.Neural)\n        {\n            #region Neural\n\n            if (GlobalQuantizer == null || !UseGlobalColorTable)\n            {\n                GlobalQuantizer = new NeuralQuantizer(SamplingFactor, MaximumNumberColor)\n                {\n                    MaxColors = MaximumNumberColor,\n                    TransparentColor = !IsFirstFrame || UseGlobalColorTable || UseFullTransparency ? TransparentColor : null\n                };\n\n                GlobalQuantizer.FirstPass(pixels);\n                ColorTable = GlobalQuantizer.GetPalette();\n            }\n\n            //Indexes the pixels to the color table.\n            IndexedPixels = GlobalQuantizer.SecondPass(pixels);\n                \n            #endregion\n        }\n        else if (QuantizationType == ColorQuantizationTypes.Octree)\n        {\n            #region Octree\n\n            var quantizer = new OctreeQuantizer\n            {\n                MaxColors = MaximumNumberColor,\n                TransparentColor = !IsFirstFrame || UseGlobalColorTable || UseFullTransparency ? TransparentColor : null\n            };\n\n            IndexedPixels = quantizer.Quantize(pixels);\n            ColorTable = quantizer.ColorTable;\n\n            #endregion\n        }\n        else if (QuantizationType == ColorQuantizationTypes.MedianCut)\n        {\n            #region Median cut\n\n            if (GlobalQuantizer == null || !UseGlobalColorTable)\n            {\n                GlobalQuantizer = new MedianCutQuantizer\n                {\n                    MaxColors = MaximumNumberColor,\n                    TransparentColor = !IsFirstFrame || UseGlobalColorTable || UseFullTransparency ? TransparentColor : null\n                };\n\n                GlobalQuantizer.FirstPass(pixels);\n                ColorTable = GlobalQuantizer.GetPalette();\n            }\n\n            //Indexes the pixels to the color table.\n            IndexedPixels = GlobalQuantizer.SecondPass(pixels);\n\n            #endregion\n        }\n        else if (QuantizationType == ColorQuantizationTypes.Grayscale)\n        {\n            #region Grayscale\n\n            //This quantizer uses a fixed palette (generated during object instantiation), so most calculations are called one time.\n            if (GlobalQuantizer == null)\n            {\n                //Since the color table does not change among frames, it can be stored globally.\n                UseGlobalColorTable = true;\n\n                var transparent = !IsFirstFrame || UseGlobalColorTable || UseFullTransparency ? TransparentColor : null;\n\n                GlobalQuantizer = new GrayscaleQuantizer(transparent, MaximumNumberColor)\n                {\n                    MaxColors = MaximumNumberColor,\n                    TransparentColor = transparent\n                };\n\n                ColorTable = GlobalQuantizer.GetPalette();\n            }\n                \n            //Each frame still needs to be quantized.\n            IndexedPixels = GlobalQuantizer.SecondPass(pixels);\n\n            #endregion\n        }\n        else if (QuantizationType == ColorQuantizationTypes.MostUsed)\n        {\n            #region Most used colors\n\n            if (GlobalQuantizer == null || !UseGlobalColorTable)\n            {\n                GlobalQuantizer = new MostUsedQuantizer\n                {\n                    MaxColors = MaximumNumberColor,\n                    TransparentColor = !IsFirstFrame || UseGlobalColorTable || UseFullTransparency ? TransparentColor : null\n                };\n\n                GlobalQuantizer.FirstPass(pixels);\n                ColorTable = GlobalQuantizer.GetPalette();\n            }\n\n            //Indexes the pixels to the color table.\n            IndexedPixels = GlobalQuantizer.SecondPass(pixels);\n\n            #endregion\n        }\n        else\n        {\n            #region Palette\n\n            //This quantizer uses a fixed palette (generated during object instantiation), so it will be only called once.\n            if (GlobalQuantizer == null)\n            {\n                //Since the color table does not change among frames, it can be stored globally.\n                UseGlobalColorTable = true;\n\n                var transparent = !IsFirstFrame || UseGlobalColorTable || UseFullTransparency ? TransparentColor : null;\n\n                //TODO: Pass the palette.\n                //Default palettes: Windows, etc.\n                //User submitted > Presets > Generate palette based on first frame.\n\n                GlobalQuantizer = new PaletteQuantizer(new ArrayList()) \n                {\n                    MaxColors = MaximumNumberColor,\n                    TransparentColor = transparent\n                };\n\n                ColorTable = GlobalQuantizer.GetPalette();\n            }\n\n            //Each frame still needs to be quantized.\n            IndexedPixels = GlobalQuantizer.SecondPass(pixels);\n\n            #endregion\n        }\n\n        //I need to signal the other method that I'll need transparency.\n        ColorTableHasTransparency = TransparentColor.HasValue && ColorTable.Contains(TransparentColor.Value);\n    }\n\n    private void WriteByte(int value)\n    {\n        InternalStream.WriteByte(Convert.ToByte(value));\n    }\n\n    /// <summary>\n    /// Writes a int value as 2 bytes, but inverted. \n    /// 100 = 64 00 instead of 00 64.\n    /// </summary>\n    /// <param name=\"value\"></param>\n    private void WriteShort(int value)\n    {\n        //Writes the second part first.\n        //The \"& 0xff\" makes sure that the int will stay on range 0-255, it will cut any number above 255.\n        InternalStream.WriteByte(Convert.ToByte(value & 0xff));\n        InternalStream.WriteByte(Convert.ToByte((value >> 8) & 0xff));\n    }\n\n    private void WriteString(string value)\n    {\n        InternalStream.Write(value.ToArray().Select(c => (byte)c).ToArray(), 0, value.Length);\n    }\n\n    /// <summary>\n    /// Writes the comment for the animation.\n    /// </summary>\n    /// <param name=\"comment\">The comment to write to the gif.</param>\n    private void WriteComment(string comment)\n    {\n        InternalStream.WriteByte(0x21);\n        InternalStream.WriteByte(0xfe);\n\n        //byte[] length = StringToByteArray(comment.Length.ToString(\"X\"));\n\n        //foreach (byte b in length)\n        //    fs.WriteByte(b);\n\n        var bytes = System.Text.Encoding.ASCII.GetBytes(comment);\n\n        InternalStream.WriteByte((byte) bytes.Length);\n        InternalStream.Write(bytes, 0, bytes.Length);\n        InternalStream.WriteByte(0);\n    }\n\n    private byte ConvertToByte(BitArray bits)\n    {\n        if (bits.Count != 8)\n            throw new ArgumentException(\"bits\");\n\n        var bytes = new byte[1];\n        var reversed = new BitArray(bits.Cast<bool>().Reverse().ToArray());\n        reversed.CopyTo(bytes, 0);\n        return bytes[0];\n    }\n\n    private void CalculateColorTableSize()\n    {\n        //Logical Screen Description, Number of Colors, Byte length.\n        //0 = 2 = 6\n        //1 = 4 = 12\n        //2 = 8 = 24\n        //3 = 16 = 48\n        //4 = 32 = 96\n        //5 = 64 = 192\n        //6 = 128 = 384\n        //7 = 256 = 768\n        //The inverse calculation is: 2^(N + 1) \n        //and x3 for the byte length.\n\n        //If the colorsCount == 1, \n        //return zero instead of calculating it, because of the Log(0) call.\n        //The \"-1\" assures that the count stays in range.\n        ColorTableSize = ColorTable.Count > 1 ? (int)Math.Log(ColorTable.Count - 1, 2) : 0;\n    }\n\n    /// <summary>\n    /// Calculates the maximum number of colors for the \n    /// specified Logical Screen Description value.\n    /// </summary>\n    /// <returns>The maximum number of colors in the Color Table.</returns>\n    private int GetMaximumColorCount()\n    {\n        //2^(N+1)\n        return (int)Math.Pow(2, ColorTableSize + 1);\n    }\n\n    private int FindTransparentColorIndex()\n    {\n        if (IsFirstFrame && !UseFullTransparency || !ColorTableHasTransparency) \n            return 0;\n\n        //ReSharper disable once PossibleInvalidOperationException\n        var index = ColorTable.IndexOf(TransparentColor.Value);\n\n        return index > -1 ? index : 0;\n    }\n\n    /// <summary>\n    /// Transforms a number to a bool array of 3 positions.\n    /// </summary>\n    /// <param name=\"number\">The number to convert.</param>\n    /// <returns>A 3-sized byte array.</returns>\n    private bool[] ToBitValues(int number)\n    {\n        return new BitArray(new[] { number }).Cast<bool>().Take(3).Reverse().ToArray();\n    }\n\n    #endregion\n\n    public void Dispose()\n    {\n        //Add a comment section.\n        WriteComment(\"Made with ScreenToGif\");\n\n        //Complete the file.\n        WriteByte(0x3b);\n        //Push data.\n        InternalStream.Flush();\n        //Resets the stream position to save afterwards.\n        InternalStream.Position = 0;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/LZWEncoder.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder;\n\ninternal class LzwEncoder\n{\n    /// <summary>\n    /// Under GIF encoding up to 12bit, the maximum value is 4096\n    /// </summary>\n    protected static readonly int MaxStackSize = 4096;\n    protected static readonly byte Nullcode = 0;\n\n    public int ColorDepth { get; set; }\n\n    public byte[] IndexedPixels { get; set; }\n\n    private int InitDataSize { get; set; }\n\n    public LzwEncoder(byte[] indexedPixel, int colorDepth)\n    {\n        IndexedPixels = indexedPixel;\n        ColorDepth = Math.Max(2, colorDepth);\n        InitDataSize = ColorDepth;\n    }\n\n    public void Encode(Stream internalStream)\n    {\n        #region Validation\n\n        if (internalStream == null)\n            throw new ArgumentNullException(nameof(internalStream), \"You need to provide a stream.\");\n\n        #endregion\n\n        //If it's the first step.\n        var isFirst = true;\n\n        var clearFlag = (1 << ColorDepth);\n        var endOfFileFlag = clearFlag + 1;\n\n        var codeTable = new Dictionary<string, int>();\n\n        //Number of indexes of the currently processed bytes.\n        var releaseCount = 0;\n\n        var codeSize = (byte)(ColorDepth + 1);\n        var availableCode = endOfFileFlag + 1;\n        var maskCode = (1 << codeSize) - 1;\n\n        var bitEncoder = new BitEncoder(codeSize);\n\n        //Initial code size.\n        internalStream.WriteByte((byte)ColorDepth);\n\n        //First thing being added.\n        bitEncoder.Add(clearFlag);\n\n        int suffix = 0;\n\n        while (releaseCount < IndexedPixels.Length)\n        {\n            #region If it's the first byte\n\n            if (isFirst)\n            {\n                //The first time, the suffix is set to the first index bytes.\n                suffix = IndexedPixels[releaseCount++];\n\n                //If it's the last one.\n                if (releaseCount == IndexedPixels.Length)\n                {\n                    bitEncoder.Add(suffix);\n                    bitEncoder.Add(endOfFileFlag);\n                    bitEncoder.End();\n\n                    internalStream.WriteByte((byte)(bitEncoder.Length));\n                    internalStream.Write(bitEncoder.OutList.ToArray(), 0, bitEncoder.Length);\n\n                    bitEncoder.OutList.Clear();\n\n                    break;\n                }\n\n                isFirst = false;\n                continue;\n            }\n\n            #endregion\n\n            #region Before and after the change, and the constituent entities\n                \n            var prefix = suffix;\n            suffix = IndexedPixels[releaseCount++];\n            string entry = $\"{prefix},{suffix}\";\n\n            #endregion               \n\n            #region If you do not know the current entity, entities encoded, and output the prefix\n\n            if (!codeTable.ContainsKey(entry))\n            {\n                //If the current entity is not encoded, then output the prefix          \n                bitEncoder.Add(prefix);\n\n                //And the current entity is encoded. Inserts and after that adds the availableCode count.             \n                codeTable.Add(entry, availableCode++);\n\n                if (availableCode > (MaxStackSize - 3))\n                {\n                    //Insert the clear tag, reinvent\n                    codeTable.Clear();\n                    ColorDepth = InitDataSize;\n                    codeSize = (byte)(ColorDepth + 1);\n                    availableCode = endOfFileFlag + 1;\n                    maskCode = (1 << codeSize) - 1;\n\n                    bitEncoder.Add(clearFlag);\n                    bitEncoder.InBit = codeSize;\n                }\n                else if (availableCode > (1 << codeSize))\n                {\n                    //If the current code is greater than the current code available to represent values\n                    ColorDepth++;\n                    codeSize = (byte)(ColorDepth + 1);\n                    bitEncoder.InBit = codeSize;\n                    maskCode = (1 << codeSize) - 1;\n                }\n\n                //Divides into more blocks.\n                if (bitEncoder.Length >= 255)\n                {\n                    //Size of the block.\n                    internalStream.WriteByte(255);\n                    //Writes the 255 sized block.\n                    internalStream.Write(bitEncoder.OutList.ToArray(), 0, 255);\n\n                    if (bitEncoder.Length > 255)\n                    {\n                        var leftBuffer = new byte[bitEncoder.Length - 255];\n\n                        //Removes the last written 255 bytes.\n                        bitEncoder.OutList.CopyTo(255, leftBuffer, 0, leftBuffer.Length);\n                        bitEncoder.OutList.Clear();\n                        bitEncoder.OutList.AddRange(leftBuffer);\n                    }\n                    else\n                    {\n                        bitEncoder.OutList.Clear();\n                    }\n                }\n            }\n\n            #endregion\n\n            #region If you know the current entity, set the suffixes to the current index value of an entity\n\n            else\n            {\n                //Set the suffix to the current entity encoding\n                suffix = codeTable[entry];\n            }\n\n            #endregion\n\n            //if (releaseCount == 40240)\n            //    suffix = suffix;\n\n            #region To the end of an image, writes over identity, and outputs the current codes left in the data stream\n\n            if (releaseCount == IndexedPixels.Length)\n            {\n                bitEncoder.Add(suffix); //Adds the last sufix.\n                bitEncoder.Add(endOfFileFlag); //End of the LZW\n                bitEncoder.End();\n\n                //If the block size if greater than 255, divides into two.\n                if (bitEncoder.Length > 255)\n                {\n                    var leftBuffer = new byte[bitEncoder.Length - 255];\n\n                    bitEncoder.OutList.CopyTo(255, leftBuffer, 0, leftBuffer.Length);\n                    bitEncoder.OutList.Clear();\n                    bitEncoder.OutList.AddRange(leftBuffer);\n\n                    internalStream.WriteByte((byte)leftBuffer.Length);\n                    internalStream.Write(leftBuffer, 0, leftBuffer.Length);\n                }\n                else\n                {\n                    internalStream.WriteByte((byte)(bitEncoder.Length));\n                    internalStream.Write(bitEncoder.OutList.ToArray(), 0, bitEncoder.Length);\n\n                    bitEncoder.OutList.Clear();\n                }\n\n                break;\n            }\n\n            #endregion\n        }\n\n        //For 3 weeks I forgot to add this little piece of sh*t, my gifs were always corrupted...\n        //Signals the end of the list of blocks.\n        internalStream.WriteByte(0);\n    }\n}\n\n//public class LZWEncoder\n//{\n//    #region Constants\n\n//    /// <summary>\n//    /// End of File.\n//    /// </summary>\n//    private const int Eof = -1;\n\n//    /// <summary>\n//    /// 80% occupancy.\n//    /// </summary>\n//    private const int HSize = 5003;\n\n//    private readonly int[] _masks = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,\n//        0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };\n\n//    #endregion\n\n//    #region Properties\n\n//    public Stream Stream { get; set; }\n\n//    public byte[] IndexedPixels { get; set; }\n\n//    public int ColorDepth { get; set; }\n\n//    private int InitialCodeSize { get; set; }\n\n//    private int ClearCode { get; set; }\n\n//    private int EndOfFileCode { get; set; }\n\n//    private int CurrentIndex { get; set; }\n\n//    private bool ClearFlag { get; set; } = false;\n\n//    private int ByteCountInPacket { get; set; } = 0;\n\n//    #endregion\n\n//    public LZWEncoder()\n//    {\n//        //Minimum of 2\n//        InitialCodeSize = Math.Max(2, ColorDepth);\n//    }\n\n//    public LZWEncoder(Stream stream, byte[] indexedPixels, int colorDepth) : base()\n//    {\n//        Stream = stream;\n//        IndexedPixels = indexedPixels;\n//        Width = width;\n//        Height = height;\n//        ColorDepth = colorDepth;\n//    }\n\n//    #region Public Methods\n\n//    /// <summary>\n//    /// Encodes the indexed colors.\n//    /// </summary>\n//    /// <exception cref=\"EndOfStreamException\">Stream is null</exception>\n//    /// <exception cref=\"IOException\">An I/O error occurs. </exception>\n//    public void Encode()\n//    {\n//        if (Stream == null)\n//            throw new EndOfStreamException(\"Stream is null\");\n\n//        Stream.WriteByte(Convert.ToByte(InitialCodeSize)); //Initial code size.\n\n//        //Magic...\n//        Compress();\n\n//        Stream.WriteByte(0x00); //Terminator\n//    }\n\n//    #endregion\n\n//    #region Private Methods\n\n//    private void Compress()\n//    {\n//        //Number of bits per encoded code.\n//        var codeSize = InitialCodeSize + 1;\n\n//        var maxCode = MaxCode(codeSize);\n\n//        //Shifts 0001 to the left\n//        //Example: 0001 << 0111 (7): 1000 0000 (128)\n//        //This basically gets:\n//        //2 = 4, 3 = 8, 4 = 16, 5 = 32\n//        //6 = 64, 7 = 128, 8 = 256\n//        //Same as 2^InitialCodeSize\n//        ClearCode = 1 << (InitialCodeSize);\n//        EndOfFileCode = ClearCode + 1;\n//        var nextAvailableCode = ClearCode + 2;\n\n//        var current = NextPixel();\n\n//        var hashingShift = 0;\n\n//        //256*256=65536\n//        for (int fCode = 0; fCode < 65536; fCode *= 2)\n//        {\n//            hashingShift++;\n//        }\n\n\n\n//        //Writes the last code.\n//        Output(current);\n\n//        //Writes the calculated End of the File code.\n//        Output(EndOfFileCode);\n//    }\n\n//    /// <summary>\n//    /// Calculates and returns the maximum possible code given the supplied\n//    /// code size.\n//    /// This is calculated as 2 to the power of the code size, minus one.\n//    /// </summary>\n//    /// <param name=\"codeSize\">\n//    /// Code size in bits.\n//    /// </param>\n//    /// <returns></returns>\n//    private static int MaxCode(int codeSize)\n//    {\n//        //Same as (2^codeSize) - 1\n//        //Shifts 0001 to the left (and subtracts)\n//        //Example: 0001 << 0111 (7): 1000 0000 (128)\n//        //This basically gets:\n//        //3 = 7, 4 = 17, 5 = 31, 6 = 63\n//        //7 = 127, 8 = 255, 9 = 511\n//        return (1 << codeSize) - 1;\n//        //CodeSize is InitialCodeSize + 1, that's why\n//        //the range from 3 to 9\n//    }\n\n//    private int NextPixel()\n//    {\n//        if (CurrentIndex <= IndexedPixels.GetUpperBound(0))\n//        {\n//            return IndexedPixels[CurrentIndex++];\n//        }\n\n//        return Eof;\n//    }\n\n//    private void Output(int code)\n//    {\n\n//    }\n\n//    #endregion\n//}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/GrayscaleQuantizer.cs",
    "content": "using System.Collections;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\npublic class GrayscaleQuantizer : PaletteQuantizer\n{\n    /// <summary>\n    /// Grayscale palette quantizer.\n    /// </summary>\n    /// <remarks>\n    /// Palette quantization only requires a single quantization step, because there's no need to build the palette.\n    /// </remarks>\n    public GrayscaleQuantizer(Color? transparent = null, int maxColors = 256) : base(new ArrayList())\n    {\n        Colors = new List<Color>(maxColors);\n\n        MaxColorsWithTransparency = transparent.HasValue ? maxColors - 1 : maxColors;\n\n        //Initialize a new color table with entries that are determined by some optimal palette-finding algorithm.\n        for (var i = 0; i < MaxColorsWithTransparency; i++)\n        {\n            //Even distribution of grayscale colors. \n            var intensity = Convert.ToUInt32(i * 0xFF / (MaxColorsWithTransparency - 1));\n\n            Colors.Add(Color.FromArgb(0xFF, (byte)intensity, (byte)intensity, (byte)intensity));\n        }\n\n        if (transparent.HasValue)\n            Colors.Add(transparent.Value);\n    }\n\n    /// <summary>\n    /// Override this to process the pixel in the second pass of the algorithm\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize</param>\n    /// <returns>The quantized value</returns>\n    protected override byte QuantizePixel(Color pixel)\n    {\n        var luminance = pixel.R * 0.299 + pixel.G * 0.587 + pixel.B * 0.114;\n\n        //Gray scale is an intensity map from black to white.\n        //Compute the index to the grayscale entry that approximates the luminance, and then round the index.\n        //Also, constrain the index choices by the number of colors to do, and then set that pixel's index to the byte value.\n\n        //return (byte)((int)((luminance + 0.5) * Colors.Length) >> 8); //Without transparency.\n        //return (byte)(luminance + 0.5); //Without configurable color count.\n\n        return (byte)((int)((luminance + 0.5) * MaxColorsWithTransparency) >> 8); //Returns the color index.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/MedianCutQuantizer.cs",
    "content": "using Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\n/// <summary>\n/// Based on:\n/// https://github.com/ehotsk8/Picturea_ImageProcessing/blob/master/Picturea/PLL/Filters/MedianCutQuantizer.cs\n/// </summary>\npublic class MedianCutQuantizer : Quantizer\n{\n    ///<summary>\n    ///List of all colors in the palette\n    ///</summary>\n    protected List<Color> Colors = new();\n\n    private List<MedianCutCube> _cubes = new();\n\n    public MedianCutQuantizer() : base(false)\n    { }\n\n    /// <summary>\n    /// Process the pixel in the first pass of the algorithm.\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize</param>\n    protected override void InitialQuantizePixel(Color pixel)\n    {\n        if (pixel.A == 0)\n            return;\n\n        Colors.Add(pixel);\n    }\n\n    /// <summary>\n    /// Retrieve the palette for the quantized image\n    /// </summary>\n    /// <returns>The new color palette</returns>\n    internal override List<Color> BuildPalette()\n    {\n        MaxColorsWithTransparency = TransparentColor.HasValue ? MaxColors - 1 : MaxColors;\n\n        //Quantization.\n        _cubes = new List<MedianCutCube> { new(Colors) };\n\n        //Split the cube until we get required amount of colors.\n        SplitCubes(_cubes, MaxColorsWithTransparency);\n\n        //Get the final palette.\n        var palette = new List<Color>(MaxColors);\n\n        for (var i = 0; i < MaxColorsWithTransparency; i++)\n        {\n            palette.Add(_cubes[i].Color);\n            _cubes[i].SetPaletteIndex(i);\n        }\n\n        //Add the transparent color to the last position.\n        if (TransparentColor.HasValue)\n            palette.Add(Color.FromArgb(0, TransparentColor.Value.R, TransparentColor.Value.G, TransparentColor.Value.B));\n\n        return palette.ToList();\n    }\n\n    /// <summary>\n    /// Override this to process the pixel in the second pass of the algorithm\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize</param>\n    /// <returns>The quantized value</returns>\n    protected override byte QuantizePixel(Color pixel)\n    {\n        foreach (var cube in _cubes.Where(cube => cube.IsColorIn(pixel)))\n            return (byte) cube.PaletteIndex;\n\n        return 0;\n    }\n\n    /// <summary>\n    /// Splits the list of cubes into smaller cubes until the list one gets the specified size.\n    /// </summary>\n    private void SplitCubes(List<MedianCutCube> cubes, int count)\n    {\n        var cubeIndexToSplit = cubes.Count - 1;\n\n        while (cubes.Count < count)\n        {\n            var cubeToSplit = cubes[cubeIndexToSplit];\n            MedianCutCube cube1, cube2;\n\n            //Find the longest color size to use for splitting.\n            if (cubeToSplit.RedSize >= cubeToSplit.GreenSize && cubeToSplit.RedSize >= cubeToSplit.BlueSize)\n                cubeToSplit.SplitAtMedian(0, out cube1, out cube2);\n            else if (cubeToSplit.GreenSize >= cubeToSplit.BlueSize)\n                cubeToSplit.SplitAtMedian(1, out cube1, out cube2);\n            else\n                cubeToSplit.SplitAtMedian(2, out cube1, out cube2);\n\n            //Remove the old \"big\" cube.\n            cubes.RemoveAt(cubeIndexToSplit);\n\n            //Add two smaller cubes instead\n            cubes.Insert(cubeIndexToSplit, cube1);\n            cubes.Insert(cubeIndexToSplit, cube2);\n\n            if (--cubeIndexToSplit < 0)\n                cubeIndexToSplit = cubes.Count - 1;\n        }\n    }\n\n    private class MedianCutCube\n    {\n        private byte _redLowBound;\n        private byte _redHighBound;\n\n        private byte _greenLowBound;\n        private byte _greenHighBound;\n\n        private byte _blueLowBound;\n        private byte _blueHighBound;\n\n        private Color? _cubeColor = null;\n\n        private readonly List<Color> _colorList;\n\n        /// <summary>\n        /// Length of the red side of the cube.\n        /// </summary>\n        public int RedSize => _redHighBound - _redLowBound;\n\n        /// <summary>\n        /// Length of the green size of the cube.\n        /// </summary>\n        public int GreenSize => _greenHighBound - _greenLowBound;\n\n        /// <summary>\n        /// Length of the blue size of the cube.\n        /// </summary>\n        public int BlueSize => _blueHighBound - _blueLowBound;\n\n        public int PaletteIndex { get; private set; }\n\n        /// <summary>\n        /// The mean color of the cube.\n        /// </summary>\n        public Color Color\n        {\n            get\n            {\n                if (_cubeColor != null)\n                    return _cubeColor.Value;\n\n                int red = 0, green = 0, blue = 0;\n\n                foreach (var color in _colorList)\n                {\n                    red += color.R;\n                    green += color.G;\n                    blue += color.B;\n                }\n\n                var colorsCount = _colorList.Count;\n\n                if (colorsCount != 0)\n                {\n                    red /= colorsCount;\n                    green /= colorsCount;\n                    blue /= colorsCount;\n                }\n\n                _cubeColor = Color.FromRgb((byte)red, (byte)green, (byte)blue);\n\n                return _cubeColor.Value;\n            }\n        }\n\n\n        public MedianCutCube(List<Color> colors)\n        {\n            _colorList = colors;\n\n            Shrink();\n        }\n            \n\n        private void Shrink()\n        {\n            //Get the minimum/maximum values for each RGB component of specified colors.\n            _redLowBound = _greenLowBound = _blueLowBound = 255;\n            _redHighBound = _greenHighBound = _blueHighBound = 0;\n\n            foreach (var colort in _colorList)\n            {\n                if (colort.R < _redLowBound) \n                    _redLowBound = colort.R;\n                if (colort.R > _redHighBound) \n                    _redHighBound = colort.R;\n\n                if (colort.G < _greenLowBound) \n                    _greenLowBound = colort.G;\n                if (colort.G > _greenHighBound) \n                    _greenHighBound = colort.G;\n\n                if (colort.B < _blueLowBound) \n                    _blueLowBound = colort.B;\n                if (colort.B > _blueHighBound)\n                    _blueHighBound = colort.B;\n            }\n        }\n\n        /// <summary>\n        /// Splits the cube into 2 smaller cubes using the specified color side for splitting.\n        /// </summary>\n        /// <param name=\"componentIndex\"></param>\n        /// <param name=\"medianCube1\"></param>\n        /// <param name=\"medianCube2\"></param>\n        public void SplitAtMedian(byte componentIndex, out MedianCutCube medianCube1, out MedianCutCube medianCube2)\n        {\n            switch (componentIndex)\n            {\n                case 0:\n                    _colorList.Sort((p, n) => p.R.CompareTo(n.R));\n                    break;\n\n                case 1:\n                    _colorList.Sort((p, n) => p.R.CompareTo(n.R));\n                    break;\n\n                case 2:\n                    _colorList.Sort((p, n) => p.R.CompareTo(n.R));\n                    break;\n            }\n\n            var medianIndex = _colorList.Count >> 1;\n\n            medianCube1 = new MedianCutCube(_colorList.GetRange(0, medianIndex));\n            medianCube2 = new MedianCutCube(_colorList.GetRange(medianIndex, _colorList.Count - medianIndex));\n        }\n\n        public void SetPaletteIndex(int newPaletteIndex)\n        {\n            PaletteIndex = newPaletteIndex;\n        }\n\n        public bool IsColorIn(Color color)\n        {\n            return (color.R >= _redLowBound && color.R <= _redHighBound) &&\n                   (color.G >= _greenLowBound && color.G <= _greenHighBound) &&\n                   (color.B >= _blueLowBound && color.B <= _blueHighBound);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/MostUsedQuantizer.cs",
    "content": "using Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\npublic class MostUsedQuantizer : PaletteQuantizer\n{\n    internal override void FirstPass(byte[] pixels)\n    {\n        //Pixels are in BGRA.\n        Colors = new List<Color>();\n\n        for (var index = 0; index < pixels.Length; index += 4)\n        {\n            //Transparent colors are ignored.\n            if (pixels[index + 3] == 0)\n                continue;\n\n            Colors.Add(new Color\n            {\n                B = pixels[index],\n                G = pixels[index + 1],\n                R = pixels[index + 2]\n            });\n        }\n    }\n\n    internal override List<Color> BuildPalette()\n    {\n        MaxColorsWithTransparency = TransparentColor.HasValue ? MaxColors - 1 : MaxColors;\n\n        var colorTable = Colors.AsParallel().GroupBy(x => x) //Grouping based on its value.\n            .OrderByDescending(g => g.Count()) //Order by most frequent values.\n            .Select(g => g.FirstOrDefault()) //Take the first among the group.\n            .Take(MaxColorsWithTransparency).ToList(); //Take all the colors needed.\n\n        if (TransparentColor.HasValue)\n            colorTable.Add(TransparentColor.Value);\n\n        return colorTable;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/NeuralQuantizer.cs",
    "content": "using Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\n#region Copyright (C) Anthony Dekker, Kevin Weiner, gOODiDEA.NET, Simon Bridewell, Nicke Manarin\n// \n// This program is free software; you can redistribute it and/or\n// modify it under the terms of the GNU General Public License\n// as published by the Free Software Foundation; either version 3\n// of the License, or (at your option) any later version.\n// \n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n// \n// You should have received a copy of the GNU General Public License\n// along with this program; if not, write to the Free Software\n// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n\n// You can read the full text of the GNU General Public License at:\n// http://www.gnu.org/licenses/gpl.html\n\n// See also the Wikipedia entry on the GNU GPL at:\n// http://en.wikipedia.org/wiki/GNU_General_Public_License\n#endregion\n\npublic class NeuralQuantizer : Quantizer\n{\n    #region Variables\n\n    #region Network definitions\n\n    /// <summary>\n    /// Number of neurons in the neural network. Also the maximum number of colors in the quantized frame.\n    /// Each neuron represents one of the colors in the palette of the quantized image.\n    /// </summary>\n    private readonly int _networkSize;\n\n    /// <summary>\n    /// Maximum possible neuron index within the neural network.\n    /// One less than the number of neurons in the network.\n    /// </summary>\n    private int _maximumNeuronIndex;\n\n    /// <summary>\n    /// Controls the relationship between values supplied in the learning data and the values of the neurons in the network during learning.\n    /// The larger this value, the larger the values held in the neurons will be in comparison to the values supplied during the learning loop.\n    /// This allows a more precise positioning of the neurons whilst still using integer arithmetic.\n    /// </summary>\n    private const int NetworkBiasShift = 4;\n\n    /// <summary>\n    /// Number of learning cycles. The greater this value, the more often the alpha values used to move neurons will be decremented.\n    /// </summary>\n    private const int NumberOfLearningCycles = 100;\n\n    #endregion\n\n    #region Primes\n\n    /// <summary>\n    /// First prime number near 500.\n    /// Assumes no image has a length so large that it is divisible all four primes.\n    /// </summary>\n    private const int Prime1 = 499;\n\n    /// <summary>\n    /// Second prime number near 500.\n    /// Assumes no image has a length so large that it is divisible all four primes.\n    /// </summary>\n    private const int Prime2 = 491;\n\n    /// <summary>\n    /// Third prime number near 500.\n    /// Assumes no image has a length so large that it is divisible all four primes.\n    /// </summary>\n    private const int Prime3 = 487;\n\n    /// <summary>\n    /// Fourth prime number near 500.\n    /// Assumes no image has a length so large that it is divisible all four primes.\n    /// </summary>\n    private const int Prime4 = 503;\n\n    #endregion\n\n    #region Bias and frequency\n\n    /// <summary>\n    /// Array of values which decrease as the frequency of the corresponding neuron increases.\n    /// The index into this array is the same as the index into the array of neurons.\n    /// </summary>\n    private int[] _biases;\n\n    /// <summary>\n    /// Array of values which indicate how often each neuron in the network has been chosen during the learning process.\n    /// The index to this array is the same as the index in the array of neurons.\n    /// </summary>\n    private int[] _frequencies;\n\n    /// <summary>\n    /// Alpha values controlling how far towards a target coordinate any neighbouring neurons are moved.\n    /// </summary>\n    private int[] _neighbourhoodAlphas;\n\n    #endregion\n\n    #region Definitions for decreasing alpha factor\n\n    /// <summary>\n    /// The initial value of alpha will be set to 1, left shifted by this many bits.\n    /// </summary>\n    private const int AlphaBiasShift = 10; /* alpha starts at 1.0 */\n\n    /// <summary>\n    /// The starting value of alpha.\n    /// Alpha is a factor which controls how far neurons are moved during the learning loop, and it decreases as learning proceeds.\n    /// </summary>\n    private const int InitialAlpha = 1 << AlphaBiasShift;\n\n    #endregion\n\n    #region Frequency and bias definitions\n\n    /// <summary>\n    /// Bias for fractions. The larger this value is, the larger IntBias will be.\n    /// Larger values will also make the bias of a neuron a more significant factor than the distance from the supplied coordinate when identifying the best neuron for a given coordinate.\n    /// </summary>\n    private const int IntBiasShift = 16;\n\n    /// <summary>\n    /// The larger this value is, the higher the initial frequency will be for each neuron, and the more the bias and frequency of the closest neuron will be adjusted by during the learning loop.\n    /// </summary>\n    private const int IntBias = 1 << IntBiasShift;\n\n    /// <summary>\n    /// The larger this value is, the larger Gamma will be.\n    /// Larger values also result in the bias of all neurons being increased by a greater amount in each iteration through the learning process.\n    /// </summary>\n    private const int GammaShift = 10; /* Gamma = 1024 */\n\n    /// <summary>\n    /// The larger this value is, the smaller ClosestNeuronFrequencyIncrement and ClosestNeuronBiasDecrement will be.\n    /// This means that larger values will also result in the frequency of all neurons being decreased by less and the bias being increased by less at each step of the learning loop.\n    /// </summary>\n    private const int BetaShift = 10;\n\n    /// <summary>\n    /// The larger this value is, the more the frequency of the closest neuron will be increased by during the learning loop.\n    /// </summary>\n    private const int ClosestNeuronFrequencyIncrement = IntBias >> BetaShift; /* Beta = 1/1024 */\n\n    /// <summary>\n    /// The larger this value is, the more the bias of the closest neuron will be decreased by during the learning loop.\n    /// </summary>\n    private const int ClosestNeuronBiasDecrement = IntBias << (GammaShift - BetaShift);\n\n    #endregion\n\n    #region Definitions for decreasing radius factor\n\n    /// <summary>\n    /// Initial radius.\n    /// The initial unbiased neuron neighbourhood size is set to this multiplied by the neighbourhood size bias.\n    /// This is also the size of the array of alphas for shifting neighbouring neurons.\n    /// </summary>\n    private int _initialNeighbourhoodSize;\n\n    /// <summary>\n    /// The neuron neighbourhood size is set by shifting the unbiased neighbourhood size this many bits to the right.\n    /// </summary>\n    private const int NeighbourhoodSizeBiasShift = 6;\n\n    /// <summary>\n    /// Radius bias.\n    /// The initial unbiased neuron neighbourhood size is set to this multiplied by the initial radius.\n    /// </summary>\n    private const int NeighbourhoodSizeBias = 1 << NeighbourhoodSizeBiasShift;\n\n    /// <summary>\n    /// The initial value for the unbiased size of a neuron neighbourhood.\n    /// </summary>\n    private int _initialUnbiasedNeighbourhoodSize;\n\n    /// <summary>\n    /// Factor for reducing the unbiased neighbourhood size.\n    /// </summary>\n    private const int UnbiasedNeighbourhoodSizeDecrement = 30;\n\n    #endregion\n\n    #region Definitions for radius calculations\n\n    /// <summary>\n    /// The greater this value, the greater RadBias and AlphaRadBiasShift will be.\n    /// </summary>\n    private const int RadiusBiasShift = 8;\n\n    /// <summary>\n    /// The greater this value, the larger alpha will be, and the more neighbouring neurons will be moved by during the learning process.\n    /// </summary>\n    private const int RadiusBias = 1 << RadiusBiasShift;\n\n    /// <summary>\n    /// The greater this value, the greater _alphaRadBias will be, and so the less neighbouring neurons will be moved by during the learning process.\n    /// </summary>\n    private const int AlphaRadiusBiasShift = (AlphaBiasShift + RadiusBiasShift);\n\n    /// <summary>\n    /// The greater this value, the less neighbouring neurons will be moved by during the learning process.\n    /// </summary>\n    private const int AlphaRadiusBias = 1 << AlphaRadiusBiasShift;\n\n    #endregion\n\n    #region Other variables\n\n    /// <summary>\n    /// Height * Width *3 (H*W*3).\n    /// </summary>\n    private int _pixelBytesCount;\n\n    /// <summary>\n    /// Gets and sets quality of color quantization (conversion of images to the maximum 256 colors allowed by the GIF specification).\n    /// Lower values (minimum = 1) produce better colors, but slow processing significantly.\n    /// 10 is the default, and produces good color mapping at reasonable speeds.  \n    /// Values greater than 20 do not yield significant improvements in speed.\n    /// </summary>\n    private int _samplingFactor;\n\n    /// <summary>\n    /// The neural network.\n    /// An array of 256 neurons, each of which is an array of 4 bytes.\n    /// Each neuron holds a colour intensity, in the order red, green, blue.\n    /// The fourth element of the array holds the neuron's original index in the network before it is sorted.\n    /// </summary>\n    private int[][] _network; /* the network itself - [netsize][4] */\n\n    /// <summary>\n    /// Used for locating colours in the neural network - the index of this array is the green value of the colour to look for.\n    /// </summary>\n    private int[] _indexOfGreen;\n\n    #endregion\n\n    #endregion\n\n    /// <summary>\n    /// Neural network color quantization.\n    /// </summary>\n    /// <param name=\"samplingFactor\">From 1 to 20. Using 1 will give the best results, but it will be slower.</param>\n    /// <param name=\"maximumColors\">Maximum quantity of colors.</param>\n    public NeuralQuantizer(int samplingFactor, int maximumColors = 256) : base(false)\n    {\n        _samplingFactor = samplingFactor;\n        _networkSize = maximumColors;\n    }\n\n\n    internal override void FirstPass(byte[] pixels)\n    {\n        #region Prepare variables\n\n        MaxColorsWithTransparency = TransparentColor.HasValue ? _networkSize - 1 : _networkSize;\n        _maximumNeuronIndex = MaxColorsWithTransparency - 1;\n        _network = new int[MaxColorsWithTransparency][];\n        _indexOfGreen = new int[256];\n        _biases = new int[MaxColorsWithTransparency];\n        _frequencies = new int[MaxColorsWithTransparency];\n        _initialNeighbourhoodSize = Math.Max(MaxColorsWithTransparency >> 3, 1);\n        _neighbourhoodAlphas = new int[_initialNeighbourhoodSize];\n        _initialUnbiasedNeighbourhoodSize = _initialNeighbourhoodSize * NeighbourhoodSizeBias;\n\n        for (var neuronIndex = 0; neuronIndex < MaxColorsWithTransparency; neuronIndex++)\n        {\n            _network[neuronIndex] = new int[4];\n            _network[neuronIndex][0] = _network[neuronIndex][1] = _network[neuronIndex][2] = (neuronIndex << (NetworkBiasShift + 8)) / MaxColorsWithTransparency;\n\n            _frequencies[neuronIndex] = IntBias / MaxColorsWithTransparency;\n            _biases[neuronIndex] = 0;\n        }\n\n        #endregion\n\n        Learn(pixels);\n\n        UnbiasNetwork();\n        BuildIndex();\n    }\n\n    internal override List<Color> BuildPalette()\n    {\n        var map = new byte[3 * MaxColorsWithTransparency];\n        var index = new int[MaxColorsWithTransparency];\n\n        //Gets the index of each color.\n        for (var i = 0; i < MaxColorsWithTransparency; i++)\n            index[_network[i][3]] = i;\n\n        var colors = new List<Color>();\n\n        var k = 0;\n        for (var i = 0; i < MaxColorsWithTransparency; i++)\n        {\n            var j = index[i];\n\n            //BGR.\n            map[k++] = (byte)(_network[j][0]);\n            map[k++] = (byte)(_network[j][1]);\n            map[k++] = (byte)(_network[j][2]);\n\n            //Add repeated colors?\n\n            colors.Add(new Color\n            {\n                A = 255,\n                B = map[k - 3],\n                G = map[k - 2],\n                R = map[k - 1]\n            });\n        }\n\n        if (TransparentColor.HasValue)\n            colors.Add(TransparentColor.Value);\n\n        return colors;\n    }\n\n    protected override byte QuantizePixel(Color pixel)\n    {\n        return MapColor(pixel.B, pixel.G, pixel.R);\n    }\n        \n\n    private void Learn(byte[] pixels)\n    {\n        _pixelBytesCount = pixels.Length;\n\n        #region Preparations for learning\n\n        //If the image is so small that it has fewer pixels than the largest prime number used to determine how to step through the pixels, include every pixel in the sample.\n        if (_pixelBytesCount < Prime4 * 4)\n            _samplingFactor = 1;\n\n        var alphaDecrement = 30 + (_samplingFactor - 1) / 4;\n        var pixelIndex = 0;\n\n        //Set the number of elements of the learning data to be examined during the learning loop. Pixels are in BGRA.\n        //If _samplingFactor is 1 then every element will be examined. \n        //If _samplingFactor is 10 then one tenth of the elements will be examined.\n        var pixelsToExamine = _pixelBytesCount / (4 * _samplingFactor);\n\n        //Set how often the alpha value for shifting neurons is updated.\n        //A value of 1 means it is updated once per pixel examined, 10 means it is updated every 10 pixels, and so on.\n        var alphaUpdateFrequency = Math.Max(1, pixelsToExamine / NumberOfLearningCycles);\n\n        //Alpha is a factor which controls how far neurons are moved during the learning loop, and it decreases as learning proceeds.\n        var alpha = InitialAlpha;\n\n        //Set the size of the neighbourhood which makes up the neighbouring neurons which also need to be moved when a neuron is moved.\n        var unbiasedNeighbourhoodSize = _initialUnbiasedNeighbourhoodSize;\n\n        var neighbourhoodSize = unbiasedNeighbourhoodSize >> NeighbourhoodSizeBiasShift;\n\n        //Is this possible?\n        if (neighbourhoodSize < 1)\n            neighbourhoodSize = 1;\n\n        //Set the initial alpha values for neighbouring neurons.\n        SetNeighbourhoodAlphas(_neighbourhoodAlphas, neighbourhoodSize, alpha, RadiusBias);\n\n        //Get the number of pixels to skip between samples.\n        var step = GetPixelIndexIncrement(_pixelBytesCount);\n\n        #endregion\n\n        #region Learning\n\n        var pixelsExamined = 0;\n\n        //var hashTable = new HashSet<int>();\n\n        while (pixelsExamined < pixelsToExamine)\n        {\n            //By trying to ignore repeated colors, this gives the opportunity to other colors to be used instead, which may cause visual imperfections, specially with full frames (with lots of colors).\n            //var hash = BitConverter.ToInt32(new[] { byte.MaxValue, pixels[pixelIndex + 0], pixels[pixelIndex + 1], pixels[pixelIndex + 2] }, 0);\n\n            //Only ignore transparent pixels.\n            if (pixels[pixelIndex + 3] > 0)// && !hashTable.Contains(hash))\n            {\n                #region Move neurons\n\n                var blue = (pixels[pixelIndex + 0] & 0xff) << NetworkBiasShift;\n                var green = (pixels[pixelIndex + 1] & 0xff) << NetworkBiasShift;\n                var red = (pixels[pixelIndex + 2] & 0xff) << NetworkBiasShift;\n\n                var bestNeuronIndex = FindClosestAndReturnBestNeuron(blue, green, red);\n\n                //Move this neuron closer to the current element of the learning data by a factor of alpha.\n                MoveNeuron(alpha, bestNeuronIndex, blue, green, red);\n\n                //If appropriate, move neighbouring neurons closer to the color of the current pixel.\n                if (neighbourhoodSize != 0)\n                    MoveNeighbouringNeurons(neighbourhoodSize, bestNeuronIndex, blue, green, red);\n\n                #endregion\n            }\n\n            //hashTable.Add(hash);\n\n            #region Move on to the next learning data element to be examined\n\n            pixelIndex += step;\n\n            //If gone past the end of the learning data, wrap around to the start again.\n            if (pixelIndex >= _pixelBytesCount)\n                pixelIndex -= _pixelBytesCount;\n\n            //Keep track of how many elements have been examined so far.\n            pixelsExamined++;\n\n            #endregion\n\n            #region Update the alpha values for moving neurons if appropriate\n\n            if (pixelsExamined % alphaUpdateFrequency == 0)\n            {\n                alpha -= alpha / alphaDecrement;\n                unbiasedNeighbourhoodSize -= unbiasedNeighbourhoodSize / UnbiasedNeighbourhoodSizeDecrement;\n                neighbourhoodSize = unbiasedNeighbourhoodSize >> NeighbourhoodSizeBiasShift;\n\n                if (neighbourhoodSize <= 1)\n                    neighbourhoodSize = 0;\n\n                //Update the alpha values to be used for moving neighbouring neurons.\n                SetNeighbourhoodAlphas(_neighbourhoodAlphas, neighbourhoodSize, alpha, RadiusBias);\n            }\n\n            #endregion\n        }\n\n        #endregion\n    }\n\n    /// <summary>\n    /// Sets the alpha values for moving neighbouring neurons.\n    /// </summary>\n    private static void SetNeighbourhoodAlphas(int[] neighbourhoodAlphas, int neighbourhoodSize, int alpha, int radiusBias)\n    {\n        //Get neighbourhood size squared - only need to calculate this once.\n        var squared = neighbourhoodSize * neighbourhoodSize;\n\n        for (var i = 0; i < neighbourhoodSize; i++)\n            neighbourhoodAlphas[i] = alpha * ((squared - i * i) * radiusBias / squared);\n    }\n\n    /// <summary>\n    /// Calculates an increment to step through the pixels of the image, such that all pixels will eventually be examined, but not sequentially.\n    /// This is required because the learning loop needs to examine the pixels in a pseudo-random order.\n    /// </summary>\n    /// <returns>The increment.</returns>\n    private static int GetPixelIndexIncrement(int pictureByteCount)\n    {\n        int step;\n            \n        if (pictureByteCount < Prime4 * 4)\n            step = 4;\n        else if (pictureByteCount % Prime1 != 0) //The number of pixels is not divisible by the first prime number.\n            step = Prime1 * 4;\n        else if (pictureByteCount % Prime2 != 0) //The number of pixels is not divisible by the second prime number.\n            step = Prime2 * 4;\n        else if (pictureByteCount % Prime3 != 0) //The number of pixels is not divisible by the third prime number.\n            step = Prime3 * 4;\n        else\n        {\n            //The number of pixels is divisible by the first, second and third prime numbers.\n            //To cover this in a test case we'd need learning data consisting of over 119 million neurons!\n            step = Prime4 * 4;\n        }\n\n        return step;\n    }\n\n    /// <summary>\n    /// Finds the neuron which is closest to the supplied color, increases its frequency and decreases its bias (Search for biased BGR values).\n    /// Finds the best neuron (close to the supplied color but not already chosen too many times) and returns its index in the neural network.\n    /// </summary>\n    /// <returns>\n    /// The index in the neural network of a neuron which is close to the supplied coordinate but which hasn't already been chosen too many times.\n    /// </returns>\n    private int FindClosestAndReturnBestNeuron(int blue, int green, int red)\n    {\n        var bestDistance = ~(1 << 31); //Bitwise inverted.\n        var bestBiasDistance = bestDistance;\n        var closestNeuronIndex = -1;\n        var bestBiasNeuronIndex = closestNeuronIndex;\n\n        for (var neuronIndex = 0; neuronIndex < MaxColorsWithTransparency; neuronIndex++)\n        {\n            #region Calculate the distance\n\n            ////Computes differences between neuron (color), and provided color.\n            //var deltaRed = _network[neuronIndex][2] - red;\n            //var deltaGreen = _network[neuronIndex][1] - green;\n            //var deltaBlue = _network[neuronIndex][0] - blue;\n\n            ////Makes values absolute.\n            //if (deltaRed < 0)\n            //    deltaRed = -deltaRed;\n            //if (deltaGreen < 0)\n            //    deltaGreen = -deltaGreen;\n            //if (deltaBlue < 0)\n            //    deltaBlue = -deltaBlue;\n\n            ////Sums the distance.\n            //var distance = deltaRed + deltaGreen + deltaBlue;\n\n            ////If best so far, store it.\n            //if (distance < bestDistance)\n            //{\n            //    bestDistance = distance;\n            //    closestNeuronIndex = neuronIndex;\n            //}\n\n            var distance = _network[neuronIndex][0] - blue;\n\n            if (distance < 0)\n                distance = -distance;\n\n            var distanceIncrement = _network[neuronIndex][1] - green;\n                \n            if (distanceIncrement < 0) \n                distanceIncrement = -distanceIncrement;\n                \n            distance += distanceIncrement;\n            distanceIncrement = _network[neuronIndex][2] - red;\n                \n            if (distanceIncrement < 0)\n                distanceIncrement = -distanceIncrement;\n                \n            distance += distanceIncrement;\n\n            if (distance < bestDistance)\n            {\n                bestDistance = distance;\n                closestNeuronIndex = neuronIndex;\n            }\n\n            #endregion\n\n            #region Calculate the bias distance\n\n            //Bias distance takes into account the distance between the neuron and the coordinate, and also the neuron's bias.\n            //The more frequently a neuron has already been chosen, the lower its bias, so less frequently-chosen neurons have a better chance of being returned by this method.\n            //This ensures that the distribution of neurons is densest in areas of the network space which have most coordinates in the learning data.\n            var biasDistance = distance - (_biases[neuronIndex] >> (IntBiasShift - NetworkBiasShift));\n\n            if (biasDistance < bestBiasDistance)\n            {\n                bestBiasDistance = biasDistance;\n                bestBiasNeuronIndex = neuronIndex;\n            }\n\n            #endregion\n\n            #region Decrease the frequency and increase the bias for all neurons \n                \n            var betaFrequency = _frequencies[neuronIndex] >> BetaShift;\n                \n            _frequencies[neuronIndex] -= betaFrequency;\n            _biases[neuronIndex] += betaFrequency << GammaShift;\n\n            #endregion\n        }\n\n        //Increase the frequency and decrease the bias for just the closest neuron.\n        _frequencies[closestNeuronIndex] += ClosestNeuronFrequencyIncrement;\n        _biases[closestNeuronIndex] -= ClosestNeuronBiasDecrement;\n\n        return bestBiasNeuronIndex;\n    }\n\n    /// <summary>\n    /// Moves the neuron at the supplied index in the neural network closer to the supplied color by a factor of alpha.\n    /// Move neuron i towards biased (b,g,r) by factor alpha.\n    /// </summary>\n    private void MoveNeuron(int alpha, int neuronIndexToMove, int blue, int green, int red)\n    {\n        _network[neuronIndexToMove][0] -= (alpha * (_network[neuronIndexToMove][0] - blue)) / InitialAlpha;\n        _network[neuronIndexToMove][1] -= (alpha * (_network[neuronIndexToMove][1] - green)) / InitialAlpha;\n        _network[neuronIndexToMove][2] -= (alpha * (_network[neuronIndexToMove][2] - red)) / InitialAlpha;\n    }\n\n    /// <summary>\n    /// Moves neighbours of the neuron at the supplied index in the network closer to the supplied colour.\n    /// Move adjacent neurons by precomputed alpha * (1-((i-j)^2/[r]^2)) in radpower[|i-j|]\n    /// </summary>\n    private void MoveNeighbouringNeurons(int neighbourhoodSize, int neuronIndex, int blue, int green, int red)\n    {\n        #region Set lower and upper bounds of the neighbourhood of neurons to be moved\n\n        var lowNeuronIndexLimit = neuronIndex - neighbourhoodSize;\n\n        if (lowNeuronIndexLimit < -1)\n            lowNeuronIndexLimit = -1;\n\n        var highNeuronIndexLimit = neuronIndex + neighbourhoodSize;\n\n        if (highNeuronIndexLimit > _network.Length)\n            highNeuronIndexLimit = _network.Length;\n\n        #endregion\n\n        //Start with the neurons immediately before and after the specified index and work outwards.\n        var highNeuronIndex = neuronIndex + 1;\n        var lowNeuronIndex = neuronIndex - 1;\n        var neighbourAlphaIndex = 1;\n\n        while (highNeuronIndex < highNeuronIndexLimit || lowNeuronIndex > lowNeuronIndexLimit)\n        {\n            var neighbourhoodAlpha = _neighbourhoodAlphas[neighbourAlphaIndex++];\n\n            if (highNeuronIndex < highNeuronIndexLimit)\n                MoveNeighbour(highNeuronIndex++, neighbourhoodAlpha, AlphaRadiusBias, blue, green, red);\n\n            if (lowNeuronIndex > lowNeuronIndexLimit)\n                MoveNeighbour(lowNeuronIndex--, neighbourhoodAlpha, AlphaRadiusBias, blue, green, red);\n        }\n    }\n\n    /// <summary>\n    /// Moves an individual neighbouring neuron closer to the supplied colour by a factor of alpha.\n    /// </summary>\n    private void MoveNeighbour(int neuronIndexToMove, int alpha, int alphaRadiusBias, int blue, int green, int red)\n    {\n        _network[neuronIndexToMove][0] -= (alpha * (_network[neuronIndexToMove][0] - blue)) / alphaRadiusBias;\n        _network[neuronIndexToMove][1] -= (alpha * (_network[neuronIndexToMove][1] - green)) / alphaRadiusBias;\n        _network[neuronIndexToMove][2] -= (alpha * (_network[neuronIndexToMove][2] - red)) / alphaRadiusBias;\n    }\n\n\n    /// <summary>\n    /// Unbias network to give byte values 0..255 and record position i to prepare for sort.\n    /// </summary>\n    private void UnbiasNetwork()\n    {\n        for (var neuronIndex = 0; neuronIndex < MaxColorsWithTransparency; neuronIndex++)\n        {\n            _network[neuronIndex][0] >>= NetworkBiasShift;\n            _network[neuronIndex][1] >>= NetworkBiasShift;\n            _network[neuronIndex][2] >>= NetworkBiasShift;\n            _network[neuronIndex][3] = neuronIndex;  //Record the color number.\n        }\n    }\n\n\n    /// <summary>\n    /// Insertion sort of network and building of netindex[0..255] (to do after unbias).\n    /// Populates the _indexOfGreen array with the indices in the network of colors with green values closest to 0 to 255.\n    /// </summary>\n    private void BuildIndex()\n    {\n        int greenValue;\n        var previousLeastGreenValue = 0;\n        var startingGreenValue = 0;\n\n        for (var thisNeuronIndex = 0; thisNeuronIndex < MaxColorsWithTransparency; thisNeuronIndex++)\n        {\n            var thisNeuron = _network[thisNeuronIndex];\n\n            //Find the least green neuron between the current neuron and the end of the network.\n            var indexOfLeastGreenNeuron = IndexOfLeastGreenNeuron(thisNeuronIndex);\n            var leastGreenNeuron = _network[indexOfLeastGreenNeuron];\n            var greenValueOfLeastGreenNeuron = leastGreenNeuron[1];\n\n            //Move the neuron with the lowest index towards the beginning of the array.\n            if (thisNeuronIndex != indexOfLeastGreenNeuron)\n                SwapNeurons(thisNeuron, leastGreenNeuron);\n\n            if (greenValueOfLeastGreenNeuron != previousLeastGreenValue)\n            {\n                //Then we've found a new least green neuron so update the array of green indices accordingly\n                _indexOfGreen[previousLeastGreenValue] = (startingGreenValue + thisNeuronIndex) >> 1;\n\n                for (greenValue = previousLeastGreenValue + 1; greenValue < greenValueOfLeastGreenNeuron; greenValue++)\n                    _indexOfGreen[greenValue] = thisNeuronIndex;\n\n                previousLeastGreenValue = greenValueOfLeastGreenNeuron;\n                startingGreenValue = thisNeuronIndex;\n            }\n        }\n\n        _indexOfGreen[previousLeastGreenValue] = (startingGreenValue + _maximumNeuronIndex) >> 1;\n\n        //Fill the remainder of the _indexOfGreen array with the index of the last neuron in the network.\n        for (greenValue = previousLeastGreenValue + 1; greenValue < 256; greenValue++)\n            _indexOfGreen[greenValue] = _maximumNeuronIndex;\n    }\n\n    /// <summary>\n    /// Gets the index in the network of the neuron with the lowest green value, between the supplied index and the end of the network.\n    /// </summary>\n    /// <param name=\"startNeuronIndex\">The index in the network to start searching at.</param>\n    /// <returns>\n    /// The index of the least green neuron.\n    /// </returns>\n    private int IndexOfLeastGreenNeuron(int startNeuronIndex)\n    {\n        //Start with the current neuron, its index and green value.\n        var indexOfLeastGreenNeuron = startNeuronIndex;\n        var greenValueOfLeastGreenNeuron = _network[startNeuronIndex][1];\n\n        //And compare it with the remaining neurons.\n        for (var otherNeuronIndex = startNeuronIndex + 1; otherNeuronIndex < MaxColorsWithTransparency; otherNeuronIndex++)\n        {\n            var otherNeuron = _network[otherNeuronIndex];\n\n            if (otherNeuron[1] < greenValueOfLeastGreenNeuron)\n            {\n                //The green value of otherNeuron is lower than that of the least green neuron seen so far, so otherNeuron becomes the least green.\n                indexOfLeastGreenNeuron = otherNeuronIndex;\n                greenValueOfLeastGreenNeuron = otherNeuron[1];\n            }\n        }\n\n        return indexOfLeastGreenNeuron;\n    }\n\n    /// <summary>\n    /// Swaps the values of the two supplied neurons.\n    /// </summary>\n    /// <param name=\"neuron1\">One of the neurons whose value should be swapped with the other neuron.</param>\n    /// <param name=\"neuron2\">The other neuron, whose value should be swapped with the first neuron.</param>\n    private static void SwapNeurons(int[] neuron1, int[] neuron2)\n    {\n        //Swaps the values of each of the coordinates of the 2 neurons.\n        for (var i = 0; i < neuron1.Length; i++)\n        {\n            var temp = neuron1[i];\n\n            neuron1[i] = neuron2[i];\n            neuron2[i] = temp;\n        }\n    }\n\n\n    /// <summary>\n    /// Gets the index in the color table of the color closest to the supplied color.\n    /// </summary>\n    /// <param name=\"blue\">Blue</param>\n    /// <param name=\"green\">Green</param>\n    /// <param name=\"red\">Red</param>\n    /// <returns>Index in the colour table</returns>\n    internal byte MapColor(int blue, int green, int red)\n    {\n        var bestIndex = -1;\n        var bestDistance = 1000; //Biggest possible dist is 256 * 3.\n        var highNeuronIndex = _indexOfGreen[green]; //Index on g.\n        var lowNeuronIndex = highNeuronIndex - 1; //Start at netindex[g] and work outwards.\n\n        while (highNeuronIndex < MaxColorsWithTransparency || lowNeuronIndex >= 0)\n        {\n            int distance;\n            int[] thisNeuron;\n            int distanceIncrement;\n\n            if (highNeuronIndex < MaxColorsWithTransparency)\n            {\n                thisNeuron = _network[highNeuronIndex];\n                distance = thisNeuron[1] - green; //Index key.\n\n                if (distance >= bestDistance)\n                {\n                    highNeuronIndex = MaxColorsWithTransparency; //Stop iteration.\n                }\n                else\n                {\n                    highNeuronIndex++;\n\n                    if (distance < 0)\n                        distance = -distance;\n\n                    distanceIncrement = thisNeuron[0] - blue;\n\n                    if (distanceIncrement < 0)\n                        distanceIncrement = -distanceIncrement;\n\n                    distance += distanceIncrement;\n\n                    if (distance < bestDistance)\n                    {\n                        distanceIncrement = thisNeuron[2] - red;\n\n                        if (distanceIncrement < 0)\n                            distanceIncrement = -distanceIncrement;\n\n                        distance += distanceIncrement;\n\n                        if (distance < bestDistance)\n                        {\n                            bestDistance = distance;\n                            bestIndex = thisNeuron[3];\n                        }\n                    }\n                }\n            }\n\n            if (lowNeuronIndex >= 0)\n            {\n                thisNeuron = _network[lowNeuronIndex];\n                distance = green - thisNeuron[1]; //Index key.\n\n                if (distance >= bestDistance)\n                {\n                    lowNeuronIndex = -1; //Stop iteration.\n                }\n                else\n                {\n                    lowNeuronIndex--;\n\n                    if (distance < 0)\n                        distance = -distance;\n\n                    distanceIncrement = thisNeuron[0] - blue;\n\n                    if (distanceIncrement < 0)\n                        distanceIncrement = -distanceIncrement;\n\n                    distance += distanceIncrement;\n\n                    if (distance < bestDistance)\n                    {\n                        distanceIncrement = thisNeuron[2] - red;\n\n                        if (distanceIncrement < 0)\n                            distanceIncrement = -distanceIncrement;\n\n                        distance += distanceIncrement;\n\n                        if (distance < bestDistance)\n                        {\n                            bestDistance = distance;\n                            bestIndex = thisNeuron[3];\n                        }\n                    }\n                }\n            }\n        }\n\n        return (byte) Math.Min(bestIndex, MaxColorsWithTransparency);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/OctreeQuantizer.cs",
    "content": "using System.Collections;\nusing System.Windows.Media;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\npublic class OctreeQuantizer : Quantizer\n{\n    private readonly Octree _octree;\n\n    public OctreeQuantizer(int maxColorBits = 8) : base(false)\n    {\n        if (maxColorBits is < 1 or > 8)\n            throw new ArgumentOutOfRangeException(nameof(maxColorBits), maxColorBits, \"This should be between 1 and 8\");\n\n        //Construct the octree.\n        _octree = new Octree(maxColorBits);\n    }\n\n    /// <summary>\n    /// Process the pixel in the first pass of the algorithm.\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize.</param>\n    protected override void InitialQuantizePixel(Color pixel)\n    {\n        if (pixel.A == 0)\n            return;\n\n        //Add the color to the octree.\n        _octree.AddColor(pixel);\n    }\n\n    /// <summary>\n    /// Override this to process the pixel in the second pass of the algorithm.\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize.</param>\n    /// <returns>The quantized value.</returns>\n    protected override byte QuantizePixel(Color pixel)\n    {\n        return (byte)_octree.GetPaletteIndex(pixel);\n    }\n\n    /// <summary>\n    /// Retrieves the palette for the quantized image.\n    /// </summary>\n    /// <returns>The new color palette.</returns>\n    internal override List<Color> BuildPalette()\n    {\n        MaxColorsWithTransparency = TransparentColor.HasValue ? MaxColors - 1 : MaxColors;\n\n        //First off convert the octree to _maxColors colors\n        var palette = _octree.Palletize(MaxColorsWithTransparency);\n\n        //TODO: Since the color table changes in size by ^2 (64, 128, 256), if there is still space in the color table, there's no need for the (-1). Check\n\n        //Add the transparent color to the last position.\n        if (TransparentColor.HasValue)\n            palette.Add(Color.FromArgb(0, TransparentColor.Value.R, TransparentColor.Value.G, TransparentColor.Value.B)); //I need to set a color that is not being used in the gif.\n\n        //Just convert the array to a list.\n        return palette.Cast<Color>().ToList();\n    }\n\n    /// <summary>\n    /// Class responsible for color quantization.\n    /// </summary>\n    private class Octree\n    {\n        /// <summary>\n        /// Mask used when getting the appropriate pixels for a given node.\n        /// </summary>\n        private static readonly int[] Mask = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };\n\n        /// <summary>\n        /// The root of the octree.\n        /// </summary>\n        private readonly OctreeNode _root;\n\n        /// <summary>\n        /// Returns the array of reducible nodes.\n        /// </summary>\n        protected OctreeNode[] ReducibleNodes { get; }\n\n        /// <summary>\n        /// Maximum number of significant bits in the image.\n        /// </summary>\n        private readonly int _maxColorBits;\n\n        /// <summary>\n        /// Stores the last node quantized.\n        /// </summary>\n        private OctreeNode _previousNode;\n\n        /// <summary>\n        /// Caches the previous color quantizeds\n        /// </summary>\n        private Color _previousColor;\n\n        /// <summary>\n        /// Gets/Sets the number of leaves in the tree.\n        /// </summary>\n        private int Leaves { get; set; }\n\n        /// <summary>\n        /// Construct the octree.\n        /// </summary>\n        /// <param name=\"maxColorBits\">The maximum number of significant bits in the image</param>\n        public Octree(int maxColorBits)\n        {\n            _maxColorBits = maxColorBits;\n            Leaves = 0;\n            ReducibleNodes = new OctreeNode[9];\n                \n            _root = new OctreeNode(0, _maxColorBits, this);\n            _previousColor = Colors.Transparent;\n            _previousNode = null;\n        }\n\n\n        /// <summary>\n        /// Add a given color value to the octree\n        /// </summary>\n        /// <param name=\"pixel\"></param>\n        public void AddColor(Color pixel)\n        {\n            //Check if this request is for the same color as the last\n            if (_previousColor == pixel)\n            {\n                //If so, check if I have a previous node setup. This will only occur if the first color in the image\n                //happens to be black, with an alpha component of zero.\n                if (null == _previousNode)\n                {\n                    _previousColor = pixel;\n                    _root.AddColor(pixel, _maxColorBits, 0, this);\n                }\n                else\n                    //Just update the previous node\n                    _previousNode.Increment(pixel);\n            }\n            else\n            {\n                _previousColor = pixel;\n                _root.AddColor(pixel, _maxColorBits, 0, this);\n            }\n        }\n\n        /// <summary>\n        /// Reduce the depth of the tree.\n        /// </summary>\n        private void Reduce()\n        {\n            int index;\n\n            //Find the deepest level containing at least one reducible node\n            for (index = _maxColorBits - 1; index > 0 && null == ReducibleNodes[index]; index--);\n\n            //Reduce the node most recently added to the list at level 'index'\n            var node = ReducibleNodes[index];\n            ReducibleNodes[index] = node.NextReducible;\n\n            //Decrement the leaf count after reducing the node\n            Leaves -= node.Reduce();\n\n            //And just in case I've reduced the last color to be added, and the next color to\n            //be added is the same, invalidate the previousNode...\n            _previousNode = null;\n        }\n\n        /// <summary>\n        /// Keep track of the previous node that was quantized.\n        /// </summary>\n        /// <param name=\"node\">The node last quantized.</param>\n        protected void TrackPrevious(OctreeNode node)\n        {\n            _previousNode = node;\n        }\n\n        /// <summary>\n        /// Convert the nodes in the octree to a palette with a maximum of colorCount colors.\n        /// </summary>\n        /// <param name=\"colorCount\">The maximum number of colors.</param>\n        /// <returns>An arraylist with the palettized colors</returns>\n        public ArrayList Palletize(int colorCount)\n        {\n            while (Leaves > colorCount)\n                Reduce();\n\n            //Now palettize the nodes.\n            var palette = new ArrayList(Leaves);\n            var paletteIndex = 0;\n\n            _root.ConstructPalette(palette, ref paletteIndex);\n\n            //And return the palette.\n            return palette;\n        }\n\n        /// <summary>\n        /// Get the palette index for the passed color\n        /// </summary>\n        /// <param name=\"pixel\"></param>\n        /// <returns></returns>\n        public int GetPaletteIndex(Color pixel)\n        {\n            return _root.GetPaletteIndex(pixel, 0);\n        }\n\n\n\n        /// <summary>\n        /// Class which encapsulates each node in the tree\n        /// </summary>\n        protected class OctreeNode\n        {\n            /// <summary>\n            /// Construct the node\n            /// </summary>\n            /// <param name=\"level\">The level in the tree = 0 - 7</param>\n            /// <param name=\"colorBits\">The number of significant color bits in the image</param>\n            /// <param name=\"octree\">The tree to which this node belongs</param>\n            public OctreeNode(int level, int colorBits, Octree octree)\n            {\n                //Construct the new node.\n                _leaf = level == colorBits;\n\n                _red = _green = _blue = 0;\n                _pixelCount = 0;\n\n                //If a leaf, increment the leaf count.\n                if (_leaf)\n                {\n                    octree.Leaves++;\n                    NextReducible = null;\n                    Children = null;\n                }\n                else\n                {\n                    //Otherwise add this to the reducible nodes.\n                    NextReducible = octree.ReducibleNodes[level];\n                    octree.ReducibleNodes[level] = this;\n                    Children = new OctreeNode[8];\n                }\n            }\n\n            /// <summary>\n            /// Add a color into the tree.\n            /// </summary>\n            /// <param name=\"pixel\">The color</param>\n            /// <param name=\"colorBits\">The number of significant color bits</param>\n            /// <param name=\"level\">The level in the tree</param>\n            /// <param name=\"octree\">The tree to which this node belongs</param>\n            public void AddColor(Color pixel, int colorBits, int level, Octree octree)\n            {\n                //Update the color information if this is a leaf\n                if (_leaf)\n                {\n                    Increment(pixel);\n\n                    //Setup the previous node.\n                    octree.TrackPrevious(this);\n                }\n                else\n                {\n                    //Go to the next level down in the tree.\n                    var shift = 7 - level;\n                    var index = ((pixel.R & Mask[level]) >> (shift - 2)) |\n                                ((pixel.G & Mask[level]) >> (shift - 1)) |\n                                ((pixel.B & Mask[level]) >> (shift));\n\n                    var child = Children[index];\n\n                    if (null == child)\n                    {\n                        //Create a new child node & store in the array.\n                        child = new OctreeNode(level + 1, colorBits, octree);\n                        Children[index] = child;\n                    }\n\n                    //Add the color to the child node.\n                    child.AddColor(pixel, colorBits, level + 1, octree);\n                }\n            }\n\n            /// <summary>\n            /// Get/Set the next reducible node.\n            /// </summary>\n            public OctreeNode NextReducible { get; private set; }\n\n            /// <summary>\n            /// Pointers to any child nodes.\n            /// </summary>\n            private OctreeNode[] Children { get; }\n\n            /// <summary>\n            /// Reduce this node by removing all of its children.\n            /// </summary>\n            /// <returns>The number of leaves removed.</returns>\n            public int Reduce()\n            {\n                _red = _green = _blue = 0;\n                var children = 0;\n\n                //Loop through all children and add their information to this node.\n                for (var index = 0; index < 8; index++)\n                {\n                    if (null == Children[index]) \n                        continue;\n\n                    _red += Children[index]._red;\n                    _green += Children[index]._green;\n                    _blue += Children[index]._blue;\n                    _pixelCount += Children[index]._pixelCount;\n                    ++children;\n\n                    Children[index] = null;\n                }\n\n                //Now change this to a leaf node.\n                _leaf = true;\n\n                //Return the number of nodes to decrement the leaf count by.\n                return children - 1;\n            }\n\n            /// <summary>\n            /// Traverse the tree, building up the color palette.\n            /// </summary>\n            /// <param name=\"palette\">The palette.</param>\n            /// <param name=\"paletteIndex\">The current palette index.</param>\n            public void ConstructPalette(IList palette, ref int paletteIndex)\n            {\n                if (_leaf)\n                {\n                    //Consume the next palette index.\n                    _paletteIndex = paletteIndex++;\n                        \n                    //And set the color of the palette entry.\n                    palette.Add(Color.FromRgb((byte)(_red / _pixelCount), (byte)(_green / _pixelCount), (byte)(_blue / _pixelCount)));\n                }\n                else\n                {\n                    //Loop through children looking for leaves.\n                    for (var index = 0; index < 8; index++)\n                    {\n                        if (null != Children[index])\n                            Children[index].ConstructPalette(palette, ref paletteIndex);\n                    }\n                }\n            }\n\n            /// <summary>\n            /// Returns the palette index for the passed color.\n            /// </summary>\n            public int GetPaletteIndex(Color pixel, int level)\n            {\n                var paletteIndex = _paletteIndex;\n\n                if (_leaf) \n                    return paletteIndex;\n\n                var shift = 7 - level;\n                var index = ((pixel.R & Mask[level]) >> (shift - 2)) |\n                            ((pixel.G & Mask[level]) >> (shift - 1)) |\n                            ((pixel.B & Mask[level]) >> (shift));\n\n                if (null != Children[index])\n                    paletteIndex = Children[index].GetPaletteIndex(pixel, level + 1);\n                else\n                    throw new Exception(\"Not expected!\");\n\n                return paletteIndex;\n            }\n\n            /// <summary>\n            /// Increment the pixel count and add to the color information.\n            /// </summary>\n            public void Increment(Color pixel)\n            {\n                _pixelCount++;\n                _red += pixel.R;\n                _green += pixel.G;\n                _blue += pixel.B;\n            }\n\n            /// <summary>\n            /// Flag indicating that this is a leaf node.\n            /// </summary>\n            private bool _leaf;\n\n            /// <summary>\n            /// Number of pixels in this node.\n            /// </summary>\n            private int _pixelCount;\n\n            private int _red;\n\n            private int _green;\n\n            private int _blue;\n\n            /// <summary>\n            /// The index of this node in the palette.\n            /// </summary>\n            private int _paletteIndex;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/PaletteQuantizer.cs",
    "content": "using System.Collections;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\npublic class PaletteQuantizer : Quantizer\n{\n    ///<summary>\n    ///List of all colors in the palette\n    ///</summary>\n    protected List<Color> Colors;\n\n\n    ///<summary>\n    ///Construct the palette quantizer.\n    ///</summary>\n    ///<param name=\"palette\">The color palette to quantize to.</param>\n    ///<remarks>\n    ///This quantization method only requires a single quantization step when a palette is provided.\n    ///</remarks>\n    public PaletteQuantizer(ArrayList palette = null) : base(palette != null)\n    {\n        if (palette == null)\n            return;\n\n        Colors = new List<Color>(palette.Cast<Color>());\n    }\n\n\n    ///<summary>\n    ///Override this to process the pixel in the second pass of the algorithm.\n    ///</summary>\n    ///<param name=\"pixel\">The pixel to quantize</param>\n    ///<returns>The quantized value</returns>\n    protected override byte QuantizePixel(Color pixel)\n    {\n        byte colorIndex = 0;\n        var leastDistance = int.MaxValue;\n\n        //Loop through the entire palette, looking for the closest color match.\n        for (var index = 0; index < ColorTable.Count; index++)\n        {\n            var paletteColor = ColorTable[index];\n\n            var redDistance = paletteColor.R - pixel.R;\n            var greenDistance = paletteColor.G - pixel.G;\n            var blueDistance = paletteColor.B - pixel.B;\n\n            var distance = (redDistance * redDistance) +\n                           (greenDistance * greenDistance) +\n                           (blueDistance * blueDistance);\n\n            if (distance < leastDistance)\n            {\n                colorIndex = (byte)index;\n                leastDistance = distance;\n\n                //And if it's an exact match, exit the loop.\n                if (0 == distance)\n                    break;\n            }\n        }\n\n        return colorIndex;\n    }\n\n    ///<summary>\n    ///Retrieve the palette for the quantized image\n    ///</summary>\n    ///<returns>The new color palette</returns>\n    internal override List<Color> BuildPalette()\n    {\n        return Colors;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/Encoder/Quantization/Quantizer.cs",
    "content": "using System.Collections;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification.Gif.Encoder.Quantization;\n\npublic abstract class Quantizer\n{\n    /// <summary>\n    /// Flag used to indicate whether a single pass or two passes are needed for quantization.\n    /// </summary>\n    private readonly bool _singlePass;\n\n    /// <summary>\n    /// Lookup table that holds the already calculated indexes for the colors.\n    /// </summary>\n    private readonly Hashtable _colorMap = new();\n\n\n    /// <summary>\n    /// The image depth.\n    /// </summary>\n    public int Depth { get; set; } = 4;\n\n    /// <summary>\n    /// The maximum color count.\n    /// </summary>\n    public int MaxColors { get; set; } = 256;\n\n    /// <summary>\n    /// The maximum color count, without counting with the transparent color.\n    /// </summary>\n    public int MaxColorsWithTransparency { get; set; }\n\n    /// <summary>\n    /// The calculated color table of the image.\n    /// </summary>\n    public List<Color> ColorTable { get; set; }\n\n    /// <summary>\n    /// The color marked as transparent.\n    /// </summary>\n    public Color? TransparentColor { get; set; }\n\n    /// <summary>\n    /// TODO: The index of the transparent color.\n    /// Not always MaxColors - 1, since the color table size is ^2 (...64, 128, 256).\n    /// When the user selects a value that doesn't fit nicely in one of those spots (like 200), we can avoid wasting one color position.\n    /// </summary>\n    public byte TransparentColorIndex \n    { \n        get \n        {\n            var max = TransparentColor.HasValue ? MaxColors - 1 : MaxColors;\n\n            //?\n            return 0;\n        }\n    }\n\n\n    protected Quantizer(bool singlePass)\n    {\n        _singlePass = singlePass;\n    }\n\n    public byte[] Quantize(byte[] pixels, bool secondPassOnly = false)\n    {\n        #region Validation\n\n        if (MaxColors < 2 || MaxColors > 256)\n            throw new ArgumentOutOfRangeException(nameof(MaxColors), MaxColors, \"The number of colors should be between 2 and 256\");\n\n        #endregion\n\n        //When using a global color table, the analysis should not be executed again. \n        if (!secondPassOnly)\n        {\n            if (!_singlePass)\n                FirstPass(pixels);\n\n            ColorTable = BuildPalette();\n        }\n\n        return SecondPass(pixels);\n    }\n\n    /// <summary>\n    /// Execute the first pass through the pixels in the image\n    /// </summary>\n    /// <param name=\"pixels\">The source data</param>\n    internal virtual void FirstPass(byte[] pixels)\n    {\n        for (var i = 0; i < pixels.Length; i += Depth)\n            InitialQuantizePixel(Color.FromArgb(pixels[i + 3], pixels[i + 2], pixels[i + 1], pixels[i])); //Pixels are in BGR.\n    }\n\n    internal List<Color> GetPalette()\n    {\n        return ColorTable = BuildPalette();\n    }\n\n    internal virtual byte[] ParallelSecondPass(byte[] pixels)\n    {\n        var output = new byte[pixels.Length / Depth];\n\n        Parallel.For(0, pixels.Length / Depth, index =>\n        {\n            var trueIndex = index * Depth;\n\n            //Transparent pixels translate to the end of the color table.\n            if (pixels[trueIndex + 3] == 0)\n            {\n                output[index] = (byte)(ColorTable.Count - 1);\n                return;\n            }\n\n            var pixel = new Color\n            {\n                B = pixels[trueIndex],\n                G = pixels[trueIndex + 1],\n                R = pixels[trueIndex + 2],\n                A = pixels[trueIndex + 3]\n            };\n\n            //lock (output)\n            {\n                var hash = BitConverter.ToInt32(new[] { byte.MaxValue, pixel.R, pixel.G, pixel.B }, 0);\n\n                if (_colorMap.ContainsKey(hash))\n                {\n                    output[index] = (byte)_colorMap[hash];\n                    return;\n                }\n\n                var position = QuantizePixel(pixel);\n\n                output[index] = position;\n                _colorMap.Add(hash, position);\n            }\n        });\n\n        return output;\n\n        //var output = new List<byte>();\n        //\n        //for (var index = 0; index < pixels.Length; index += Depth)\n        //{\n        //    //Transparent pixels translate to the end of the color table.\n        //    if (pixels[index + 3] == 0)\n        //    {\n        //        output.Add((byte)(ColorTable.Count - 1));\n        //        continue;\n        //    }\n\n        //    var pixel = new Color\n        //    {\n        //        B = pixels[index], \n        //        G = pixels[index + 1], \n        //        R = pixels[index + 2], \n        //        A = pixels[index + 3]\n        //    };\n\n        //    var hash = BitConverter.ToInt32(new[] { byte.MaxValue, pixel.R, pixel.G, pixel.B }, 0);\n\n        //    if (_colorMap.ContainsKey(hash))\n        //    {\n        //        output.Add((byte) _colorMap[hash]);\n        //        continue;\n        //    }\n\n        //    var position = QuantizePixel(pixel);\n\n        //    output.Add(position);\n        //    _colorMap.Add(hash, position);\n        //}\n        //\n        //return output.ToArray();\n    }\n\n    internal virtual byte[] SecondPass(byte[] pixels)\n    {\n        var output = new List<byte>();\n\n        for (var index = 0; index < pixels.Length; index += Depth)\n        {\n            //Transparent pixels translate to the end of the color table.\n            if (pixels[index + 3] == 0)\n            {\n                output.Add((byte)(ColorTable.Count - 1));\n                continue;\n            }\n\n            var pixel = new Color\n            {\n                B = pixels[index],\n                G = pixels[index + 1],\n                R = pixels[index + 2],\n                A = pixels[index + 3]\n            };\n\n            var hash = BitConverter.ToInt32(new[] { byte.MaxValue, pixel.R, pixel.G, pixel.B }, 0);\n\n            if (_colorMap.ContainsKey(hash))\n            {\n                output.Add((byte)_colorMap[hash]);\n                continue;\n            }\n\n            var position = QuantizePixel(pixel);\n\n            output.Add(position);\n            _colorMap.Add(hash, position);\n        }\n\n        return output.ToArray();\n    }\n\n\n    /// <summary>\n    /// Override this to process the pixel in the first pass of the algorithm\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize</param>\n    /// <remarks>\n    /// This function need only be overridden if your quantize algorithm needs two passes,\n    /// such as an Octree quantizer.\n    /// </remarks>\n    protected virtual void InitialQuantizePixel(Color pixel) { }\n\n    /// <summary>\n    /// Override this to process the pixel in the second pass of the algorithm\n    /// </summary>\n    /// <param name=\"pixel\">The pixel to quantize</param>\n    /// <returns>The quantized value</returns>\n    protected abstract byte QuantizePixel(Color pixel);\n\n    /// <summary>\n    /// Retrieve the palette for the quantized image\n    /// </summary>\n    /// <returns>The new color palette</returns>\n    internal abstract List<Color> BuildPalette();\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/LegacyEncoder/GifEncoder.cs",
    "content": "using System.Drawing;\nusing System.Drawing.Imaging;\nusing System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.LegacyEncoder;\n\n/// <summary>\n/// Encodes multiple images as an animated gif to a stream. <br />\n/// ALWAYS wire this up in a \"using\" block <br />\n/// Disposing the encoder will complete the file. <br />\n/// Uses default .net GIF encoding and adds animation headers.\n/// </summary>\npublic sealed class GifEncoder : IDisposable\n{\n    #region Header Constants\n\n    private const string FileType = \"GIF\";\n\n    private const string FileVersion = \"89a\";\n\n    private const byte FileTrailer = 0x3b;\n\n    private const int ApplicationExtensionBlockIdentifier = 0xff21;\n\n    private const byte ApplicationBlockSize = 0x0b;\n\n    private const string ApplicationIdentification = \"NETSCAPE2.0\";\n\n    private const int GraphicControlExtensionBlockIdentifier = 0xf921;\n\n    private const byte GraphicControlExtensionBlockSize = 0x04;\n\n    private const long SourceGlobalColorInfoPosition = 10;\n\n    private const long SourceGraphicControlExtensionPosition = 781;\n\n    private const long SourceGraphicControlExtensionLength = 8;\n\n    private const long SourceImageBlockPosition = 789;\n\n    private const long SourceImageBlockHeaderLength = 11;\n\n    private const long SourceColorBlockPosition = 13;\n\n    private const long SourceColorBlockLength = 768;\n\n    #endregion\n\n    private bool _isFirstImage = true;\n\n    private int? _width;\n\n    private int? _height;\n\n    private int? _repeatCount;\n\n    private readonly Stream _stream;\n\n    /// <summary>\n    /// Frame delay for the frame.\n    /// </summary>\n    public TimeSpan FrameDelay { get; set; }\n\n    /// <summary>\n    /// Encodes multiple images as an animated gif to a stream. <br />\n    /// ALWAYS wire this in a using block <br />\n    /// Disposing the encoder will complete the file. <br />\n    /// Uses default .net GIF encoding and adds animation headers.\n    /// </summary>\n    /// <param name=\"stream\">The stream that will be written to.</param>\n    /// <param name=\"width\">Sets the width for this gif or null to use the first frame's width.</param>\n    /// <param name=\"height\">Sets the height for this gif or null to use the first frame's height.</param>\n    /// <param name=\"repeatCount\">The repeat count of the animation</param>\n    public GifEncoder(Stream stream, int? width = null, int? height = null, int? repeatCount = null)\n    {\n        _stream = stream;\n        _width = width;\n        _height = height;\n        _repeatCount = repeatCount;\n    }\n\n    /// <summary>\n    /// Adds a frame to this animation.\n    /// </summary>\n    /// <param name=\"img\">The image to add</param>\n    /// <param name=\"x\">The positioning x offset this image should be displayed at.</param>\n    /// <param name=\"y\">The positioning y offset this image should be displayed at.</param>\n    /// <param name=\"frameDelay\">The delay of the redraw of the next frame.</param>\n    public void AddFrame(Image img, int x = 0, int y = 0, TimeSpan? frameDelay = null)\n    {\n        using (var gifStream = new MemoryStream())\n        {\n            img.Save(gifStream, ImageFormat.Gif);\n\n            if (_isFirstImage) //Steal the global color table info\n                InitHeader(gifStream, img.Width, img.Height);\n\n            WriteGraphicControlBlock(gifStream, frameDelay.GetValueOrDefault(FrameDelay));\n            WriteImageBlock(gifStream, !_isFirstImage, x, y, img.Width, img.Height);\n        }\n\n        _isFirstImage = false;\n    }\n\n    private void InitHeader(Stream sourceGif, int w, int h)\n    {\n        // File Header\n        WriteString(FileType);\n        WriteString(FileVersion);\n        WriteShort(_width.GetValueOrDefault(w)); // Initial Logical Width\n        WriteShort(_height.GetValueOrDefault(h)); // Initial Logical Height\n\n        sourceGif.Position = SourceGlobalColorInfoPosition;\n        WriteByte(sourceGif.ReadByte()); // Global Color Table Info\n        WriteByte(0); // Background Color Index\n        WriteByte(0); // Pixel aspect ratio\n        WriteColorTable(sourceGif);\n\n        if (_repeatCount < 0)\n            return;\n\n        //App Extension Header\n        WriteShort(ApplicationExtensionBlockIdentifier);\n        WriteByte(ApplicationBlockSize);\n        WriteString(ApplicationIdentification);\n        WriteByte(3); // Application block length\n        WriteByte(1);\n        WriteShort(_repeatCount.GetValueOrDefault(0)); // Repeat count for images.\n        WriteByte(0); // terminator\n    }\n\n    private void WriteColorTable(Stream sourceGif)\n    {\n        sourceGif.Position = SourceColorBlockPosition; // Locating the image color table\n        var colorTable = new byte[SourceColorBlockLength];\n\n        sourceGif.Read(colorTable, 0, colorTable.Length);\n        _stream.Write(colorTable, 0, colorTable.Length);\n    }\n\n    private void WriteGraphicControlBlock(Stream sourceGif, TimeSpan frameDelay)\n    {\n        sourceGif.Position = SourceGraphicControlExtensionPosition; // Locating the source GCE\n        var blockhead = new byte[SourceGraphicControlExtensionLength];\n        sourceGif.Read(blockhead, 0, blockhead.Length); // Reading source GCE\n\n        WriteShort(GraphicControlExtensionBlockIdentifier); // Identifier\n        WriteByte(GraphicControlExtensionBlockSize); // Block Size\n        WriteByte(blockhead[3] & 0xf7 | 0x08); // Setting disposal flag\n        WriteShort(Convert.ToUInt16(frameDelay.TotalMilliseconds / 10)); // Setting frame delay\n        WriteByte(blockhead[6]); // Transparent color index\n        WriteByte(0); // Terminator\n    }\n\n    private void WriteImageBlock(Stream sourceGif, bool includeColorTable, int x, int y, int h, int w)\n    {\n        sourceGif.Position = SourceImageBlockPosition; // Locating the image block\n        var header = new byte[SourceImageBlockHeaderLength];\n        sourceGif.Read(header, 0, header.Length);\n\n        WriteByte(header[0]); // Separator\n        WriteShort(x); // Position X\n        WriteShort(y); // Position Y\n        WriteShort(h); // Height\n        WriteShort(w); // Width\n\n        if (includeColorTable) // If first frame, use global color table - else use local\n        {\n            sourceGif.Position = SourceGlobalColorInfoPosition;\n            WriteByte(sourceGif.ReadByte() & 0x3f | 0x80); // Enabling local color table\n            WriteColorTable(sourceGif);\n        }\n        else\n        {\n            WriteByte(header[9] & 0x07 | 0x07); // Disabling local color table\n        }\n\n        WriteByte(header[10]); // LZW Min Code Size\n\n        // Read/Write image data\n        sourceGif.Position = SourceImageBlockPosition + SourceImageBlockHeaderLength;\n\n        var dataLength = sourceGif.ReadByte();\n        while (dataLength > 0)\n        {\n            var imgData = new byte[dataLength];\n            sourceGif.Read(imgData, 0, dataLength);\n\n            _stream.WriteByte(Convert.ToByte(dataLength));\n            _stream.Write(imgData, 0, dataLength);\n            dataLength = sourceGif.ReadByte();\n        }\n\n        _stream.WriteByte(0); // Terminator\n    }\n\n    private void WriteByte(int value)\n    {\n        _stream.WriteByte(Convert.ToByte(value));\n    }\n\n    private void WriteShort(int value)\n    {\n        _stream.WriteByte(Convert.ToByte(value & 0xff));\n        _stream.WriteByte(Convert.ToByte((value >> 8) & 0xff));\n    }\n\n    private void WriteString(string value)\n    {\n        _stream.Write(value.ToArray().Select(c => (byte)c).ToArray(), 0, value.Length);\n    }\n\n    void IDisposable.Dispose()\n    {\n        // Complete Application Block\n        //WriteByte(0);\n\n        // Complete File\n        WriteByte(FileTrailer);\n        // Pushing data\n        _stream.Flush();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/LegacyEncoder/LZWEncoder.cs",
    "content": "#region Java Disclaimer\n//  Adapted from Jef Poskanzer's Java port by way of J. M. G. Elliott.\n//  K Weiner 12/00\n#endregion\n\n#region C Disclaimer\n\n// GIFCOMPR.C       - GIF Image compression routines\n//\n// Lempel-Ziv compression based on 'compress'.  GIF modifications by\n// David Rowley (mgardi@watdcsu.waterloo.edu)\n\n// GIF Image compression - modified 'compress'\n//\n// Based on: compress.c - File compression ala IEEE Computer, June 1984.\n//\n// By Authors:  Spencer W. Thomas      (decvax!harpo!utah-cs!utah-gr!thomas)\n//              Jim McKie              (decvax!mcvax!jim)\n//              Steve Davies           (decvax!vax135!petsd!peora!srd)\n//              Ken Turkowski          (decvax!decwrl!turtlevax!ken)\n//              James A. Woods         (decvax!ihnp4!ames!jaw)\n//              Joe Orost              (decvax!vax135!petsd!joe)\n\n#endregion\n\nusing System.IO;\n\nnamespace ScreenToGif.Util.Codification.Gif.LegacyEncoder;\n\n/// <summary>\n/// Image compression routines.\n/// </summary>\npublic class LzwEncoder\n{\n    #region Variables\n\n    /// <summary>\n    /// End of File.\n    /// </summary>\n    private const int Eof = -1;\n\n    private readonly int _imgW;\n    private readonly int _imgH;\n    private readonly byte[] _pixAry;\n    private readonly int _initCodeSize;\n    //private int _remaining;\n    private int _curPixel;\n\n    private const int Bits = 12;\n\n    /// <summary>\n    /// 80% occupancy.\n    /// </summary>\n    private const int HSize = 5003;\n\n    /// <summary>\n    /// Number of bits/code.\n    /// </summary>\n    int _numBits;\n\n    /// <summary>\n    /// User settable max # bits/code.\n    /// </summary>\n    readonly int _maxBits = Bits;\n\n    /// <summary>\n    /// Maximum code, given n_bits.\n    /// </summary>\n    int _maxCode;\n\n    /// <summary>\n    /// Should NEVER generate this code\n    /// </summary>\n    private const int MaxMaxCode = 1 << Bits;\n\n    int[] htab = new int[HSize];\n    readonly int[] _codeTab = new int[HSize];\n\n    /// <summary>\n    /// For dynamic table sizing.\n    /// </summary>\n    private int _hSize = HSize;\n\n    /// <summary>\n    /// First unused entry\n    /// </summary>\n    int _freeEntry = 0;\n\n    // block compression parameters -- after all codes are used up,\n    // and compression rate changes, start over.\n    bool clear_flg = false;\n\n    // Algorithm:  use open addressing double hashing (no chaining) on the\n    // prefix code / next character combination.  We do a variant of Knuth's\n    // algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime\n    // secondary probe.  Here, the modular division first probe is gives way\n    // to a faster exclusive-or manipulation.  Also do block compression with\n    // an adaptive reset, whereby the code table is cleared when the compression\n    // ratio decreases, but after the table fills.  The variable-length output\n    // codes are re-sized at this point, and a special CLEAR code is generated\n    // for the decompressor.  Late addition:  construct the table according to\n    // file size for noticeable speed improvement on small files.  Please direct\n    // questions about this implementation to ames!jaw.\n\n    int g_init_bits;\n\n    int ClearCode;\n    int EOFCode;\n\n    // output\n    //\n    // Output the given code.\n    // Inputs:\n    //      code:   A n_bits-bit integer.  If == -1, then EOF.  This assumes\n    //              that n_bits =< wordsize - 1.\n    // Outputs:\n    //      Outputs code to the file.\n    // Assumptions:\n    //      Chars are 8 bits long.\n    // Algorithm:\n    //      Maintain a BITS character long buffer (so that 8 codes will\n    // fit in it exactly).  Use the VAX insv instruction to insert each\n    // code in turn.  When the buffer fills up empty it and start over.\n\n    int cur_accum = 0;\n    int cur_bits = 0;\n\n    int[] masks =\n    {\n        0x0000,\n        0x0001,\n        0x0003,\n        0x0007,\n        0x000F,\n        0x001F,\n        0x003F,\n        0x007F,\n        0x00FF,\n        0x01FF,\n        0x03FF,\n        0x07FF,\n        0x0FFF,\n        0x1FFF,\n        0x3FFF,\n        0x7FFF,\n        0xFFFF };\n\n    /// <summary>\n    /// Number of characters so far in this 'packet'.\n    /// </summary>\n    int _charCount;\n\n    /// <summary>\n    /// Define the storage for the packet accumulator.\n    /// </summary>\n    readonly byte[] _accumulator = new byte[256];\n\n    #endregion\n\n    /// <summary>\n    /// Constructor of the compression class.\n    /// </summary>\n    /// <param name=\"width\">The image Width</param>\n    /// <param name=\"height\">The image Height</param>\n    /// <param name=\"pixels\">All the pixels</param>\n    /// <param name=\"colorDepth\">The Color depth of the image</param>\n    public LzwEncoder(int width, int height, byte[] pixels, int colorDepth)\n    {\n        //_imgW = width;\n        //_imgH = height;\n        _pixAry = pixels;\n        _initCodeSize = Math.Max(2, colorDepth);\n    }\n\n    /// <summary>\n    /// Add a character to the end of the current packet, and if it is 254 characters, flush the packet to disk.\n    /// </summary>\n    /// <param name=\"c\"></param>\n    /// <param name=\"outs\"></param>\n    private void Add(byte c, Stream outs)\n    {\n        _accumulator[_charCount++] = c;\n\n        if (_charCount >= 254)\n            Flush(outs);\n    }\n\n    /// <summary>\n    /// Clear out the hash table for block compress.\n    /// </summary>\n    /// <param name=\"outs\"></param>\n    private void ClearTable(Stream outs)\n    {\n        ResetCodeTable(_hSize);\n        _freeEntry = ClearCode + 2;\n        clear_flg = true;\n\n        Output(ClearCode, outs);\n    }\n\n    /// <summary>\n    /// Reset code table.\n    /// </summary>\n    /// <param name=\"hsize\"></param>\n    private void ResetCodeTable(int hsize)\n    {\n        for (int i = 0; i < hsize; ++i)\n            htab[i] = -1;\n    }\n\n    private void Compress(int initBits, Stream outs)\n    {\n        int fcode;\n        int c;\n\n        //Set up the globals:  g_init_bits - initial number of bits\n        g_init_bits = initBits;\n\n        //Set up the necessary values\n        clear_flg = false;\n        _numBits = g_init_bits;\n        _maxCode = MaxCode(_numBits);\n\n        ClearCode = 1 << (initBits - 1);\n        EOFCode = ClearCode + 1;\n        _freeEntry = ClearCode + 2;\n\n        _charCount = 0; //Clear packet\n\n        var ent = NextPixel();\n\n        var hshift = 0;\n        for (fcode = _hSize; fcode < 65536; fcode *= 2)\n            ++hshift;\n\n        hshift = 8 - hshift; // set hash code range bound\n\n        var hsizeReg = _hSize;\n        ResetCodeTable(hsizeReg); // clear hash table\n\n        Output(ClearCode, outs);\n\n        outer_loop: //OMG, a GOTO label.\n        while ((c = NextPixel()) != Eof)\n        {\n            fcode = (c << _maxBits) + ent;\n            var i = (c << hshift) ^ ent;\n\n            if (htab[i] == fcode)\n            {\n                ent = _codeTab[i];\n                continue;\n            }\n\n            if (htab[i] >= 0)\n            {\n                #region If it is a non-empty slot\n\n                var disp = hsizeReg - i;\n                if (i == 0)\n                    disp = 1;\n                do\n                {\n                    if ((i -= disp) < 0)\n                        i += hsizeReg;\n\n                    if (htab[i] == fcode)\n                    {\n                        ent = _codeTab[i];\n                        goto outer_loop;\n                    }\n                } while (htab[i] >= 0);\n\n                #endregion\n            }\n\n            Output(ent, outs);\n            ent = c;\n\n            if (_freeEntry < MaxMaxCode)\n            {\n                _codeTab[i] = _freeEntry++; // code -> hashtable\n                htab[i] = fcode;\n            }\n            else\n                ClearTable(outs);\n        }\n\n        //Put out the final code.\n        Output(ent, outs);\n        Output(EOFCode, outs);\n    }\n\n    /// <summary>\n    /// Write all data into Stream.\n    /// </summary>\n    /// <param name=\"os\">The Stream to write.</param>\n    public void Encode(Stream os)\n    {\n        os.WriteByte(Convert.ToByte(_initCodeSize)); //Write \"initial code size\" byte\n\n        //_remaining = _imgW * _imgH; //Reset navigation variables\n        _curPixel = 0;\n\n        Compress(_initCodeSize + 1, os); //Compress and write the pixel data\n\n        os.WriteByte(0); //Write block terminator\n    }\n\n    /// <summary>\n    /// Flush the packet to disk, and reset the accumulator\n    /// </summary>\n    /// <param name=\"outs\">The Stream</param>\n    void Flush(Stream outs)\n    {\n        if (_charCount > 0)\n        {\n            outs.WriteByte(Convert.ToByte(_charCount));\n            outs.Write(_accumulator, 0, _charCount);\n            _charCount = 0;\n        }\n    }\n\n    int MaxCode(int numBits)\n    {\n        return (1 << numBits) - 1;\n    }\n\n    /// <summary>\n    /// Return the next pixel from the image.\n    /// </summary>\n    /// <returns>The next pixel index(?).</returns>\n    private int NextPixel()\n    {\n        #region Old Code\n\n        //if (remaining == 0)\n        //    return EOF;\n\n        //--remaining;\n\n        //int temp = curPixel + 1;\n        //if ( temp < pixAry.GetUpperBound( 0 ))\n        //{\n        //    byte pix = pixAry[curPixel++];\n\n        //    return pix & 0xff;\n        //}\n        //return 0xff;\n\n        #endregion\n\n        if (_curPixel <= _pixAry.GetUpperBound(0))\n        {\n            byte pix = _pixAry[_curPixel++];\n            return pix & 0xff;\n        }\n\n        return Eof;\n    }\n\n    void Output(int code, Stream outs)\n    {\n        cur_accum &= masks[cur_bits];\n\n        if (cur_bits > 0)\n            cur_accum |= (code << cur_bits);\n        else\n            cur_accum = code;\n\n        cur_bits += _numBits;\n\n        while (cur_bits >= 8)\n        {\n            Add((byte)(cur_accum & 0xff), outs);\n            cur_accum >>= 8;\n            cur_bits -= 8;\n        }\n\n        // If the next entry is going to be too big for the code size,\n        // then increase it, if possible.\n        if (_freeEntry > _maxCode || clear_flg)\n        {\n            if (clear_flg)\n            {\n                _maxCode = MaxCode(_numBits = g_init_bits);\n                clear_flg = false;\n            }\n            else\n            {\n                ++_numBits;\n\n                _maxCode = _numBits == _maxBits ? \n                    MaxMaxCode : \n                    MaxCode(_numBits);\n            }\n        }\n\n        if (code == EOFCode)\n        {\n            // At EOF, write the rest of the buffer. 8 bits each time.\n            while (cur_bits > 0)\n            {\n                Add((byte)(cur_accum & 0xff), outs);\n                cur_accum >>= 8; \n                cur_bits -= 8;\n            }\n\n            Flush(outs);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Gif/LegacyEncoder/PixelUtilOld.cs",
    "content": "using System.Drawing;\nusing System.Drawing.Imaging;\nusing System.Runtime.InteropServices;\nusing Color = System.Drawing.Color;\nusing PixelFormat = System.Drawing.Imaging.PixelFormat;\n\nnamespace ScreenToGif.Util.Codification.Gif.LegacyEncoder;\n\n/// <summary>\n/// Helper Class that gets and sets image pixels using Marshal calls. \n/// Uses old System.Drawing classes.\n/// </summary>\npublic class PixelUtilOld\n{\n    #region Variables and Properties\n\n    private readonly Bitmap _source = null;\n    private BitmapData _bitmapData = null;\n\n    /// <summary>\n    /// Gets or sets the address of the first pixel data in the bitmap. This can also be thought of as the first scan line in the bitmap.\n    /// </summary>\n    /// <returns>\n    /// The address of the first pixel data in the bitmap.\n    /// </returns>\n    public IntPtr Scan0 { get; set; } = IntPtr.Zero;\n\n    /// <summary>\n    /// Byte Array containing all pixel information.\n    /// </summary>\n    public byte[] Pixels { get; set; }\n\n    /// <summary>\n    /// Color depth.\n    /// </summary>\n    public int Depth { get; private set; }\n\n    /// <summary>\n    /// Width of the image.\n    /// </summary>\n    public int Width { get; private set; }\n\n    /// <summary>\n    /// Height of the image.\n    /// </summary>\n    public int Height { get; private set; }\n\n    #endregion\n\n    /// <summary>\n    /// Pixel marshalling class, use this to access pixels rapidly.\n    /// </summary>\n    /// <param name=\"source\">The Bitmap to work with.</param>\n    public PixelUtilOld(Bitmap source)\n    {\n        _source = source;\n    }\n\n    /// <summary>\n    /// Lock bitmap data.\n    /// </summary>\n    public void LockBits()\n    {\n        // Get width and height of bitmap\n        Width = _source.Width;\n        Height = _source.Height;\n\n        // Get total locked pixels count\n        var pixelCount = Width * Height;\n\n        // Create rectangle to lock\n        var rect = new Rectangle(0, 0, Width, Height);\n\n        // get source bitmap pixel format size\n        Depth = Image.GetPixelFormatSize(_source.PixelFormat);\n\n        // Check if bpp (Bits Per Pixel) is 8, 24, or 32\n        if (Depth != 8 && Depth != 24 && Depth != 32)\n            throw new ArgumentException(\"Only 8, 24 and 32 bpp images are supported.\");\n\n        // Lock bitmap and return bitmap data\n        _bitmapData = _source.LockBits(rect, ImageLockMode.ReadWrite, _source.PixelFormat);\n\n        // Create byte array to copy pixel values\n        var step = Depth / 8;\n        Pixels = new byte[pixelCount * step];\n        Scan0 = _bitmapData.Scan0;\n\n        // Copy data from pointer to array\n        Marshal.Copy(Scan0, Pixels, 0, Pixels.Length);\n    }\n\n    /// <summary>\n    /// Unlock bitmap data\n    /// </summary>\n    public void UnlockBits()\n    {\n        // Copy data from byte array to pointer\n        Marshal.Copy(Pixels, 0, Scan0, Pixels.Length);\n\n        // Unlock bitmap data\n        _source.UnlockBits(_bitmapData);\n    }\n\n    /// <summary>\n    /// Get the color of the specified pixel\n    /// </summary>\n    /// <param name=\"x\"></param>\n    /// <param name=\"y\"></param>\n    /// <returns></returns>\n    public Color GetPixel(int x, int y)\n    {\n        var clr = Color.Empty;\n\n        // Get color components count\n        var cCount = Depth / 8;\n\n        // Get start index of the specified pixel\n        var i = (y * Width + x) * cCount;\n\n        if (i > Pixels.Length - cCount)\n            return Color.Transparent; //throw new IndexOutOfRangeException();\n\n        if (Depth == 32) //For 32 bpp get Red, Green, Blue and Alpha\n        {\n            var b = Pixels[i];\n            var g = Pixels[i + 1];\n            var r = Pixels[i + 2];\n            var a = Pixels[i + 3]; // a\n            clr = Color.FromArgb(a, r, g, b);\n        }\n\n        if (Depth == 24) //For 24 bpp get Red, Green and Blue\n        {\n            var b = Pixels[i];\n            var g = Pixels[i + 1];\n            var r = Pixels[i + 2];\n            clr = Color.FromArgb(r, g, b);\n        }\n\n        if (Depth == 8) //For 8 bpp get color value (Red, Green and Blue values are the same)\n        {\n            var c = Pixels[i];\n            clr = Color.FromArgb(c, c, c);\n        }\n\n        return clr;\n    }\n\n    /// <summary>\n    /// Set the color of the specified pixel\n    /// </summary>\n    /// <param name=\"x\">X axis.</param>\n    /// <param name=\"y\">Y axis.</param>\n    /// <param name=\"color\">The color to be painted.</param>\n    public void SetPixel(int x, int y, Color color)\n    {\n        //Get color components count\n        var cCount = Depth / 8;\n\n        //Get start index of the specified pixel\n        var i = (y * Width + x) * cCount;\n\n        //Ignore if out of bounds.\n        if (i > Pixels.Length - cCount)\n            return;\n\n        if (Depth == 32) //For 32 bpp set Red, Green, Blue and Alpha\n        {\n            Pixels[i] = color.B;\n            Pixels[i + 1] = color.G;\n            Pixels[i + 2] = color.R;\n            Pixels[i + 3] = color.A;\n        }\n\n        if (Depth == 24) //For 24 bpp set Red, Green and Blue\n        {\n            Pixels[i] = color.B;\n            Pixels[i + 1] = color.G;\n            Pixels[i + 2] = color.R;\n        }\n\n        if (Depth == 8) //For 8 bpp set color value (Red, Green and Blue values are the same)\n        {\n            Pixels[i] = color.B;\n        }\n    }\n\n    /// <summary>\n    /// Load a line from the image into the provided buffer.\n    /// </summary>\n    /// <param name=\"source\">The image source.</param>\n    /// <param name=\"pixelFormat\">The format of the pixel that will be written to the buffer.</param>\n    /// <param name=\"line\">The line index to read.</param>\n    /// <param name=\"buffer\">Buffer to write to.</param>\n    public static void ReadLine(Bitmap source, PixelFormat pixelFormat, int line, int[] buffer)\n    {\n        var lockRectangle = new Rectangle(0, line, source.Width, 1);\n\n        var lockBits = source.LockBits(lockRectangle, ImageLockMode.ReadOnly, pixelFormat);\n\n        Marshal.Copy(lockBits.Scan0, buffer, 0, lockBits.Stride / sizeof(int));\n\n        source.UnlockBits(lockBits);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/PixelUtil.cs",
    "content": "using System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Codification;\n\n/// <summary>\n/// Helper Class that gets and sets image pixels using Marshal calls.\n/// </summary>\npublic class PixelUtil\n{\n    #region Variables and Properties\n\n    private readonly BitmapSource _source = null;\n    private WriteableBitmap _data = null;\n\n    public IntPtr BackBuffer { get; set; } = IntPtr.Zero;\n\n    /// <summary>\n    /// Byte Array containing all pixel information.\n    /// </summary>\n    public byte[] Pixels { get; set; }\n\n    /// <summary>\n    /// Color depth.\n    /// </summary>\n    public int Depth { get; private set; }\n\n    /// <summary>\n    /// Number of colors per pixel.\n    /// </summary>\n    public int ChannelsPerPixel { get; private set; }\n\n    /// <summary>\n    /// Width of the image.\n    /// </summary>\n    public int Width { get; private set; }\n\n    /// <summary>\n    /// Height of the image.\n    /// </summary>\n    public int Height { get; private set; }\n\n    #endregion\n\n    /// <summary>\n    /// Pixel marshalling class, use this to access pixels rapidly.\n    /// </summary>\n    /// <param name=\"source\">The Bitmap to work with.</param>\n    public PixelUtil(BitmapSource source)\n    {\n        _source = source;\n    }\n\n    /// <summary>\n    /// Lock bitmap data.\n    /// </summary>\n    public void LockBits()\n    {\n        //Get width and height of bitmap.\n        Width = _source.PixelWidth;\n        Height = _source.PixelHeight;\n\n        //Get total locked pixels count.\n        var pixelCount = Width * Height;\n\n        //Get source bitmap pixel format size.\n        Depth = _source.Format.BitsPerPixel;\n        ChannelsPerPixel = Depth / 8;\n\n        if (Depth != 32 && Depth != 24)\n            throw new ArgumentException(\"Only 24 and 32 bpp images are supported.\");\n\n        _data = new WriteableBitmap(_source);\n\n        //Lock bitmap and return bitmap data.\n        _data.Lock();\n\n        /*\n            https://doanvublog.wordpress.com/tag/32bpp/\n            1,4,8 and 16bpp uses a color table.\n\n            1bpp : 1 byte, 8 pixels, 2 colors\n            4bpp : 1 byte, 2 pixels, 16 colors\n            8bpp : 1 byte, 1 pixel, 256 colors\n            16bpp : 2 bytes, 1 pixel\n            24bpp : 3 bytes, 1 pixel\n            32bpp : 4 bytes, 1 pixel\n\n            So, bpp/8 = color chunk size.\n        */\n\n        //Create byte array to copy pixel values.\n        Pixels = new byte[pixelCount * ChannelsPerPixel];\n        BackBuffer = _data.BackBuffer;\n\n        //Copy data from pointer to array.\n        Marshal.Copy(BackBuffer, Pixels, 0, Pixels.Length);\n    }\n\n    public void LockBitsAndUnpad()\n    {\n        //Get width and height of bitmap.\n        Width = _source.PixelWidth;\n        Height = _source.PixelHeight;\n\n        //Get total locked pixels count.\n        var pixelCount = Width * Height;\n\n        //Get source bitmap pixel format size.\n        Depth = _source.Format.BitsPerPixel;\n        ChannelsPerPixel = Depth / 8;\n\n        if (Depth != 32 && Depth != 24)\n            throw new ArgumentException(\"Only 24 and 32 bpp images are supported.\");\n\n        _data = new WriteableBitmap(_source);\n\n        //Lock bitmap and return bitmap data.\n        _data.Lock();\n\n        /*\n            https://doanvublog.wordpress.com/tag/32bpp/\n            1,4,8 and 16bpp uses a color table.\n\n            1bpp : 1 byte, 8 pixels, 2 colors\n            4bpp : 1 byte, 2 pixels, 16 colors\n            8bpp : 1 byte, 1 pixel, 256 colors\n            16bpp : 2 bytes, 1 pixel\n            24bpp : 3 bytes, 1 pixel\n            32bpp : 4 bytes, 1 pixel\n\n            So, bpp/8 = color chunk size.\n        */\n\n        //Adjust to necessary padding.\n        var bytesPerRow = Width * ChannelsPerPixel; \n        var pad = bytesPerRow % 4 != 0 ? 4 - bytesPerRow % 4 : 0;\n\n        //Create byte array to copy pixel values.\n        Pixels = new byte[pixelCount * ChannelsPerPixel];\n        BackBuffer = _data.BackBuffer;\n\n        //Copy data from pointer to array normally, if it has no padding.\n        if (pad == 0)\n        {\n            Marshal.Copy(BackBuffer, Pixels, 0, Pixels.Length);\n            return;\n        }\n\n        //Removes the pad from the pixel array.\n        for (var row = 0; row < Height; row++)\n            Marshal.Copy(new IntPtr(BackBuffer.ToInt64() + row * (bytesPerRow + pad)), Pixels, row * bytesPerRow, bytesPerRow);\n    }\n\n    /// <summary>\n    /// Unlock bitmap data\n    /// </summary>\n    public WriteableBitmap UnlockBits()\n    {\n        //Copy data from byte array to pointer.\n        Marshal.Copy(Pixels, 0, BackBuffer, Pixels.Length);\n\n        //Unlock bitmap data.\n        _data.Unlock();\n\n        GC.Collect(1);\n\n        return _data;\n    }\n\n    public WriteableBitmap UnlockBitsWithoutCommit()\n    {\n        //Unlock bitmap data.\n        _data.Unlock();\n\n        GC.Collect(1);\n\n        return _data;\n    }\n\n    public WriteableBitmap UnlockBitsAndCrop(Int32Rect rect)\n    {\n        #region Crop\n\n        var sourceWidth = _data.PixelWidth;\n        var outputPixels = new byte[rect.Width * rect.Height * ChannelsPerPixel];\n\n        //Create the array of bytes.\n        for (var line = 0; line <= rect.Height - 1; line++)\n        {\n            var sourceIndex = ((rect.Y + line) * sourceWidth + rect.X) * ChannelsPerPixel;\n            var destinationIndex = line * rect.Width * ChannelsPerPixel;\n\n            Array.Copy(Pixels, sourceIndex, outputPixels, destinationIndex, rect.Width * ChannelsPerPixel);\n        }\n\n        #endregion\n\n        //Get the resultant image as WriteableBitmap with specified size.\n        var result = new WriteableBitmap(rect.Width, rect.Height, _source.DpiX, _source.DpiY, _source.Format, _source.Palette);\n        result.Lock();\n\n        //for (var line = 0; line <= rect.Height - 1; line++)\n        //{\n        //    var sourceIndex = ((rect.Y + line) * sourceWidth + rect.X) * blockSize;\n        //    var destinationIndex = line * rect.Width * blockSize;\n\n        //    //Native.MemoryCopy(Marshal.UnsafeAddrOfPinnedArrayElement(outputPixels, destinationIndex), IntPtr.Add(result.BackBuffer, sourceIndex), new UIntPtr((uint) rect.Width * (uint) blockSize));\n\n        //    //Array.Copy(Pixels, sourceIndex, outputPixels, destinationIndex, rect.Width * blockSize);\n        //    //Marshal.Copy(outputPixels, sourceIndex, result.BackBuffer, rect.Width * blockSize); //Errado.\n        //}\n\n        Marshal.Copy(outputPixels, 0, result.BackBuffer, outputPixels.Length);\n\n        result.Unlock();\n        _data.Unlock();\n\n        GC.Collect(1);\n        return result;\n    }\n\n    /// <summary>\n    /// Get the color of the specified pixel\n    /// </summary>\n    /// <param name=\"x\"></param>\n    /// <param name=\"y\"></param>\n    /// <returns></returns>\n    public Color GetPixel(int x, int y)\n    {\n        //Get start index of the specified pixel.\n        var i = (y * Width + x) * ChannelsPerPixel;\n\n        //It needs to have the right amount of pixels left.\n        if (i > Pixels.Length - ChannelsPerPixel)\n            return Colors.Transparent; //throw new IndexOutOfRangeException();\n\n        var clr = Colors.Transparent;\n\n        if (Depth == 32) //For 32 bpp get Red, Green, Blue and Alpha.\n        {\n            var b = Pixels[i];\n            var g = Pixels[i + 1];\n            var r = Pixels[i + 2];\n            var a = Pixels[i + 3]; // a\n            clr = Color.FromArgb(a, r, g, b);\n        }\n        else if (Depth == 24) //For 24 bpp get Red, Green and Blue.\n        {\n            var b = Pixels[i];\n            var g = Pixels[i + 1];\n            var r = Pixels[i + 2];\n            clr = Color.FromRgb(r, g, b);\n        }\n        else if (Depth == 8) //For smaller bpp values, access the Palette.\n        {\n            var index = (int)Pixels[i];\n\n            if (_source.Palette != null)\n                clr = _source.Palette.Colors[index];\n        }\n\n        return clr;\n    }\n\n    public Color GetMedianColor(int xx, int yy, int offsetX, int offsetY)\n    {\n        int r = 0, g = 0, b = 0, mult = 0;\n\n        for (var x = xx; x < offsetX + xx; x++)\n        {\n            for (var y = yy; y < offsetY + yy; y++)\n            {\n                var i = (y * Width + x) * ChannelsPerPixel;\n\n                if (i > Pixels.Length - ChannelsPerPixel)\n                    continue;\n\n                b += Pixels[i];\n                g += Pixels[i + 1];\n                r += Pixels[i + 2];\n                mult++;\n            }\n        }\n\n        return Color.FromArgb(255, (byte)(r / mult), (byte)(g / mult), (byte)(b / mult));\n    }\n\n    public List<Color> GetAllPixels()\n    {\n        var list = new List<Color>();\n\n        //Old way, line by line. This order is very important!!!\n        //for (var y = 0; y < image.PixelHeight; y++)\n        //{\n        //    for (var x = 0; x < image.PixelWidth; x++)\n        //    {\n        //        list.Add(pixelUtil.GetPixel(x, y));\n        //    }\n        //}\n\n        if (Depth == 32) //For 32 bpp get Red, Green, Blue and Alpha\n        {\n            for (var i = 0; i + 3 < Pixels.Length; i += 4)\n                list.Add(new Color { B = Pixels[i], G = Pixels[i + 1], R = Pixels[i + 2], A = Pixels[i + 3] });\n\n            //list = Pixels.Select((x, i) => new { x, i }).GroupBy(x => x.i / 4).Select(g => g.ToList()).Select(g => new Color { B = g[0].x, G = g[1].x, R = g[2].x, A = g[3].x }).ToList();\n            //list = Enumerable.Range(0, Pixels.Length / 4).ToLookup(i => new Color{ B = Pixels[i * 3], G = Pixels[i * 3 + 1], R = Pixels[i * 3 + 2], A = Pixels[i * 3 + 3] }).Cast<Color>().ToList();\n        }\n        else if (Depth == 24) //For 24 bpp get Red, Green and Blue\n        {\n            for (var i = 0; i + 2 < Pixels.Length; i += 3)\n                list.Add(new Color { B = Pixels[i], G = Pixels[i + 1], R = Pixels[i + 2] });\n\n            //list = Pixels.Select((x, i) => new { x, i }).GroupBy(x => x.i / 3).Select(g => g.ToList()).Select(g => new Color { R = g[0].x, G = g[1].x, B = g[2].x }).ToList();\n            //list = Enumerable.Range(0, Pixels.Length / 3).ToLookup(i => new Color { B = Pixels[i * 3], G = Pixels[i * 3 + 1], R = Pixels[i * 3 + 2]}).Cast<Color>().ToList();\n        }\n\n        return list;\n    }\n\n    /// <summary>\n    /// Set the color of the specified pixel\n    /// </summary>\n    public void SetPixel(int x, int y, Color color)\n    {\n        //Get start index of the specified pixel\n        var i = (y * Width + x) * ChannelsPerPixel;\n\n        //Ignore if out of bounds.\n        if (i > Pixels.Length - ChannelsPerPixel)\n            return;\n\n        if (Depth == 32) //For 32 bpp set Red, Green, Blue and Alpha\n        {\n            Pixels[i] = color.B;\n            Pixels[i + 1] = color.G;\n            Pixels[i + 2] = color.R;\n            Pixels[i + 3] = color.A;\n        }\n        else if (Depth == 24) //For 24 bpp set Red, Green and Blue\n        {\n            Pixels[i] = color.B;\n            Pixels[i + 1] = color.G;\n            Pixels[i + 2] = color.R;\n        }\n    }\n\n    public void SetPixel(int x, int y, byte b, byte g, byte r, byte a = 255)\n    {\n        //Get start index of the specified pixel\n        var i = (y * Width + x) * ChannelsPerPixel;\n\n        //Ignore if out of bounds.\n        if (i > Pixels.Length - ChannelsPerPixel)\n            return;\n\n        if (Depth == 32) //For 32 bpp set Red, Green, Blue and Alpha\n        {\n            Pixels[i] = b;\n            Pixels[i + 1] = g;\n            Pixels[i + 2] = r;\n            Pixels[i + 3] = a;\n        }\n        else if (Depth == 24) //For 24 bpp set Red, Green and Blue\n        {\n            Pixels[i] = b;\n            Pixels[i + 1] = g;\n            Pixels[i + 2] = r;\n        }\n    }\n\n    /// <summary>\n    /// Set the color of the specified pixel coordinates by blending the color with a new color.\n    /// </summary>\n    /// <param name=\"x\">X-axis coordinate.</param>\n    /// <param name=\"y\">Y-axis coordinate.</param>\n    /// <param name=\"color\">The new color.</param>\n    /// <param name=\"opacity\">How much of the new color to put on top of the base color.</param>\n    public void SetAndBlendPixel(int x, int y, Color color, double opacity)\n    {\n        //Get start index of the specified pixel\n        var i = (y * Width + x) * ChannelsPerPixel;\n\n        //Ignore if out of bounds.\n        if (i > Pixels.Length - ChannelsPerPixel)\n            return;\n\n        Pixels[i] = (byte)((color.B * opacity) + Pixels[i] * (1 - opacity));\n        Pixels[i + 1] = (byte)((color.G * opacity) + Pixels[i + 1] * (1 - opacity));\n        Pixels[i + 2] = (byte)((color.R * opacity) + Pixels[i + 2] * (1 - opacity));\n\n        if (Depth == 32) //For 32 bpp set Alpha too.\n            Pixels[i + 3] = (byte)((color.A * opacity) + Pixels[i + 3] * (1 - opacity));\n    }\n\n    /// <summary>\n    /// Set the color of the specified pixel coordinates by blending the color with a new color.\n    /// </summary>\n    /// <param name=\"x\">X-axis coordinate.</param>\n    /// <param name=\"y\">Y-axis coordinate.</param>\n    /// <param name=\"b\">Blue</param>\n    /// <param name=\"g\">Gree</param>\n    /// <param name=\"r\">Red</param>\n    /// <param name=\"a\">Alpha</param>\n    /// <param name=\"opacity\">How much of the new color to put on top of the base color.</param>\n    public void SetAndBlendPixel(int x, int y, byte b, byte g, byte r, byte a = 255, double opacity = 1)\n    {\n        //Get start index of the specified pixel\n        var i = (y * Width + x) * ChannelsPerPixel;\n\n        //Ignore if out of bounds.\n        if (i > Pixels.Length - ChannelsPerPixel)\n            return;\n\n        Pixels[i] = (byte)((b * opacity) + Pixels[i] * (1 - opacity));\n        Pixels[i + 1] = (byte)((g * opacity) + Pixels[i + 1] * (1 - opacity));\n        Pixels[i + 2] = (byte)((r * opacity) + Pixels[i + 2] * (1 - opacity));\n\n        if (Depth == 32) //For 32 bpp set Alpha too.\n            Pixels[i + 3] = (byte)((a * opacity) + Pixels[i + 3] * (1 - opacity));\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/AditionalLayers/IAditionalLayerInfo.cs",
    "content": "namespace ScreenToGif.Util.Codification.Psd.AdditionalLayers;\n\ninterface IAdditionalLayerInfo : IPsdContent\n{\n    string Key { get; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/AditionalLayers/IMetadata.cs",
    "content": "namespace ScreenToGif.Util.Codification.Psd.AdditionalLayers;\n\ninterface IMetadata : IAdditionalLayerInfo\n{\n    string Signature { get; }\n\n    bool CopyOnSheetDuplication { get; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/AditionalLayers/Metadata.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Psd.AdditionalLayers;\n\ninternal class Metadata : IAdditionalLayerInfo\n{\n    public string Key { get; } = \"shmd\";\n\n    public List<MetadataContent> MetadataContentList = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                stream.WriteBytes(Encoding.ASCII.GetBytes(Key)); //Additional layer info key, 4 bytes.\n\n                foreach (var metadata in MetadataContentList)\n                    stream.WriteBytes(metadata.Content);\n\n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/AditionalLayers/MetadataContent.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Psd.AdditionalLayers;\n\ninternal class MetadataContent : IAdditionalLayerInfo\n{\n    internal string Signature { get; }\n\n    public string Key { get; }\n\n    internal bool CopyOnSheetDuplication { get; } = true;\n\n    internal string Data { get; }\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                stream.WriteBytes(Encoding.ASCII.GetBytes(Signature)); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(Key)); //Key, 4 bytes.\n                stream.WriteByte((byte)(CopyOnSheetDuplication ? 1: 0)); //Copy on sheet duplication, 1 byte.\n                stream.Position += 3; //Padding 3 bytes.\n\n                var bytes = Encoding.UTF8.GetBytes(Data);\n\n                stream.WriteUInt32((uint)BitHelper.ConvertEndian(bytes.Length)); //Data length, 4 bytes.\n                stream.WriteBytes(bytes);\n                    \n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/Channel.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\ninternal class Channel : IPsdContent\n{\n    public byte[] RawContent { get; }\n\n    public byte[][] RleCompressedContent { get; }\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            if (RleCompressedContent == null)\n                return RawContent;\n\n            using (var stream = new MemoryStream())\n            {\n                //Writes all byte counts for all the scan lines (rows * channels), with each count stored as a two-byte value.\n                foreach (var b in RleCompressedContent)\n                    stream.WriteUInt16(BitHelper.ConvertEndian((ushort)b.Length));\n\n                //Writes down each layer, in planar order: AAA RRR GGG BBB.\n                foreach (var b in RleCompressedContent)\n                    stream.WriteBytes(b);\n\n                return stream.ToArray();\n            }\n        }\n    }\n\n    public Channel(byte[] raw)\n    {\n        RawContent = raw;\n    }\n\n    public Channel(byte[][] content)\n    {\n        RleCompressedContent = content;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/IPsdContent.cs",
    "content": "namespace ScreenToGif.Util.Codification.Psd;\n\ninternal interface IPsdContent\n{\n    /// <summary>\n    /// The total length of the byte array.\n    /// </summary>\n    long Length { get; }\n\n    byte[] Content { get; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/Image.cs",
    "content": "namespace ScreenToGif.Util.Codification.Psd;\n\ninternal class Image : IPsdContent\n{\n    public long Length { get; }\n\n    public byte[] Content { get; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/ImageChannelData.cs",
    "content": "using System.IO;\nusing System.IO.Compression;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\ninternal class ImageChannelData : IPsdContent\n{\n    /// <summary>\n    /// 0 = Raw Data\n    /// 1 = RLE compressed\n    /// 2 = ZIP without prediction\n    /// 3 = ZIP with prediction.\n    /// </summary>\n    internal ushort Encoding { get; set; }\n\n    internal List<Channel> ChannelList { get; set; } = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                foreach (var channel in ChannelList)\n                {\n                    stream.WriteUInt16(BitHelper.ConvertEndian(Encoding)); //Encoding type, 2 bytes.\n                    stream.WriteBytes(channel.Content); //Channel data, XX bytes.                        \n                }\n\n                return stream.ToArray();\n            }\n        }\n    }\n\n    public ImageChannelData(int depth, byte[] pixels, int rows, int columns, bool compress)\n    {\n        Encoding = (ushort)(compress ? 1 : 0);\n\n        var alpha = new List<byte>();\n        var blue = new List<byte>();\n        var green = new List<byte>();\n        var red = new List<byte>();\n\n        if (depth == 32)\n        {\n            for (var i = 0; i < pixels.Length - 3; i += 4)\n            {\n                blue.Add(pixels[i]);        //Blue\n                green.Add(pixels[i + 1]);   //Green\n                red.Add(pixels[i + 2]);     //Red\n                alpha.Add(pixels[i + 3]);   //Alpha\n            }\n        }\n        else //24\n        {\n            for (var i = 0; i < pixels.Length - 2; i += 3)\n            {\n                blue.Add(pixels[i]);        //Blue\n                green.Add(pixels[i + 1]);   //Green\n                red.Add(pixels[i + 2]);     //Red\n                alpha.Add(255);             //Alpha\n            }\n        }\n\n        if (Encoding == 0)\n        {\n            ChannelList.Add(new Channel(alpha.ToArray()));\n            ChannelList.Add(new Channel(red.ToArray()));\n            ChannelList.Add(new Channel(green.ToArray()));\n            ChannelList.Add(new Channel(blue.ToArray()));\n        }\n        else\n        {\n            ChannelList.Add(new Channel(RleCompression(alpha.ToArray(), rows, columns)));\n            ChannelList.Add(new Channel(RleCompression(red.ToArray(), rows, columns)));\n            ChannelList.Add(new Channel(RleCompression(green.ToArray(), rows, columns)));\n            ChannelList.Add(new Channel(RleCompression(blue.ToArray(), rows, columns)));\n        }\n    }\n\n    internal static byte[][] RleCompression(byte[] pixels, int rows, int columns)\n    {\n        var scanlines = new List<byte[]>();\n\n        //For each scanline of this channel.\n        for (var r = 0; r < rows; r++)\n            scanlines.Add(Pack(SubArray(pixels, r * columns, columns)));\n            \n        return scanlines.ToArray();\n    }\n\n    public static byte[] Compress(byte[] buffer)\n    {\n        byte[] compressed;\n        using (var ms = new MemoryStream())\n        {\n            using (var zip = new GZipStream(ms, CompressionMode.Compress, true))\n            {\n                zip.Write(buffer, 0, buffer.Length);\n                zip.Close();\n            }\n\n            ms.Position = 0;\n\n            compressed = new byte[ms.Length];\n            ms.Read(compressed, 0, compressed.Length);\n        }\n\n        //var gzBuffer = new byte[compressed.Length + 4];\n        //Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);\n        //Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);\n        //return gzBuffer;\n\n        return compressed;\n    }\n\n    public static byte[] Compress2(byte[] data)\n    {\n        using (var compressedStream = new MemoryStream())\n        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))\n        {\n            zipStream.Write(data, 0, data.Length);\n            zipStream.Close();\n            return compressedStream.ToArray();\n        }\n    }\n\n    public static byte[] Compress3(byte[] data)\n    {\n        byte[] compressArray = null;\n\n        try\n        {\n            using (var memoryStream = new MemoryStream())\n            {\n                using (var deflateStream = new DeflateStream(memoryStream, CompressionMode.Compress))\n                {\n                    deflateStream.Write(data, 0, data.Length);\n                    deflateStream.Close(); //Must!\n                }\n\n                compressArray = memoryStream.ToArray();\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Error while compressing the channel.\");\n        }\n\n        return compressArray;\n    }\n\n    public static byte[] Decompress(byte[] gzBuffer)\n    {\n        byte[] buffer;\n        using (var ms = new MemoryStream())\n        {\n            var msgLength = BitConverter.ToInt32(gzBuffer, 0);\n            ms.Write(gzBuffer, 4, gzBuffer.Length - 4);\n\n            buffer = new byte[msgLength];\n\n            ms.Position = 0;\n            using (var zip = new GZipStream(ms, CompressionMode.Decompress))\n                zip.Read(buffer, 0, buffer.Length);\n        }\n\n        return buffer;\n    }\n\n    /// <summary> \n    /// Packs the specified byte array using the packbits algorithm. \n    /// </summary> \n    /// <param name=\"source\">The source byte[] to pack.</param> \n    /// <returns>A byte[] array that has been compressed.</returns> \n    public static byte[] Pack(byte[] source)\n    {\n        IList<byte> result = new List<byte>(source.Length);\n        const int maxLength = 127;\n        IList<byte> literals = new List<byte>(maxLength);\n\n        for (var i = 0; i < source.Length; i++)\n        {\n            var current = source[i];\n\n            if (i + 1 != source.Length)\n            {\n                var next = source[i + 1];\n\n                if (next == current)\n                {\n                    AddLiterals(result, literals);\n\n                    var max = i + maxLength >= source.Length ? source.Length - i - 1 : maxLength;\n                    var hitMax = true;\n                    byte runLength = 1;\n\n                    for (var j = 2; j <= max; j++)\n                    {\n                        var run = source[i + j];\n\n                        if (run != current)\n                        {\n                            hitMax = false;\n                            var count = (byte)(0 - runLength);\n                            i = i + j - 1;\n                            result.Add(count);\n                            result.Add(current);\n                            break;\n                        }\n\n                        runLength++;\n                    }\n\n                    if (hitMax)\n                    {\n                        result.Add((byte)(sbyte)(0 - max));\n                        result.Add(current);\n                        i = i + max;\n                    }\n                }\n                else\n                {\n                    literals.Add(current);\n\n                    if (literals.Count == maxLength)\n                        AddLiterals(result, literals);\n                }\n            }\n            else\n            {\n                literals.Add(current);\n                AddLiterals(result, literals);\n            }\n        }\n\n        return result.ToArray();\n    }\n\n    /// <summary> \n    /// Adds the literal run to the result \n    /// </summary> \n    /// <param name=\"result\">The result where the literals should be added.</param> \n    /// <param name=\"literals\">The list of literals that will be appended to the result.</param> \n    private static void AddLiterals(IList<byte> result, IList<byte> literals)\n    {\n        if (literals.Count > 0)\n        {\n            result.Add((byte)(literals.Count - 1));\n\n            foreach (var literal in literals)\n                result.Add(literal);\n        }\n\n        literals.Clear();\n    }\n\n    public static T[] SubArray<T>(T[] data, int index, int length)\n    {\n        T[] result = new T[length];\n        Array.Copy(data, index, result, 0, length);\n        return result;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/ImageData.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\ninternal class ImageData : IPsdContent\n{\n    /// <summary>\n    /// 0 = Raw Data\n    /// 1 = RLE compressed\n    /// 2 = ZIP without prediction\n    /// 3 = ZIP with prediction.\n    /// </summary>\n    internal ushort Encoding { get; set; } = 1;\n\n    internal List<Image> ImageList { get; set; } = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                foreach (var image in ImageList)\n                {\n                    stream.WriteUInt16(BitHelper.ConvertEndian(Encoding)); //Encoding type, 2 bytes.\n                    stream.WriteBytes(image.Content); //Image data, XX bytes.                        \n                }\n\n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/ImageResourceBlocks/AnimationBlock.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Psd.ImageResourceBlocks;\n\ninternal class AnimationBlock : IImageResource\n{\n    public List<int> FrameDelays { get; set; } = new();\n\n    public ushort Identifier { get; set; } = 4000;\n\n    public string Name { get; set; } = \"\";\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"8BIM\")); //Chunk type, 4 bytes.\n                stream.WriteUInt16(BitHelper.ConvertEndian(Identifier)); //Image Resource Id, 2 bytes.\n                stream.WritePascalString(Name); //Image Resource Name, pascal string (length + string + padding).\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)999)); //Unpadded size, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"8BIM\")); //Chunk signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"AnDs\")); //Chunk type, 4 bytes.\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)EncodedObject.Length)); //The length of the following data, 4 bytes.\n                stream.WriteBytes(EncodedObject);  //ImageResource data, XX bytes.\n\n                return stream.ToArray();\n            }\n        }\n    }\n\n    private byte[] EncodedObject\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)16)); //Descriptor version, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)1)); //UnknownField1, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //UnknownField2, 4 bytes.\n                stream.WriteUInt16(BitHelper.ConvertEndian((ushort)0)); //UnknownField3, 2 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"null\")); //NullField, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)3)); //NumberOfProperties, 4 bytes.\n\n                //AfSt\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"AfSt\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //Value, 4 bytes.\n\n                #region FrIn\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"FrIn\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"VlLs\")); //Value type, 4 bytes.\n\n                //FrIn -> VlLs (List)\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)FrameDelays.Count)); //Number of entries of the list (frames), 4 bytes.\n\n                foreach (var frame in FrameDelays)\n                {\n                    //FrIn -> VlLs (List) -> Objc\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"Objc\")); //Value type, 4 bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)1)); //UnknownField1, 4 bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //UnknownField2, 4 bytes.\n                    stream.WriteUInt16(BitHelper.ConvertEndian((ushort)0)); //UnknownField3, 2 bytes.\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"null\")); //NullField, 4 bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)3)); //NumberOfProperties, 4 bytes.\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"    \")); //NullField, 4 bytes.\n\n                    //FrIn -> VlLs (List) -> Objc -> FrID\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"FrID\")); //Signature, 4 bytes.\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)1263123368)); //Value, 4 bytes. //TODO\n\n                    //FrIn -> VlLs (List) -> Objc -> FrDl\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"FrDl\")); //Signature, 4 bytes.\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)7)); //Value, 4 bytes. //TODO\n\n                    //FrIn -> VlLs (List) -> Objc -> FrGA\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"FrDl\")); //Signature, 4 bytes.\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                    stream.WriteInt64(BitHelper.ConvertEndian((long)30)); //Value, 4 bytes. //TODO\n                }\n\n                #endregion\n\n                #region FSts\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"FSts\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"VlLs\")); //Value type, 4 bytes.\n\n                //FSts -> VlLs (List)\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)1)); //Number of entries of the list, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"Objc\")); //Value type, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)1)); //UnknownField1, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //UnknownField2, 4 bytes.\n                stream.WriteUInt16(BitHelper.ConvertEndian((ushort)0)); //UnknownField3, 2 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"null\")); //NullField, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)4)); //NumberOfProperties, 4 bytes.\n\n                //FSts -> VlLs (List) -> Objc -> FsID\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"    \")); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"FsID\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //Value, 4 bytes. //TODO\n\n                //FSts -> VlLs (List) -> Objc -> AFrm\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"    \")); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"AFrm\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)3)); //Value, 4 bytes. //TODO\n\n                //FSts -> VlLs (List) -> Objc -> FsFr\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"    \")); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"FsFr\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"VlLs\")); //Value type, 4 bytes.\n\n                //FSts -> VlLs (List) -> Objc -> FsFr -> VlLs (List)\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)FrameDelays.Count)); //Number of entries of the list (frames), 4 bytes.\n\n                foreach (var frame in FrameDelays) //Frame IDs\n                {\n                    stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)1263123368)); //Value, 4 bytes. //TODO\n\n                    //1263123368\n                    //1263140175\n                    //1263156982\n                    //1263173789\n                }\n\n                //FSts -> VlLs (List) -> Objc -> LCnt\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"    \")); //NullField, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"LCnt\")); //Signature, 4 bytes.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"long\")); //Value type, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)1)); //Value, 4 bytes. //TODO\n\n                #endregion\n\n                return stream.ToArray();\n            }\n        }\n    }\n\n    public AnimationBlock()\n    {\n        //Get data from all frames and generate this block.\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/ImageResourceBlocks/IImageResource.cs",
    "content": "namespace ScreenToGif.Util.Codification.Psd.ImageResourceBlocks;\n\ninternal interface IImageResource\n{\n    ushort Identifier { get; set; }\n\n    string Name { get; set; }\n\n    byte[] Content { get; }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/ImageResourceBlocks/ImageResources.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Psd.ImageResourceBlocks;\n\ninternal class ImageResources : IPsdContent\n{\n    internal List<IImageResource> ImageResourceList = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                //If there's no ImageResource block, return a size of 0 bytes.\n                if (ImageResourceList.Count == 0)\n                {\n                    stream.WriteUInt32(BitHelper.ConvertEndian((uint)0));\n                    return stream.ToArray();\n                }\n\n                var bytes = ImageResourceList.SelectMany(s => s.Content).ToArray();\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)bytes.Length));\n                stream.WriteBytes(bytes);\n\n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/LayerAndMask.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\ninternal class LayerAndMask : IPsdContent\n{\n    internal LayerInfo LayerInfo = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                var layerInfo = LayerInfo.Content;\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)layerInfo.Length)); //Length of the LayerInfo block, 4 bytes.\n                stream.WriteBytes(layerInfo); //Layer info block, XX bytes.\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)0)); //Length of the Mask block, 4 bytes.\n\n                //Additional LayerInfo goes here. TODO\n\n                stream.WritePadding(2); //Pad to multiple of 2 bytes.\n\n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/LayerInfo.cs",
    "content": "using System.IO;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\ninternal class LayerInfo : IPsdContent\n{\n    internal List<LayerRecord> LayerList = new();\n    internal List<ImageChannelData> ImageChannelDataList = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                var layers = LayerList.SelectMany(s => s.Content).ToArray();\n                //var channels = ImageChannelDataList.SelectMany(s => s.Content).ToArray();\n\n                stream.WriteInt16(BitHelper.ConvertEndian((short)(LayerList.Count))); //Number of channels of this layer, 2 bytes. Negative if absolute alpha.\n\n                stream.WriteBytes(layers); //Layer records, XX bytes. \n                //stream.WriteBytes(channels); //List of channel data, XX bytes. \n\n                //List of channel data, XX bytes. Use this to avoid airthmetic overflows.\n                foreach (var channel in ImageChannelDataList)\n                    stream.WriteBytes(channel.Content);\n\n                stream.WritePadding(4); //Pad to multiple of 4 bytes.\n                    \n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/LayerRecord.cs",
    "content": "using ScreenToGif.Util.Codification.Psd.AdditionalLayers;\nusing System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\ninternal class LayerRecord : IPsdContent\n{\n    public uint Top { get; set; }\n\n    public uint Left { get; set; }\n\n    public uint Bottom { get; set; }\n        \n    public uint Right { get; set; }\n\n    public Dictionary<short, int> Channels { get; set; } = new();\n\n    public string Name { get; set; }\n\n    public List<IAdditionalLayerInfo> AdditionalInfo { get; set; } = new();\n\n    public long Length => Content?.Length ?? 0;\n\n    public byte[] Content\n    {\n        get\n        {\n            using (var stream = new MemoryStream())\n            {\n                stream.WriteUInt32(BitHelper.ConvertEndian(Top)); //Top point, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian(Left)); //Left point, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian(Bottom)); //Bottom point, 4 bytes.\n                stream.WriteUInt32(BitHelper.ConvertEndian(Right)); //Right point, 4 bytes.\n\n                stream.WriteUInt16(BitHelper.ConvertEndian((ushort)Channels.Count)); //Number of channels on this layer, 2 bytes.\n\n                foreach (var channel in Channels)\n                {\n                    stream.WriteInt16(BitHelper.ConvertEndian(channel.Key)); //Channel ID, 2 bytes.\n                    stream.WriteInt32(BitHelper.ConvertEndian(channel.Value)); //Channel length, 4 bytes.\n                }\n\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"8BIM\")); //Blend mode signature, 4 bytes.\n                //stream.WriteInt32(BitHelper.ConvertEndian(0x6e6f726d)); Same as this one below.\n                stream.WriteBytes(Encoding.ASCII.GetBytes(\"norm\"));//Blend mode value, Normal, 4 bytes.\n                stream.WriteByte(255); //Opacity, 1 byte.\n                stream.WriteByte(0); //Clipping, 1 byte.\n                stream.WriteByte(0); //Flags, Visible = true, 1 byte. (For invisible, try using 10)\n                stream.WriteByte(0); //Filler, 1 byte\n\n                var name = StreamHelpers.GetPascalStringAsBytes(Encoding.Unicode.GetBytes(Name));\n                var additionalLayerInfo = AdditionalInfo.SelectMany(s => s.Content).ToArray();\n\n                stream.WriteUInt32(BitHelper.ConvertEndian((uint)(4 + 4 + name.Length + additionalLayerInfo.Length))); //Extra data length, 4 bytes.\n                stream.WriteInt32(BitHelper.ConvertEndian(0)); //Layer mask size, 4 bytes.\n                stream.WriteInt32(BitHelper.ConvertEndian(0)); //Blending ranges size, 4 bytes.\n\n                stream.WriteBytes(name); //Layer name, pascal string as bytes.\n                stream.WriteBytes(additionalLayerInfo); //List of additional layer info, XX bytes.\n\n                //Padding.\n\n                return stream.ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Codification/Psd/Psd.cs",
    "content": "using ScreenToGif.Util.Codification.Psd.ImageResourceBlocks;\nusing ScreenToGif.Util.Extensions;\nusing System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util.Codification.Psd;\n\npublic class Psd : IDisposable\n{\n    #region Properties\n\n    /// <summary>\n    /// The stream which the psd is written on.\n    /// </summary>\n    private Stream InternalStream { get; set; }\n\n    /// <summary>\n    /// The height of the image.\n    /// </summary>\n    internal int Height { get; set; } = 0;\n\n    /// <summary>\n    /// The width of the image.\n    /// </summary>\n    internal int Width { get; set; } = 0;\n\n    /// <summary>\n    /// Compress the image data?\n    /// </summary>\n    internal bool Compress { get; set; }\n\n    /// <summary>\n    /// Save the timeline data of the recording?\n    /// </summary>\n    internal bool SaveTimeline { get; set; }\n\n    #endregion\n\n    private ImageResources ImageResources { get; set; } = new();\n\n    private LayerAndMask LayerAndMask { get; set; } = new();\n\n\n    public Psd(Stream stream, int height, int width, bool compress = true, bool saveTimeline = true)\n    {\n        InternalStream = stream;\n        Height = height;\n        Width = width;\n        Compress = compress;\n        SaveTimeline = saveTimeline;\n    }\n\n    public void AddFrame(int index, string path, int delay = 66)\n    {\n        var reader = new PixelUtil(path.SourceFrom());\n        reader.LockBits();\n\n        var channelData = new ImageChannelData(reader.Depth, reader.Pixels, reader.Height, reader.Width, Compress); //TODO: Support for layers with multiple sizes.\n        var layerData = new LayerRecord\n        {\n            Top = 0,\n            Left = 0,\n            Bottom = (uint)Height, // + top,\n            Right = (uint)Width, // + left,\n            Name = index.ToString()\n        };\n\n        reader.UnlockBitsWithoutCommit();\n\n        //Add the lengths of the channels.\n        for (var i = 0; i < channelData.ChannelList.Count; i++)\n            layerData.Channels.Add((short)(i - 1), (int)channelData.ChannelList[i].Length + 2); //+ 2 bytes for the compression type.\n\n        LayerAndMask.LayerInfo.ImageChannelDataList.Add(channelData);\n        LayerAndMask.LayerInfo.LayerList.Add(layerData);\n\n        //TODO: Add ImageResource info (timeline)\n        //ImageResources.ImageResourceList.Add(new ImageResourceBlock(2, \"shmd\", null));\n    }\n\n    internal void Encode()\n    {\n        //Psd Header: 26 bytes.\n        InternalStream.WriteBytes(Encoding.ASCII.GetBytes(\"8BPS\")); //Chunk type, 4 bytes.\n        InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)1)); //File version, 1 - PSD, 2 - PSB, 2 bytes.\n        InternalStream.Position += 6; //Must be zero, 6 bytes.\n        InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)4)); //Number of channels, ARGB, 2 bytes.\n        InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)Height)); //Height of the image, 4 bytes.\n        InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)Width)); //Width of the image, 4 bytes.\n        InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)8)); //Number of bits per channel, 2 bytes.\n        InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)3)); //The color mode of the file, 3 - RGB, 2 bytes.\n\n        //Color mode data. 4 bytes.\n        InternalStream.WriteUInt32(BitHelper.ConvertEndian(0u)); //The size of the color mode data block, 0 bytes for RGB mode, 4 bytes.\n\n        //Image resources. XX bytes.\n        InternalStream.WriteBytes(ImageResources.Content);\n\n        //LayerAndMaskInformation. 4 + XX bytes.\n        var layerAndMask = LayerAndMask.Content;\n        InternalStream.WriteUInt32(BitHelper.ConvertEndian((uint)layerAndMask.Length)); //Length of the LayerAndMask block, 4 bytes.\n        InternalStream.WriteBytes(layerAndMask); //Content of the LayerAndMask block.\n\n        //ImageData. XX bytes.\n        if (Compress)\n        {\n            InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)1)); //The type of encoding, PackBit/RLE, 2 bytes.\n            foreach (var layer in LayerAndMask.LayerInfo.ImageChannelDataList)\n            {\n                //Writes all byte counts for all the scan lines (rows * channels), with each count stored as a two-byte value.\n                foreach (var channel in layer.ChannelList)\n                foreach (var b in channel.RleCompressedContent)\n                    InternalStream.WriteInt16(BitHelper.ConvertEndian((short)b.Length));\n\n                //Writes down each layer, in planar order: AAA RRR GGG BBB.\n                foreach (var channel in layer.ChannelList)\n                foreach (var b in channel.RleCompressedContent)\n                    InternalStream.WriteBytes(b);\n\n                break;\n            }\n        }\n        else\n        {\n            InternalStream.WriteUInt16(BitHelper.ConvertEndian((ushort)0)); //The type of encoding, Raw data, 2 bytes.\n            foreach (var layer in LayerAndMask.LayerInfo.ImageChannelDataList)\n            {\n                //Writes down each layer, in planar order: AAA RRR GGG BBB.\n                foreach (var channel in layer.ChannelList)\n                    InternalStream.WriteBytes(channel.RawContent);\n\n                break;\n            }\n        }\n    }\n\n    public void Dispose()\n    {\n        //Writes down all data to the stream.\n        Encode();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Constants.cs",
    "content": "using ScreenToGif.Util.Settings;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util;\n\npublic static class Constants\n{\n    /// <summary>\n    /// Delimiter chars.\n    /// </summary>\n    public static readonly char[] DelimiterChars = { '\\\\', '/' };\n\n    public const int BufferSize = 0x2000;\n\n    public const int LargeBufferSize = BufferSize * 1024;\n\n    #region Recorder\n\n    public static int TopOffset => UserSettings.All.RecorderThinMode ? 4 : 33;\n\n    public static int LeftOffset => UserSettings.All.RecorderThinMode ? 4 : 8;\n\n    public static int RightOffset => UserSettings.All.RecorderThinMode ? 4 : 8;\n\n    public const int BottomOffset = 33;\n\n    public static int HorizontalOffset => LeftOffset + RightOffset;\n\n    public static int VerticalOffset => TopOffset + BottomOffset;\n\n    #endregion\n\n    #region Board Recorder\n\n    public static int TopBoardOffset => UserSettings.All.RecorderThinMode ? 34 : 65;\n\n    public static int LeftBoardOffset => UserSettings.All.RecorderThinMode ? 4 : 8;\n\n    public static int RightBoardOffset => UserSettings.All.RecorderThinMode ? 4 : 8;\n\n    public const int BottomBoardOffset = 32;\n\n    public static int HorizontalBoardOffset => LeftBoardOffset + RightBoardOffset;\n\n    public static int VerticalBoardOffset => TopBoardOffset + BottomBoardOffset;\n\n    #endregion\n\n    #region Colors\n\n    public static Color VeryLightEven = Color.FromArgb(255, 245, 245, 245);\n    public static Color VeryLightOdd = Color.FromArgb(255, 240, 240, 240);\n\n    public static Color LightEven = Color.FromArgb(255, 255, 255, 255);\n    public static Color LightOdd = Color.FromArgb(255, 211, 211, 211);\n\n    public static Color MediumEven = Color.FromArgb(255, 153, 153, 153);\n    public static Color MediumOdd = Color.FromArgb(255, 102, 102, 102);\n\n    public static Color DarkEven = Color.FromArgb(255, 45, 45, 45);\n    public static Color DarkOdd = Color.FromArgb(255, 50, 50, 50);\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/AlphaToOpacity.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts the Alpha value to a Opacity Double and vice-versa.\n/// </summary>\npublic class AlphaToOpacity : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not long cent)\n            return DependencyProperty.UnsetValue;\n\n        return cent / 255F;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (parameter is not double || value?.Equals(false) == true)\n            return DependencyProperty.UnsetValue;\n\n        return parameter;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolAnd.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Multi-value converter.\n/// Check if all bools are true.\n/// Pass any parameter to invert the logic.\n/// </summary>\npublic class BoolAnd : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        var res = values.Cast<bool>().All(x => x);\n\n        //If there's any parameter, invert the logic.\n        return parameter != null ? !res : res;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolAndOrOrToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class BoolAndOrOrToVisibility : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        //List of params:\n        //[0]: Always true.\n        //[1-2]: At least one true.\n\n        var list = values.Cast<bool>().ToList();\n\n        if (list.Count != 3)\n            return Visibility.Collapsed;\n\n        if (!list[0] || !(list[1] || list[2]))\n            return Visibility.Collapsed;\n\n        return Visibility.Visible;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolAndToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class BoolAndToVisibility : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values == null || values.Length == 0 || values.Any(a => a.GetType() != typeof(bool)))\n            return Visibility.Collapsed;\n\n        return values.Cast<bool>().All(x => x) ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolOr.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Multi-value converter.\n/// Check if any bools are true.\n/// Pass any parameter to invert the logic.\n/// </summary>\npublic class BoolOr : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        var res = values.Cast<bool>().Any(x => x);\n\n        //If there's any parameter, invert the logic.\n        return parameter != null ? !res : res;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolOrAndToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class BoolOrAndToVisibility : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        var list = values.Cast<bool>().ToList();\n\n        for (var i = 0; i < list.Count; i += 2)\n        {\n            if (list[i] && list[i + 1])\n                return Visibility.Visible;\n        }\n\n        return Visibility.Collapsed;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolOrToInvertedVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class BoolOrToInvertedVisibility : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 1)\n            return Visibility.Collapsed;\n\n        return values.Cast<bool>().Any(x => x) ? Visibility.Collapsed : Visibility.Visible;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolOrToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class BoolOrToVisibility : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values == null || values.Length == 0 || values.Any(a => a.GetType() != typeof(bool)))\n            return Visibility.Collapsed;\n\n        return values.Cast<bool>().Any(x => x) ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BoolToOpacity.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing Binding = System.Windows.Data.Binding;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Bool to Opacity property converter. Returns 0 if true.\n/// </summary>\npublic class BoolToOpacity : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not bool boolean)\n            return DependencyProperty.UnsetValue;\n\n        return boolean ? 0 : 1;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/BytesToSize.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class BytesToSize : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not long length)\n            return DependencyProperty.UnsetValue;\n\n        return Humanizer.BytesToString(length);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/CenterPopupConverter.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class CenterPopupConverter : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2)\n            return DependencyProperty.UnsetValue;\n\n        if (values[0] is not double targetWidth || values[1] is not double popupWidth)\n            return DependencyProperty.UnsetValue;\n\n        return targetWidth / 2.0 - popupWidth / 2.0;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotSupportedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/ColorToAlpha.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Gets the Color given by the binding engine and sets the given alpha value (as hexadecimal).\n/// </summary>\npublic class ColorToAlpha : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var alphaAux = parameter as string;\n\n        if (value is not Color color)\n            return value;\n\n        if (string.IsNullOrEmpty(alphaAux))\n            return value;\n\n        if (!int.TryParse(alphaAux, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var alpha))\n            return value;\n\n        return Color.FromArgb((byte)alpha, color.R, color.G, color.B);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/ColorToBrush.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Media;\nusing Binding = System.Windows.Data.Binding;\nusing Color = System.Windows.Media.Color;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts the System.Drawing.Color to a WPF Brush.\n/// </summary>\npublic class ColorToBrush : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not Color color)\n            return new SolidColorBrush(Colors.Transparent);\n\n        return new SolidColorBrush(color);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not SolidColorBrush brush)\n            return Binding.DoNothing;\n\n        return brush.Color;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/ContentToVisibility.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing Binding = System.Windows.Data.Binding;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Returns Visible when source is not null.\n/// </summary>\npublic class ContentToVisibility : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value != null ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/CountToBool.cs",
    "content": "using ScreenToGif.Domain.Interfaces;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// True only if Count > 0.\n/// </summary>\npublic class CountToBool : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var list = value as List<IFrame>;\n\n        return list?.Count > 0;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleTimesAHundredToInt.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class DoubleTimesAHundredToInt : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double doubleValue)\n            return DependencyProperty.UnsetValue;\n\n        return doubleValue * 100;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int intValue)\n            return DependencyProperty.UnsetValue;\n\n        return intValue / 100D;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleToBool.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Double to Boolean property converter. It compares the the parameter with the provided value.\n/// </summary>\npublic class DoubleToBool : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double number || parameter is not string param)\n            return DependencyProperty.UnsetValue;\n\n        return Math.Abs(number - double.Parse(param)) < 0.001;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return DependencyProperty.UnsetValue;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleToInt.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Simple Double-Int32 converter.\n/// </summary>\npublic class DoubleToInt : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double number || double.IsNaN(number))\n            return DependencyProperty.UnsetValue;\n\n        return System.Convert.ToInt32(number);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int number)\n            return DependencyProperty.UnsetValue;\n\n        return System.Convert.ToDouble(number);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleToPercentage.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts a Double value to a String representation of a percentage. 100 %\n/// </summary>\npublic class DoubleToPercentage : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double doubleValue)\n            return DependencyProperty.UnsetValue;\n\n        return doubleValue + \" %\";\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleToPositionSize.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class DoubleToPositionSize : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var editorWindow = Application.Current.Windows.OfType<Window>().FirstOrDefault(x => x.Name.Equals(\"EditorWindow\"));\n\n        if (editorWindow == null)\n            return DependencyProperty.UnsetValue;\n\n        if (value is not double point || (double?)point == -1)\n            return DependencyProperty.UnsetValue;\n\n        //TODO: Test with high dpi.\n        var border = Environment.OSVersion.Version.Major == 10 ? 10 : 0;\n\n        switch ((string) parameter)\n        {\n            case \"Left\":\n\n                if ((double?)point - border <= SystemParameters.VirtualScreenWidth && (double?)point + border >= SystemParameters.VirtualScreenLeft)\n                    return value;\n\n                if ((double?)point - border >= SystemParameters.VirtualScreenWidth)\n                    return SystemParameters.VirtualScreenWidth - editorWindow.ActualWidth;\n\n                if ((double?)point + border <= SystemParameters.VirtualScreenLeft)\n                    return SystemParameters.VirtualScreenLeft;\n\n                break;\n\n            case \"Top\":\n\n                if ((double?)point <= SystemParameters.VirtualScreenHeight && (double?)point >= SystemParameters.VirtualScreenTop)\n                    return value;\n\n                if ((double?)point >= SystemParameters.VirtualScreenHeight)\n                    return SystemParameters.VirtualScreenHeight - editorWindow.ActualHeight;\n\n                if ((double?)point <= SystemParameters.VirtualScreenTop)\n                    return SystemParameters.VirtualScreenTop;\n\n                break;\n\n            case \"Height\":\n\n                if ((double?)point <= SystemParameters.VirtualScreenHeight)\n                {\n                    //if (editorWindow.Top + point > SystemParameters.VirtualScreenHeight)\n                    //    editorWindow.Top = SystemParameters.VirtualScreenHeight - point.Value;\n\n                    return point;\n                }\n\n                if ((double?)point >= SystemParameters.VirtualScreenHeight)\n                {\n                    return SystemParameters.VirtualScreenHeight - editorWindow.ActualHeight;\n                }\n\n                break;\n\n            case \"Width\":\n\n                if ((double?)point <= SystemParameters.VirtualScreenWidth)\n                {\n                    //if (editorWindow.Left + point - border > SystemParameters.VirtualScreenWidth)\n                    //    editorWindow.Left = SystemParameters.VirtualScreenWidth - point.Value;\n\n                    return point;\n                }\n\n                if ((double?)point >= SystemParameters.VirtualScreenWidth)\n                {\n                    return SystemParameters.VirtualScreenWidth - editorWindow.ActualWidth;\n                }\n\n                break;\n        }\n\n        return value;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleToRadius.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class DoubleToRadius : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2)\n            return new CornerRadius(0);\n\n        var left = values[0] as double? ?? values[0] as int? ?? 0;\n        var top = values[1] as double? ?? values[1] as int? ?? 0;\n\n        if (values.Length < 4)\n            return new CornerRadius(Math.Abs(Math.Max(0, left)), Math.Abs(Math.Max(0, top)), Math.Abs(Math.Max(0, left)), Math.Abs(Math.Max(0, top)));\n\n        var right = values[2] as double? ?? values[2] as int? ?? 0;\n        var bottom = values[3] as double? ?? values[3] as int? ?? 0;\n\n        return new CornerRadius(Math.Abs(Math.Max(0, left)), Math.Abs(Math.Max(0, top)), Math.Abs(Math.Max(0, right)), Math.Abs(Math.Max(0, bottom)));\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/DoubleToThickness.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class DoubleToThickness : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2)\n            return new Thickness(0);\n\n        var pos = parameter as string == \"+\";\n        var left = values[0] as double? ?? values[0] as int? ?? 0;\n        var top = values[1] as double? ?? values[1] as int? ?? 0;\n\n        if (values.Length < 4)\n        {\n            if (pos)\n                return new Thickness(Math.Abs(Math.Max(0, left)), Math.Abs(Math.Max(0, top)), Math.Abs(Math.Max(0, left)), Math.Abs(Math.Max(0, top)));\n\n            return new Thickness(Math.Abs(Math.Min(0, left)), Math.Abs(Math.Min(0, top)), Math.Abs(Math.Min(0, left)), Math.Abs(Math.Min(0, top)));\n        }\n\n        var right = values[2] as double? ?? values[2] as int? ?? 0;\n        var bottom = values[3] as double? ?? values[3] as int? ?? 0;\n\n        if (pos)\n            return new Thickness(Math.Abs(Math.Max(0, left)), Math.Abs(Math.Max(0, top)), Math.Abs(Math.Max(0, right)), Math.Abs(Math.Max(0, bottom)));\n\n        return new Thickness(Math.Abs(Math.Min(0, left)), Math.Abs(Math.Min(0, top)), Math.Abs(Math.Min(0, right)), Math.Abs(Math.Min(0, bottom)));\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/EnumToBool.cs",
    "content": "using System;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class EnumToBool: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(parameter) == true;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(true) == true ? parameter : Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/EnumToInt.cs",
    "content": "using System;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class EnumToInt: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        if (value == null)\n            return null;\n\n        //Converts int to enum.\n        if (targetType.IsEnum)\n            return Enum.ToObject(targetType, value);\n\n        //Converts enum to int.\n        return value.GetType().IsEnum ? System.Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType())) : null;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        //Performs the same conversion in both directions.\n        return Convert(value, targetType, parameter, culture);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/EnumToVisibility.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class InvertedEnumToVisibility: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(parameter) == true ? Visibility.Collapsed : Visibility.Visible;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(Visibility.Visible) == true ? Binding.DoNothing : parameter;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/FontToSupportedGliph.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class FontToSupportedGliph : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not IReadOnlyCollection<FontFamily> list)\n            return DependencyProperty.UnsetValue;\n\n        var returnList = new List<FontFamily>();\n            \n        foreach (var font in list)\n        {\n            try\n            {\n                //Instantiate a TypeFace object with the font settings you want to use.\n                var ltypFace = new Typeface(font, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);\n\n                //Try to create a GlyphTypeface object from the TypeFace object.\n                if (ltypFace.TryGetGlyphTypeface(out var lglyphTypeFace))\n                    returnList.Add(font);\n            }\n            catch (Exception) {}\n        }\n\n        return returnList;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/FormatConverter.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class FormatConverter : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2)\n            return Binding.DoNothing;\n\n        if (values[0] is not string format)\n            return Binding.DoNothing;\n\n        var list = values.ToList();\n        list.RemoveAt(0);\n\n        return string.Format(format, list.ToArray());\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/HasEnumToVisibility.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class HasEnumToVisibility: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(parameter) == true ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(Visibility.Visible) == true ? parameter : Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/IntToBool.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Integer to Boolean property converter. It compares the the parameter with the provided value.\n/// </summary>\npublic class IntToBool : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int integer || parameter is not string param)\n            return DependencyProperty.UnsetValue;\n\n        return integer == int.Parse(param);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return DependencyProperty.UnsetValue;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/IntToDecimal.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts 100 to 1,0.\n/// </summary>\npublic class IntToDecimal : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double doubleValue)\n            return DependencyProperty.UnsetValue;\n\n        return (double?)doubleValue * 100;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int intValue)\n            return DependencyProperty.UnsetValue;\n\n        return (int?)intValue / 100D;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/IntToDelayString.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts a Integer to a String formatted as Delay (Example: 1 ms)\n/// </summary>\npublic class IntToDelayString : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int intValue)\n            return DependencyProperty.UnsetValue;\n\n        return $\"{intValue} ms\";\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/IntToRect.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class IntToRect : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2)\n            return DependencyProperty.UnsetValue;\n\n        var width = values[0] as double? ?? values[0] as int? ?? 0;\n        var height = values[1] as double? ?? values[1] as int? ?? 0;\n\n        if (values.Length < 4)\n            return new Rect(new Point(0, 0), new Size(width, height));\n\n        var xAxis = values[2] as double? ?? values[2] as int? ?? 0;\n        var yAxis = values[3] as double? ?? values[3] as int? ?? 0;\n\n        if (double.IsNegativeInfinity(width) || double.IsNegativeInfinity(height))\n            return Rect.Empty;\n\n        return new Rect(new Point(xAxis, yAxis), new Size(width, height));\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/IntToString.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class IntToString : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int number|| number == 0)\n            return \"\";\n\n        return number.ToString();\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/IntToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class IntToVisibility : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var param = parameter as string;\n\n        if (value is not int number || string.IsNullOrWhiteSpace(param) || !int.TryParse(param, out var number2))\n            return Visibility.Collapsed;\n\n        return Equals(number, number2) ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/InvertedBool.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class InvertedBool: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not bool vis)\n            return DependencyProperty.UnsetValue;\n\n        return !vis;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not bool vis)\n            return DependencyProperty.UnsetValue;\n\n        return !vis;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/InvertedBoolToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// The inverted BoolToVisibility converter.\n/// </summary>\npublic class InvertedBoolToVisibility : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not bool vis)\n            return DependencyProperty.UnsetValue;\n\n        return vis ? Visibility.Collapsed: Visibility.Visible;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not Visibility vis)\n            return DependencyProperty.UnsetValue;\n\n        return !vis.Equals(Visibility.Visible);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/InvertedEnumToBool.cs",
    "content": "using System;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class InvertedEnumToBool : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(parameter) == false;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(true) == false ? parameter : Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/InvertedEnumToVisibility.cs",
    "content": "using System;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class EnumToVisibility: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(parameter) == true ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return value?.Equals(Visibility.Visible) == true ? parameter : Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/InvertedIntToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class InvertedIntToVisibility : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var param = parameter as string;\n\n        if (value is not int number || string.IsNullOrWhiteSpace(param) || !int.TryParse(param, out var number2))\n            return Visibility.Visible;\n\n        return Equals(number, number2) ? Visibility.Collapsed : Visibility.Visible;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/InvertedVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class InvertedVisibility : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not Visibility visibility)\n            return DependencyProperty.UnsetValue;\n\n        return visibility != Visibility.Visible ? Visibility.Visible : parameter is string param ? Visibility.Hidden : Visibility.Collapsed;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/KeyToResource.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class KeyToResource : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var str = value as string;\n\n        if (string.IsNullOrWhiteSpace(str) || Application.Current == null || !Application.Current.Resources.Contains(str))\n            return DependencyProperty.UnsetValue;\n\n        return Application.Current.Resources[str];\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/KeysToString.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class KeysToString : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var keys = value as Key?;\n\n        return keys?.ToString();\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/MaximumValue.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// MaximumValue MultiValueConverter.\n/// [0]: Minimum based on itself.\n/// [1]: Maximum based on another control.\n/// [2]: Offset (It's used as Maximum - Offset).\n/// </summary>\npublic class MaximumValue : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2)\n            return DependencyProperty.UnsetValue;\n\n        var minVar = (int)Math.Round(values[0] as double? ?? values[0] as int? ?? 0, MidpointRounding.AwayFromZero);\n        var maxVar = (int)Math.Round(values[1] as double? ?? values[1] as int? ?? 0, MidpointRounding.AwayFromZero);\n\n        if (values.Length == 2)\n            return minVar > maxVar || double.IsNaN(maxVar) ? minVar : maxVar;\n\n        var offset = values[2] as double? ?? values[2] as int? ?? 0;\n\n        var result = (int)Math.Round(maxVar - offset, MidpointRounding.AwayFromZero);\n        return minVar > result || double.IsNaN(maxVar) ? minVar : result;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/MultiLineTitle.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class MultiLineTitle : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var text = value as string;\n\n        if (string.IsNullOrEmpty(text))\n            return value;\n\n        return text.Replace(@\"\\n\", Environment.NewLine);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/NullToVisibility.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class NullToVisibility : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value == null ? Visibility.Visible : Visibility.Collapsed;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/PathToFilename.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class PathToFilename : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var path = value as string;\n\n        return string.IsNullOrEmpty(path) ? LocalizationHelper.Get(\"S.Watermark.File.Nothing\") : Path.GetFileName(path);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return DependencyProperty.UnsetValue;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/PercentageToOpacity.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts a value in the order of 100s value to a Opacity double (0 to 1) and vice-versa.\n/// </summary>\npublic class PercentageToOpacity : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double cent)\n            return DependencyProperty.UnsetValue;\n\n        return cent * 100D;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double opacity)\n            return DependencyProperty.UnsetValue;\n\n        return opacity / 100D;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/ScaleConverter.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class ScaleConverter : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        var value = System.Convert.ToDouble(values[0]);\n        var maximum = System.Convert.ToDouble(values[1]);\n            \n        if (maximum < 1)\n            return 0d;\n\n        return value / maximum;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return new[] { DependencyProperty.UnsetValue };\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/SelectionCountToDescription.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\nusing Binding = System.Windows.Data.Binding;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class SelectionCountToDescription : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int count)\n            return Binding.DoNothing;\n\n        return count > 1 ? LocalizationHelper.GetWithFormat(\"S.SaveAs.Partial.Mode.Selection.Plural\", \"{0} frames selected.\", count) : \n            count == 1 ? LocalizationHelper.Get(\"S.SaveAs.Partial.Mode.Selection.Singular\") : LocalizationHelper.Get(\"S.SaveAs.Partial.Mode.Selection.None\");\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/SelectionToDrawingAttributes.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing System.Windows.Ink;\nusing System.Windows.Media;\nusing Color = System.Windows.Media.Color;\nusing Binding = System.Windows.Data.Binding;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class SelectionToDrawingAttributes : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 6)\n            return DependencyProperty.UnsetValue;\n\n        var colorBrush = values[2] as SolidColorBrush; //First try as Brush, else Color.\n        var color = values[2] as Color?;\n\n        if (values[0] is not int height || values[1] is not int width || values[3] is not bool fitToCurve || values[4] is not bool isHighlighter ||\n            values[5] is not bool isRectangle || (colorBrush == null && color == null))\n            return DependencyProperty.UnsetValue;\n\n        return new DrawingAttributes\n        {\n            Height = height,\n            Width = width,\n            Color = colorBrush?.Color ?? color.Value,\n            FitToCurve = fitToCurve,\n            IsHighlighter = isHighlighter,\n            StylusTip = isRectangle ? StylusTip.Rectangle : StylusTip.Ellipse\n        };\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        return new[] { Binding.DoNothing, Binding.DoNothing, Binding.DoNothing, Binding.DoNothing, Binding.DoNothing, Binding.DoNothing, Binding.DoNothing };\n\n        //var tip = value as StylusTip?;\n\n        //if (!tip.HasValue) return new object[2] {true, false};\n\n        //var isRectangle = tip.Value == StylusTip.Rectangle;\n\n        //return new object[2] {isRectangle, !isRectangle};\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/SelectionToEditingMode.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class SelectionToEditingMode : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length != 3) return DependencyProperty.UnsetValue;\n\n        if (values[0] is not bool penBool || values[1] is not bool eraserBool || values[2] is not bool selectorBool)\n            return DependencyProperty.UnsetValue;\n\n        return penBool ? InkCanvasEditingMode.Ink :\n            selectorBool ? InkCanvasEditingMode.Select :\n            eraserBool ? InkCanvasEditingMode.EraseByPoint : \n            InkCanvasEditingMode.EraseByStroke;\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/SelectionToStylusShape.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Ink;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class SelectionToStylusShape : IMultiValueConverter\n{\n    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (values.Length < 2) \n            return new RectangleStylusShape(10, 10, 0);\n\n        var width = values[0] as int? ?? values[0] as double?;\n        var height = values[1] as int? ?? values[1] as double?;\n        var isRectangle = values[2] as bool?;\n\n        if (!width.HasValue) \n            return new RectangleStylusShape(10, 10, 0);\n\n        if (!height.HasValue || !isRectangle.HasValue) \n            return new RectangleStylusShape(width.Value, 10, 0);\n\n        if (isRectangle.Value)\n            return new RectangleStylusShape(width.Value, height.Value, 0);\n            \n        return new EllipseStylusShape(width.Value, height.Value, 0);\n    }\n\n    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)\n    {\n        if (value is not StylusShape shape) \n            return new object[] { 10d, 10d, true };\n\n        return new object[] {shape.Width, shape.Height, shape is RectangleStylusShape};\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/ShortcutSelection.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Keyboard shortcut to Combobox index selection.\n/// </summary>\npublic class ShortcutSelection : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not Key key)\n            return DependencyProperty.UnsetValue;\n\n        switch (key)\n        {\n            case Key.F1:\n                return 0;\n            case Key.F2:\n                return 1;\n            case Key.F3:\n                return 2;\n            case Key.F4:\n                return 3;\n            case Key.F5:\n                return 4;\n            case Key.F6:\n                return 5;\n            case Key.F7:\n                return 6;\n            case Key.F8:\n                return 7;\n            case Key.F9:\n                return 8;\n            case Key.F10:\n                return 9;\n            case Key.F11:\n                return 10;\n            case Key.F12:\n                return 11;\n\n            default:\n                return 0;\n        }\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not int index)\n            return DependencyProperty.UnsetValue;\n\n        switch (index)\n        {\n            case 0:\n                return Key.F1;\n            case 1:\n                return Key.F2;\n            case 2:\n                return Key.F3;\n            case 3:\n                return Key.F4;\n            case 4:\n                return Key.F5;\n            case 5:\n                return Key.F6;\n            case 6:\n                return Key.F7;\n            case 7:\n                return Key.F8;\n            case 8:\n                return Key.F9;\n            case 9:\n                return Key.F10;\n            case 10:\n                return Key.F11;\n            case 11:\n                return Key.F12;\n        }\n\n        return Key.F1;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/SourceToSize.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\nusing System.Windows.Media.Imaging;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class SourceToSize : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var param = parameter as string;\n\n        if (value is not BitmapImage image || string.IsNullOrEmpty(param))\n            return value;\n\n        return param.Equals(\"width\") ? image.Width : image.Height;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/StageToButtonString.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class StageToButtonString : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not RecorderStages stage)\n            return LocalizationHelper.Get(\"S.Recorder.Record\");\n\n        switch (stage)\n        {\n            case RecorderStages.Stopped:\n                return LocalizationHelper.Get(\"S.Recorder.Record\");\n            case RecorderStages.Recording:\n                return LocalizationHelper.Get(\"S.Recorder.Pause\");\n            case RecorderStages.Paused:\n                return LocalizationHelper.Get(\"S.Recorder.Continue\");\n            case RecorderStages.Snapping:\n                return LocalizationHelper.Get(\"S.Recorder.Snap\");\n        }\n\n        return LocalizationHelper.Get(\"S.Recorder.Record\");\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/StageToCanvas.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing System.Globalization;\nusing System.Windows.Data;\nusing Application = System.Windows.Application;\nusing Brush = System.Windows.Media.Brush;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class StageToCanvas : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not RecorderStages stage)\n            return (Brush)Application.Current.FindResource(\"Vector.Record\");\n\n        switch (stage)\n        {\n            case RecorderStages.Stopped:\n                return (Brush)Application.Current.FindResource(\"Vector.Record\");\n            case RecorderStages.Recording:\n                return (Brush)Application.Current.FindResource(\"Vector.Pause\");\n            case RecorderStages.Paused:\n                return (Brush)Application.Current.FindResource(\"Vector.Record\");\n            case RecorderStages.Snapping:\n                return (Brush)Application.Current.FindResource(\"Vector.Camera.Add\");\n        }\n\n        return (Brush)Application.Current.FindResource(\"Vector.Record\");\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/StringArrayTypeConverter.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class StringArrayTypeConverter : TypeConverter\n{\n    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n    {\n        return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);\n    }\n\n    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)\n    {\n        return destinationType == typeof(string) || base.CanConvertTo(context, destinationType);\n    }\n\n    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n    {\n        if (value is not string text)\n            return base.ConvertFrom(context, culture, value);\n\n        var str = text.Trim();\n\n        return str.Length == 0 ? null : str.Split(culture.TextInfo.ListSeparator[0]);\n    }\n\n    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)\n    {\n        if (null == value)\n            throw new ArgumentNullException(nameof(value));\n\n        if (null == destinationType)\n            throw new ArgumentNullException(nameof(destinationType));\n\n        if (value is not string[] array || destinationType != typeof(string))\n            return base.ConvertTo(context, culture, value, destinationType);\n\n        var separator = culture?.TextInfo.ListSeparator[0] ?? ',';\n\n        return string.Join(separator.ToString(), array);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/StringToDoubleArray.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing System.Windows.Data;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class StringToDoubleArray : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        try\n        {\n            var text = value as string;\n\n            if (string.IsNullOrWhiteSpace(text))\n                return new DoubleCollection { 1, 0 };\n\n            return DoubleCollection.Parse(Regex.Replace(text, \" {2,}\", \" \"));\n        }\n        catch (Exception)\n        {\n            return new DoubleCollection { 1, 0 };\n        }\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var col = value as DoubleCollection;\n\n        return col?.ToString().Replace(',', ' ');\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/StringToInt.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Converts a String to Int32 and vice-versa.\n/// </summary>\npublic class StringToInt : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var stringValue = value as string;\n\n        if (string.IsNullOrEmpty(stringValue))\n            return DependencyProperty.UnsetValue;\n\n        return int.Parse(stringValue);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (parameter is not int)\n            return DependencyProperty.UnsetValue;\n\n        return parameter.ToString();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/StylusTipToBool.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing System.Windows.Ink;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class StylusTipToBool : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not StylusTip tip || parameter is not string param)\n            return DependencyProperty.UnsetValue;\n\n        return tip.ToString().Contains(param);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        var param = parameter as string;\n\n        if (value is not bool selection || !selection)\n            return DependencyProperty.UnsetValue;\n\n        if (string.IsNullOrEmpty(param))\n            return StylusTip.Rectangle;\n\n        return param.Equals(\"Ellipse\") ? StylusTip.Ellipse : StylusTip.Rectangle;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/TagToSelection.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// Tag to Selection property converter. It compares the the parameter with the provided value.\n/// </summary>\npublic class TagToSelection : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not string param)\n            return DependencyProperty.UnsetValue;\n\n        return Equals(param, parameter.ToString());\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (parameter is not string parameterString || value.Equals(false))\n            return DependencyProperty.UnsetValue;\n\n        return parameter;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/TimeSpanToString.cs",
    "content": "using System.Globalization;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class TimeSpanToString : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not TimeSpan time)\n            return Binding.DoNothing;\n\n        if (time.Days > 0)\n            return time.ToString(\"d\\\\:hh\\\\:mm\\\\:ss\", culture);\n\n        if (time.Hours > 0)\n            return time.ToString(\"h\\\\:mm\\\\:ss\", culture);\n\n        return time.ToString(\"mm\\\\:ss\", culture);\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/TimeSpanToTotalMilliseconds.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace ScreenToGif.Util.Converters;\n\npublic class TimeSpanToTotalMilliseconds : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not TimeSpan timeSpan)\n            return Binding.DoNothing;\n\n        return timeSpan.TotalMilliseconds;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is not double milliseconds)\n            return Binding.DoNothing;\n\n        return TimeSpan.FromMilliseconds(milliseconds);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Converters/UriToBitmap.cs",
    "content": "using System.IO;\nusing System.Windows.Data;\nusing ScreenToGif.Util.Extensions;\n\nnamespace ScreenToGif.Util.Converters;\n\n/// <summary>\n/// URI to BitmapImage converter.\n/// </summary>\npublic class UriToBitmap : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        var stringValue = value as string;\n        var size = parameter as string;\n\n        if (string.IsNullOrEmpty(stringValue))\n            return null;\n\n        if (!File.Exists(stringValue))\n            return null;\n\n        if (!string.IsNullOrEmpty(size))\n            return stringValue.SourceFrom(System.Convert.ToInt32(size));\n\n        var image = stringValue.SourceFrom();\n\n        if (image.PixelWidth < 3)\n            image = stringValue.SourceFrom();\n\n        return image;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)\n    {\n        return Binding.DoNothing;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/CrcHelper.cs",
    "content": "namespace ScreenToGif.Util;\n\npublic class CrcHelper\n{\n    #region Consts\n\n    private static readonly uint[] CrcTable =\n    {\n        0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,\n        0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,\n        0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n        0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,\n        0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,\n        0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n        0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,\n        0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,\n        0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n        0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,\n        0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,\n        0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n        0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,\n        0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,\n        0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n        0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,\n        0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,\n        0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n        0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,\n        0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,\n        0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n        0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,\n        0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,\n        0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n        0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,\n        0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,\n        0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n        0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,\n        0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,\n        0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n        0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,\n        0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,\n        0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n        0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,\n        0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,\n        0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n        0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,\n        0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,\n        0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n        0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,\n        0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,\n        0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n        0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,\n        0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,\n        0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n        0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,\n        0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,\n        0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n        0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,\n        0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,\n        0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n        0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,\n        0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,\n        0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n        0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,\n        0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,\n        0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n        0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,\n        0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,\n        0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n        0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,\n        0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,\n        0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n        0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d\n    };\n\n    #endregion Consts\n\n    public static uint Calculate(byte[] what)\n    {\n        var crc = what.Aggregate(0xffffffff, (current, t) => (current >> 8) ^ CrcTable[(current & 0xff) ^ t]);\n        crc ^= 0xffffffff;\n\n        return crc;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/DataGridHelper.cs",
    "content": "using System.ComponentModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Data;\nusing System.Windows.Media;\n\nnamespace ScreenToGif.Util;\n\npublic static class DataGridHelper\n{\n    public static DataGridCell GetCell(DataGrid dg, int row, int column)\n    {\n        var rowContainer = GetRow(dg, row);\n\n        if (rowContainer == null)\n            return null;\n\n        var presenter = VisualHelper.GetVisualChild<DataGridCellsPresenter>(rowContainer);\n\n        // try to get the cell but it may possibly be virtualized\n        var cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);\n\n        if (cell == null)\n        {\n            // now try to bring into view and retrieve the cell\n            dg.ScrollIntoView(rowContainer, dg.Columns[column]);\n            cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);\n        }\n\n        return cell;\n    }\n\n    public static DataGridRow GetRow(DataGrid dg, int index)\n    {\n        dg.UpdateLayout();\n        var row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);\n\n        if (row == null)\n        {\n            // may be virtualized, bring into view and try again\n            dg.ScrollIntoView(dg.Items[index]);\n            row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);\n        }\n\n        return row;\n    }\n\n    public static int GetRowIndex(DataGrid dg, DataGridCellInfo dgci)\n    {\n        if (!dgci.IsValid)\n            return -1;\n\n        var dgrow = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(dgci.Item);\n\n        return dgrow?.GetIndex() ?? -1;\n    }\n\n    public static int GetColIndex(DataGridCellInfo dgci)\n    {\n        return dgci.Column.DisplayIndex;\n    }\n\n    public static DataGridCell FindParentCell(DataGrid grid, DependencyObject child, int i)\n    {\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is DataGridCell cell)\n            return cell;\n\n        if (i > 4 || parent == null || parent is DataGridCell)\n            return parent as DataGridCell;\n\n        return FindParentCell(grid, parent, i + 1);\n    }\n\n    public static DataGridCell GetDataGridCell(DataGridCellInfo cellInfo)\n    {\n        if (cellInfo.IsValid == false)\n            return null;\n\n        var cellContent = cellInfo.Column.GetCellContent(cellInfo.Item);\n\n        return cellContent?.Parent as DataGridCell;\n    }\n\n    public static DataGridCell GetDataGridCell(DataGrid dataGrid)\n    {\n        if (dataGrid.CurrentCell.IsValid == false)\n            return null;\n\n        var cellContent = dataGrid.CurrentCell.Column.GetCellContent(dataGrid.CurrentCell.Item);\n\n        if (cellContent == null)\n            return GetCell(dataGrid, GetColIndex(dataGrid.CurrentCell), GetRowIndex(dataGrid, dataGrid.CurrentCell));\n\n        return cellContent.Parent as DataGridCell;\n    }\n\n    public static void FocusOnFirstCell(this DataGrid dataGrid)\n    {\n        dataGrid.SelectedIndex = 0;\n        //dataGrid.CurrentCell = new DataGridCellInfo(DataGrid.Items[0], DataGrid.Columns[0]);\n\n        var cell = GetCell(dataGrid, 0, 0);\n\n        cell?.Focus();\n    }\n\n    public static bool Sort(this DataGrid grid, ListSortDirection direction, string property, string second = null)\n    {\n        //If there's already a sort defined in another property.\n        foreach (var column in grid.Columns)\n        {\n            if (column.SortDirection.HasValue)\n                return false;\n\n            if (column is not DataGridTextColumn dataColumn || dataColumn.Binding == null)\n                continue;\n\n            if (dataColumn.Binding is Binding binding && binding.Path != null && binding.Path.Path == property)\n                column.SortDirection = direction;\n        }\n\n        //Add the new sort description.\n        grid.Items.SortDescriptions.Add(new SortDescription(property, direction));\n\n        if (second != null)\n            grid.Items.SortDescriptions.Add(new SortDescription(second, direction));\n\n        return true;\n    }\n\n    public static void ReSort(this DataGrid grid, Dictionary<string, ListSortDirection> sorted)\n    {\n        if (sorted == null || !sorted.Any())\n            sorted = grid.Columns.Where(x => x.SortDirection.HasValue).ToDictionary(w => w.SortMemberPath, w => w.SortDirection.Value);\n\n        grid.Items.SortDescriptions.Clear();\n\n        foreach (var (key, value) in sorted)\n        {\n            #region Search for the column that should be sorted\n\n            var column = grid.Columns.FirstOrDefault(x =>\n            {\n                if (x is not DataGridTextColumn dataColumn || dataColumn.Binding == null)\n                    return false;\n\n                //Only returns true if it's the match.\n                if (dataColumn.Binding is Binding binding && binding.Path != null && binding.Path.Path == key)\n                    return true;\n\n                return false;\n            });\n\n            #endregion\n\n            //Displays the sort direction glyph.\n            if (column != null)\n                column.SortDirection = value;\n\n            //Add the new sort description.\n            grid.Items.SortDescriptions.Add(new SortDescription(key, value));\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/DebounceDispatcher.cs",
    "content": "using System.Windows.Threading;\n\nnamespace ScreenToGif.Util;\n\npublic class DebounceDispatcher\n{\n    private DispatcherTimer _timer;\n\n    public DateTime SyncTime { get; set; } = DateTime.Now;\n\n    public DateTime TimerStarted { get; private set; } = DateTime.Now.AddYears(-1);\n\n    /// <summary>\n    /// Debounce an event by resetting the event timeout every time the event is \n    /// fired. The behavior is that the Action passed is fired only after events\n    /// stop firing for the given timeout period.\n    /// \n    /// Use Debounce when you want events to fire only after events stop firing\n    /// after the given interval timeout period.\n    /// \n    /// Wrap the logic you would normally use in your event code into\n    /// the  Action you pass to this method to debounce the event.\n    /// Example: https://gist.github.com/RickStrahl/0519b678f3294e27891f4d4f0608519a\n    /// </summary>\n    /// <param name=\"interval\">Timeout in Milliseconds</param>\n    /// <param name=\"action\">Action<object> to fire when debounced event fires</object></param>\n    /// <param name=\"param\">optional parameter</param>\n    /// <param name=\"priority\">optional priority for the dispatcher</param>\n    /// <param name=\"dispatcher\">optional dispatcher. If not passed or null CurrentDispatcher is used.</param>        \n    public void Debounce(int interval, Action<object> action, object param = null, DispatcherPriority priority = DispatcherPriority.ApplicationIdle, Dispatcher dispatcher = null)\n    {\n        //Kill pending timer and pending ticks.\n        _timer?.Stop();\n        _timer = null;\n\n        dispatcher ??= Dispatcher.CurrentDispatcher;\n\n        //Timer is recreated for each event and effectively resets the timeout.\n        //Action only fires after timeout has fully elapsed without other events firing in between.\n        _timer = new DispatcherTimer(TimeSpan.FromMilliseconds(interval), priority, (s, e) =>\n        {\n            if (_timer == null)\n                return;\n\n            _timer?.Stop();\n            _timer = null;\n            action.Invoke(param);\n        }, dispatcher);\n\n        _timer.Start();\n        TimerStarted = DateTime.Now;\n    }\n\n    public void Debounce(int interval, Task task, CancellationToken token, DispatcherPriority priority = DispatcherPriority.ApplicationIdle, Dispatcher dispatcher = null)\n    {\n        //Kill pending timer and pending ticks.\n        _timer?.Stop();\n        _timer = null;\n\n        dispatcher ??= Dispatcher.CurrentDispatcher;\n\n        //Timer is recreated for each event and effectively resets the timeout.\n        //Action only fires after timeout has fully elapsed without other events firing in between.\n        _timer = new DispatcherTimer(TimeSpan.FromMilliseconds(interval), priority, async (s, e) =>\n        {\n            if (_timer == null)\n                return;\n\n            _timer?.Stop();\n            _timer = null;\n\n            await task.WaitAsync(token);\n        }, dispatcher);\n\n        _timer.Start();\n        TimerStarted = DateTime.Now;\n    }\n\n    /// <summary>\n    /// This method throttles events by allowing only 1 event to fire for the given\n    /// timeout period. Only the last event fired is handled - all others are ignored.\n    /// Throttle will fire events every timeout ms even if additional events are pending.\n    /// \n    /// Use Throttle where you need to ensure that events fire at given intervals.\n    /// </summary>\n    /// <param name=\"interval\">Timeout in Milliseconds</param>\n    /// <param name=\"action\">Action<object> to fire when debounced event fires</object></param>\n    /// <param name=\"param\">optional parameter</param>\n    /// <param name=\"priority\">optional priority for the dispatcher</param>\n    /// <param name=\"dispatcher\">optional dispatcher. If not passed or null CurrentDispatcher is used.</param>\n    public void Throttle(int interval, Action<object> action, object param = null, DispatcherPriority priority = DispatcherPriority.ApplicationIdle, Dispatcher dispatcher = null)\n    {\n        //Kill pending timer and pending ticks.\n        _timer?.Stop();\n        _timer = null;\n\n        dispatcher ??= Dispatcher.CurrentDispatcher;\n\n        var curTime = DateTime.Now;\n\n        //If timeout is not up yet - adjust timeout to fire with potentially new Action parameters.\n        if (curTime.Subtract(TimerStarted).TotalMilliseconds < interval)\n            interval -= (int) curTime.Subtract(TimerStarted).TotalMilliseconds;\n\n        _timer = new DispatcherTimer(TimeSpan.FromMilliseconds(interval), priority, (s, e) =>\n        {\n            if (_timer == null)\n                return;\n\n            _timer?.Stop();\n            _timer = null;\n            action.Invoke(param);\n        }, dispatcher);\n\n        _timer.Start();\n        TimerStarted = curTime;            \n    }\n\n    public void Cancel()\n    {\n        //Kill pending timer and pending ticks.\n        _timer?.Stop();\n        _timer = null;\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.Util/DirectoryHelper.cs",
    "content": "using System.IO;\nusing System.Security.AccessControl;\nusing System.Security.Principal;\n\nnamespace ScreenToGif.Util;\n\npublic static class DirectoryHelper\n{\n    public static bool HasWriteRights(string directory)\n    {\n        try\n        {\n            //If the current folder does not exists yet, try getting the parent folder.\n            while (!Directory.Exists(directory))\n                directory = Path.GetDirectoryName(directory);\n\n            //This will raise an exception if the path is read only or do not have access to view the permissions.\n            return DirectoryHasPermission(directory, FileSystemRights.Write);\n        }\n        catch\n        {\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Test a directory for create file access permissions.\n    /// </summary>\n    /// <param name=\"directoryPath\">Full path to directory </param>\n    /// <param name=\"accessRight\">File System right tested</param>\n    /// <returns>State [bool]</returns>\n    internal static bool DirectoryHasPermission(string directoryPath, FileSystemRights accessRight)\n    {\n        try\n        {\n            var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());\n            var rules = new DirectorySecurity(directoryPath, AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group)\n                .GetAccessRules(true, true, typeof(SecurityIdentifier)).OfType<FileSystemAccessRule>().OrderBy(o => o.AccessControlType == AccessControlType.Deny);\n            //var rules = Directory.GetAccessControl(directoryPath).GetAccessRules(true, true, typeof(SecurityIdentifier)).OfType<FileSystemAccessRule>().OrderBy(o => o.AccessControlType == AccessControlType.Deny);\n\n            foreach (var rule in rules)\n            {\n                //if (rule.IdentityReference as NTAccount == null)\n                //    continue;\n\n                //if (identity.Groups?.Contains(rule.IdentityReference) == true || identity.Owner?.Equals(rule.IdentityReference) == true || identity.User?.Equals(rule.IdentityReference) == true)\n                if (rule.IdentityReference is SecurityIdentifier identifier && principal.IsInRole(identifier))\n                {\n                    if ((accessRight & rule.FileSystemRights) == accessRight)\n                        return rule.AccessControlType == AccessControlType.Allow;\n                }\n            }\n\n            return false;\n        }\n        catch (UnauthorizedAccessException)\n        {\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/DynamicResourceBinding.cs",
    "content": "using System.Globalization;\nusing System.Windows;\nusing System.Windows.Data;\nusing System.Windows.Markup;\nusing Binding = System.Windows.Data.Binding;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// From MarqueIV: http://stackoverflow.com/questions/33816511/how-do-you-create-a-dynamicresourcebinding-that-supports-converters-stringforma\n/// </summary>\npublic class DynamicResourceBinding : DynamicResourceExtension\n{\n    #region Internal Classes\n\n    private class DynamicResourceBindingSource : Freezable\n    {\n        public static readonly DependencyProperty ResourceReferenceExpressionProperty = DependencyProperty.Register(nameof(ResourceReferenceExpression), \n            typeof(object), typeof(DynamicResourceBindingSource), new FrameworkPropertyMetadata());\n\n        public object ResourceReferenceExpression\n        {\n            get => GetValue(ResourceReferenceExpressionProperty);\n            set => SetValue(ResourceReferenceExpressionProperty, value);\n        }\n\n        protected override Freezable CreateInstanceCore()\n        {\n            return new DynamicResourceBindingSource();\n        }\n    }\n\n    #endregion Internal Classes\n\n    public DynamicResourceBinding() { }\n\n    public DynamicResourceBinding(string resourceKey) : base(resourceKey)\n    { }\n\n    public IValueConverter Converter { get; set; }\n\n    public object ConverterParameter { get; set; }\n\n    public CultureInfo ConverterCulture { get; set; }\n\n    public string StringFormat { get; set; }\n\n    public override object ProvideValue(IServiceProvider serviceProvider)\n    {\n        //Get the expression representing the DynamicResource\n        var resourceReferenceExpression = base.ProvideValue(serviceProvider);\n\n        //If there's no converter, nor StringFormat, just return it (Matches standard DynamicResource behavior}\n        if (Converter == null && StringFormat == null)\n            return resourceReferenceExpression;\n\n        //Create the Freezable-based object and set its ResourceReferenceExpression property directly to the \n        //result of base.ProvideValue (held in resourceReferenceExpression). Then add it to the target FrameworkElement's\n        //Resources collection (using itself as its key for uniqueness) so it participates in the resource lookup chain.\n        var dynamicResourceBindingSource = new DynamicResourceBindingSource\n        {\n            ResourceReferenceExpression = resourceReferenceExpression\n        };\n\n        //Get the target FrameworkElement so we have access to its Resources collection\n        //Note: targetFrameworkElement may be null in the case of setters. Still trying to figure out how to handle them.\n        //For now, they just fall back to looking up at the app level\n        var targetInfo = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));\n        var targetFrameworkElement = targetInfo?.TargetObject as FrameworkElement;\n        targetFrameworkElement?.Resources.Add(dynamicResourceBindingSource, dynamicResourceBindingSource);\n\n        //Now since we have a source object which has a DependencyProperty that's set to the value of the\n        //DynamicResource we're interested in, we simply use that as the source for a new binding, passing in all of the other binding-related properties.\n        var binding = new Binding\n        {\n            Path = new PropertyPath(DynamicResourceBindingSource.ResourceReferenceExpressionProperty),\n            Source = dynamicResourceBindingSource,\n            Converter = Converter,\n            ConverterParameter = ConverterParameter,\n            ConverterCulture = ConverterCulture,\n            StringFormat = StringFormat,\n            Mode = BindingMode.OneWay\n        };\n\n        //Now we simply return the result of the new binding's ProvideValue\n        //method (or the binding itself if the target is not a FrameworkElement)\n        return (targetFrameworkElement != null) ? binding.ProvideValue(serviceProvider) : binding;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/ExtendedStack.cs",
    "content": "using System.Collections.Generic;\n\nnamespace ScreenToGif.Util;\n\npublic class ExtendedStack<T> : LinkedList<T>\n{\n    public T Pop()\n    {\n        var first = First.Value;\n            \n        RemoveFirst();\n\n        return first;\n    }\n\n    public T Peek()\n    {\n        return First.Value;\n    }\n\n    public void Push(T obj)\n    {\n        AddFirst(obj);\n    }\n\n\n    public T PopBottom()\n    {\n        var last = Last.Value;\n\n        RemoveLast();\n\n        return last;\n    }\n\n    public T PeekBottom()\n    {\n        return Last.Value;\n    }\n\n    public void PushBottom(T obj)\n    {\n        AddLast(obj);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/EnumExtensions.cs",
    "content": "using System.ComponentModel;\nusing System.Globalization;\nusing System.Reflection;\n\nnamespace ScreenToGif.Util.Extensions;\n\n/// <summary>\n/// From https://stackoverflow.com/a/60529952/1735672.\n/// </summary>\npublic static class EnumExtensions\n{\n    public static string GetDescription(this Enum value)\n    {\n        return GetCustomAttribute<DescriptionAttribute>(value)?.Description ?? value.ToString();\n    }\n\n    public static string GetLowerDescription(this Enum value)\n    {\n        return GetCustomAttribute<DescriptionAttribute>(value)?.Description ?? value.ToString().ToLower();\n    }\n\n    /// <summary>\n    /// Gets the custom attribute <typeparamref name=\"T\"/> for the enum constant, if such a constant is defined and has such an attribute; otherwise null.\n    /// </summary>\n    public static T GetCustomAttribute<T>(this Enum value) where T : Attribute\n    {\n        return GetField(value)?.GetCustomAttribute<T>(false);\n    }\n\n    /// <summary>\n    /// Gets the FieldInfo for the enum constant, if such a constant is defined; otherwise null.\n    /// </summary>\n    public static FieldInfo GetField(this Enum value)\n    {\n        var u64 = ToUInt64(value);\n        return value.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static).FirstOrDefault(f => ToUInt64(f.GetRawConstantValue()) == u64);\n    }\n\n    /// <summary>\n    /// Checks if an enum constant is defined for this enum value\n    /// </summary>\n    public static bool IsDefined(this Enum value)\n    {\n        return GetField(value) != null;\n    }\n\n    /// <summary>\n    /// Converts the enum value to UInt64\n    /// </summary>\n    public static ulong ToUInt64(this Enum value) => ToUInt64((object)value);\n\n    private static ulong ToUInt64(object value)\n    {\n        switch (Convert.GetTypeCode(value))\n        {\n            case TypeCode.SByte:\n            case TypeCode.Int16:\n            case TypeCode.Int32:\n            case TypeCode.Int64:\n                return unchecked((ulong)Convert.ToInt64(value, CultureInfo.InvariantCulture));\n\n            case TypeCode.Byte:\n            case TypeCode.UInt16:\n            case TypeCode.UInt32:\n            case TypeCode.UInt64:\n            case TypeCode.Char:\n            case TypeCode.Boolean:\n                return Convert.ToUInt64(value, CultureInfo.InvariantCulture);\n\n            default: throw new InvalidOperationException(\"UnknownEnumType\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/ImageExtensions.cs",
    "content": "using System.IO;\nusing System.Windows;\nusing System.Windows.Media.Imaging;\n\nnamespace ScreenToGif.Util.Extensions;\n\npublic static class ImageExtensions\n{\n    /// <summary>\n    /// Gets the BitmapSource from the source and closes the file usage.\n    /// </summary>\n    /// <param name=\"fileSource\">The file to open.</param>\n    /// <param name=\"size\">The maximum height of the image.</param>\n    /// <returns>The open BitmapSource.</returns>\n    public static BitmapSource SourceFrom(this string fileSource, int? size = null)\n    {\n        using (var stream = new FileStream(fileSource, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;\n\n            if (size.HasValue)\n                bitmapImage.DecodePixelHeight = size.Value;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            bitmapImage.Freeze(); //Just in case you want to load the image in another thread\n            return bitmapImage;\n        }\n    }\n\n    /// <summary>\n    /// Gets the BitmapSource from the source and closes the file usage.\n    /// </summary>\n    /// <param name=\"array\">The array to open.</param>\n    /// <param name=\"size\">The maximum height of the image.</param>\n    /// <returns>The open BitmapSource.</returns>\n    public static BitmapSource SourceFrom(this byte[] array, int? size = null)\n    {\n        using (var stream = new MemoryStream(array))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;\n\n            if (size.HasValue)\n                bitmapImage.DecodePixelHeight = size.Value;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            bitmapImage.Freeze(); //Just in case you want to load the image in another thread\n            return bitmapImage;\n        }\n    }\n\n    /// <summary>\n    /// Gets the BitmapSource from the source and closes the file usage.\n    /// </summary>\n    /// <param name=\"stream\">The stream to open.</param>\n    /// <param name=\"size\">The maximum height of the image.</param>\n    /// <returns>The open BitmapSource.</returns>\n    public static BitmapSource SourceFrom(this Stream stream, int? size = null)\n    {\n        var bitmapImage = new BitmapImage();\n        bitmapImage.BeginInit();\n        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;\n\n        if (size.HasValue)\n            bitmapImage.DecodePixelHeight = size.Value;\n\n        bitmapImage.StreamSource = stream;\n        bitmapImage.EndInit();\n        bitmapImage.Freeze(); //Just in case you want to load the image in another thread\n        return bitmapImage;\n    }\n\n    /// <summary>\n    /// Gets the BitmapSource from the source and closes the file usage.\n    /// </summary>\n    /// <param name=\"fileSource\">The file to open.</param>\n    /// <param name=\"rect\">The desired crop area.</param>\n    /// <returns>The open BitmapSource.</returns>\n    public static BitmapSource CropFrom(this string fileSource, Int32Rect rect)\n    {\n        using (var stream = new FileStream(fileSource, FileMode.Open, FileAccess.Read))\n        {\n            var bitmapImage = new BitmapImage();\n            bitmapImage.BeginInit();\n            bitmapImage.CacheOption = BitmapCacheOption.OnLoad;\n\n            bitmapImage.StreamSource = stream;\n            bitmapImage.EndInit();\n            bitmapImage.Freeze(); //Just in case you want to load the image in another thread.\n\n            var scale = Math.Round(bitmapImage.DpiX / 96d, 2);\n\n            var x = Math.Min(bitmapImage.PixelWidth - 1, Math.Max(0, (int)(rect.X * scale)));\n            var y = Math.Min(bitmapImage.PixelHeight - 1, Math.Max(0, (int)(rect.Y * scale)));\n            var width = (int)(rect.Width * scale);\n            var height = (int)(rect.Height * scale);\n\n            width = Math.Min(width, bitmapImage.PixelWidth - x);\n            height = Math.Min(height, bitmapImage.PixelHeight - y);\n\n            rect = new Int32Rect(x, y, width, height);\n\n            if (!new Int32Rect(0, 0, bitmapImage.PixelWidth, bitmapImage.PixelHeight).Contains(rect))\n                return null;\n\n            return new CroppedBitmap(bitmapImage, rect);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/InlineExtensions.cs",
    "content": "using System.Windows;\nusing System.Windows.Documents;\nusing FontFamily = System.Windows.Media.FontFamily;\n\nnamespace ScreenToGif.Util.Extensions;\n\npublic static class InlineExtensions\n{\n    public static Run WithResource(this Run run, string id)\n    {\n        run.SetResourceReference(Run.TextProperty, id);\n        return run;\n    }\n\n    public static Hyperlink WithLink(this Hyperlink hyperlink, string link)\n    {\n        if (string.IsNullOrWhiteSpace(link))\n            return hyperlink;\n\n        hyperlink.NavigateUri = new Uri(link);\n        hyperlink.Inlines.Add(new Run(link));\n        hyperlink.RequestNavigate += (sender, args) =>\n        {\n            try\n            {\n                ProcessHelper.StartWithShell(args.Uri.AbsoluteUri);\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"Trying to navigate to \" + link);\n            }\n        };\n\n        return hyperlink;\n    }\n\n    public static Paragraph WithKeyLink(this Paragraph paragraph, string id, string link, bool isStatic = false)\n    {\n        paragraph.KeepTogether = true;\n        paragraph.TextAlignment = TextAlignment.Left;\n        paragraph.FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"];\n\n        paragraph.Inlines.Add(isStatic ? new Run(id) : new Run().WithResource(id));\n        paragraph.Inlines.Add(new Run(\" \"));\n        paragraph.Inlines.Add(new Hyperlink().WithLink(link));\n        paragraph.Margin = new Thickness(0);\n        return paragraph;\n    }\n\n    public static Paragraph WithLineBreak(this Paragraph paragraph)\n    {\n        paragraph.Inlines.Add(new LineBreak());\n        return paragraph;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/MathExtensions.cs",
    "content": "namespace ScreenToGif.Util.Extensions;\n\npublic static class MathExtensions\n{\n    public static int DivisibleByTwo(this int number) => number % 2 == 0 ? number : number + 1;\n\n    public static long PackLong(int left, int right) => (long)left << 32 | (uint)right;\n\n    public static void UnpackLong(long value, out int left, out int right)\n    {\n        left = (int)(value >> 32);\n        right = (int)(value & 0xffffffffL);\n    }\n\n    public static double RoundUpValue(double value, int decimalpoint = 0)\n    {\n        var result = Math.Round(value, decimalpoint);\n\n        if (result < value)\n            result += Math.Pow(10, -decimalpoint);\n\n        return result;\n    }\n\n    /// <summary>\n    /// Gets the third value based on the other 2 parameters.\n    /// Total       =   100 %\n    /// Variable    =   percentage\n    /// </summary>\n    /// <returns>The value that was not filled.</returns>\n    public static double CrossMultiplication(double? total, double? variable, double? percentage)\n    {\n        #region Validation\n\n        //Only one of the parameters can bee null.\n        var amount = (total.HasValue ? 0 : 1) + (variable.HasValue ? 0 : 1) + (percentage.HasValue ? 0 : 1);\n\n        if (amount != 1)\n            throw new ArgumentException(\"Only one of the parameters can bee null\");\n\n        #endregion\n\n        if (!total.HasValue && percentage.HasValue && variable.HasValue)\n            return (percentage.Value * 100d) / variable.Value;\n\n        if (!percentage.HasValue && total.HasValue && variable.HasValue)\n            return total > 0 || total < 0 ? (variable.Value * 100d) / total.Value : 0;\n\n        if (!variable.HasValue && total.HasValue && percentage.HasValue)\n            return (percentage.Value * total.Value) / 100d;\n\n        return 0;\n    }\n\n    /// <summary>\n    /// Gets the third value based on the other 2 parameters.\n    /// Total       =   100 %\n    /// Variable    =   percentage\n    /// </summary>\n    /// <returns>The value that was not filled.</returns>\n    public static decimal CrossMultiplication(decimal? total, decimal? variable, decimal? percentage)\n    {\n        #region Validation\n\n        //Only one of the parameters can bee null.\n        var amount = (total.HasValue ? 0 : 1) + (variable.HasValue ? 0 : 1) + (percentage.HasValue ? 0 : 1);\n\n        if (amount != 1)\n            throw new ArgumentException(\"Only one of the parameters can bee null\");\n\n        #endregion\n\n        if (!total.HasValue && percentage.HasValue && variable.HasValue)\n            return (percentage.Value * 100m) / variable.Value;\n\n        if (!percentage.HasValue && total.HasValue && variable.HasValue)\n            return total > 0 || total < 0 ? (variable.Value * 100m) / total.Value : 0;\n\n        if (!variable.HasValue && total.HasValue && percentage.HasValue)\n            return (percentage.Value * total.Value) / 100m;\n\n        return 0;\n    }\n\n    /// <summary>\n    /// The Greater Common Divisor.\n    /// </summary>\n    public static double Gcd(double a, double b)\n    {\n        return b == 0 ? a : Gcd(b, a % b);\n    }\n\n    /// <summary>\n    /// The Greater Common Divisor.\n    /// </summary>\n    public static decimal Gcd(decimal a, decimal b)\n    {\n        return b == 0 ? a : Gcd(b, a % b);\n    }\n\n    public static bool NearlyEquals(this float a, float b, float epsilon = 0.0001F)\n    {\n        var absA = Math.Abs(a);\n        var absB = Math.Abs(b);\n        var diff = Math.Abs(a - b);\n\n        if (a == b)\n            return true;\n\n        if (a == 0 || b == 0 || diff < float.Epsilon)\n        {\n            // a or b is zero or both are extremely close to it\n            // relative error is less meaningful here\n            return diff < epsilon;\n        }\n\n        // use relative error\n        return diff / (absA + absB) < epsilon;\n    }\n\n    public static bool NearlyEquals(this double a, double b, double epsilon = 0.0001D)\n    {\n        var absA = Math.Abs(a);\n        var absB = Math.Abs(b);\n        var diff = Math.Abs(a - b);\n\n        if (a == b)\n        { // shortcut, handles infinities\n            return true;\n        }\n\n        if (a == 0 || b == 0 || diff < double.Epsilon)\n        {\n            // a or b is zero or both are extremely close to it\n            // relative error is less meaningful here\n            return diff < epsilon;\n        }\n\n        // use relative error\n        return diff / (absA + absB) < epsilon;\n    }\n\n    public static bool NearlyEquals(this double a, int absB, double epsilon = 0.0001D)\n    {\n        var absA = Math.Abs(a);\n        var diff = Math.Abs(a - absB);\n\n        if (a == absB)\n        { // shortcut, handles infinities\n            return true;\n        }\n\n        if (a == 0 || absB == 0 || diff < double.Epsilon)\n        {\n            // a or b is zero or both are extremely close to it\n            // relative error is less meaningful here\n            return diff < epsilon;\n        }\n\n        // use relative error\n        return diff / (absA + absB) < epsilon;\n    }\n\n    public static bool NearlyEquals(this double? value1, double? value2, double unimportantDifference = 0.0001)\n    {\n        if (value1 != value2)\n        {\n            if (value1 == null || value2 == null)\n                return false;\n\n            return Math.Abs(value1.Value - value2.Value) < unimportantDifference;\n        }\n\n        return true;\n    }\n\n    /// <summary>\n    /// Forces an integer to be between two values.\n    /// </summary>\n    public static int Clamp(this int value, int min, int max)\n    {\n        return (value <= min) ? min : (value >= max) ? max : value;\n    }\n\n    /// <summary>\n    /// Forces a double to be between two values.\n    /// </summary>\n    public static double Clamp(this double value, double min, double max)\n    {\n        return (value <= min) ? min : (value >= max) ? max : value;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/ParseExtensions.cs",
    "content": "namespace ScreenToGif.Util.Extensions;\n\ninternal static class ParseExtensions\n{\n    internal static bool TryParseBoolean(this string source)\n    {\n        bool.TryParse(source, out var result);\n\n        return result;\n    }\n\n    internal static DateTime? TryParseDateTimeNullable(this string source)\n    {\n        if (!DateTime.TryParse(source, out var result))\n            return null;\n\n        return result;\n    }\n\n    internal static int TryParseInteger(this string source)\n    {\n        return !int.TryParse(source, out var result) ? 0 : result;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/PropertyExtensions.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Util.Extensions;\n\ninternal static class PropertyExtensions\n{\n    internal static bool AsBoolean(this Property prop)\n    {\n        return prop == null || prop.Value.TryParseBoolean();\n    }\n\n    internal static DateTime? AsNullableDateTime(this Property prop)\n    {\n        return prop?.Value.TryParseDateTimeNullable();\n    }\n\n    internal static int AsInteger(this Property prop)\n    {\n        return prop?.Value.TryParseInteger() ?? 0;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/RectExtensions.cs",
    "content": "using System.Windows;\n\nnamespace ScreenToGif.Util.Extensions;\n\npublic static class RectExtensions\n{\n    public static bool Contains(this Int32Rect first, Int32Rect second)\n    {\n        if (first.IsEmpty || second.IsEmpty || (first.X > second.X || first.Y > second.Y) || first.X + first.Width < second.X + second.Width)\n            return false;\n\n        return first.Y + first.Height >= second.Y + second.Height;\n    }\n\n    public static Rect Offset(this Rect rect, double offset)\n    {\n        return new Rect(Math.Round(rect.Left + offset, MidpointRounding.AwayFromZero), Math.Round(rect.Top + offset, MidpointRounding.AwayFromZero),\n            Math.Round(rect.Width - (offset * 2d), MidpointRounding.AwayFromZero), Math.Round(rect.Height - (offset * 2d), MidpointRounding.AwayFromZero));\n\n        //return new Rect(rect.Left + offset, rect.Top + offset, rect.Width - (offset * 2d), rect.Height - (offset * 2d));\n    }\n\n    public static Rect Translate(this Rect rect, double offsetX, double offsetY)\n    {\n        return rect.IsEmpty ? rect : new Rect(Math.Round(rect.Left + offsetX, MidpointRounding.AwayFromZero), Math.Round(rect.Top + offsetY, MidpointRounding.AwayFromZero),\n            Math.Round(rect.Width, MidpointRounding.AwayFromZero), Math.Round(rect.Height, MidpointRounding.AwayFromZero));\n\n        //return rect.IsEmpty ? rect : new Rect(rect.Left + offsetX, rect.Top + offsetY, rect.Width, rect.Height);\n    }\n\n    public static Rect Scale(this Rect rect, double scale)\n    {\n        return new Rect(Math.Round(rect.Left * scale, MidpointRounding.AwayFromZero), Math.Round(rect.Top * scale, MidpointRounding.AwayFromZero),\n            Math.Round(rect.Width * scale, MidpointRounding.AwayFromZero), Math.Round(rect.Height * scale, MidpointRounding.AwayFromZero));\n    }\n\n    public static Rect Limit(this Rect rect, double width, double height)\n    {\n        var newX = rect.X < 0 ? 0 : rect.X;\n        var newY = rect.Y < 0 ? 0 : rect.Y;\n\n        var newWidth = newX + rect.Width > width ? width - newX : rect.Width;\n        var newHeight = newY + rect.Height > height ? height - newY : rect.Height;\n\n        return new Rect(newX, newY, newWidth, newHeight);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/StringExtensions.cs",
    "content": "namespace ScreenToGif.Util.Extensions;\n\npublic static class StringExtensions\n{\n    public static string Remove(this string text, params string[] keys)\n    {\n        if (text == null)\n            throw new ArgumentNullException(nameof(text), \"The text should not be null.\");\n\n        foreach (var key in keys)\n            text = text.Replace(key, string.Empty);\n\n        return text;\n    }\n\n    public static string Truncate(this string text, int size)\n    {\n        if (string.IsNullOrEmpty(text))\n            return string.Empty;\n\n        return text.Length <= size ? text : text.Substring(0, size);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Extensions/VersionExtensions.cs",
    "content": "namespace ScreenToGif.Util.Extensions;\n\npublic static class VersionExtensions\n{\n    public static string ToStringShort(this Version version)\n    {\n        var result = $\"{version.Major}.{version.Minor}\";\n\n        if (version.Build > 0)\n            result += $\".{version.Build}\";\n\n        if (version.Revision > 0)\n            result += $\".{version.Revision}\";\n\n        return result;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/FastRandom.cs",
    "content": "namespace ScreenToGif.Util;\n\npublic class FastRandom\n{\n    private const double RealUnitInt = 1.0/(int.MaxValue + 1.0);\n\n    private uint _x, _y, _z, _w;\n\n    public FastRandom(uint seed)\n    {\n        _x = seed;\n        _y = 842502087;\n        _z = 3579807591;\n        _w = 273326509;\n    }\n\n    public int Next(int upperBound)\n    {\n        var t = (_x ^ (_x << 11)); _x = _y; _y = _z; _z = _w;\n        return (int) ((RealUnitInt*(int) (0x7FFFFFFF & (_w = (_w ^ (_w >> 19)) ^ (t ^ (t >> 8)))))*upperBound);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Framerate.cs",
    "content": "using System.Diagnostics;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Frame rate monitor. \n/// </summary>\npublic static class FrameRate\n{\n    #region Private Variables\n\n    private static Stopwatch _stopwatch = new();\n    private static int _interval = 15;\n    private static bool _started = true;\n    private static bool _fixedRate = false;\n\n    #endregion\n\n    /// <summary>\n    /// Prepares the FrameRate monitor.\n    /// </summary>\n    /// <param name=\"interval\">The selected interval of each snapshot.</param>\n    public static void Start(int interval)\n    {\n        _stopwatch = new Stopwatch();\n\n        _interval = interval;\n        _fixedRate = UserSettings.All.FixedFrameRate;\n    }\n\n    /// <summary>\n    /// Prapares the framerate monitor\n    /// </summary>\n    /// <param name=\"useFixed\">If true, uses the fixed internal provided.</param>\n    /// <param name=\"interval\">The fixed interval to be used.</param>\n    public static void Start(bool useFixed, int interval)\n    {\n        _stopwatch = new Stopwatch();\n\n        _interval = interval;\n        _fixedRate = useFixed;\n    }\n\n    /// <summary>\n    /// Gets the diff between the last call.\n    /// </summary>\n    /// <returns>The amount of seconds.</returns>\n    public static int GetMilliseconds()\n    {\n        if (_fixedRate)\n            return _interval;\n\n        if (_started)\n        {\n            _started = false;\n            _stopwatch.Start();\n            return _interval;\n        }\n\n        var mili = (int)_stopwatch.ElapsedMilliseconds;\n        _stopwatch.Restart();\n\n        return mili;\n    }\n\n    /// <summary>\n    /// Determine that a stop/pause of the recording.\n    /// </summary>\n    public static void Stop()\n    {\n        _stopwatch.Stop();\n        _started = true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/GifskiInterop.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Structs;\nusing ScreenToGif.Native.Helpers;\nusing ScreenToGif.Util.Codification;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\nusing System.Runtime.InteropServices;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Interoperability with the Gifski library.\n/// https://docs.rs/gifski/latest/gifski/\n/// </summary>\npublic class GifskiInterop : IDisposable\n{\n    private double _timeStamp = 0;\n\n    private delegate IntPtr NewDelegate(GifskiSettings settings);\n    private delegate GifskiErrorCodes AddPngFrameDelegate(IntPtr handle, uint index, [MarshalAs(UnmanagedType.LPUTF8Str)] string path, double timestamp);\n    private delegate GifskiErrorCodes AddRgbFrameDelegate(IntPtr handle, uint frameNumber, uint width, uint bytesPerRow, uint height, IntPtr pixels, double timestamp);\n\n    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]\n    private delegate void ErrorMessageCallback(IntPtr message, IntPtr userData);\n    private delegate GifskiErrorCodes SetErrorMessageCallbackDelegate(IntPtr handle, ErrorMessageCallback callback, IntPtr userData);\n    private delegate GifskiErrorCodes SetFileOutputDelegate(IntPtr handle, [MarshalAs(UnmanagedType.LPUTF8Str)] string path);\n    private delegate GifskiErrorCodes FinishDelegate(IntPtr handle);\n\n    private delegate GifskiErrorCodes EndAddingFramesDelegate(IntPtr handle);\n    private delegate GifskiErrorCodes WriteDelegate(IntPtr handle, [MarshalAs(UnmanagedType.LPUTF8Str)] string destination);\n    private delegate void DropDelegate(IntPtr handle);\n\n    private readonly NewDelegate _new;\n    private readonly AddPngFrameDelegate _addPngFrame;\n    private readonly AddRgbFrameDelegate _addRgbFrame;\n    private readonly SetErrorMessageCallbackDelegate _setErrorCallback;\n    private readonly SetFileOutputDelegate _setFileOutput;\n    private readonly FinishDelegate _finish;\n    private readonly EndAddingFramesDelegate _endAddingFrames;\n    private readonly WriteDelegate _write;\n    private readonly DropDelegate _drop;\n\n    public bool IsOlderThan0Dot9 => _endAddingFrames != null;\n\n    public bool IsProperlySetup => _finish != null;\n\n    public GifskiInterop(string path = null)\n    {\n        var dllPath = path ?? UserSettings.All.GifskiLocation;\n\n        _new = FunctionLoader.LoadFunction<NewDelegate>(dllPath, \"gifski_new\");\n        _addPngFrame = FunctionLoader.LoadFunction<AddPngFrameDelegate>(dllPath, \"gifski_add_frame_png_file\");\n        _addRgbFrame = FunctionLoader.LoadFunction<AddRgbFrameDelegate>(dllPath, \"gifski_add_frame_rgb\");\n\n        //Older versions of the library. < 0.9\n        _endAddingFrames = FunctionLoader.TryLoadFunction<EndAddingFramesDelegate>(dllPath, \"gifski_end_adding_frames\");\n        _write = FunctionLoader.TryLoadFunction<WriteDelegate>(dllPath, \"gifski_write\");\n        _drop = FunctionLoader.TryLoadFunction<DropDelegate>(dllPath, \"gifski_drop\");\n\n        //Newer versions.\n        _setErrorCallback = FunctionLoader.TryLoadFunction<SetErrorMessageCallbackDelegate>(dllPath, \"gifski_set_error_message_callback\");\n        _setFileOutput = FunctionLoader.TryLoadFunction<SetFileOutputDelegate>(dllPath, \"gifski_set_file_output\");\n        _finish = FunctionLoader.TryLoadFunction<FinishDelegate>(dllPath, \"gifski_finish\");\n    }\n\n    public IntPtr Start(uint width, uint height, int quality, bool looped = true, bool fast = false)\n    {\n        var repeat = looped ? (short)0 : (short)-1;\n\n        return _new(new GifskiSettings(width, height, (byte)quality, fast, repeat));\n    }\n\n    public GifskiErrorCodes AddFrame(IntPtr handle, uint index, string path, int delay, double lastDelay = 0, bool isLast = false)\n    {\n        if (_addPngFrame != null)\n        {\n            var result2 = _addPngFrame(handle, index, path, index == 0 ? lastDelay : _timeStamp);\n\n            if (index == 0)\n                result2 = _addPngFrame(handle, index, path, 0);\n\n            _timeStamp += delay / 1000D;\n            return result2;\n        }\n\n        //var aa = new FormatConvertedBitmap(path.SourceFrom(), PixelFormats.Rgb24, null, 0);\n\n        var util = new PixelUtil(new FormatConvertedBitmap(path.SourceFrom(), PixelFormats.Rgb24, null, 0));\n        util.LockBitsAndUnpad();\n\n        var bytesPerRow = util.Width * 3; //Was ((util.Width * 24 + 31) / 32) * 3\n\n        //if (bytesPerRow % 4 != 0)\n        //    bytesPerRow += (4 - (bytesPerRow % 4));\n\n        //Pin the buffer in order to pass the address as parameter later.\n        var pinnedBuffer = GCHandle.Alloc(util.Pixels, GCHandleType.Pinned);\n        var address = pinnedBuffer.AddrOfPinnedObject();\n\n        //First frame receives the delay set of the last frame.\n        var result = AddFramePixels(handle, index, (uint)util.Width, (uint)bytesPerRow, (uint)util.Height, address, index == 0 ? lastDelay : _timeStamp);\n\n        //Bug in gifski, the first frame delay has a weird value if we don't have the next frame as zero. \n        if (index == 0)\n            result = AddFramePixels(handle, index, (uint)util.Width, (uint)bytesPerRow, (uint)util.Height, address, 0);\n\n        _timeStamp += delay / 1000D;\n        \n        //The buffer must be unpinned, to free resources.\n        pinnedBuffer.Free();\n        util.UnlockBitsWithoutCommit();\n\n        return result;\n    }\n\n    internal GifskiErrorCodes AddFramePixels(IntPtr handle, uint frameNumber, uint width, uint bytesPerRow, uint height, IntPtr pixels, double timestamp)\n    {\n        return _addRgbFrame(handle, frameNumber, width, bytesPerRow, height, pixels, timestamp);\n    }\n\n    public GifskiErrorCodes EndAdding(IntPtr handle)\n    {\n        return _endAddingFrames?.Invoke(handle) ?? _finish(handle);\n    }\n\n    private static void OnGifskiError(IntPtr messagePtr, IntPtr userData)\n    {\n        var message = Marshal.PtrToStringUTF8(messagePtr);\n\n        System.Diagnostics.Debug.WriteLine($\"Gifski error: {message}\");\n    }\n\n    public GifskiErrorCodes SetOutput(IntPtr handle, string destination)\n    {\n        _setErrorCallback(handle, OnGifskiError, IntPtr.Zero);\n\n        return _setFileOutput(handle, destination);\n    }\n\n    public GifskiErrorCodes End(IntPtr handle, string destination)\n    {\n        var status = _write(handle, destination);\n\n        if (status != GifskiErrorCodes.Ok)\n        {\n            _drop(handle);\n\n            return status;\n        }\n\n        _drop(handle);\n\n        return GifskiErrorCodes.Ok;\n    }\n\n    private void ReleaseUnmanagedResources()\n    {\n        FunctionLoader.UnloadLibrary(UserSettings.All.GifskiLocation!);\n    }\n\n    public void Dispose()\n    {\n        ReleaseUnmanagedResources();\n\n        GC.SuppressFinalize(this);\n    }\n\n    ~GifskiInterop() => ReleaseUnmanagedResources();\n}"
  },
  {
    "path": "ScreenToGif.Util/GitHubHelper.cs",
    "content": "using ScreenToGif.Domain.Models.GitHub;\nusing ScreenToGif.Util.Settings;\nusing System.Text.Json;\n\nnamespace ScreenToGif.Util;\n\npublic static class GitHubHelper\n{\n    public static async Task<GitHubRelease> GetLatestRelease(string repository)\n    {\n        if (string.IsNullOrWhiteSpace(repository))\n            throw new ArgumentNullException(nameof(repository));\n\n        using var client = WebHelper.GetHttpClient();\n        client.DefaultRequestHeaders.Add(\"User-Agent\", \"ScreenToGif/\" + UserSettings.All.VersionText);\n\n        using var response = await client.GetAsync($\"https://api.github.com/repos/{repository}/releases/latest\");\n\n        if (!response.IsSuccessStatusCode)\n            throw new Exception(\"Error while trying to get the latest release: \" + Environment.NewLine + response.ReasonPhrase);\n\n        var content = await response.Content.ReadAsStringAsync();\n\n        return JsonSerializer.Deserialize<GitHubRelease>(content);\n    }\n\n    public static GitHubAsset GetAsset(this GitHubRelease release, string assetName)\n    {\n        if (release is null)\n            throw new ArgumentNullException(nameof(release));\n\n        if (string.IsNullOrWhiteSpace(assetName))\n            throw new ArgumentNullException(nameof(assetName));\n\n        return release.Assets.FirstOrDefault(x => x.Name.Contains(assetName, StringComparison.InvariantCultureIgnoreCase));\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Helpers/CursorHelper.cs",
    "content": "using ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing System.Windows;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Helpers;\n\npublic static class CursorHelper\n{\n    public static Point GetMousePosition(double scale = 1, double offsetX = 0, double offsetY = 0)\n    {\n        var point = new PointW();\n        User32.GetCursorPos(ref point);\n        return new Point(point.X / scale - offsetX, point.Y / scale - offsetY);\n    }\n\n    public static void SetToPosition(FrameworkElement element, bool centerOnElement = false)\n    {\n        var relativePoint = centerOnElement ? new Point(element.ActualWidth / 2, element.ActualHeight / 2) : Mouse.GetPosition(element);\n        var screenPoint = element.PointToScreen(new Point(0, 0));\n        var scale = element.GetVisualScale();\n\n        User32.SetCursorPos((int)(screenPoint.X + relativePoint.X * scale), (int)(screenPoint.Y + relativePoint.Y * scale));\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.Util/Helpers/FfmpegHelper.cs",
    "content": "using System.Text.RegularExpressions;\n\nnamespace ScreenToGif.Util.Helpers;\n\npublic static partial class FfmpegHelper\n{\n    [GeneratedRegex(@\"\\b(\\d+\\.\\d+(\\.\\d+)?)\\b\")]\n    public static partial Regex SemVerRegex();\n\n    [GeneratedRegex(@\"\\bffmpeg\\s+version\\s+([^\\s-]+)\", RegexOptions.IgnoreCase, \"pt-BR\")]\n    public static partial Regex FfmpegVersionRegex();\n\n    public static string IdentifyVersion(string output)\n    {\n        var firstLine = output.Split(['\\r', '\\n'], StringSplitOptions.RemoveEmptyEntries)[0];\n\n        //Regex to capture the version token after \"ffmpeg version\"\n        var m = FfmpegVersionRegex().Match(firstLine);\n\n        if (m.Success)\n            return m.Groups[1].Value;\n\n        //Fallback: try to find the first token that looks like a semver\n        m = SemVerRegex().Match(firstLine);\n\n        return m.Success ? m.Groups[1].Value : null;\n    }\n\n    public static bool IsOlder(string token)\n    {\n        if (string.IsNullOrWhiteSpace(token))\n            return false;\n\n        token = token.Trim();\n\n        //Try direct System.Version parse (handles \"6\", \"6.0\", \"6.0.1\", \"5.4.2\")\n        if (Version.TryParse(token, out var v))\n            return v.Major < 6;\n\n        //Could not parse into a meaningful System.Version\n        return false;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Helpers/KeyHelper.cs",
    "content": "using ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.External;\nusing System.Text;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Util.Helpers;\n\npublic static class KeyHelper\n{\n    public static char? GetCharFromKey(Key key, bool ignoreState = true)\n    {\n        var virtualKey = KeyInterop.VirtualKeyFromKey(key);\n        var keyboardState = new byte[256];\n\n        if (!ignoreState)\n            User32.GetKeyboardState(keyboardState);\n\n        var scanCode = User32.MapVirtualKey((uint)virtualKey, MapTypes.MapvkVkToVsc);\n        var stringBuilder = new StringBuilder(2);\n\n        var result = User32.ToUnicode((uint)virtualKey, scanCode, keyboardState, stringBuilder, stringBuilder.Capacity, 0);\n\n        switch (result)\n        {\n            case 0:\n                break;\n            default: //Case 1\n                return stringBuilder[0];\n        }\n\n        return null;\n    }\n\n    public static string GetSelectKeyText(Key key, ModifierKeys modifier = ModifierKeys.None, bool isUppercase = false, bool ignoreNone = false, bool translate = false)\n    {\n        if (ignoreNone && key == Key.None)\n            return \"\";\n\n        //Get the modifiers as text.\n        var modifiersText = Enum.GetValues(modifier.GetType()).OfType<ModifierKeys>()\n            .Where(x => x != ModifierKeys.None && modifier.HasFlag(x))\n            .Aggregate(\"\", (current, mod) =>\n            {\n                if (mod == ModifierKeys.Control) //TODO: Custom mod.ToString();\n                    return current + \"Ctrl\" + \" + \";\n\n                return current + mod + \" + \";\n            });\n\n        var result = GetCharFromKey(key);\n\n        if (result == null || string.IsNullOrWhiteSpace(result.ToString()) || result < 32)\n        {\n            //Some keys need to be displayed differently.\n            var keyText = key.ToString();\n\n            switch (key)\n            {\n                case Key.LeftCtrl:\n                case Key.RightCtrl:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Ctrl\") : \"Ctrl\";\n                    break;\n\n                case Key.LeftShift:\n                case Key.RightShift:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Shift\") : \"Shift\";\n                    break;\n\n                case Key.LeftAlt:\n                case Key.RightAlt:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Alt\") : \"Alt\";\n                    break;\n                    \n                case Key.LWin:\n                case Key.RWin:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Windows\") : \"Windows\";\n                    break;\n\n                case Key.Back:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Backspace\") : \"Backspace\";\n                    break;\n\n                case Key.Tab:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Tab\") : \"Tab\";\n                    break;\n\n                case Key.Return:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Enter\") : \"Enter\";\n                    break;\n\n                case Key.Pause:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.PauseBreak\") : \"Pause/Break\";\n                    break;\n\n                case Key.CapsLock:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.CapsLock\") : \"Caps Lock\";\n                    break;\n\n                case Key.Escape:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Esc\") : \"Esc\";\n                    break;\n\n                case Key.Space:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Space\") : \"Space\";\n                    break;\n\n                case Key.Prior:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.PageUp\") : \"Page Up\";\n                    break;\n\n                case Key.Next:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.PageDown\") : \"Page Down\";\n                    break;\n\n                case Key.End:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.End\") : \"End\";\n                    break;\n\n                case Key.Home:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Home\") : \"Home\";\n                    break;\n\n                case Key.Left:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Left\") : \"Arrow Left\";\n                    break;\n\n                case Key.Up:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Up\") : \"Arrow Up\";\n                    break;\n\n                case Key.Right:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Right\") : \"Arrow Right\";\n                    break;\n\n                case Key.Down:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Down\") : \"Arrow Down\";\n                    break;\n\n                case Key.PrintScreen:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.PrintScreen\") : \"Print Screen\";\n                    break;\n\n                case Key.Insert:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Insert\") : \"Insert\";\n                    break;\n\n                case Key.Delete:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Delete\") : \"Delete\";\n                    break;\n\n                case Key.NumLock:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.NumLock\") : \"Num Lock\";\n                    break;\n\n                case Key.Scroll:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.ScrollLock\") : \"Scroll Lock\";\n                    break;\n\n                case Key.MediaNextTrack:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.NextTrack\") : \"Next Track\";\n                    break;\n\n                case Key.MediaPreviousTrack:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.PreviousTrack\") : \"Previous Track\";\n                    break;\n\n                case Key.MediaPlayPause:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.PlayPause\") : \"Play/Pause\";\n                    break;\n\n                case Key.MediaStop:\n                    keyText = translate ? LocalizationHelper.Get(\"S.Keys.Stop\") : \"Stop\";\n                    break;\n            }\n\n            //Modifiers;\n            return modifiersText + keyText;\n        }\n\n        //If there's any modifiers, it means that it's a command. So it should be treated as uppercase.\n        if (modifiersText.Length > 0)\n            isUppercase = true;\n\n        return modifiersText + (isUppercase ? char.ToUpper(result.Value) : result);\n    }\n\n    public static string GetSelectKeyText(ModifierKeys modifier = ModifierKeys.None)\n    {\n        //Get the modifiers as text.\n        var modifiersText = Enum.GetValues(modifier.GetType()).OfType<ModifierKeys>()\n            .Where(x => x != ModifierKeys.None && modifier.HasFlag(x))\n            .Aggregate(\"\", (current, mod) =>\n            {\n                if (mod == ModifierKeys.Control) //TODO: Custom mod.ToString();\n                    return current + (string.IsNullOrWhiteSpace(current) ? \"\" : \" + \") + \"Ctrl\";\n\n                return current + (string.IsNullOrWhiteSpace(current) ? \"\" : \" + \") + mod;\n            });\n\n        return modifiersText;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Humanizer.cs",
    "content": "using System;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Machine to Human converter. Just kidding. ;)\n/// </summary>\npublic class Humanizer\n{\n    /// <summary>\n    /// Converts a length value to a readable size.\n    /// </summary>\n    /// <param name=\"byteCount\">The length of the file.</param>\n    /// <param name=\"format\">The format of the number.</param>\n    /// <returns>A string representation of a file size.</returns>\n    public static string BytesToString(long byteCount, string format = null)\n    {\n        string[] suf = { \" B\", \" KB\", \" MB\", \" GB\", \" TB\", \" PB\" }; \n\n        if (byteCount == 0)\n            return \"0\" + suf[0];\n\n        var bytes = Math.Abs(byteCount);\n        var place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)));\n        var num = Math.Round(bytes / Math.Pow(1024, place), 1);\n\n        return (Math.Sign(byteCount) * num).ToString(format) + suf[place];\n    }\n\n    /// <summary>\n    /// Converts a length value to a readable size.\n    /// </summary>\n    /// <param name=\"byteCount\">The length of the file.</param>\n    /// <returns>A string representation of a file size.</returns>\n    public static string BytesToString(ulong byteCount)\n    {\n        string[] suf = { \" B\", \" KB\", \" MB\", \" GB\", \" TB\", \" PB\" }; \n\n        if (byteCount == 0)\n            return \"0\" + suf[0];\n\n        var place = Convert.ToInt32(Math.Floor(Math.Log(byteCount, 1024)));\n        var num = Math.Round(byteCount / Math.Pow(1024, place), 1);\n\n        return num + suf[place];\n    }\n\n    /// <summary>\n    /// Random welcome symbol.\n    /// </summary>\n    /// <returns>Returns a welcome text/emoji.</returns>\n    public static string Welcome()\n    {\n        var random = new Random();\n\n        string[] faces = { \"^.^\", \":D\", \";D\", \"^_^\", \"\\\\ (•◡•) /\", \"☺\", \"✌\", \"😉\", \"😊\", \"😆\", \"🎈\",\n            \"💡\", \"🎬\", \"😎\", \"🎞\", \"🎨\", \"🎥\", \"📽\", \"📷\", \"📸\", \"📹\", \"🌏\", \"🌍\", \"🌎\", \"🗺\", \"🌠\" };\n\n        var maxValue = OperationalSystemHelper.IsWin8OrHigher() ? faces.Length : 6; //Exclusive bound.\n\n        return faces[random.Next(maxValue)];\n    }\n\n    /// <summary>\n    /// Gets two sets of welcome messages.\n    /// </summary>\n    /// <returns>Two welcome messages.</returns>\n    public static string WelcomeInfo()\n    {\n        var random = new Random();\n\n        string[] texts = { \"S.Editor.Welcome.New\", \"S.Editor.Welcome.Import\", \"S.Editor.Welcome.ThankYou\", \"S.Editor.Welcome.Size\", \"S.Editor.Welcome.Contact\", \"S.Editor.Welcome.Trouble\", \"S.Editor.Welcome.NewRecorder\" };\n\n        var pick1 = random.Next(texts.Length);\n\n        return texts[pick1];\n    }\n\n    /// <summary>\n    /// Gets two sets of welcome messages.\n    /// </summary>\n    /// <returns>Two welcome messages.</returns>\n    public static string[] WelcomeInfos()\n    {\n        var random = new Random();\n\n        string[] texts = { \"S.Editor.Welcome.New\", \"S.Editor.Welcome.Import\", \"S.Editor.Welcome.ThankYou\", \"S.Editor.Welcome.Size\", \"S.Editor.Welcome.Contact\", \"S.Editor.Welcome.Trouble\", \"S.Editor.Welcome.NewRecorder\" };\n\n        var pick1 = random.Next(texts.Length);\n        var pick2 = random.Next(texts.Length);\n\n        while (pick1 == pick2)\n            pick2 = random.Next(texts.Length);\n\n        return new [] {texts[pick1], texts[pick2] };\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/IdentityHelper.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.Util;\n\npublic static class IdentityHelper\n{\n    public static ApplicationTypes ApplicationType\n    {\n        get\n        {\n#if DEPENDANT_SINGLE\n            //Dependent, Single File\n            return ApplicationTypes.DependantSingle;\n#elif FULL_SINGLE\n            //Full, Single File\n            return ApplicationTypes.FullSingle;\n#elif FULL_MULTI_MSIX\n            //Full, Multiple Files, MSIX\n            return ApplicationTypes.FullMultiMsix;\n#elif FULL_MULTI_MSIX_STORE\n            //Full, Multiple Files, MSIX, Store\n            return ApplicationTypes.FullMultiMsixStore;\n#endif\n\n            return ApplicationTypes.Unidentified;\n        }\n    }\n\n    public static string ApplicationTypeDescription\n    {\n        get\n        {\n#if DEPENDANT_SINGLE\n            return \"Framework Dependent, Single File\";\n#elif FULL_SINGLE\n            return \"Full, Single File\";\n#elif FULL_MULTI_MSIX\n            return \"Full, Multiple Files, MSIX\";\n#elif FULL_MULTI_MSIX_STORE\n            return \"Full, Multiple Files, MSIX, Store\";\n#endif\n\n            return \"Unidentified\";\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/InterProcessChannel/InstanceSwitcherChannel.cs",
    "content": "using System.Diagnostics;\nusing System.IO.Pipes;\nusing System.Text.Json;\n\nnamespace ScreenToGif.Util.InterProcessChannel;\n\npublic struct InstanceSwitcherMessage\n{\n    public string[] Args { get; set; }\n}\n\n/// <summary>\n/// Interprocess channel that is responsible for passing to another instance the parameters of this instance (in cases of when just one instance is allowed).\n/// </summary>\npublic static class InstanceSwitcherChannel\n{\n    private const string PipeName = \"ScreenToGit.InstanceSwitcher\";\n\n    private static PipeServer<InstanceSwitcherMessage> _server;\n    private static Action<object, InstanceSwitcherMessage> _receivedAction;\n    \n    public static void RegisterServer(Action<object, InstanceSwitcherMessage> receivedAction)\n    {\n        try\n        {\n            if (_server != null)\n                return;\n\n            using (var process = Process.GetCurrentProcess())\n                _server = new PipeServer<InstanceSwitcherMessage>(PipeName + process.Id);\n\n            _receivedAction = receivedAction;\n            _server.MessageReceived += receivedAction.Invoke;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to register the IPC server.\");\n        }\n    }\n\n    public static void UnregisterServer()\n    {\n        try\n        {\n            _server.Stop();\n            _server.MessageReceived -= _receivedAction.Invoke;\n            _server = null;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to unregister the IPC server.\");\n        }\n    }\n\n    public static void SendMessage(int processId, string[] args)\n    {\n        try\n        {\n            using var pipe = new NamedPipeClientStream(\".\", PipeName + processId, PipeDirection.Out);\n            pipe.Connect();\n\n            var message = new InstanceSwitcherMessage { Args = args };\n            var buffer = JsonSerializer.SerializeToUtf8Bytes(message);\n\n            pipe.Write(buffer, 0, buffer.Length);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to send a message via the IPC server.\");\n        }\n    }\n\n    //Maybe parametrize to be filled in by the main project.\n    //private static void ServerOnMessageReceived(object sender, InstanceSwitcherMessage message)\n    //{\n    //    try\n    //    {\n    //        var args = message.Args;\n\n    //        if (args?.Length > 0)\n    //            Arguments.Prepare(args);\n\n    //        if (Arguments.Open) \n    //            App.MainViewModel.Open.Execute(Arguments.WindownToOpen, true);\n    //        else\n    //            App.MainViewModel.Open.Execute(UserSettings.All.StartUp);\n    //    }\n    //    catch (Exception e)\n    //    {\n    //        LogWriter.Log(e, \"Unable to execute arguments from IPC.\");\n    //    }\n    //}\n}"
  },
  {
    "path": "ScreenToGif.Util/InterProcessChannel/PipeServer.cs",
    "content": "using System.IO;\nusing System.IO.Pipes;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace ScreenToGif.Util.InterProcessChannel;\n\npublic class PipeServer<TMessage> : IDisposable\n{\n    private readonly NamedPipeServerStream _pipe;\n    private readonly StreamReader _reader;\n    private readonly SynchronizationContext _synchronizationContext;\n    private readonly CancellationTokenSource _source;\n\n    public event EventHandler<TMessage> MessageReceived;\n\n    public PipeServer(string pipeName)\n    {\n        _source = new CancellationTokenSource();\n        _pipe = new NamedPipeServerStream(pipeName, PipeDirection.In);\n        _reader = new StreamReader(_pipe, Encoding.UTF8);\n        _synchronizationContext = SynchronizationContext.Current;\n\n        //Start the loop on the threadpool. This will run for the duration of the application, but the LongRunning option should not be used as the thread will not be used the whole time.\n        _ = Task.Run(ServerLoop).ContinueWith(t => OnServerError(t.Exception), default, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.FromCurrentSynchronizationContext());\n    }\n\n    public void Stop()\n    {\n        _source.Cancel();\n        _pipe.Disconnect();\n\n        Dispose();\n    }\n\n    private async void ServerLoop()\n    {\n        while (!_source.IsCancellationRequested)\n        {\n            try\n            {\n                await _pipe.WaitForConnectionAsync(_source.Token);\n\n                var message = await JsonSerializer.DeserializeAsync<TMessage>(_pipe, (JsonSerializerOptions)null, _source.Token);\n\n                _pipe.Disconnect();\n\n                if (message != null)\n                    _synchronizationContext.Post(OnMessageReceived, message);\n            }\n            catch (Exception)\n            {\n                //Ignore.   \n            }\n        }\n    }\n\n    protected virtual void OnMessageReceived(object state)\n    {\n        MessageReceived?.Invoke(this, (TMessage)state);\n    }\n\n    protected virtual void OnServerError(AggregateException exception)\n    {\n        LogWriter.Log(exception, \"IPC Server error.\");\n    }\n\n    public void Dispose()\n    {\n        _pipe.Dispose();\n        _reader.Dispose();\n        _source.Dispose();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/InterProcessChannel/SettingsPersistenceChannel.cs",
    "content": "using System.Diagnostics;\nusing System.IO.Pipes;\nusing System.Text.Json;\n\nnamespace ScreenToGif.Util.InterProcessChannel;\n\ninternal struct SettingsPersistenceMessage\n{\n    /// <summary>\n    /// The serialized dictionary to be passed to the other instance.\n    /// </summary>\n    public string Serialized { get; set; }\n\n    /// <summary>\n    /// True if the settings is local.\n    /// </summary>\n    public bool IsLocal { get; set; }\n}\n\n/// <summary>\n/// Interprocess channel that is responsible for passing to another instance (with administrative rights) in order to be saved.\n/// </summary>\npublic static class SettingsPersistenceChannel\n{\n    private const string PipeName = \"ScreenToGit.SettingsPersistence\";\n\n    private static PipeServer<SettingsPersistenceMessage> _server;\n\n\n    public static void RegisterServer()\n    {\n        try\n        {\n            if (_server != null)\n                return;\n\n            using (var process = Process.GetCurrentProcess())\n                _server = new PipeServer<SettingsPersistenceMessage>(PipeName + process.Id);\n\n            _server.MessageReceived += ServerOnMessageReceived;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to register the IPC server.\");\n        }\n    }\n\n    public static void UnregisterServer()\n    {\n        try\n        {\n            _server.Stop();\n            _server.MessageReceived -= ServerOnMessageReceived;\n            _server = null;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to unregister the IPC server.\");\n        }\n    }\n\n    public static void SendMessage(int processId, string serialized, bool isLocal)\n    {\n        try\n        {\n            using var pipe = new NamedPipeClientStream(\".\", PipeName + processId, PipeDirection.Out);\n            pipe.Connect();\n\n            var message = new SettingsPersistenceMessage\n            {\n                Serialized = serialized,\n                IsLocal = isLocal\n            };\n            var buffer = JsonSerializer.SerializeToUtf8Bytes(message);\n\n            pipe.Write(buffer, 0, buffer.Length);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to send a message via the IPC server.\");\n        }\n    }\n\n    private static void ServerOnMessageReceived(object sender, SettingsPersistenceMessage message)\n    {\n        try\n        {\n            Settings.UserSettings.All.SaveFromAnotherInstance(message.Serialized, message.IsLocal);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Unable to execute arguments from IPC.\");\n        }\n        finally\n        {\n            UnregisterServer();\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/LocalizationHelper.cs",
    "content": "using System.Globalization;\nusing System.IO;\nusing System.Net;\nusing System.Reflection;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Markup;\nusing System.Xml;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\nusing ScreenToGif.Util.Settings;\nusing System.Net.Http;\nusing Application = System.Windows.Application;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Deals with localization behaviors.\n/// </summary>\npublic static class LocalizationHelper\n{\n    public static string CurrentCulture { get; set; }\n\n    public static CultureInfo CurrentCultureInfo { get; set; }\n\n    public static void SelectCulture(string culture)\n    {\n        CurrentCultureInfo ??= CultureInfo.CurrentUICulture;\n\n        #region Validation\n\n        //If none selected, fallback to english.\n        if (string.IsNullOrEmpty(culture))\n            culture = \"en\";\n\n        if (culture.Equals(\"auto\") || culture.Length < 2)\n            culture = CurrentCultureInfo.Name;\n\n        #endregion\n\n        //Copy all MergedDictionaries into a auxiliary list.\n        var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();\n\n        #region Selected Culture\n\n        //Search for the specified culture.\n        var requestedCulture = $\"/Resources/Localization/StringResources.{culture}.xaml\";\n        var requestedResource = dictionaryList.FirstOrDefault(d => d.Source?.OriginalString == requestedCulture);\n\n        #endregion\n\n        #region Generic Branch Fallback\n\n        //Fallback to a more generic version of the language. Example: pt-BR to pt.\n        while (requestedResource == null && !string.IsNullOrEmpty(culture))\n        {\n            culture = CultureInfo.GetCultureInfo(culture).Parent.Name;\n            requestedCulture = $\"/Resources/Localization/StringResources.{culture}.xaml\";\n            requestedResource = dictionaryList.FirstOrDefault(d => d.Source?.OriginalString == requestedCulture);\n        }\n\n        #endregion\n\n        #region English Fallback\n\n        //If not present, fall back to english.\n        if (requestedResource == null)\n        {\n            culture = \"en\";\n            requestedCulture = \"/Resources/Localization/StringResources.en.xaml\";\n            requestedResource = dictionaryList.FirstOrDefault(d => d.Source?.OriginalString == requestedCulture);\n        }\n\n        #endregion\n\n        //If we have the requested resource, remove it from the list and place at the end.\n        //Then this language will be our current string table.\n        Application.Current.Resources.MergedDictionaries.Remove(requestedResource);\n        Application.Current.Resources.MergedDictionaries.Add(requestedResource);\n\n        CurrentCulture = culture;\n\n        //Inform the threads of the new culture.\n        CultureInfo.CurrentCulture = new CultureInfo(culture);\n        CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture;\n        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture;\n        CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentCulture;\n\n        #region English Fallback of the Current Language\n\n        //Only non-English resources need a fallback, because the English resource is evergreen.\n        if (culture.StartsWith(\"en\"))\n            return;\n\n        var englishResource = dictionaryList.FirstOrDefault(d => d.Source?.OriginalString == \"/Resources/Localization/StringResources.en.xaml\");\n\n        if (englishResource != null)\n        {\n            Application.Current.Resources.MergedDictionaries.Remove(englishResource);\n            Application.Current.Resources.MergedDictionaries.Insert(Application.Current.Resources.MergedDictionaries.Count - 1, englishResource);\n        }\n\n        #endregion\n\n        #region Select Fonts\n\n        var cultureFonts = new Dictionary<string, (string normal, string light, string bold)>(StringComparer.OrdinalIgnoreCase)\n        {\n            { \"en\", (\"Segoe UI\", \"Segoe UI Semilight\", \"Segoe UI Semibold\") },\n            { \"zh\", (\"Microsoft YaHei UI\", \"Microsoft YaHei UI Light\", \"Microsoft YaHei UI Bold\") },\n            { \"zh-Hant\", (\"Microsoft JhengHei UI\", \"Microsoft JhengHei UI Light\", \"Microsoft JhengHei UI Bold\") },\n            { \"ja\", (\"Yu Gothic UI\", \"Yu Gothic UI Semilight\", \"Yu Gothic UI Semibold\") },\n            { \"ko\", (\"Malgun Gothic\", \"Malgun Gothic Semilight\", \"Malgun Gothic Bold\") },\n        };\n\n        if (!cultureFonts.TryGetValue(culture, out var fontSet))\n        {\n            try\n            {\n                var parentCulture = CultureInfo.GetCultureInfo(culture).Parent.Name;\n\n                if (!string.IsNullOrEmpty(parentCulture))\n                    cultureFonts.TryGetValue(parentCulture, out fontSet);\n            }\n            catch { }\n        }\n\n        if (fontSet == default)\n            fontSet = (\"Segoe UI\", \"Segoe UI Semilight\", \"Segoe UI Semibold\");\n\n        SetOrUpdateResource(\"FontFamilyNormal\", fontSet.normal);\n        SetOrUpdateResource(\"FontFamilyLight\", fontSet.light);\n        SetOrUpdateResource(\"FontFamilyBold\", fontSet.bold);\n\n        #endregion\n\n        GC.Collect(0);\n\n        if (!UserSettings.All.CheckForTranslationUpdates)\n            return;\n\n        //Async, fire and forget.\n        _ = CheckForUpdates(culture);\n    }\n\n    private static void SetOrUpdateResource(string key, string fontName)\n    {\n        var fontFamily = new System.Windows.Media.FontFamily(fontName);\n\n        if (Application.Current.Resources.Contains(key))\n            Application.Current.Resources[key] = fontFamily;\n        else\n            Application.Current.Resources.Add(key, fontFamily);\n    }\n\n    /// <summary>\n    /// This is what happens:\n    ///\n    ///Get date of available resource\n    ///  if resource available is newer than assembly\n    ///      if there is already a translation downloaded\n    ///          if current translation is older than available\n    ///              Download latest, overwriting current\n    ///          if current translation is newer\n    ///              Don't download\n    ///      if there's no translation downloaded already\n    ///          Download latest\n    ///  if resource available is older than assembly\n    ///      Don't download, erase current translation\n    /// </summary>\n    /// <param name=\"culture\">The culture that should be searched for updates.</param>\n    internal static async Task CheckForUpdates(string culture)\n    {\n        try\n        {\n            if (string.IsNullOrWhiteSpace(UserSettings.All.TemporaryFolderResolved))\n                return;\n\n            var folder = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"ScreenToGif\", \"Localization\");\n            var file = Path.Combine(folder, $\"StringResources.{culture}.new.xaml\");\n\n            Directory.CreateDirectory(folder);\n\n            //Get when the available resource was updated.\n            var updated = await GetWhenResourceWasUpdatedAsync(culture);\n\n            //If resource available is older than assembly.\n            if (!updated.HasValue || updated <= File.GetLastWriteTime(ProcessHelper.GetEntryAssemblyPath()))\n            {\n                if (File.Exists(file))\n                    File.Delete(file);\n\n                return;\n            }\n\n            //If a translation wasn't previously downloaded or if it's older than the available one.\n            if (!File.Exists(file) || new FileInfo(file).LastWriteTimeUtc < updated.Value.ToUniversalTime())\n                await DownloadLatestAsync(file, culture);\n            \n            //If a new translation was not downloaded (now or previously), ignore the following code.\n            if (!File.Exists(file))\n                return;\n\n            //Removes any resource that was added by this updater.\n            var listToRemove = Application.Current.Resources.MergedDictionaries.Where(w => w.Source?.OriginalString.EndsWith(\".new.xaml\") == true).ToList();\n\n            foreach (var rem in listToRemove)\n                Application.Current.Resources.MergedDictionaries.Remove(rem);\n\n            //Load the resource from the file, not replacing the current resource, but putting right after it.\n            await using var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);\n\n            if (fs.Length == 0)\n                throw new InvalidDataException(\"File is empty\");\n\n            //Reads the ResourceDictionary file.\n            var dictionary = (ResourceDictionary)XamlReader.Load(fs);\n            dictionary.Source = new Uri(Path.Combine(file));\n\n            //Add in newly loaded Resource Dictionary.\n            Application.Current.Resources.MergedDictionaries.Add(dictionary);\n        }\n        catch (WebException)\n        {\n            //Ignore it.\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Check for an updated localization resource\");\n        }\n    }\n\n    /// <summary>\n    /// Checks when the available resource file was updated.\n    /// </summary>\n    /// <param name=\"culture\">The culture of the resource to be checked.</param>\n    /// <returns>The date when the resource file was last updated.</returns>\n    private static async Task<DateTime?> GetWhenResourceWasUpdatedAsync(string culture)\n    {\n        //Gets the latest commit that changed the translation resource.\n        var url = $\"https://api.github.com/repos/NickeManarin/ScreenToGif/commits?path=ScreenToGif/Resources/Localization/StringResources.{culture}.xaml&page=1&per_page=1\";\n\n        var proxy = WebHelper.GetProxy();\n\n        using var handler = new HttpClientHandler();\n        handler.Proxy = proxy;\n        handler.UseProxy = proxy != null;\n\n        using var client = new HttpClient(handler);\n\n        //GitHub API requires a User-Agent header.\n        client.DefaultRequestHeaders.UserAgent.ParseAdd(\"Mozilla/5.0 (Windows NT 10.0; Win64; x64)\");\n\n        var response = await client.GetAsync(url);\n\n        if (!response.IsSuccessStatusCode)\n            return null;\n\n        var json = await response.Content.ReadAsStringAsync();\n\n        var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json), new XmlDictionaryReaderQuotas());\n        var release = XElement.Load(jsonReader);\n\n        //Gets the date of the last commit that changed the translation file.\n        var dateText = release.FirstNode?.XPathSelectElement(\"commit\")?.XPathSelectElement(\"committer\")?.XPathSelectElement(\"date\")?.Value;\n\n        //If was not possible to convert the time, keep using the current resource.\n        if (!DateTime.TryParse(dateText, out var modificationDate))\n            return null;\n\n        //If the current resource is newer then the available one, keep using the current.\n        return modificationDate;\n    }\n\n    /// <summary>\n    /// Downloads the available localization resource.\n    /// </summary>\n    /// <param name=\"file\">The destination path of the resource.</param>\n    /// <param name=\"culture\">The culture of the resource to be downloaded.</param>\n    private static async Task DownloadLatestAsync(string file, string culture)\n    {\n        var url = $\"https://api.github.com/repos/NickeManarin/ScreenToGif/contents/ScreenToGif/Resources/Localization/StringResources.{culture}.xaml\";\n        var proxy = WebHelper.GetProxy();\n\n        using var handler = new HttpClientHandler();\n\n        if (proxy != null)\n        {\n            handler.Proxy = proxy;\n            handler.UseProxy = true;\n        }\n\n        using var client = new HttpClient(handler);\n        client.DefaultRequestHeaders.UserAgent.ParseAdd(\"Mozilla/5.0 (Windows NT 10.0; Win64; x64)\");\n\n        var response = await client.GetAsync(url);\n\n        if (!response.IsSuccessStatusCode)\n            return;\n\n        var json = await response.Content.ReadAsStringAsync();\n        var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json), new XmlDictionaryReaderQuotas());\n        var release = XElement.Load(jsonReader);\n\n        //When creating a GET request with a direct path, the 'content' element is available as a base64 string.\n        var contentBase64 = release.XPathSelectElement(\"content\")?.Value;\n\n        if (string.IsNullOrWhiteSpace(contentBase64))\n            return;\n\n        if (File.Exists(file))\n            File.Delete(file);\n\n        var decoded = Encoding.UTF8.GetString(Convert.FromBase64String(contentBase64)).Replace(\"&#x0d;\", \"\\r\");\n\n        await File.WriteAllTextAsync(file, decoded);\n    }\n\n    public static void SaveDefaultResource(string path)\n    {\n        //Copy all MergedDictionaries into an auxiliary list.\n        var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();\n\n        try\n        {\n            //Search for the specified culture.\n            var resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source?.OriginalString == \"/Resources/Localization/StringResources.en.xaml\");\n\n            if (resourceDictionary == null)\n                throw new CultureNotFoundException(\"String resource not found.\");\n\n            if (string.IsNullOrEmpty(path))\n                throw new ArgumentException(\"Path is null.\");\n\n            var settings = new XmlWriterSettings { Indent = true };\n\n            using var writer = XmlWriter.Create(path, settings);\n\n            XamlWriter.Save(resourceDictionary, writer);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Save Xaml Resource Error\");\n\n            throw;\n        }\n    }\n\n    public static void ImportStringResource(string path)\n    {\n        try\n        {\n            if (string.IsNullOrEmpty(path))\n                throw new ArgumentException(\"Path is null\");\n\n            var destination = Path.Combine(Path.GetTempPath(), Path.GetFileName(path));\n\n            if (File.Exists(destination))\n                File.Delete(destination);\n\n            File.WriteAllText(destination, File.ReadAllText(path).Replace(\"&#x0d;\", \"\\r\"));\n\n            using var fs = new FileStream(destination, FileMode.Open, FileAccess.Read, FileShare.Read);\n\n            if (fs.Length == 0)\n                throw new InvalidDataException(\"File is empty\");\n\n            //Reads the ResourceDictionary file\n            var dictionary = (ResourceDictionary)XamlReader.Load(fs);\n            dictionary.Source = new Uri(destination);\n\n            //Add in newly loaded Resource Dictionary.\n            Application.Current.Resources.MergedDictionaries.Add(dictionary);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Import Resource\");\n            //Rethrowing, because it's more useful to catch later\n            throw;\n        }\n    }\n\n    public static List<ResourceDictionary> GetLocalizations()\n    {\n        //Copy all MergedDictionaries into an auxiliary list.\n        var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();\n\n        return dictionaryList.Where(x => x.Source.OriginalString.Contains(\"StringResource\")).ToList();\n    }\n\n    public static bool Move(int selectedIndex, bool toUp = true)\n    {\n        try\n        {\n            if (toUp && selectedIndex < 1)\n                return false;\n\n            if (!toUp && selectedIndex > Application.Current.Resources.MergedDictionaries.Count - 1)\n                return false;\n\n            //Recover the selected dictionary.\n            var dictionaryAux = Application.Current.Resources.MergedDictionaries[selectedIndex];\n\n            //Remove from the current list.\n            Application.Current.Resources.MergedDictionaries.Remove(Application.Current.Resources.MergedDictionaries[selectedIndex]);\n\n            //Detect the index of the next localization.\n            var newIndex = -1;\n\n            if (toUp)\n            {\n                //Search for the index of the previous localization resource.\n                for (var i = selectedIndex - 1; i >= 0; i--)\n                {\n                    if (Application.Current.Resources.MergedDictionaries[i].Source?.OriginalString?.Contains(\"StringResources\") == true)\n                    {\n                        newIndex = i;\n                        break;\n                    }\n                }\n            }\n            else\n            {\n                //Search for the index of the next localization resource.\n                for (var i = selectedIndex; i < Application.Current.Resources.MergedDictionaries.Count; i++)\n                {\n                    if (Application.Current.Resources.MergedDictionaries[i].Source?.OriginalString?.Contains(\"StringResources\") == true)\n                    {\n                        newIndex = i + 1;\n                        break;\n                    }\n                }\n            }\n\n            //Insert at the new position.\n            Application.Current.Resources.MergedDictionaries.Insert(newIndex, dictionaryAux);\n\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Move Resource\", selectedIndex);\n            return false;\n        }\n    }\n\n    public static void SaveSelected(int selectedIndex, string path)\n    {\n        try\n        {\n            if (selectedIndex < 0 || selectedIndex > Application.Current.Resources.MergedDictionaries.Count - 1)\n                throw new IndexOutOfRangeException(\"Index out of range while trying to save the resource dictionary.\");\n\n            var settings = new XmlWriterSettings { Indent = true };\n\n            using var writer = XmlWriter.Create(path, settings);\n            XamlWriter.Save(Application.Current.Resources.MergedDictionaries[selectedIndex], writer);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Save Resource\", selectedIndex);\n            //Rethrowing, because it's more useful to catch later\n            throw;\n        }\n    }\n\n    public static bool Remove(int selectedIndex)\n    {\n        try\n        {\n            if (selectedIndex == -1 || selectedIndex > Application.Current.Resources.MergedDictionaries.Count - 1)\n                return false;\n\n            //Don't allow the user to delete resources that are not localizations.\n            if (Application.Current.Resources.MergedDictionaries[selectedIndex].Source?.OriginalString?.Contains(\"StringResources\") != true)\n                return false;\n\n            //Remove from the current list.\n            Application.Current.Resources.MergedDictionaries.RemoveAt(selectedIndex);\n\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Remove Resource\", selectedIndex);\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Gets a resource as string.\n    /// </summary>\n    /// <param name=\"key\">The key of the string resource.</param>\n    /// <param name=\"removeNewLines\">If true, it removes any kind of new lines.</param>\n    /// <returns>A string resource, usually a localized string.</returns>\n    public static string Get(string key, bool removeNewLines = false)\n    {\n        if (removeNewLines)\n            return (Application.Current.TryFindResource(key) as string ?? \"\").Replace(\"\\n\", \" \").Replace(\"\\\\n\", \" \").Replace(\"\\r\", \" \").Replace(\"&#10;\", \" \").Replace(\"&#x0d;\", \" \");\n\n        return Application.Current.TryFindResource(key) as string;\n    }\n\n    /// <summary>\n    /// Gets a resource as string and applies the format.\n    /// </summary>\n    /// <param name=\"key\">The key of the string resource.</param>\n    /// <param name=\"values\">The values for the string format.</param>\n    /// <returns>A string resource, usually a localized string.</returns>\n    public static string GetWithFormat(string key, params object[] values)\n    {\n        return string.Format(CultureInfo.CurrentUICulture, Application.Current.TryFindResource(key) as string ?? \"\", values);\n    }\n\n    /// <summary>\n    /// Gets a resource as string.\n    /// </summary>\n    /// <param name=\"key\">The key of the string resource.</param>\n    /// <param name=\"defaultValue\">The default value in english.</param>\n    /// <param name=\"removeNewLines\">If true, it removes any kind of new lines.</param>\n    /// <returns>A string resource, usually a localized string.</returns>\n    public static string Get(string key, string defaultValue, bool removeNewLines = false)\n    {\n        if (removeNewLines)\n            return (Application.Current.TryFindResource(key) as string ?? defaultValue).Replace(\"\\n\", \" \").Replace(\"\\\\n\", \" \").Replace(\"\\r\", \" \").Replace(\"&#10;\", \" \").Replace(\"&#x0d;\", \" \");\n\n        return Application.Current.TryFindResource(key) as string ?? defaultValue;\n    }\n\n    /// <summary>\n    /// Gets a resource as string and applies the format.\n    /// </summary>\n    /// <param name=\"key\">The key of the string resource.</param>\n    /// <param name=\"defaultValue\">The default value in english.</param>\n    /// <param name=\"values\">The values for the string format.</param>\n    /// <returns>A string resource, usually a localized string.</returns>\n    public static string GetWithFormat(string key, string defaultValue, params object[] values)\n    {\n        return string.Format(CultureInfo.CurrentUICulture, Application.Current.TryFindResource(key) as string ?? defaultValue, values);\n    }\n\n    /// <summary>\n    /// Gets a resource as string.\n    /// </summary>\n    /// <param name=\"index\"></param>\n    /// <param name=\"key\">The key of the string resource.</param>\n    /// <param name=\"values\">The possible values that composite the key name.</param>\n    /// <returns>A string resource, usually a localized string.</returns>\n    public static string GetWithIndex(int index, string key, params string[] values)\n    {\n        return Application.Current.TryFindResource(key + values[index]) as string;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/LogWritter.cs",
    "content": "using System.IO;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Basic log writer that stores messages on a file on disk.\n/// </summary>\npublic static class LogWriter\n{\n    private static void WriteDetails(TextWriter writer, Exception ex, int level)\n    {\n        writer.WriteLine(new string('▬', level) + $\" Message - {Environment.NewLine}\\t{ex.Message}\");\n        writer.WriteLine(new string('○', level) + $\" Type - {Environment.NewLine}\\t{ex.GetType()}\");\n        writer.WriteLine(new string('▲', level) + $\" Source - {Environment.NewLine}\\t{ex.Source}\");\n        writer.WriteLine(new string('▼', level) + $\" TargetSite - {Environment.NewLine}\\t{ex.TargetSite}\");\n\n        if (ex is BadImageFormatException bad)\n        {\n            writer.WriteLine(new string('☼', level) + $\" Filename - {Environment.NewLine}\\t{bad.FileName}\");\n            writer.WriteLine(new string('►', level) + $\" Fuslog - {Environment.NewLine}\\t{bad.FusionLog}\");\n        }\n        else if (ex is ArgumentException arg)\n        {\n            writer.WriteLine(new string('☼', level) + $\" ParamName - {Environment.NewLine}\\t{arg.ParamName}\");\n        }\n        \n        if (ex.HelpLink != null)\n            writer.WriteLine(new string('◘', level) + $\" Other - {Environment.NewLine}\\t{ex.HelpLink}\");\n\n        writer.WriteLine(new string('♠', level) + $\" StackTrace - {Environment.NewLine}{ex.StackTrace}\");\n\n        if (ex.InnerException == null || level >= 6)\n            return;\n\n        writer.WriteLine();\n        WriteDetails(writer, ex.InnerException, level + 1);\n    }\n\n    /// <summary>\n    /// Writes the exception details to the error log on disk.\n    /// </summary>\n    /// <param name=\"ex\">The Exception to write.</param>\n    /// <param name=\"title\">The name of the error</param>\n    /// <param name=\"additional\">Additional information.</param>\n    /// <param name=\"isFallback\">Fallbacks to the Documents folder.</param>\n    public static void Log(Exception ex, string title, object additional = null, bool isFallback = false)\n    {\n        try\n        {\n            #region Output folder\n\n            var documents = isFallback || string.IsNullOrWhiteSpace(UserSettings.All.LogsFolder) ? Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) : UserSettings.All.LogsFolder;\n            var folder = Path.Combine(documents, \"ScreenToGif\", \"Logs\");\n\n            if (!Directory.Exists(folder))\n                Directory.CreateDirectory(folder);\n\n            #endregion\n\n            #region Creates the file\n\n            var date = Path.Combine(folder, DateTime.Now.ToString(\"yy_MM_dd\") + \".txt\");\n            var dateTime = Path.Combine(folder, DateTime.Now.ToString(\"yy_MM_dd hh_mm_ss_fff\") + \".txt\");\n\n            FileStream fs = null;\n            var inUse = false;\n\n            try\n            {\n                fs = new FileStream(date, FileMode.OpenOrCreate, FileAccess.ReadWrite);\n            }\n            catch (Exception)\n            {\n                inUse = true;\n                fs = new FileStream(dateTime, FileMode.OpenOrCreate, FileAccess.ReadWrite);\n            }\n\n            fs.Dispose();\n\n            #endregion\n\n            #region Append the exception information\n\n            using (var fileStream = new FileStream(inUse ? dateTime : date, FileMode.Append, FileAccess.Write))\n            {\n                using (var writer = new StreamWriter(fileStream))\n                {\n                    writer.WriteLine($\"► Title - {Environment.NewLine}\\t{title}\");\n                    writer.WriteLine(FormattableString.Invariant($\"♦ [Version] Date/Hour - {Environment.NewLine}\\t[{UserSettings.All?.VersionText}] {DateTime.Now}\"));\n\n                    if (additional != null)\n                        writer.WriteLine($\"◄ Additional - {Environment.NewLine}\\t{additional}\");\n\n                    WriteDetails(writer, ex, 1);\n\n                    writer.WriteLine();\n                    writer.WriteLine(\"----------------------------------\");\n                    writer.WriteLine();\n                }\n            }\n\n            #endregion\n        }\n        catch (Exception)\n        {\n            //One last trial.\n            if (!isFallback)\n                Log(ex, title, additional, true);\n        }\n    }\n\n    /// <summary>\n    /// Writes the details to the error log on disk.\n    /// </summary>\n    /// <param name=\"title\">The name of the error</param>\n    /// <param name=\"additional\">Additional information.</param>\n    /// <param name=\"secondAdditional\">Additional information.</param>\n    /// <param name=\"isFallback\">Fallbacks to the Documents folder.</param>\n    public static void Log(string title, object additional = null, object secondAdditional = null, bool isFallback = false)\n    {\n        try\n        {\n            #region Output folder\n\n            var documents = isFallback || string.IsNullOrWhiteSpace(UserSettings.All.LogsFolder) ? Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) : UserSettings.All.LogsFolder;\n            var folder = Path.Combine(documents, \"ScreenToGif\", \"Logs\");\n\n            if (!Directory.Exists(folder))\n                Directory.CreateDirectory(folder);\n\n            #endregion\n\n            #region Creates the file\n\n            var date = Path.Combine(folder, DateTime.Now.ToString(\"yy_MM_dd\") + \".txt\");\n            var dateTime = Path.Combine(folder, DateTime.Now.ToString(\"yy_MM_dd hh_mm_ss_fff\") + \".txt\");\n\n            FileStream fs = null;\n            var inUse = false;\n\n            try\n            {\n                fs = new FileStream(date, FileMode.OpenOrCreate, FileAccess.ReadWrite);\n            }\n            catch (Exception)\n            {\n                inUse = true;\n                fs = new FileStream(dateTime, FileMode.OpenOrCreate, FileAccess.ReadWrite);\n            }\n\n            fs.Dispose();\n\n            #endregion\n\n            #region Append the exception information\n\n            using (var fileStream = new FileStream(inUse ? dateTime : date, FileMode.Append, FileAccess.Write))\n            {\n                using (var writer = new StreamWriter(fileStream))\n                {\n                    writer.WriteLine($\"► Title - {Environment.NewLine}\\t{title}\");\n                    writer.WriteLine(FormattableString.Invariant($\"♦ [Version] Date/Hour - {Environment.NewLine}\\t[{UserSettings.All?.VersionText}] {DateTime.Now}\"));\n\n                    if (additional != null)\n                        writer.WriteLine($\"◄ Additional - {Environment.NewLine}\\t{additional}\");\n\n                    if (secondAdditional != null)\n                        writer.WriteLine($\"◄ Second Additional - {Environment.NewLine}\\t{secondAdditional}\");\n\n                    writer.WriteLine();\n                    writer.WriteLine(\"----------------------------------\");\n                    writer.WriteLine();\n                }\n            }\n\n            #endregion\n        }\n        catch (Exception)\n        {\n            //One last trial.\n            if (!isFallback)\n                Log(title, additional, secondAdditional, true);\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/MutexList.cs",
    "content": "using ScreenToGif.Util.Extensions;\nusing System.Security.AccessControl;\n\nnamespace ScreenToGif.Util;\n\npublic static class MutexList\n{\n    private static Dictionary<string, Mutex> All { get; set; } = new();\n\n    public static bool IsInUse(string key)\n    {\n        GC.Collect();\n\n        return Mutex.TryOpenExisting(@\"Global\\ScreenToGif\" + key.Remove(\"\\\\\"), out var mutex);\n    }\n\n    public static void Add(string key)\n    {\n        if (All.ContainsKey(key))\n            Remove(key);\n\n        var mutex = new Mutex(false, @\"Global\\ScreenToGif\" + key.Remove(\"\\\\\"), out _);\n\n        var sec = new MutexSecurity();\n        sec.AddAccessRule(new MutexAccessRule(Environment.UserDomainName + \"\\\\\" + Environment.UserName, MutexRights.FullControl, AccessControlType.Allow));\n\n        mutex.SetAccessControl(sec);\n\n        All.Add(key, mutex);\n    }\n\n    public static bool Exists(string key) => All.Any(f => f.Key == key);\n\n    public static void Remove(string key)\n    {\n        var current = All.FirstOrDefault(f => f.Key == key).Value;\n\n        if (current == null)\n            return;\n\n        current.Dispose();\n\n        All.Remove(key);\n\n        GC.Collect();\n\n        //var c = IsInUse(key);\n    }\n\n    public static void RemoveAll()\n    {\n        foreach (var mutex in All)\n            mutex.Value.Dispose();\n\n        All.Clear();\n        GC.Collect();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Native/Capture.cs",
    "content": "using System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Media.Imaging;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing System.Drawing;\n\nnamespace ScreenToGif.Native.Helpers\n{\n    public static class Capture\n    {\n        /// <summary>\n        /// Captures the screen using the SourceCopy | CaptureBlt.\n        /// </summary>\n        /// <param name=\"width\">The size of the final image.</param>\n        /// <param name=\"height\">The size of the final image.</param>\n        /// <param name=\"positionX\">Source capture Left position.</param>\n        /// <param name=\"positionY\">Source capture Top position.</param>\n        /// <returns>A bitmap with the capture rectangle.</returns>\n        public static BitmapSource CaptureScreenAsBitmapSource(int width, int height, int positionX, int positionY)\n        {\n            var hDesk = User32.GetDesktopWindow();\n            var hSrce = User32.GetWindowDC(hDesk);\n            var hDest = Gdi32.CreateCompatibleDC(hSrce);\n            var hBmp = Gdi32.CreateCompatibleBitmap(hSrce, width, height);\n            var hOldBmp = Gdi32.SelectObject(hDest, hBmp);\n\n            try\n            {\n                var b = Gdi32.BitBlt(hDest, 0, 0, width, height, hSrce, positionX, positionY, CopyPixelOperations.SourceCopy | CopyPixelOperations.CaptureBlt);\n\n                //return Image.FromHbitmap(hBmp);\n                return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBmp, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());\n            }\n            catch (Exception ex)\n            {\n                //LogWriter.Log(ex, \"Impossible to get screenshot of the screen\");\n            }\n            finally\n            {\n                Gdi32.SelectObject(hDest, hOldBmp);\n                Gdi32.DeleteObject(hBmp);\n                Gdi32.DeleteDC(hDest);\n                User32.ReleaseDC(hDesk, hSrce);\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Captures the screen using the SourceCopy | CaptureBlt.\n        /// </summary>\n        /// <param name=\"height\">Height of the capture region.</param>\n        /// <param name=\"positionX\">Source capture Left position.</param>\n        /// <param name=\"positionY\">Source capture Top position.</param>\n        /// <param name=\"width\">Width of the capture region.</param>\n        /// <returns>A bitmap with the capture rectangle.</returns>\n        public static Image CaptureScreenAsBitmap(int width, int height, int positionX, int positionY)\n        {\n            var hDesk = User32.GetDesktopWindow();\n            var hSrce = User32.GetWindowDC(hDesk);\n            var hDest = Gdi32.CreateCompatibleDC(hSrce);\n            var hBmp = Gdi32.CreateCompatibleBitmap(hSrce, width, height);\n            var hOldBmp = Gdi32.SelectObject(hDest, hBmp);\n\n            try\n            {\n                var b = Gdi32.BitBlt(hDest, 0, 0, width, height, hSrce, positionX, positionY, CopyPixelOperations.SourceCopy | CopyPixelOperations.CaptureBlt);\n\n                return b ? Image.FromHbitmap(hBmp) : null;\n            }\n            catch (Exception)\n            {\n                //LogWriter.Log(ex, \"Impossible to get screenshot of the screen\");\n            }\n            finally\n            {\n                Gdi32.SelectObject(hDest, hOldBmp);\n                Gdi32.DeleteObject(hBmp);\n                Gdi32.DeleteDC(hDest);\n                User32.ReleaseDC(hDesk, hSrce);\n            }\n\n            return null;\n        }\n\n        public static Image CaptureWindow(IntPtr handle, double scale)\n        {\n            var rectangle = WindowHelper.GetWindowRect(handle);\n            var posX = (int)((rectangle.X + Util.Constants.LeftOffset) * scale);\n            var posY = (int)((rectangle.Y + Util.Constants.TopOffset) * scale);\n            var width = (int)((rectangle.Width - Util.Constants.HorizontalOffset) * scale);\n            var height = (int)((rectangle.Height - Util.Constants.VerticalOffset) * scale);\n\n            var hDesk = User32.GetDesktopWindow();\n            var hSrce = User32.GetWindowDC(hDesk);\n            var hDest = Gdi32.CreateCompatibleDC(hSrce);\n            var hBmp = Gdi32.CreateCompatibleBitmap(hSrce, width, height);\n            var hOldBmp = Gdi32.SelectObject(hDest, hBmp);\n\n            var b = Gdi32.BitBlt(hDest, 0, 0, width, height, hSrce, posX, posY, CopyPixelOperations.SourceCopy | CopyPixelOperations.CaptureBlt);\n\n            try\n            {\n                return Image.FromHbitmap(hBmp);\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to get screenshot of the screen\");\n            }\n            finally\n            {\n                Gdi32.SelectObject(hDest, hOldBmp);\n                Gdi32.DeleteObject(hBmp);\n                Gdi32.DeleteDC(hDest);\n                User32.ReleaseDC(hDesk, hSrce);\n            }\n\n            return null;\n        }\n\n        public static System.Drawing.Bitmap CaptureImageCursor(ref System.Windows.Point point, double scale)\n        {\n            try\n            {\n                var cursorInfo = new CursorInfo();\n                cursorInfo.cbSize = Marshal.SizeOf(cursorInfo);\n\n                if (!User32.GetCursorInfo(out cursorInfo))\n                    return null;\n\n                if (cursorInfo.flags != Constants.CursorShowing)\n                    return null;\n\n                var hicon = User32.CopyIcon(cursorInfo.hCursor);\n                if (hicon == IntPtr.Zero)\n                    return null;\n\n                if (!User32.GetIconInfo(hicon, out var iconInfo))\n                {\n                    Gdi32.DeleteObject(hicon);\n                    return null;\n                }\n\n                point.X = cursorInfo.ptScreenPos.X - iconInfo.xHotspot;\n                point.Y = cursorInfo.ptScreenPos.Y - iconInfo.yHotspot;\n\n                using (var maskBitmap = Image.FromHbitmap(iconInfo.hbmMask))\n                {\n                    //Is this a monochrome cursor?  \n                    if (maskBitmap.Height == maskBitmap.Width * 2 && iconInfo.hbmColor == IntPtr.Zero)\n                    {\n                        var final = new System.Drawing.Bitmap(maskBitmap.Width, maskBitmap.Width);\n                        var hDesktop = User32.GetDesktopWindow();\n                        var dcDesktop = User32.GetWindowDC(hDesktop);\n\n                        using (var resultGraphics = Graphics.FromImage(final))\n                        {\n                            var resultHdc = resultGraphics.GetHdc();\n                            var offsetX = (int)((point.X + 3) * scale);\n                            var offsetY = (int)((point.Y + 3) * scale);\n\n                            Gdi32.BitBlt(resultHdc, 0, 0, final.Width, final.Height, dcDesktop, offsetX, offsetY, CopyPixelOperations.SourceCopy);\n                            User32.DrawIconEx(resultHdc, 0, 0, cursorInfo.hCursor, 0, 0, 0, IntPtr.Zero, 0x0003);\n\n                            //TODO: I have to try removing the background of this cursor capture.\n                            //Gdi32.BitBlt(resultHdc, 0, 0, final.Width, final.Height, dcDesktop, (int)point.X + 3, (int)point.Y + 3, CopyPixelOperations.SourceErase);\n\n                            //Original, ignores the screen as background.\n                            //Gdi32.BitBlt(resultHdc, 0, 0, resultBitmap.Width, resultBitmap.Height, maskHdc, 0, resultBitmap.Height, CopyPixelOperations.SourceCopy); //SourceCopy\n                            //Gdi32.BitBlt(resultHdc, 0, 0, resultBitmap.Width, resultBitmap.Height, maskHdc, 0, 0, CopyPixelOperations.PatInvert); //SourceInvert\n\n                            resultGraphics.ReleaseHdc(resultHdc);\n                            User32.ReleaseDC(hDesktop, dcDesktop);\n                        }\n\n                        Gdi32.DeleteObject(iconInfo.hbmMask);\n                        Gdi32.DeleteDC(dcDesktop);\n\n                        return final;\n                    }\n\n                    Gdi32.DeleteObject(iconInfo.hbmColor);\n                    Gdi32.DeleteObject(iconInfo.hbmMask);\n                    Gdi32.DeleteObject(hicon);\n                }\n\n                var icon = Icon.FromHandle(hicon);\n                return icon.ToBitmap();\n            }\n            catch (Exception ex)\n            {\n                LogWriter.Log(ex, \"Impossible to get the cursor.\");\n            }\n\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Native/HotKeyCollection.cs",
    "content": "using ScreenToGif.Util;\nusing System.Windows.Input;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic class HotKeyCollection : IDisposable\n{\n    public static readonly HotKeyCollection Default = new();\n\n    internal List<HotKey> HotKeys { get; } = [];\n\n    /// <summary>\n    /// Registers the given keyboard shortcut with a given callback.\n    /// </summary>\n    /// <param name=\"modifier\">The modifier of the keyboard command.</param>\n    /// <param name=\"key\">The key of the keyboard command.</param>\n    /// <param name=\"windowsHandle\">A handle to the window that will receive WM_HOTKEY messages generated by the hot key.</param>\n    /// <param name=\"callback\">The callback that will be invoked when the keyboard command is pressed.</param>\n    /// <exception cref=\"InvalidOperationException\">If the key is already in use.</exception>\n    internal void RegisterHotKey(ModifierKeys modifier, Key key, IntPtr windowsHandle, Action callback)\n    {\n        if (key == Key.None)\n            return;\n\n        HotKeys.Add(new HotKey(modifier, key, windowsHandle, callback));\n    }\n\n    /// <summary>\n    /// Registers the given keyboard shortcut with a given callback.\n    /// </summary>\n    /// <param name=\"modifier\">The modifier of the keyboard command.</param>\n    /// <param name=\"key\">The key of the keyboard command.</param>\n    /// <param name=\"callback\">The callback that will be invoked when the keyboard command is pressed.</param>\n    /// <param name=\"unregisterFirst\">Tries to unregister first, before trying to register the hotkey.</param>\n    /// <exception cref=\"InvalidOperationException\">If the key is already in use.</exception>\n    internal void RegisterHotKey(ModifierKeys modifier, Key key, Action callback, bool unregisterFirst = false)\n    {\n        if (key == Key.None)\n            return;\n\n        HotKeys.Add(new HotKey(modifier, key, callback, unregisterFirst));\n    }\n\n    /// <summary>\n    /// Tries to register the given keyboard shortcut with a given callback.\n    /// </summary>\n    /// <param name=\"modifier\">The modifier of the keyboard command.</param>\n    /// <param name=\"key\">The key of the keyboard command.</param>\n    /// <param name=\"callback\">The callback that will be invoked when the keyboard command is pressed.</param>\n    /// <param name=\"unregisterFirst\">Tries to unregister first, before trying to register the hotkey.</param>\n    /// <exception cref=\"InvalidOperationException\">If the key is already in use.</exception>\n    public bool TryRegisterHotKey(ModifierKeys modifier, Key key, Action callback, bool unregisterFirst = false)\n    {\n        if (key == Key.None)\n            return true;\n\n        try\n        {\n            HotKeys.Add(new HotKey(modifier, key, callback, unregisterFirst));\n            return true;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Key already registered: \" + key);\n            return false;\n        }\n    }\n\n    public void Remove(ModifierKeys modifier, Key key)\n    {\n        var hot = Default.HotKeys.FirstOrDefault(f => f.Key == key && f.Modifier == modifier);\n        hot?.Dispose();\n\n        if (hot != null)\n            Default.HotKeys.Remove(hot);\n    }\n\n    public void Dispose()\n    {\n        foreach (var hotKey in HotKeys)\n            hotKey.Dispose();\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Native/InputHook.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Input;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Native.Helpers\n{\n    /// <summary>\n    /// This class allows you to tap keyboard and mouse and / or to detect their activity even when an\n    /// application runs in background or does not have any user interface at all. This class raises\n    /// common .NET events with KeyEventArgs and MouseEventArgs so you can easily retrieve any information you need.\n    /// </summary>\n    public class InputHook\n    {\n        #region Windows constants from Winuser.h in Microsoft SDK.\n\n        /// <summary>\n        /// Hook id for monitoring low-level mouse input events.\n        /// </summary>\n        private const int HookMouseLowLevel = 14;\n\n        /// <summary>\n        /// Hook id for monitoring low-level keyboard input events.\n        /// </summary>\n        private const int HookKeyboardLowLevel = 13;\n\n        /// <summary>\n        /// The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem\n        /// key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.\n        /// </summary>\n        private const int MessageKeydown = 0x100;\n\n        /// <summary>\n        /// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem\n        /// key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed,\n        /// or a keyboard key that is pressed when a window has the keyboard focus.\n        /// </summary>\n        private const int MessageKeyUp = 0x101;\n\n        /// <summary>\n        /// The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user\n        /// presses the F10 key (which activates the menu bar) or holds down the ALT key and then\n        /// presses another key. It also occurs when no window currently has the keyboard focus;\n        /// in this case, the WM_SYSKEYDOWN message is sent to the active window. The window that\n        /// receives the message can distinguish between these two contexts by checking the context\n        /// code in the lParam parameter.\n        /// </summary>\n        private const int MessageSystemKeyDown = 0x104;\n\n        /// <summary>\n        /// The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user\n        /// releases a key that was pressed while the ALT key was held down. It also occurs when no\n        /// window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent\n        /// to the active window. The window that receives the message can distinguish between\n        /// these two contexts by checking the context code in the lParam parameter.\n        /// </summary>\n        private const int MessageSystemKeyUp = 0x105;\n\n        private const byte KeyShift = 0x10;\n        private const byte KeyCapital = 0x14;\n        private const byte KeyNumLock = 0x90;\n\n        private const byte MouseFirstExtraButton = 0x0001;\n        private const byte MouseSecondExtraButton = 0x0002;\n\n        #endregion\n\n\n        #region Variables\n\n        /// <summary>\n        /// Custom Mouse Event Handler.\n        /// </summary>\n        public delegate void CustomMouseEventHandler(object sender, SimpleMouseGesture e);\n\n        /// <summary>\n        /// Custom Key Event Handler.\n        /// </summary>\n        public delegate void CustomKeyEventHandler(object sender, CustomKeyEventArgs e);\n\n        /// <summary>\n        /// Custom KeyPress Event Handler.\n        /// </summary>\n        public delegate void CustomKeyPressEventHandler(object sender, CustomKeyPressEventArgs e);\n\n        /// <summary>\n        /// Custom KeyUp Event Handler.\n        /// </summary>\n        public delegate void CustomKeyUpEventHandler(object sender, CustomKeyEventArgs e);\n\n\n        /// <summary>\n        /// Occurs when the user moves the mouse, presses any mouse button or scrolls the wheel.\n        /// </summary>\n        public event CustomMouseEventHandler OnMouseActivity;\n\n        /// <summary>\n        /// Occurs when the user presses a key.\n        /// </summary>\n        public event CustomKeyEventHandler KeyDown;\n\n        ///// <summary>\n        ///// Occurs when the user presses and releases.\n        ///// </summary>\n        public event CustomKeyPressEventHandler KeyPress;\n\n        /// <summary>\n        /// Occurs when the user releases a key.\n        /// </summary>\n        public event CustomKeyEventHandler KeyUp;\n\n        /// <summary>\n        /// Stores the handle to the mouse hook procedure.\n        /// </summary>\n        private int _mouseHookHandle = 0;\n\n        /// <summary>\n        /// Stores the handle to the keyboard hook procedure.\n        /// </summary>\n        private int _keyboardHookHandle = 0;\n\n        /// <summary>\n        /// Declare MouseHookProcedure as HookProc type.\n        /// </summary>\n        private static Delegates.HookProc _mouseHookProcedure;\n\n        /// <summary>\n        /// Declare KeyboardHookProcedure as HookProc type.\n        /// </summary>\n        private static Delegates.HookProc _keyboardHookProcedure;\n\n        private MouseButtonState _leftButton = MouseButtonState.Released;\n        private MouseButtonState _rightButton = MouseButtonState.Released;\n        private MouseButtonState _middleButton = MouseButtonState.Released;\n        private MouseButtonState _extraButton = MouseButtonState.Released;\n        private MouseButtonState _extra2Button = MouseButtonState.Released;\n\n        private static DateTime _lastClickTime;\n        private static int _clickCount;\n        private static bool _isDragging;\n        private static double _horizontalDragThreshold;\n        private static double _verticalDragThreshold;\n        private static PointW _dragStartPoint;\n\n        #endregion\n\n        #region Constructors\n\n        /// <summary>\n        /// Creates an instance of UserActivityHook object and sets mouse and keyboard hooks.\n        /// </summary>\n        /// <exception cref=\"Win32Exception\">Any windows problem.</exception>\n        public InputHook()\n        {\n            Start();\n        }\n\n        /// <summary>\n        /// Creates an instance of UserActivityHook object and installs both or one of mouse and/or keyboard hooks and starts raising events\n        /// </summary>\n        /// <param name=\"installMouseHook\"><b>true</b> if mouse events must be monitored</param>\n        /// <param name=\"installKeyboardHook\"><b>true</b> if keyboard events must be monitored</param>\n        /// <exception cref=\"Win32Exception\">Any windows problem.</exception>\n        /// <remarks>\n        /// To create an instance without installing hooks call new UserActivityHook(false, false)\n        /// </remarks>\n        public InputHook(bool installMouseHook, bool installKeyboardHook)\n        {\n            Start(installMouseHook, installKeyboardHook);\n        }\n\n        /// <summary>\n        /// Destruction.\n        /// </summary>\n        ~InputHook()\n        {\n            //uninstall hooks and do not throw exceptions\n            Stop(true, true, false);\n        }\n\n        #endregion\n\n        #region Methods\n\n        /// <summary>\n        /// Installs both mouse and keyboard hooks and starts raising events\n        /// </summary>\n        /// <exception cref=\"Win32Exception\">Any windows problem.</exception>\n        public void Start()\n        {\n            Start(true, true);\n        }\n\n        /// <summary>\n        /// Installs both or one of mouse and/or keyboard hooks and starts raising events\n        /// </summary>\n        /// <param name=\"installMouseHook\"><b>true</b> if mouse events must be monitored</param>\n        /// <param name=\"installKeyboardHook\"><b>true</b> if keyboard events must be monitored</param>\n        /// <exception cref=\"Win32Exception\">Any windows problem.</exception>\n        public void Start(bool installMouseHook, bool installKeyboardHook)\n        {\n            //Install Mouse hook only if it is not installed and must be installed\n            if (_mouseHookHandle == 0 && installMouseHook)\n            {\n                //Get minimum drag thresholds\n                _horizontalDragThreshold = SystemParameters.MinimumHorizontalDragDistance;\n                _verticalDragThreshold = SystemParameters.MinimumVerticalDragDistance;\n\n                //Create an instance of HookProc.\n                _mouseHookProcedure = MouseHookProc;\n\n                //Install hook.\n                _mouseHookHandle = User32.SetWindowsHookEx(HookMouseLowLevel, _mouseHookProcedure, IntPtr.Zero, 0);\n\n                //If SetWindowsHookEx fails.\n                if (_mouseHookHandle == 0)\n                {\n                    //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.\n                    var errorCode = Marshal.GetLastWin32Error();\n\n                    //Cleans up.\n                    Stop(true, false, false);\n\n                    //Initializes and throws a new instance of the Win32Exception class with the specified error.\n                    throw new Win32Exception(errorCode);\n                }\n            }\n\n            //Install Keyboard hook only if it is not installed and must be installed\n            if (_keyboardHookHandle == 0 && installKeyboardHook)\n            {\n                //Create an instance of HookProc.\n                _keyboardHookProcedure = KeyboardHookProc;\n\n                //Install hook\n                _keyboardHookHandle = User32.SetWindowsHookEx(HookKeyboardLowLevel, _keyboardHookProcedure, IntPtr.Zero, 0);\n\n                //If SetWindowsHookEx fails.\n                if (_keyboardHookHandle == 0)\n                {\n                    //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.\n                    var errorCode = Marshal.GetLastWin32Error();\n\n                    //Cleans up.\n                    Stop(false, true, false);\n\n                    //Initializes and throws a new instance of the Win32Exception class with the specified error.\n                    throw new Win32Exception(errorCode);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Stops monitoring both mouse and keyboard events and raising events.\n        /// </summary>\n        /// <exception cref=\"Win32Exception\">Any windows problem.</exception>\n        public void Stop()\n        {\n            Stop(true, true, true);\n        }\n\n        /// <summary>\n        /// Stops monitoring both or one of mouse and/or keyboard events and raising events.\n        /// </summary>\n        /// <param name=\"uninstallMouseHook\"><b>true</b> if mouse hook must be uninstalled</param>\n        /// <param name=\"uninstallKeyboardHook\"><b>true</b> if keyboard hook must be uninstalled</param>\n        /// <param name=\"throwExceptions\"><b>true</b> if exceptions which occurred during uninstalling must be thrown</param>\n        /// <exception cref=\"Win32Exception\">Any windows problem.</exception>\n        public void Stop(bool uninstallMouseHook, bool uninstallKeyboardHook, bool throwExceptions)\n        {\n            //if mouse hook set and must be uninstalled\n            if (_mouseHookHandle != 0 && uninstallMouseHook)\n            {\n                //Uninstalls the hook.\n                var retMouse = User32.UnhookWindowsHookEx(_mouseHookHandle);\n\n                //Resets the invalid handle.\n                _mouseHookHandle = 0;\n\n                //if failed and exception must be thrown.\n                if (retMouse == 0 && throwExceptions)\n                {\n                    //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.\n                    var errorCode = Marshal.GetLastWin32Error();\n\n                    //Initializes and throws a new instance of the Win32Exception class with the specified error.\n                    throw new Win32Exception(errorCode);\n                }\n            }\n\n            //If keyboard hook set and must be uninstalled\n            if (_keyboardHookHandle != 0 && uninstallKeyboardHook)\n            {\n                //Uninstalls the hook.\n                var retKeyboard = User32.UnhookWindowsHookEx(_keyboardHookHandle);\n\n                //Resets the invalid handle.\n                _keyboardHookHandle = 0;\n\n                //If failed and exception must be thrown\n                if (retKeyboard == 0 && throwExceptions)\n                {\n                    //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.\n                    var errorCode = Marshal.GetLastWin32Error();\n\n                    //Initializes and throws a new instance of the Win32Exception class with the specified error.\n                    throw new Win32Exception(errorCode);\n                }\n            }\n        }\n\n\n        private void DetectDoubleClick(NativeMouseEvents type, PointW point)\n        {\n            var deltaMs = DateTime.Now - _lastClickTime;\n\n            _lastClickTime = DateTime.Now;\n\n            if (deltaMs.TotalMilliseconds <= User32.GetDoubleClickTime())\n                _clickCount++;\n            else\n                _clickCount = 1;\n\n            if (_clickCount != 2)\n                return;\n\n            OnMouseActivity?.Invoke(this, new SimpleMouseGesture(type, point.X, point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n            _clickCount = 0;\n        }\n\n        /// <summary>\n        /// A callback function which will be called every time a mouse activity detected.\n        /// https://docs.microsoft.com/en-us/windows/win32/winmsg/lowlevelmouseproc\n        /// </summary>\n        /// <param name=\"code\">\n        /// Specifies whether the hook procedure must process the message.\n        /// If code is HC_ACTION, the hook procedure must process the message.\n        /// If code is less than zero, the hook procedure must pass the message to the\n        /// CallNextHookEx function without further processing and must return the value returned by CallNextHookEx.\n        /// </param>\n        /// <param name=\"type\">\n        /// Same as wParam. Specifies whether the message was sent by the current thread.\n        /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero.\n        /// </param>\n        /// <param name=\"structure\">\n        /// Same as lParam. Pointer to a CWPSTRUCT structure that contains details about the message.\n        /// </param>\n        /// <returns>\n        /// If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.\n        /// If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx\n        /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC\n        /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook\n        /// procedure does not call CallNextHookEx, the return value should be zero.\n        /// </returns>\n        private IntPtr MouseHookProc(int code, uint type, IntPtr structure)\n        {\n            //If it's not Ok or no one listens to this event, call next hook.\n            if (code < 0 || OnMouseActivity == null)\n                return User32.CallNextHookEx(_mouseHookHandle, code, type, structure);\n\n            //Marshall the data from callback.\n            var mouse = (MouseHook) Marshal.PtrToStructure(structure, typeof(MouseHook));\n            var data = new WordLevel.WordUnion { Number = mouse.MouseData };\n\n            #region Mouse actions\n\n            switch ((NativeMouseEvents) type)\n            {\n                case NativeMouseEvents.MouseMove:\n                {\n                    if (!_isDragging && _leftButton == MouseButtonState.Pressed)\n                    {\n                        var isXDragging = Math.Abs(mouse.Point.X - _dragStartPoint.X) > SystemParameters.MinimumHorizontalDragDistance;\n                        var isYDragging = Math.Abs(mouse.Point.Y - _dragStartPoint.Y) > SystemParameters.MinimumVerticalDragDistance;\n\n                        _isDragging = isXDragging || isYDragging;\n\n                        if (_isDragging)\n                        {\n                            OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MouseDragStart, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                            break;\n                        }\n                    }\n\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MouseMove, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideLeftButtonDown:\n                case NativeMouseEvents.LeftButtonDown:\n                {\n                    DetectDoubleClick(NativeMouseEvents.LeftButtonDoubleClick, mouse.Point);\n\n                    _leftButton = MouseButtonState.Pressed;\n                    _dragStartPoint = mouse.Point;\n\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.LeftButtonDown, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideLeftButtonUp:\n                case NativeMouseEvents.LeftButtonUp:\n                {\n                    //End drag.\n                    if (_isDragging)\n                    {\n                        OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MouseDragEnd, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                        _isDragging = false;\n                    }\n\n                    _leftButton = MouseButtonState.Released;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.LeftButtonUp, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideLeftButtonDoubleClick:\n                case NativeMouseEvents.LeftButtonDoubleClick:\n                {\n                    _leftButton = MouseButtonState.Pressed;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.LeftButtonDoubleClick, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    _leftButton = MouseButtonState.Released;\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideRightButtonDown:\n                case NativeMouseEvents.RightButtonDown:\n                {\n                    DetectDoubleClick(NativeMouseEvents.RightButtonDoubleClick, mouse.Point);\n\n                    _rightButton = MouseButtonState.Pressed;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.RightButtonDown, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideRightButtonUp:\n                case NativeMouseEvents.RightButtonUp:\n                {\n                    _rightButton = MouseButtonState.Released;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.RightButtonUp, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideRightButtonDoubleClick:\n                case NativeMouseEvents.RightButtonDoubleClick:\n                {\n                    _rightButton = MouseButtonState.Pressed;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.RightButtonDoubleClick, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    _rightButton = MouseButtonState.Released;\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideMiddleButtonDown:\n                case NativeMouseEvents.MiddleButtonDown:\n                {\n                    DetectDoubleClick(NativeMouseEvents.MiddleButtonDoubleClick, mouse.Point);\n\n                    _middleButton = MouseButtonState.Pressed;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MiddleButtonDown, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideMiddleButtonUp:\n                case NativeMouseEvents.MiddleButtonUp:\n                {\n                    _middleButton = MouseButtonState.Released;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MiddleButtonUp, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideMiddleButtonDoubleClick:\n                case NativeMouseEvents.MiddleButtonDoubleClick:\n                {\n                    _middleButton = MouseButtonState.Pressed;\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MiddleButtonDoubleClick, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    _middleButton = MouseButtonState.Released;\n                    break;\n                }\n\n                case NativeMouseEvents.MouseWheel:\n                {\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MouseWheel, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button, data.High));\n                    break;\n                }\n\n                case NativeMouseEvents.MouseWheelHorizontal:\n                {\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.MouseWheelHorizontal, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button, data.High));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideExtraButtonDown:\n                case NativeMouseEvents.ExtraButtonDown:\n                {\n                    DetectDoubleClick(NativeMouseEvents.ExtraButtonDoubleClick, mouse.Point);\n\n                    if (data.High == MouseFirstExtraButton)\n                        _extraButton = MouseButtonState.Pressed;\n                    else\n                        _extra2Button = MouseButtonState.Pressed;\n\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.ExtraButtonDown, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideExtraButtonDoubleClick:\n                case NativeMouseEvents.ExtraButtonDoubleClick:\n                {\n                    if (data.High == MouseFirstExtraButton)\n                        _extraButton = MouseButtonState.Pressed;\n                    else\n                        _extra2Button = MouseButtonState.Pressed;\n\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.ExtraButtonDoubleClick, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n\n                    if (data.High == MouseFirstExtraButton)\n                        _extraButton = MouseButtonState.Released;\n                    else\n                        _extra2Button = MouseButtonState.Released;\n                    break;\n                }\n\n                case NativeMouseEvents.OutsideExtraButtonUp:\n                case NativeMouseEvents.ExtraButtonUp:\n                {\n                    if (data.High == MouseFirstExtraButton)\n                        _extraButton = MouseButtonState.Released;\n                    else\n                        _extra2Button = MouseButtonState.Released;\n\n                    OnMouseActivity?.Invoke(this, new SimpleMouseGesture(NativeMouseEvents.ExtraButtonUp, mouse.Point.X, mouse.Point.Y, _leftButton, _rightButton, _middleButton, _extraButton, _extra2Button));\n                    break;\n                }\n\n                //default: I can't return now, it will break the click detector.\n                //return CallNextHookEx(hMouseHook, nCode, wParam, lParam);\n                //HU3HU3 - A little funny momment: I just frooze my cursor by returning 1 instead of calling the next hook. - Nicke\n                //Congrats to myself. ;D\n                //05:24 AM 01/02/2014 (day-month-year)\n            }\n\n            #endregion\n\n            //Call the next hook.\n            return User32.CallNextHookEx(_mouseHookHandle, code, type, structure);\n        }\n\n        /// <summary>\n        /// A callback function which will be called every time a keyboard activity detected.\n        /// https://docs.microsoft.com/en-us/windows/win32/winmsg/lowlevelkeyboardproc\n        /// </summary>\n        /// <param name=\"code\">\n        /// Specifies whether the hook procedure must process the message.\n        /// If code is HC_ACTION, the hook procedure must process the message.\n        /// If code is less than zero, the hook procedure must pass the message to the\n        /// CallNextHookEx function without further processing and must return the\n        /// value returned by CallNextHookEx.\n        /// </param>\n        /// <param name=\"wParam\">\n        /// Specifies whether the message was sent by the current thread.\n        /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero.\n        /// </param>\n        /// <param name=\"lParam\">\n        /// Pointer to a CWPSTRUCT structure that contains details about the message.\n        /// </param>\n        /// <returns>\n        /// If code is less than zero, the hook procedure must return the value returned by CallNextHookEx.\n        /// If code is greater than or equal to zero, it is highly recommended that you call CallNextHookEx\n        /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC\n        /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook\n        /// procedure does not call CallNextHookEx, the return value should be zero.\n        /// </returns>\n        private IntPtr KeyboardHookProc(int code, uint wParam, IntPtr lParam)\n        {\n            //Indicates if any of the underlying events set the e.Handled flag.\n            var handled = false;\n\n            //If it was Ok and there are no listeners.\n            if (code < 0 || KeyDown == null && KeyUp == null && KeyPress == null)\n                return User32.CallNextHookEx(_keyboardHookHandle, code, wParam, lParam);\n\n            //Read structure KeyboardHookStruct at lParam\n            var keyboard = (KeyboardHook)Marshal.PtrToStructure(lParam, typeof(KeyboardHook));\n            var isInjected = (keyboard.Flags & 0x10) != 0;\n\n            if (KeyDown != null && (wParam == MessageKeydown || wParam == MessageSystemKeyDown))\n            {\n                #region Raise KeyDown\n\n                var isDownShift = (User32.GetKeyState(KeyShift) & 0x80) == 0x80;\n                var isDownCapslock = User32.GetKeyState(KeyCapital) != 0;\n\n\n                var e = new CustomKeyEventArgs(KeyInterop.KeyFromVirtualKey(keyboard.KeyCode), isDownCapslock ^ isDownShift, isInjected);\n\n                KeyDown?.Invoke(this, e);\n\n                handled = e.Handled;\n\n                #endregion\n            }\n\n            if (KeyPress != null && wParam == MessageKeydown)\n            {\n                #region Raise KeyPress\n\n                var isDownShift = (User32.GetKeyState(KeyShift) & 0x80) == 0x80;\n                var isDownCapslock = User32.GetKeyState(KeyCapital) != 0;\n\n                var keyState = new byte[256];\n                User32.GetKeyboardState(keyState);\n                var inBuffer = new byte[2];\n\n                if (User32.ToAscii(keyboard.KeyCode, keyboard.ScanCode, keyState, inBuffer, keyboard.Flags) == 1)\n                {\n                    var key = (char)inBuffer[0];\n                    if (isDownCapslock ^ isDownShift && char.IsLetter(key))\n                        key = char.ToUpper(key);\n\n                    var e = new CustomKeyPressEventArgs(key);\n                    KeyPress?.Invoke(this, e);\n\n                    handled = handled || e.Handled;\n                }\n\n                #endregion\n            }\n\n            if (KeyUp != null && (wParam == MessageKeyUp || wParam == MessageSystemKeyUp))\n            {\n                #region Raise KeyUp\n\n                var e = new CustomKeyEventArgs(KeyInterop.KeyFromVirtualKey(keyboard.KeyCode), false, isInjected);\n\n                KeyUp?.Invoke(this, e);\n\n                handled = handled || e.Handled;\n\n                #endregion\n            }\n\n            //If event handled in application do not hand off to other listeners.\n            return handled ? new IntPtr(1) : User32.CallNextHookEx(_keyboardHookHandle, code, wParam, lParam);\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Native/Monitor.cs",
    "content": "using System.Collections;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\nusing Monitor = ScreenToGif.Domain.Models.Native.Monitor;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic static class MonitorHelper\n{\n    private static Monitor ParseMonitor(IntPtr monitorHandle, IntPtr hdc)\n    {\n        var info = new MonitorInfoEx(); //TODO: MonitorInfo not getting filled with data.\n        var a = User32.GetMonitorInfo(new HandleRef(null, monitorHandle), info);\n\n        var name = new string(info.Device).TrimEnd((char)0);\n\n        var monitor = new Monitor\n        {\n            Handle = monitorHandle,\n            Name = name,\n            FriendlyName = name,\n            NativeBounds = new Rect(info.Monitor.Left, info.Monitor.Top,\n                info.Monitor.Right - info.Monitor.Left,\n                info.Monitor.Bottom - info.Monitor.Top),\n            Bounds = new Rect(info.Monitor.Left, info.Monitor.Top,\n                info.Monitor.Right - info.Monitor.Left,\n                info.Monitor.Bottom - info.Monitor.Top),\n            WorkingArea = new Rect(info.Work.Left, info.Work.Top,\n                info.Work.Right - info.Work.Left,\n                info.Work.Bottom - info.Work.Top),\n            IsPrimary = (info.Flags & Constants.MonitorinfoPrimary) != 0\n        };\n\n        #region Extra details\n\n        try\n        {\n            var display = new DisplayDevices(true);\n\n            for (uint id = 0; User32.EnumDisplayDevices(null, id, ref display, 0); id++)\n            {\n                var found = display.DeviceName == monitor.Name;\n                var adapter = display.DeviceString;\n\n                User32.EnumDisplayDevices(display.DeviceName, id, ref display, 0);\n\n                if (!found)\n                    continue;\n\n                monitor.AdapterName = adapter;\n                monitor.FriendlyName = string.IsNullOrWhiteSpace(display.DeviceString) ? LocalizationHelper.Get(\"S.Recorder.Screen.Name.Internal\") :\n                    display.DeviceString == \"Generic PnP Monitor\" ? LocalizationHelper.Get(\"S.Recorder.Screen.Name.Generic\") : display.DeviceString;\n                break;\n            }\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to get extra details of screen.\");\n        }\n\n        #endregion\n\n        #region Screen DPI\n\n        try\n        {\n            ShCore.GetDpiForMonitor(monitorHandle, DpiTypes.Effective, out var aux, out _);\n            monitor.Dpi = aux > 0 ? (int)aux : 96;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to detect screen DPI.\");\n\n            try\n            {\n                var h = Gdi32.CreateCompatibleDC(IntPtr.Zero);\n                monitor.Dpi = Gdi32.GetDeviceCaps(h, (int)DeviceCaps.LogPixelsX);\n                Gdi32.DeleteDC(h);\n            }\n            catch (Exception e)\n            {\n                LogWriter.Log(e, \"Error getting fallback of screen DPI.\");\n            }\n        }\n\n        #endregion\n\n        return monitor;\n    }\n\n    public static List<Monitor> AllMonitors\n    {\n        get\n        {\n            var closure = new MonitorEnumCallback();\n            var proc = new Delegates.MonitorEnumProc(closure.Callback);\n\n            User32.EnumDisplayMonitors(Constants.NullHandleRef, IntPtr.Zero, proc, IntPtr.Zero);\n\n            return closure.Monitors.Cast<Monitor>().ToList();\n        }\n    }\n\n    public static List<Monitor> AllMonitorsScaled(double scale, bool offset = false)\n    {\n        //TODO: I should probably take each monitor scale.\n        var monitors = AllMonitors;\n\n        if (offset)\n        {\n            foreach (var monitor in monitors)\n            {\n                monitor.Bounds = new Rect(monitor.Bounds.X / scale - SystemParameters.VirtualScreenLeft, monitor.Bounds.Y / scale - SystemParameters.VirtualScreenTop, monitor.Bounds.Width / scale, monitor.Bounds.Height / scale);\n                monitor.WorkingArea = new Rect(monitor.WorkingArea.X / scale - SystemParameters.VirtualScreenLeft, monitor.WorkingArea.Y / scale - SystemParameters.VirtualScreenTop, monitor.WorkingArea.Width / scale, monitor.WorkingArea.Height / scale);\n            }\n\n            return monitors;\n        }\n\n        foreach (var monitor in monitors)\n        {\n            monitor.Bounds = new Rect(monitor.Bounds.X / scale, monitor.Bounds.Y / scale, monitor.Bounds.Width / scale, monitor.Bounds.Height / scale);\n            monitor.WorkingArea = new Rect(monitor.WorkingArea.X / scale, monitor.WorkingArea.Y / scale, monitor.WorkingArea.Width / scale, monitor.WorkingArea.Height / scale);\n        }\n\n        return monitors;\n    }\n\n    public static List<Monitor> AllMonitorsGranular(bool offset = false)\n    {\n        var monitors = AllMonitors;\n\n        if (offset)\n        {\n            foreach (var monitor in monitors)\n            {\n                monitor.NativeBounds = new Rect(monitor.Bounds.X - SystemParameters.VirtualScreenLeft, monitor.Bounds.Y - SystemParameters.VirtualScreenTop, monitor.Bounds.Width, monitor.Bounds.Height);\n                monitor.Bounds = new Rect(monitor.Bounds.X / monitor.Scale - SystemParameters.VirtualScreenLeft, monitor.Bounds.Y / monitor.Scale - SystemParameters.VirtualScreenTop, monitor.Bounds.Width / monitor.Scale, monitor.Bounds.Height / monitor.Scale);\n                monitor.WorkingArea = new Rect(monitor.WorkingArea.X / monitor.Scale - SystemParameters.VirtualScreenLeft, monitor.WorkingArea.Y / monitor.Scale - SystemParameters.VirtualScreenTop, monitor.WorkingArea.Width / monitor.Scale, monitor.WorkingArea.Height / monitor.Scale);\n            }\n\n            return monitors;\n        }\n\n        foreach (var monitor in monitors)\n        {\n            monitor.Bounds = new Rect(monitor.Bounds.X / monitor.Scale, monitor.Bounds.Y / monitor.Scale, monitor.Bounds.Width / monitor.Scale, monitor.Bounds.Height / monitor.Scale);\n            monitor.WorkingArea = new Rect(monitor.WorkingArea.X / monitor.Scale, monitor.WorkingArea.Y / monitor.Scale, monitor.WorkingArea.Width / monitor.Scale, monitor.WorkingArea.Height / monitor.Scale);\n        }\n\n        return monitors;\n    }\n\n    public static Monitor FromPoint(int left, int top)\n    {\n        var handle = User32.MonitorFromPoint(new PointW { X = left, Y = top }, Constants.MonitorDefaultToNearest);\n\n        return ParseMonitor(handle, IntPtr.Zero);\n    }\n\n    public static Monitor MostIntersected(List<Monitor> monitors, Rect region)\n    {\n        return monitors.OrderByDescending(f =>\n        {\n            //var inter = Rect.Intersect(region, f.NativeBounds);\n            //This methods does not work properly with multi DPI.\n\n            var x = Math.Max(region.Left, f.NativeBounds.Left);\n            var num1 = Math.Min(region.Left + region.Width, f.NativeBounds.Right);\n            var y = Math.Max(region.Top, f.NativeBounds.Top);\n            var num2 = Math.Min(region.Top + region.Height, f.NativeBounds.Bottom);\n\n            if (num1 >= x && num2 >= y)\n                return num1 - x + num2 - y;\n\n            return 0;\n        }).ThenBy(t => t.IsPrimary).FirstOrDefault();\n    }\n\n    private class MonitorEnumCallback\n    {\n        public ArrayList Monitors { get; private set; }\n\n        public MonitorEnumCallback()\n        {\n            Monitors = new ArrayList();\n        }\n\n        public bool Callback(IntPtr monitor, IntPtr hdc, IntPtr lprcMonitor, IntPtr lparam)\n        {\n            Monitors.Add(ParseMonitor(monitor, hdc));\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Native/NotifyIconHelper.cs",
    "content": "using ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic static class NotifyIconHelper\n{\n    /// <summary>\n    /// Updates the taskbar icons.\n    /// </summary>\n    /// <param name=\"data\">Configuration settings for the NotifyIcon.</param>\n    /// <param name=\"command\">Operation on the icon (e.g. delete the icon).</param>\n    /// <param name=\"flags\">Defines which members of the <paramref name=\"data\"/> structure are set.</param>\n    /// <returns>True if the data was successfully written.</returns>\n    /// <remarks>See Shell_NotifyIcon documentation on MSDN for details.</remarks>\n    public static bool WriteIconData(ref NotifyIconData data, NotifyCommands command, IconDataMembers flags)\n    {\n        if (VisualHelper.IsInDesignMode())\n            return true;\n\n        data.ValidMembers = flags;\n\n        lock (VisualHelper.LockObject)\n            return Native.External.Shell32.Shell_NotifyIcon(command, ref data);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Native/WindowHelper.cs",
    "content": "using ScreenToGif.Domain.Enums.Native;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Domain.Models.Native;\nusing ScreenToGif.Native.External;\nusing ScreenToGif.Native.Structs;\nusing ScreenToGif.Util.Extensions;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Interop;\nusing Monitor = ScreenToGif.Domain.Models.Native.Monitor;\nusing Size = System.Windows.Size;\n\nnamespace ScreenToGif.Native.Helpers;\n\npublic static class WindowHelper\n{\n    private const int GetWindowsLongStyle = -16;\n    private const int GetWindowsLongExStyle = -20;\n\n    public static IntPtr GetWindowPtr(this Window window)\n    {\n        return new WindowInteropHelper(window).Handle;\n    }\n\n    public static void DisableMaximize(this Window window)\n    {\n        var handle = GetWindowPtr(window);\n\n        User32.SetWindowLong(handle, GetWindowsLongStyle, User32.GetWindowLong(handle, GetWindowsLongStyle) & ~(int)WindowStyles.MaximizeBox);\n\n        UpdateMenuStatus(handle, window.WindowState);\n    }\n\n    public static void DisableMinimize(this Window window)\n    {\n        var handle = GetWindowPtr(window);\n\n        User32.SetWindowLong(handle, GetWindowsLongStyle, User32.GetWindowLong(handle, GetWindowsLongStyle) & ~(int)WindowStyles.MinimizeBox);\n\n        UpdateMenuStatus(handle, window.WindowState);\n    }\n\n    public static void EnableMaximize(this Window window)\n    {\n        var handle = GetWindowPtr(window);\n\n        User32.SetWindowLong(handle, GetWindowsLongStyle, User32.GetWindowLong(handle, GetWindowsLongStyle) & (int)WindowStyles.MaximizeBox);\n\n        UpdateMenuStatus(handle, window.WindowState);\n    }\n\n    public static void EnableMinimize(this Window window)\n    {\n        var handle = GetWindowPtr(window);\n\n        User32.SetWindowLong(handle, GetWindowsLongStyle, User32.GetWindowLong(handle, GetWindowsLongStyle) & (int)WindowStyles.MinimizeBox);\n\n        UpdateMenuStatus(handle, window.WindowState);\n    }\n\n    public static void SetCornerPreference(this Window window, CornerPreferences preference)\n    {\n        var ptr = GetWindowPtr(window);\n\n        var attr = (int)preference;\n\n        DwmApi.DwmSetWindowAttribute(ptr, DwmWindowAttributes.WindowCornerPreference, ref attr, Marshal.SizeOf(typeof(int)));\n    }\n\n    public static void SetResizeMode(this Window window)\n    {\n        var handle = GetWindowPtr(window);\n\n        if (window.ResizeMode is ResizeMode.CanMinimize or ResizeMode.NoResize)\n            UpdateStyle(handle, WindowStyles.ThickFrame, 0);\n        else\n            UpdateStyle(handle, 0, WindowStyles.ThickFrame);\n    }\n\n    public static void UpdateMenuStatus(this Window window)\n    {\n        var handle = GetWindowPtr(window);\n        var state = window.WindowState;\n\n        UpdateMenuStatus(handle, state);\n    }\n\n    public static IntPtr NearestMonitorForWindow(IntPtr window)\n    {\n        return User32.MonitorFromWindow(window, Constants.MonitorDefaultToNearest);\n    }\n\n    private static bool UpdateStyle(IntPtr handle, WindowStyles removeStyle, WindowStyles addStyle)\n    {\n        var style = User32.GetWindowLong(handle, GetWindowsLongStyle);\n\n        var newStyle = (style & ~((int)removeStyle)) | ((int)addStyle);\n\n        if (style == newStyle)\n            return false;\n\n        User32.SetWindowLong(handle, GetWindowsLongStyle, newStyle);\n        return true;\n    }\n\n    private static void UpdateMenuStatus(IntPtr handle, WindowState state)\n    {\n        const uint enabled = (uint)(MenuFunctions.Enabled | MenuFunctions.ByCommand);\n        const uint disabled = (uint)(MenuFunctions.Grayed | MenuFunctions.Disabled | MenuFunctions.ByCommand);\n\n        var menu = User32.GetSystemMenu(handle, false);\n\n        if (IntPtr.Zero == menu)\n            return;\n\n        var dwStyle = User32.GetWindowLong(handle, GetWindowsLongStyle);\n\n        var canMinimize = (dwStyle & (int)WindowStyles.MinimizeBox) != 0;\n        var canMaximize = (dwStyle & (int)WindowStyles.MaximizeBox) != 0;\n        var canSize = (dwStyle & (int)WindowStyles.ThickFrame) != 0;\n\n        switch (state)\n        {\n            case WindowState.Maximized:\n                User32.EnableMenuItem(menu, SysCommands.Restore, enabled);\n                User32.EnableMenuItem(menu, SysCommands.Move, disabled);\n                User32.EnableMenuItem(menu, SysCommands.Size, disabled);\n                User32.EnableMenuItem(menu, SysCommands.Minimize, canMinimize ? enabled : disabled);\n                User32.EnableMenuItem(menu, SysCommands.Maximize, disabled);\n                break;\n            case WindowState.Minimized:\n                User32.EnableMenuItem(menu, SysCommands.Restore, enabled);\n                User32.EnableMenuItem(menu, SysCommands.Move, disabled);\n                User32.EnableMenuItem(menu, SysCommands.Size, disabled);\n                User32.EnableMenuItem(menu, SysCommands.Minimize, disabled);\n                User32.EnableMenuItem(menu, SysCommands.Maximize, canMaximize ? enabled : disabled);\n                break;\n            default:\n                User32.EnableMenuItem(menu, SysCommands.Restore, disabled);\n                User32.EnableMenuItem(menu, SysCommands.Move, enabled);\n                User32.EnableMenuItem(menu, SysCommands.Size, canSize ? enabled : disabled);\n                User32.EnableMenuItem(menu, SysCommands.Minimize, canMinimize ? enabled : disabled);\n                User32.EnableMenuItem(menu, SysCommands.Maximize, canMaximize ? enabled : disabled);\n                break;\n        }\n    }\n\n    public static void MoveToScreen(this System.Windows.Window window, Monitor next, bool fullScreen = false)\n    {\n        if (fullScreen)\n        {\n            User32.SetWindowPos(new System.Windows.Interop.WindowInteropHelper(window).Handle, (IntPtr)SpecialWindowHandles.Top,\n                (int)next.NativeBounds.Left, (int)next.NativeBounds.Top, (int)next.NativeBounds.Width, (int)next.NativeBounds.Height, SetWindowPosFlags.ShowWindow);\n            return;\n        }\n\n        User32.SetWindowPos(new System.Windows.Interop.WindowInteropHelper(window).Handle, (IntPtr)SpecialWindowHandles.Top,\n            (int)next.NativeBounds.Left, (int)next.NativeBounds.Top, (int)window.Width, (int)window.Height, SetWindowPosFlags.ShowWindow);\n    }\n\n    public static int GetZOrder(IntPtr hWnd)\n    {\n        var z = 0;\n        for (var h = hWnd; h != IntPtr.Zero; h = User32.GetWindow(h, GetWindowType.HwndPrev))\n            z++;\n\n        return z;\n    }\n\n    /// <summary>\n    /// Gets the z-order for one or more windows atomically with respect to each other. \n    /// In Windows, smaller z-order is higher. If the window is not top level, the z order is returned as -1. \n    /// </summary>\n    public static int[] GetZOrder(params IntPtr[] hWnds)\n    {\n        var z = new int[hWnds.Length];\n        for (var i = 0; i < hWnds.Length; i++)\n            z[i] = -1;\n\n        var index = 0;\n        var numRemaining = hWnds.Length;\n\n        User32.EnumWindows((wnd, param) =>\n        {\n            var searchIndex = Array.IndexOf(hWnds, wnd);\n\n            if (searchIndex != -1)\n            {\n                z[searchIndex] = index;\n                numRemaining--;\n                if (numRemaining == 0) return false;\n            }\n\n            index++;\n            return true;\n        }, IntPtr.Zero);\n\n        return z;\n    }\n\n    /// <summary>\n    /// Returns a dictionary that contains the handle and title of all the open windows.\n    /// </summary>\n    /// <returns>\n    /// A dictionary that contains the handle and title of all the open windows.\n    /// </returns>\n    public static List<DetectedRegion> EnumerateWindows(double scale = 1)\n    {\n        var shellWindow = User32.GetShellWindow();\n\n        var windows = new List<DetectedRegion>();\n\n        //EnumWindows(delegate (IntPtr handle, int lParam)\n        User32.EnumDesktopWindows(IntPtr.Zero, delegate (IntPtr handle, IntPtr lParam)\n        {\n            if (handle == shellWindow)\n                return true;\n\n            if (!User32.IsWindowVisible(handle))\n                return true;\n\n            if (User32.IsIconic(handle))\n                return true;\n\n            var length = User32.GetWindowTextLength(handle);\n\n            if (length == 0)\n                return true;\n\n            var builder = new StringBuilder(length);\n\n            User32.GetWindowText(handle, builder, length + 1);\n\n            var info = new WindowInfo(false);\n            User32.GetWindowInfo(handle, ref info);\n\n            //If disabled, ignore.\n            if (((long)info.dwStyle & (uint)WindowStyles.Disabled) == (uint)WindowStyles.Disabled)\n                return true;\n\n            //Window class name.\n            var className = new StringBuilder(256); //Maximum class name.\n            if (User32.GetClassName(handle, className, className.Capacity) != 0)\n            {\n                if (className.ToString().Contains(\"ScreenToGif.exe\"))\n                    return true;\n            }\n\n            //Title bar visibility.\n            var infoTile = new TitlebarInfo(false);\n            User32.GetTitleBarInfo(handle, ref infoTile);\n\n            //Removed: WindowStyle=None windows were getting ignored.\n            // ((infoTile.rgstate[0] & StateSystemInvisible) == StateSystemInvisible)\n            //    return true;\n\n            if ((infoTile.rgstate[0] & Constants.StateSystemUnavailable) == Constants.StateSystemUnavailable)\n                return true;\n\n            ////Removed: MahApps windows were getting ignored.\n            //if ((infoTile.rgstate[0] & StateSystemOffscreen) == StateSystemOffscreen)\n            //    return true;\n\n            DwmApi.DwmGetWindowAttribute(handle, (int)DwmWindowAttributes.Cloaked, out bool isCloaked, Marshal.SizeOf(typeof(bool)));\n\n            if (isCloaked)\n                return true;\n\n            DwmApi.DwmGetWindowAttribute(handle, (int)DwmWindowAttributes.ExtendedFrameBounds, out NativeRect frameBounds, Marshal.SizeOf(typeof(NativeRect)));\n\n            var bounds = frameBounds.TryToRect(MathExtensions.RoundUpValue(scale), scale);\n\n            if (bounds.IsEmpty)\n                return true;\n\n            windows.Add(new DetectedRegion(handle, bounds, builder.ToString(), GetZOrder(handle)));\n\n            return true;\n        }, IntPtr.Zero);\n\n        return windows.OrderBy(o => o.Order).ToList();\n    }\n\n    /// <summary>\n    /// Returns a dictionary that contains the handle and title of all the open windows inside a given monitor.\n    /// </summary>\n    /// <returns>\n    /// A dictionary that contains the handle and title of all the open windows.\n    /// </returns>\n    public static List<DetectedRegion> EnumerateWindowsByMonitor(Monitor monitor)\n    {\n        var shellWindow = User32.GetShellWindow();\n\n        var windows = new List<DetectedRegion>();\n\n        //EnumWindows(delegate (IntPtr handle, int lParam)\n        User32.EnumDesktopWindows(IntPtr.Zero, delegate (IntPtr handle, IntPtr lParam)\n        {\n            if (handle == shellWindow)\n                return true;\n\n            if (!User32.IsWindowVisible(handle))\n                return true;\n\n            if (User32.IsIconic(handle))\n                return true;\n\n            var length = User32.GetWindowTextLength(handle);\n\n            if (length == 0)\n                return true;\n\n            var builder = new StringBuilder(length);\n\n            User32.GetWindowText(handle, builder, length + 1);\n            var title = builder.ToString();\n\n            var info = new WindowInfo(false);\n            User32.GetWindowInfo(handle, ref info);\n\n            //If disabled, ignore.\n            if (((long)info.dwStyle & (uint)WindowStyles.Disabled) == (uint)WindowStyles.Disabled)\n                return true;\n\n            //Window class name.\n            var className = new StringBuilder(256); //Maximum class name.\n            if (User32.GetClassName(handle, className, className.Capacity) != 0)\n            {\n                if (className.ToString().Contains(\"ScreenToGif.exe\"))\n                    return true;\n            }\n\n            var infoTile = new TitlebarInfo(false);\n            User32.GetTitleBarInfo(handle, ref infoTile);\n\n            //Removed: WindowStyle=None windows were getting ignored.\n            // ((infoTile.rgstate[0] & StateSystemInvisible) == StateSystemInvisible)\n            //    return true;\n\n            if ((infoTile.rgstate[0] & Constants.StateSystemUnavailable) == Constants.StateSystemUnavailable)\n                return true;\n\n            ////Removed: MahApps windows were getting ignored.\n            //if ((infoTile.rgstate[0] & StateSystemOffscreen) == StateSystemOffscreen)\n            //    return true;\n\n            DwmApi.DwmGetWindowAttribute(handle, (int)DwmWindowAttributes.Cloaked, out bool isCloaked, Marshal.SizeOf(typeof(bool)));\n\n            if (isCloaked)\n                return true;\n\n            DwmApi.DwmGetWindowAttribute(handle, (int)DwmWindowAttributes.ExtendedFrameBounds, out NativeRect frameBounds, Marshal.SizeOf(typeof(NativeRect)));\n\n            var bounds = frameBounds.TryToRect(MathExtensions.RoundUpValue(monitor.Scale), monitor.Scale);\n\n            if (bounds.IsEmpty)\n                return true;\n\n            var place = WindowPlacement.Default;\n            User32.GetWindowPlacement(handle, ref place);\n\n            //Hack for detecting the correct size of VisualStudio when it's maximized.\n            if (place.ShowCmd == ShowWindowCommands.Maximize && title.Contains(\"Microsoft Visual Studio\"))\n                bounds = frameBounds.TryToRect(-info.cxWindowBorders, monitor.Scale);\n            //bounds = new System.Windows.Rect(new Point(monitor.Bounds.Left / monitor.Scale, monitor.Bounds.Top / monitor.Scale), new Size(info.rcClient.Right / monitor.Scale, info.rcClient.Bottom / monitor.Scale));\n\n            if (bounds.IsEmpty)\n                return true;\n\n            //Windows to the left are not being detected as inside the bounds.\n            if (!bounds.IntersectsWith(monitor.Bounds))\n                return true;\n\n            windows.Add(new DetectedRegion(handle, bounds, title, GetZOrder(handle)));\n\n            return true;\n        }, IntPtr.Zero);\n\n        return windows.OrderBy(o => o.Order).ToList();\n    }\n\n    /// <summary>\n    /// Gets all first level window handles from a given process.\n    /// The windows must be visible.\n    /// </summary>\n    public static List<IntPtr> GetWindowHandlesFromProcess(Process process)\n    {\n        var list = new List<IntPtr>();\n\n        //Each thread can create a window.\n        foreach (ProcessThread info in process.Threads)\n        {\n            //With given thread ID, search for windows.\n            var windows = GetWindowHandlesForThread((IntPtr)info.Id);\n\n            if (windows != null)\n                list.AddRange(windows);\n        }\n\n        return list;\n    }\n\n    private static IntPtr[] GetWindowHandlesForThread(IntPtr threadHandle)\n    {\n        var results = new List<IntPtr>();\n\n        //Enumerate all top level desktop windows.\n        User32.EnumWindows(delegate (IntPtr window, IntPtr thread)\n        {\n            //Get the ID of the thread that created the window.\n            var threadId = User32.GetWindowThreadProcessId(window, out _);\n\n            //Check if the selected thread created this window.\n            if ((IntPtr)threadId != thread)\n                return true;\n\n            if (!User32.IsWindowVisible(window))\n                return true;\n\n            results.Add(window);\n            return true;\n        }, threadHandle);\n\n        return results.ToArray();\n    }\n\n    private static bool ExtendedFrameBounds(IntPtr handle, out Int32Rect rectangle)\n    {\n        var result = DwmApi.DwmGetWindowAttribute(handle, (int)DwmWindowAttributes.ExtendedFrameBounds, out NativeRect rect, Marshal.SizeOf(typeof(NativeRect)));\n\n        rectangle = rect.ToRectangle();\n\n        return result >= 0;\n    }\n\n    public static Int32Rect GetWindowRect(IntPtr handle)\n    {\n        User32.GetWindowRect(handle, out var rect);\n        return rect.ToRectangle();\n    }\n\n    public static Int32Rect TrueWindowRectangle(IntPtr handle)\n    {\n        return ExtendedFrameBounds(handle, out var rectangle) ? rectangle : GetWindowRect(handle);\n    }\n\n    public static Size ScreenSizeFromWindow(System.Windows.Window window)\n    {\n        return ScreenSizeFromWindow(new WindowInteropHelper(window).Handle);\n    }\n\n    public static Size ScreenSizeFromWindow(IntPtr handle)\n    {\n        var pointer = User32.MonitorFromWindow(handle, Constants.MonitorDefaultToNearest);\n\n        var info = new MonitorInfoEx();\n        User32.GetMonitorInfo(new HandleRef(null, pointer), info);\n\n        var rect = info.Work.ToRectangle();\n\n        Gdi32.DeleteObject(pointer);\n\n        return new Size(rect.Width, rect.Height);\n    }\n\n    internal static Size ScreenSizeFromPoint(int left, int top)\n    {\n        var pointer = User32.MonitorFromPoint(new PointW { X = left, Y = top }, Constants.MonitorDefaultToNearest);\n\n        var info = new MonitorInfoEx();\n        User32.GetMonitorInfo(new HandleRef(null, pointer), info);\n\n        var rect = info.Work.ToRectangle();\n\n        return new Size(rect.Width, rect.Height);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/NetworkHelper.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Util;\n\npublic static class NetworkHelper\n{\n    [ComImport, Guid(\"DCB00C01-570F-4A9B-8D69-199FDBA5723B\"), ClassInterface(ClassInterfaceType.None)]\n    private class NetworkListManager { }\n\n    [ComImport, Guid(\"DCB00008-570F-4A9B-8D69-199FDBA5723B\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), CoClass(typeof(NetworkListManager))]\n    private interface INetworkCostManager\n    {\n        /// <summary>\n        /// The GetCost method retrieves the current cost of either a machine-wide internet connection, or the first-hop of routing to a specific destination\n        /// on a connection. If destinationAddress is NULL, this method instead returns the cost of the network used for machine-wide Internet connectivity.\n        /// </summary>\n        /// <param name=\"cost\">\n        /// A DWORD value that indicates the cost of the connection. The lowest 16 bits represent the cost level, and the highest 16 bits represent the\n        /// flags. Possible values are defined by the <see cref=\"ConnectionCost\"/> enumeration.\n        /// </param>\n        /// <param name=\"destinationAddress\">\n        /// An <see cref=\"SocketAddress\"/> structure containing the destination IPv4/IPv6 address. If NULL, this method will instead return the cost associated with the\n        /// preferred connection used for machine Internet connectivity.\n        /// </param>\n        void GetCost(out ConnectionCost cost, [In, Optional] SocketAddress? destinationAddress);\n    }\n\n    private enum ConnectionCost : uint\n    {\n        /// <summary>\n        /// The cost is unknown.\n        /// </summary>\n        Unknown = 0x0,\n\n        /// <summary>\n        /// The connection is unlimited and is considered to be unrestricted of usage charges and capacity constraints.\n        /// </summary>\n        Unrestricted = 0x1,\n\n        /// <summary>\n        /// The use of this connection is unrestricted up to a specific data transfer limit.\n        /// </summary>\n        Fixed = 0x2,\n\n        /// <summary>\n        /// This connection is regulated on a per-byte basis.\n        /// </summary>\n        Variable = 0x4,\n\n        /// <summary>\n        /// The connection is currently in an OverDataLimit state as it has exceeded the carrier specified data transfer limit.\n        /// </summary>\n        OverDataLimit = 0x10000,\n\n        /// <summary>\n        /// The network is experiencing high traffic load and is congested.\n        /// </summary>\n        Congested = 0x20000,\n\n        /// <summary>\n        /// The connection is roaming outside the network and affiliates of the home provider.\n        /// </summary>\n        Roaming = 0x40000,\n\n        /// <summary>\n        /// The connection is approaching the data limit specified by the carrier.\n        /// </summary>\n        ApproachingDataLimit = 0x80000\n    }\n    \n    /// <summary>\n    /// The <see cref=\"SocketAddress\"/> structure contains the IPv4/IPv6 destination address.\n    /// </summary>\n    [StructLayout(LayoutKind.Sequential, Pack = 1)]\n    public sealed class SocketAddress\n    {\n        private const int DataSize = 128;\n\n        /// <summary>An IPv4/IPv6 destination address.</summary>\n        [MarshalAs(UnmanagedType.ByValArray, SizeConst = DataSize)]\n        public byte[] Data = new byte[DataSize];\n    }\n\n    public static bool IsNetworkMetered()\n    {\n        try\n        {\n            var cost = ConnectionCost.Unknown;\n\n            // ReSharper disable once SuspiciousTypeConversion.Global\n            var manager = new NetworkListManager() as INetworkCostManager;\n            manager?.GetCost(out cost, null);\n\n            return cost >= ConnectionCost.Fixed;\n        }\n        catch\n        {\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/OperationalSystemHelper.cs",
    "content": "namespace ScreenToGif.Util;\n\npublic static class OperationalSystemHelper\n{\n    public static bool IsWin8OrHigher()\n    {\n        return Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version >= new Version(6, 2, 9200, 0);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/PathHelper.cs",
    "content": "using ScreenToGif.Util.Helpers;\nusing ScreenToGif.Util.Settings;\nusing System.IO;\nusing System.Text.RegularExpressions;\n\nnamespace ScreenToGif.Util;\n\npublic static class PathHelper\n{\n    /// <summary>\n    /// Puts the current date/time into filename, replacing the format typed in between two questions marks.\n    /// Such as 'Animation ?dd-MM-yy?' -> 'Animation 21-04-21'\n    /// Only some of the formats are available, since there's a file name limitation from Windows.\n    /// https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings \n    /// </summary>\n    /// <param name=\"name\">The name of the file, with the date/time format.</param>\n    /// <returns>The name with the date and time.</returns>\n    public static string ReplaceRegexInName(string name)\n    {\n        //Less than 2 question marks? Then it's not valid.\n        if (name.Split('?').Length - 1 < 2)\n            return name;\n\n        const string dateTimeFileNameRegEx = \"[?]([ymdhsfzgkt]{1,6}[-_ ]{0,2}){1,10}[?]\";\n\n        if (!Regex.IsMatch(name, dateTimeFileNameRegEx, RegexOptions.IgnoreCase))\n            return name;\n\n        var match = Regex.Match(name, dateTimeFileNameRegEx, RegexOptions.IgnoreCase);\n        var date = DateTime.Now.ToString(Regex.Replace(match.Value, \"[?]\", \"\"));\n\n        return name.Replace(match.ToString(), date);\n    }\n\n    /// <summary>\n    /// When dealing with relative paths, the app will fail to point to the right folder when starting it via the \"Open with...\" or automatic startup methods.\n    /// </summary>\n    public static string AdjustPath(string path)\n    {\n        //If the path is relative, File.Exists() was returning C:\\\\Windows\\\\System32\\ffmpeg.exe when the app was launched from the \"Open with\" context menu.\n        //So, in order to get the correct location, I need to combine the current base directory with the relative path.\n        if (!string.IsNullOrWhiteSpace(path) && !Path.IsPathRooted(path))\n        {\n            var adjusted = path.StartsWith(\".\" + Path.AltDirectorySeparatorChar) ? path.TrimStart('.', Path.AltDirectorySeparatorChar) :\n                path.StartsWith(\".\" + Path.DirectorySeparatorChar) ? path.TrimStart('.', Path.DirectorySeparatorChar) : path;\n\n            return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, adjusted);\n        }\n\n        return path;\n    }\n\n    public static async Task<bool> IsFfmpegPresent(bool ignoreEnvironment = false, bool ignoreEmpty = false)\n    {\n        //If the path is relative, File.Exists() was returning C:\\\\Windows\\\\System32\\ffmpeg.exe when the app was launched from the \"Open with\" context menu.\n        //So, in order to get the correct location, I need to combine the current base directory with the relative path.\n        var realPath = AdjustPath(UserSettings.All.FfmpegLocation);\n\n        //File location already chosen or detected.\n        if (!string.IsNullOrWhiteSpace(realPath) && File.Exists(realPath))\n        {\n            await CheckFfmpegVersion(realPath);\n            return true;\n        }\n\n        //The path was not selected, it may be located inside a common folder.\n        if (!ignoreEmpty && string.IsNullOrWhiteSpace(UserSettings.All.FfmpegLocation))\n        {\n            //Same path as application.\n            if (File.Exists(AdjustPath(\"ffmpeg.exe\")))\n            {\n                UserSettings.All.FfmpegLocation = \"ffmpeg.exe\";\n                await CheckFfmpegVersion(UserSettings.All.FfmpegLocation);\n                return true;\n            }\n\n            //Program Data folder.\n            var expandedPath = Environment.ExpandEnvironmentVariables(@\"%ProgramData%\\ScreenToGif\\ffmpeg.exe\");\n\n            if (File.Exists(expandedPath))\n            {\n                UserSettings.All.FfmpegLocation = expandedPath;\n                await CheckFfmpegVersion(UserSettings.All.FfmpegLocation);\n                return true;\n            }\n        }\n\n        //If not found by direct/relative path, ignore the environment variables.\n        if (ignoreEnvironment)\n            return false;\n\n        #region Check Environment Variables\n\n        var variable = Environment.GetEnvironmentVariable(\"PATH\", EnvironmentVariableTarget.Machine) + \";\" +\n                       Environment.GetEnvironmentVariable(\"Path\", EnvironmentVariableTarget.User);\n\n        foreach (var path in variable.Split(';').Where(w => !string.IsNullOrWhiteSpace(w)))\n        {\n            try\n            {\n                if (!File.Exists(Path.Combine(path, \"ffmpeg.exe\")))\n                    continue;\n            }\n            catch (Exception)\n            {\n                //LogWriter.Log(ex, \"Checking the path variables\", path);\n                continue;\n            }\n\n            UserSettings.All.FfmpegLocation = Path.Combine(path, \"ffmpeg.exe\");\n            await CheckFfmpegVersion(UserSettings.All.FfmpegLocation);\n            return true;\n        }\n\n        #endregion\n\n        return false;\n    }\n\n    private static async Task CheckFfmpegVersion(string realPath)\n    {\n        //If ffmpeg was detected from elsewhere or was downloaded a long time ago.\n        if (UserSettings.All.FfmpegVersionText is null)\n        {\n            //Call FFmpeg to check its version.\n            var output = await ProcessHelper.Start(realPath + \" -version\", false, true);\n\n            //Check the output to determine the FFmpeg version.\n            UserSettings.All.FfmpegVersionText = FfmpegHelper.IdentifyVersion(output);\n            UserSettings.All.HasOlderFfmpegVersion = FfmpegHelper.IsOlder(UserSettings.All.FfmpegVersionText);\n        }\n    }\n\n    public static bool IsGifskiPresent(bool ignoreEnvironment = false, bool ignoreEmpty = false)\n    {\n        //If the path is relative, File.Exists() was returning C:\\\\Windows\\\\System32\\Gifski.dll when the app was launched from the \"Open with\" context menu.\n        //So, in order to get the correct location, I need to combine the current base directory with the relative path.\n        var realPath = AdjustPath(UserSettings.All.GifskiLocation);\n\n        //File location already chosen or detected.\n        if (!string.IsNullOrWhiteSpace(realPath) && File.Exists(realPath))\n            return true;\n\n        //The path was not selected, but the file exists inside the same folder.\n        if (!ignoreEmpty && string.IsNullOrWhiteSpace(UserSettings.All.GifskiLocation) && File.Exists(AdjustPath(\"gifski.dll\")))\n        {\n            UserSettings.All.GifskiLocation = \"gifski.dll\";\n            return true;\n        }\n\n        //If not found by direct/relative path, ignore the environment variables.\n        if (ignoreEnvironment)\n            return false;\n\n        #region Check Environment Variables\n\n        var variable = Environment.GetEnvironmentVariable(\"PATH\", EnvironmentVariableTarget.Machine) + \";\" +\n                       Environment.GetEnvironmentVariable(\"Path\", EnvironmentVariableTarget.User);\n\n        foreach (var path in variable.Split(';').Where(w => !string.IsNullOrWhiteSpace(w)))\n        {\n            try\n            {\n                if (!File.Exists(Path.Combine(path, \"gifski.dll\")))\n                    continue;\n            }\n            catch (Exception ex)\n            {\n                //LogWriter.Log(ex, \"Checking the path variables\", path);\n                continue;\n            }\n\n            UserSettings.All.GifskiLocation = Path.Combine(path, \"gifski.dll\");\n            return true;\n        }\n\n        #endregion\n\n        return false;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/ProcessHelper.cs",
    "content": "using System.ComponentModel;\nusing System.Diagnostics;\nusing System.IO;\n\nnamespace ScreenToGif.Util;\n\npublic static class ProcessHelper\n{\n    public static string GetEntryAssemblyPath()\n    {\n        try\n        {\n            return Process.GetCurrentProcess().MainModule?.FileName ??\n                System.Reflection.Assembly.GetEntryAssembly()?.GetName().CodeBase?.Replace(\"/ScreenToGif.dll\", \"/ScreenToGif.exe\") ??\n                Path.Combine(AppContext.BaseDirectory, \"ScreenToGif.exe\");\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Not possible to get current executing assembly path.\");\n            return Path.Combine(AppContext.BaseDirectory, \"ScreenToGif.exe\");\n        }\n    }\n\n    public static async Task<string> Start(string arguments, bool runWithPowershell = true, bool redirectError = false)\n    {\n        var info = new ProcessStartInfo(runWithPowershell ? \"Powershell.exe\" : \"cmd.exe\")\n        {\n            Arguments = (!runWithPowershell ? \"/c \" : \"\") + arguments,\n            RedirectStandardOutput = true,\n            RedirectStandardError = redirectError,\n            CreateNoWindow = true\n        };\n\n        try\n        {\n            using var process = new Process();\n            process.StartInfo = info;\n            process.Start();\n\n            var outputTask = process.StandardOutput.ReadToEndAsync();\n            var errorTask = redirectError ? process.StandardError.ReadToEndAsync() : null;\n\n            await Task.WhenAll(outputTask, errorTask ?? Task.CompletedTask);\n            await process.WaitForExitAsync();\n\n            return outputTask.Result + errorTask?.Result;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to run the command\");\n            return \"\";\n        }\n    }\n\n    public static void StartWithShell(string filename)\n    {\n        var info = new ProcessStartInfo\n        {\n            FileName = filename,\n            UseShellExecute = true\n        };\n\n        Process.Start(info);\n    }\n    \n    public static async Task<bool> RestartAsAdmin(string arguments = \"\", bool waitToClose = false)\n    {\n        try\n        {\n            var info = new ProcessStartInfo(GetEntryAssemblyPath())\n            {\n                UseShellExecute = true, \n                Verb = \"runas\", \n                Arguments = arguments\n            };\n                \n            var process = Process.Start(info);\n\n            if (waitToClose && process != null)\n            {\n                var comp = new TaskCompletionSource<bool>();\n\n                process.Exited += (sender, args) =>\n                {\n                    comp.SetResult(process.ExitCode != 90);\n                };\n                process.EnableRaisingEvents = true;\n\n                if (process.HasExited)\n                    return process.ExitCode != 90;\n\n                //Return only when the region gets selected.\n                return await comp.Task;\n            }\n\n            return true;\n        }\n        catch (Win32Exception ex)\n        {\n            if (ex.NativeErrorCode != 1223) //User cancelled.\n                LogWriter.Log(ex, \"Impossible to start process as admin.\");\n                \n            return false;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to start process as admin.\");\n            return false;\n        }\n    }\n\n    public static Process RestartAsAdminAdvanced(string arguments = \"\")\n    {\n        try\n        {\n            var info = new ProcessStartInfo(GetEntryAssemblyPath())\n            {\n                UseShellExecute = true,\n                Verb = \"runas\",\n                Arguments = arguments\n            };\n\n            return Process.Start(info);\n        }\n        catch (Win32Exception ex)\n        {\n            if (ex.NativeErrorCode != 1223) //User cancelled.\n                LogWriter.Log(ex, \"Impossible to start process as admin.\");\n\n            return null;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to start process as admin.\");\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/ScreenToGif.Util.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <UseWPF>True</UseWPF>\n    <DebugType>embedded</DebugType>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"KGySoft.CoreLibraries\" />\n    <PackageReference Include=\"SharpCompress\" />\n    <PackageReference Include=\"System.Drawing.Common\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|AnyCPU'\">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants)</DefineConstants>\n  </PropertyGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\ScreenToGif.Model\\ScreenToGif.Domain.csproj\" />\n    <ProjectReference Include=\"..\\ScreenToGif.Native\\ScreenToGif.Native.csproj\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif.Util/Secret.cs",
    "content": "namespace ScreenToGif.Util;\n\npublic static class Secret\n{\n    public static string ServerAddress => \"https://screentogif-relay-app.azurewebsites.net\"; //\"https://localhost:5001\";\n\n    public static string Email => \"screentogif@outlook.com\";\n\n    public static string Password => \"AZRew2p?z:9PLpDg|R2wxjZMt4m5283Fg|FpzAQaK3QSFSBdaY|xGP@W#C7qHuqA^MT|pzBC4F^n*NHNQm6_\";\n\n    public static int Port => 587; //Or 25\n\n    public static string Host => \"smtp-mail.outlook.com\";\n\n\n    public static string ImgurId => \"45017b36adc5083\";\n\n    public static string ImgurSecret => \"e1c3d1e4735b4de48bfa0d99aa06150d9a7c3bba\";\n\n    public static string YandexId => \"3afd5060e3c74c978661d4e1c4271aa9\";\n}"
  },
  {
    "path": "ScreenToGif.Util/Serializer.cs",
    "content": "using System.IO;\nusing System.Runtime.Serialization.Json;\nusing System.Text;\n\nnamespace ScreenToGif.Util;\n\npublic static class Serializer\n{\n    public static string Serialize<T>(T data)\n    {\n        using (var ms = new MemoryStream())\n        {\n            var ser = new DataContractJsonSerializer(typeof(T));\n            ser.WriteObject(ms, data);\n            ms.Position = 0;\n\n            using (var reader = new StreamReader(ms, Encoding.UTF8))\n                return reader.ReadToEnd();\n        }\n    }\n\n    public static T Deserialize<T>(string json)\n    {\n        var ser = new DataContractJsonSerializer(typeof(T));\n\n        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))\n            return (T) ser.ReadObject(stream);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration0to2_28_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\n// ReSharper disable once InconsistentNaming\npublic static class Migration0To2_28_0\n{\n    public static bool Up(List<Property> properties)\n    {\n        #region Upload presets\n\n        var uploadPresets = new Property\n        {\n            Type = \"ArrayList\",\n            NameSpace = \"clr-namespace:System.Collections;assembly=mscorlib\",\n            Key = \"UploadPresets\"\n        };\n            \n        //Imgur (authenticated).\n        var imgurRefreshToken = properties.FirstOrDefault(f => f.Key == \"ImgurRefreshToken\")?.Value;\n            \n        if (!string.IsNullOrWhiteSpace(imgurRefreshToken))\n        {\n            var albums = new Property\n            {\n                Type = \"ArrayList\",\n                NameSpace = \"clr-namespace:System.Collections;assembly=mscorlib\",\n                Key = \"Albums\"\n            };\n\n            foreach (var album in properties.FirstOrDefault(f => f.Key == \"ImgurAlbumList\")?.Children ?? new List<Property>())\n            {\n                albums.Children.Add(new Property\n                {\n                    Type = \"ImgurAlbum\",\n                    NameSpace = \"clr-namespace:ScreenToGif.Model.UploadPresets.Imgur\",\n                    Attributes = new List<Property>\n                    {\n                        new Property { Key = \"Id\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"Id\")?.Value },\n                        new Property { Key = \"Title\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"Title\")?.Value },\n                        new Property { Key = \"Description\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"Description\")?.Value },\n                        new Property { Key = \"Link\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"Link\")?.Value },\n                        new Property { Key = \"Privacy\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"Privacy\")?.Value },\n                        new Property { Key = \"Nsfw\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"Nsfw\")?.Value },\n                        new Property { Key = \"ImagesCount\", Value = album.Attributes.FirstOrDefault(f => f.Key == \"ImagesCount\")?.Value },\n                    }\n                });\n            }\n\n            uploadPresets.Children.Add(new Property\n            {\n                Type = \"ImgurPreset\",\n                NameSpace = \"clr-namespace:ScreenToGif.Model.UploadPresets.Imgur\",\n                Attributes = new List<Property>\n                {\n                    new Property { Key = \"Title\", Value = \"Imgur\" },\n                    new Property { Key = \"AccessToken\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurAccessToken\")?.Value },\n                    new Property { Key = \"RefreshToken\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurRefreshToken\")?.Value },\n                    new Property { Key = \"ExpiryDate\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurExpireDate\")?.Value },\n                    new Property { Key = \"UseDirectLinks\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurUseDirectLinks\")?.Value ?? \"False\" },\n                    new Property { Key = \"UseGifvLinks\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurUseGifvLink\")?.Value ?? \"False\" },\n                    new Property { Key = \"UploadToAlbum\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurUploadToAlbum\")?.Value ?? \"False\" },\n                    new Property { Key = \"SelectedAlbum\", Value = properties.FirstOrDefault(f => f.Key == \"ImgurSelectedAlbum\")?.Value },\n                    albums\n                }, \n            });\n        }\n\n        //Yandex.\n        var yandexToken = properties.FirstOrDefault(f => f.Key == \"YandexDiskOAuthToken\")?.Value;\n\n        if (!string.IsNullOrWhiteSpace(yandexToken))\n        {\n            uploadPresets.Children.Add(new Property\n            {\n                Type = \"YandexPreset\",\n                NameSpace = \"clr-namespace:ScreenToGif.Model.UploadPresets.Yandex\",\n                Attributes = new List<Property>\n                {\n                    new Property { Key = \"Title\", Value = \"Yandex\" },\n                    new Property { Key = \"OAuthToken\", Value = yandexToken }\n                }\n            });\n        }\n\n        if (uploadPresets.Children.Any())\n            properties.Add(uploadPresets);\n\n        #endregion\n\n        //Remove deprecated properties.\n        var removeKeys = new List<string>\n        {\n            \"GifEncoder\",\n            \"ApngEncoder\",\n            \"VideoEncoder\",\n            \"IsGifOptionsExpanded\",\n            \"IsApngOptionsExpanded\",\n            \"IsVideoOptionsExpanded\",\n            \"IsPsdOptionsExpanded\",\n            \"IsProjectOptionsExpanded\",\n            \"IsSaveOptionsExpanded\",\n            \"IsGifOptionsExpanded\",\n            \"IsApngOptionsExpanded\",\n            \"IsVideoOptionsExpanded\",\n            \"IsPsdOptionsExpanded\",\n            \"IsProjectOptionsExpanded\",\n            \"IsSaveOptionsExpanded\",\n            \"ColorQuantization\",\n            \"SamplingFactor\",\n            \"GifskiQuality\",\n            \"MaximumColors\",\n            \"UseGlobalColorTable\",\n            \"Looped\",\n            \"RepeatForever\",\n            \"RepeatCount\",\n            \"EnableTransparency\",\n            \"SelectTransparencyColor\",\n            \"TransparencyColor\",\n            \"DetectUnchanged\",\n            \"PaintTransparent\",\n            \"ChromaKey\",\n            \"LatestOutputFolder\",\n            \"LatestFilename\",\n            \"LatestExtension\",\n            \"PickLocation\",\n            \"OverwriteOnSave\",\n            \"SaveAsProjectToo\",\n            \"UploadFile\",\n            \"LatestUploadService\",\n            \"SaveToClipboard\",\n            \"LatestCopyType\",\n            \"ExecuteCustomCommands\",\n            \"CustomCommands\",\n            \"DetectUnchangedApng\",\n            \"PaintTransparentApng\",\n            \"LoopedApng\",\n            \"RepeatCountApng\",\n            \"RepeatForeverApng\",\n            \"LatestApngOutputFolder\",\n            \"LatestApngFilename\",\n            \"LatestApngExtension\",\n            \"PickLocationApng\",\n            \"OverwriteOnSaveApng\",\n            \"SaveAsProjectTooApng\",\n            \"UploadFileApng\",\n            \"LatestUploadServiceApng\",\n            \"SaveToClipboardApng\",\n            \"LatestCopyTypeApng\",\n            \"ExecuteCustomCommandsApng\",\n            \"CustomCommandsApng\",\n            \"AviQuality\",\n            \"FlipVideo\",\n            \"OutputFramerate\",\n            \"FfmpegPresets\",\n            \"LatestVideoOutputFolder\",\n            \"LatestVideoFilename\",\n            \"LatestVideoExtension\",\n            \"PickLocationVideo\",\n            \"OverwriteOnSaveVideo\",\n            \"SaveAsProjectTooVideo\",\n            \"SaveToClipboardVideo\",\n            \"LatestCopyTypeVideo\",\n            \"ExecuteCustomCommandsVideo\",\n            \"CustomCommandsVideo\",\n            \"CompressionLevelProject\",\n            \"LatestProjectOutputFolder\",\n            \"LatestProjectFilename\",\n            \"LatestProjectExtension\",\n            \"OverwriteOnSaveProject\",\n            \"SaveToClipboardProject\",\n            \"LatestCopyTypeProject\",\n            \"ZipImages\",\n            \"LatestImageOutputFolder\",\n            \"LatestImageFilename\",\n            \"LatestImageExtension\",\n            \"OverwriteOnSaveImages\",\n            \"CompressImage\",\n            \"SaveTimeline\",\n            \"MaximizeCompatibility\",\n            \"LatestPhotoshopOutputFolder\",\n            \"LatestPhotoshopFilename\",\n            \"LatestPhotoshopExtension\",\n            \"PickLocationPhotoshop\",\n            \"OverwriteOnSavePhotoshop\",\n            \"SaveAsProjectTooPhotoshop\",\n            \"SaveToClipboardPhotoshop\",\n            \"LatestCopyTypePhotoshop\",\n            \"ExecuteCustomCommandsPhotoshop\",\n            \"CustomCommandsPhotoshop\",\n\n            \"Quality\",\n            \"SnapshotMode\",\n            \"SnapshotDefaultDelay\",\n            \"DetectMouseClicks\",\n            \"ClickColor\",\n            \"FullScreenMode\",\n            \"ExtraParametersGifski\",\n            \"LatestUploadIndex\",\n            \"ExtraParameters\",\n            \"ExtraParametersGif\",\n            \"ExtraParametersApngFFmpeg\",\n\n            \"ImgurAnonymousUseDirectLinks\",\n            \"ImgurAnonymousUseGifvLink\",\n            \"ImgurOAuthToken\",\n            \"ImgurAccessToken\",\n            \"ImgurRefreshToken\",\n            \"ImgurExpireDate\",\n            \"ImgurUseDirectLinks\",\n            \"ImgurUseGifvLink\",\n            \"ImgurUploadToAlbum\",\n            \"ImgurSelectedAlbum\",\n            \"ImgurAlbumList\",\n            \"YandexDiskOAuthToken\",\n        };\n        properties.RemoveAll(r => removeKeys.Contains(r.Key));\n\n        return true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_28_0To2_29_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\ninternal class Migration2_28_0To2_29_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        //Remove deprecated properties.\n        var removeKeys = new List<string>\n        {\n            \"AsyncRecording\"\n        };\n        properties.RemoveAll(r => removeKeys.Contains(r.Key));\n\n        return true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_29_0To2_31_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\ninternal class Migration2_29_0To2_31_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        //Rename properties.\n        var mouseClickColor = properties.FirstOrDefault(f => f.Key == \"MouseClicksColor\");\n\n        if (mouseClickColor != null)\n            mouseClickColor.Key = \"LeftMouseButtonClicksColor\";\n\n        var tasks = properties.FirstOrDefault(f => f.Key == \"AutomatedTasksList\");\n\n        if (tasks != null)\n        {\n            foreach (var child in tasks.Children)\n            {\n                if (child.Type == \"MouseClicksModel\")\n                {\n                    foreach (var attribute in child.Attributes)\n                    {\n                        if (attribute.Key == \"ForegroundColor\")\n                        {\n                            attribute.Key = \"LeftButtonForegroundColor\";\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_31_0To2_32_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\ninternal class Migration2_31_0To2_32_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        //Rename properties.\n        var tasks = properties.FirstOrDefault(f => f.Key == \"AutomatedTasksList\");\n\n        if (tasks != null)\n        {\n            foreach (var child in tasks.Children)\n            {\n                child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.Tasks;assembly=ScreenToGif\";\n\n                switch (child.Type)\n                {\n                    case \"MouseClicksModel\":\n                    {\n                        child.Type = \"MouseClicksViewModel\";\n                        break;\n                    }\n                    case \"KeyStrokesModel\":\n                    {\n                        child.Type = \"KeyStrokesViewModel\";\n                        break;\n                    }\n                    case \"DelayModel\":\n                    {\n                        child.Type = \"DelayViewModel\";\n                        break;\n                    }\n                    case \"ProgressModel\":\n                    {\n                        child.Type = \"ProgressViewModel\";\n                        break;\n                    }\n                    case \"BorderModel\":\n                    {\n                        child.Type = \"BorderViewModel\";\n                        break;\n                    }\n                    case \"ShadowModel\":\n                    {\n                        child.Type = \"ShadowViewModel\";\n                        break;\n                    }\n                }\n            }\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_32_0To2_35_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\ninternal class Migration2_32_0To2_35_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        UpdateNamespaces(properties);\n\n        //Remove deprecated properties.\n        var removeKeys = new List<string>\n        {\n            \"EditorExtendChrome\",\n            \"SharpDxLocationFolder\"\n        };\n        properties.RemoveAll(r => removeKeys.Contains(r.Key));\n\n        return true;\n    }\n\n    private static void UpdateNamespaces(List<Property> properties)\n    {\n        foreach (var child in properties)\n        {\n            switch (child.Type)\n            {\n                case \"ArrayList\":\n                {\n                    UpdateNamespaces(child.Children);\n                    break;\n                }\n                case \"FfmpegAviPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Video.Avi;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"FfmpegMkvPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Video.Mkv;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"FfmpegMovPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Video.Mov;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"FfmpegMp4Preset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Video.Mp4;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"FfmpegWebmPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Video.Webm;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"BmpPreset\":\n                case \"JpegPreset\":\n                case \"PngPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Image;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"PsdPreset\":\n                case \"StgPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.Other;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"EmbeddedApngPreset\":\n                case \"FfmpegApngPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"EmbeddedGifPreset\":\n                case \"FfmpegGifPreset\":\n                case \"GifskiGifPreset\":\n                case \"SystemGifPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"FfmpegWebpPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"ImgurPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.UploadPresets.Imgur;assembly=ScreenToGif.ViewModel\";\n\n                    UpdateNamespaces(child.Attributes);\n                    break;\n                }\n                case \"GfycatPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.UploadPresets.Gfycat;assembly=ScreenToGif.ViewModel\";\n\n                    UpdateNamespaces(child.Attributes);\n                    break;\n                }\n                case \"YandexPreset\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.UploadPresets.Yandex;assembly=ScreenToGif.ViewModel\";\n\n                    UpdateNamespaces(child.Attributes);\n                    break;\n                }\n                case \"ImgurAlbum\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.UploadPresets.Imgur;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"History\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.UploadPresets.History;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n                case \"MouseClicksViewModel\":\n                case \"KeyStrokesViewModel\":\n                case \"DelayViewModel\":\n                case \"ProgressViewModel\":\n                case \"BorderViewModel\":\n                case \"ShadowViewModel\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.ViewModel.Tasks;assembly=ScreenToGif.ViewModel\";\n                    break;\n                }\n\n                case \"CaptureFrequency\":\n                {\n                    child.Type = \"CaptureFrequencies\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"CopyType\":\n                {\n                    child.Type = \"CopyModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"AppTheme\":\n                {\n                    child.Type = \"AppThemes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"ProxyType\":\n                {\n                    child.Type = \"ProxyTypes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"Export\":\n                case \"ExportType\":\n                {\n                    child.Type = \"ExportFormats\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"PasteBehavior\":\n                {\n                    child.Type = \"PasteBehaviors\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"DelayUpdateType\":\n                {\n                    child.Type = \"DelayUpdateModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"ReduceDelayType\":\n                {\n                    child.Type = \"ReduceDelayModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"DuplicatesRemovalType\":\n                {\n                    child.Type = \"DuplicatesRemovalModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"DuplicatesDelayType\":\n                {\n                    child.Type = \"DuplicatesDelayModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"SizeUnits\":\n                {\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"ObfuscationMode\":\n                {\n                    child.Type = \"ObfuscationModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"FadeToType\":\n                {\n                    child.Type = \"FadeModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"ProgressType\":\n                {\n                    child.Type = \"ProgressTypes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n\n                case \"UploadType\":\n                {\n                    child.Type = \"UploadDestinations\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"EncoderType\":\n                {\n                    child.Type = \"EncoderTypes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"PartialExportType\":\n                {\n                    child.Type = \"PartialExportModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n                case \"VideoSettingsMode\":\n                {\n                    child.Type = \"VideoSettingsModes\";\n                    child.NameSpace = \"clr-namespace:ScreenToGif.Domain.Enums;assembly=ScreenToGif.Domain\";\n                    break;\n                }\n\n                default:\n                {\n                    break;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_35_0To2_36_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Util.Settings.Migrations;\n\ninternal class Migration2_35_0To2_36_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        //Rename a property.\n        var presets = properties.FirstOrDefault(f => f.Key == \"ExportPresets\");\n\n        if (presets != null)\n        {\n            foreach (var child in presets.Children)\n            {\n                foreach (var attribute in child.Attributes)\n                {\n                    switch (attribute.Key)\n                    {\n                        case \"OverwriteOnSave\":\n                        {\n                            attribute.Key = \"OverwriteMode\";\n                            attribute.Value = attribute.Value == \"True\" ? \"Allow\" : \"Prompt\";\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_36_0To2_37_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\ninternal class Migration2_36_0To2_37_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        //Rename properties.\n        var mouseClicksWidth = properties.FirstOrDefault(a => a.Key == \"MouseClicksWidth\");\n\n        if (mouseClicksWidth != null)\n            mouseClicksWidth.Key = \"MouseEventsWidth\";\n\n        var mouseClicksHeight = properties.FirstOrDefault(a => a.Key == \"MouseClicksHeight\");\n\n        if (mouseClicksHeight != null)\n            mouseClicksHeight.Key = \"MouseEventsHeight\";\n\n        UpdateTasks(properties);\n\n        return true;\n    }\n\n    private static void UpdateTasks(List<Property> properties)\n    {\n        //Update tasks.\n        var tasks = properties.FirstOrDefault(f => f.Key == \"AutomatedTasksList\");\n\n        if (tasks == null)\n            return;\n\n        foreach (var task in tasks.Children)\n        {\n            if (task.Type == \"MouseClicksViewModel\")\n            {\n                task.Type = \"MouseEventsViewModel\";\n\n                var taskTypeAttribute = task.Attributes.FirstOrDefault(a => a.Key == \"TaskType\");\n\n                if (taskTypeAttribute != null)\n                    taskTypeAttribute.Value = \"MouseEvents\";\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations/Migration2_37_0To2_43_0.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.Settings.Migrations;\n\ninternal class Migration2_37_0To2_43_0\n{\n    internal static bool Up(List<Property> properties)\n    {\n        //Change the poreset value for a specific preset.\n        var presets = properties.FirstOrDefault(f => f.Key == \"ExportPresets\");\n\n        if (presets != null)\n        {\n            foreach (var child in presets.Children)\n            {\n                if (!child.Type.Equals(\"GifskiGifPreset\"))\n                    continue;\n\n                if (!child.Attributes.Any(a => a.Key.Equals(\"DescriptionKey\") && a.Value.Equals(\"S.Preset.Gif.Gifski.High.Description\")))\n                    continue;\n\n                foreach (var attribute in child.Attributes)\n                {\n                    switch (attribute.Key)\n                    {\n                        case \"Quality\":\n                        {\n                            attribute.Value = \"80\";\n                            return true; //Only one item, so return earlier.\n                        }\n                    }\n                }\n            }\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/Migrations.cs",
    "content": "using ScreenToGif.Domain.Models;\nusing ScreenToGif.Settings.Migrations;\nusing ScreenToGif.Util.Settings.Migrations;\n\nnamespace ScreenToGif.Util.Settings;\n\npublic static class Migration\n{\n    public static bool Migrate(List<Property> properties, string version)\n    {\n        switch (version)\n        {\n            case \"0.0\": //2.27.3 or older to 2.28.\n                Migration0To2_28_0.Up(properties);\n                goto case \"2.28\";\n\n            case \"2.28\": //To 2.29\n            case \"2.28.1\":\n            case \"2.28.2\":\n                Migration2_28_0To2_29_0.Up(properties);\n                goto case \"2.29\";\n\n            case \"2.29\": //To 2.31\n            case \"2.29.1\":\n            case \"2.30\":\n            case \"2.30.1\":\n                Migration2_29_0To2_31_0.Up(properties);\n                goto case \"2.31\";\n\n            case \"2.31\": //To 2.32\n                Migration2_31_0To2_32_0.Up(properties);\n                goto case \"2.32\";\n\n            case \"2.32\": //To 2.35\n            case \"2.32.1\":\n            case \"2.33\":\n            case \"2.33.1\":\n            case \"2.34\":\n            case \"2.34.1\":\n                Migration2_32_0To2_35_0.Up(properties);\n                goto case \"2.35\";\n\n            case \"2.35\": //To 2.36\n            case \"2.35.1\":\n            case \"2.35.2\":\n            case \"2.35.3\":\n            case \"2.35.4\":\n                Migration2_35_0To2_36_0.Up(properties);\n                goto case \"2.36\";\n\n            case \"2.36\": //To 2.37\n                Migration2_36_0To2_37_0.Up(properties);\n                goto default;\n\n            case \"2.37\": //To 2.43\n            case \"2.37.1\":\n            case \"2.37.2\":\n            case \"2.38\":\n            case \"2.38.1\":\n            case \"2.39\":\n            case \"2.40\":\n            case \"2.40.1\":\n            case \"2.41\":\n            case \"2.41.1\":\n            case \"2.41.2\":\n            case \"2.41.3\":\n            case \"2.41.4\":\n            case \"2.41.5\":\n            case \"2.42\":\n            case \"2.42.1\":\n                Migration2_37_0To2_43_0.Up(properties);\n                goto default;\n\n            default:\n            {\n                properties.RemoveAll(p => p.Key == \"Version\");\n                return true;\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/Settings/UserSettings.cs",
    "content": "using System.Collections;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Ink;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Xml;\nusing System.Xml.Linq;\n\nusing KGySoft.CoreLibraries;\nusing KGySoft.Reflection;\n\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Exceptions;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Util.Extensions;\n\nusing Orientation = System.Windows.Controls.Orientation;\nusing XamlWriter = System.Windows.Markup.XamlWriter;\n\nnamespace ScreenToGif.Util.Settings;\n\npublic class UserSettings : INotifyPropertyChanged\n{\n    #region Variables\n\n    public event PropertyChangedEventHandler PropertyChanged;\n\n    public static readonly object Lock = new();\n\n    public static UserSettings All { get; } = new();\n\n    public Version Version => Assembly.GetEntryAssembly()?.GetName().Version;\n\n    public string VersionText => Version?.ToStringShort() ?? \"0.0\";\n\n    protected static ResourceDictionary _local;\n    protected static ResourceDictionary _appData;\n    private static readonly ResourceDictionary Default;\n\n    #endregion\n\n    static UserSettings()\n    {\n        if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))\n            return;\n\n        //Tries to load both settings files (from the local or AppData folder).\n        LoadSettings();\n\n        //Reads the default settings (it's loaded by default).\n        Default = Application.Current.Resources.MergedDictionaries.FirstOrDefault(d => d.Source.OriginalString.EndsWith(\"/Settings.xaml\"));\n    }\n\n\n    private static void LoadSettings()\n    {\n        //Paths.\n        var local = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\");\n        var appData = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\"), \"Settings.xaml\");\n\n        //Only creates an empty AppData settings file if there's no local settings defined.\n        if (!File.Exists(local) && !File.Exists(appData))\n        {\n            var directory = Path.GetDirectoryName(appData);\n\n            if (!string.IsNullOrWhiteSpace(directory) && !Directory.Exists(directory))\n                Directory.CreateDirectory(directory);\n\n            //Just creates a resource dictionary without any properties. \n            File.WriteAllText(appData, \"<ResourceDictionary xmlns=\\\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\\\"></ResourceDictionary>\");\n        }\n\n        //Loads AppData settings.\n        if (File.Exists(appData))\n        {\n            _appData = Load(appData) ?? new ResourceDictionary();\n            Application.Current.Resources.MergedDictionaries.Add(_appData);\n        }\n\n        //Loads Local settings.\n        if (File.Exists(local))\n        {\n            _local = Load(local);\n\n            if (_local != null)\n                Application.Current.Resources.MergedDictionaries.Add(_local);\n        }\n    }\n\n    private static ResourceDictionary Load(string path)\n    {\n        try\n        {\n            #region Load settings from disk\n\n            var doc = XDocument.Parse(File.ReadAllText(path));\n            var properties = doc.Root?.Elements().Select(GetProperty).ToList() ?? [];\n\n            #endregion\n\n            //Migrate\n            var version = properties.FirstOrDefault(f => f.Key == \"Version\")?.Value ?? \"0.0\";\n\n            Migration.Migrate(properties, version);\n\n            #region Parse settings\n\n            //Since the settings were migrated, add the current version.\n            var resource = new ResourceDictionary\n            {\n                { \"Version\", All.VersionText }\n            };\n\n            foreach (var property in properties)\n            {\n                var value = ParseProperty(property);\n\n                if (value != null && !resource.Contains(property.Key))\n                    resource.Add(property.Key, value);\n            }\n\n            #endregion\n\n            return resource;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"It was not possible to load and migrate the settings.\");\n            return null;\n        }\n    }\n\n    public static Property GetProperty(XElement node)\n    {\n        var attributes = node.Attributes()\n            .Where(a => a.Name.LocalName != \"Key\" && !(a.Name.Namespace == XNamespace.Xml && a.Name.LocalName == \"space\"))\n            .Select(s => new Property { Key = s.Name.LocalName, Value = s.Value })\n            .ToList();\n\n        var prop = new Property\n        {\n            NameSpace = node.Name.NamespaceName,\n            Type = node.Name.LocalName,\n            Key = node.Attributes().FirstOrDefault(a => a.Name.LocalName == \"Key\")?.Value,\n            Attributes = attributes,\n            Value = node.Value\n        };\n\n        if (node.Name.LocalName.StartsWith(\"Null\"))\n            return null;\n\n        if (!node.HasElements)\n            return prop;\n\n        //Flatten out attributes that are divided into another tag.\n        if (attributes.Count == 0 && (prop.Type ?? \"\").Contains(\".\"))\n        {\n            var inner = node.Elements().Select(GetProperty).FirstOrDefault();\n\n            if (inner != null)\n            {\n                prop.Key = prop.Type.Split('.').LastOrDefault();\n                prop.Type = inner.Type;\n                prop.NameSpace = inner.NameSpace;\n                prop.Children = inner.Children;\n                prop.Attributes = inner.Attributes;\n                return prop;\n            }\n        }\n\n        foreach (var element in node.Elements())\n        {\n            var innerElement = GetProperty(element);\n\n            if (innerElement != null)\n            {\n                // Adding collection elements to Children and properties to Attributes\n                if (innerElement.Key == null)\n                    prop.Children.Add(innerElement);\n                else\n                    prop.Attributes.Add(innerElement);\n            }\n        }\n\n        return prop;\n    }\n\n    private static object ParseProperty(Property property)\n    {\n        try\n        {\n            var type = ParseType(property);\n\n            // Primitive/simple type, enum or type with TypeConverter\n            if (property.Attributes.Count == 0)\n                return ParseValue(property.Value, type);\n\n            // Complex object with properties/items\n            var instance = Activator.CreateInstance(type);\n\n            // Restoring properties\n            foreach (var prop in property.Attributes)\n            {\n                var info = type.GetProperty(prop.Key) ?? throw new ArgumentException($\"Property not found: {type.Name}.{prop.Key}\", nameof(property));\n                PropertyAccessor.GetAccessor(info).Set(instance, prop.Type != null ? ParseProperty(prop) : ParseValue(prop.Value, info.PropertyType));\n            }\n\n            // Restoring collection items (in fact, list is always an ArrayList due to WPF serialization but in theory we support others, too)\n            if (instance is IList list)\n            {\n                foreach (var child in property.Children)\n                    list.Add(ParseProperty(child));\n            }\n\n            return instance;\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to parse property\", property);\n            return null;\n        }\n    }\n\n    private static Type ParseType(Property property)\n    {\n        if (property.NameSpace is \"clr-namespace:System;assembly=System.Private.CoreLib\" or \"clr-namespace:System;assembly=mscorlib\")\n            return Type.GetType(\"System.\" + property.Type, true);\n\n        // Using Reflector instead of Type.GetType because without an assembly Type.GetType works only for mscorlib/System.Private.CoreLib types\n        if (property.NameSpace.StartsWith(\"http\", StringComparison.Ordinal))\n            return Reflector.ResolveType(\"System.Windows.\" + property.Type, ResolveTypeOptions.None)\n                ?? Reflector.ResolveType(\"System.Windows.Media.\" + property.Type, ResolveTypeOptions.None)\n                ?? Reflector.ResolveType(\"System.Windows.Ink.\" + property.Type, ResolveTypeOptions.None)\n                ?? Reflector.ResolveType(\"System.Windows.Input.\" + property.Type, ResolveTypeOptions.None)\n                ?? Reflector.ResolveType(\"System.Windows.Controls.\" + property.Type, ResolveTypeOptions.ThrowError);\n\n        var namespaceIndex = property.NameSpace.IndexOf(\"clr-namespace:\", StringComparison.Ordinal);\n        var space = property.NameSpace.Substring(namespaceIndex + 14);\n        var assemblyIndex = space.IndexOf(\";assembly=\", StringComparison.Ordinal);\n\n        if (assemblyIndex == -1)\n            return Reflector.ResolveType(space + \".\" + property.Type, ResolveTypeOptions.ThrowError);\n\n        // Alert: ResolveTypeOptions.TryToLoadAssemblies is a security risk but this is the compatible behavior with Type.GetType(assemblyQualifiedName), which also would happily load any assembly.\n        var assembly = space.Substring(assemblyIndex + 10);\n        space = space.Substring(0, space.Length - assembly.Length - 10);\n        return Reflector.ResolveType(space + \".\" + property.Type + \", \" + assembly, ResolveTypeOptions.AllowPartialAssemblyMatch | ResolveTypeOptions.TryToLoadAssemblies | ResolveTypeOptions.ThrowError);\n    }\n\n    private static object ParseValue(string value, Type type)\n    {\n        if (value is null or \"{x:Null}\")\n            return null;\n\n        if (type == typeof(string))\n            return value.StartsWith(\"{}\", StringComparison.Ordinal) ? value[2..] : value;\n\n        // This works for primitive types, enums, and types with TypeConverters\n        if (value.TryParse(type, CultureInfo.InvariantCulture, out var result))\n            return result;\n\n        // [Try]Parse fails for enums that should be parsed by TypeConverters rather than from their ToString value (eg. ModifierKeys)\n        // We could just use Convert even instead of the Parse above but it is faster to use this only as a fallback\n        return value.Convert(type, CultureInfo.InvariantCulture);\n    }\n\n    public static void Save(bool canForce = false, bool saveToAppData = false)\n    {\n        //Only writes if non-default values were created. Should not write the default dictionary.\n        if (_local == null && _appData == null)\n            return;\n\n        try\n        {\n            //Filename (Local or AppData).\n            var folder = !saveToAppData && _local != null ? AppDomain.CurrentDomain.BaseDirectory : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\");\n            var filename = Path.Combine(folder, \"Settings.xaml\");\n\n            //Create folder.\n            if (!string.IsNullOrWhiteSpace(folder) && !Directory.Exists(folder))\n                Directory.CreateDirectory(folder);\n\n            var backup = File.Exists(filename) ? File.ReadAllText(filename) : null;\n\n            var settings = new XmlWriterSettings\n            {\n                Indent = true,\n                IndentChars = \"\\t\",\n                OmitXmlDeclaration = true,\n                CheckCharacters = true,\n                CloseOutput = true,\n                ConformanceLevel = ConformanceLevel.Fragment,\n                Encoding = Encoding.UTF8\n            };\n\n            var dic = RemoveInvalidEntries(_local ?? _appData);\n\n            if (dic == null)\n                return;\n\n            //Serialize and save to disk.\n            using (var fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None))\n            using (var writer = XmlWriter.Create(fileStream, settings))\n                XamlWriter.Save(dic, writer);\n\n            CheckIfSavedCorrectly(filename, backup, true);\n        }\n        catch (UnauthorizedAccessException u)\n        {\n            //Try saving to AppData first, then try harder.\n            if (!saveToAppData)\n            {\n                Save(canForce, true);\n            }\n            else if (canForce)\n            {\n                LogWriter.Log(u, \"Unauthorized to save the settings.\");\n                throw new SettingsPersistenceException(_local ?? _appData, _local != null);\n            }\n        }\n        catch (Exception e) when (e is not SettingsPersistenceException)\n        {\n            LogWriter.Log(e, \"Impossible to save the settings.\");\n        }\n    }\n\n    public void SaveFromAnotherInstance(string serialized, bool isLocal)\n    {\n        try\n        {\n            //Filename (Local or AppData).\n            var folder = _local != null ? AppDomain.CurrentDomain.BaseDirectory : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\");\n            var filename = Path.Combine(folder, \"Settings.xaml\");\n            var backup = filename + \".bak\";\n\n            //Create folder.\n            if (!string.IsNullOrWhiteSpace(folder) && !Directory.Exists(folder))\n                Directory.CreateDirectory(folder);\n\n            //Create the backup, in case the save operation fails.\n            if (File.Exists(filename))\n                File.Copy(filename, backup, true);\n\n            //Serialize and save to disk.\n            using (var fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None))\n            using (var writer = new StreamWriter(fileStream, Encoding.UTF8))\n                writer.Write(serialized);\n\n            CheckIfSavedCorrectly(filename, backup);\n\n            File.Delete(backup);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to retry saving the settings.\");\n        }\n    }\n\n    private static void CheckIfSavedCorrectly(string filename, string backup, bool throwException = false)\n    {\n        try\n        {\n            var content = File.ReadAllText(filename);\n\n            if (content.All(x => x == '\\0'))\n            {\n                LogWriter.Log(\"Settings disk persistence failed.\", content);\n                File.WriteAllText(filename, backup);\n\n                if (throwException)\n                    throw new UnauthorizedAccessException(\"The file had garbage inside it.\");\n            }\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to check if the settings file was saved correctly or impossible to restore backup.\");\n        }\n    }\n\n    private static ResourceDictionary RemoveInvalidEntries(ResourceDictionary dictionary)\n    {\n        if (dictionary == null)\n            return null;\n\n        var toRemove = dictionary.Cast<DictionaryEntry>().Where(entry => entry.Value == null).ToList();\n\n        foreach (var entry in toRemove)\n        {\n            LogWriter.Log(\"Setting removed: \" + entry.Key);\n            dictionary.Remove(entry.Key);\n        }\n\n        for (var i = 0; i < dictionary.Count; i++)\n        {\n            if (dictionary[i] is DictionaryEntry { Value: ArrayList list } entry)\n                entry.Value = list.OfType<object>().Where(w => w != null);\n        }\n\n        return dictionary;\n    }\n\n\n    public static void CreateLocalSettings()\n    {\n        var local = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\");\n\n        if (!File.Exists(local))\n            File.WriteAllText(local, \"<ResourceDictionary xmlns=\\\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\\\"></ResourceDictionary>\");\n\n        _local = new ResourceDictionary();\n    }\n\n    public static void RemoveLocalSettings()\n    {\n        var local = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"Settings.xaml\");\n\n        if (File.Exists(local))\n            File.Delete(local);\n\n        _local = null; //TODO: Should I remove from the merged dictionaries?\n    }\n\n    public static void RemoveAppDataSettings()\n    {\n        var appData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), \"ScreenToGif\", \"Settings.xaml\");\n\n        if (File.Exists(appData))\n            File.Delete(appData);\n\n        _appData = null; //TODO: Should I remove from the merged dictionaries?\n    }\n\n\n    private static object GetValue([CallerMemberName] string key = \"\", object defaultValue = null)\n    {\n        if (Default == null)\n            return defaultValue;\n\n        if (Application.Current == null || Application.Current.Resources.Count == 0)\n            return Default[key];\n\n        if (Application.Current.Resources.Contains(key))\n            return Application.Current.Resources[key];\n\n        return Default[key] ?? defaultValue;\n    }\n\n    private static void SetValue(object value, [CallerMemberName] string key = \"\")\n    {\n        lock (Lock)\n        {\n            //Updates or inserts the value to the Local resource.\n            if (_local != null)\n            {\n                if (_local.Contains(key))\n                {\n                    _local[key] = value;\n\n                    //If the value is being set to null, remove it.\n                    if (value == null && (!Default.Contains(key) || Default[key] == null))\n                        _local.Remove(key);\n                }\n                else\n                {\n                    if (value != null)\n                        _local.Add(key, value);\n                }\n            }\n\n            //Updates or inserts the value to the AppData resource.\n            if (_appData != null)\n            {\n                if (_appData.Contains(key))\n                {\n                    _appData[key] = value;\n\n                    //If the value is being set to null, remove it.\n                    if (value == null && (!Default.Contains(key) || Default[key] == null))\n                        _appData.Remove(key);\n                }\n                else\n                {\n                    if (value != null)\n                        _appData.Add(key, value);\n                }\n            }\n\n            //Updates/Adds the current value of the resource.\n            if (Application.Current.Resources.Contains(key))\n                Application.Current.Resources[key] = value;\n            else\n                Application.Current.Resources.Add(key, value);\n\n            All.OnPropertyChanged(key);\n        }\n    }\n\n    private void OnPropertyChanged(string propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n\n    #region Properties\n\n    #region Startup\n\n    public double StartupTop\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double StartupLeft\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double StartupHeight\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double StartupWidth\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public WindowState StartupWindowState\n    {\n        get => (WindowState)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Recorder\n\n    public Rect SelectedRegion\n    {\n        get => (Rect)GetValue();\n        set => SetValue(value);\n    }\n\n    public double SelectedRegionScale\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public int RecorderModeIndex\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int LatestFps\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public double RecorderLeft\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double RecorderTop\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public int RecorderWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int RecorderHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Board\n\n    public int BoardWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int BoardHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color BoardColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public int BoardStylusHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int BoardStylusWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public StylusTip BoardStylusTip\n    {\n        get => (StylusTip)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool BoardFitToCurve\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool BoardIsHighlighter\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int BoardEraserHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int BoardEraserWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public StylusTip BoardEraserStylusTip\n    {\n        get => (StylusTip)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Insert\n\n    public Color InsertFillColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public int LatestFpsImport\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Video source\n\n    public int VideoImporter\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Feedback\n\n    public string LatestFeedbackEmail\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n\n    #region Options • Application\n\n    public bool SingleInstance\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool StartMinimized\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The homepage of the app:\n    /// 0 - Startup window.\n    /// 1 - Recorder window.\n    /// 2 - Webcam window.\n    /// 3 - Board window.\n    /// 4 - Editor window.\n    /// </summary>\n    public int StartUp\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool NotifyWhileClosingApp\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool DisableHardwareAcceleration\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool CheckForTranslationUpdates\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool CheckForUpdates\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool DownloadWithMeteredNetwork\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool PortableUpdate\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ForceUpdateAsAdmin\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool InstallUpdates\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool PromptToInstall\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ShowNotificationIcon\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeepOpen\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// 0: Do nothing.\n    /// 1: Open a new window.\n    /// 2: Toggle Minimize/Maximize all windows.\n    /// 3: Minimize all windows.\n    /// 4: Maximize all windows.\n    /// </summary>\n    public int LeftClickAction\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// 0: None.\n    /// 1: Startup\n    /// 2: Screen recorder\n    /// 3: Webcam recorder\n    /// 4: Board recorder\n    /// 5: Editor\n    /// </summary>\n    public int LeftOpenWindow\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int DoubleLeftClickAction\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int DoubleLeftOpenWindow\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int MiddleClickAction\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int MiddleOpenWindow\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    //Workarounds.\n\n    public bool WorkaroundQuota\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Recorder\n\n    public bool NewRecorder\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool RecorderThinMode\n    {\n        get => (bool)GetValue(defaultValue: false);\n        set => SetValue(value);\n    }\n\n    public bool Magnifier\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool AnimateRecorderBorder\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool EnableSelectionPanning\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool RecorderCompactMode\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool RecorderDisplayDiscard\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool SelectionImprovement\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool FallThroughOtherScreens\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public CaptureFrequencies CaptureFrequency\n    {\n        get => (CaptureFrequencies)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The placyback speed of the capture frame, in the \"manual\" mode.\n    /// </summary>\n    public int PlaybackDelayManual\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The synthetic delay after trigger, in the \"manual\" capture mode.\n    /// </summary>\n    public int TriggerDelayManual\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The placyback speed of the capture frame, in the \"manual\" mode.\n    /// </summary>\n    public int PlaybackDelayInteraction\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The synthetic delay after trigger, in the \"interaction\" capture mode.\n    /// </summary>\n    public int TriggerDelayInteraction\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The placyback speed of the capture frame, in the \"per minute\" mode.\n    /// </summary>\n    public int PlaybackDelayMinute\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    /// <summary>\n    /// The placyback speed of the capture frame, in the \"per hour\" mode.\n    /// </summary>\n    public int PlaybackDelayHour\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool FixedFrameRate\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool OnlyCaptureChanges\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool UseDesktopDuplication\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool UseMemoryCache\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public CompressionLevel CaptureCompression\n    {\n        get => (CompressionLevel)GetValue();\n        set => SetValue(value);\n    }\n\n    public int MemoryCacheSize\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool PreventBlackFrames\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public AppThemes MainTheme\n    {\n        get => (AppThemes)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color RecorderBackground\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color RecorderForeground\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color BoardGridBackground\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color BoardGridColor1\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color BoardGridColor2\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool GridColorsFollowSystem\n    {\n        get => (bool)GetValue(defaultValue: false);\n        set => SetValue(value);\n    }\n\n    public Rect BoardGridSize\n    {\n        get => (Rect)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ShowCursor\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool UsePreStart\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int PreStartValue\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ForceGarbageCollection\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool RemoteImprovement\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    //Guidelines.\n    public bool DisplayThirdsGuideline\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ThirdsGuidelineThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color ThirdsGuidelineColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public DoubleCollection ThirdsGuidelineStrokeDashArray\n    {\n        get => (DoubleCollection)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool DisplayCrosshairGuideline\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public double CrosshairGuidelineThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color CrosshairGuidelineColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public DoubleCollection CrosshairGuidelineStrokeDashArray\n    {\n        get => (DoubleCollection)GetValue();\n        set => SetValue(value);\n    }\n\n    //Other.\n    public bool RecorderRememberSize\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool RecorderRememberPosition\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool CursorFollowing\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FollowBuffer\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FollowBufferInvisible\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool NotifyRecordingDiscard\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Editor\n\n    public Color GridColor1\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color GridColor2\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Rect GridSize\n    {\n        get => (Rect)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool DisplayEncoder\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool EditorExtendChrome\n    {\n        get => (bool)GetValue(defaultValue: false);\n        set => SetValue(value);\n    }\n\n    public bool AutomaticallySizeOnContent\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool AutomaticallyFitImage\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool NotifyFrameDeletion\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool NotifyProjectDiscard\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool NotifyWhileClosingEditor\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool TripleClickSelection\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool DrawOutlineOutside\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool DropFramesDuringPreviewIfBehind\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool SetHistoryLimit\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int HistoryLimit\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool SyncPathFolder\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool SyncPathFilename\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool SyncPathForSameType\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Automated Tasks\n\n    public ArrayList AutomatedTasksList\n    {\n        get => (ArrayList)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Shortcuts\n\n    public Key RecorderShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys RecorderModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key WebcamRecorderShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys WebcamRecorderModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key BoardRecorderShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys BoardRecorderModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key EditorShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys EditorModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key OptionsShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys OptionsModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key ExitShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys ExitModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n\n    public Key StartPauseShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys StartPauseModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key StopShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys StopModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key DiscardShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys DiscardModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public Key FollowShortcut\n    {\n        get => (Key)GetValue(defaultValue: Key.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys FollowModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    public ModifierKeys DisableFollowModifiers\n    {\n        get => (ModifierKeys)GetValue(defaultValue: ModifierKeys.None);\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Language\n\n    public string LanguageCode\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Storage\n\n    public string TemporaryFolder\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public string LogsFolder\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public string TemporaryFolderResolved\n    {\n        get\n        {\n            if (string.IsNullOrWhiteSpace(TemporaryFolder))\n                TemporaryFolder = \"%temp%\";\n\n            return Environment.ExpandEnvironmentVariables(TemporaryFolder);\n        }\n    }\n\n    public bool DeleteCacheWhenClosing\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool AskDeleteCacheWhenClosing\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool AutomaticCleanUp\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int AutomaticCleanUpDays\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Cloud\n\n    //Proxy.\n    public ProxyTypes ProxyMode\n    {\n        get => (ProxyTypes)GetValue(defaultValue: ProxyTypes.Disabled);\n        set => SetValue(value);\n    }\n\n    public string ProxyHost\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ProxyPort\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public string ProxyUsername\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public string ProxyPassword\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    //Presets.\n    public ArrayList UploadPresets\n    {\n        get => (ArrayList)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Options • Extras\n\n    public string FfmpegLocation\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public string FfmpegVersionText\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool HasOlderFfmpegVersion\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public SupportedFFmpegVersions FfmpegVersion\n    {\n        get => (SupportedFFmpegVersions)GetValue();\n        set => SetValue(value);\n    }\n\n    public string GifskiLocation\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n\n    #region Editor\n\n    public double EditorTop\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double EditorLeft\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double EditorHeight\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double EditorWidth\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public WindowState EditorWindowState\n    {\n        get => (WindowState)GetValue();\n        set => SetValue(value);\n    }\n\n    public PasteBehaviors PasteBehavior\n    {\n        get => (PasteBehaviors)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool LoopedPlayback\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • New Animation\n\n    public int NewAnimationWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int NewAnimationHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color NewAnimationColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Save As\n\n    public bool IsSaveTypeExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public ExportFormats SaveType\n    {\n        get => (ExportFormats)GetValue();\n        set => SetValue(value);\n    }\n\n    public ArrayList ExportPresets\n    {\n        get => (ArrayList)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Reduce Frame Count \n\n    public int ReduceFactor\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ReduceCount\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public ReduceDelayModes ReduceDelay\n    {\n        get => (ReduceDelayModes)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ReduceApplyToAll\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Remove Duplicates\n\n    public double DuplicatesSimilarity\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public DuplicatesRemovalModes DuplicatesRemoval\n    {\n        get => (DuplicatesRemovalModes)GetValue();\n        set => SetValue(value);\n    }\n\n    public DuplicatesDelayModes DuplicatesDelay\n    {\n        get => (DuplicatesDelayModes)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Smooth Loop\n\n    public double SmoothLoopSimilarity\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public int SmoothLoopStartThreshold\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public SmoothLoopFromModes SmoothLoopFrom\n    {\n        get => (SmoothLoopFromModes)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Delay\n\n    public int OverrideDelay\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int IncrementDecrementDelay\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ScaleDelay\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Resize\n\n    public SizeUnits SizeUnit\n    {\n        get => (SizeUnits)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeepAspectRatio\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public BitmapScalingMode ScalingMode\n    {\n        get => (BitmapScalingMode)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Caption\n\n    public string CaptionText\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsCaptionFontGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontFamily CaptionFontFamily\n    {\n        get => (FontFamily)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontStyle CaptionFontStyle\n    {\n        get => (FontStyle)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontWeight CaptionFontWeight\n    {\n        get => (FontWeight)GetValue();\n        set => SetValue(value);\n    }\n\n    public double CaptionFontSize\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color CaptionFontColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsCaptionOutlineGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public double CaptionOutlineThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color CaptionOutlineColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsCaptionLayoutGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public VerticalAlignment CaptionVerticalAligment\n    {\n        get => (VerticalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public HorizontalAlignment CaptionHorizontalAligment\n    {\n        get => (HorizontalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public double CaptionMargin\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Key Strokes\n\n    public bool IsKeyStrokesKeysExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeyStrokesIgnoreNonModifiers\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeyStrokesIgnoreInjected\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeyStrokesTranslate\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeyStrokesEarlier\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesEarlierBy\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public string KeyStrokesSeparator\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool KeyStrokesExtended\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesDelay\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsKeyStrokesFontExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontFamily KeyStrokesFontFamily\n    {\n        get => (FontFamily)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontStyle KeyStrokesFontStyle\n    {\n        get => (FontStyle)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontWeight KeyStrokesFontWeight\n    {\n        get => (FontWeight)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesFontSize\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color KeyStrokesFontColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsKeyStrokesOutlineExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesOutlineThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color KeyStrokesOutlineColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color KeyStrokesBackgroundColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsKeyStrokesLayoutExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public VerticalAlignment KeyStrokesVerticalAligment\n    {\n        get => (VerticalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public HorizontalAlignment KeyStrokesHorizontalAligment\n    {\n        get => (HorizontalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesMargin\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesPadding\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double KeyStrokesMinHeight\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Free Text\n\n    public string FreeTextText\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsFreeTextFontGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontFamily FreeTextFontFamily\n    {\n        get => (FontFamily)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontStyle FreeTextFontStyle\n    {\n        get => (FontStyle)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontWeight FreeTextFontWeight\n    {\n        get => (FontWeight)GetValue();\n        set => SetValue(value);\n    }\n\n    public double FreeTextFontSize\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color FreeTextFontColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color FreeTextBackgroundColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public TextAlignment FreeTextTextAlignment\n    {\n        get => (TextAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public string FreeTextTextDecoration\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsFreeTextShadowGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n    public Color FreeTextShadowColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public double FreeTextShadowDirection\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double FreeTextShadowBlurRadius\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double FreeTextShadowOpacity\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double FreeTextShadowDepth\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Title Frame\n\n    public string TitleFrameText\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsTitleFrameFontGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int TitleFrameDelay\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontFamily TitleFrameFontFamily\n    {\n        get => (FontFamily)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontStyle TitleFrameFontStyle\n    {\n        get => (FontStyle)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontWeight TitleFrameFontWeight\n    {\n        get => (FontWeight)GetValue();\n        set => SetValue(value);\n    }\n\n    public double TitleFrameFontSize\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color TitleFrameFontColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public VerticalAlignment TitleFrameVerticalAligment\n    {\n        get => (VerticalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public HorizontalAlignment TitleFrameHorizontalAligment\n    {\n        get => (HorizontalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color TitleFrameBackgroundColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public double TitleFrameMargin\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Free Drawing\n\n    public int FreeDrawingPenWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FreeDrawingPenHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color FreeDrawingColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public StylusTip FreeDrawingStylusTip\n    {\n        get => (StylusTip)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool FreeDrawingIsHighlighter\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool FreeDrawingFitToCurve\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FreeDrawingEraserWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FreeDrawingEraserHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public StylusTip FreeDrawingEraserStylusTip\n    {\n        get => (StylusTip)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Shapes\n\n    public double ShapesThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color ShapesOutlineColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ShapesRadius\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ShapesDashes\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color ShapesFillColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Progress\n\n    public ProgressTypes ProgressType\n    {\n        get => (ProgressTypes)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool IsProgressFontGroupExpanded\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontFamily ProgressFontFamily\n    {\n        get => (FontFamily)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontStyle ProgressFontStyle\n    {\n        get => (FontStyle)GetValue();\n        set => SetValue(value);\n    }\n\n    public FontWeight ProgressFontWeight\n    {\n        get => (FontWeight)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ProgressFontSize\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color ProgressFontColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color ProgressColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ProgressPrecision\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ProgressStartNumber\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ProgressShowTotal\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public string ProgressFormat\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public string ProgressDateFormat\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ProgressThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public VerticalAlignment ProgressVerticalAligment\n    {\n        get => (VerticalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public HorizontalAlignment ProgressHorizontalAligment\n    {\n        get => (HorizontalAlignment)GetValue();\n        set => SetValue(value);\n    }\n\n    public Orientation ProgressOrientation\n    {\n        get => (Orientation)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Mouse Events\n\n    public Color MouseHighlightColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color LeftMouseButtonClicksColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color RightMouseButtonClicksColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color MiddleMouseButtonClicksColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color FirstExtraMouseButtonClicksColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color SecondExtraMouseButtonClicksColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public double MouseEventsWidth\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double MouseEventsHeight\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Border\n\n    public Color BorderColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public double BorderLeftThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double BorderTopThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double BorderRightThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double BorderBottomThickness\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    //public Color BorderBackgroundColor\n    //{\n    //    get => (Color)GetValue();\n    //    set => SetValue(value);\n    //}\n\n    //public double BorderLeftRadius\n    //{\n    //    get => (double)GetValue();\n    //    set => SetValue(value);\n    //}\n\n    //public double BorderTopRadius\n    //{\n    //    get => (double)GetValue();\n    //    set => SetValue(value);\n    //}\n\n    //public double BorderRightRadius\n    //{\n    //    get => (double)GetValue();\n    //    set => SetValue(value);\n    //}\n\n    //public double BorderBottomRadius\n    //{\n    //    get => (double)GetValue();\n    //    set => SetValue(value);\n    //}\n\n    #endregion\n\n    #region Editor • Shadow\n\n    public Color ShadowColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color ShadowBackgroundColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ShadowDirection\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ShadowBlurRadius\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ShadowOpacity\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ShadowDepth\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Obfuscate\n\n    public ObfuscationModes ObfuscationMode\n    {\n        get => (ObfuscationModes)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool ObfuscationInvertedSelection\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int PixelSize\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int BlurLevel\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public double DarkenLevel\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double LightenLevel\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool UseMedian\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int ObfuscationSmoothnessRadius\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public double ObfuscationSmoothnessOpacity\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Watermark\n\n    public string WatermarkFilePath\n    {\n        get => (string)GetValue();\n        set => SetValue(value);\n    }\n\n    public double WatermarkOpacity\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double WatermarkSize\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double WatermarkTop\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    public double WatermarkLeft\n    {\n        get => (double)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Cinemagraph\n\n    public Color CinemagraphColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public int CinemagraphEraserWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int CinemagraphEraserHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public StylusTip CinemagraphEraserStylusTip\n    {\n        get => (StylusTip)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool CinemagraphIsHighlighter\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public bool CinemagraphFitToCurve\n    {\n        get => (bool)GetValue();\n        set => SetValue(value);\n    }\n\n    public int CinemagraphPenWidth\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int CinemagraphPenHeight\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public StylusTip CinemagraphStylusTip\n    {\n        get => (StylusTip)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #region Editor • Transitions\n\n    public FadeModes FadeToType\n    {\n        get => (FadeModes)GetValue();\n        set => SetValue(value);\n    }\n\n    public Color FadeToColor\n    {\n        get => (Color)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FadeTransitionLength\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int FadeTransitionDelay\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int SlideTransitionLength\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    public int SlideTransitionDelay\n    {\n        get => (int)GetValue();\n        set => SetValue(value);\n    }\n\n    #endregion\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif.Util/SimpleKeyGesture.cs",
    "content": "using ScreenToGif.Domain.Interfaces;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Runtime.Serialization;\nusing System.Windows.Input;\nusing System.Windows.Markup;\nusing KeyEventArgs = System.Windows.Input.KeyEventArgs;\n\nnamespace ScreenToGif.Util;\n\n///<summary>\n///Defines a keyboard combination that can be used to invoke a command.\n///</summary>\n[DataContract]\n[ValueSerializer(typeof(KeyGestureValueSerializer))]\n[TypeConverter(typeof(KeyGestureConverter))]\npublic class SimpleKeyGesture : IKeyGesture\n{\n    [IgnoreDataMember]\n    private static readonly TypeConverter KeyGestureConverter = new KeyGestureConverter();\n\n    /// <summary>Gets the modifier keys associated with this <see cref=\"T:System.Windows.Input.KeyGesture\" />.</summary>\n    /// <returns>The modifier keys associated with the gesture. The default value is <see cref=\"F:System.Windows.Input.ModifierKeys.None\" />.</returns>\n    [DataMember(EmitDefaultValue = false, Name = \"Mod\")]\n    public ModifierKeys Modifiers { get; set; }\n\n    /// <summary>Gets the key associated with this <see cref=\"T:System.Windows.Input.KeyGesture\" />.</summary>\n    /// <returns>The key associated with the gesture.  The default value is <see cref=\"F:System.Windows.Input.Key.None\" />.</returns>\n    [DataMember]\n    public Key Key { get; set; }\n\n    [DataMember]\n    public bool IsUppercase { get; set; }\n\n    [DataMember]\n    public bool IsInjected { get; set; }\n\n    /// <summary>Gets a string representation of this <see cref=\"T:System.Windows.Input.KeyGesture\" />.</summary>\n    /// <returns>The display string for this <see cref=\"T:System.Windows.Input.KeyGesture\" />. The default value is <see cref=\"F:System.String.Empty\" />.</returns>\n    [IgnoreDataMember]\n    public string DisplayString { get; }\n\n\n    /// <summary>\n    /// The parameterless constructor.\n    /// </summary>\n    public SimpleKeyGesture()\n    {}\n\n    /// <summary>Initializes a new instance of the <see cref=\"T:System.Windows.Input.KeyGesture\" /> class with the specified <see cref=\"T:System.Windows.Input.Key\" />. </summary>\n    /// <param name=\"key\">The key associated with this gesture.</param>\n    /// <exception cref=\"T:System.ComponentModel.InvalidEnumArgumentException\">\n    /// <paramref name=\"key\" /> is not a valid <see cref=\"T:System.Windows.Input.Key\" />.</exception>\n    /// <exception cref=\"T:System.NotSupportedException\">\n    /// <paramref name=\"key\" /> is not a valid <see cref=\"T:System.Windows.Input.KeyGesture\" />.</exception>\n    public SimpleKeyGesture(Key key) : this(key, ModifierKeys.None)\n    { }\n\n    /// <summary>Initializes a new instance of the <see cref=\"T:System.Windows.Input.KeyGesture\" /> class with the specified <see cref=\"T:System.Windows.Input.Key\" /> and <see cref=\"T:System.Windows.Input.ModifierKeys\" />.</summary>\n    /// <param name=\"key\">The key associated with the gesture.</param>\n    /// <param name=\"modifiers\">The modifier keys associated with the gesture.</param>\n    /// <exception cref=\"T:System.ComponentModel.InvalidEnumArgumentException\">\n    /// <paramref name=\"modifiers\" /> is not a valid <see cref=\"T:System.Windows.Input.ModifierKeys\" />-or-<paramref name=\"key\" /> is not a valid <see cref=\"T:System.Windows.Input.Key\" />.</exception>\n    /// <exception cref=\"T:System.NotSupportedException\">\n    /// <paramref name=\"key\" /> and <paramref name=\"modifiers\" /> do not form a valid <see cref=\"T:System.Windows.Input.KeyGesture\" />.</exception>\n    public SimpleKeyGesture(Key key, ModifierKeys modifiers) : this(key, modifiers, string.Empty)\n    { }\n\n    /// <summary>Initializes a new instance of the <see cref=\"T:System.Windows.Input.KeyGesture\" /> class with the specified <see cref=\"T:System.Windows.Input.Key\" /> and <see cref=\"T:System.Windows.Input.ModifierKeys\" />.</summary>\n    /// <param name=\"key\">The key associated with the gesture.</param>\n    /// <param name=\"modifiers\">The modifier keys associated with the gesture.</param>\n    /// <param name=\"isUppercase\">True if the letter is uppercase.</param>\n    /// <param name=\"isInjected\">True if keystroke was simulated by other software.</param>\n    /// <exception cref=\"T:System.ComponentModel.InvalidEnumArgumentException\">\n    /// <paramref name=\"modifiers\" /> is not a valid <see cref=\"T:System.Windows.Input.ModifierKeys\" />-or-<paramref name=\"key\" /> is not a valid <see cref=\"T:System.Windows.Input.Key\" />.</exception>\n    /// <exception cref=\"T:System.NotSupportedException\">\n    /// <paramref name=\"key\" /> and <paramref name=\"modifiers\" /> do not form a valid <see cref=\"T:System.Windows.Input.KeyGesture\" />.</exception>\n    public SimpleKeyGesture(Key key, ModifierKeys modifiers, bool isUppercase = false, bool isInjected = false) : this(key, modifiers, string.Empty, isUppercase, isInjected)\n    {\n        //Remove the modifier key, if it's the same as the detected pressend key.\n        if (key == Key.LeftCtrl || key == Key.LeftShift || key == Key.LeftAlt || key == Key.LWin || key == Key.RightCtrl || key == Key.RightShift || key == Key.RightAlt || key == Key.RWin)\n            Modifiers = ModifierKeys.None;\n    }\n\n    /// <summary>Initializes a new instance of the <see cref=\"T:System.Windows.Input.KeyGesture\" /> class with the specified <see cref=\"T:System.Windows.Input.Key\" />, <see cref=\"T:System.Windows.Input.ModifierKeys\" />, and display string.</summary>\n    /// <param name=\"key\">The key associated with the gesture.</param>\n    /// <param name=\"modifiers\">The modifier keys associated with the gesture.</param>\n    /// <param name=\"displayString\">A string representation of the <see cref=\"T:System.Windows.Input.KeyGesture\" />.</param>\n    /// <param name=\"isUppercase\">True if the letter is uppercase.</param>\n    /// <param name=\"isInjected\">True if keystroke was simulated by other software.</param>\n    /// <exception cref=\"T:System.ComponentModel.InvalidEnumArgumentException\">\n    /// <paramref name=\"modifiers\" /> is not a valid <see cref=\"T:System.Windows.Input.ModifierKeys\" />-or-<paramref name=\"key\" /> is not a valid <see cref=\"T:System.Windows.Input.Key\" />.</exception>\n    /// <exception cref=\"T:System.ArgumentNullException\">\n    /// <paramref name=\"displayString\" /> is null.</exception>\n    /// <exception cref=\"T:System.NotSupportedException\">\n    /// <paramref name=\"key\" /> and <paramref name=\"modifiers\" /> do not form a valid <see cref=\"T:System.Windows.Input.KeyGesture\" />.</exception>\n    public SimpleKeyGesture(Key key, ModifierKeys modifiers, string displayString, bool isUppercase = false, bool isInjected = false)\n    {\n        if (!IsDefinedKey(key))\n            throw new InvalidEnumArgumentException(nameof(key), (int)key, typeof(Key));\n\n        Modifiers = modifiers;\n        Key = key;\n        IsUppercase = isUppercase;\n        IsInjected = isInjected;\n        DisplayString = displayString ?? throw new ArgumentNullException(nameof(displayString));\n    }\n\n\n    /// <summary>Returns a string that can be used to display the <see cref=\"T:System.Windows.Input.KeyGesture\" />.</summary>\n    /// <returns>The string to display </returns>\n    /// <param name=\"culture\">The culture specific information.</param>\n    public string GetDisplayStringForCulture(CultureInfo culture)\n    {\n        if (!string.IsNullOrEmpty(DisplayString))\n            return DisplayString;\n\n        return (string)KeyGestureConverter.ConvertTo(null, culture, this, typeof(string));\n    }\n\n    /// <summary>Determines whether this <see cref=\"T:System.Windows.Input.KeyGesture\" /> matches the input associated with the specified <see cref=\"T:System.Windows.Input.InputEventArgs\" /> object.</summary>\n    /// <returns>true if the event data matches this <see cref=\"T:System.Windows.Input.KeyGesture\" />; otherwise, false.</returns>\n    /// <param name=\"targetElement\">The target.</param>\n    /// <param name=\"inputEventArgs\">The input event data to compare this gesture to.</param>\n    public bool Matches(object targetElement, InputEventArgs inputEventArgs)\n    {\n        if (inputEventArgs is KeyEventArgs keyEventArgs && IsDefinedKey(keyEventArgs.Key) && (Key == keyEventArgs.Key || Key == keyEventArgs.SystemKey || Key == keyEventArgs.DeadCharProcessedKey || Key == keyEventArgs.ImeProcessedKey))\n            return Modifiers == Keyboard.Modifiers;\n\n        return false;\n    }\n\n    internal static bool IsDefinedKey(Key key)\n    {\n        if (key >= Key.None)\n            return key <= Key.OemClear;\n\n        return false;\n    }\n\n    internal static bool IsValid(Key key, ModifierKeys modifiers)\n    {\n        if ((key < Key.F1 || key > Key.F24) && (key < Key.NumPad0 || key > Key.Divide))\n        {\n            if ((modifiers & (ModifierKeys.Alt | ModifierKeys.Control | ModifierKeys.Windows)) != ModifierKeys.None)\n            {\n                switch (key)\n                {\n                    case Key.LWin:\n                    case Key.RWin:\n                    case Key.LeftCtrl:\n                    case Key.RightCtrl:\n                    case Key.LeftAlt:\n                    case Key.RightAlt:\n                        return false;\n                    default:\n                        return true;\n                }\n            }\n            else if (key >= Key.D0 && key <= Key.D9 || key >= Key.A && key <= Key.Z)\n                return false;\n        }\n        return true;\n    }\n\n    internal static void AddGesturesFromResourceStrings(string keyGestures, string displayStrings, InputGestureCollection gestures)\n    {\n        while (!string.IsNullOrEmpty(keyGestures))\n        {\n            var length1 = keyGestures.IndexOf(\";\", StringComparison.Ordinal);\n            string keyGestureToken;\n\n            if (length1 >= 0)\n            {\n                keyGestureToken = keyGestures.Substring(0, length1);\n                keyGestures = keyGestures.Substring(length1 + 1);\n            }\n            else\n            {\n                keyGestureToken = keyGestures;\n                keyGestures = string.Empty;\n            }\n\n            var length2 = displayStrings.IndexOf(\";\", StringComparison.Ordinal);\n            string keyDisplayString;\n\n            if (length2 >= 0)\n            {\n                keyDisplayString = displayStrings.Substring(0, length2);\n                displayStrings = displayStrings.Substring(length2 + 1);\n            }\n            else\n            {\n                keyDisplayString = displayStrings;\n                displayStrings = string.Empty;\n            }\n\n            var fromResourceStrings = CreateFromResourceStrings(keyGestureToken, keyDisplayString);\n            if (fromResourceStrings != null)\n                gestures.Add(fromResourceStrings);\n        }\n    }\n\n    internal static KeyGesture CreateFromResourceStrings(string keyGestureToken, string keyDisplayString)\n    {\n        if (!string.IsNullOrEmpty(keyDisplayString))\n            keyGestureToken = keyGestureToken + \",\" + keyDisplayString;\n\n        return KeyGestureConverter.ConvertFromInvariantString(keyGestureToken) as KeyGesture;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/StreamHelpers.cs",
    "content": "using System.IO;\nusing System.Text;\n\nnamespace ScreenToGif.Util;\n\npublic static class StreamHelpers\n{\n    #region Peek\n\n    public static byte[] PeekBytes(this Stream ms, long position, int count)\n    {\n        var prevPosition = ms.Position;\n\n        ms.Position = position;\n        var buffer = ReadBytes(ms, count);\n        ms.Position = prevPosition;\n\n        return buffer;\n    }\n\n    public static char PeekChar(this Stream ms)\n    {\n        return PeekChar(ms, (int)ms.Position);\n    }\n\n    public static char PeekChar(this Stream ms, int position)\n    {\n        return BitConverter.ToChar(PeekBytes(ms, position, 2), 0);\n    }\n\n    public static short PeekInt16(this Stream ms)\n    {\n        return PeekInt16(ms, (int)ms.Position);\n    }\n\n    public static short PeekInt16(this Stream ms, int position)\n    {\n        return BitConverter.ToInt16(PeekBytes(ms, position, 2), 0);\n    }\n\n    public static int PeekInt32(this Stream ms)\n    {\n        return PeekInt32(ms, (int)ms.Position);\n    }\n\n    public static int PeekInt32(this Stream ms, int position)\n    {\n        return BitConverter.ToInt32(PeekBytes(ms, position, 4), 0);\n    }\n\n    public static long PeekInt64(this Stream ms)\n    {\n        return PeekInt64(ms, (int)ms.Position);\n    }\n\n    public static long PeekInt64(this Stream ms, int position)\n    {\n        return BitConverter.ToInt64(PeekBytes(ms, position, 8), 0);\n    }\n\n    public static ushort PeekUInt16(this Stream ms)\n    {\n        return PeekUInt16(ms, (int)ms.Position);\n    }\n\n    public static ushort PeekUInt16(this Stream ms, int position)\n    {\n        return BitConverter.ToUInt16(PeekBytes(ms, position, 2), 0);\n    }\n\n    public static uint PeekUInt32(this Stream ms)\n    {\n        return PeekUInt32(ms, (int)ms.Position);\n    }\n\n    public static uint PeekUInt32(this Stream ms, int position)\n    {\n        return BitConverter.ToUInt32(PeekBytes(ms, position, 4), 0);\n    }\n\n    public static ulong PeekUInt64(this Stream ms)\n    {\n        return PeekUInt64(ms, (int)ms.Position);\n    }\n\n    public static ulong PeekUInt64(this Stream ms, int position)\n    {\n        return BitConverter.ToUInt64(PeekBytes(ms, position, 8), 0);\n    }\n\n    #endregion Peek\n\n    #region Read\n\n    public static byte[] ReadBytes(this Stream ms, int count)\n    {\n        var buffer = new byte[count];\n\n        if (ms.Read(buffer, 0, count) != count)\n            throw new EndOfStreamException(\"End reached.\");\n\n        return buffer;\n    }\n\n    public static async Task<byte[]> ReadBytesAsync(this Stream ms, int count)\n    {\n        var buffer = new byte[count];\n\n        if (await ms.ReadAsync(buffer, 0, count) != count)\n            throw new EndOfStreamException(\"End reached.\");\n\n        return buffer;\n    }\n\n    public static byte[] ReadBytes(this Stream ms, uint count)\n    {\n        var buffer = new byte[count];\n\n        if (ms.Read(buffer, 0, (int)count) != count)\n            throw new Exception(\"End reached.\");\n\n        return buffer;\n    }\n\n    public static byte[] ReadBytesUntilFull(this Stream stream, int count)\n    {\n        var innerBuffer = new byte[count];\n        var buffer = new Span<byte>(innerBuffer);\n\n        var totalRead = 0;\n        while (totalRead < buffer.Length)\n        {\n            var bytesRead = stream.Read(buffer.Slice(totalRead));\n\n            if (bytesRead == 0)\n                break;\n\n            totalRead += bytesRead;\n        }\n\n        return buffer.ToArray();\n    }\n\n    public static char ReadChar(this Stream ms)\n    {\n        return BitConverter.ToChar(ReadBytes(ms, 2), 0);\n    }\n\n    public static short ReadInt16(this Stream ms)\n    {\n        return BitConverter.ToInt16(ReadBytes(ms, 2), 0);\n    }\n\n    public static int ReadInt32(this Stream ms)\n    {\n        return BitConverter.ToInt32(ReadBytes(ms, 4), 0);\n    }\n\n    public static long ReadInt64(this Stream ms)\n    {\n        return BitConverter.ToInt64(ReadBytes(ms, 8), 0);\n    }\n\n    public static ushort ReadUInt16(this Stream ms)\n    {\n        return BitConverter.ToUInt16(ReadBytes(ms, 2), 0);\n    }\n\n    public static uint ReadUInt32(this Stream ms)\n    {\n        return BitConverter.ToUInt32(ReadBytes(ms, 4), 0);\n    }\n\n    public static ulong ReadUInt64(this Stream ms)\n    {\n        return BitConverter.ToUInt64(ReadBytes(ms, 8), 0);\n    }\n\n    #endregion Read\n\n    #region Write\n\n    public static void WriteByte(this Stream ms, int position, byte value)\n    {\n        var prevPosition = ms.Position;\n\n        ms.Position = position;\n        ms.WriteByte(value);\n        ms.Position = prevPosition;\n    }\n\n    public static void WriteBytes(this Stream ms, byte[] value)\n    {\n        ms.Write(value, 0, value.Length);\n    }\n\n    public static void WriteBytes(this Stream ms, int position, byte[] value)\n    {\n        var prevPosition = ms.Position;\n\n        ms.Position = position;\n        ms.Write(value, 0, value.Length);\n        ms.Position = prevPosition;\n    }\n\n    /// <summary>\n    /// Pad the length of a block to a desired multiple.\n    /// </summary>\n    /// <param name=\"ms\">This current stream to be padded.</param>\n    /// <param name=\"padMultiple\">Byte multiple to pad to.</param>\n    public static void WritePadding(this Stream ms, int padMultiple)\n    {\n        var padding = 0;\n\n        if (ms.Length > 0)\n        {\n            var remainder = (int)ms.Length % padMultiple;\n\n            if (remainder > 0)\n                padding = padMultiple - remainder;\n        }\n\n        for (long i = 0; i < padding; i++)\n            ms.WriteByte(0);\n    }\n\n    /// <summary>\n    /// Writes one stream into another.\n    /// </summary>\n    /// <param name=\"ms\">The stream that will receive the other stream.</param>\n    /// <param name=\"stream\">The stream to be copied.</param>\n    internal static void WriteStream(this Stream ms, Stream stream)\n    {\n        stream.Position = 0;\n\n        stream.CopyTo(ms, (int)Math.Min(4096, stream.Length));\n    }\n\n    public static void WriteStringUtf8(this Stream ms, string value)\n    {\n        var bytes = Encoding.UTF8.GetBytes(value);\n        ms.Write(bytes, 0, bytes.Length);\n    }\n\n    public static byte[] GetPascalStringAsBytes(byte[] bytes, bool padded = true, int byteLimit = 31)\n    {\n        using (var ms = new MemoryStream())\n        {\n            if (bytes.Length > byteLimit)\n            {\n                var temp = new byte[byteLimit];\n                Array.Copy(bytes, temp, byteLimit);\n                bytes = temp;\n            }\n\n            ms.WritePascalString(bytes, padded);\n\n            return ms.ToArray();\n        }\n    }\n\n    public static void WritePascalString(this Stream ms, string value, bool padded = true)\n    {\n        var bytes = Encoding.Unicode.GetBytes(value);\n\n        ms.WriteByte((byte)bytes.Length); //String size, 1 byte.\n        ms.Write(bytes, 0, bytes.Length); //String, XX bytes.\n\n        if (!padded)\n            return;\n\n        var padding = 4 - (bytes.Length + 1) % 4;\n\n        if (padding != 4) //There's zero padding if equals to 4.\n            ms.Position += padding;\n    }\n\n    public static void WritePascalString(this Stream ms, byte[] bytes, bool padded = true)\n    {\n        ms.WriteByte((byte)bytes.Length); //String size, 1 byte.\n        ms.Write(bytes, 0, bytes.Length); //String, XX bytes (Max 31).\n\n        if (!padded)\n            return;\n\n        var padding = 4 - (bytes.Length + 1) % 4;\n\n        if (padding != 4) //There's zero padding if equals to 4.\n            for (int i = 0; i < padding; i++) \n                ms.WriteByte(0);\n    }\n\n    public static void WriteInt16(this Stream ms, short value)\n    {\n        ms.Write(BitConverter.GetBytes(value), 0, 2);\n    }\n\n    public static void WriteInt16(this Stream ms, int position, short value)\n    {\n        WriteBytes(ms, position, BitConverter.GetBytes(value));\n    }\n\n    public static void WriteInt32(this Stream ms, int value)\n    {\n        ms.Write(BitConverter.GetBytes(value), 0, 4);\n    }\n\n    public static void WriteInt32(this Stream ms, int position, int value)\n    {\n        WriteBytes(ms, position, BitConverter.GetBytes(value));\n    }\n\n    public static void WriteInt64(this Stream ms, long value)\n    {\n        ms.Write(BitConverter.GetBytes(value), 0, 8);\n    }\n\n    public static void WriteInt64(this Stream ms, int position, long value)\n    {\n        WriteBytes(ms, position, BitConverter.GetBytes(value));\n    }\n\n    public static void WriteUInt16(this Stream ms, ushort value)\n    {\n        ms.Write(BitConverter.GetBytes(value), 0, 2);\n    }\n\n    public static void WriteUInt16(this Stream ms, int position, ushort value)\n    {\n        WriteBytes(ms, position, BitConverter.GetBytes(value));\n    }\n\n    public static void WriteUInt32(this Stream ms, uint value)\n    {\n        ms.Write(BitConverter.GetBytes(value), 0, 4);\n    }\n\n    public static void WriteUInt32(this Stream ms, int position, uint value)\n    {\n        WriteBytes(ms, position, BitConverter.GetBytes(value));\n    }\n\n    public static void WriteUInt64(this Stream ms, ulong value)\n    {\n        ms.Write(BitConverter.GetBytes(value), 0, 8);\n    }\n\n    public static void WriteUInt64(this Stream ms, int position, ulong value)\n    {\n        WriteBytes(ms, position, BitConverter.GetBytes(value));\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif.Util/UiElementsExtension.cs",
    "content": "using System.IO;\nusing System.Reflection;\nusing System.Windows;\nusing System.Windows.Markup;\nusing Panel = System.Windows.Controls.Panel;\n\nnamespace ScreenToGif.Util;\n\npublic static class UiElementExtensions\n{\n    public static T XamlClone<T>(this T original) where T : class\n    {\n        if (original == null)\n            return null;\n\n        object clone;\n        using (var stream = new MemoryStream())\n        {\n            XamlWriter.Save(original, stream);\n            stream.Seek(0, SeekOrigin.Begin);\n            clone = XamlReader.Load(stream);\n        }\n\n        return clone as T;\n    }\n\n    //public static T Clone<T>(this T source)\n    //{\n    //    var sb = new StringBuilder();\n    //    var writer = XmlWriter.Create(sb, new XmlWriterSettings\n    //    {\n    //        Indent = true,\n    //        ConformanceLevel = ConformanceLevel.Fragment,\n    //        OmitXmlDeclaration = true,\n    //        NamespaceHandling = NamespaceHandling.OmitDuplicates,\n    //    });\n\n    //    var mgr = new XamlDesignerSerializationManager(writer);\n    //    mgr.XamlWriterMode = XamlWriterMode.Expression;\n\n    //    XamlWriter.Save(source, mgr);\n\n    //    return null; // sb.ToString();\n    //}\n\n    public static T DeepClone<T>(this T source) where T : UIElement\n    {\n        var type = source.GetType();\n\n        var result = Activator.CreateInstance(type) as T;\n\n        CopyProperties(source, result, type);\n        DeepCopyChildren(source, result);\n\n        return result;\n    }\n\n    private static void DeepCopyChildren<T>(T source, T result) where T : UIElement\n    {\n        // Deep copy children.\n        var sourcePanel = source as Panel;\n\n        if (sourcePanel == null)\n            return;\n\n        var resultPanel = result as Panel;\n\n        if (resultPanel == null)\n            return;\n\n        foreach (UIElement child in sourcePanel.Children)\n        {\n            var childClone = DeepClone(child);\n            resultPanel.Children.Add(childClone);\n        }\n    }\n\n    private static void CopyProperties<T>(T source, T result, Type type) where T : UIElement\n    {\n        //Copy all properties.\n        var properties = type.GetRuntimeProperties();\n\n        foreach (var property in properties)\n        {\n            if (property.Name == \"Name\")\n                continue;\n\n            if (!property.CanWrite || !property.CanRead)\n                continue;\n\n            var sourceProperty = property.GetValue(source);\n\n            if (sourceProperty is UIElement element)\n            {\n                var propertyClone = element.DeepClone();\n                property.SetValue(result, propertyClone);\n            }\n            else\n            {\n                try\n                {\n                    property.SetValue(result, sourceProperty);\n                }\n                catch (Exception ex)\n                {\n                    System.Diagnostics.Debug.WriteLine(ex);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/VisualHelper.cs",
    "content": "using System.ComponentModel;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Interop;\nusing System.Windows.Media;\nusing System.Windows.Media.Animation;\nusing System.Windows.Threading;\n\nnamespace ScreenToGif.Util;\n\npublic static class VisualHelper\n{\n    public static readonly object LockObject = new();\n\n    public static IntPtr GetHandle(this Window window) => new WindowInteropHelper(window).EnsureHandle();\n\n    public static HwndSource GetHwndSource(this Window window) => HwndSource.FromHwnd(window.GetHandle());\n\n    /// <summary>\n    /// Gets the scale of the current window.\n    /// </summary>\n    /// <param name=\"window\">The Window.</param>\n    /// <returns>The scale of the given Window.</returns>\n    public static double GetVisualScale(this Visual window)\n    {\n        var source = PresentationSource.FromVisual(window);\n\n        return source?.CompositionTarget != null ? source.CompositionTarget.TransformToDevice.M11 : 1d;\n    }\n\n    public static TP GetParent<TP>(DependencyObject child, int i) where TP : DependencyObject\n    {\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is TP dependencyObject)\n            return dependencyObject;\n\n        if (i > 4 || parent == null || parent is TP)\n            return parent as TP;\n\n        return GetParent<TP>(parent, i + 1);\n    }\n\n    public static T GetVisualParent<T>(this DependencyObject child) where T : Visual\n    {\n        while (child != null && child is not T)\n            child = VisualTreeHelper.GetParent(child);\n\n        return child as T;\n    }\n\n    /// <summary>\n    /// Checks whether the given coordinates are within given element bounds.\n    /// </summary>\n    /// <returns>True if the coordinates are within element bounds.</returns>\n    public static bool HitTestElement(this FrameworkElement element, int x, int y)\n    {\n        var scale = element.GetVisualScale();\n        var rect = new Rect(element.PointToScreen(new Point()), new Size(element.Width * scale, element.Height * scale));\n\n        return rect.Contains(x, y);\n    }\n\n    public static TP GetParent<TP>(DependencyObject child, Type stopWhen) where TP : Visual\n    {\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is TP correctLogical)\n            return correctLogical;\n\n        if (parent is TP correctParent)\n            return correctParent;\n\n        if (parent == null || parent.GetType() == stopWhen)\n            return null;\n\n        return GetParent<TP>(parent, stopWhen);\n    }\n\n    public static bool HasParent<T>(DependencyObject child, Type stopWhen, bool checkSelf = false) where T : Visual\n    {\n        if (checkSelf && child is T)\n            return true;\n\n        var parent = VisualTreeHelper.GetParent(child);\n        var logicalParent = LogicalTreeHelper.GetParent(child);\n\n        if (logicalParent is T)\n            return true;\n\n        if (parent is T)\n            return true;\n\n        if (parent == null || parent.GetType() == stopWhen)\n            return false;\n\n        return HasParent<T>(parent, stopWhen);\n    }\n\n    public static T GetVisualChild<T>(Visual parent) where T : Visual\n    {\n        var child = default(T);\n        var numVisuals = VisualTreeHelper.GetChildrenCount(parent);\n\n        for (var i = 0; i < numVisuals; i++)\n        {\n            var v = (Visual)VisualTreeHelper.GetChild(parent, i);\n\n            child = v as T ?? GetVisualChild<T>(v);\n\n            if (child != null)\n                break;\n        }\n\n        return child;\n    }\n\n    public static T DeepCopy<T>(UIElement source) where T : new()\n    {\n        if (source == null)\n            return new T();\n\n        var savedObject = System.Windows.Markup.XamlWriter.Save(source);\n\n        var stringReader = new StringReader(savedObject);\n        var xmlReader = System.Xml.XmlReader.Create(stringReader);\n\n        return (T)System.Windows.Markup.XamlReader.Load(xmlReader);\n    }\n\n    public static Storyboard FindStoryboard(this FrameworkElement visual, string key)\n    {\n        if (visual.TryFindResource(key) is not Storyboard resource)\n            return new Storyboard();\n\n        return resource;\n    }\n\n    public static bool IsInDesignMode()\n    {\n        return (bool) DependencyPropertyDescriptor.FromProperty(DesignerProperties.IsInDesignModeProperty,\n            typeof(FrameworkElement)).Metadata.DefaultValue;\n    }\n\n    /// <summary>\n    /// Checks if the <see cref=\"FrameworkElement.DataContextProperty\"/> is bound or not.\n    /// </summary>\n    /// <param name=\"element\">The element to be checked.</param>\n    /// <returns>True if the data context property is being managed by a binding expression.</returns>\n    /// <exception cref=\"ArgumentNullException\">If <paramref name=\"element\"/> is a null reference.</exception>\n    public static bool IsDataContextDataBound(this FrameworkElement element)\n    {\n        if (element == null)\n            throw new ArgumentNullException(nameof(element));\n\n        return element.GetBindingExpression(FrameworkElement.DataContextProperty) != null;\n    }\n\n    private static readonly Action EmptyDelegate = delegate { };\n\n    public static void Refresh(this UIElement uiElement)\n    {\n        uiElement?.Dispatcher?.Invoke(DispatcherPriority.Render, EmptyDelegate);\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/WebHelper.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util.Settings;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Net;\nusing System.Net.Cache;\nusing System.Net.Http;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Web related methods.\n/// Boundary: http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html\n/// </summary>\npublic static class WebHelper\n{\n    private const string Boundary = \"+++fringe+++\";\n\n    public static string Protect(string str)\n    {\n        var entropy = Encoding.ASCII.GetBytes(Environment.MachineName);\n        return Convert.ToBase64String(ProtectedData.Protect(Encoding.ASCII.GetBytes(str), entropy, DataProtectionScope.CurrentUser));\n    }\n\n    public static string Unprotect(string str)\n    {\n        if (string.IsNullOrWhiteSpace(str))\n            return str;\n\n        var entropy = Encoding.ASCII.GetBytes(Environment.MachineName);\n        return Encoding.ASCII.GetString(ProtectedData.Unprotect(Convert.FromBase64String(str), entropy, DataProtectionScope.CurrentUser));\n    }\n\n    public static string AppendQuery(string url, Dictionary<string, string> args)\n    {\n        if (args == null)\n            return url;\n\n        var suffix = args.Select(s => s.Key + \"=\" + WebUtility.UrlEncode(s.Value)).Aggregate((p, n) => p + \"&\" + n);\n\n        return url + (string.IsNullOrWhiteSpace(suffix) ? \"\" : \"?\" + suffix);\n    }\n\n\n    public static async Task<string> Get(string url, NameValueCollection headers = null)\n    {\n        using (var webResponse = await GetResponse(HttpMethod.Get, url, headers))\n        {\n            await using (var responseStream = webResponse.GetResponseStream())\n            {\n                if (responseStream == null)\n                    return null;\n\n                using (var reader = new StreamReader(responseStream, Encoding.UTF8))\n                    return await reader.ReadToEndAsync();\n            }\n        }\n    }\n\n    public static async Task<string> Post(string url, string content, NameValueCollection headers = null)\n    {\n        using (var webResponse = await GetResponse(HttpMethod.Post, url, content, \"application/json\", headers))\n        {\n            await using (var responseStream = webResponse.GetResponseStream())\n            {\n                if (responseStream == null)\n                    return null;\n\n                using (var reader = new StreamReader(responseStream, Encoding.UTF8))\n                    return await reader.ReadToEndAsync();\n            }\n        }\n    }\n\n    public static async Task<string> PostMultipart(string url, Dictionary<string, string> args)\n    {\n        await using (var stream = new MemoryStream())\n        {\n            stream.WriteStringUtf8(GetMultipartString(Boundary, args));\n\n            using (var webResponse = await GetResponse(HttpMethod.Post, url, stream, \"multipart/form-data; boundary=\" + Boundary))\n            {\n                await using (var responseStream = webResponse.GetResponseStream())\n                {\n                    if (responseStream == null)\n                        return null;\n\n                    using (var reader = new StreamReader(responseStream, Encoding.UTF8))\n                        return await reader.ReadToEndAsync();\n                }\n            }\n        }\n    }\n\n    public static async Task<string> SendFile(string url, Stream data, string filename, Dictionary<string, string> args = null, NameValueCollection headers = null, string streamName = \"file\")\n    {\n        await using (var head = GetMultipartStream(Boundary, args, filename, data, streamName))\n        {\n            using (var webResponse = await GetResponse(HttpMethod.Post, url, head, \"multipart/form-data; boundary=\" + Boundary, headers))\n            {\n                await using (var responseStream = webResponse.GetResponseStream())\n                {\n                    if (responseStream == null)\n                        return null;\n\n                    using (var reader = new StreamReader(responseStream, Encoding.UTF8))\n                        return await reader.ReadToEndAsync();\n                }\n            }\n        }\n    }\n\n    public static async Task<string> SendFile2(string url, Stream data, string filename, Dictionary<string, string> args = null, NameValueCollection headers = null)\n    {\n        await using (var head = GetMultipartStream(Boundary, args, filename, data))\n        {\n            var request = GetWebRequest(HttpMethod.Post, url, headers, \"multipart/form-data; boundary=\" + Boundary, head.Length);\n\n            await using (var requestStream = await request.GetRequestStreamAsync())\n                requestStream.WriteStream(head);\n\n            using (var response = await request.GetResponseAsync())\n            {\n                await using (var responseStream = response.GetResponseStream())\n                {\n                    if (responseStream == null)\n                        return null;\n\n                    using (var reader = new StreamReader(responseStream, Encoding.UTF8))\n                        return await reader.ReadToEndAsync();\n                }\n            }\n        }\n    }\n\n    public static Stream GetMultipartStream(string border, Dictionary<string, string> args, string filename, Stream data, string streamName = \"file\")\n    {\n        var stream = new MemoryStream();\n\n        if (args.Any(w => !string.IsNullOrEmpty(w.Key) && !string.IsNullOrEmpty(w.Value)))\n            stream.WriteStringUtf8(\"Content-Type: text/plain; charset=utf-8\");\n\n        foreach (var content in args.Where(w => !string.IsNullOrEmpty(w.Key) && !string.IsNullOrEmpty(w.Value)))\n            stream.WriteStringUtf8($\"--{border}\\r\\nContent-Disposition: form-data; name=\\\"{content.Key}\\\"\\r\\n\\r\\n{content.Value}\\r\\n\");\n\n        if (!string.IsNullOrWhiteSpace(filename))\n            stream.WriteStringUtf8($\"--{border}\\r\\nContent-Disposition: form-data; name={streamName}; filename={filename};\\r\\n\\r\\n\");\n        //stream.WriteStringUtf8($\"--{border}\\r\\nContent-Disposition: form-data; name=\\\"image\\\"; filename=\\\"{filename}\\\"\\r\\nContent-Type: image/gif\\r\\n\\r\\n\"); //TODO: Fixed content type.\n\n        stream.WriteStream(data);\n            \n        stream.WriteStringUtf8($\"\\r\\n--{border}--\\r\\n\");\n\n        stream.Position = 0;\n        return stream;\n    }\n\n    public static string GetMultipartString(string border, Dictionary<string, string> args)\n    {\n        return args.Where(w => !string.IsNullOrEmpty(w.Key) && !string.IsNullOrEmpty(w.Value))\n            .Aggregate(\"\", (p, n) => p + $\"--{border}\\r\\nContent-Disposition: form-data; name=\\\"{n.Key}\\\"\\r\\n\\r\\n{n.Value}\\r\\n\") + $\"--{border}--\\r\\n\";\n    }\n\n\n    public static Task<WebResponse> GetResponse(HttpMethod method, string url, NameValueCollection headers = null)\n    {\n        try\n        {\n            return GetWebRequest(method, url, headers).GetResponseAsync();\n        }\n        catch (WebException we)\n        {\n            if (we.Response is not WebResponse resp)\n                throw;\n\n            return Task.FromResult(resp);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Get response: \" + url);\n        }\n\n        return null;\n    }\n\n    private static Task<WebResponse> GetResponse(HttpMethod method, string url, string content, string contentType = null, NameValueCollection headers = null)\n    {\n        try\n        {\n            var request = GetWebRequest(method, url, headers, contentType, content.Length);\n\n            if (content.Length > 0)\n                using (var requestStream = request.GetRequestStream())\n                    requestStream.WriteStringUtf8(content);\n\n            return request.GetResponseAsync();\n        }\n        catch (WebException we)\n        {\n            if (we.Response is not WebResponse resp)\n                throw;\n\n            return Task.FromResult(resp);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Get response: \" + url);\n        }\n\n        return Task.FromResult<WebResponse>(null);\n    }\n\n    private static async Task<WebResponse> GetResponse(HttpMethod method, string url, Stream data, string contentType = null, NameValueCollection headers = null)\n    {\n        try\n        {\n            var request = GetWebRequest(method, url, headers, contentType, data?.Length ?? 0);\n                \n            if (request.ContentLength > 0)\n                await using (var requestStream = await request.GetRequestStreamAsync())\n                    requestStream.WriteStream(data);\n\n            return await request.GetResponseAsync();\n        }\n        catch (WebException we)\n        {\n            if (we.Response is not WebResponse resp)\n                throw;\n\n            return resp;\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Get response: \" + url);\n        }\n\n        return null;\n    }\n\n    public static async Task<Stream> GetStream(string url, NameValueCollection headers = null)\n    {\n        using var client = GetHttpClient(headers);\n        var response = await client.GetAsync(url);\n\n        if (!response.IsSuccessStatusCode)\n            throw new Exception(\"Unsuccessful download of stream.\");\n\n        return await response.Content.ReadAsStreamAsync();\n    }\n\n\n    private static HttpWebRequest GetWebRequest(HttpMethod method, string url, NameValueCollection headers = null, string contentType = null, long contentLength = 0)\n    {\n        var request = (HttpWebRequest) WebRequest.Create(url);\n\n        if (headers != null)\n            request.Headers.Add(headers);\n\n        request.Method = method.ToString();\n        request.Proxy = GetProxy();\n        request.UserAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\";\n        request.ContentType = contentType;\n\n        if (contentLength == 0)\n        {\n            request.KeepAlive = false;\n            return request;\n        }\n\n        if (method == HttpMethod.Get)\n            request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);\n\n        request.AllowWriteStreamBuffering = IsProxyBeingUsed();\n        request.ContentLength = contentLength;\n        request.Pipelined = false;\n        request.Timeout = -1;\n        return request;\n    }\n\n    internal static HttpClient GetHttpClient(NameValueCollection headers = null)\n    {\n        var clientHandler = new HttpClientHandler { Proxy = GetProxy() };\n        var client = new HttpClient(clientHandler);\n\n        if (headers != null)\n            foreach (string key in headers)\n                client.DefaultRequestHeaders.Add(key, headers[key]);\n        \n        return client;\n    }\n\n    public static IWebProxy GetProxy()\n    {\n        if (UserSettings.All.ProxyMode == ProxyTypes.System)\n            return WebRequest.GetSystemWebProxy();\n\n        if (UserSettings.All.ProxyMode == ProxyTypes.Manual)\n            return string.IsNullOrEmpty(UserSettings.All.ProxyHost) || UserSettings.All.ProxyPort <= 0 ? null :\n                new WebProxy($\"{UserSettings.All.ProxyHost}:{UserSettings.All.ProxyPort}\", true, null, new NetworkCredential(UserSettings.All.ProxyUsername, Unprotect(UserSettings.All.ProxyPassword)));\n\n        return null;\n    }\n\n    internal static bool IsProxyBeingUsed()\n    {\n        if (UserSettings.All.ProxyMode == ProxyTypes.System)\n            return true;\n\n        if (UserSettings.All.ProxyMode == ProxyTypes.Manual)\n            return !string.IsNullOrEmpty(UserSettings.All.ProxyHost) && UserSettings.All.ProxyPort > 0;\n\n        return false;\n    }\n}"
  },
  {
    "path": "ScreenToGif.Util/WordLevel.cs",
    "content": "using System.Runtime.InteropServices;\n\nnamespace ScreenToGif.Util;\n\n/// <summary>\n/// Word (short) level helper.\n/// Divide integer into two shorts and get/set the higher and lower values.\n/// </summary>\npublic class WordLevel\n{\n    /// <summary>\n    /// Each field size is 8 bits.\n    /// So, shifting an offset of 2, will jump 16 bits.\n    /// </summary>\n    [StructLayout(LayoutKind.Explicit)]\n    public struct WordUnion\n    {\n        [FieldOffset(0)]\n        public uint Number;\n\n        [FieldOffset(0)]\n        public short Low;\n\n        [FieldOffset(2)]\n        public short High;\n    }\n\n    public static short GetLower(uint number)\n    {\n        //BitConverter.ToInt16(BitConverter.GetBytes(number), 0);\n        return new WordUnion { Number = number }.Low;\n    }\n\n    public static short GetHigher(uint number)\n    {\n        //BitConverter.ToInt16(BitConverter.GetBytes(number), 2);\n        return new WordUnion { Number = number }.High;\n    }\n\n    public static uint SetLower(uint number, short low)\n    {\n        // ReSharper disable once UseObjectOrCollectionInitializer\n        var union = new WordUnion { Number = number };\n        union.Low = low;\n\n        return union.Number;\n    }\n\n    public static uint SetHigher(uint number, short high)\n    {\n        // ReSharper disable once UseObjectOrCollectionInitializer\n        var union = new WordUnion { Number = number };\n        union.High = short.MaxValue;\n\n        return union.Number;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/BoardRecorderViewModel.cs",
    "content": "using ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util.Settings;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Ink;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing Brushes = System.Windows.Media.Brushes;\nusing Color = System.Windows.Media.Color;\nusing Pen = System.Windows.Media.Pen;\nusing Point = System.Windows.Point;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class BoardRecorderViewModel : BindableBase\n{\n    private InkCanvasEditingMode _editingMode = InkCanvasEditingMode.InkAndGesture;\n    private Color _brushColor = UserSettings.All.BoardColor;\n    private int _brushWidth = UserSettings.All.BoardStylusWidth;\n    private int _brushHeight = UserSettings.All.BoardStylusHeight;\n    private StylusTip _stylusTip = UserSettings.All.BoardStylusTip;\n    private bool _fitToCurve = UserSettings.All.BoardFitToCurve;\n    private bool _isHighlighter = UserSettings.All.BoardIsHighlighter;\n    private int _eraserBrushWidth = UserSettings.All.BoardEraserWidth;\n    private int _eraserBrushHeight = UserSettings.All.BoardEraserHeight;\n    private StylusTip _eraserStylusTip = UserSettings.All.BoardEraserStylusTip;\n    \n    public DrawingAttributes DrawingAttributes => new()\n    {\n        Color = BrushColor,\n        Width = BrushWidth,\n        Height = BrushHeight,\n        FitToCurve = FitToCurve,\n        IsHighlighter = IsHighlighter,\n        StylusTip = StylusTip\n    }; \n\n    public Cursor Cursor\n    {\n        get\n        {\n            var rtb = new RenderTargetBitmap(BrushWidth, BrushHeight, 96, 96, PixelFormats.Pbgra32);\n            var dv = new DrawingVisual();\n\n            var backColor = IsHighlighter ? Color.FromArgb((byte)(BrushColor.A * 0.8), BrushColor.R, BrushColor.G, BrushColor.B) : BrushColor;\n\n            using (var dc = dv.RenderOpen())\n            {\n                if (StylusTip is StylusTip.Ellipse)\n                    dc.DrawEllipse(new SolidColorBrush(backColor), new Pen(Brushes.DimGray, 1), new Point(BrushWidth / 2D, BrushHeight / 2D), BrushWidth / 2D - 1, BrushHeight / 2D - 1);\n                else\n                    dc.DrawRectangle(new SolidColorBrush(backColor), new Pen(Brushes.DimGray, 1), new Rect(0, 0, BrushWidth - 1, BrushHeight - 1));\n            }\n\n            rtb.Render(dv);\n\n            return ConvertToCursor(rtb, new Point(BrushWidth / 2D, BrushHeight / 2D));\n        }\n    }\n\n    public bool ForceCursor => EditingMode is InkCanvasEditingMode.InkAndGesture or InkCanvasEditingMode.Ink;\n\n    public InkCanvasEditingMode EditingMode\n    {\n        get => _editingMode;\n        set\n        {\n            SetProperty(ref _editingMode, value);\n            \n            OnPropertyChanged(nameof(Cursor));\n            OnPropertyChanged(nameof(ForceCursor));\n            OnPropertyChanged(nameof(BrushSettingsVisibility));\n            OnPropertyChanged(nameof(EraserBrushSettingsVisibility));\n        }\n    }\n\n    public bool IsInkMode\n    {\n        get => EditingMode is InkCanvasEditingMode.Ink or InkCanvasEditingMode.InkAndGesture;\n        set\n        {\n            if (value)\n                EditingMode = InkCanvasEditingMode.InkAndGesture;\n        }\n    }\n\n    public bool IsEraserMode\n    {\n        get => EditingMode is InkCanvasEditingMode.EraseByPoint;\n        set\n        {\n            if (value)\n                EditingMode = InkCanvasEditingMode.EraseByPoint;\n        }\n    }\n\n    public bool IsStrokeEraserMode\n    {\n        get => EditingMode is InkCanvasEditingMode.EraseByStroke;\n        set\n        {\n            if (value)\n                EditingMode = InkCanvasEditingMode.EraseByStroke;\n        }\n    }\n\n    public bool IsSelectionMode\n    {\n        get => EditingMode is InkCanvasEditingMode.Select;\n        set\n        {\n            if (value)\n                EditingMode = InkCanvasEditingMode.Select;\n        }\n    }\n\n    public Color BrushColor\n    {\n        get => _brushColor;\n        set\n        {\n            SetProperty(ref _brushColor, value);\n\n            UserSettings.All.BoardColor = value;\n\n            OnPropertyChanged(nameof(DrawingAttributes));\n            OnPropertyChanged(nameof(Cursor));\n            OnPropertyChanged(nameof(ForceCursor));\n        }\n    }\n\n    public int BrushWidth\n    {\n        get => _brushWidth;\n        set\n        {\n            SetProperty(ref _brushWidth, value);\n\n            UserSettings.All.BoardStylusWidth = value;\n\n            OnPropertyChanged(nameof(DrawingAttributes));\n            OnPropertyChanged(nameof(Cursor));\n            OnPropertyChanged(nameof(ForceCursor));\n        }\n    }\n\n    public int BrushHeight\n    {\n        get => _brushHeight;\n        set\n        {\n            SetProperty(ref _brushHeight, value);\n\n            UserSettings.All.BoardStylusHeight = value;\n\n            OnPropertyChanged(nameof(DrawingAttributes));\n            OnPropertyChanged(nameof(Cursor));\n            OnPropertyChanged(nameof(ForceCursor));\n        }\n    }\n\n    public StylusTip StylusTip\n    {\n        get => _stylusTip;\n        set\n        {\n            SetProperty(ref _stylusTip, value);\n\n            UserSettings.All.BoardStylusTip = value;\n\n            OnPropertyChanged(nameof(DrawingAttributes));\n            OnPropertyChanged(nameof(Cursor));\n            OnPropertyChanged(nameof(ForceCursor));\n            OnPropertyChanged(nameof(StylusTipEllipse));\n            OnPropertyChanged(nameof(StylusTipRectangle));\n        }\n    }\n\n    public bool StylusTipEllipse\n    {\n        get => StylusTip is StylusTip.Ellipse;\n        set => StylusTip = value ? StylusTip.Ellipse : StylusTip.Rectangle;\n    }\n\n    public bool StylusTipRectangle\n    {\n        get => StylusTip is StylusTip.Rectangle;\n        set => StylusTip = value ? StylusTip.Rectangle : StylusTip.Ellipse;\n    }\n\n    public Visibility BrushSettingsVisibility => EditingMode is InkCanvasEditingMode.Ink or InkCanvasEditingMode.InkAndGesture ? Visibility.Visible : Visibility.Collapsed;\n\n    public bool FitToCurve\n    {\n        get => _fitToCurve;\n        set\n        {\n            SetProperty(ref _fitToCurve, value);\n\n            UserSettings.All.BoardFitToCurve = value;\n\n            OnPropertyChanged(nameof(DrawingAttributes));\n        }\n    }\n\n    public bool IsHighlighter\n    {\n        get => _isHighlighter;\n        set\n        {\n            SetProperty(ref _isHighlighter, value);\n\n            UserSettings.All.BoardIsHighlighter = value;\n\n            OnPropertyChanged(nameof(DrawingAttributes));\n            OnPropertyChanged(nameof(Cursor));\n            OnPropertyChanged(nameof(ForceCursor));\n        }\n    }\n\n    public StylusShape EraserShape => EraserStylusTip == StylusTip.Ellipse ? new EllipseStylusShape(EraserBrushWidth, EraserBrushHeight) : new RectangleStylusShape(EraserBrushWidth, EraserBrushHeight);\n\n    public int EraserBrushWidth\n    {\n        get => _eraserBrushWidth;\n        set\n        {\n            SetProperty(ref _eraserBrushWidth, value);\n\n            UserSettings.All.BoardEraserWidth = value;\n\n            OnPropertyChanged(nameof(EraserShape));\n        }\n    }\n\n    public int EraserBrushHeight\n    {\n        get => _eraserBrushHeight;\n        set\n        {\n            SetProperty(ref _eraserBrushHeight, value);\n\n            UserSettings.All.BoardEraserHeight = value;\n\n            OnPropertyChanged(nameof(EraserShape));\n        }\n    }\n\n    public StylusTip EraserStylusTip\n    {\n        get => _eraserStylusTip;\n        set\n        {\n            SetProperty(ref _eraserStylusTip, value);\n\n            UserSettings.All.BoardEraserStylusTip = value;\n\n            OnPropertyChanged(nameof(EraserShape));\n            OnPropertyChanged(nameof(EraserStylusTipEllipse));\n            OnPropertyChanged(nameof(EraserStylusTipRectangle));\n        }\n    }\n\n    public bool EraserStylusTipEllipse\n    {\n        get => EraserStylusTip is StylusTip.Ellipse;\n        set => EraserStylusTip = value ? StylusTip.Ellipse : StylusTip.Rectangle;\n    }\n\n    public bool EraserStylusTipRectangle\n    {\n        get => EraserStylusTip is StylusTip.Rectangle;\n        set => EraserStylusTip = value ? StylusTip.Rectangle : StylusTip.Ellipse;\n    }\n\n    public Visibility EraserBrushSettingsVisibility => EditingMode is InkCanvasEditingMode.EraseByPoint ? Visibility.Visible : Visibility.Collapsed;\n\n    public Cursor ConvertToCursor(RenderTargetBitmap rtb, Point hotSpot)\n    {\n        using var pngStream = new MemoryStream();\n        \n        var png = new PngBitmapEncoder();\n        png.Frames.Add(BitmapFrame.Create(rtb));\n        png.Save(pngStream);\n\n        //Write cursor header info.\n        using var cursorStream = new MemoryStream();\n        cursorStream.Write([0x00, 0x00], 0, 2); //IconDir: Reserved. Must always be 0.\n        cursorStream.Write([0x02, 0x00], 0, 2); //IconDir: Specifies image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid\n        cursorStream.Write([0x01, 0x00], 0, 2); //IconDir: Specifies number of images in the file.\n        cursorStream.Write([(byte)rtb.PixelWidth], 0, 1); //IconDirEntry: Specifies image width in pixels. Can be any number between 0 and 255. Value 0 means image width is 256 pixels.\n        cursorStream.Write([(byte)rtb.PixelHeight], 0, 1); //IconDirEntry: Specifies image height in pixels. Can be any number between 0 and 255. Value 0 means image height is 256 pixels.\n        cursorStream.Write([0x00], 0, 1); //IconDirEntry: Specifies number of colors in the color palette. Should be 0 if the image does not use a color palette.\n        cursorStream.Write([0x00], 0, 1); //IconDirEntry: Reserved. Should be 0.\n        cursorStream.Write([(byte)hotSpot.X, 0x00], 0, 2); //IconDirEntry: Specifies the horizontal coordinates of the hotspot in number of pixels from the left.\n        cursorStream.Write([(byte)hotSpot.Y, 0x00], 0, 2); //IconDirEntry: Specifies the vertical coordinates of the hotspot in number of pixels from the top.\n        cursorStream.Write([ //IconDirEntry: Specifies the size of the image's data in bytes\n          (byte)(pngStream.Length & 0x000000FF),\n          (byte)((pngStream.Length & 0x0000FF00) >> 0x08),\n          (byte)((pngStream.Length & 0x00FF0000) >> 0x10),\n          (byte)((pngStream.Length & 0xFF000000) >> 0x18)\n        ], 0, 4);\n        cursorStream.Write([0x16, 0x00, 0x00, 0x00], 0, 4); //IconDirEntry: Specifies the offset of BMP or PNG data from the beginning of the ICO/CUR file\n\n        pngStream.Seek(0, SeekOrigin.Begin);\n        pngStream.CopyTo(cursorStream);\n\n        cursorStream.Seek(0, SeekOrigin.Begin);\n        return new Cursor(cursorStream);\n    }\n\n    public Cursor ConvertToCursor(UIElement control, Point hotSpot)\n    {\n        control.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n        var rect = new Rect(0, 0, control.DesiredSize.Width, control.DesiredSize.Height);\n        var rtb = new RenderTargetBitmap((int)control.DesiredSize.Width, (int)control.DesiredSize.Height, 96, 96, PixelFormats.Pbgra32);\n\n        control.Arrange(rect);\n        rtb.Render(control);\n\n        using var pngStream = new MemoryStream();\n        var png = new PngBitmapEncoder();\n        png.Frames.Add(BitmapFrame.Create(rtb));\n        png.Save(pngStream);\n\n        //Write cursor header info.\n        using var cursorStream = new MemoryStream();\n        cursorStream.Write([0x00, 0x00], 0, 2); //IconDir: Reserved. Must always be 0.\n        cursorStream.Write([0x02, 0x00], 0, 2); //IconDir: Specifies image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid\n        cursorStream.Write([0x01, 0x00], 0, 2); //IconDir: Specifies number of images in the file.\n        cursorStream.Write([(byte)control.DesiredSize.Width], 0, 1); //IconDirEntry: Specifies image width in pixels. Can be any number between 0 and 255. Value 0 means image width is 256 pixels.\n        cursorStream.Write([(byte)control.DesiredSize.Height], 0, 1); //IconDirEntry: Specifies image height in pixels. Can be any number between 0 and 255. Value 0 means image height is 256 pixels.\n        cursorStream.Write([0x00], 0, 1); //IconDirEntry: Specifies number of colors in the color palette. Should be 0 if the image does not use a color palette.\n        cursorStream.Write([0x00], 0, 1); //IconDirEntry: Reserved. Should be 0.\n        cursorStream.Write([(byte)hotSpot.X, 0x00], 0, 2); //IconDirEntry: Specifies the horizontal coordinates of the hotspot in number of pixels from the left.\n        cursorStream.Write([(byte)hotSpot.Y, 0x00], 0, 2); //IconDirEntry: Specifies the vertical coordinates of the hotspot in number of pixels from the top.\n        cursorStream.Write([ //IconDirEntry: Specifies the size of the image's data in bytes\n            (byte)(pngStream.Length & 0x000000FF),\n            (byte)((pngStream.Length & 0x0000FF00) >> 0x08),\n            (byte)((pngStream.Length & 0x00FF0000) >> 0x10),\n            (byte)((pngStream.Length & 0xFF000000) >> 0x18)\n        ], 0, 4);\n        cursorStream.Write([0x16, 0x00, 0x00, 0x00], 0, 4); //IconDirEntry: Specifies the offset of BMP or PNG data from the beginning of the ICO/CUR file\n\n        pngStream.Seek(0, SeekOrigin.Begin);\n        pngStream.CopyTo(cursorStream);\n\n        cursorStream.Seek(0, SeekOrigin.Begin);\n        return new Cursor(cursorStream);\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.ViewModel/EditorViewModel.cs",
    "content": "using ScreenToGif.Domain.Models.Project;\nusing ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util.Settings;\nusing System.Collections.ObjectModel;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Ink;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class EditorViewModel : BaseViewModel\n{\n    private Project _project = null;\n    private TimeSpan _currentTime = TimeSpan.Zero;\n    private int _currentIndex = -1;\n    private WriteableBitmap _renderedImage = null;\n    private double _zoom = 1d;\n\n    //Free Drawing.\n    private InkCanvasEditingMode _freeDrawingEditingMode = InkCanvasEditingMode.InkAndGesture;\n    private Color _freeDrawingBrushColor = UserSettings.All.FreeDrawingColor;\n    private int _freeDrawingBrushWidth = UserSettings.All.FreeDrawingPenWidth;\n    private int _freeDrawingBrushHeight = UserSettings.All.FreeDrawingPenHeight;\n    private StylusTip _freeDrawingStylusTip = UserSettings.All.FreeDrawingStylusTip;\n    private bool _freeDrawingFitToCurve = UserSettings.All.FreeDrawingFitToCurve;\n    private bool _freeDrawingIsHighlighter = UserSettings.All.FreeDrawingIsHighlighter;\n    private int _freeDrawingEraserBrushWidth = UserSettings.All.FreeDrawingEraserWidth;\n    private int _freeDrawingEraserBrushHeight = UserSettings.All.FreeDrawingEraserHeight;\n    private StylusTip _freeDrawingEraserStylusTip = UserSettings.All.FreeDrawingEraserStylusTip;\n\n    private ObservableCollection<FrameViewModel> _frames = [];\n    \n    //Properties.\n    public CommandBindingCollection CommandBindings => new()\n    {\n        new CommandBinding(FindCommand(\"Command.NewRecording\"), (sender, args) => { Console.WriteLine(\"\"); }, (sender, args) => { args.CanExecute = true; }),\n        new CommandBinding(FindCommand(\"Command.NewWebcamRecording\"), (sender, args) => { Console.WriteLine(\"\"); }, (sender, args) => { args.CanExecute = true; }),\n    };\n\n    public Project Project\n    {\n        get => _project;\n        set => SetProperty(ref _project, value);\n    }\n\n    public TimeSpan CurrentTime\n    {\n        get => _currentTime;\n        set => SetProperty(ref _currentTime, value);\n    }\n\n    public int CurrentIndex\n    {\n        get => _currentIndex;\n        set\n        {\n            if (SetProperty(ref _currentIndex, value))\n                OnPropertyChanged(nameof(CurrentFrame));\n        }\n    }\n\n    internal WriteableBitmap RenderedImage\n    {\n        get => _renderedImage;\n        set => SetProperty(ref _renderedImage, value);\n    }\n\n    public double Zoom\n    {\n        get => _zoom;\n        set => SetProperty(ref _zoom, value);\n    }\n\n    /// <summary>\n    /// The list of frames.\n    /// </summary>\n    public ObservableCollection<FrameViewModel> Frames\n    {\n        get => _frames;\n        set => SetProperty(ref _frames, value);\n    }\n\n    /// <summary>\n    /// Convenience property used by bindings. Returns the current frame according to CurrentIndex.\n    /// </summary>\n    public FrameViewModel CurrentFrame => (_frames != null && _currentIndex >= 0 && _currentIndex < _frames.Count) ? _frames[_currentIndex] : null;\n\n    public DrawingAttributes FreeDrawingDrawingAttributes => new()\n    {\n        Color = FreeDrawingBrushColor,\n        Width = FreeDrawingBrushWidth,\n        Height = FreeDrawingBrushHeight,\n        FitToCurve = FreeDrawingFitToCurve,\n        IsHighlighter = FreeDrawingIsHighlighter,\n        StylusTip = FreeDrawingStylusTip\n    };\n\n    public Cursor FreeDrawingCursor\n    {\n        get\n        {\n            var rtb = new RenderTargetBitmap(FreeDrawingBrushWidth, FreeDrawingBrushHeight, 96, 96, PixelFormats.Pbgra32);\n            var dv = new DrawingVisual();\n\n            var backColor = FreeDrawingIsHighlighter ? Color.FromArgb((byte)(FreeDrawingBrushColor.A * 0.8), FreeDrawingBrushColor.R, FreeDrawingBrushColor.G, FreeDrawingBrushColor.B) : FreeDrawingBrushColor;\n\n            using (var dc = dv.RenderOpen())\n            {\n                if (FreeDrawingStylusTip is StylusTip.Ellipse)\n                    dc.DrawEllipse(new SolidColorBrush(backColor), new Pen(Brushes.DimGray, 1), new Point(FreeDrawingBrushWidth / 2D, FreeDrawingBrushHeight / 2D), FreeDrawingBrushWidth / 2D - 1, FreeDrawingBrushHeight / 2D - 1);\n                else\n                    dc.DrawRectangle(new SolidColorBrush(backColor), new Pen(Brushes.DimGray, 1), new Rect(0, 0, FreeDrawingBrushWidth - 1, FreeDrawingBrushHeight - 1));\n            }\n\n            rtb.Render(dv);\n\n            return ConvertToCursor(rtb, new Point(FreeDrawingBrushWidth / 2D, FreeDrawingBrushHeight / 2D));\n        }\n    }\n\n    public bool FreeDrawingForceCursor => FreeDrawingEditingMode is InkCanvasEditingMode.InkAndGesture or InkCanvasEditingMode.Ink;\n\n    public InkCanvasEditingMode FreeDrawingEditingMode\n    {\n        get => _freeDrawingEditingMode;\n        set\n        {\n            SetProperty(ref _freeDrawingEditingMode, value);\n            \n            OnPropertyChanged(nameof(FreeDrawingCursor));\n            OnPropertyChanged(nameof(FreeDrawingForceCursor));\n            OnPropertyChanged(nameof(FreeDrawingBrushSettingsVisibility));\n            OnPropertyChanged(nameof(FreeDrawingEraserBrushSettingsVisibility));\n        }\n    }\n\n    public bool FreeDrawingIsInkMode\n    {\n        get => FreeDrawingEditingMode is InkCanvasEditingMode.Ink or InkCanvasEditingMode.InkAndGesture;\n        set\n        {\n            if (value)\n                FreeDrawingEditingMode = InkCanvasEditingMode.InkAndGesture;\n        }\n    }\n\n    public bool FreeDrawingIsEraserMode\n    {\n        get => FreeDrawingEditingMode is InkCanvasEditingMode.EraseByPoint;\n        set\n        {\n            if (value)\n                FreeDrawingEditingMode = InkCanvasEditingMode.EraseByPoint;\n        }\n    }\n\n    public bool FreeDrawingIsStrokeEraserMode\n    {\n        get => FreeDrawingEditingMode is InkCanvasEditingMode.EraseByStroke;\n        set\n        {\n            if (value)\n                FreeDrawingEditingMode = InkCanvasEditingMode.EraseByStroke;\n        }\n    }\n\n    public bool FreeDrawingIsSelectionMode\n    {\n        get => FreeDrawingEditingMode is InkCanvasEditingMode.Select;\n        set\n        {\n            if (value)\n                FreeDrawingEditingMode = InkCanvasEditingMode.Select;\n        }\n    }\n\n    public Color FreeDrawingBrushColor\n    {\n        get => _freeDrawingBrushColor;\n        set\n        {\n            SetProperty(ref _freeDrawingBrushColor, value);\n\n            UserSettings.All.FreeDrawingColor = value;\n\n            OnPropertyChanged(nameof(FreeDrawingDrawingAttributes));\n            OnPropertyChanged(nameof(FreeDrawingCursor));\n            OnPropertyChanged(nameof(FreeDrawingForceCursor));\n        }\n    }\n\n    public int FreeDrawingBrushWidth\n    {\n        get => _freeDrawingBrushWidth;\n        set\n        {\n            SetProperty(ref _freeDrawingBrushWidth, value);\n\n            UserSettings.All.FreeDrawingPenWidth = value;\n\n            OnPropertyChanged(nameof(FreeDrawingDrawingAttributes));\n            OnPropertyChanged(nameof(FreeDrawingCursor));\n            OnPropertyChanged(nameof(FreeDrawingForceCursor));\n        }\n    }\n\n    public int FreeDrawingBrushHeight\n    {\n        get => _freeDrawingBrushHeight;\n        set\n        {\n            SetProperty(ref _freeDrawingBrushHeight, value);\n\n            UserSettings.All.FreeDrawingPenHeight = value;\n\n            OnPropertyChanged(nameof(FreeDrawingDrawingAttributes));\n            OnPropertyChanged(nameof(FreeDrawingCursor));\n            OnPropertyChanged(nameof(FreeDrawingForceCursor));\n        }\n    }\n\n    public StylusTip FreeDrawingStylusTip\n    {\n        get => _freeDrawingStylusTip;\n        set\n        {\n            SetProperty(ref _freeDrawingStylusTip, value);\n\n            UserSettings.All.FreeDrawingStylusTip = value;\n\n            OnPropertyChanged(nameof(FreeDrawingDrawingAttributes));\n            OnPropertyChanged(nameof(FreeDrawingCursor));\n            OnPropertyChanged(nameof(FreeDrawingForceCursor));\n            OnPropertyChanged(nameof(FreeDrawingStylusTipEllipse));\n            OnPropertyChanged(nameof(FreeDrawingStylusTipRectangle));\n        }\n    }\n\n    public bool FreeDrawingStylusTipEllipse\n    {\n        get => FreeDrawingStylusTip is StylusTip.Ellipse;\n        set => FreeDrawingStylusTip = value ? StylusTip.Ellipse : StylusTip.Rectangle;\n    }\n\n    public bool FreeDrawingStylusTipRectangle\n    {\n        get => FreeDrawingStylusTip is StylusTip.Rectangle;\n        set => FreeDrawingStylusTip = value ? StylusTip.Rectangle : StylusTip.Ellipse;\n    }\n\n    public Visibility FreeDrawingBrushSettingsVisibility => FreeDrawingEditingMode is InkCanvasEditingMode.Ink or InkCanvasEditingMode.InkAndGesture ? Visibility.Visible : Visibility.Collapsed;\n\n    public bool FreeDrawingFitToCurve\n    {\n        get => _freeDrawingFitToCurve;\n        set\n        {\n            SetProperty(ref _freeDrawingFitToCurve, value);\n\n            UserSettings.All.FreeDrawingFitToCurve = value;\n\n            OnPropertyChanged(nameof(FreeDrawingDrawingAttributes));\n        }\n    }\n\n    public bool FreeDrawingIsHighlighter\n    {\n        get => _freeDrawingIsHighlighter;\n        set\n        {\n            SetProperty(ref _freeDrawingIsHighlighter, value);\n\n            UserSettings.All.FreeDrawingIsHighlighter = value;\n\n            OnPropertyChanged(nameof(FreeDrawingDrawingAttributes));\n            OnPropertyChanged(nameof(FreeDrawingCursor));\n            OnPropertyChanged(nameof(FreeDrawingForceCursor));\n        }\n    }\n\n    public StylusShape FreeDrawingEraserShape => FreeDrawingEraserStylusTip == StylusTip.Ellipse ? new EllipseStylusShape(FreeDrawingEraserBrushWidth, FreeDrawingEraserBrushHeight) : new RectangleStylusShape(FreeDrawingEraserBrushWidth, FreeDrawingEraserBrushHeight);\n\n    public int FreeDrawingEraserBrushWidth\n    {\n        get => _freeDrawingEraserBrushWidth;\n        set\n        {\n            SetProperty(ref _freeDrawingEraserBrushWidth, value);\n\n            UserSettings.All.FreeDrawingEraserWidth = value;\n\n            OnPropertyChanged(nameof(FreeDrawingEraserShape));\n        }\n    }\n\n    public int FreeDrawingEraserBrushHeight\n    {\n        get => _freeDrawingEraserBrushHeight;\n        set\n        {\n            SetProperty(ref _freeDrawingEraserBrushHeight, value);\n\n            UserSettings.All.FreeDrawingEraserHeight = value;\n\n            OnPropertyChanged(nameof(FreeDrawingEraserShape));\n        }\n    }\n\n    public StylusTip FreeDrawingEraserStylusTip\n    {\n        get => _freeDrawingEraserStylusTip;\n        set\n        {\n            SetProperty(ref _freeDrawingEraserStylusTip, value);\n\n            UserSettings.All.FreeDrawingEraserStylusTip = value;\n\n            OnPropertyChanged(nameof(FreeDrawingEraserShape));\n            OnPropertyChanged(nameof(FreeDrawingEraserStylusTipEllipse));\n            OnPropertyChanged(nameof(FreeDrawingEraserStylusTipRectangle));\n        }\n    }\n\n    public bool FreeDrawingEraserStylusTipEllipse\n    {\n        get => FreeDrawingEraserStylusTip is StylusTip.Ellipse;\n        set => FreeDrawingEraserStylusTip = value ? StylusTip.Ellipse : StylusTip.Rectangle;\n    }\n\n    public bool FreeDrawingEraserStylusTipRectangle\n    {\n        get => FreeDrawingEraserStylusTip is StylusTip.Rectangle;\n        set => FreeDrawingEraserStylusTip = value ? StylusTip.Rectangle : StylusTip.Ellipse;\n    }\n\n    public Visibility FreeDrawingEraserBrushSettingsVisibility => FreeDrawingEditingMode is InkCanvasEditingMode.EraseByPoint ? Visibility.Visible : Visibility.Collapsed;\n\n    public Cursor ConvertToCursor(RenderTargetBitmap rtb, Point hotSpot)\n    {\n        using var pngStream = new MemoryStream();\n        \n        var png = new PngBitmapEncoder();\n        png.Frames.Add(BitmapFrame.Create(rtb));\n        png.Save(pngStream);\n\n        //Write cursor header info.\n        using var cursorStream = new MemoryStream();\n        cursorStream.Write([0x00, 0x00], 0, 2); //IconDir: Reserved. Must always be 0.\n        cursorStream.Write([0x02, 0x00], 0, 2); //IconDir: Specifies image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid\n        cursorStream.Write([0x01, 0x00], 0, 2); //IconDir: Specifies number of images in the file.\n        cursorStream.Write([(byte)rtb.PixelWidth], 0, 1); //IconDirEntry: Specifies image width in pixels. Can be any number between 0 and 255. Value 0 means image width is 256 pixels.\n        cursorStream.Write([(byte)rtb.PixelHeight], 0, 1); //IconDirEntry: Specifies image height in pixels. Can be any number between 0 and 255. Value 0 means image height is 256 pixels.\n        cursorStream.Write([0x00], 0, 1); //IconDirEntry: Specifies number of colors in the color palette. Should be 0 if the image does not use a color palette.\n        cursorStream.Write([0x00], 0, 1); //IconDirEntry: Reserved. Should be 0.\n        cursorStream.Write([(byte)hotSpot.X, 0x00], 0, 2); //IconDirEntry: Specifies the horizontal coordinates of the hotspot in number of pixels from the left.\n        cursorStream.Write([(byte)hotSpot.Y, 0x00], 0, 2); //IconDirEntry: Specifies the vertical coordinates of the hotspot in number of pixels from the top.\n        cursorStream.Write([ //IconDirEntry: Specifies the size of the image's data in bytes\n          (byte)(pngStream.Length & 0x000000FF),\n          (byte)((pngStream.Length & 0x0000FF00) >> 0x08),\n          (byte)((pngStream.Length & 0x00FF0000) >> 0x10),\n          (byte)((pngStream.Length & 0xFF000000) >> 0x18)\n        ], 0, 4);\n        cursorStream.Write([0x16, 0x00, 0x00, 0x00], 0, 4); //IconDirEntry: Specifies the offset of BMP or PNG data from the beginning of the ICO/CUR file\n\n        pngStream.Seek(0, SeekOrigin.Begin);\n        pngStream.CopyTo(cursorStream);\n\n        cursorStream.Seek(0, SeekOrigin.Begin);\n        return new Cursor(cursorStream);\n    }\n\n    #region Methods\n\n    internal void Init()\n    {\n        RenderedImage = new WriteableBitmap(Project.Width, Project.Height, Project.HorizontalDpi, Project.VerticalDpi, PixelFormats.Bgra32, null);\n    }\n\n    internal void Render()\n    {\n        //Display mode: By timestamp or frame index.\n        //Display properties in Statistic tab.\n\n        //Get current timestamp/index and render the scene and apply to the RenderedImage property.\n\n        //How are previews going to work?\n        //  Text rendering\n        //  Rendering that needs access to the all layers.\n        //  Rendering that changes the size of the canvas.\n\n        //Preview quality.\n        //Render the list preview for the frames.\n    }\n\n    //How are the frames/data going to be stored in the disk?\n    //Project file for the user + opened project should have a cache\n    //  Project file for user: I'll need to create a file spec.\n    //  Cache folder for the app:\n\n    //As a single cache for each track? (storing as pixel array, to improve performance)\n    //I'll need a companion json with positions and other details.\n    //I also need to store in memory for faster usage.\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/AnimatedImagePreset.cs",
    "content": "namespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage;\n\npublic class AnimatedImagePreset : ExportPreset\n{\n    private bool _looped = true;\n    private bool _repeatForever = true;\n    private int _repeatCount = 2;\n\n\n    public bool Looped\n    {\n        get => _looped;\n        set => SetProperty(ref _looped, value);\n    }\n\n    public bool RepeatForever\n    {\n        get => _repeatForever;\n        set => SetProperty(ref _repeatForever, value);\n    }\n\n    public int RepeatCount\n    {\n        get => _repeatCount;\n        set => SetProperty(ref _repeatCount, value);\n    }\n\n\n    public AnimatedImagePreset()\n    {\n        OutputFilenameKey = \"S.Preset.Filename.Animation\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Apng/ApngPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;\n\npublic class ApngPreset : AnimatedImagePreset\n{\n    public ApngPreset()\n    {\n        Type = ExportFormats.Apng;\n        DefaultExtension = \".apng\";\n        Extension = \".apng\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Apng/EmbeddedApngPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;\n\npublic class EmbeddedApngPreset : ApngPreset\n{\n    private bool _detectUnchanged = true;\n    private bool _paintTransparent = true;\n\n\n    public bool DetectUnchanged\n    {\n        get => _detectUnchanged;\n        set => SetProperty(ref _detectUnchanged, value);\n    }\n\n    public bool PaintTransparent\n    {\n        get => _paintTransparent;\n        set => SetProperty(ref _paintTransparent, value);\n    }\n\n\n    public EmbeddedApngPreset()\n    {\n        Encoder = EncoderTypes.ScreenToGif;\n        ImageId = \"Vector.Logo\";\n    }\n\n    public static EmbeddedApngPreset Default = new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20)\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Apng/FfmpegApngPreset.cs",
    "content": "using System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Apng;\n\n/// <summary>\n/// Apng FFmpeg encoder preset.\n/// ffmpeg -h muxer=apng\n/// ffmpeg -h encoder=apng\n/// </summary>\npublic class FfmpegApngPreset : ApngPreset, IFfmpegPreset\n{\n    private VideoSettingsModes _settingsMode = VideoSettingsModes.Normal;\n    private string _parameters = \"-vsync passthrough \\n{I} \\n-pred mixed \\n-plays 0 \\n-pix_fmt rgba \\n-f apng \\n{O}\";\n    private PredictionMethods _predictionMethods = PredictionMethods.Mixed;\n    private VideoPixelFormats _pixelFormat = VideoPixelFormats.RgbA;\n    private Framerates _framerate = Framerates.Auto;\n    private double _customFramerate = 25d;\n    private Vsyncs _vsync = Vsyncs.Passthrough;\n\n\n    public VideoSettingsModes SettingsMode\n    {\n        get => _settingsMode;\n        set => SetProperty(ref _settingsMode, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Parameters\n    {\n        get => _parameters;\n        set => SetProperty(ref _parameters, value);\n    }\n\n    public PredictionMethods PredictionMethod\n    {\n        get => _predictionMethods;\n        set => SetProperty(ref _predictionMethods, value);\n    }\n\n    public VideoPixelFormats PixelFormat\n    {\n        get => _pixelFormat;\n        set => SetProperty(ref _pixelFormat, value);\n    }\n\n    public Framerates Framerate\n    {\n        get => _framerate;\n        set => SetProperty(ref _framerate, value);\n    }\n\n    public double CustomFramerate\n    {\n        get => _customFramerate;\n        set => SetProperty(ref _customFramerate, value);\n    }\n\n    public Vsyncs Vsync\n    {\n        get => _vsync;\n        set => SetProperty(ref _vsync, value);\n    }\n\n\n    public FfmpegApngPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n    }\n\n    public static List<FfmpegApngPreset> Defaults => new()\n    {\n        new FfmpegApngPreset\n        {\n            TitleKey = \"S.Preset.Apng.Ffmpeg.High.Title\",\n            DescriptionKey = \"S.Preset.Apng.Ffmpeg.High.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20)\n        },\n\n        new FfmpegApngPreset\n        {\n            TitleKey = \"S.Preset.Apng.Ffmpeg.Low.Title\",\n            DescriptionKey = \"S.Preset.Apng.Ffmpeg.Low.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            PixelFormat = VideoPixelFormats.Rgb24,\n            PredictionMethod = PredictionMethods.None,\n            Parameters = \"-vsync passthrough \\n{I} \\n-pred none \\n-plays 0 \\n-pix_fmt rgb24 \\n-f apng \\n{O}\"\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Avif/AvifPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.ViewModel.ExportPresets.Video;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Avif;\n\npublic class AvifPreset : AnimatedImagePreset\n{\n    public AvifPreset()\n    {\n        Type = ExportFormats.Avif;\n        DefaultExtension = \".avif\";\n        Extension = \".avif\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Avif/FfmpegAvifPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;\nusing System.Runtime.Serialization;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Avif;\n\npublic class FfmpegAvifPreset : AvifPreset, IFfmpegPreset\n{\n    private VideoSettingsModes _settingsMode = VideoSettingsModes.Normal;\n    private string _parameters = \"-vsync passthrough \\n{I} \\n-c:v libaom-av1 \\n-quality 75 \\n-loop 0 \\n-f avif \\n{O}\";\n    private VideoCodecPresets _codecPreset = VideoCodecPresets.Default;\n    private int _quality = 75; // A lower value may be better for the default\n    private VideoCodecs _videoCodec = VideoCodecs.LibAom;\n    private HardwareAccelerationModes _hardwareAcceleration = HardwareAccelerationModes.Auto;\n    private VideoPixelFormats _pixelFormat = VideoPixelFormats.Auto;\n    private Framerates _framerate = Framerates.Auto;\n    private double _customFramerate = 25d;\n    private Vsyncs _vsync = Vsyncs.Passthrough;\n\n    public VideoSettingsModes SettingsMode\n    {\n        get => _settingsMode;\n        set => SetProperty(ref _settingsMode, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Parameters\n    {\n        get => _parameters;\n        set => SetProperty(ref _parameters, value);\n    }\n\n    public VideoCodecPresets CodecPreset\n    {\n        get => _codecPreset;\n        set => SetProperty(ref _codecPreset, value);\n    }\n\n    public int Quality\n    {\n        get => _quality;\n        set => SetProperty(ref _quality, value);\n    }\n\n    public VideoCodecs VideoCodec\n    {\n        get => _videoCodec;\n        set => SetProperty(ref _videoCodec, value);\n    }\n\n    public HardwareAccelerationModes HardwareAcceleration\n    {\n        get => _hardwareAcceleration;\n        set => SetProperty(ref _hardwareAcceleration, value);\n    }\n\n    public VideoPixelFormats PixelFormat\n    {\n        get => _pixelFormat;\n        set => SetProperty(ref _pixelFormat, value);\n    }\n\n    public Framerates Framerate\n    {\n        get => _framerate;\n        set => SetProperty(ref _framerate, value);\n    }\n\n    public double CustomFramerate\n    {\n        get => _customFramerate;\n        set => SetProperty(ref _customFramerate, value);\n    }\n\n    public Vsyncs Vsync\n    {\n        get => _vsync;\n        set => SetProperty(ref _vsync, value);\n    }\n\n\n    public FfmpegAvifPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        IsEncoderExpanded = false;\n        RequiresFfmpeg = true;\n    }\n\n    public static List<FfmpegAvifPreset> Defaults => new()\n    {\n        new FfmpegAvifPreset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2024, 09, 18)\n        },\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Bpg/BpgPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Bpg;\n\npublic class BpgPreset : AnimatedImagePreset\n{\n    public BpgPreset()\n    {\n        Type = ExportFormats.Bpg;\n        DefaultExtension = \".bpg\";\n        Extension = \".bpg\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/EmbeddedGifPreset.cs",
    "content": "using System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\n/// <summary>\n/// Settings for the a Gif preset with the built-in (embedded) encoder.\n/// </summary>\npublic class EmbeddedGifPreset : GifPreset\n{\n    private ColorQuantizationTypes _quantizer = ColorQuantizationTypes.Neural;\n    private int _samplingFactor = 1;\n    private int _maximumColorCount = 256;\n    private bool _enableTransparency;\n    private bool _selectTransparencyColor;\n    private Color _transparencyColor = Colors.Black;\n    private bool _detectUnchanged = true;\n    private bool _paintTransparent = true;\n    private Color _chromaKey = Color.FromRgb(50, 205, 50);\n\n\n    public ColorQuantizationTypes Quantizer\n    {\n        get => _quantizer;\n        set => SetProperty(ref _quantizer, value);\n    }\n\n    public int SamplingFactor\n    {\n        get => _samplingFactor;\n        set => SetProperty(ref _samplingFactor, value);\n    }\n\n    public int MaximumColorCount\n    {\n        get => _maximumColorCount;\n        set => SetProperty(ref _maximumColorCount, value);\n    }\n\n    public bool EnableTransparency\n    {\n        get => _enableTransparency;\n        set => SetProperty(ref _enableTransparency, value);\n    }\n\n    public bool SelectTransparencyColor\n    {\n        get => _selectTransparencyColor;\n        set => SetProperty(ref _selectTransparencyColor, value);\n    }\n\n    public Color TransparencyColor\n    {\n        get => _transparencyColor;\n        set => SetProperty(ref _transparencyColor, value);\n    }\n\n    public bool DetectUnchanged\n    {\n        get => _detectUnchanged;\n        set => SetProperty(ref _detectUnchanged, value);\n    }\n\n    public bool PaintTransparent\n    {\n        get => _paintTransparent;\n        set => SetProperty(ref _paintTransparent, value);\n    }\n\n    public Color ChromaKey\n    {\n        get => _chromaKey;\n        set => SetProperty(ref _chromaKey, value);\n    }\n\n\n    public EmbeddedGifPreset()\n    {\n        Encoder = EncoderTypes.ScreenToGif;\n        ImageId = \"Vector.Logo\";\n    }\n\n    public static List<EmbeddedGifPreset> Defaults => new()\n    {\n        new EmbeddedGifPreset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelected = true,\n            IsDefault = true,\n            IsSelectedForEncoder = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quantizer = ColorQuantizationTypes.Neural,\n            SamplingFactor = 10\n        },\n\n        new EmbeddedGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Embedded.High.Title\",\n            DescriptionKey = \"S.Preset.Gif.Embedded.High.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            IsSelectedForEncoder = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quantizer = ColorQuantizationTypes.Neural\n        },\n\n        new EmbeddedGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Embedded.Transparent.Title\",\n            DescriptionKey = \"S.Preset.Gif.Embedded.Transparent.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quantizer = ColorQuantizationTypes.Neural,\n            EnableTransparency = true,\n            DetectUnchanged = false,\n            PaintTransparent = false,\n        },\n\n        new EmbeddedGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Embedded.Graphics.Title\",\n            DescriptionKey = \"S.Preset.Gif.Embedded.Graphics.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quantizer = ColorQuantizationTypes.Octree\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/FfmpegGifPreset.cs",
    "content": "using System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\n/// <summary>\n/// Gif FFmpeg encoder preset.\n/// ffmpeg -h muxer=gif\n/// ffmpeg -h encoder=gif\n/// </summary>\npublic class FfmpegGifPreset : GifPreset, IFfmpegPreset\n{\n    private VideoSettingsModes _settingsMode = VideoSettingsModes.Normal;\n    private string _parameters = \"-vsync passthrough \\n{I} \\n-loop 0 \\n-lavfi palettegen=stats_mode=diff[pal],[0:v][pal]paletteuse=new=1:dither=sierra2_4a:diff_mode=rectangle \\n-f gif \\n{O}\";\n    private DitherMethods _dither = DitherMethods.Sierra2Lite;\n    private int _bayerScale = 2;\n    private VideoPixelFormats _pixelFormat = VideoPixelFormats.Auto;\n    private Framerates _framerate = Framerates.Auto;\n    private double _customFramerate = 25d;\n    private Vsyncs _vsync = Vsyncs.Passthrough;\n\n    public VideoSettingsModes SettingsMode\n    {\n        get => _settingsMode;\n        set => SetProperty(ref _settingsMode, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Parameters\n    {\n        get => _parameters;\n        set => SetProperty(ref _parameters, value);\n    }\n\n    public DitherMethods Dither\n    {\n        get => _dither;\n        set => SetProperty(ref _dither, value);\n    }\n\n    public int BayerScale\n    {\n        get => _bayerScale;\n        set => SetProperty(ref _bayerScale, value);\n    }\n\n    public VideoPixelFormats PixelFormat\n    {\n        get => _pixelFormat;\n        set => SetProperty(ref _pixelFormat, value);\n    }\n\n    public Framerates Framerate\n    {\n        get => _framerate;\n        set => SetProperty(ref _framerate, value);\n    }\n\n    public double CustomFramerate\n    {\n        get => _customFramerate;\n        set => SetProperty(ref _customFramerate, value);\n    }\n\n    public Vsyncs Vsync\n    {\n        get => _vsync;\n        set => SetProperty(ref _vsync, value);\n    }\n\n    public FfmpegGifPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n    }\n\n        \n    public static List<FfmpegGifPreset> Defaults => new()\n    {\n        new FfmpegGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Ffmpeg.High.Title\",\n            DescriptionKey = \"S.Preset.Gif.Ffmpeg.High.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            IsSelectedForEncoder = true,\n            CreationDate = new DateTime(2021, 02, 20)\n        },\n\n        new FfmpegGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Ffmpeg.Low.Title\",\n            DescriptionKey = \"S.Preset.Gif.Ffmpeg.Low.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            UseGlobalColorTable = true,\n            Dither = DitherMethods.Bayer,\n            BayerScale = 3,\n            Parameters = \"-vsync passthrough \\n{I} \\n-loop 0 \\n-lavfi palettegen=stats_mode=diff[pal],[0:v][pal]paletteuse=dither=bayer:bayer_scale=3:diff_mode=rectangle \\n-f gif \\n{O}\"\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/GifPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\npublic class GifPreset : AnimatedImagePreset\n{\n    private bool _useGlobalColorTable;\n\n\n    public bool UseGlobalColorTable\n    {\n        get => _useGlobalColorTable;\n        set => SetProperty(ref _useGlobalColorTable, value);\n    }\n\n\n    public GifPreset()\n    {\n        Type = ExportFormats.Gif;\n        DefaultExtension = \".gif\";\n        Extension = \".gif\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/GifskiGifPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\npublic class GifskiGifPreset : GifPreset\n{\n    private bool _fast;\n    private int _quality = 10;\n\n\n    public bool Fast\n    {\n        get => _fast;\n        set => SetProperty(ref _fast, value);\n    }\n\n    public int Quality\n    {\n        get => _quality;\n        set => SetProperty(ref _quality, value);\n    }\n\n\n    public GifskiGifPreset()\n    {\n        Encoder = EncoderTypes.Gifski;\n        ImageId = \"Vector.Gifski\";\n        RequiresGifski = true;\n    }\n        \n        \n    public static List<GifskiGifPreset> Defaults =>\n    [\n        new GifskiGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Gifski.High.Title\",\n            DescriptionKey = \"S.Preset.Gif.Gifski.High.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quality = 80,\n            Fast = false\n        },\n\n        new GifskiGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Gifski.Low.Title\",\n            DescriptionKey = \"S.Preset.Gif.Gifski.Low.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quality = 20,\n            Fast = false\n        },\n            \n        new GifskiGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.Gifski.Fast.Title\",\n            DescriptionKey = \"S.Preset.Gif.Gifski.Fast.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quality = 20,\n            Fast = true\n        }\n    ];\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/KGySoftGifPreset.cs",
    "content": "#region Usings\n\nusing System.Windows.Media;\n\nusing KGySoft.Drawing.Imaging;\n\nusing ScreenToGif.Domain.Enums;\n\n#endregion\n\n#nullable enable\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\n/// <summary>\n/// Represents the persistable settings for KGy SOFT GIF Encoder.\n/// </summary>\npublic class KGySoftGifPreset : GifPreset\n{\n    #region Fields\n\n    private string? _quantizerId;\n    private string? _dithererId;\n    private Color _backColor = Colors.Silver;\n    private byte _alphaThreshold = 128;\n    private byte _whiteThreshold = 128;\n    private bool _directMapping;\n    private int _paletteSize = 256;\n    private byte? _bitLevel;\n    private float _strength;\n    private int? _seed;\n    private bool _serpentine;\n    private bool _allowDeltaFrames = true;\n    private bool _allowClippedFrames = true;\n    private byte _deltaTolerance;\n    private bool _linearColorSpace;\n\n    #endregion\n\n    #region Properties\n\n    #region Static Properties\n\n    /// <summary>\n    /// Gets the defaults presets for the <see cref=\"KGySoftGifPreset\"/> type.\n    /// </summary>\n    public static KGySoftGifPreset[] Defaults => new[]\n    {\n        new KGySoftGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.KGySoft.Default.Title\",\n            DescriptionKey = \"S.Preset.Gif.KGySoft.Default.Description\",\n            HasAutoSave = true,\n            IsSelected = true,\n            IsDefault = true,\n            IsSelectedForEncoder = true,\n            CreationDate = new DateTime(2024, 1, 25),\n            QuantizerId = $\"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.MedianCut)}\",\n        },\n        // Leaving here for reference because if someone already has a saved config with it, then it's still relevant.\n        //new KGySoftGifPreset\n        //{\n        //    TitleKey = \"S.Preset.Gif.KGySoft.Balanced.Title\",\n        //    DescriptionKey = \"S.Preset.Gif.KGySoft.Balanced.Description\",\n        //    HasAutoSave = true,\n        //    IsDefault = true,\n        //    CreationDate = new DateTime(2021, 12, 15),\n        //    QuantizerId = $\"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.Wu)}\",\n        //},\n        new KGySoftGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.KGySoft.High.Title\",\n            DescriptionKey = \"S.Preset.Gif.KGySoft.High.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 12, 15),\n            QuantizerId = $\"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.Wu)}\",\n            DithererId = $\"{nameof(ErrorDiffusionDitherer)}.{nameof(ErrorDiffusionDitherer.FloydSteinberg)}\",\n            BitLevel = 7,\n            LinearColorSpace = true\n        },\n        new KGySoftGifPreset\n        {\n            TitleKey = \"S.Preset.Gif.KGySoft.Fast.Title\",\n            DescriptionKey = \"S.Preset.Gif.KGySoft.Fast.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 12, 15),\n            QuantizerId = $\"{nameof(PredefinedColorsQuantizer)}.{nameof(PredefinedColorsQuantizer.SystemDefault8BppPalette)}\",\n            DithererId = $\"{nameof(OrderedDitherer)}.{nameof(OrderedDitherer.Bayer8x8)}\",\n        },\n   };\n\n    #endregion\n\n    #region Instance Properties\n\n    #region Quantizer Settings\n\n    /// <summary>\n    /// Gets or sets the quantizer identifier in {TypeName}.{MethodName} format.\n    /// </summary>\n    public string? QuantizerId\n    {\n        get => _quantizerId;\n        set => SetProperty(ref _quantizerId, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the background color for alpha pixels that will not be transparent in the result.\n    /// </summary>\n    public Color BackColor\n    {\n        get => _backColor;\n        set => SetProperty(ref _backColor, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the alpha threshold under which a color is considered transparent.\n    /// This property is ignored by quantizers that do not support transparency.\n    /// </summary>\n    public byte AlphaThreshold\n    {\n        get => _alphaThreshold;\n        set => SetProperty(ref _alphaThreshold, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the lowest input brightness to consider the result color white.\n    /// This property is considered only by the black and white quantizer.\n    /// </summary>\n    public byte WhiteThreshold\n    {\n        get => _whiteThreshold;\n        set => SetProperty(ref _whiteThreshold, value);\n    }\n\n    /// <summary>\n    /// Gets or sets whether the palette entries are mapped from the color directly.\n    /// This property is ignored by quantizers that do not support direct mapping.\n    /// </summary>\n    public bool DirectMapping\n    {\n        get => _directMapping;\n        set => SetProperty(ref _directMapping, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the maximum palette size per frame.\n    /// This property is ignored by predefined colors quantizers.\n    /// </summary>\n    public int PaletteSize\n    {\n        get => _paletteSize;\n        set => SetProperty(ref _paletteSize, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the bit level used by an optimized quantizer.\n    /// This property is ignored by predefined colors quantizers.\n    /// </summary>\n    public byte? BitLevel\n    {\n        get => _bitLevel;\n        set => SetProperty(ref _bitLevel, value);\n    }\n\n    /// <summary>\n    /// Gets or sets whether the quantizing is processed in the linear color space (as opposed to sRGB).\n    /// </summary>\n    public bool LinearColorSpace\n    {\n        get => _linearColorSpace;\n        set => SetProperty(ref _linearColorSpace, value);\n    }\n\n    #endregion\n\n    #region Ditherer Settings\n\n    /// <summary>\n    /// Gets or sets the ditherer identifier in {TypeName}[.{PropertyName}] format.\n    /// </summary>\n    public string? DithererId\n    {\n        get => _dithererId;\n        set => SetProperty(ref _dithererId, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the strength of the ditherer.\n    /// This property is ignored by error diffusion ditherers.\n    /// </summary>\n    public float Strength\n    {\n        get => _strength;\n        set => SetProperty(ref _strength, value);\n    }\n\n    /// <summary>\n    /// Gets or sets the seed of ditherer.\n    /// This property is ignored by non-randomized ditherers.\n    /// </summary>\n    public int? Seed\n    {\n        get => _seed;\n        set => SetProperty(ref _seed, value);\n    }\n\n    /// <summary>\n    /// Gets or sets whether the ditherer uses serpentine processing.\n    /// This property is used only by error diffusion ditherers.\n    /// </summary>\n    public bool IsSerpentineProcessing\n    {\n        get => _serpentine;\n        set => SetProperty(ref _serpentine, value);\n    }\n\n    #endregion\n\n    #region Animation Settings\n\n    /// <summary>\n    /// Gets or sets whether the encoder is allowed to save the changed image parts.\n    /// </summary>\n    public bool AllowDeltaFrames\n    {\n        get => _allowDeltaFrames;\n        set => SetProperty(ref _allowDeltaFrames, value);\n    }\n\n    /// <summary>\n    /// Gets or sets whether the encoder is allowed clip the transparent border of the frames.\n    /// </summary>\n    public bool AllowClippedFrames\n    {\n        get => _allowClippedFrames;\n        set => SetProperty(ref _allowClippedFrames, value);\n    }\n\n    /// <summary>\n    /// If <see cref=\"AllowDeltaFrames\"/> is <see langword=\"true\"/>, then gets or sets the allowed maximum tolerance when detecting changes.\n    /// </summary>\n    public byte DeltaTolerance\n    {\n        get => _deltaTolerance;\n        set => SetProperty(ref _deltaTolerance, value);\n    }\n\n    #endregion\n\n    #endregion\n\n    #endregion\n\n    #region Constructors\n\n    /// <summary>\n    /// Instantiates a new instance of the <see cref=\"KGySoftGifPreset\"/> class.\n    /// </summary>\n    public KGySoftGifPreset()\n    {\n        Encoder = EncoderTypes.KGySoft;\n        ImageId = \"Vector.KGySoft\";\n        RepeatCount = 0;\n    }\n\n    #endregion\n}\n"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/SystemGifPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Gif;\n\npublic class SystemGifPreset : GifPreset\n{\n    public SystemGifPreset()\n    {\n        Encoder = EncoderTypes.System;\n        ImageId = \"Vector.Net\";\n    }\n\n\n    public static SystemGifPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Gif.System.Low.Title\",\n        DescriptionKey = \"S.Preset.Gif.System.Low.Description\",\n        HasAutoSave = true,\n        IsDefault = true,\n        IsSelectedForEncoder = true,\n        CreationDate = new DateTime(2021, 02, 20)\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Webp/FfmpegWebpPreset.cs",
    "content": "using System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;\n\n/// <summary>\n/// Webp FFmpeg encoder preset.\n/// ffmpeg -h muxer=webp\n/// ffmpeg -h encoder=libwebp_anim\n/// </summary>\npublic class FfmpegWebpPreset : WebpPreset, IFfmpegPreset\n{\n    private VideoSettingsModes _settingsMode = VideoSettingsModes.Normal;\n    private string _parameters = \"-vsync passthrough \\n{I} \\n-c:v libwebp_anim \\n-lossless 0 \\n-quality 75 \\n-loop 0 \\n-f webp \\n{O}\";\n    private VideoCodecPresets _codecPreset = VideoCodecPresets.Default;\n    private int _quality = 75;\n    private bool _lossless = true;\n    private VideoPixelFormats _pixelFormat = VideoPixelFormats.Auto;\n    private Framerates _framerate = Framerates.Auto;\n    private double _customFramerate = 25d;\n    private Vsyncs _vsync = Vsyncs.Passthrough;\n\n    public VideoSettingsModes SettingsMode\n    {\n        get => _settingsMode;\n        set => SetProperty(ref _settingsMode, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Parameters\n    {\n        get => _parameters;\n        set => SetProperty(ref _parameters, value);\n    }\n\n    public VideoCodecPresets CodecPreset\n    {\n        get => _codecPreset;\n        set => SetProperty(ref _codecPreset, value);\n    }\n\n    public int Quality\n    {\n        get => _quality;\n        set => SetProperty(ref _quality, value);\n    }\n\n    public bool Lossless\n    {\n        get => _lossless;\n        set => SetProperty(ref _lossless, value);\n    }\n\n    public VideoPixelFormats PixelFormat\n    {\n        get => _pixelFormat;\n        set => SetProperty(ref _pixelFormat, value);\n    }\n\n    public Framerates Framerate\n    {\n        get => _framerate;\n        set => SetProperty(ref _framerate, value);\n    }\n\n    public double CustomFramerate\n    {\n        get => _customFramerate;\n        set => SetProperty(ref _customFramerate, value);\n    }\n\n    public Vsyncs Vsync\n    {\n        get => _vsync;\n        set => SetProperty(ref _vsync, value);\n    }\n\n\n    public FfmpegWebpPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        IsEncoderExpanded = false;\n        RequiresFfmpeg = true;\n    }\n\n    public static List<FfmpegWebpPreset> Defaults => new()\n    {\n        new FfmpegWebpPreset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20)\n        },\n\n        new FfmpegWebpPreset\n        {\n            TitleKey = \"S.Preset.Webp.Ffmpeg.High.Title\",\n            DescriptionKey = \"S.Preset.Webp.Ffmpeg.High.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            Quality = 100,\n            Parameters = \"-vsync passthrough \\n{I} \\n-c:v libwebp_anim \\n-lossless 0 \\n-quality 100 \\n-loop 0 \\n-f webp \\n{O}\"\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Webp/WebpPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Webp;\n\npublic class WebpPreset : AnimatedImagePreset\n{\n    public WebpPreset()\n    {\n        Type = ExportFormats.Webp;\n        DefaultExtension = \".webp\";\n        Extension = \".webp\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/ExportPreset.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.ViewModel.ExportPresets;\n\npublic abstract class ExportPreset : BindableBase, IExportPreset\n{\n    private ExportFormats _type;\n    private EncoderTypes _encoder;\n    private string _title;\n    private string _titleKey;\n    private string _description;\n    private string _descriptionKey;\n    private string _imageId;\n    private string _defaultExtension;\n    private bool _isSelected;\n    private bool _isSelectedForEncoder;\n    private bool _isDefault;\n    private bool _hasAutoSave;\n    private DateTime _creationDate;\n    private bool _isEncoderExpanded = true;\n    private bool _isEncoderOptionsExpanded = true;\n    private bool _isPartialExportExpanded = true;\n    private bool _isExportOptionsExpanded = false;\n    private bool _isUploadExpanded = true;\n    private bool _isOutputExpanded = true;\n    private bool _exportPartially;\n    private PartialExportModes _partialExport = PartialExportModes.Selection;\n    private TimeSpan _partialExportTimeStart = TimeSpan.Zero;\n    private TimeSpan _partialExportTimeEnd = TimeSpan.Zero;\n    private int _partialExportFrameStart = 0;\n    private int _partialExportFrameEnd = 0;\n    private string _partialExportFrameExpression;\n    private bool _pickLocation = true;\n    private OverwriteModes _overwriteMode;\n    private bool _exportAsProjectToo;\n    private bool _uploadFile;\n    private string _uploadService;\n    private bool _saveToClipboard;\n    private CopyModes _copyType = CopyModes.File;\n    private bool _executeCustomCommands;\n    private string _customCommands = \"{p}\";\n    private string _outputFolder;\n    private string _outputFilename;\n    private string _outputFilenameKey;\n    private string _extension;\n\n\n    public ExportFormats Type\n    {\n        get => _type;\n        set => SetProperty(ref _type, value);\n    }\n\n    public EncoderTypes Encoder\n    {\n        get => _encoder;\n        set => SetProperty(ref _encoder, value);\n    }\n\n    public string Title\n    {\n        get => _title;\n        set => SetProperty(ref _title, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string TitleKey\n    {\n        get => _titleKey;\n        set => SetProperty(ref _titleKey, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Description\n    {\n        get => _description;\n        set => SetProperty(ref _description, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string DescriptionKey\n    {\n        get => _descriptionKey;\n        set => SetProperty(ref _descriptionKey, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string ImageId\n    {\n        get => _imageId;\n        set => SetProperty(ref _imageId, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string DefaultExtension\n    {\n        get => _defaultExtension;\n        set => SetProperty(ref _defaultExtension, value);\n    }\n\n    /// <summary>\n    /// True if this preset was the latest selected preset for the selected file type.\n    /// </summary>\n    public bool IsSelected\n    {\n        get => _isSelected;\n        set => SetProperty(ref _isSelected, value);\n    }\n\n    /// <summary>\n    /// True if this preset was the latest selected preset for the selected file type and encoder.\n    /// </summary>\n    public bool IsSelectedForEncoder\n    {\n        get => _isSelectedForEncoder;\n        set => SetProperty(ref _isSelectedForEncoder, value);\n    }\n\n    /// <summary>\n    /// True if this preset was provided by the app.\n    /// </summary>\n    public bool IsDefault\n    {\n        get => _isDefault;\n        set => SetProperty(ref _isDefault, value);\n    }\n\n    /// <summary>\n    /// True if this preset automatically saves it's new property values when the user changes something.\n    /// </summary>\n    public bool HasAutoSave\n    {\n        get => _hasAutoSave;\n        set => SetProperty(ref _hasAutoSave, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public DateTime CreationDate\n    {\n        get => _creationDate;\n        set => SetProperty(ref _creationDate, value);\n    }\n\n\n    public bool IsEncoderExpanded\n    {\n        get => _isEncoderExpanded;\n        set => SetProperty(ref _isEncoderExpanded, value);\n    }\n\n    public bool IsEncoderOptionsExpanded\n    {\n        get => _isEncoderOptionsExpanded;\n        set => SetProperty(ref _isEncoderOptionsExpanded, value);\n    }\n\n    public bool IsExportOptionsExpanded\n    {\n        get => _isExportOptionsExpanded;\n        set => SetProperty(ref _isExportOptionsExpanded, value);\n    }\n\n    public bool IsPartialExportExpanded\n    {\n        get => _isPartialExportExpanded;\n        set => SetProperty(ref _isPartialExportExpanded, value);\n    }\n        \n    public bool IsOutputExpanded\n    {\n        get => _isOutputExpanded;\n        set => SetProperty(ref _isOutputExpanded, value);\n    }\n\n    public bool IsUploadExpanded\n    {\n        get => _isUploadExpanded;\n        set => SetProperty(ref _isUploadExpanded, value);\n    }\n\n\n    public bool ExportPartially\n    {\n        get => _exportPartially;\n        set => SetProperty(ref _exportPartially, value);\n    }\n\n    public PartialExportModes PartialExport\n    {\n        get => _partialExport;\n        set => SetProperty(ref _partialExport, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public TimeSpan PartialExportTimeStart\n    {\n        get => _partialExportTimeStart;\n        set => SetProperty(ref _partialExportTimeStart, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public TimeSpan PartialExportTimeEnd\n    {\n        get => _partialExportTimeEnd;\n        set => SetProperty(ref _partialExportTimeEnd, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public int PartialExportFrameStart\n    {\n        get => _partialExportFrameStart;\n        set => SetProperty(ref _partialExportFrameStart, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public int PartialExportFrameEnd\n    {\n        get => _partialExportFrameEnd;\n        set => SetProperty(ref _partialExportFrameEnd, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string PartialExportFrameExpression\n    {\n        get => _partialExportFrameExpression;\n        set => SetProperty(ref _partialExportFrameExpression, value);\n    }\n        \n\n    public bool PickLocation\n    {\n        get => _pickLocation;\n        set => SetProperty(ref _pickLocation, value);\n    }\n\n    public OverwriteModes OverwriteMode\n    {\n        get => _overwriteMode;\n        set => SetProperty(ref _overwriteMode, value);\n    }\n\n    public bool ExportAsProjectToo\n    {\n        get => _exportAsProjectToo;\n        set => SetProperty(ref _exportAsProjectToo, value);\n    }\n\n    public bool UploadFile\n    {\n        get => _uploadFile;\n        set => SetProperty(ref _uploadFile, value);\n    }\n\n    public string UploadService\n    {\n        get => _uploadService;\n        set => SetProperty(ref _uploadService, value);\n    }\n\n    public bool SaveToClipboard\n    {\n        get => _saveToClipboard;\n        set => SetProperty(ref _saveToClipboard, value);\n    }\n\n    public CopyModes CopyType\n    {\n        get => _copyType;\n        set => SetProperty(ref _copyType, value);\n    }\n\n    public bool ExecuteCustomCommands\n    {\n        get => _executeCustomCommands;\n        set => SetProperty(ref _executeCustomCommands, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string CustomCommands\n    {\n        get => _customCommands;\n        set => SetProperty(ref _customCommands, value);\n    }\n\n\n    [DataMember(EmitDefaultValue = false)]\n    public string OutputFolder\n    {\n        get => _outputFolder;\n        set => SetProperty(ref _outputFolder, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string OutputFilename\n    {\n        get => _outputFilename;\n        set => SetProperty(ref _outputFilename, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string OutputFilenameKey\n    {\n        get => _outputFilenameKey;\n        set => SetProperty(ref _outputFilenameKey, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Extension\n    {\n        get => _extension;\n        set => SetProperty(ref _extension, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool CanExportMultipleFiles { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool RequiresFfmpeg { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool RequiresGifski { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public int Width { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public int Height { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public double Scale { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string ResolvedFilename { get; set; }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string FullPath { get; set; }\n\n\n    protected ExportPreset()\n    {\n        CreationDate = DateTime.UtcNow;\n    }\n\n\n    public virtual Task<ValidatedEventArgs> IsValid()\n    {\n        if (!PickLocation && !UploadFile && !SaveToClipboard)\n            return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Type\", StatusReasons.InvalidState));\n\n        if (PickLocation)\n        {\n            if (string.IsNullOrWhiteSpace(Extension))\n            {\n                if (!string.IsNullOrWhiteSpace(DefaultExtension))\n                    Extension = DefaultExtension;\n                else\n                    return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Extension\", StatusReasons.EmptyProperty));\n            }\n\n            if (string.IsNullOrWhiteSpace(OutputFolder))\n                return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Folder\", StatusReasons.EmptyProperty));\n\n            if (OutputFolder.ToCharArray().Any(x => Path.GetInvalidPathChars().Contains(x)))\n                return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Folder.Invalid\", StatusReasons.InvalidState));\n\n            if (!Directory.Exists(OutputFolder))\n                return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Folder.NotExists\", StatusReasons.InvalidState));\n\n            if (string.IsNullOrWhiteSpace(OutputFilename))\n                return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Filename\", StatusReasons.EmptyProperty));\n\n            ResolvedFilename = PathHelper.ReplaceRegexInName(OutputFilename); //TODO: Cyclical reference\n\n            if (ResolvedFilename.ToCharArray().Any(x => Path.GetInvalidFileNameChars().Contains(x)))\n                return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Filename.Invalid\", StatusReasons.InvalidState));\n        }\n\n        //Upload set, but no service selected.\n        if (UploadFile && string.IsNullOrWhiteSpace(UploadService))\n            return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Upload.None\", StatusReasons.InvalidState));\n\n        //Copy link to clipboard set, but no upload set.\n        if (SaveToClipboard && CopyType == CopyModes.Link && !UploadFile)\n            return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Copy.Link\", StatusReasons.InvalidState));\n\n        //Custom command not set.\n        if (ExecuteCustomCommands && string.IsNullOrWhiteSpace(CustomCommands))\n            return Task.FromResult(new ValidatedEventArgs(\"S.SaveAs.Warning.Commands.Empty\", StatusReasons.EmptyProperty));\n\n        return Task.FromResult((ValidatedEventArgs) null);\n    }\n\n    public ExportPreset ShallowCopy()\n    {\n        return (ExportPreset) MemberwiseClone();\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Image/BmpPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Image;\n\npublic class BmpPreset : ImagePreset\n{\n    public BmpPreset()\n    {\n        Type = ExportFormats.Bmp;\n        ImageId = \"Vector.Logo\";\n        DefaultExtension = \".bmp\";\n        Extension = \".bmp\";\n    }\n\n\n    public static BmpPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20),\n\n        ExportPartially = true,\n        PartialExport = PartialExportModes.Selection\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Image/ImagePreset.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Image;\n\npublic class ImagePreset : ExportPreset\n{\n    private bool _zipFiles;\n\n\n    public bool ZipFiles\n    {\n        get => _zipFiles;\n        set\n        {\n            SetProperty(ref _zipFiles, value);\n\n            CanExportMultipleFiles = !value;\n            Extension = value ? \".zip\" : DefaultExtension;\n        }\n    }\n\n    /// <summary>\n    /// Internal accessor for controlling the switch of the ZipFiles property without altering the extension. \n    /// </summary>\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool ZipFilesInternal\n    {\n        get => _zipFiles;\n        set\n        {\n            SetProperty(ref _zipFiles, value);\n            OnPropertyChanged(nameof(ZipFiles));\n\n            CanExportMultipleFiles = !value;\n        }\n    }\n\n\n    public ImagePreset()\n    {\n        OutputFilenameKey = \"S.Preset.Filename.Image\";\n        IsEncoderExpanded = false;\n        ExportPartially = true;\n        PartialExport = PartialExportModes.Selection;\n        CanExportMultipleFiles = true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Image/JpegPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Image;\n\npublic class JpegPreset : ImagePreset\n{\n    public JpegPreset()\n    {\n        Type = ExportFormats.Jpeg;\n        ImageId = \"Vector.Logo\";\n        DefaultExtension = \".jpeg\";\n        Extension = \".jpeg\";\n    }\n\n\n    public static JpegPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20),\n\n        ExportPartially = true,\n        PartialExport = PartialExportModes.Selection\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Image/PngPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Image;\n\npublic class PngPreset : ImagePreset\n{\n    public PngPreset()\n    {\n        Type = ExportFormats.Png;\n        ImageId = \"Vector.Logo\";\n        DefaultExtension = \".png\";\n        Extension = \".png\";\n    }\n\n\n    public static PngPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20),\n\n        ExportPartially = true,\n        PartialExport = PartialExportModes.Selection\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Other/PsdPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Other;\n\npublic class PsdPreset : ExportPreset\n{\n    private bool _compressImage = true;\n    private bool _saveTimeline = true;\n    private bool _maximizeCompatibility = true;\n\n\n    public bool CompressImage\n    {\n        get => _compressImage;\n        set => SetProperty(ref _compressImage, value);\n    }\n\n    public bool SaveTimeline\n    {\n        get => _saveTimeline;\n        set => SetProperty(ref _saveTimeline, value);\n    }\n\n    public bool MaximizeCompatibility\n    {\n        get => _maximizeCompatibility;\n        set => SetProperty(ref _maximizeCompatibility, value);\n    }\n\n\n    public PsdPreset()\n    {\n        Type = ExportFormats.Psd;\n        ImageId = \"Vector.Logo\";\n        OutputFilenameKey = \"S.Preset.Filename.Image\";\n        DefaultExtension = \".psd\";\n        Extension = \".psd\";\n        IsEncoderExpanded = false;\n    }\n\n\n    public static PsdPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20),\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Other/StgPreset.cs",
    "content": "using System.IO.Compression;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Other;\n\npublic class StgPreset : ExportPreset\n{\n    private CompressionLevel _compressionLevel = CompressionLevel.Optimal;\n\n\n    public CompressionLevel CompressionLevel\n    {\n        get => _compressionLevel;\n        set => SetProperty(ref _compressionLevel, value);\n    }\n\n\n    public StgPreset()\n    {\n        Type = ExportFormats.Stg;\n        ImageId = \"Vector.Logo\";\n        OutputFilenameKey = \"S.Preset.Filename.Project\";\n        DefaultExtension = \".stg\";\n        Extension = \".stg\";\n        IsEncoderExpanded = false;\n    }\n\n\n    public static StgPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20),\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Avi/AviPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Avi;\n\npublic class AviPreset : VideoPreset\n{\n    public AviPreset()\n    {\n        Type = ExportFormats.Avi;\n        DefaultExtension = \".avi\";\n        Extension = \".avi\";\n        IsAncientContainer = true;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Avi/FfmpegAviPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Avi;\n\npublic class FfmpegAviPreset : AviPreset, IFfmpegPreset\n{\n    public FfmpegAviPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n\n        //Defaults.\n        VideoCodec = VideoCodecs.Mpeg4;\n        CodecPreset = VideoCodecPresets.None;\n        HardwareAcceleration = HardwareAccelerationModes.Auto;\n        Pass = 2;\n        BitRate = 5;\n        BitRateUnit = RateUnits.Megabits;\n        PixelFormat = VideoPixelFormats.Yuv420p;\n        Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v mpeg4 -vtag xvid \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-b:v 5M \\n-pass 2 \\n-f avi \\n{O}\";\n    }\n\n    public static FfmpegAviPreset Default => new()\n    {\n        TitleKey = \"S.Preset.Default.Title\",\n        DescriptionKey = \"S.Preset.Default.Description\",\n        HasAutoSave = true,\n        IsSelectedForEncoder = true,\n        IsDefault = true,\n        CreationDate = new DateTime(2021, 02, 20),\n\n        VideoCodec = VideoCodecs.Mpeg4,\n        CodecPreset = VideoCodecPresets.None,\n        HardwareAcceleration = HardwareAccelerationModes.Auto,\n        Pass = 2,\n        BitRate = 5,\n        BitRateUnit = RateUnits.Megabits,\n        PixelFormat = VideoPixelFormats.Yuv420p,\n        Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v mpeg4 -vtag xvid \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-b:v 5M \\n-pass 2 \\n-f avi \\n{O}\"\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/H264Amf.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class H264Amf : VideoCodec\n{\n    public H264Amf()\n    {\n        Type = VideoCodecs.H264Amf;\n        Name = \"H264 AMF\";\n        Command = \"h264_amf\";\n\n        IsHardwareAccelerated = true;\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.Quality, \"S.SaveAs.VideoOptions.CodecPreset.Quality\", \"quality\"),\n            new(VideoCodecPresets.Balanced, \"S.SaveAs.VideoOptions.CodecPreset.Balanced\", \"balanced\"),\n            new(VideoCodecPresets.Speed, \"S.SaveAs.VideoOptions.CodecPreset.Speed\", \"speed\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.D3D11, \"\", \"D3D11\", \"d3d11\"),\n            new(VideoPixelFormats.Dxva2Vld, \"\", \"Dxva2Vld\", \"dxva2_vld\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/H264Nvenc.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\n/// <summary>\n/// https://developer.nvidia.com/blog/introducing-video-codec-sdk-10-presets/\n/// </summary>\npublic class H264Nvenc : VideoCodec\n{\n    public H264Nvenc()\n    {\n        Type = VideoCodecs.H264Nvenc;\n        Name = \"H264 NVENC\";\n        Command = \"h264_nvenc\";\n\n        IsHardwareAccelerated = true;\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.Default, \"S.SaveAs.VideoOptions.CodecPreset.Default\", \"default\"),\n            new(VideoCodecPresets.Lossless, \"S.SaveAs.VideoOptions.CodecPreset.Lossless\", \"lossless\"),\n            new(VideoCodecPresets.LosslessHP, \"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\", \"losslesshp\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.HP, \"S.SaveAs.VideoOptions.CodecPreset.Hp\", \"hp\"),\n            new(VideoCodecPresets.HQ, \"S.SaveAs.VideoOptions.CodecPreset.Hq\", \"hq\"),\n            new(VideoCodecPresets.BD, \"S.SaveAs.VideoOptions.CodecPreset.Bd\", \"bd\"),\n            new(VideoCodecPresets.LowLatency, \"S.SaveAs.VideoOptions.CodecPreset.LowLatency\", \"ll\"),\n            new(VideoCodecPresets.LowLatencyHP, \"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\", \"llhp\"),\n            new(VideoCodecPresets.LowLatencyHQ, \"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\", \"llhq\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Bgr0, \"\", \"Bgr0\", \"bgr0\"),\n            new(VideoPixelFormats.Cuda, \"\", \"Cuda\", \"cuda\"),\n            new(VideoPixelFormats.D3D11, \"\", \"D3D11\", \"d3d11\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.P010Le, \"\", \"P010Le\", \"p010le\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuv444p16Le, \"\", \"Yuv444p16Le\", \"yuv444p16le\"),\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/H264Qsv.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class H264Qsv : VideoCodec\n{\n    public H264Qsv()\n    {\n        Type = VideoCodecs.H264Qsv;\n        Name = \"H264 QSV\";\n        Command = \"h264_qsv\";\n\n        IsHardwareAccelerated = true;\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"veryslow\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"slower\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"faster\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"veryfast\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.P010Le, \"\", \"P010Le\", \"p010le\"),\n            new(VideoPixelFormats.Qsv, \"\", \"Qsv\", \"Qsv\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/HevcAmf.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class HevcAmf : VideoCodec\n{\n    public HevcAmf()\n    {\n        Type = VideoCodecs.HevcAmf;\n        Name = \"HEVC AMF\";\n        Command = \"hevc_amf\";\n\n        IsHardwareAccelerated = true;\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.Quality, \"S.SaveAs.VideoOptions.CodecPreset.Quality\", \"quality\"),\n            new(VideoCodecPresets.Balanced, \"S.SaveAs.VideoOptions.CodecPreset.Balanced\", \"balanced\"),\n            new(VideoCodecPresets.Speed, \"S.SaveAs.VideoOptions.CodecPreset.Speed\", \"speed\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.D3D11, \"\", \"D3D11\", \"d3d11\"),\n            new(VideoPixelFormats.Dxva2Vld, \"\", \"Dxva2Vld\", \"dxva2_vld\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/HevcNvenc.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\n/// <summary>\n/// https://developer.nvidia.com/blog/introducing-video-codec-sdk-10-presets/\n/// </summary>\npublic class HevcNvenc : VideoCodec\n{\n    public HevcNvenc()\n    {\n        Type = VideoCodecs.HevcNvenc;\n        Name = \"HEVC NVENC\";\n        Command = \"hevc_nvenc\";\n\n        IsHardwareAccelerated = true;\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.Default, \"S.SaveAs.VideoOptions.CodecPreset.Default\", \"default\"),\n            new(VideoCodecPresets.Lossless, \"S.SaveAs.VideoOptions.CodecPreset.Lossless\", \"lossless\"),\n            new(VideoCodecPresets.LosslessHP, \"S.SaveAs.VideoOptions.CodecPreset.LosslessHp\", \"losslesshp\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.HP, \"S.SaveAs.VideoOptions.CodecPreset.Hp\", \"hp\"),\n            new(VideoCodecPresets.HQ, \"S.SaveAs.VideoOptions.CodecPreset.Hq\", \"hq\"),\n            new(VideoCodecPresets.BD, \"S.SaveAs.VideoOptions.CodecPreset.Bd\", \"bd\"),\n            new(VideoCodecPresets.LowLatency, \"S.SaveAs.VideoOptions.CodecPreset.LowLatency\", \"ll\"),\n            new(VideoCodecPresets.LowLatencyHP, \"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHp\", \"llhp\"),\n            new(VideoCodecPresets.LowLatencyHQ, \"S.SaveAs.VideoOptions.CodecPreset.LowLatencyHq\", \"llhq\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Bgr0, \"\", \"Bgr0\", \"bgr0\"),\n            new(VideoPixelFormats.Cuda, \"\", \"Cuda\", \"cuda\"),\n            new(VideoPixelFormats.D3D11, \"\", \"D3D11\", \"d3d11\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.P010Le, \"\", \"P010Le\", \"p010le\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuv444p16Le, \"\", \"Yuv444p16Le\", \"yuv444p16le\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/HevcQsv.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class HevcQsv : VideoCodec\n{\n    public HevcQsv()\n    {\n        Type = VideoCodecs.HevcQsv;\n        Name = \"HEVC QSV\";\n        Command = \"hevc_qsv\";\n\n        IsHardwareAccelerated = true;\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"veryslow\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"slower\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"faster\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"veryfast\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.P010Le, \"\", \"P010Le\", \"p010le\"),\n            new(VideoPixelFormats.Qsv, \"\", \"Qsv\", \"qsv\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/LibAom.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class LibAom : VideoCodec\n{\n    /// <summary>\n    /// Alliance for Open Media AV1.\n    /// ffmpeg.exe -h encoder=libaom-av1\n    /// </summary>\n    public LibAom()\n    {\n        Type = VideoCodecs.LibAom;\n        Name = \"LibAOM AV1\";\n        Command = \"libaom-av1\";\n        Parameters = \"\";\n\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 63;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Gbrp, \"\", \"Gbrp\", \"gbrp\"),\n            new(VideoPixelFormats.Gbrp10Le, \"\", \"Gbrp10Le\", \"gbrp10le\"),\n            new(VideoPixelFormats.Gbrp12Le, \"\", \"Gbrp12Le\", \"gbrp12le\"),\n            new(VideoPixelFormats.Gray, \"\", \"Gray\", \"gray\"),\n            new(VideoPixelFormats.Gray10Le, \"\", \"Gray10LE\", \"gray10le\"),\n            new(VideoPixelFormats.Gray12Le, \"\", \"Gray12LE\", \"gray12le\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv422p, \"\", \"Yuv422p\", \"yuv422p\"),\n            new(VideoPixelFormats.Yuv420p10Le, \"\", \"Yuv420p10Le\", \"yuv420p10le\"),\n            new(VideoPixelFormats.Yuv420p12Le, \"\", \"Yuv420p12Le\", \"yuv420p12le\"),\n            new(VideoPixelFormats.Yuv422p10Le, \"\", \"Yuv422p10Le\", \"yuv422p10le\"),\n            new(VideoPixelFormats.Yuv422p12Le, \"\", \"Yuv422p12Le\", \"yuv422p12le\"),\n            new(VideoPixelFormats.Yuv444p10Le, \"\", \"Yuv444p10Le\", \"yuv444p10le\"),\n            new(VideoPixelFormats.Yuv444p12Le, \"\", \"Yuv444p12Le\", \"yuv444p12le\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuva420p, \"\", \"Yuva420p\", \"yuva420p\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/Mpeg2.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class Mpeg2 : VideoCodec\n{\n    public Mpeg2()\n    {\n        Type = VideoCodecs.Mpeg2;\n        Name = \"MPEG-2\";\n        Command = \"mpeg2video\";\n\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv422p, \"\", \"Yuv422p\", \"yuv422p\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/Mpeg4.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\n/// <summary>\n/// https://trac.ffmpeg.org/wiki/Encode/MPEG-4\n/// </summary>\npublic class Mpeg4 : VideoCodec\n{\n    public Mpeg4()\n    {\n        Type = VideoCodecs.Mpeg4;\n        Name = \"MPEG-4\";\n        Command = \"mpeg4\";\n        Parameters = \"-vtag xvid\";\n\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/Rav1E.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class Rav1E : VideoCodec\n{\n    /// <summary>\n    /// Rav1E.\n    /// ffmpeg.exe -h encoder=librav1e\n    /// </summary>\n    public Rav1E()\n    {\n        Type = VideoCodecs.Rav1E;\n        Name = \"Rav1E\";\n        Command = \"librav1e\";\n        Parameters = \"\";\n\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 63;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.Auto, \"S.SaveAs.VideoOptions.CodecPreset.Default\", \"-1\"),\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"0\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"1\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"2\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"3\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"4\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"5\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"6\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"7\"),\n            new(VideoCodecPresets.SuperFast, \"S.SaveAs.VideoOptions.CodecPreset.SuperFast\", \"8\"),\n            new(VideoCodecPresets.UltraFast, \"S.SaveAs.VideoOptions.CodecPreset.UltraFast\", \"9\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuvj420p, \"\", \"Yuvj420p\", \"yuvj420p\"),\n            new(VideoPixelFormats.Yuv422p, \"\", \"Yuv422p\", \"yuv422p\"),\n            new(VideoPixelFormats.Yuvj422p, \"\", \"Yuvj422p\", \"yuvj422p\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuvj444p, \"\", \"Yuvj444p\", \"yuvj444p\"),\n            new(VideoPixelFormats.Yuv420p10Le, \"\", \"Yuv420p10Le\", \"yuv420p10le\"),\n            new(VideoPixelFormats.Yuv420p12Le, \"\", \"Yuv420p12Le\", \"yuv420p12le\"),\n            new(VideoPixelFormats.Yuv422p10Le, \"\", \"Yuv422p10Le\", \"yuv422p10le\"),\n            new(VideoPixelFormats.Yuv422p12Le, \"\", \"Yuv422p12Le\", \"yuv422p12le\"),\n            new(VideoPixelFormats.Yuv444p10Le, \"\", \"Yuv444p10Le\", \"yuv444p10le\"),\n            new(VideoPixelFormats.Yuv444p12Le, \"\", \"Yuv444p12Le\", \"yuv444p12le\"),\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/SvtAv1.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class SvtAv1 : VideoCodec\n{\n    /// <summary>\n    /// SVT-AV1, Scalable Video Technology for AV1.\n    /// ffmpeg.exe -h encoder=libsvtav1\n    /// </summary>\n    public SvtAv1()\n    {\n        Type = VideoCodecs.SvtAv1;\n        Name = \"SVT-AV1\";\n        Command = \"libsvtav1\";\n        Parameters = \"\";\n\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 63;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"0\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"1\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"2\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"3\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"4\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"5\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"6\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"7\"),\n            new(VideoCodecPresets.SuperFast, \"S.SaveAs.VideoOptions.CodecPreset.SuperFast\", \"8\"),\n            new(VideoCodecPresets.UltraFast, \"S.SaveAs.VideoOptions.CodecPreset.UltraFast\", \"9\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv420p10Le, \"\", \"Yuv420p10Le\", \"yuv420p10le\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/VideoCodec.cs",
    "content": "using System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.ViewModels;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class VideoCodec : BindableBase\n{\n    [IgnoreDataMember]\n    public VideoCodecs Type { get; internal set; }\n\n    [IgnoreDataMember]\n    public string Name { get; internal set; }\n\n    [IgnoreDataMember]\n    public string Command { get; internal set; }\n\n    [IgnoreDataMember]\n    public string Parameters { get; internal set; }\n\n    [IgnoreDataMember]\n    public bool IsHardwareAccelerated { get; internal set; }\n        \n    [IgnoreDataMember]\n    public bool CanSetCrf { get; internal set; }\n\n    [IgnoreDataMember]\n    public int MinimumCrf { get; internal set; }\n\n    [IgnoreDataMember]\n    public int MaximumCrf { get; internal set; }\n\n    [IgnoreDataMember]\n    public List<EnumItem<VideoCodecPresets>> CodecPresets { get; internal set; }\n\n    [IgnoreDataMember]\n    public List<EnumItem<VideoPixelFormats>> PixelFormats { get; internal set; }\n}\n\npublic class EnumItem<T> where T : System.Enum\n{\n    public T Type { get; set; }\n\n    public string NameKey { get; set; }\n\n    public string Name { get; set; }\n\n    public string Parameter { get; set; }\n\n    public EnumItem()\n    { }\n\n    public EnumItem(T type, string nameKey, string name, string parameter)\n    {\n        Type = type;\n        NameKey = nameKey;\n        Name = name;\n        Parameter = parameter;\n    }\n\n    public EnumItem(T type, string nameKey, string parameter)\n    {\n        Type = type;\n        NameKey = nameKey;\n        Parameter = parameter;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/Vp8.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class Vp8 : VideoCodec\n{\n    public Vp8()\n    {\n        Type = VideoCodecs.Vp8;\n        Name = \"VP8\";\n        Command = \"libvpx\";\n\n        CanSetCrf = true;\n        MinimumCrf = 4;\n        MaximumCrf = 63;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"veryslow\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"slower\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"faster\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"veryfast\"),\n            new(VideoCodecPresets.SuperFast, \"S.SaveAs.VideoOptions.CodecPreset.SuperFast\", \"superfast\"),\n            new(VideoCodecPresets.UltraFast, \"S.SaveAs.VideoOptions.CodecPreset.UltraFast\", \"ultrafast\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuva420p, \"\", \"Yuva420p\", \"yuva420p\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/Vp9.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class Vp9 : VideoCodec\n{\n    public Vp9()\n    {\n        Type = VideoCodecs.Vp9;\n        Name = \"VP9\";\n        Command = \"libvpx-vp9\";\n        Parameters = \"-tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25\";\n\n        CanSetCrf = true;\n        MinimumCrf = 4;\n        MaximumCrf = 63;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"veryslow\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"slower\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"faster\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"veryfast\"),\n            new(VideoCodecPresets.SuperFast, \"S.SaveAs.VideoOptions.CodecPreset.SuperFast\", \"superfast\"),\n            new(VideoCodecPresets.UltraFast, \"S.SaveAs.VideoOptions.CodecPreset.UltraFast\", \"ultrafast\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Gbrp, \"\", \"Gbrp\", \"gbrp\"),\n            new(VideoPixelFormats.Gbrp10Le, \"\", \"Gbrp10Le\", \"gbrp10le\"),\n            new(VideoPixelFormats.Gbrp12Le, \"\", \"Gbrp12Le\", \"gbrp12le\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv422p, \"\", \"Yuv422p\", \"yuv422p\"),\n            new(VideoPixelFormats.Yuv440p, \"\", \"Yuv440p\", \"yuv440p\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuva420p, \"\", \"Yuva420p\", \"yuva420p\"),\n            new(VideoPixelFormats.Yuv420p10Le, \"\", \"Yuv420p10Le\", \"yuv420p10le\"),\n            new(VideoPixelFormats.Yuv420p12Le, \"\", \"Yuv420p12Le\", \"yuv420p12le\"),\n            new(VideoPixelFormats.Yuv422p10Le, \"\", \"Yuv422p10Le\", \"yuv422p10le\"),\n            new(VideoPixelFormats.Yuv422p12Le, \"\", \"Yuv422p12Le\", \"yuv422p12le\"),\n            new(VideoPixelFormats.Yuv440p10Le, \"\", \"Yuv440p10Le\", \"yuv440p10le\"),\n            new(VideoPixelFormats.Yuv440p12Le, \"\", \"Yuv440p12Le\", \"yuv440p12le\"),\n            new(VideoPixelFormats.Yuv444p10Le, \"\", \"Yuv444p10Le\", \"yuv444p10le\"),\n            new(VideoPixelFormats.Yuv444p12Le, \"\", \"Yuv444p12Le\", \"yuv444p12le\"),\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/X264.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class X264 : VideoCodec\n{\n    public X264()\n    {\n        Type = VideoCodecs.X264;\n        Name = \"x264\";\n        Command = \"libx264\";\n\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.VerySlow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"veryslow\"),\n            new(VideoCodecPresets.Slower, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"slower\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.Faster, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"faster\"),\n            new(VideoCodecPresets.VeryFast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"veryfast\"),\n            new(VideoCodecPresets.SuperFast, \"S.SaveAs.VideoOptions.CodecPreset.SuperFast\", \"superfast\"),\n            new(VideoCodecPresets.UltraFast, \"S.SaveAs.VideoOptions.CodecPreset.UltraFast\", \"ultrafast\")\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Gray, \"\", \"Gray\", \"gray\"),\n            new(VideoPixelFormats.Gray10Le, \"\", \"Gray10Le\", \"gray10le\"),\n            new(VideoPixelFormats.Nv12, \"\", \"Nv12\", \"nv12\"),\n            new(VideoPixelFormats.Nv16, \"\", \"Nv16\", \"nv16\"),\n            new(VideoPixelFormats.Nv20Le, \"\", \"Nv20Le\", \"nv20le\"),\n            new(VideoPixelFormats.Nv21, \"\", \"Nv21\", \"nv21\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv420p10Le, \"\", \"Yuv420p10Le\", \"yuv420p10le\"),\n            new(VideoPixelFormats.Yuv422p, \"\", \"Yuv422p\", \"yuv422p\"),\n            new(VideoPixelFormats.Yuv422p10Le, \"\", \"Yuv422p10Le\", \"yuv422p10le\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuv444p10Le, \"\", \"Yuv444p10Le\", \"yuv444p10le\"),\n            new(VideoPixelFormats.Yuvj420p, \"\", \"Yuvj420p\", \"yuvj420p\"),\n            new(VideoPixelFormats.Yuvj422p, \"\", \"Yuvj422p\", \"yuvj422p\"),\n            new(VideoPixelFormats.Yuvj444p, \"\", \"Yuvj444p\", \"yuvj444p\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Codecs/X265.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Codecs;\n\npublic class X265 : VideoCodec\n{\n    public X265()\n    {\n        Type = VideoCodecs.X265;\n        Name = \"x265\";\n        Command = \"libx265\";\n\n        CanSetCrf = true;\n        MinimumCrf = 0;\n        MaximumCrf = 51;\n        CodecPresets = new List<EnumItem<VideoCodecPresets>>\n        {\n            new(VideoCodecPresets.None, \"S.SaveAs.VideoOptions.CodecPreset.None\", \"\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Placebo\", \"placebo\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.VerySlow\", \"veryslow\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slower\", \"slower\"),\n            new(VideoCodecPresets.Slow, \"S.SaveAs.VideoOptions.CodecPreset.Slow\", \"slow\"),\n            new(VideoCodecPresets.Medium, \"S.SaveAs.VideoOptions.CodecPreset.Medium\", \"medium\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Fast\", \"fast\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.Faster\", \"faster\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.VeryFast\", \"veryfast\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.SuperFast\", \"superfast\"),\n            new(VideoCodecPresets.Fast, \"S.SaveAs.VideoOptions.CodecPreset.UltraFast\", \"ultrafast\"),\n        };\n        PixelFormats = new List<EnumItem<VideoPixelFormats>>\n        {\n            new(VideoPixelFormats.Auto, \"S.SaveAs.VideoOptions.PixelFormat.Auto\", \"\"),\n            new(VideoPixelFormats.Gbrp, \"\", \"Gbrp\", \"gbrp\"),\n            new(VideoPixelFormats.Gbrp10Le, \"\", \"Gbrp10Le\", \"gbrp10le\"),\n            new(VideoPixelFormats.Gray, \"\", \"Gray\", \"gray\"),\n            new(VideoPixelFormats.Gray10Le, \"\", \"Gray10Le\", \"gray10le\"),\n            new(VideoPixelFormats.Yuv420p, \"\", \"Yuv420p\", \"yuv420p\"),\n            new(VideoPixelFormats.Yuv422p, \"\", \"Yuv422p\", \"yuv422p\"),\n            new(VideoPixelFormats.Yuv444p, \"\", \"Yuv444p\", \"yuv444p\"),\n            new(VideoPixelFormats.Yuvj420p, \"\", \"Yuvj420p\", \"yuvj420p\"),\n            new(VideoPixelFormats.Yuvj422p, \"\", \"Yuvj422p\", \"yuvj422p\"),\n            new(VideoPixelFormats.Yuvj444p, \"\", \"Yuvj444p\", \"yuvj444p\"),\n            new(VideoPixelFormats.Yuv420p10Le, \"\", \"Yuv420p10Le\", \"yuv420p10le\"),\n            new(VideoPixelFormats.Yuv422p10Le, \"\", \"Yuv422p10Le\", \"yuv422p10le\"),\n            new(VideoPixelFormats.Yuv444p10Le, \"\", \"Yuv444p10Le\", \"yuv444p10le\")\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Mkv/FfmpegMkvPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Mkv;\n\npublic class FfmpegMkvPreset : MkvPreset, IFfmpegPreset\n{\n    public FfmpegMkvPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n\n        VideoCodec = VideoCodecs.X264;\n        CodecPreset = VideoCodecPresets.Fast;\n        HardwareAcceleration = HardwareAccelerationModes.Auto;\n        Pass = 1;\n        ConstantRateFactor = 23;\n        PixelFormat = VideoPixelFormats.Yuv420p;\n        Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 23 \\n-f matroska \\n{O}\";\n    }\n\n    public static List<FfmpegMkvPreset> Defaults => new()\n    {\n        new FfmpegMkvPreset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.X264,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 23,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 23 \\n-f matroska \\n{O}\"\n        },\n\n        new FfmpegMkvPreset\n        {\n            TitleKey = \"S.Preset.Hevc.Title\",\n            DescriptionKey = \"S.Preset.Hevc.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.X265,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 28,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx265 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 28 \\n-f matroska \\n{O}\"\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Mkv/MkvPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Mkv;\n\npublic class MkvPreset : VideoPreset\n{\n    public MkvPreset()\n    {\n        Type = ExportFormats.Mkv;\n        DefaultExtension = \".mkv\";\n        Extension = \".mkv\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Mov/FfmpegMovPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Mov;\n\npublic class FfmpegMovPreset : MovPreset, IFfmpegPreset\n{\n    public FfmpegMovPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n\n        VideoCodec = VideoCodecs.X264;\n        CodecPreset = VideoCodecPresets.Fast;\n        HardwareAcceleration = HardwareAccelerationModes.Auto;\n        Pass = 1;\n        ConstantRateFactor = 23;\n        PixelFormat = VideoPixelFormats.Yuv420p;\n        Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 23 \\n-f mov \\n{O}\";\n    }\n\n    public static List<FfmpegMovPreset> Defaults => new()\n    {\n        new FfmpegMovPreset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.X264,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 23,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 23 \\n-f mov \\n{O}\"\n        },\n\n        new FfmpegMovPreset\n        {\n            TitleKey = \"S.Preset.Twitter.Title\",\n            DescriptionKey = \"S.Preset.Twitter.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 05, 09),\n\n            VideoCodec = VideoCodecs.X264,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 2,\n            ConstantRateFactor = null,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Vsync = Vsyncs.Cfr,\n            Framerate = Framerates.Custom,\n            CustomFramerate = 40,\n            BitRate = 15,\n            BitRateUnit = RateUnits.Megabits,\n            MaximumBitRate = 25,\n            MaximumBitRateUnit = RateUnits.Megabits,\n            RateControlBuffer = 8,\n            RateControlBufferUnit = RateUnits.Megabits,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-b:v 15M \\n-maxrate 25M \\n-bufsize 8M \\n-pass 2 \\n-f mov \\n{O}\"\n        },\n\n        new FfmpegMovPreset\n        {\n            TitleKey = \"S.Preset.Hevc.Title\",\n            DescriptionKey = \"S.Preset.Hevc.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.X265,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 28,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx265 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 28 \\n-f mov \\n{O}\"\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Mov/MovPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Mov;\n\npublic class MovPreset : VideoPreset\n{\n    public MovPreset()\n    {\n        Type = ExportFormats.Mov;\n        DefaultExtension = \".mov\";\n        Extension = \".mov\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Mp4/FfmpegMp4Preset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Mp4;\n\npublic class FfmpegMp4Preset : Mp4Preset, IFfmpegPreset\n{\n    public FfmpegMp4Preset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n\n        VideoCodec = VideoCodecs.X264;\n        CodecPreset = VideoCodecPresets.Fast;\n        HardwareAcceleration = HardwareAccelerationModes.Auto;\n        Pass = 1;\n        ConstantRateFactor = 23;\n        PixelFormat = VideoPixelFormats.Yuv420p;\n        Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 23 \\n-f mp4 \\n{O}\";\n    }\n\n    public static List<FfmpegMp4Preset> Defaults => new()\n    {\n        new FfmpegMp4Preset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.X264,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 23,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 23 \\n-f mp4 \\n{O}\"\n        },\n\n        new FfmpegMp4Preset\n        {\n            TitleKey = \"S.Preset.Twitter.Title\",\n            DescriptionKey = \"S.Preset.Twitter.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 05, 09),\n\n            VideoCodec = VideoCodecs.X264,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 2,\n            ConstantRateFactor = null,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Vsync = Vsyncs.Cfr,\n            Framerate = Framerates.Custom,\n            CustomFramerate = 40,\n            BitRate = 15,\n            BitRateUnit = RateUnits.Megabits,\n            MaximumBitRate = 25,\n            MaximumBitRateUnit = RateUnits.Megabits,\n            RateControlBuffer = 8,\n            RateControlBufferUnit = RateUnits.Megabits,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx264 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-b:v 15M \\n-maxrate 25M \\n-bufsize 8M \\n-pass 2 \\n-f mp4 \\n{O}\"\n        },\n\n        new FfmpegMp4Preset\n        {\n            TitleKey = \"S.Preset.Hevc.Title\",\n            DescriptionKey = \"S.Preset.Hevc.Description\",\n            HasAutoSave = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.X265,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 28,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libx265 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 28 \\n-f mp4 \\n{O}\"\n        },\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Mp4/Mp4Preset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Mp4;\n\npublic class Mp4Preset : VideoPreset\n{\n    public Mp4Preset()\n    {\n        Type = ExportFormats.Mp4;\n        DefaultExtension = \".mp4\";\n        Extension = \".mp4\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/VideoPreset.cs",
    "content": "using System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video;\n\npublic class VideoPreset : ExportPreset\n{\n    private VideoSettingsModes _settingsMode;\n    private string _parameters;\n    private VideoCodecs _videoCodec;\n    private VideoCodecPresets _codecPreset;\n    private HardwareAccelerationModes _hardwareAcceleration = HardwareAccelerationModes.Auto;\n    private int _pass = 1;\n    private bool _isVariableBitRate = false;\n    private int? _constantRateFactor;\n    private decimal _bitRate;\n    private int _qualityLevel = 5;\n    private RateUnits _bitRateUnit = RateUnits.Megabits;\n    private decimal _minimumBitRate;\n    private RateUnits _minimumBitRateUnit = RateUnits.Megabits;\n    private decimal _maximumBitRate;\n    private RateUnits _maximumBitRateUnit = RateUnits.Megabits;\n    private decimal _rateControlBuffer;\n    private RateUnits _rateControlBufferUnit = RateUnits.Megabits;\n    private VideoPixelFormats _pixelFormat;\n    private Framerates _framerate = Framerates.Auto;\n    private decimal _customFramerate = 25M;\n    private Vsyncs _vsync = Vsyncs.Passthrough;\n    private bool _isAncientContainer;\n\n\n    public VideoSettingsModes SettingsMode\n    {\n        get => _settingsMode;\n        set => SetProperty(ref _settingsMode, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Parameters\n    {\n        get => _parameters;\n        set => SetProperty(ref _parameters, value);\n    }\n\n        \n    public VideoCodecs VideoCodec\n    {\n        get => _videoCodec;\n        set => SetProperty(ref _videoCodec, value);\n    }\n\n    public VideoCodecPresets CodecPreset\n    {\n        get => _codecPreset;\n        set => SetProperty(ref _codecPreset, value);\n    }\n\n    /// <summary>\n    /// Hardware acceleration mode.\n    /// https://trac.ffmpeg.org/wiki/HWAccelIntro\n    /// </summary>\n    public HardwareAccelerationModes HardwareAcceleration\n    {\n        get => _hardwareAcceleration;\n        set => SetProperty(ref _hardwareAcceleration, value);\n    }\n        \n    public int Pass\n    {\n        get => _pass;\n        set => SetProperty(ref _pass, value);\n    }\n\n    public bool IsVariableBitRate\n    {\n        get => _isVariableBitRate;\n        set => SetProperty(ref _isVariableBitRate, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public int? ConstantRateFactor\n    {\n        get => _constantRateFactor;\n        set => SetProperty(ref _constantRateFactor, value);\n    }\n\n    public decimal BitRate\n    {\n        get => _bitRate;\n        set => SetProperty(ref _bitRate, value);\n    }\n\n    /// <summary>\n    /// Quality level (-q:v, -qscale:v), in use when having the bitrate mode set to variable.\n    /// </summary>\n    public int QualityLevel\n    {\n        get => _qualityLevel;\n        set => SetProperty(ref _qualityLevel, value);\n    }\n\n    public RateUnits BitRateUnit\n    {\n        get => _bitRateUnit;\n        set => SetProperty(ref _bitRateUnit, value);\n    }\n\n    public decimal MinimumBitRate\n    {\n        get => _minimumBitRate;\n        set => SetProperty(ref _minimumBitRate, value);\n    }\n\n    public RateUnits MinimumBitRateUnit\n    {\n        get => _minimumBitRateUnit;\n        set => SetProperty(ref _minimumBitRateUnit, value);\n    }\n\n    public decimal MaximumBitRate\n    {\n        get => _maximumBitRate;\n        set => SetProperty(ref _maximumBitRate, value);\n    }\n\n    public RateUnits MaximumBitRateUnit\n    {\n        get => _maximumBitRateUnit;\n        set => SetProperty(ref _maximumBitRateUnit, value);\n    }\n\n    public decimal RateControlBuffer\n    {\n        get => _rateControlBuffer;\n        set => SetProperty(ref _rateControlBuffer, value);\n    }\n\n    public RateUnits RateControlBufferUnit\n    {\n        get => _rateControlBufferUnit;\n        set => SetProperty(ref _rateControlBufferUnit, value);\n    }\n\n    public VideoPixelFormats PixelFormat\n    {\n        get => _pixelFormat;\n        set => SetProperty(ref _pixelFormat, value);\n    }\n\n    public Framerates Framerate\n    {\n        get => _framerate;\n        set => SetProperty(ref _framerate, value);\n    }\n\n    public decimal CustomFramerate\n    {\n        get => _customFramerate;\n        set => SetProperty(ref _customFramerate, value);\n    }\n\n    public Vsyncs Vsync\n    {\n        get => _vsync;\n        set => SetProperty(ref _vsync, value);\n    }\n\n    public bool IsAncientContainer\n    {\n        get => _isAncientContainer;\n        set => SetProperty(ref _isAncientContainer, value);\n    }\n\n\n    public VideoPreset()\n    {\n        OutputFilenameKey = \"S.Preset.Filename.Video\";\n        IsEncoderExpanded = false;\n    }   \n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Webm/FfmpegWebmPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Webm;\n\npublic class FfmpegWebmPreset : WebmPreset, IFfmpegPreset\n{\n    public FfmpegWebmPreset()\n    {\n        Encoder = EncoderTypes.FFmpeg;\n        ImageId = \"Vector.Ffmpeg\";\n        RequiresFfmpeg = true;\n\n        VideoCodec = VideoCodecs.Vp9;\n        CodecPreset = VideoCodecPresets.Fast;\n        HardwareAcceleration = HardwareAccelerationModes.Auto;\n        Pass = 1;\n        ConstantRateFactor = 30;\n        BitRate = 0;\n        BitRateUnit = RateUnits.Megabits;\n        PixelFormat = VideoPixelFormats.Yuv420p;\n        Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libvpx-vp9 \\n-tile-columns 6 -frame-parallel 1 \\n-auto-alt-ref 1 -lag-in-frames 25 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 30 \\n-b:v 0 \\n-f webm \\n{O}\";\n    }\n\n    public static List<FfmpegWebmPreset> Defaults => new()\n    {\n        new FfmpegWebmPreset\n        {\n            TitleKey = \"S.Preset.Default.Title\",\n            DescriptionKey = \"S.Preset.Default.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.Vp9,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 30,\n            BitRate = 0,\n            BitRateUnit = RateUnits.Megabits,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libvpx-vp9 \\n-tile-columns 6 -frame-parallel 1 \\n-auto-alt-ref 1 -lag-in-frames 25 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 30 \\n-b:v 0 \\n-f webm \\n{O}\"\n        },\n\n        new FfmpegWebmPreset\n        {\n            TitleKey = \"S.Preset.Vp8.Title\",\n            DescriptionKey = \"S.Preset.Vp8.Description\",\n            HasAutoSave = true,\n            IsSelectedForEncoder = true,\n            IsDefault = true,\n            CreationDate = new DateTime(2021, 02, 20),\n\n            VideoCodec = VideoCodecs.Vp8,\n            CodecPreset = VideoCodecPresets.Fast,\n            HardwareAcceleration = HardwareAccelerationModes.Auto,\n            Pass = 1,\n            ConstantRateFactor = 30,\n            BitRate = 0,\n            BitRateUnit = RateUnits.Megabits,\n            PixelFormat = VideoPixelFormats.Yuv420p,\n            Parameters = \"-vsync passthrough \\n-hwaccel auto \\n{I} \\n-c:v libvpx \\n-tile-columns 6 -frame-parallel 1 \\n-auto-alt-ref 1 -lag-in-frames 25 \\n-preset fast \\n-pix_fmt yuv420p \\n-vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\n-crf 30 \\n-b:v 0 \\n-f webm \\n{O}\"\n        }\n    };\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ExportPresets/Video/Webm/WebmPreset.cs",
    "content": "using ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.ExportPresets.Video.Webm;\n\npublic class WebmPreset : VideoPreset\n{\n    public WebmPreset()\n    {\n        Type = ExportFormats.Webm;\n        DefaultExtension = \".webm\";\n        Extension = \".webm\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/FrameViewModel.cs",
    "content": "using ScreenToGif.Domain.ViewModels;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class FrameViewModel : BaseViewModel\n{\n    private string _image;\n    private int _number;\n    private int _delay;\n\n\n    public string Image\n    {\n        get => _image;\n        set => SetProperty(ref _image, value);\n    }\n\n    public int Number\n    {\n        get => _number;\n        set => SetProperty(ref _number, value);\n    }\n\n    public int Delay\n    {\n        get => _delay;\n        set => SetProperty(ref _delay, value);\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/RecorderViewModel.cs",
    "content": "using System.Windows.Input;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class RecorderViewModel : BindableBase\n{\n    #region Properties\n\n    private RecorderStages _stage = RecorderStages.Stopped;\n\n    public RecorderStages Stage\n    {\n        get => _stage;\n        set => SetProperty(ref _stage, value);\n    }\n\n    #endregion\n\n    #region Commands\n\n    private KeyGesture _recordKeyGesture = null;\n    private KeyGesture _stopKeyGesture = null;\n    private KeyGesture _discardKeyGesture = null;\n\n    public KeyGesture RecordKeyGesture\n    {\n        get => _recordKeyGesture;\n        set => SetProperty(ref _recordKeyGesture, value);\n    }\n\n    public KeyGesture StopKeyGesture\n    {\n        get => _stopKeyGesture;\n        set => SetProperty(ref _stopKeyGesture, value);\n    }\n\n    public KeyGesture DiscardKeyGesture\n    {\n        get => _discardKeyGesture;\n        set => SetProperty(ref _discardKeyGesture, value);\n    }\n\n\n    public RoutedUICommand CloseCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.Close\"\n    };\n\n    public RoutedUICommand OptionsCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.Options\",\n        InputGestures = { new KeyGesture(UserSettings.All.OptionsShortcut, UserSettings.All.OptionsModifiers) }\n    };\n\n    public RoutedUICommand RecordCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.Record\"\n    };\n\n    public RoutedUICommand SnapCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.Snap\"\n    };\n\n    public RoutedUICommand PauseCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.PauseCapture\"\n    };\n\n    public RoutedUICommand StopCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.StopCapture\"\n    };\n\n    public RoutedUICommand StopLargeCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.StopCapture\"\n    };\n\n    public RoutedUICommand DiscardCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.DiscardCapture\"\n    };\n\n    public RoutedUICommand SwitchFrequencyCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.SwitchCaptureFrequency\",\n    };\n\n    public RoutedUICommand SnapToWindowCommand { get; set; } = new RoutedUICommand\n    {\n        Text = \"S.Command.SnapToWindow\",\n    };\n\n    #endregion\n\n    public void RefreshKeyGestures()\n    {\n        try\n        {\n            RecordKeyGesture = new KeyGesture(UserSettings.All.StartPauseShortcut, UserSettings.All.StartPauseModifiers);\n            StopKeyGesture = new KeyGesture(UserSettings.All.StopShortcut, UserSettings.All.StopModifiers);\n            DiscardKeyGesture = new KeyGesture(UserSettings.All.DiscardShortcut, UserSettings.All.DiscardModifiers);\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to set the key gestures for the recorder.\");\n        }\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ScreenRecorderViewModel.cs",
    "content": "using System.Windows;\nusing Monitor = ScreenToGif.Domain.Models.Native.Monitor;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class ScreenRecorderViewModel : RecorderViewModel\n{\n    #region Properties\n\n    private bool _isDirectMode = false;\n    private Rect _region = Rect.Empty;\n    private List<Monitor> _monitors = new();\n    private Monitor _previousMonitor = null;\n    private Monitor _currentMonitor = null;\n    private Monitor _currentControlMonitor = null;\n        \n    private Style _buttonStyle = null;\n\n    public bool IsDirectMode\n    {\n        get => _isDirectMode;\n        set\n        {\n            SetProperty(ref _isDirectMode, value);\n\n            OnPropertyChanged(nameof(MaximumBounds));\n        }\n    }\n        \n    public Rect Region\n    {\n        get => _region;\n        set\n        {\n            var sizeChanged = Math.Abs(_region.Width - value.Width) > 0.01 || Math.Abs(_region.Height - value.Height) > 0.01;\n\n            SetProperty(ref _region, value);\n\n            if (sizeChanged)\n            {\n                OnPropertyChanged(nameof(RegionWidth));\n                OnPropertyChanged(nameof(RegionHeight));\n            }\n        }\n    }\n\n    public double RegionWidth\n    {\n        get => Region.IsEmpty ? 0 : Region.Width;\n        set\n        {\n            Region = new Rect(Region.Location, new Size(value, Region.Height));\n\n            OnPropertyChanged(nameof(Region));\n            OnPropertyChanged(nameof(RegionWidth));\n        }\n    }\n\n    public double RegionHeight\n    {\n        get => Region.IsEmpty ? 0 : Region.Height;\n        set\n        {\n            Region = new Rect(Region.Location, new Size(Region.Width, value));\n\n            OnPropertyChanged(nameof(Region));\n            OnPropertyChanged(nameof(RegionHeight));\n        }\n    }\n\n    public List<Monitor> Monitors\n    {\n        get => _monitors;\n        set => SetProperty(ref _monitors, value);\n    }\n\n    public Monitor CurrentMonitor\n    {\n        get => _currentMonitor;\n        set\n        {\n            SetProperty(ref _currentMonitor, value);\n            OnPropertyChanged(nameof(MaximumBounds));\n        }\n    }\n\n    public Monitor PreviousMonitor\n    {\n        get => _previousMonitor;\n        set => SetProperty(ref _previousMonitor, value);\n    }\n\n    public Monitor CurrentControlMonitor\n    {\n        get => _currentControlMonitor;\n        set => SetProperty(ref _currentControlMonitor, value);\n    }\n\n    public Rect MaximumBounds => IsDirectMode && CurrentMonitor != null ? CurrentMonitor.Bounds : \n        new Rect(Monitors.Min(m => m.Bounds.X), Monitors.Min(m => m.Bounds.Y), Monitors.Max(m => m.Bounds.Right), Monitors.Max(m => m.Bounds.Bottom));\n\n    public Style ButtonStyle\n    {\n        get => _buttonStyle;\n        set => SetProperty(ref _buttonStyle, value);\n    }\n\n    #endregion\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/ScreenToGif.ViewModel.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows7.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>disable</Nullable>\n    <DebugType>embedded</DebugType>\n    <Platforms>AnyCPU;ARM64;x64;x86</Platforms>\n    <SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>\n    <Configurations>Debug;Release;Debug (Store)</Configurations>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"KGySoft.Drawing.Core\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\ScreenToGif.Model\\ScreenToGif.Domain.csproj\" />\n    <ProjectReference Include=\"..\\ScreenToGif.Util\\ScreenToGif.Util.csproj\" />\n  </ItemGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|AnyCPU'\">\n    <UseVSHostingProcess>true</UseVSHostingProcess>\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug (Store)|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n    <DefineConstants>$(DefineConstants);FULL_MULTI_MSIX_STORE</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>\n    <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "ScreenToGif.ViewModel/Settings/PluginSettingsViewModel.cs",
    "content": "using ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Helpers;\nusing ScreenToGif.Util.Settings;\nusing SharpCompress.Archives;\nusing SharpCompress.Archives.SevenZip;\nusing SharpCompress.Archives.Tar;\nusing SharpCompress.Common;\nusing SharpCompress.Compressors.Xz;\nusing System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Threading;\n\nnamespace ScreenToGif.ViewModel.Settings;\n\npublic class PluginSettingsViewModel: BaseViewModel\n{\n    private bool _isProcessingFFmpeg;\n    private Exception _ffmpegError;\n    private string _fFmpegPath = UserSettings.All.FfmpegLocation;\n    private string _detectedFFmpegVersion = UserSettings.All.FfmpegVersionText;\n    private bool _hasOlderFfmpegVersion = UserSettings.All.HasOlderFfmpegVersion;\n    private string _gifskiPath = UserSettings.All.GifskiLocation;\n    private bool _isProcessingGifski;\n    private Exception _gifskiError;\n    private bool _isGifskiPresent;\n\n    //FFmpeg\n    public string FFmpegPath\n    {\n        get => _fFmpegPath;\n        set\n        {\n            SetProperty(ref _fFmpegPath, value);\n\n            UserSettings.All.FfmpegLocation = value;\n\n            OnPropertyChanged(nameof(DownloadFFmpegButtonVisibility));\n            OnPropertyChanged(nameof(RemoveFFmpegButtonVisibility));\n        }\n    }\n\n    public bool IsProcessingFFmpeg\n    {\n        get => _isProcessingFFmpeg;\n        set\n        {\n            SetProperty(ref _isProcessingFFmpeg, value);\n\n            OnPropertyChanged(nameof(AreFFmpegPropertiesEnabled));\n            OnPropertyChanged(nameof(IsProcessingFFmpegVisibility));\n        }\n    }\n\n    public Visibility IsProcessingFFmpegVisibility => IsProcessingFFmpeg ? Visibility.Visible : Visibility.Collapsed;\n\n    public bool AreFFmpegPropertiesEnabled => !IsProcessingFFmpeg;\n\n    public bool FFmpegHasError => FFmpegError != null;\n\n    public Exception FFmpegError\n    {\n        get => _ffmpegError;\n        set\n        {\n            SetProperty(ref _ffmpegError, value);\n\n            OnPropertyChanged(nameof(FFmpegErrorVisibility));\n        }\n    }\n\n    public string DetectedFFmpegVersion\n    {\n        get => _detectedFFmpegVersion;\n        set\n        {\n            SetProperty(ref _detectedFFmpegVersion, value);\n\n            UserSettings.All.FfmpegVersionText = value;\n\n            OnPropertyChanged(nameof(IsFFmpegPresent));\n            OnPropertyChanged(nameof(DownloadFFmpegButtonVisibility));\n            OnPropertyChanged(nameof(RemoveFFmpegButtonVisibility));\n        }\n    }\n\n    public bool HasOlderFfmpegVersion\n    {\n        get => _hasOlderFfmpegVersion;\n        set\n        {\n            SetProperty(ref _hasOlderFfmpegVersion, value);\n\n            UserSettings.All.HasOlderFfmpegVersion = value;\n        }\n    }\n\n    public bool IsFFmpegPresent => DetectedFFmpegVersion != null;\n\n    public Visibility DownloadFFmpegButtonVisibility => IsFFmpegPresent ? Visibility.Collapsed : Visibility.Visible;\n\n    public Visibility RemoveFFmpegButtonVisibility => IsFFmpegPresent ? Visibility.Visible : Visibility.Collapsed;\n\n    public Visibility FFmpegErrorVisibility => FFmpegError == null ? Visibility.Collapsed : Visibility.Visible;\n\n    //Gifski\n    public string GifskiPath\n    {\n        get => _gifskiPath;\n        set\n        {\n            SetProperty(ref _gifskiPath, value);\n\n            UserSettings.All.GifskiLocation = value;\n\n            OnPropertyChanged(nameof(DownloadGifskiButtonVisibility));\n            OnPropertyChanged(nameof(RemoveGifskiButtonVisibility));\n        }\n    }\n\n    public bool IsProcessingGifski\n    {\n        get => _isProcessingGifski;\n        set\n        {\n            SetProperty(ref _isProcessingGifski, value);\n\n            OnPropertyChanged(nameof(AreGifskiPropertiesEnabled));\n            OnPropertyChanged(nameof(IsProcessingGifskiVisibility));\n        }\n    }\n\n    public Visibility IsProcessingGifskiVisibility => IsProcessingGifski ? Visibility.Visible : Visibility.Collapsed;\n\n    //Gifski is only supported in x64.\n    public bool AreGifskiPropertiesEnabled => Environment.Is64BitProcess && !IsProcessingGifski;\n\n    public bool GifskiHasError => GifskiError != null;\n\n    public Exception GifskiError\n    {\n        get => _gifskiError;\n        set\n        {\n            SetProperty(ref _gifskiError, value);\n\n            OnPropertyChanged(nameof(GifskiErrorVisibility));\n        }\n    }\n\n    public bool IsGifskiPresent\n    {\n        get => _isGifskiPresent;\n        set\n        {\n            SetProperty(ref _isGifskiPresent, value);\n\n            OnPropertyChanged(nameof(DownloadGifskiButtonVisibility));\n            OnPropertyChanged(nameof(RemoveGifskiButtonVisibility));\n        }\n    }\n\n    public Visibility DownloadGifskiButtonVisibility => Environment.Is64BitProcess && IsGifskiPresent ? Visibility.Collapsed : Visibility.Visible;\n\n    public Visibility RemoveGifskiButtonVisibility => Environment.Is64BitProcess && IsGifskiPresent ? Visibility.Visible : Visibility.Collapsed;\n\n    public Visibility GifskiErrorVisibility => GifskiError == null ? Visibility.Collapsed : Visibility.Visible;\n\n    //Commands.\n    public RoutedUICommand DownloadFFmpegCommand { get; set; } = new();\n\n    public RoutedUICommand RemoveFFmpegCommand { get; set; } = new();\n\n    public RoutedUICommand SelectFFmpegPathCommand { get; set; } = new();\n\n    public RoutedUICommand BrowseFFmpegCommand { get; set; } = new();\n\n    public RoutedUICommand SeeErrorFFmpegCommand { get; set; } = new();\n\n    public RoutedUICommand DownloadGifskiCommand { get; set; } = new();\n\n    public RoutedUICommand RemoveGifskiCommand { get; set; } = new();\n\n    public RoutedUICommand SelectGifskiPathCommand { get; set; } = new();\n\n    public RoutedUICommand BrowseGifskiCommand { get; set; } = new();\n\n    public RoutedUICommand SeeErrorGifskiCommand { get; set; } = new();\n    \n    public async void DownloadFFmpeg()\n    {\n        try\n        {\n            IsProcessingFFmpeg = true;\n\n#if FULL_MULTI_MSIX_STORE\n            ProcessHelper.StartWithShell(\"https://github.com/GyanD/codexffmpeg/releases\");\n            return;\n#else\n            var release = await GitHubHelper.GetLatestRelease(\"GyanD/codexffmpeg\");\n            var asset = release?.GetAsset(\".7z\");\n\n            if (asset == null)\n            {\n                FFmpegError = new Exception(\"No .7z asset found in the latest release.\");\n                return;\n            }\n\n            var packedFolder = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"Downloads\");\n            var packedPath = Path.Combine(packedFolder, asset.Name);\n\n            Directory.CreateDirectory(packedFolder);\n\n            if (File.Exists(packedPath))\n                File.Delete(packedPath);\n\n            await using (var fileStream = new FileStream(packedPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, true))\n            {\n                await using (var stream = await WebHelper.GetStream(asset.BrowserDownloadUrl))\n                    await stream.CopyToAsync(fileStream);\n            }\n\n            FFmpegPath = await UnpackFFmpeg(packedPath);\n            await VerifyFFmpeg(true);\n\n            File.Delete(packedPath);\n#endif\n        }\n        catch (Exception e)\n        {\n            FFmpegError = e;\n            LogWriter.Log(e, \"Not possible to download FFmpeg release.\");\n\n            DetectedFFmpegVersion = null;\n        }\n        finally\n        {\n            IsProcessingFFmpeg = false;\n        }\n    }\n\n    public async void DownloadGifski()\n    {\n        try\n        {\n            IsProcessingGifski = true;\n\n#if FULL_MULTI_MSIX_STORE\n            ProcessHelper.StartWithShell(\"https://github.com/ImageOptim/gifski/releases\");\n            return;\n#else\n            var release = await GitHubHelper.GetLatestRelease(\"ImageOptim/gifski\");\n            var asset = release?.GetAsset(\".tar.xz\");\n\n            if (asset == null)\n            {\n                FFmpegError = new Exception(\"No .tar.xz asset found in the latest release.\");\n                return;\n            }\n\n            var packedFolder = Path.Combine(UserSettings.All.TemporaryFolderResolved, \"Downloads\");\n            var packedPath = Path.Combine(packedFolder, asset.Name);\n\n            Directory.CreateDirectory(packedFolder);\n\n            if (File.Exists(packedPath))\n                File.Delete(packedPath);\n\n            await using (var fileStream = new FileStream(packedPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None, 4096, true))\n            {\n                await using (var stream = await WebHelper.GetStream(asset.BrowserDownloadUrl))\n                    await stream.CopyToAsync(fileStream);\n            }\n\n            GifskiPath = await UnpackGifski(packedPath);\n            VerifyGifski(true);\n\n            File.Delete(packedPath);\n#endif\n        }\n        catch (Exception e)\n        {\n            GifskiError = e;\n            LogWriter.Log(e, \"Not possible to download Gifski release.\");\n        }\n        finally\n        {\n            IsProcessingGifski = false;\n        }\n    }\n\n    public async Task<string> UnpackFFmpeg(string path)\n    {\n        await using var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);\n        using var archive = SevenZipArchive.Open(fileStream);\n\n        var entry = archive.Entries.FirstOrDefault(x => x.Key.Contains(\"ffmpeg.exe\"));\n\n        if (entry == null)\n            return null;\n\n        var destinationPath = Environment.ExpandEnvironmentVariables(\"%appdata%\\\\ScreenToGif\\\\Plugins\");\n        var destination = Path.Combine(destinationPath, \"ffmpeg.exe\");\n\n        Directory.CreateDirectory(destinationPath);\n\n        if (File.Exists(destination))\n            File.Delete(destination);\n\n        await Task.Run(() =>\n        {\n            entry.WriteToDirectory(destinationPath, new ExtractionOptions\n            {\n                PreserveFileTime = true,\n                Overwrite = true\n            });\n        });\n\n        return destination;\n    }\n\n    public async Task<string> UnpackGifski(string path)\n    {\n        var tempPath = Path.Combine(Path.GetDirectoryName(path)!, \"gifski.tar\");\n\n        await using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))\n        {\n            await using (XZStream xzStream = new(fileStream))\n            {\n                await using (var outTar = File.Create(tempPath))\n                    await xzStream.CopyToAsync(outTar);\n            }\n        }\n\n        var destinationPath = Environment.ExpandEnvironmentVariables(\"%appdata%\\\\ScreenToGif\\\\Plugins\");\n        var destination = Path.Combine(destinationPath, \"gifski.dll\");\n\n        Directory.CreateDirectory(destinationPath);\n\n        if (File.Exists(destination))\n            File.Delete(destination);\n\n        using (var archive = TarArchive.Open(tempPath))\n        {\n            foreach (var entry in archive.Entries)\n            {\n                if (!entry.IsDirectory && entry.Key?.EndsWith(\"gifski.dll\") == true)\n                {\n                    entry.WriteToFile(destination, new ExtractionOptions { Overwrite = true });\n                    return destination;\n                }\n            }\n        }\n\n        File.Delete(tempPath);\n\n        return null;\n    }\n\n    public async Task VerifyFFmpeg(bool bubbleUpError = false)\n    {\n        try\n        {\n            IsProcessingFFmpeg = true;\n\n            if (FFmpegPath == null || !File.Exists(FFmpegPath))\n            {\n                DetectedFFmpegVersion = null;\n                FFmpegPath = null;\n                return;\n            }\n\n            //Call FFmpeg to check its version.\n            var output = await ProcessHelper.Start(FFmpegPath + \" -version\");\n\n            //Check the output to determine the FFmpeg version.\n            DetectedFFmpegVersion = FfmpegHelper.IdentifyVersion(output);\n            HasOlderFfmpegVersion = FfmpegHelper.IsOlder(output);\n        }\n        catch (Exception e)\n        {\n            if (bubbleUpError)\n                throw;\n\n            LogWriter.Log(e, \"Verifying if FFmpeg is available\");\n        }\n        finally\n        {\n            IsProcessingFFmpeg = false;\n\n            //Since the props are being updated inside a thread, I need to call the InvalidateRequerySuggested here.\n            Dispatcher.CurrentDispatcher.Invoke(CommandManager.InvalidateRequerySuggested, DispatcherPriority.Render);\n        }\n    }\n\n    public void VerifyGifski(bool bubbleUpError = false)\n    {\n        try\n        {\n            IsProcessingGifski = true;\n\n            if (GifskiPath == null || !File.Exists(GifskiPath))\n            {\n                GifskiPath = null;\n                IsGifskiPresent = false;\n                return;\n            }\n\n            using var interop = new GifskiInterop(GifskiPath);\n\n            IsGifskiPresent = interop.IsProperlySetup;\n        }\n        catch (Exception e)\n        {\n            if (bubbleUpError)\n                throw;\n\n            LogWriter.Log(e, \"Verifying if Gifski is available\");\n        }\n        finally\n        {\n            IsProcessingGifski = false;\n\n            //Since the props are being updated inside a thread, I need to call the InvalidateRequerySuggested here.\n            Dispatcher.CurrentDispatcher.Invoke(CommandManager.InvalidateRequerySuggested, DispatcherPriority.Render);\n        }\n    }\n\n    public void RemoveFFmpeg()\n    {\n        if (string.IsNullOrWhiteSpace(FFmpegPath))\n            return;\n\n        if (File.Exists(FFmpegPath))\n            File.Delete(FFmpegPath);\n\n        FFmpegPath = null;\n    }\n\n    public void RemoveGifski()\n    {\n        if (string.IsNullOrWhiteSpace(GifskiPath))\n            return;\n\n        if (File.Exists(GifskiPath))\n            File.Delete(GifskiPath);\n\n        GifskiPath = null;\n        IsGifskiPresent = false;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/BaseTaskViewModel.cs",
    "content": "using ScreenToGif.Util;\nusing System.ComponentModel;\nusing System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.ViewModels;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class BaseTaskViewModel : BindableBase, IPersistent\n{\n    #region Variables\n\n    private TaskTypes _taskType = TaskTypes.NotDeclared;\n    private bool _isEnabled = true;\n    private bool _isManual = false;\n    private string _image = null;\n\n    #endregion\n\n    public TaskTypes TaskType\n    {\n        get => _taskType;\n        set => SetProperty(ref _taskType, value);\n    }\n\n    public string Kind\n    {\n        get\n        {\n            switch (TaskType)\n            {\n                case TaskTypes.MouseEvents:\n                    return LocalizationHelper.Get(\"S.Editor.Image.MouseEvents\", true);\n                case TaskTypes.KeyStrokes:\n                    return LocalizationHelper.Get(\"S.Editor.Image.KeyStrokes\", true);\n                case TaskTypes.Delay:\n                    return LocalizationHelper.Get(\"S.Delay.Update\", true);\n                case TaskTypes.Progress:\n                    return LocalizationHelper.Get(\"S.Editor.Image.Progress\", true);\n                case TaskTypes.Border:\n                    return LocalizationHelper.Get(\"S.Editor.Image.Border\", true);\n                case TaskTypes.Shadow:\n                    return LocalizationHelper.Get(\"S.Editor.Image.Shadow\", true);\n                case TaskTypes.Resize:\n                    return LocalizationHelper.Get(\"S.Editor.Image.Resize\", true);\n                default:\n                    return LocalizationHelper.Get(\"S.Options.Tasks.SelectType\");\n            }\n        }\n    }\n\n    public bool IsEnabled\n    {\n        get => _isEnabled;\n        set => SetProperty(ref _isEnabled, value);\n    }\n\n    public string Details => ToString();\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool IsManual\n    {\n        get => _isManual;\n        set => SetProperty(ref _isManual, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string Image\n    {\n        get => _image;\n        set => SetProperty(ref _image, value);\n    }\n\n\n    public BaseTaskViewModel ShallowCopy()\n    {\n        return (BaseTaskViewModel) MemberwiseClone();\n    }\n\n    public virtual void Persist()\n    { }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/BorderViewModel.cs",
    "content": "using System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class BorderViewModel : BaseTaskViewModel\n{\n    #region Variables\n\n    private Color _color;\n    private double _leftThickness;\n    private double _topThickness;\n    private double _rightThickness;\n    private double _bottomThickness;\n        \n    #endregion\n\n    public BorderViewModel()\n    {\n        TaskType = TaskTypes.Border;\n    }\n\n    public Color Color\n    {\n        get => _color;\n        set => SetProperty(ref _color, value);\n    }\n\n    public double LeftThickness\n    {\n        get => _leftThickness;\n        set => SetProperty(ref _leftThickness, value);\n    }\n\n    public double TopThickness\n    {\n        get => _topThickness;\n        set => SetProperty(ref _topThickness, value);\n    }\n\n    public double RightThickness\n    {\n        get => _rightThickness;\n        set => SetProperty(ref _rightThickness, value);\n    }\n\n    public double BottomThickness\n    {\n        get => _bottomThickness;\n        set => SetProperty(ref _bottomThickness, value);\n    }\n\n    public override string ToString()\n    {\n        return $\"{LocalizationHelper.Get(\"S.Color\")} #{Color.A:X2}{Color.R:X2}{Color.G:X2}{Color.B:X2}, \" +\n               $\"{(LocalizationHelper.Get(\"S.Caption.Thickness\"))} ({LeftThickness}, {TopThickness}, {LeftThickness}, {BottomThickness})\";\n    }\n\n    public static BorderViewModel Default()\n    {\n        return new BorderViewModel\n        {\n            Color = Color.FromArgb(255, 0, 0, 0),\n            LeftThickness = 1,\n            TopThickness = 1,\n            RightThickness = 1,\n            BottomThickness = 1,\n        };\n    }\n\n    public static BorderViewModel FromSettings(bool isManual = false)\n    {\n        return new BorderViewModel\n        {\n            Color = UserSettings.All.BorderColor,\n            LeftThickness = UserSettings.All.BorderLeftThickness,\n            TopThickness = UserSettings.All.BorderTopThickness,\n            RightThickness = UserSettings.All.BorderRightThickness,\n            BottomThickness = UserSettings.All.BorderBottomThickness,\n            IsManual = isManual\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/DelayViewModel.cs",
    "content": "using ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class DelayViewModel : BaseTaskViewModel\n{\n    private DelayUpdateModes _type;\n    private int _delay;\n    private int _increaseDecreaseDelay;\n    private decimal _percent;\n\n    public DelayViewModel()\n    {\n        TaskType = TaskTypes.Delay;\n    }\n\n    public DelayUpdateModes Type\n    {\n        get => _type;\n        set\n        {\n            SetProperty(ref _type, value);\n            OnPropertyChanged(nameof(DelayTypeUnit));\n        }\n    }\n\n    public int NewDelay\n    {\n        get => _delay;\n        set => SetProperty(ref _delay, value);\n    }\n\n    public int IncreaseDecreaseDelay\n    {\n        get => _increaseDecreaseDelay;\n        set => SetProperty(ref _increaseDecreaseDelay, value);\n    }\n\n    public decimal Percent\n    {\n        get => _percent;\n        set => SetProperty(ref _percent, value);\n    }\n\n    public string DelayType =>\n        Type == DelayUpdateModes.Override ? LocalizationHelper.Get(\"S.Editor.Edit.Delay.Override\") :\n        Type == DelayUpdateModes.IncreaseDecrease ? LocalizationHelper.Get(\"S.Editor.Edit.Delay.IncreaseDecrease\") :\n        Type == DelayUpdateModes.Scale ? LocalizationHelper.Get(\"S.Editor.Edit.Delay.Scale\") : \"None\";\n\n    public string DelayTypeKind =>\n        Type == DelayUpdateModes.Override ? LocalizationHelper.Get(\"S.DelayMs\") :\n        Type == DelayUpdateModes.IncreaseDecrease ? LocalizationHelper.Get(\"S.ValueMs\") :\n        Type == DelayUpdateModes.Scale ? LocalizationHelper.Get(\"S.ScaleValue\") : \"None\";\n\n    public string DelayTypeUnitValue =>\n        Type == DelayUpdateModes.Scale ? Percent + DelayTypeUnit :\n        Type == DelayUpdateModes.Override ? NewDelay + DelayTypeUnit :\n        Type == DelayUpdateModes.IncreaseDecrease ? IncreaseDecreaseDelay + DelayTypeUnit : \"\";\n\n    public string DelayTypeUnit =>\n        Type == DelayUpdateModes.Scale ? \" %\" :\n        Type == DelayUpdateModes.Override ? \" ms\" :\n        Type == DelayUpdateModes.IncreaseDecrease ? \" ms\" : \"\";\n\n    public override string ToString()\n    {\n        return $\"{LocalizationHelper.Get(\"S.Delay\")}: {DelayType}, {DelayTypeKind} {DelayTypeUnitValue}\";\n    }\n\n    public static DelayViewModel Default()\n    {\n        return new DelayViewModel\n        {\n            Type = DelayUpdateModes.Override,\n            NewDelay = 33,\n            IncreaseDecreaseDelay = 10,\n            Percent = 100,\n        };\n    }\n\n    public static DelayViewModel FromSettings(DelayUpdateModes type = DelayUpdateModes.Override)\n    {\n        return new DelayViewModel\n        {\n            Type = type,\n            NewDelay = UserSettings.All.OverrideDelay,\n            IncreaseDecreaseDelay = UserSettings.All.IncrementDecrementDelay,\n            Percent = UserSettings.All.ScaleDelay,\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/KeyStrokesViewModel.cs",
    "content": "using System.Windows;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class KeyStrokesViewModel : BaseTaskViewModel\n{\n    #region Variables\n\n    private bool _ignoreNonModifiers;\n    private bool _ignoreInjected;\n    private bool _translate;\n    private bool _earlier;\n    private double _earlierBy;\n    private string _separator;\n    private bool _extended;\n    private double _delay;\n    private FontFamily _fontFamily;\n    private FontStyle _fontStyle;\n    private FontWeight _fontWeight;\n    private double _fontSize;\n    private Color _fontColor;\n    private double _outlineThickness;\n    private Color _outlineColor;\n    private Color _backgroundColor;\n    private VerticalAlignment _verticalAlignment;\n    private HorizontalAlignment _horizontalAlignment;\n    private double _margin;\n    private double _padding;\n    private double _minHeight;\n\n    #endregion\n\n    public KeyStrokesViewModel()\n    {\n        TaskType = TaskTypes.KeyStrokes;\n    }\n\n    public bool KeyStrokesIgnoreNonModifiers\n    {\n        get => _ignoreNonModifiers;\n        set => SetProperty(ref _ignoreNonModifiers, value);\n    }\n\n    public bool KeyStrokesIgnoreInjected\n    {\n        get => _ignoreInjected;\n        set => SetProperty(ref _ignoreInjected, value);\n    }\n\n    public bool KeyStrokesTranslate\n    {\n        get => _translate;\n        set => SetProperty(ref _translate, value);\n    }\n\n    public bool KeyStrokesEarlier\n    {\n        get => _earlier;\n        set => SetProperty(ref _earlier, value);\n    }\n\n    public double KeyStrokesEarlierBy\n    {\n        get => _earlierBy;\n        set => SetProperty(ref _earlierBy, value);\n    }\n\n    public string KeyStrokesSeparator\n    {\n        get => _separator;\n        set => SetProperty(ref _separator, value);\n    }\n\n    public bool KeyStrokesExtended\n    {\n        get => _extended;\n        set => SetProperty(ref _extended, value);\n    }\n\n    public double KeyStrokesDelay\n    {\n        get => _delay;\n        set => SetProperty(ref _delay, value);\n    }\n\n    public FontFamily KeyStrokesFontFamily\n    {\n        get => _fontFamily;\n        set => SetProperty(ref _fontFamily, value);\n    }\n\n    public FontStyle KeyStrokesFontStyle\n    {\n        get => _fontStyle;\n        set => SetProperty(ref _fontStyle, value);\n    }\n\n    public FontWeight KeyStrokesFontWeight\n    {\n        get => _fontWeight;\n        set => SetProperty(ref _fontWeight, value);\n    }\n\n    public double KeyStrokesFontSize\n    {\n        get => _fontSize;\n        set => SetProperty(ref _fontSize, value);\n    }\n\n    public Color KeyStrokesFontColor\n    {\n        get => _fontColor;\n        set => SetProperty(ref _fontColor, value);\n    }\n\n    public double KeyStrokesOutlineThickness\n    {\n        get => _outlineThickness;\n        set => SetProperty(ref _outlineThickness, value);\n    }\n\n    public Color KeyStrokesOutlineColor\n    {\n        get => _outlineColor;\n        set => SetProperty(ref _outlineColor, value);\n    }\n\n    public Color KeyStrokesBackgroundColor\n    {\n        get => _backgroundColor;\n        set => SetProperty(ref _backgroundColor, value);\n    }\n\n    public VerticalAlignment KeyStrokesVerticalAlignment\n    {\n        get => _verticalAlignment;\n        set => SetProperty(ref _verticalAlignment, value);\n    }\n\n    public HorizontalAlignment KeyStrokesHorizontalAlignment\n    {\n        get => _horizontalAlignment;\n        set => SetProperty(ref _horizontalAlignment, value);\n    }\n\n    public double KeyStrokesMargin\n    {\n        get => _margin;\n        set => SetProperty(ref _margin, value);\n    }\n\n    public double KeyStrokesPadding\n    {\n        get => _padding;\n        set => SetProperty(ref _padding, value);\n    }\n\n    public double KeyStrokesMinHeight\n    {\n        get => _minHeight;\n        set => SetProperty(ref _minHeight, value);\n    }\n\n    #region Obsolete (Typo in name)\n\n    public VerticalAlignment KeyStrokesVerticalAligment\n    {\n        get => _verticalAlignment;\n        set => SetProperty(ref _verticalAlignment, value);\n    }\n\n    public HorizontalAlignment KeyStrokesHorizontalAligment\n    {\n        get => _horizontalAlignment;\n        set => SetProperty(ref _horizontalAlignment, value);\n    }\n\n    #endregion\n\n    public override string ToString()\n    {\n        return $\"{LocalizationHelper.Get(\"S.Caption.Size\")} {KeyStrokesFontSize}, \" +\n               $\"{LocalizationHelper.Get(\"S.Caption.Color\")} #{KeyStrokesFontColor.A:X2}{KeyStrokesFontColor.R:X2}{KeyStrokesFontColor.G:X2}{KeyStrokesFontColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.Background\")} #{KeyStrokesBackgroundColor.A:X2}{KeyStrokesBackgroundColor.R:X2}{KeyStrokesBackgroundColor.G:X2}{KeyStrokesBackgroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.Margin\")} {KeyStrokesMargin}, \" +\n               $\"{LocalizationHelper.Get(\"S.Padding\")} {KeyStrokesPadding}\";\n    }\n\n    public static KeyStrokesViewModel Default()\n    {\n        return new KeyStrokesViewModel\n        {\n            KeyStrokesIgnoreNonModifiers = true,\n            KeyStrokesIgnoreInjected = false,\n            KeyStrokesTranslate = false,\n            KeyStrokesEarlier = false,\n            KeyStrokesEarlierBy = 500,\n            KeyStrokesExtended = true,\n            KeyStrokesDelay = 800,\n            KeyStrokesSeparator = \"  \",\n            KeyStrokesFontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n            KeyStrokesFontSize = 30,\n            KeyStrokesFontColor = Color.FromArgb(255,255,255,255),\n            KeyStrokesFontStyle = FontStyles.Normal,\n            KeyStrokesFontWeight = FontWeights.Bold,\n            KeyStrokesOutlineThickness = 0,\n            KeyStrokesOutlineColor = Color.FromArgb(255, 255, 255, 255),\n            KeyStrokesBackgroundColor = Color.FromArgb(255, 0, 0, 0),\n            KeyStrokesHorizontalAlignment = HorizontalAlignment.Center,\n            KeyStrokesVerticalAlignment = VerticalAlignment.Bottom,\n            KeyStrokesMargin = 0,\n            KeyStrokesPadding = 5,\n            KeyStrokesMinHeight = 42,\n        };\n    }\n\n    public static KeyStrokesViewModel FromSettings()\n    {\n        return new KeyStrokesViewModel\n        {\n            KeyStrokesIgnoreNonModifiers = UserSettings.All.KeyStrokesIgnoreNonModifiers,\n            KeyStrokesIgnoreInjected = UserSettings.All.KeyStrokesIgnoreInjected,\n            KeyStrokesTranslate = UserSettings.All.KeyStrokesTranslate,\n            KeyStrokesEarlier = UserSettings.All.KeyStrokesEarlier,\n            KeyStrokesEarlierBy = UserSettings.All.KeyStrokesEarlierBy,\n            KeyStrokesExtended = UserSettings.All.KeyStrokesExtended,\n            KeyStrokesDelay = UserSettings.All.KeyStrokesDelay,\n            KeyStrokesSeparator = UserSettings.All.KeyStrokesSeparator,\n            KeyStrokesFontFamily = UserSettings.All.KeyStrokesFontFamily,\n            KeyStrokesFontSize = UserSettings.All.KeyStrokesFontSize,\n            KeyStrokesFontColor = UserSettings.All.KeyStrokesFontColor,\n            KeyStrokesFontStyle = UserSettings.All.KeyStrokesFontStyle,\n            KeyStrokesFontWeight = UserSettings.All.KeyStrokesFontWeight,\n            KeyStrokesOutlineThickness = UserSettings.All.KeyStrokesOutlineThickness,\n            KeyStrokesOutlineColor = UserSettings.All.KeyStrokesOutlineColor,\n            KeyStrokesBackgroundColor = UserSettings.All.KeyStrokesBackgroundColor,\n            KeyStrokesHorizontalAlignment = UserSettings.All.KeyStrokesHorizontalAligment,\n            KeyStrokesVerticalAlignment = UserSettings.All.KeyStrokesVerticalAligment,\n            KeyStrokesMargin = UserSettings.All.KeyStrokesMargin,\n            KeyStrokesPadding = UserSettings.All.KeyStrokesPadding,\n            KeyStrokesMinHeight = UserSettings.All.KeyStrokesMinHeight,\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/MouseEventsViewModel.cs",
    "content": "using System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class MouseEventsViewModel : BaseTaskViewModel\n{\n    private Color _highlightForegroundColor;\n    private Color _leftButtonForegroundColor;\n    private Color _rightButtonForegroundColor;\n    private Color _middleButtonForegroundColor;\n    private Color _firstExtraButtonForegroundColor;\n    private Color _secondExtraButtonForegroundColor;\n    private double _width;\n    private double _height;\n\n    public MouseEventsViewModel()\n    {\n        TaskType = TaskTypes.MouseEvents;\n    }\n\n    public Color HighlightForegroundColor\n    {\n        get => _highlightForegroundColor;\n        set => SetProperty(ref _highlightForegroundColor, value);\n    }\n\n    public Color LeftButtonForegroundColor\n    {\n        get => _leftButtonForegroundColor;\n        set => SetProperty(ref _leftButtonForegroundColor, value);\n    }\n\n    public Color RightButtonForegroundColor\n    {\n        get => _rightButtonForegroundColor;\n        set => SetProperty(ref _rightButtonForegroundColor, value);\n    }\n\n    public Color MiddleButtonForegroundColor\n    {\n        get => _middleButtonForegroundColor;\n        set => SetProperty(ref _middleButtonForegroundColor, value);\n    }\n\n    public Color FirstExtraButtonForegroundColor\n    {\n        get => _firstExtraButtonForegroundColor;\n        set => SetProperty(ref _firstExtraButtonForegroundColor, value);\n    }\n\n    public Color SecondExtraButtonForegroundColor\n    {\n        get => _secondExtraButtonForegroundColor;\n        set => SetProperty(ref _secondExtraButtonForegroundColor, value);\n    }\n\n    public double Width\n    {\n        get => _width;\n        set => SetProperty(ref _width, value);\n    }\n\n    public double Height\n    {\n        get => _height;\n        set => SetProperty(ref _height, value);\n    }\n\n    public override string ToString()\n    {\n        return $\"{LocalizationHelper.Get(\"S.MouseHighlight.Color\")} #{HighlightForegroundColor.A:X2}{HighlightForegroundColor.R:X2}{HighlightForegroundColor.G:X2}{HighlightForegroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.MouseClicks.Color.Left\")} #{LeftButtonForegroundColor.A:X2}{LeftButtonForegroundColor.R:X2}{LeftButtonForegroundColor.G:X2}{LeftButtonForegroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.MouseClicks.Color.Right\")} #{RightButtonForegroundColor.A:X2}{RightButtonForegroundColor.R:X2}{RightButtonForegroundColor.G:X2}{RightButtonForegroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.MouseClicks.Color.Middle\")} #{MiddleButtonForegroundColor.A:X2}{MiddleButtonForegroundColor.R:X2}{MiddleButtonForegroundColor.G:X2}{MiddleButtonForegroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.MouseClicks.Color.FirstExtra\")} #{FirstExtraButtonForegroundColor.A:X2}{FirstExtraButtonForegroundColor.R:X2}{FirstExtraButtonForegroundColor.G:X2}{FirstExtraButtonForegroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.MouseClicks.Color.SecondExtra\")} #{SecondExtraButtonForegroundColor.A:X2}{SecondExtraButtonForegroundColor.R:X2}{SecondExtraButtonForegroundColor.G:X2}{SecondExtraButtonForegroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.FreeDrawing.Width\")} {Width}, {LocalizationHelper.Get(\"S.FreeDrawing.Height\")} {Height}\";\n    }\n\n    public static MouseEventsViewModel Default()\n    {\n        return new MouseEventsViewModel\n        {\n            HighlightForegroundColor = Color.FromArgb(0, 0, 0, 0),\n            LeftButtonForegroundColor = Color.FromArgb(120, 255, 255, 0),\n            RightButtonForegroundColor = Color.FromArgb(120, 255, 0, 0),\n            MiddleButtonForegroundColor = Color.FromArgb(120, 0, 255, 255),\n            FirstExtraButtonForegroundColor = Color.FromArgb(120, 255, 0, 128),\n            SecondExtraButtonForegroundColor = Color.FromArgb(120, 255, 128, 0),\n            Height = 12,\n            Width = 12\n        };\n    }\n\n    public static MouseEventsViewModel FromSettings()\n    {\n        return new MouseEventsViewModel\n        {\n            HighlightForegroundColor = UserSettings.All.MouseHighlightColor,\n            LeftButtonForegroundColor = UserSettings.All.LeftMouseButtonClicksColor,\n            RightButtonForegroundColor = UserSettings.All.RightMouseButtonClicksColor,\n            MiddleButtonForegroundColor = UserSettings.All.MiddleMouseButtonClicksColor,\n            FirstExtraButtonForegroundColor = UserSettings.All.FirstExtraMouseButtonClicksColor,\n            SecondExtraButtonForegroundColor = UserSettings.All.SecondExtraMouseButtonClicksColor,\n            Height = UserSettings.All.MouseEventsHeight,\n            Width = UserSettings.All.MouseEventsWidth\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/ProgressViewModel.cs",
    "content": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class ProgressViewModel : BaseTaskViewModel\n{\n    #region Variables\n\n    private ProgressTypes _type;\n    private FontFamily _fontFamily;\n    private FontStyle _fontStyle;\n    private FontWeight _fontWeight;\n    private double _fontSize;\n    private Color _fontColor;\n    private Color _color;\n    private int _precision;\n    private int _startNumber;\n    private bool _showTotal;\n    private string _format;\n    private string _dateFormat;\n    private double _thickness;\n    private VerticalAlignment _verticalAlignment;\n    private HorizontalAlignment _horizontalAlignment;\n    private Orientation _orientation;\n\n    #endregion\n\n    public ProgressViewModel()\n    {\n        TaskType = TaskTypes.Progress;\n    }\n\n\n    public ProgressTypes Type\n    {\n        get => _type;\n        set => SetProperty(ref _type, value);\n    }\n\n    public FontFamily FontFamily\n    {\n        get => _fontFamily;\n        set => SetProperty(ref _fontFamily, value);\n    }\n\n    public FontStyle FontStyle\n    {\n        get => _fontStyle;\n        set => SetProperty(ref _fontStyle, value);\n    }\n\n    public FontWeight FontWeight\n    {\n        get => _fontWeight;\n        set => SetProperty(ref _fontWeight, value);\n    }\n\n    public double FontSize\n    {\n        get => _fontSize;\n        set => SetProperty(ref _fontSize, value);\n    }\n\n    public Color FontColor\n    {\n        get => _fontColor;\n        set => SetProperty(ref _fontColor, value);\n    }\n\n    public Color Color\n    {\n        get => _color;\n        set => SetProperty(ref _color, value);\n    }\n\n    public int Precision\n    {\n        get => _precision;\n        set => SetProperty(ref _precision, value);\n    }\n\n    public int StartNumber\n    {\n        get => _startNumber;\n        set => SetProperty(ref _startNumber, value);\n    }\n\n    public bool ShowTotal\n    {\n        get => _showTotal;\n        set => SetProperty(ref _showTotal, value);\n    }\n\n    public string Format\n    {\n        get => _format;\n        set => SetProperty(ref _format, value);\n    }\n\n    public string DateFormat\n    {\n        get => _dateFormat;\n        set => SetProperty(ref _dateFormat, value);\n    }\n\n    public double Thickness\n    {\n        get => _thickness;\n        set => SetProperty(ref _thickness, value);\n    }\n\n    public VerticalAlignment VerticalAlignment\n    {\n        get => _verticalAlignment;\n        set => SetProperty(ref _verticalAlignment, value);\n    }\n\n    public HorizontalAlignment HorizontalAlignment\n    {\n        get => _horizontalAlignment;\n        set => SetProperty(ref _horizontalAlignment, value);\n    }\n\n    public Orientation Orientation\n    {\n        get => _orientation;\n        set => SetProperty(ref _orientation, value);\n    }\n\n    public override string ToString()\n    {\n        return $\"{(Type == ProgressTypes.Bar ? LocalizationHelper.Get(\"S.Progress.Type.Bar\") : LocalizationHelper.Get(\"S.Progress.Type.Text\"))}, \" +\n               $\"{LocalizationHelper.Get(\"S.Color\")} #{Color.A:X2}{Color.R:X2}{Color.G:X2}{Color.B:X2}\" +\n               $\"{(Type == ProgressTypes.Text ? \", \" + LocalizationHelper.GetWithIndex(Precision, \"S.Progress.Precision.\", \"Minutes\", \"Seconds\", \"Milliseconds\", \"Percentage\", \"Count\", \"DateOfRecording\", \"Custom\") : \"\")}\";\n    }\n\n    public static ProgressViewModel Default()\n    {\n        return new ProgressViewModel\n        {\n            Type = ProgressTypes.Text,\n            FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"],\n            FontStyle = FontStyles.Normal,\n            FontWeight = FontWeights.Normal,\n            FontSize = 14,\n            FontColor = Color.FromArgb(255, 255, 255, 255),\n            Color = Color.FromArgb(255, 0, 0, 0),\n            Precision = 0,\n            StartNumber = 0,\n            ShowTotal = true,\n            Format = \" $s/@s s\",\n            DateFormat = \"G\",\n            Thickness = 10,\n            VerticalAlignment = VerticalAlignment.Bottom,\n            HorizontalAlignment = HorizontalAlignment.Left,\n            Orientation = Orientation.Horizontal\n        };\n    }\n\n    public static ProgressViewModel FromSettings()\n    {\n        return new ProgressViewModel\n        {\n            Type = UserSettings.All.ProgressType,\n            FontFamily = UserSettings.All.ProgressFontFamily,\n            FontStyle = UserSettings.All.ProgressFontStyle,\n            FontWeight = UserSettings.All.ProgressFontWeight,\n            FontSize = UserSettings.All.ProgressFontSize,\n            FontColor = UserSettings.All.ProgressFontColor,\n            Color = UserSettings.All.ProgressColor,\n            Precision = UserSettings.All.ProgressPrecision,\n            StartNumber = UserSettings.All.ProgressStartNumber,\n            ShowTotal = UserSettings.All.ProgressShowTotal,\n            Format = UserSettings.All.ProgressFormat,\n            DateFormat = UserSettings.All.ProgressDateFormat,\n            Thickness = UserSettings.All.ProgressThickness,\n            VerticalAlignment = UserSettings.All.ProgressVerticalAligment,\n            HorizontalAlignment = UserSettings.All.ProgressHorizontalAligment,\n            Orientation = UserSettings.All.ProgressOrientation\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/ResizeViewModel.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.Serialization;\nusing System.Windows;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class ResizeViewModel : BaseTaskViewModel\n{\n    #region Variables\n\n    private decimal _widthRatio = -1;\n    private decimal _heightRatio = -1;\n\n    private int _originalWidth;\n    private int _originalHeight;\n    private double _originalDpi;\n    private int _width;\n    private int _height;\n    private decimal _widthInPercent;\n    private decimal _heightInPercent;\n    private double _dpi;\n    private bool _keepAspectRatio;\n    private SizeUnits _sizeUnit;\n    private BitmapScalingMode _scalingMode;\n\n    #endregion\n\n    public ResizeViewModel()\n    {\n        TaskType = TaskTypes.Resize;\n    }\n    \n    public int OriginalWidth\n    {\n        get => _originalWidth;\n        set => SetProperty(ref _originalWidth, value);\n    }\n\n    public int OriginalHeight\n    {\n        get => _originalHeight;\n        set => SetProperty(ref _originalHeight, value);\n    }\n\n    public double OriginalDpi\n    {\n        get => _originalDpi;\n        set => SetProperty(ref _originalDpi, value);\n    }\n    \n    public int Width\n    {\n        get => _width;\n        set\n        {\n            if (!SetProperty(ref _width, value))\n                return;\n\n            WidthInPercent = MathExtensions.CrossMultiplication(OriginalWidth, (decimal) Width, null);\n\n            OnPropertyChanged(nameof(WidthDiff));\n            OnPropertyChanged(nameof(SizeDiff));\n\n            if (!KeepAspectRatio)\n                return;\n\n            Height = (int)Math.Round(_heightRatio * value / _widthRatio);\n        }\n    }\n\n    public int Height\n    {\n        get => _height;\n        set\n        {\n            if (!SetProperty(ref _height, value))\n                return;\n\n            HeightInPercent = MathExtensions.CrossMultiplication(OriginalHeight, (decimal) Height, null);\n\n            OnPropertyChanged(nameof(HeightDiff));\n            OnPropertyChanged(nameof(SizeDiff));\n\n            if (!KeepAspectRatio)\n                return;\n\n            Width = (int)Math.Round(_widthRatio * value / _heightRatio);\n        }\n    }\n\n    public decimal WidthInPercent\n    {\n        get => _widthInPercent;\n        set\n        {\n            if (!SetProperty(ref _widthInPercent, value))\n                return;\n\n            Width = (int)Math.Round(MathExtensions.CrossMultiplication(OriginalWidth, null, WidthInPercent));\n\n            if (!KeepAspectRatio)\n                return;\n\n            Height = (int)Math.Round(_heightRatio * Width / _widthRatio);\n        }\n    }\n\n    public decimal HeightInPercent\n    {\n        get => _heightInPercent;\n        set\n        {\n            if (!SetProperty(ref _heightInPercent, value))\n                return;\n\n            Height = (int)Math.Round(MathExtensions.CrossMultiplication(OriginalHeight, null, HeightInPercent));\n\n            if (!KeepAspectRatio)\n                return;\n\n            Width = (int)Math.Round(_widthRatio * Height / _heightRatio);\n        }\n    }\n\n    public double Dpi\n    {\n        get => _dpi;\n        set\n        {\n            SetProperty(ref _dpi, value);\n\n            OnPropertyChanged(nameof(DpiDiff));\n        }\n    }\n\n\n    public bool KeepAspectRatio\n    {\n        get => _keepAspectRatio;\n        set\n        {\n            SetProperty(ref _keepAspectRatio, value);\n\n            if (!value)\n                return;\n\n            var gcd = MathExtensions.Gcd((decimal) Height, Width);\n\n            _widthRatio = Width / gcd;\n            _heightRatio = Height / gcd;\n        }\n    }\n\n    public SizeUnits SizeUnit\n    {\n        get => _sizeUnit;\n        set\n        {\n            if (!SetProperty(ref _sizeUnit, value))\n                return;\n\n            OnPropertyChanged(nameof(DisplayInPixels));\n            OnPropertyChanged(nameof(DisplayInPercents));\n        }\n    }\n\n    public BitmapScalingMode ScalingMode\n    {\n        get => _scalingMode;\n        set => SetProperty(ref _scalingMode, value);\n    }\n\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public Visibility DisplayInPixels => SizeUnit == SizeUnits.Pixels ? Visibility.Visible : Visibility.Collapsed;\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public Visibility DisplayInPercents => SizeUnit == SizeUnits.Percent ? Visibility.Visible : Visibility.Collapsed;\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public decimal SizeDiff => MathExtensions.CrossMultiplication((decimal)OriginalWidth * OriginalHeight, Width * Height, null) - 100m;\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public decimal WidthDiff => MathExtensions.CrossMultiplication((decimal)OriginalWidth, Width, null) - 100m;\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public decimal HeightDiff => MathExtensions.CrossMultiplication((decimal)OriginalHeight, Height, null) - 100m;\n\n    [DataMember(EmitDefaultValue = false)]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public double DpiDiff => MathExtensions.CrossMultiplication(OriginalDpi, Dpi, null) - 100d;\n\n\n    public static ResizeViewModel Default()\n    {\n        return new ResizeViewModel\n        {\n            KeepAspectRatio = true,\n            SizeUnit = SizeUnits.Percent,\n            ScalingMode = BitmapScalingMode.Linear\n        };\n    }\n\n    public static ResizeViewModel FromSettings(int width = 0, int height = 0, double dpi = 96d)\n    {\n        return new ResizeViewModel\n        {\n            OriginalWidth = width,\n            OriginalHeight = height,\n            OriginalDpi = dpi,\n            Width = width,\n            Height = height,\n            Dpi = dpi,\n            KeepAspectRatio = UserSettings.All.KeepAspectRatio,\n            SizeUnit = UserSettings.All.SizeUnit,\n            ScalingMode = UserSettings.All.ScalingMode\n        };\n    }\n\n    public override void Persist()\n    {\n        UserSettings.All.SizeUnit = SizeUnit;\n        UserSettings.All.KeepAspectRatio = KeepAspectRatio;\n        UserSettings.All.ScalingMode = ScalingMode;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/Tasks/ShadowViewModel.cs",
    "content": "using System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel.Tasks;\n\npublic class ShadowViewModel : BaseTaskViewModel\n{\n    #region Variables\n\n    private Color _shadowColor;\n    private Color _backgroundColor;\n    private double _direction;\n    private double _blurRadius;\n    private double _opacity;\n    private double _depth;\n\n    #endregion\n\n    public ShadowViewModel()\n    {\n        TaskType = TaskTypes.Shadow;\n    }\n\n    public Color Color\n    {\n        get => _shadowColor;\n        set => SetProperty(ref _shadowColor, value);\n    }\n\n    public Color BackgroundColor\n    {\n        get => _backgroundColor;\n        set => SetProperty(ref _backgroundColor, value);\n    }\n\n    public double Direction\n    {\n        get => _direction;\n        set => SetProperty(ref _direction, value);\n    }\n\n    public double BlurRadius\n    {\n        get => _blurRadius;\n        set => SetProperty(ref _blurRadius, value);\n    }\n\n    public double Opacity\n    {\n        get => _opacity;\n        set => SetProperty(ref _opacity, value);\n    }\n\n    public double Depth\n    {\n        get => _depth;\n        set => SetProperty(ref _depth, value);\n    }\n\n    public override string ToString()\n    {\n        return $\"{LocalizationHelper.Get(\"S.Shadow.ShadowColor\")} #{Color.A:X2}{Color.R:X2}{Color.G:X2}{Color.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.Shadow.BackgroundColor\")} #{BackgroundColor.A:X2}{BackgroundColor.R:X2}{BackgroundColor.G:X2}{BackgroundColor.B:X2}, \" +\n               $\"{LocalizationHelper.Get(\"S.Shadow.Direction\")} {Direction}°, \" +\n               $\"{LocalizationHelper.Get(\"S.Shadow.BlurRadius\")} {BlurRadius}, \" +\n               $\"{LocalizationHelper.Get(\"S.Shadow.Depth\")} {Depth}\";\n    }\n\n    public static ShadowViewModel Default()\n    {\n        return new ShadowViewModel\n        {\n            Color = Color.FromArgb(255, 0, 0, 0),\n            BackgroundColor = Color.FromArgb(255, 255, 255, 255),\n            Direction = 270,\n            BlurRadius = 20,\n            Opacity = 60,\n            Depth = 5\n        };\n    }\n\n    public static ShadowViewModel FromSettings()\n    {\n        return new ShadowViewModel\n        {\n            Color = UserSettings.All.ShadowColor,\n            BackgroundColor = UserSettings.All.ShadowBackgroundColor,\n            Direction = UserSettings.All.ShadowDirection,\n            BlurRadius = UserSettings.All.ShadowBlurRadius,\n            Opacity = UserSettings.All.ShadowOpacity,\n            Depth = UserSettings.All.ShadowDepth,\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UpdateAvailable.cs",
    "content": "using ScreenToGif.Util.Settings;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class UpdateAvailable\n{\n    public bool IsFromGithub { get; set; } = true;\n\n    /// <summary>\n    /// The update binary idenfitication failed.\n    /// Update must be done manually.\n    /// </summary>\n    public bool MustDownloadManually { get; set; } = false;\n\n    public bool HasDownloadLink => !string.IsNullOrWhiteSpace(InstallerDownloadUrl);\n\n    public Version Version { get; set; }\n    public string Description { get; set; }\n    public bool IsDownloading { get; set; }\n\n    public string InstallerPath { get; set; }\n    public string InstallerName { get; set; }\n    public string InstallerDownloadUrl { get; set; }\n    public long InstallerSize { get; set; }\n\n    public string PortablePath { get; set; }\n    public string PortableName { get; set; }\n    public string PortableDownloadUrl { get; set; }\n    public long PortableSize { get; set; }\n    \n#if FULL_MULTI_MSIX\n    public string ActivePath\n    {\n        get => InstallerPath;\n        set => InstallerPath = value;\n    }\n\n    public string ActiveName => InstallerName;\n    public string ActiveDownloadUrl => InstallerDownloadUrl;\n    public long ActiveSize => InstallerSize;\n#else\n    public string ActivePath\n    {\n        get => UserSettings.All.PortableUpdate ? PortablePath : InstallerPath;\n        set\n        {\n            if (UserSettings.All.PortableUpdate)\n                PortablePath = value;\n            else\n                InstallerPath = value;\n        }\n    }\n\n    public string ActiveName => UserSettings.All.PortableUpdate ? PortableName : InstallerName;\n    public string ActiveDownloadUrl => UserSettings.All.PortableUpdate ? PortableDownloadUrl : InstallerDownloadUrl;\n    public long ActiveSize => UserSettings.All.PortableUpdate ? PortableSize : InstallerSize;\n#endif\n\n    public TaskCompletionSource<bool> TaskCompletionSource { get; set; }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/Custom/CustomPreset.cs",
    "content": "namespace ScreenToGif.ViewModel.UploadPresets.Custom;\n\npublic class CustomPreset : UploadPreset\n{\n    //Custom uploader.\n    //List of calls, with address, input and output.\n    //Data flow.\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/History/History.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.Serialization;\nusing System.Windows;\nusing System.Windows.Documents;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util.Extensions;\n\nnamespace ScreenToGif.ViewModel.UploadPresets.History;\n\npublic class History : BindableBase, IHistory\n{\n    private UploadDestinations _type;\n    private string _presetName;\n    private DateTime? _dateInUtc;\n    private int _result;\n    private long _size;\n    private TimeSpan? _duration;\n    private string _link;\n    private string _deletionLink;\n    private string _message;\n\n\n    public UploadDestinations Type\n    {\n        get => _type;\n        set => SetProperty(ref _type, value);\n    }\n\n    public string PresetName\n    {\n        get => _presetName;\n        set => SetProperty(ref _presetName, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public DateTime? DateInUtc\n    {\n        get => _dateInUtc;\n        set\n        {\n            SetProperty(ref _dateInUtc, value);\n            OnPropertyChanged(nameof(DateInLocalTime));\n        }\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public DateTime? DateInLocalTime => _dateInUtc?.ToLocalTime();\n\n    public int Result\n    {\n        get => _result;\n        set\n        {\n            SetProperty(ref _result, value);\n            OnPropertyChanged(nameof(WasSuccessful));\n        }\n    }\n\n    public bool WasSuccessful => _result == 200;\n\n    [DataMember(EmitDefaultValue = false)]\n    public long Size\n    {\n        get => _size;\n        set => SetProperty(ref _size, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public TimeSpan? Duration\n    {\n        get => _duration;\n        set => SetProperty(ref _duration, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Link\n    {\n        get => _link;\n        set\n        {\n            SetProperty(ref _link, value);\n            OnPropertyChanged(nameof(Content));\n        }\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string DeletionLink\n    {\n        get => _deletionLink;\n        set\n        {\n            SetProperty(ref _deletionLink, value);\n            OnPropertyChanged(nameof(Content));\n        }\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Message\n    {\n        get => _message;\n        set\n        {\n            SetProperty(ref _message, value);\n            OnPropertyChanged(nameof(Content));\n        }\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public virtual FlowDocument Content\n    {\n        get\n        {\n            var document = new FlowDocument\n            {\n                PagePadding = new Thickness(3),\n                FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"]\n            };\n\n            if (!WasSuccessful)\n            {\n                document.Blocks.Add(new Paragraph(new Run(Message)));\n                return document;\n            }\n\n            var paragraph = new Paragraph()\n                .WithKeyLink(\"S.Options.Upload.History.Detail.Link\", Link)\n                .WithLineBreak()\n                .WithKeyLink(\"S.Options.Upload.History.Detail.DeleteLink\", DeletionLink);\n\n            document.Blocks.Add(paragraph);\n            return document;\n        }\n    }\n\n    public virtual string GetLink(IPreset preset)\n    {\n        return Link;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/History/ImgurHistory.cs",
    "content": "using System.ComponentModel;\nusing System.Runtime.Serialization;\nusing System.Windows;\nusing System.Windows.Documents;\nusing System.Windows.Media;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Util.Extensions;\nusing ScreenToGif.ViewModel.UploadPresets.Imgur;\n\nnamespace ScreenToGif.ViewModel.UploadPresets.History;\n\npublic class ImgurHistory : History\n{\n    private string _id;\n    private string _mp4;\n    private string _webm;\n    private string _gifv;\n    private string _gif;\n\n    public string Id\n    {\n        get => _id;\n        set => SetProperty(ref _id, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Mp4\n    {\n        get => _mp4;\n        set\n        {\n            SetProperty(ref _mp4, value);\n            OnPropertyChanged(nameof(Content));\n        }\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Webm\n    {\n        get => _webm;\n        set => SetProperty(ref _webm, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Gifv\n    {\n        get => _gifv;\n        set\n        {\n            SetProperty(ref _gifv, value);\n            OnPropertyChanged(nameof(Content));\n        }\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Gif\n    {\n        get => _gif;\n        set\n        {\n            SetProperty(ref _gif, value);\n            OnPropertyChanged(nameof(Content));\n        }\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public override FlowDocument Content\n    {\n        get\n        {\n            var document = new FlowDocument\n            {\n                PagePadding = new Thickness(3),\n                FontFamily = (FontFamily)Application.Current.Resources[\"FontFamilyNormal\"]\n            };\n\n            if (!WasSuccessful)\n            {\n                document.Blocks.Add(new Paragraph(new Run(Message)));\n                return document;\n            }\n\n            var paragraph = new Paragraph()\n                .WithKeyLink(\"S.Options.Upload.History.Detail.Link\", Link)\n                .WithLineBreak()\n                .WithKeyLink(\"Mp4:\", Mp4, true)\n                .WithLineBreak()\n                .WithKeyLink(\"Gifv:\", Gifv, true)\n                .WithLineBreak()\n                .WithKeyLink(\"Gif:\", Gif, true)\n                .WithLineBreak()\n                .WithKeyLink(\"S.Options.Upload.History.Detail.DeleteLink\", DeletionLink);\n\n            document.Blocks.Add(paragraph);\n            return document;\n        }\n    }\n\n    public ImgurHistory()\n    {\n        Type = UploadDestinations.Imgur;\n    }\n\n    public override string GetLink(IPreset preset)\n    {\n        if (preset is not ImgurPreset imgurPreset)\n            return Link;\n\n        if (imgurPreset.UseDirectLinks)\n        {\n            if (imgurPreset.UseGifvLinks && !string.IsNullOrEmpty(Gifv))\n                return Gifv ?? Gif;\n\n            return Gif;\n        }\n\n        return $\"https://imgur.com/{Id}\";\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/Imgur/ImgurAlbum.cs",
    "content": "using ScreenToGif.Domain.Models.Upload.Imgur;\n\nnamespace ScreenToGif.ViewModel.UploadPresets.Imgur;\n\npublic class ImgurAlbum\n{\n    public string Id { get; set; }\n        \n    public string Title { get; set; }\n        \n    public string Description { get; set; }\n        \n    public string Link { get; set; }\n        \n    public string Privacy { get; set; }\n        \n    public bool Favorite { get; set; }\n        \n    public bool? Nsfw { get; set; }\n\n    public int ImagesCount { get; set; }\n\n    public ImgurAlbum()\n    { }\n\n    public ImgurAlbum(ImgurAlbumData data)\n    {\n        Id = data.Id;\n        Title = data.Title;\n        Description = data.Description;\n        Link = data.Link;\n        Privacy = data.Privacy;\n        Favorite = data.Favorite;\n        Nsfw = data.Nsfw;\n        ImagesCount = data.ImagesCount;\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/Imgur/ImgurPreset.cs",
    "content": "using System.Collections;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Runtime.Serialization;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.ViewModel.UploadPresets.Imgur;\n\npublic class ImgurPreset : UploadPreset\n{\n    private string _oAuthToken = \"\";\n    private string _accessToken = \"\";\n    private string _refreshToken = \"\";\n    private DateTime? _expiryDate;\n    private bool _useDirectLinks;\n    private bool _useGifvLinks;\n    private bool _uploadToAlbum;\n    private string _selectedAlbum;\n    private ArrayList _albums;\n\n    [DataMember(EmitDefaultValue = false)]\n    public string OAuthToken\n    {\n        get => _oAuthToken;\n        set => SetProperty(ref _oAuthToken, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string AccessToken\n    {\n        get => _accessToken;\n        set => SetProperty(ref _accessToken, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string RefreshToken\n    {\n        get => _refreshToken;\n        set => SetProperty(ref _refreshToken, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public DateTime? ExpiryDate\n    {\n        get => _expiryDate;\n        set\n        {\n            SetProperty(ref _expiryDate, value);\n            OnPropertyChanged(nameof(Status));\n        }\n    }\n        \n    public bool UseDirectLinks\n    {\n        get => _useDirectLinks;\n        set => SetProperty(ref _useDirectLinks, value);\n    }\n\n    public bool UseGifvLinks\n    {\n        get => _useGifvLinks;\n        set => SetProperty(ref _useGifvLinks, value);\n    }\n\n    public bool UploadToAlbum\n    {\n        get => _uploadToAlbum;\n        set => SetProperty(ref _uploadToAlbum, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string SelectedAlbum\n    {\n        get => _selectedAlbum;\n        set => SetProperty(ref _selectedAlbum, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public ArrayList Albums\n    {\n        get => _albums;\n        set => SetProperty(ref _albums, value);\n    }\n\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string Status => AccessToken == null || !ExpiryDate.HasValue ?\n        LocalizationHelper.Get(\"S.Options.Upload.Preset.Info.NotAuthorized\") : ExpiryDate < DateTime.UtcNow ?\n            string.Format(LocalizationHelper.Get(\"S.Options.Upload.Preset.Info.Expired\"), ExpiryDate.Value.ToLocalTime().ToString(\"g\", CultureInfo.CurrentUICulture)) :\n            string.Format(LocalizationHelper.Get(\"S.Options.Upload.Preset.Info.Valid\"), ExpiryDate.Value.ToLocalTime().ToString(\"g\", CultureInfo.CurrentUICulture));\n\n\n    public ImgurPreset() : this(10000000L, TimeSpan.FromMinutes(1))\n    { }\n\n    public ImgurPreset(long? sizeLimit = null, TimeSpan? durationLimit = null, Size? resolutionLimit = null) : base(sizeLimit, durationLimit, resolutionLimit)\n    {\n        Type = UploadDestinations.Imgur;\n        ImageId = \"Vector.Imgur\";\n        AllowedTypes = new List<ExportFormats>\n        {\n            ExportFormats.Apng,\n            ExportFormats.Gif,\n                \n            //Only enable video upload, when the API gets fixed.\n            //I also need to pass the correct resource type in the multi-part data (video instead of image).\n            //ExportType.Avi,\n            //ExportType.Mov,\n            //ExportType.Mkv,\n            //ExportType.Mp4,\n            //ExportType.Webm,\n\n            ExportFormats.Jpeg,\n            ExportFormats.Png\n        };\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/UploadPreset.cs",
    "content": "using System.Collections;\nusing System.ComponentModel;\nusing System.Runtime.Serialization;\nusing System.Windows;\nusing ScreenToGif.Domain.Enums;\nusing ScreenToGif.Domain.Events;\nusing ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util;\n\nnamespace ScreenToGif.ViewModel.UploadPresets;\n\npublic class UploadPreset : BindableBase, IUploadPreset\n{\n    private UploadDestinations _type = UploadDestinations.NotDefined;\n    private bool _isEnabled = true;\n    private string _title = \"\";\n    private string _description = \"\";\n    private string _imageId;\n    private bool _isAnonymous;\n    private ArrayList _history = new();\n    private List<ExportFormats> _allowedTypes;\n        \n    private readonly long? _sizeLimit;\n    private readonly TimeSpan? _durationLimit;\n    private readonly Size? _resolutionLimit;\n\n    public UploadPreset()\n    { }\n\n    public UploadPreset(long? sizeLimit, TimeSpan? durationLimit = null, Size? resolutionLimit = null)\n    {\n        _sizeLimit = sizeLimit;\n        _durationLimit = durationLimit;\n        _resolutionLimit = resolutionLimit;\n    }\n\n    public UploadDestinations Type\n    {\n        get => _type;\n        set => SetProperty(ref _type, value);\n    }\n\n    public bool IsEnabled\n    {\n        get => _isEnabled;\n        set => SetProperty(ref _isEnabled, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Title\n    {\n        get => _title;\n        set => SetProperty(ref _title, value);\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public string Description\n    {\n        get => _description;\n        set => SetProperty(ref _description, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string ImageId\n    {\n        get => _imageId;\n        set => SetProperty(ref _imageId, value);\n    }\n\n    public bool IsAnonymous\n    {\n        get => _isAnonymous;\n        set\n        {\n            SetProperty(ref _isAnonymous, value);\n            OnPropertyChanged(nameof(Mode));\n        }\n    }\n\n    [DataMember(EmitDefaultValue = false)]\n    public ArrayList History\n    {\n        get => _history;\n        set => SetProperty(ref _history, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public List<ExportFormats> AllowedTypes\n    {\n        get => _allowedTypes;\n        set => SetProperty(ref _allowedTypes, value);\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string TypeName\n    {\n        get\n        {\n            switch (Type)\n            {\n                case UploadDestinations.Imgur:\n                    return \"Imgur\";\n                case UploadDestinations.Yandex:\n                    return \"Yandex\";\n                case UploadDestinations.Custom:\n                    return LocalizationHelper.Get(\"S.Options.Upload.Preset.Custom\");\n                default:\n                    return LocalizationHelper.Get(\"S.Options.Upload.Preset.Select\");\n            }\n        }\n    }\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool HasLimit => HasSizeLimit || HasDurationLimit || HasResolutionLimit;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool HasSizeLimit => _sizeLimit != null;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool HasDurationLimit => _durationLimit != null;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public bool HasResolutionLimit => _resolutionLimit != null;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public long? SizeLimit => _sizeLimit;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public TimeSpan? DurationLimit => _durationLimit;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public Size? ResolutionLimit => _resolutionLimit;\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string Limit => (HasLimit ? \"▼ \" : \"\") + (HasSizeLimit ? Humanizer.BytesToString(SizeLimit ?? 0L) : \"\") + (HasSizeLimit && (HasDurationLimit || HasResolutionLimit) ? \" • \" : \"\") +\n                           (HasDurationLimit ? $\"{DurationLimit:mm\\':\\'ss} m\" : \"\") + (HasDurationLimit && HasResolutionLimit ? \" • \" : \"\") + (HasResolutionLimit ? $\"{ResolutionLimit?.Width}x{ResolutionLimit?.Height}\" : \"\");\n\n    [IgnoreDataMember]\n    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n    public string Mode => IsAnonymous ? LocalizationHelper.Get(\"S.Options.Upload.Preset.Mode.Anonymous\") : LocalizationHelper.Get(\"S.Options.Upload.Preset.Mode.Authenticated\");\n\n\n    public virtual Task<ValidatedEventArgs> IsValid()\n    {\n        return Task.FromResult((ValidatedEventArgs) null);\n    }\n        \n    public UploadPreset ShallowCopy()\n    {\n        return (UploadPreset) MemberwiseClone();\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/UploadPresets/Yandex/YandexPreset.cs",
    "content": "using System.Runtime.Serialization;\nusing ScreenToGif.Domain.Enums;\n\nnamespace ScreenToGif.ViewModel.UploadPresets.Yandex;\n\npublic class YandexPreset : UploadPreset\n{\n    private string _oAuthToken = \"\";\n\n    [DataMember(EmitDefaultValue = false)]\n    public string OAuthToken\n    {\n        get => _oAuthToken;\n        set => SetProperty(ref _oAuthToken, value);\n    }\n\n    public YandexPreset()\n    {\n        Type = UploadDestinations.Yandex;\n        ImageId = \"Vector.YandexDisk\";\n        AllowedTypes = new List<ExportFormats>();\n    }\n}"
  },
  {
    "path": "ScreenToGif.ViewModel/VideoSourceViewModel.cs",
    "content": "using ScreenToGif.Domain.Interfaces;\nusing ScreenToGif.Domain.Models;\nusing ScreenToGif.Domain.ViewModels;\nusing ScreenToGif.Util;\nusing ScreenToGif.Util.Settings;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing System.Windows;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Threading;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class VideoSourceViewModel : BindableBase, IDisposable\n{\n    private readonly Lock _lock = new();\n    private int _previewerReady = 0;\n    private readonly MediaPlayer _lowerPlayer = new() { Volume = 0, ScrubbingEnabled = true };\n    private readonly MediaPlayer _upperPlayer = new() { Volume = 0, ScrubbingEnabled = true };\n    private readonly DebounceDispatcher _debounceDispatcher = new();\n    private bool _wasPreviewChangeSubscribed;\n    private bool _wasImportChangeSubscribed;\n    private Process _process;\n    private bool _cancelled;\n    private readonly Queue<TimeSpan> _positions = new();\n\n    private bool _isLoading;\n    private bool _wasLoaded;\n    private bool _isImporting;\n    private double _importProgress;\n    private double _maximumProgress;\n    private double _scale = 100;\n    private int _videoImporter;\n    private int _originalWidth;\n    private int _originalHeight;\n    private TimeSpan _originalDuration;\n    private int _framerate;\n    private int _startMillisecond;\n    private int _endMillisecond;\n    private RenderTargetBitmap _lowerSelectionImage;\n    private RenderTargetBitmap _upperSelectionImage;\n\n    public bool IsLoading\n    {\n        get => _isLoading;\n        set\n        {\n            SetProperty(ref _isLoading, value);\n\n            OnPropertyChanged(nameof(AreControlsEnabled));\n        }\n    }\n\n    public bool WasLoaded\n    {\n        get => _wasLoaded;\n        set => SetProperty(ref _wasLoaded, value);\n    }\n\n    public bool IsImporting\n    {\n        get => _isImporting;\n        set\n        {\n            SetProperty(ref _isImporting, value);\n\n            OnPropertyChanged(nameof(AreControlsEnabled));\n            OnPropertyChanged(nameof(ImportingVisibility));\n        }\n    }\n\n    public double ImportProgress\n    {\n        get => _importProgress;\n        set => SetProperty(ref _importProgress, value);\n    }\n\n    public double MaximumProgress\n    {\n        get => _maximumProgress;\n        set => SetProperty(ref _maximumProgress, value);\n    }\n\n    public Visibility LoadingVisibility => IsLoading ? Visibility.Visible : Visibility.Collapsed;\n\n    public bool AreControlsEnabled => !IsLoading && !IsImporting;\n\n    public Visibility ImportingVisibility => IsImporting ? Visibility.Visible : Visibility.Collapsed;\n    \n    public string VideoPath { get; set; }\n\n    public string RootFolder { get; set; }\n\n    public List<IFrame> Frames { get; set; }\n\n    public double Scale\n    {\n        get => _scale;\n        set\n        {\n            SetProperty(ref _scale, value);\n\n            OnPropertyChanged(nameof(TargetWidth));\n            OnPropertyChanged(nameof(TargetHeight));\n        }\n    }\n\n    public int VideoImporter\n    {\n        get => _videoImporter;\n        set\n        {\n            if (SetProperty(ref _videoImporter, value))\n                _ = LoadPreview();\n        }\n    }\n\n    public int OriginalWidth\n    {\n        get => _originalWidth;\n        set\n        {\n            SetProperty(ref _originalWidth, value);\n\n            OnPropertyChanged(nameof(TargetWidth));\n        }\n    }\n\n    public int OriginalHeight\n    {\n        get => _originalHeight;\n        set\n        {\n            SetProperty(ref _originalHeight, value);\n\n            OnPropertyChanged(nameof(TargetHeight));\n        }\n    }\n\n    public TimeSpan OriginalDuration\n    {\n        get => _originalDuration;\n        set\n        {\n            SetProperty(ref _originalDuration, value);\n\n            OnPropertyChanged(nameof(MaximumMilliseconds));\n        }\n    }\n\n    public int MaximumMilliseconds => (int)OriginalDuration.TotalMilliseconds;\n\n    public int TargetWidth => (int)(OriginalWidth * Scale / 100D);\n\n    public int TargetHeight => (int)(OriginalHeight * Scale / 100D);\n\n    public int Framerate\n    {\n        get => _framerate;\n        set\n        {\n            SetProperty(ref _framerate, value);\n\n            OnPropertyChanged(nameof(FrameCount));\n        }\n    }\n\n    public int Delay => 1000 / Framerate;\n\n    public TimeSpan Duration => TimeSpan.FromMilliseconds(TotalMilliseconds);\n\n    public int TotalMilliseconds => EndMillisecond - StartMillisecond;\n\n    public int FrameCount\n    {\n        get\n        {\n            var delay = 1000 / Framerate;\n\n            return Convert.ToInt32(TotalMilliseconds / delay);\n        }\n    }\n\n    public int StartMillisecond\n    {\n        get => _startMillisecond;\n        set\n        {\n            if (SetProperty(ref _startMillisecond, value))\n            {\n                if (!IsLoading)\n                {\n                    if (VideoImporter == 0)\n                    {\n                        _lowerPlayer.Position = TimeSpan.FromMilliseconds(value);\n                    }\n                    else\n                    {\n                        _debounceDispatcher.SyncTime = DateTime.Now;\n                        _debounceDispatcher.Debounce(50, o => _ = RenderPreview(), DispatcherPriority.Input);\n                    }\n                }\n\n                OnPropertyChanged(nameof(TotalMilliseconds));\n                OnPropertyChanged(nameof(Duration));\n                OnPropertyChanged(nameof(FrameCount));\n            }\n        }\n    }\n\n    public int EndMillisecond\n    {\n        get => _endMillisecond;\n        set\n        {\n            if (SetProperty(ref _endMillisecond, value))\n            {\n                if (!IsLoading)\n                {\n                    if (VideoImporter == 0)\n                    {\n                        _upperPlayer.Position = TimeSpan.FromMilliseconds(value);\n                    }\n                    else\n                    {\n                        _debounceDispatcher.SyncTime = DateTime.Now;\n                        _debounceDispatcher.Debounce(50, o => _ = RenderPreview(false), DispatcherPriority.Input);\n                    }\n                }\n                \n                OnPropertyChanged(nameof(TotalMilliseconds));\n                OnPropertyChanged(nameof(Duration));\n                OnPropertyChanged(nameof(FrameCount));\n            }\n        }\n    }\n\n    public RenderTargetBitmap LowerSelectionImage\n    {\n        get => _lowerSelectionImage;\n        set => SetProperty(ref _lowerSelectionImage, value);\n    }\n\n    public RenderTargetBitmap UpperSelectionImage\n    {\n        get => _upperSelectionImage;\n        set => SetProperty(ref _upperSelectionImage, value);\n    }\n\n    //Commands.\n    public event EventHandler<object> ShowErrorRequested;\n    public event EventHandler<string> ShowWarningRequested;\n    public event EventHandler HideErrorRequested;\n    public event EventHandler CloseRequested;\n\n    //Methods.\n    public void LoadSettings()\n    {\n        VideoImporter = UserSettings.All.VideoImporter;\n        Framerate = UserSettings.All.LatestFpsImport;\n    }\n\n    public void SaveSettings()\n    {\n        UserSettings.All.VideoImporter = VideoImporter;\n        UserSettings.All.LatestFpsImport = Framerate;\n    }\n\n    public async Task LoadPreview()\n    {\n        try\n        {\n            if (VideoImporter == 1 && !await PathHelper.IsFfmpegPresent())\n            {\n                ShowWarningRequested?.Invoke(this, LocalizationHelper.Get(\"S.Editor.Warning.Ffmpeg\"));\n                return;\n            }\n\n            IsLoading = true;\n            LowerSelectionImage = null;\n            UpperSelectionImage = null;\n            OriginalWidth = 0;\n            OriginalHeight = 0;\n            \n            //MediaPlayer.\n            if (VideoImporter == 0)\n            {\n                //Unregister all events.\n                _upperPlayer.MediaOpened -= MediaPlayer_MediaOpened;\n                _lowerPlayer.MediaOpened -= MediaPlayer_MediaOpened;\n\n                _upperPlayer.MediaFailed -= MediaPlayer_MediaFailed;\n                _lowerPlayer.MediaFailed -= MediaPlayer_MediaFailed;\n\n                //The Change event throws error if not subscribed.\n                if (_wasPreviewChangeSubscribed)\n                {\n                    _upperPlayer.Changed -= UpperPlayer_Changed;\n                    _lowerPlayer.Changed -= LowerPlayer_Changed;\n                    _wasPreviewChangeSubscribed = false;\n                }\n\n                if (_wasImportChangeSubscribed)\n                {\n                    _lowerPlayer.Changed -= CapturePlayer_Changed;\n                    _wasImportChangeSubscribed = false;\n                }\n                \n                //Register new handlers.\n                _upperPlayer.MediaOpened += MediaPlayer_MediaOpened;\n                _upperPlayer.MediaFailed += MediaPlayer_MediaFailed;\n                _lowerPlayer.MediaOpened += MediaPlayer_MediaOpened;\n                _lowerPlayer.MediaFailed += MediaPlayer_MediaFailed;\n\n                if (!string.IsNullOrWhiteSpace(_upperPlayer.Source?.AbsoluteUri) && _upperPlayer.Source?.AbsoluteUri == new Uri(VideoPath).AbsoluteUri)\n                {\n                    //Same video as before.\n                    _previewerReady = 2;\n                    await WhenBothLoaded();\n                }\n                else\n                {\n                    //Open the same video file in both players.\n                    _upperPlayer.Open(new Uri(VideoPath));\n                    _upperPlayer.Pause();\n                    _lowerPlayer.Open(new Uri(VideoPath));\n                    _lowerPlayer.Pause();\n                }\n\n                return;\n            }\n\n            //FFmpeg.\n            await GetVideoDetails();\n            await SuccessLoading();\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to load the previewers\", \"Video source: \" + VideoPath);\n            ShowErrorRequested?.Invoke(this, LocalizationHelper.Get(\"S.ImportVideo.Error\"));\n        }\n    }\n\n    private async Task GetVideoDetails()\n    {\n        var process = new ProcessStartInfo(UserSettings.All.FfmpegLocation)\n        {\n            Arguments = $\" -i \\\"{VideoPath}\\\" -hide_banner\",\n            CreateNoWindow = true,\n            ErrorDialog = false,\n            UseShellExecute = false,\n            RedirectStandardError = true,\n            RedirectStandardOutput = true\n        };\n\n        var log = \"Arguments: \" + process.Arguments + Environment.NewLine;\n\n        string response;\n        using (var pro = await Task.Run(() => Process.Start(process)))\n        {\n            if (pro == null)\n                throw new Exception(\"It was not possible to start the FFmpeg process.\" + log);\n\n            //Read all output data.\n            response = await pro.StandardError.ReadToEndAsync();\n        }\n\n        /*\n           Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\\Users\\user\\Desktop\\example.mp4':\n           Metadata:\n           major_brand     : mp42\n           minor_version   : 0\n           compatible_brands: isomavc1mp42\n           creation_time   : 2010-03-15T22:51:17.000000Z\n           Duration: 00:01:02.58, start: 0.000000, bitrate: 589 kb/s\n           Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 104 kb/s (default)\n           Metadata:\n           creation_time   : 2010-03-15T22:51:17.000000Z\n           handler_name    : (C) 2007 Google Inc. v08.13.2007.\n           Stream #0:1(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x360 [SAR 1:1 DAR 4:3], 487 kb/s, 15 fps, 15 tbr, 15002 tbn, 30 tbc (default)\n           Metadata:\n           creation_time   : 2010-03-15T22:51:17.000000Z\n           handler_name    : (C) 2007 Google Inc. v08.13.2007.\n           At least one output file must be specified\n         */\n\n        /*\n            Arguments:  -i \"C:\\Users\\user\\Desktop\\example.mp4\" -hide_banner\n            Response: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\\Users\\nicke\\Desktop\\RPReplay_Final1600052642.MP4':\n              Metadata:\n                major_brand     : mp42\n                minor_version   : 1\n                compatible_brands: isommp41mp42\n                creation_time   : 2020-09-14T03:04:02.000000Z\n              Duration: 00:00:09.30, start: 0.000000, bitrate: 18391 kb/s\n                Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)\n                Metadata:\n                  creation_time   : 2020-09-14T03:04:02.000000Z\n                  handler_name    : Core Media Audio\n                Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709/bt709/unknown), 1440x1920, 18383 kb/s, 59.14 fps, 60 tbr, 600 tbn, 1200 tbc (default)\n                Metadata:\n                  rotate          : 270\n                  creation_time   : 2020-09-14T03:04:02.000000Z\n                  handler_name    : Core Media Video\n                Side data:\n                  displaymatrix: rotation of 90.00 degrees\n            At least one output file must be specified\n        */\n\n        log += \"Response: \" + response + Environment.NewLine;\n\n        //Tries to find the line which shows the video stream details. TODO: What happens if there's more than 1 video stream?\n        var lineRegex = new Regex(\".*(Stream.\\\\#).*(Video\\\\:).*\", RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        var linesFound = lineRegex.Matches(response);\n\n        if (linesFound.Count == 0)\n            throw new Exception(\"No video stream found.\" + log);\n\n        //Tries to find the part which tells the resolution.\n        var resolutionRegex = new Regex(\"[0-9]{2,4}x[0-9]{2,4}\\\\w+\", RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        var resolutionsFound = resolutionRegex.Matches(linesFound[0].Value);\n\n        if (resolutionsFound.Count == 0)\n            throw new Exception(\"No video resolution found.\" + log);\n\n        //Tries to find the line which shows the video rotation.\n        var rotationRegex = new Regex(\".*(rotate          : ).*\", RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        var linesFound2 = rotationRegex.Matches(response);\n        var isRotated = linesFound2.Count > 0 && (linesFound2[0].Value.Contains(\"90\") || linesFound2[0].Value.Contains(\"270\"));\n\n        //Tries to find the line which shows the video stream details.\n        var durationRegex = new Regex(\".*(Duration: ).*\", RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        var linesFound3 = durationRegex.Matches(response);\n\n        if (linesFound3.Count == 0)\n            throw new Exception(\"No video duration found.\" + log);\n\n        //Tried to find the total time of the video.\n        var timingRegex = new Regex(\"[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(\\\\.[0-9]{1,2})?\", RegexOptions.IgnoreCase | RegexOptions.Compiled);\n        var timingsFound = timingRegex.Matches(linesFound3[0].Value);\n\n        if (timingsFound.Count == 0)\n            throw new Exception(\"No video timing found.\" + log);\n\n        var size = resolutionsFound[0].Value.Split('x');\n\n        OriginalWidth = Convert.ToInt32(size[isRotated ? 1 : 0]);\n        OriginalHeight = Convert.ToInt32(size[isRotated ? 0 : 1]);\n        OriginalDuration = TimeSpan.ParseExact(timingsFound[0].Value, \"hh\\\\:mm\\\\:ss\\\\.ff\", CultureInfo.InvariantCulture);\n    }\n\n    private async Task WhenBothLoaded()\n    {\n        lock (_lock)\n        {\n            //Wait for both media players to load, ensuring that only one at time can enter this code block.\n            _previewerReady++;\n\n            if (_previewerReady <= 1)\n                return;\n        }\n\n        //Get video details.\n        if (_lowerPlayer.NaturalVideoWidth > 0 && _lowerPlayer.NaturalVideoHeight > 0)\n        {\n            OriginalWidth = _lowerPlayer.NaturalVideoWidth;\n            OriginalHeight = _lowerPlayer.NaturalVideoHeight;\n        }\n\n        OriginalDuration = _lowerPlayer.NaturalDuration.HasTimeSpan ? _lowerPlayer.NaturalDuration.TimeSpan : TimeSpan.Zero;\n\n        //If it was not possible to load the video, warn the user.\n        if (OriginalWidth <= 10 || OriginalHeight <= 10 || OriginalDuration.TotalMilliseconds <= 10)\n        {\n            FaultLoading();\n            return;\n        }\n\n        //Events used to show the actual frames.\n        _lowerPlayer.Changed += LowerPlayer_Changed;\n        _upperPlayer.Changed += UpperPlayer_Changed;\n        _wasPreviewChangeSubscribed = true;\n\n        //If the video was loaded successfully.\n        await SuccessLoading();\n    }\n\n    private async Task SuccessLoading()\n    {\n        LowerSelectionImage = new RenderTargetBitmap(OriginalWidth, OriginalHeight, 96, 96, PixelFormats.Pbgra32);\n        UpperSelectionImage = new RenderTargetBitmap(OriginalWidth, OriginalHeight, 96, 96, PixelFormats.Pbgra32);\n\n        StartMillisecond = 0;\n        EndMillisecond = MaximumMilliseconds;\n        WasLoaded = true;\n\n        //MediaPlayer.\n        if (VideoImporter == 0)\n        {\n            _lowerPlayer.Position = TimeSpan.FromMilliseconds(StartMillisecond);\n            _upperPlayer.Position = TimeSpan.FromMilliseconds(EndMillisecond);\n        }\n\n        await RenderPreview();\n        await RenderPreview(false);\n\n        IsLoading = false;\n    }\n\n    private async Task RenderPreview(bool lower = true)\n    {\n        try\n        {\n            if (!WasLoaded)\n                return;\n\n            var drawingVisual = new DrawingVisual();\n\n            if (lower)\n            {\n                using (var dc = drawingVisual.RenderOpen())\n                {\n                    dc.DrawRectangle(Brushes.Blue, null, new Rect(0, 0, OriginalWidth, OriginalHeight));\n\n                    if (VideoImporter == 0)\n                        dc.DrawVideo(_lowerPlayer, new Rect(0, 0, _lowerPlayer.NaturalVideoWidth, _lowerPlayer.NaturalVideoHeight));\n                    else\n                    {\n                        //Capture image from FFmpeg.\n                        var image = await GetScreencap();\n\n                        //Render image in target.\n                        if (image != null)\n                            dc.DrawImage(image, new Rect(0, 0, OriginalWidth, OriginalHeight));\n                    }\n                }\n\n                lock (_lock)\n                    LowerSelectionImage.Render(drawingVisual);\n\n                OnPropertyChanged(nameof(LowerSelectionImage));\n\n                return;\n            }\n\n            using (var dc = drawingVisual.RenderOpen())\n            {\n                dc.DrawRectangle(Brushes.Red, null, new Rect(0, 0, OriginalWidth, OriginalHeight));\n\n                if (VideoImporter == 0)\n                    dc.DrawVideo(_upperPlayer, new Rect(0, 0, _upperPlayer.NaturalVideoWidth, _upperPlayer.NaturalVideoHeight));\n                else\n                {\n                    //Capture image from FFmpeg.\n                    var image = await GetScreencap(false);\n\n                    //Render image in target.\n                    if (image != null)\n                        dc.DrawImage(image, new Rect(0, 0, OriginalWidth, OriginalHeight));\n                }\n            }\n\n\n            lock (_lock)\n                UpperSelectionImage.Render(drawingVisual);\n\n            OnPropertyChanged(nameof(UpperSelectionImage));\n        }\n        catch (TimeoutException t)\n        {\n            LogWriter.Log(t, \"Impossible to get the preview of the video.\");\n            Dispatcher.CurrentDispatcher.Invoke(() => ShowErrorRequested?.Invoke(this, LocalizationHelper.Get(\"S.ImportVideo.Timeout\")));\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Impossible to get the preview of the video.\");\n            Dispatcher.CurrentDispatcher.Invoke(() => ShowErrorRequested?.Invoke(this, LocalizationHelper.Get(\"S.ImportVideo.Error\")));\n        }\n    }\n\n    private async Task<BitmapSource> GetScreencap(bool lower = true, int trial = 0)\n    {\n        var endTime = VideoImporter == 1 && MaximumMilliseconds == EndMillisecond ? EndMillisecond - 100 : EndMillisecond;\n        var time = TimeSpan.FromMilliseconds(lower ? StartMillisecond : endTime); //01:23:45\n\n        var process = new ProcessStartInfo(UserSettings.All.FfmpegLocation)\n        {\n            Arguments = $\" -ss {time:hh\\\\:mm\\\\:ss\\\\.fff} -i \\\"{VideoPath}\\\" -vframes 1 -hide_banner -c:v png -f image2pipe -\",\n            CreateNoWindow = true,\n            ErrorDialog = false,\n            UseShellExecute = false,\n            RedirectStandardError = true,\n            RedirectStandardOutput = true\n        };\n\n        using var pro = Process.Start(process);\n\n        if (pro == null)\n            throw new Exception(\"It was not possible to start the FFmpeg process.\") { HelpLink = process.Arguments };\n\n        var bitmap = new BitmapImage();\n        bitmap.BeginInit();\n        bitmap.StreamSource = pro.StandardOutput.BaseStream;\n        bitmap.CacheOption = BitmapCacheOption.OnLoad;\n        bitmap.EndInit();\n\n        await Task.Factory.StartNew(() => pro.WaitForExit(5000));\n\n        if (bitmap.Height < 2 || bitmap.Width < 2)\n        {\n            var error = pro.StandardError.EndOfStream ? \"\" : await pro.StandardError.ReadToEndAsync();\n\n            await Task.Delay(500);\n\n            if (trial > 7)\n                throw new TimeoutException(\"Too many attempts in getting the frame preview. \" + error);\n\n            return await GetScreencap(lower, trial + 1);\n        }\n\n        return bitmap;\n    }\n\n    private void FaultLoading(Exception ex = null)\n    {\n        IsLoading = false;\n        WasLoaded = false;\n\n        if (ex != null)\n            ShowErrorRequested?.Invoke(this, ex);\n    }\n\n    public async Task Import()\n    {\n        HideErrorRequested?.Invoke(this, EventArgs.Empty);\n\n        GC.Collect();\n\n        //MediaPlayer.\n        if (VideoImporter == 0)\n        {\n            //Calculate all positions.\n            for (var span = StartMillisecond + Delay; span <= EndMillisecond; span += Delay)\n                _positions.Enqueue(TimeSpan.FromMilliseconds(span));\n\n            ImportProgress = 0;\n            MaximumProgress = _positions.Count;\n            Frames = [];\n            IsImporting = true;\n\n            _lowerPlayer.Changed -= LowerPlayer_Changed;\n            _upperPlayer.Changed -= UpperPlayer_Changed;\n            _wasPreviewChangeSubscribed = false;\n\n            _lowerPlayer.Changed += CapturePlayer_Changed;\n            _wasImportChangeSubscribed = true;\n\n            //Resize the rendering to fit in the selected scale. With this code, the preview stops working.\n            LowerSelectionImage = new RenderTargetBitmap(TargetWidth, TargetHeight, 96, 96, PixelFormats.Pbgra32);\n\n            ImportAndSeek();\n            return;\n        }\n\n        //Import via ffmpeg.\n        await GetMultipleScreencaps();\n    }\n\n    private async Task GetMultipleScreencaps()\n    {\n        var start = TimeSpan.FromMilliseconds(StartMillisecond);\n        var end = TimeSpan.FromMilliseconds(EndMillisecond);\n        var folder = Path.Combine(RootFolder, \"Import\");\n        var path = Path.Combine(folder, $\"%0{FrameCount.ToString().Length + 1}d.png\");\n\n        try\n        {\n            //Create temporary folder.\n            if (Directory.Exists(folder))\n                Directory.Delete(folder, true);\n\n            Directory.CreateDirectory(folder);\n\n            ImportProgress = 0;\n            MaximumProgress = FrameCount;\n            Frames = [];\n            IsImporting = true;\n\n            var info = new ProcessStartInfo(UserSettings.All.FfmpegLocation)\n            {\n                Arguments = $\" -i \\\"{VideoPath}\\\" -progress pipe:1 -vf scale={TargetWidth}:{TargetHeight} -ss {start:hh\\\\:mm\\\\:ss\\\\.fff} -to {end:hh\\\\:mm\\\\:ss\\\\.fff} -hide_banner -flush_packets 1 -stats_period 1 -c:v png -r {Framerate} -vframes {FrameCount} \\\"{path}\\\"\",\n                CreateNoWindow = true,\n                ErrorDialog = false,\n                UseShellExecute = false,\n                RedirectStandardOutput = true,\n                RedirectStandardError = true\n            };\n\n            _process = new Process();\n            _process.OutputDataReceived += (sender, e) =>\n            {\n                if (string.IsNullOrEmpty(e.Data))\n                    return;\n\n                var parsed = e.Data.Split('=');\n\n                switch (parsed[0])\n                {\n                    case \"frame\":\n                        ImportProgress = Convert.ToDouble(parsed[1]);\n                        break;\n\n                    case \"progress\":\n                        if (parsed[1] == \"end\")\n                            GetFiles(folder);\n                        break;\n                }\n            };\n\n            _process.ErrorDataReceived += (sender, e) =>\n            {\n                if (string.IsNullOrEmpty(e.Data))\n                    return;\n                \n                var match = Regex.Match(e.Data, @\"frame=\\s*(\\d+)\");\n\n                if (match.Success)\n                {\n                    var current = Convert.ToDouble(match.Groups[1].Value);\n\n                    ImportProgress = current;\n\n                    if (Math.Abs(current - FrameCount) < double.Epsilon)\n                        GetFiles(folder);\n                }\n            };\n            \n            _process.StartInfo = info;\n            _process.Start();\n            _process.BeginOutputReadLine();\n            _process.BeginErrorReadLine();\n            \n            await _process.WaitForExitAsync();\n\n            if (_process == null)\n                return;\n\n            var error = await _process?.StandardError?.ReadToEndAsync();\n\n            if (!string.IsNullOrWhiteSpace(error))\n                throw new Exception(\"Error while capturing frames with FFmpeg.\") { HelpLink = $\"Command:\\n\\r{info.Arguments}\\n\\rResult:\\n\\r{error}\" };\n        }\n        catch (Exception e)\n        {\n            LogWriter.Log(e, \"Error importing frames with FFmpeg\");\n\n            IsImporting = false;\n\n            Dispatcher.CurrentDispatcher.Invoke(() => ShowErrorRequested?.Invoke(this, LocalizationHelper.Get(\"S.ImportVideo.Error\") + Environment.NewLine + e.Message + Environment.NewLine + e.HelpLink));\n        }\n    }\n\n    private void ImportAndSeek()\n    {\n        if (_cancelled)\n            return;\n\n        lock (_lock)\n        {\n            var drawingVisual = new DrawingVisual();\n\n            using (var dc = drawingVisual.RenderOpen())\n                dc.DrawVideo(_lowerPlayer, new Rect(0, 0, TargetWidth, TargetHeight));\n\n            _lowerSelectionImage.Render(drawingVisual);\n\n            //Create a unique file name.\n            string fileName;\n            do\n                fileName = $\"{Frames.Count} {Guid.NewGuid():N}.png\";\n            while (File.Exists(Path.Combine(RootFolder, fileName)));\n\n            //Save the file to disk.\n            using (var fileStream = new FileStream(Path.Combine(RootFolder, fileName), FileMode.Create))\n            {\n                var encoder = new PngBitmapEncoder();\n                encoder.Frames.Add(BitmapFrame.Create(_lowerSelectionImage));\n                encoder.Save(fileStream);\n            }\n            \n            Frames.Add(new Frame\n            {\n                Delay = Delay,\n                Path = Path.Combine(RootFolder, fileName)\n            });\n        }\n        \n        if (!_cancelled)\n            SeekNextFrame();\n    }\n\n    private void SeekNextFrame()\n    {\n        //If more frames remain to capture...\n        if (_positions.Count > 0)\n        {\n            //Seek to next position.\n            _lowerPlayer.Position = _positions.Dequeue();\n\n            ImportProgress = MaximumProgress - _positions.Count;\n            return;\n        }\n\n        _lowerPlayer.Changed -= CapturePlayer_Changed;\n        _wasImportChangeSubscribed = false;\n        _lowerPlayer.Close();\n\n        GC.Collect();\n\n        CloseRequested?.Invoke(this, EventArgs.Empty);\n    }\n\n    private void GetFiles(string folder)\n    {\n        if (!IsImporting)\n            return;\n\n        IsImporting = false;\n\n        foreach (var file in Directory.GetFiles(folder, \"*.png\"))\n        {\n            //Create a unique file name.\n            string newName;\n            do\n                newName = Path.Combine(RootFolder, $\"{Frames.Count} {Guid.NewGuid():N}.png\");\n            while (File.Exists(newName));\n\n            File.Copy(file, newName);\n\n            Frames.Add(new Frame\n            {\n                Delay = Delay,\n                Path = newName\n            });\n        }\n        \n        CloseRequested?.Invoke(this, EventArgs.Empty);\n    }\n\n    public async Task Cancel()\n    {\n        _cancelled = true;\n\n        //MediaPlayer.\n        _process?.Kill();\n        await Task.Delay(200);\n\n        Frames?.Clear();\n        GC.Collect();\n    }\n\n    public void RemoveImportFiles()\n    {\n        try\n        {\n            var path = Path.Combine(RootFolder, \"Import\");\n\n            if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path))\n                Directory.Delete(path, true);\n        }\n        catch (Exception ex)\n        {\n            LogWriter.Log(ex, \"Impossible to delete imported frames.\");\n        }\n    }\n\n    //Events.\n    private void MediaPlayer_MediaOpened(object sender, EventArgs e)\n    {\n        _ = WhenBothLoaded();\n    }\n\n    private void MediaPlayer_MediaFailed(object sender, ExceptionEventArgs e)\n    {\n        FaultLoading(e.ErrorException);\n    }\n\n    private void LowerPlayer_Changed(object sender, EventArgs e)\n    {\n        _ = RenderPreview();\n    }\n\n    private void UpperPlayer_Changed(object sender, EventArgs e)\n    {\n        _ = RenderPreview(false);\n    }\n\n    private void CapturePlayer_Changed(object sender, EventArgs e)\n    {\n        ImportAndSeek();\n    }\n    \n    public void Dispose()\n    {\n        _lowerPlayer.Close();\n        _upperPlayer.Close();\n\n        _process?.Dispose();\n    }\n}\n"
  },
  {
    "path": "ScreenToGif.ViewModel/WebcamViewModel.cs",
    "content": "using ScreenToGif.Domain.Models;\n\nnamespace ScreenToGif.ViewModel;\n\npublic class WebcamViewModel : RecorderViewModel\n{\n    private List<VideoSource> _videoSources = new();\n    private VideoSource _selectedVideoSource = null;\n    private MediaSource _selectedMediaSource = null;\n        \n    public List<VideoSource> VideoSources\n    {\n        get => _videoSources;\n        set => SetProperty(ref _videoSources, value);\n    }      \n        \n    public VideoSource SelectedVideoSource\n    {\n        get => _selectedVideoSource;\n        set => SetProperty(ref _selectedVideoSource, value);\n    }\n\n    public MediaSource SelectedMediaSource\n    {\n        get => _selectedMediaSource;\n        set => SetProperty(ref _selectedMediaSource, value);\n    }\n}"
  }
]